【ネタ】アッカーマン関数によるプログラミング言語最速決定戦?
皆さんこんにちは
おげんきですか?私はげんきです。
本日は最速決定戦やります。いやはやC++がはええええとかいいつつ
他の言語どうだっけなんて思う常日頃です。
エントリー
6つの言語で行いました
C++,Java,PHP,Python,Ruby,Javascript
種目
アッカーマン関数の計算
x = 3, y = 9 (以下を参照ください)
計測方法はtimeコマンドを用いた実行方法です。
※アッカーマン関数とは
で構成される再帰的な関数です。
判定方法
timeで計測しました。
ソースコード
C++
#include <iostream> using namespace std; int ack(int m,int n){ if(m == 0) return n + 1; else if(n == 0) return ack(m-1,1); else return ack(m-1,ack(m,n-1)); } int main(void){ int a = ack(3,9); cout << a << endl; }
Java
class Ack{ private int ack(int m,int n){ if(m == 0) return n + 1; else if(n == 0) return ack(m-1,1); else return ack(m-1,ack(m,n-1)); } public static void main(String args[]){ Ack ack = new Ack(); System.out.println(ack.ack(3,9)); } }
PHP
<?php function ack($m,$n){ if($m == 0){ return $n + 1; }else if($n == 0){ return ack($m-1,1); }else{ return ack($m-1,ack($m,$n-1)); } } echo ack(3,9); ?>
Python
import sys def ack(m,n): if m == 0: return n + 1 elif n == 0: return ack(m-1,1) else: return ack(m-1,ack(m,n-1)) if __name__ == '__main__': sys.setrecursionlimit(10000) print ack(3,9)
Ruby
def ack(m,n) if m == 0 then return n + 1 elsif n == 0 then return ack(m-1,1) else return ack(m-1,ack(m,n-1)) end end puts ack(3,9)
Javascript
function ack(m,n){ if(m == 0) return n + 1; else if(n == 0) return ack(m-1,1); else return ack(m-1,ack(m,n-1)); } console.log(ack(3,9));
結果
言語 | user | sys | total |
C++ | 0.01 | 0.00 | 0.01 |
Java | 0.12 | 0.02 | 0.14 |
Php | 1.67 | 0.12 | 1.79 |
Python | 2.66 | 0.14 | 2.80 |
Ruby | 0.91 | 0.25 | 1.22 |
javascript | 0.11 | 0.01 | 0.12 |
感想
最適化したC++はやはり早かった。
Javaもやっぱり早いね、次に来るのがjavascriptというのには少し驚いた。
ウェブで使われに使われまくるだけあってえらく早い、スクリプト言語なのに。
僕の大好きなPythonくんが遅すぎて泣きそう。
Ruby デバッガー binding.pry
皆さんこんにちは
お元気ですか。かきぴーって辛いですね。
さて、今日はRubyのデバッグツールpryこと
binding.pry先生です。実行する時にデバッグモードへと変身を遂げます。
インストール
gem install pry
使い方
require "pry" def add_method(a,b) return a + b end a = 100 + 20 b = 30 + 20 c = a / b d = a * b binding.pry puts a ** b
これを実行すると以下のようになります。
From: /Users/Tereka/Programing/TestCode/Ruby/test_pry.rb @ line 12 : 7: a = 100 + 20 8: b = 30 + 20 9: c = a / b 10: d = a * b 11: => 12: binding.pry 13: 14: puts a ** b [1] pry(main)>
さて、このpry(main)>に続くところにコマンドを打ち込んでいくわけです。
わからなくなればhelpと打てばおkです。
まずは変数の確認、変数は変数を打ち込むと実行できます。また、内部で計算もできます。
[1] pry(main)> a => 120 [2] pry(main)> a * b => 6000
現在のスコープから確認できるメソッドと変数
[5] pry(main)> ls _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_ a b c d
メソッド探し
[1] pry(main)> find-method add_method Object Object#add_method
今回打ったメソッドの一覧
[3] pry(main)> hist 1: find-method add_method 2: help
メソッドを確認したい時
[4] pry(main)> show-source add_method From: test_pry.rb @ line 3: Owner: Object Visibility: private Number of lines: 3 def add_method(a,b) return a + b end
これぐらいあれば十分でしょうか・・・?
自分も人に教えてもらってとても作業が効率化したので、みなさんもよければ使ってください。
Rubyの環境設定(rbenv,ruby)
皆さんこんにちは
お元気ですか。私は元気です。
さて、珍しくRubyについて
Rubyといえば、私は使い道一つしか思い浮かびません。
そう、RoRことRuby on railsです。
そんな、Rubyの設定をしてみましょう
rbenv
rbenvって?
Rubyのバージョンの切り替えに使います。開発チームによってはバージョンを古いまま或いは新しくすることがあるらしいので、容易に切り替えられるよう、rbenvを入れることをお薦めします。
install
brew install rbenv echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile brew install ruby-build brew install rbenv-gemset brew install rbenv-gem-rehash
これで、インストールは終了です。
rbenvの使い方(Rubyのインストール)
rbenv --version rbenv --list rbenv install 2.0.0-p247 rbenv global 2.0.0-p247
好きなバージョンのインストールを行ってください。