Мультипликативная стойкость
- Умножьте все цифры в числе
- Повторяйте, пока у вас не останется ни одной цифры
Как объяснил Numberphile :
- Numberphile "Что особенного в 277777788888899?"
- Numberphile "Мультипликативная стойкость (дополнительные кадры)"
пример
- 277777788888899 → 2x7x7x7x7x7x7x8x8x8x8x8x8x9x9 = 4996238671872
- 4996238671872 → 4x9x9x6x2x3x8x6x7x1x8x7x2 = 438939648
- 438939648 → 4x3x8x9x3x9x6x4x8 = 4478976
- 4478976 → 4x4x7x8x9x7x6 = 338688
- 338688 → 3x3x8x6x8x8 = 27648
- 27648 → 2x7x6x4x8 = 2688
- 2688 → 2x6x8x8 = 768
- 768 → 7x6x8 = 336
- 336 → 3x3x6 = 54
- 54 → 5x4 = 20
- 20 → 2x0 = 0
Кстати, это текущая запись: наименьшее число с наибольшим количеством шагов.
Гольф
Программа, которая принимает любое целое число в качестве входных данных и затем выводит результат каждого шага, начиная с самого ввода, пока мы не нажмем одну цифру. Для 277777788888899 вывод должен быть
277777788888899
4996238671872
438939648
4478976
338688
27648
2688
768
336
54
20
0
(Подсчет количества шагов оставлен пользователю в качестве упражнения).
Больше примеров
От A003001 :
25
10
0
От A003001, а также:
68889
27648
2688
768
336
54
20
0
Из видео Numberphile :
327
42
8
Таким образом, был вопрос о аддитивной персистенции , но это мультипликативная персистентность. Кроме того, этот вопрос запрашивает количество шагов в качестве вывода, в то время как мне интересно увидеть промежуточные результаты.
Ответы:
Желе , 4 байта
Попробуйте онлайн!
объяснение
В качестве бонуса, вот TIO, который найдет числа с наибольшим количеством шагов для заданного диапазона чисел. Хорошо масштабируется даже на TIO.
источник
TI-BASIC (TI-84),
303231 байт-1 байт благодаря @SolomonUcko!
Вход находится в
Ans
.Выходные данные отображаются в виде запросов на вызов. Трейлинг
Ans
необходим для печати последнего шага.Я признаю, я не думал об этой формуле сам, скорее я нашел это здесь и изменил это, чтобы лучше соответствовать проблеме.
РЕДАКТИРОВАТЬ: После перечитывания проблемы, я понял, что программа должна завершиться, если продукт состоит из одной цифры. Следовательно, 2 байта должны были быть добавлены для учета этого.
Пример:
Объяснение:
Визуальная модель:
Ans
начинается как125673
.Эта модель охватывает только логику умножения цифр; все остальное легче понять.
Примечания:
TI-BASIC - это токенизированный язык. Количество символов не равно количеству байтов.
10^(
это этот один байт маркера .Эта программа не обеспечивает правильную последовательность продуктов с целыми числами длиной более 14 цифр из-за ограничений десятичной точности на калькуляторах TI.
источник
10^(
наружуseq(
и пропустив закрывающую скобку?К (нгн / к) , 9 байт
Попробуйте онлайн!
{
}\
продолжайте применять функцию в фигурных скобках, пока последовательность не сходится$x
отформатировать аргумент в виде строки (список символов).'
оценивать каждый (другие диалекты k требуют двоеточия,.:'
)*/
раз, то есть продуктисточник
dzaima / APL ,
1411 байтовПопробуйте онлайн!
источник
R , 59 байт
Попробуйте онлайн!
Так как
print
invisibly
возвращает входные данные, мы можем использоватьprint(n)
внутриwhile
цикла для имитацииdo-while
цикла. Это вдохновлено одним из моих советов для игры в гольф в R .Заголовок помогает предотвратить печать больших чисел в научной записи.
источник
05AB1E ,
74 байтаПопробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Wolfram Language (Mathematica) , 47 байтов
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) , 45 байт
Попробуйте онлайн!
источник
Echo
.Perl 6 , 23 байт
Попробуйте онлайн!
источник
Python 2 ,
4643 байта-3 благодаря xnor (цепное сравнение)
Попробуйте онлайн!
источник
>
вместоand
.PowerShell , 54 байта
Попробуйте онлайн!
Итерационный метод, который сначала записывает входной аргумент, затем преобразует его в строку и передает в массив символов. Этот массив объединяется одиночными звездочками и выполняется как команда с псевдонимом выражения invoke. Так как это записывает начальный номер до последнего числа больше 0 (20, в данном тестовом сценарии), я добавляю
$a
окончание к концу для вывода.источник
C # (интерактивный компилятор Visual C #) ,
797468 байтЯ стараюсь держаться подальше от рекурсии в C # из-за того, как долго объявление метода, но в этом случае оно экономит по сравнению с циклом.
Попробуйте онлайн!
источник
PHP , 63 байта
Итерационная версия, вызов с
php -nF
вводом изSTDIN
.Попробуйте онлайн!
PHP ,
7271 байтПопробуйте онлайн!
Рекурсивная версия, как функция.
Ввод: 277777788888899
Вход: 23
источник
Python 2 ,
616259 байтПопробуйте онлайн!
-3 байта, благодаря Джонатану Аллану
источник
int.__mul__
на три байта меньшеlambda a,b:a*b
f(reduce(int.__mul__,map(int,`n`)))
чтобыf(eval('*'.join(`n`)))
сохранить 13 байтов.Perl 5 (
-n
-M5.01
),323025 байт25 байт
30 байт
32 байта
источник
-lpF//
-lpF//
, обновлениеMathGolf ,
910 байтПопробуйте онлайн!
Теперь он правильно обрабатывает входные данные, которые состоят из одной цифры. Не идеально, но по крайней мере это правильно.
объяснение
источник
Юлия 0,7 ,
3633 байтаПопробуйте онлайн!
Спасибо H.PWiz за -3 байта.
источник
[n;f(prod(digits(n)))]
JavaScript (ES6), 45 байт
Возвращает массив целых чисел.
Попробуйте онлайн!
источник
PowerShell , 51 байт
Попробуйте онлайн!
источник
APL (NARS), 19 символов, 38 байтов
контрольная работа:
источник
Haskell, 45 байт
Попробуйте онлайн!
источник
J , 16 байт
Попробуйте онлайн!
источник
Рубин ,
383534 байтаПопробуйте онлайн!
1 байт, сохраненный G B.
источник
Japt
-R
, 9 байтУжасно неэффективно - даже не пытайтесь запустить первый контрольный пример!
Попробуй
источник
Брахилог , 7 байт
Попробуйте онлайн!
объяснение
источник
JavaScript (Babel Node) , 46 байт
Попробуйте онлайн!
JavaScript (Babel Node) , 44 байта
Если вход может быть принят как строка
Попробуйте онлайн!
источник
PowerShell ,
6459 байтПопробуйте онлайн!
Итерационный метод. Принимает ввод и сохраняет его
$a
, затем входит вfor
цикл, пока длина$a
составляет два или более (то есть, это больше, чем9
). Внутри цикла мы выводим$a
и затем пересчитываем его, конвертируя его вt
oCharArray
,join
объединяя его с*
, и затемiex
(сокращенноInvoke-Expression
и аналогичноeval
). Как только мы выходим из цикла, у нас остается одна цифра для печати, поэтому мы$a
снова помещаем ее в конвейер.-5 байт благодаря KGlasier.
источник
9-lt$a
вместо того,$a.length-1
чтобы сохранить 5 байтов. И если вы все время не играете на струнных, вы можете отрезать приличный кусок. Проверьте мою попытку PowerShell, если хотите!Древесный уголь , 13 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Напечатайте ввод в первый раз.
Повторите, пока длина ввода не 1.
Замените вход цифровым произведением, приведенным к строке.
Напечатайте ввод в новой строке.
источник
Сетчатка , 24 байта
Попробуйте онлайн! Объяснение:
Печатайте текущее значение в отдельной строке в начале каждого цикла, пока оно не перестанет изменяться, и не печатайте неизменное значение дважды. Оцените текущее значение в конце каждого цикла.
Добавьте
*
после каждой цифры.Завершите преобразование ввода в выражение, которое соответствует цифровому продукту.
Для справки, Retina может сделать это в одну строку (25 байт):
источник
C (gcc) , 58 байт
Попробуйте онлайн!
Итерационный подход оказывается на 1 байт короче.
C (gcc) ,
6159 байт (рекурсивно)Попробуйте онлайн!
Кажется, что рекурсия короче, чем итерация для печати и шага ...источник