【ruby】twitterに投稿する。【初心者】
mokabuu
mokabuu.com

と、言う「爺さんの主張が通らないような数は「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
その後しばらく眺めていて更に気付きました。
たぶん正確に書くならこんな感じです。
#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
[adsense]