と、言う「爺さんの主張が通らないような数は「2〜10000」の偶数の中には何個あるか?」っていう問題でした!
#coding: utf-8 #お題 range = 2..10000 #値のチェック def is_collatz(num) val = num * 3 + 1 while val != 1 do if val.even? then val = val / 2 else val = val * 3 + 1 end return true if val == num end return false end #実行 count = 0 range.each{|num| count = num.even? && is_collatz(num) ? count + 1 : count } puts count
私の解答です。
提出後に以下のように書けば「もっと短くなった!」と気付きました・・・。
#coding: utf-8 #お題 range = 2..10000 #値のチェック def is_collatz(num) val = num * 3 + 1 while val != 1 do val = val.even? ? val / 2 : val * 3 + 1 return true if val == num end return false end #実行 count = 0 range.each{|num| count = num.even? && is_collatz(num) ? count + 1 : count } puts count
その後しばらく眺めていて更に気付きました。
これis_collatzじゃなくってis_not_collatzだ!
たぶん正確に書くならこんな感じです。
#coding: utf-8 #お題 range = 2..10000 #値のチェック def is_collatz(num) val = num * 3 + 1 while val != 1 do val = val.even? ? val / 2 : val * 3 + 1 return false if val == num end return true end #実行 count = 0 range.each{|num| count = num.even? && !is_collatz(num) ? count + 1 : count } puts count
最後まで読んでいただきありがとうございます。もしこの記事を気に入って頂けたようであればシェアをお願い致します。非常に励みになります。