Число находится в упрощенной форме Гудштейна-b, если оно написано как
b + b + ... + b + c, 0 < c ≤ b
Упрощенная последовательность чисел Гудштейна начинается с записи числа в упрощенной форме Гудштейна с базой 1, затем заменяет все 1 на 2 и вычитает 1. Перепишите результат в упрощенной форме Гудштейна с базой 2, затем замените все 2 на 3 и вычтите 1 и т.д., пока не достигнете 0.
Ваша программа должна взять положительный целочисленный ввод и вывести / распечатать последовательность Goodstein и завершиться. Ваша программа должна обрабатывать числа меньше 100, хотя она может не завершиться в разумные сроки.
Например, если ввести 3 в качестве входных данных, ваша программа должна вывести (правая часть просто пояснение)
1 + 1 + 1 | 3 = 1 + 1 + 1
2 + 2 + 1 | Change 1's to 2's, then subtract 1. (2 + 2 + 2 - 1 = 2 + 2 + 1)
3 + 3 | 3 + 3 + 1 - 1 = 3 + 3
4 + 3 | 4 + 4 - 1 = 4 + 3
5 + 2 | 5 + 3 - 1 = 5 + 2
6 + 1 | 6 + 2 - 1 = 6 + 1
7 | 7 + 1 - 1 = 7
7 | 8 - 1 = 7
6 | Numbers are now lower than the base, so just keep subtracting 1.
5 |
4 |
3 |
2 |
1 |
0 | End
Интервал не имеет значения.
Критерий победы:
Это код-гольф . Самый короткий код выигрывает.
Ответы:
05AB1E , 19 байтов
Также может быть переставлен как
>Å1[ND>:`Ž<)0KD'+ý,
Попробуйте онлайн!
объяснение
источник
Python 2,
7774 байта-3 байта благодаря Линн
Попробуйте онлайн!
Легко работает до n = 100 (хотя вывод слишком длинный, чтобы полностью показать tio).
источник
n=input()
b=1
while n:…
n+=n/b-1;b+=1
. 74 байтаwhile
следующий a;
. Я предполагаю, что это потому, что если строка начинается сwhile
каждого следующего оператора (разделенного точками с запятой), то рассматривается в рамках диапазона while, и поведение будет неоднозначным или, по крайней мере, несколько непрозрачнымPyth , 29 байт
Попробуй это здесь!
источник
Mathematica, 123 байта
Попробуйте онлайн!
источник
Python 3, 155 байт
Это может быть переформатировано в
источник
1+1+...
и отмечаете, что ваша программа должна обрабатывать любые положительные целочисленные значения.+
.-~x
имеет то же значение, что иx+1
, но вам не нужно заключать его в скобки, так как унарный-
(отрицание) и унарный~
(побитовое отрицание) имеют более высокий приоритет, чем*
. В вашем случае[1]*-~n
равно[1]*(n+1)
.Javascript ES6, 121 символ
источник
Perl 5 , 71 байт
Попробуйте онлайн!
источник