【ruby】改訂版・コラッソの予想を解いてみた


問題

と、言う「爺さんの主張が通らないような数は「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

最後まで読んでいただきありがとうございます。もしこの記事を気に入って頂けたようであればシェアをお願い致します。非常に励みになります。


コメントを残す