(Это может быть довольно классическим, но это мой первый пост здесь, так что я еще не готов к модным вещам)
Последовательность Гудштейна для входного номера определяется следующим образом:
Выберите начальное число n , пусть b = 2 и повторите:
- записи п в heriditary базовой б обозначениях
- заменить все ( b ) s на ( b +1) s в n и вычесть 1
- вывести новую десятичную оценку n
- приращение б
Обозначение наследственной базы - это разложение числа, в котором основание - это большее число. Примеры:
83
в HB3:3^(3+1)+2
226
в HB2:2^(2^(2+1))+2^(2+1)+2
Последовательности Гудштейна всегда заканчиваются на 0 , но сначала они имеют тенденцию довольно быстро увеличиваться , поэтому не требуется выводить полную последовательность.
Задача:
Учитывая введенное число в любом приемлемом формате, ваша задача состоит в том, чтобы вывести последовательность Гудштейна для этого числа, по крайней мере, пока оно не достигнет 10 ^ 25 или 0
Примеры:
Input: 3
Output: 3, 3, 3, 2, 1, 0
Input: 13
Output: 13, 108, 1279, 16092, 280711, 5765998, 134219479, 3486786855, 100000003325, 3138428381103, 106993205384715, 3937376385706415, 155568095557821073, 6568408355712901455, 295147905179352838943, 14063084452067725006646, 708235345355337676376131, 37589973457545958193377292
Input: 38
Output: 38, 22876792454990
Детали:
- Входное число может быть массивом, строкой, целым числом, если оно находится в десятичной базе
- Выход следует по тому же правилу
- Разделение терминов в выводе может быть пробелами, новыми строками или любым разумным разделением
- Как только последовательность становится больше 10 ^ 25, ваша программа может нормально завершиться, выдать ошибку / исключение или продолжить (без ограничений)
- Это код-гольф , поэтому выигрывает самый короткий ответ (в байтах)
- Конечно, стандартные лазейки запрещены
- Python ungolfed рабочий пример здесь
int(q/base.b), q%base.b
нужноq//base.b, q%base.b
(или простоdivmod(q, base.b)
) избегать ошибок с плавающей точкой.Ответы:
Pyth ,
2826 байтТрейлинг новой строки является значительным.
Попробуйте онлайн! (Эта ссылка содержит дополнительные данные, которые
Q
не требуются в текущей версии Pyth.)Как это устроено
Важно, чтобы
y
он был переопределен в каждой итерации цикла, чтобы предотвратить запоминание изменений глобальной переменнойJ
.источник
Haskell , 77 байт
(&2)
является анонимной функцией, принимающейInteger
и возвращающей (потенциально очень длинный) списокInteger
s, используйте as(&2) 13
.Попробуйте онлайн! (обрывает на
10^25
.)Как это устроено
(&2)
начинает последовательность с базы2
.n&b
вычисляет подпоследовательность, начиная с числаn
и базыb
.n<0
, что обычно происходит после шагаn==0
.n
в список, рекурсивно возвращаемый выражением(0?n-1)&(b+1)
.?
является оператором локальной функции.0?n
дает результат преобразованияn
в наследственную базуb
, а затем увеличивает базу повсюду.e
отслеживающей текущий показатель степени.e?n
преобразует числоn*b^e
.0
когдаn==0
.n
на базуb
.(e+1)?div n b
обрабатывает рекурсию для частного и следующего более высокого показателя.mod n b*(b+1)^0?e
обрабатывает остаток (который является цифрой, соответствующей текущему показателю степениe
), приращение основания и преобразует текущий показатель по наследству с0?e
.источник