http://xkcd.com/710/にインスパイアされたコード ゴルフです。
チャレンジ
0 より大きい正の整数を指定すると、その数値の雹のシーケンスを出力します。
ヘイルストーン シーケンス
詳細については、ウィキペディアを参照してください。
- 偶数の場合は2で割ります。
- 奇数なら3倍にして1足すればいい。
これを出た数だけ1になるまで繰り返す(1以降続くと の無限ループに入る1 -> 4 -> 2 -> 1...
)
コードで説明するのが最善の方法である場合もあるので、ウィキペディアからいくつか引用します
function collatz(n)
show n
if n > 1
if n is odd
call collatz(3n + 1)
else
call collatz(n / 2)
このコードは機能しますが、追加の課題を追加しています。プログラムは、スタック オーバーフローに対して脆弱であってはなりません。したがって、反復または末尾再帰のいずれかを使用する必要があります。
また、大きな数を計算でき、言語にまだ実装されていない場合のボーナスポイント。(または、固定長整数を使用して大きな数のサポートを再実装する場合)
テストケース
Number: 21
Results: 21 -> 64 -> 32 -> 16 -> 8 -> 4 -> 2 -> 1
Number: 3
Results: 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
また、コード ゴルフには、完全なユーザー入力と出力が含まれている必要があります。