質問の場合の数の問題を解くPythonプログラムをRubyに翻訳してみた。

 質問の場合の数の問題を解くPythonプログラムRubyに翻訳してみました。(^_^;
 ちなみに、このプログラムを例にすると、Rubyのいいとこは、Pythonでは、forの終値を「6+1」にしなければならないのですが、Rubyでは、forの終値を「6」とダイレクトに指定できるとこなどで、いやなとこは、「.abs」のとこ。この他、たとえば、「gcd」なども、Rubyのように、「n1.gcd(n2)」より、Pythonのように「gcd(n1,n2)」の方が良いです。なぜならば、直感的に、n1とn2には同格な感じがするので。(^_^;
 一方、Pythonは、しまりがない感じがします。Rubyのように、「end」などで区切りを明示した方がいい感じです。個人的に「#end」を付ければ済むことですが。(^_^;
 Pythonは、BASIC的で関数的な感じがして、Rubyは、C++Pascal的でオブジェクト指向的な感じがします。やはり、RubyPythonも一長一短で、好みが分かれるところでしょう。(^_^;

●Outcomes.rb

# Outcomes.rb
puts "Q.1)"
tm=Time.now  # Timer Start
cnt=0
p=["A","B","C","D"]
p.permutation(4) do |a,b,c,d|
  s=a+b+c+d    # s="#{a}#{b}#{c}#{d}"
  if (s.index("A")-s.index("B")).abs==1 then
    cnt+=1
    print "[%2d] : %s\n"%[cnt,s] 
  end
end
tm=Time.now-tm  # Timer Stop
print "Runtime : %.3f [sec]\n"%tm

puts "Q.2)"
tm=Time.now  # Timer Start
cnt=0
for a in 1..6 do
  for b in 1..6 do
    if (10*a+b)%8==0 then
      cnt+=1
      print "[%2d] : %d\n"%[cnt,10*a+b]
    end
  end
end
tm=Time.now-tm  # Timer Stop
print "Runtime : %.3f [sec]\n"%tm

●実行結果

Q.1)
[ 1] : ABCD
[ 2] : ABDC
[ 3] : BACD
[ 4] : BADC
[ 5] : CABD
[ 6] : CBAD
[ 7] : CDAB
[ 8] : CDBA
[ 9] : DABC
[10] : DBAC
[11] : DCAB
[12] : DCBA
Runtime : 0.001 [sec]
Q.2)
[ 1] : 16
[ 2] : 24
[ 3] : 32
[ 4] : 56
[ 5] : 64
Runtime : 0.000 [sec]

※参考URL
http://q.hatena.ne.jp/1296542184
●文字列操作の比較表: Ruby, Python, JavaScript, Perl, C++ - bkブログ
http://0xcc.net/blog/archives/000137.html
●配列操作の比較表: Ruby, Python, JavaScript, Perl, C++ - bkブログ
http://0xcc.net/blog/archives/000043.html
●プログラム用例 - 日時 - 実行時間計測
http://atomic.jpn.ph/prog/datetime/timing.html

たのしいRuby 第3版

たのしいRuby 第3版

Ruby逆引きハンドブック

Ruby逆引きハンドブック