ruby

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

mokabuu

問題

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

[adsense]

Xからの読者コメントをお待ちしています。
ブログ更新の励みになります!
スポンサーリンク

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
mokabuu
mokabuu
ブログ管理人
2014年1月からmokabuu.comを運営しております。現在10年間で老朽化したサイトをリフォーム中です(2025/1〜)。
記事URLをコピーしました