Rubyでよくある「1〜100までの素数を求める」ってのを書く機会があったので5分で挑戦してみました。
色々アルゴリズムはあるのは知っているのですが、一応単純に高速化とか考えずに配列でチェックしていく方法で実際に書いたコード。
100.times do |n| if (n > 1) ck = Array.new n.times do |i| if (n%i == 0 && i > 1) ck << 1 end end if (ck.find{|v| v == 1} == nil) p n end end end
timesが0から始まるって忘れてたよorz
実際にもう一回uptoにしてやりなおし
1.upto 100 do |n| if (n > 1) ck = Array.new 1.upto(n-1) do |i| if (n%i == 0 && i > 1) ck << 1 end end if (ck.find{|v| v == 1} == nil) p n end end end
Rubyらしく書きたいので、意地でもforは使わない
まぁ偶数でとか、初期値は2からでいいんじゃないか?とかは一応「1〜100」という前提があるのでご愛嬌。
今思ったけど100.times使うと、fizzbuzzで致命的なことに気がついたmax値の100が出てこないじゃないか!
ビジネスでphpばかり書いていてRubyの詳細な部分を忘れている自分にガッカリした。
phpでやるとforeachで廻してarray.findの記述が長くなるし変数に$マークや;を書く時間がもったいなかったのでやらなかったのが本音だったりします。(じゃぁendがいらないpythonがいいのか?)