Вдохновленный http://xkcd.com/710/, здесь есть код для гольфа.
Задача
Учитывая положительное целое число больше 0, распечатайте последовательность градиента для этого числа.
Последовательность Hailstone
Подробнее см. Wikipedia.
- Если число четное, разделите его на два.
- Если число нечетное, утроьте его и добавьте.
Повторите это с числом, созданным до тех пор, пока оно не достигнет 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
Кроме того, гольф-код должен включать полный ввод и вывод пользователя.