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
また、コードゴルフには完全なユーザー入力と出力が含まれている必要があります。