Треугольное число является числом , которое может быть выражено в виде суммы последовательных положительных целых чисел, начиная с 1. Кроме того, они могут быть выражены с формулой n(n + 1) / 2
, где n
имеет некоторое положительное целое число.
Цифровая цифра аналога номера рассчитывается следующим образом:
- Разбить число на массив его цифр, например
613 => [6 1 3]
- Для каждого числа в массиве вычислите
n
треугольное число;[6 1 3] => [21 1 6]
- Суммируйте результирующий массив;
[21 1 6] => 28
Ваша задача, учитывая целое число n
, многократно вычислять n
цифроугольный аналог, пока результат не станет равным 1, затем вывести все значения, которые были вычислены. Вы можете выводить значения в любом порядке и с необязательным включением исходного числа в начале массива. Это код-гольф, поэтому выигрывает самый короткий код.
Контрольные примеры
23 => 9 45 25 18 37 34 16 22 6 21 4 10 1
72 => 31 7 28 39 51 16 22 6 21 4 10 1
55 => 30 6 21 4 10 1
78 => 64 31 7 28 39 51 16 22 6 21 4 10 1
613 => 28 39 51 16 22 6 21 4 10 1
8392 => 90 45 25 18 37 34 16 22 6 21 4 10 1
11111 => 5 15 16 22 6 21 4 10 1
8592025 => 117 30 6 21 4 10 1
999999999 => 405 25 18 37 34 16 22 6 21 4 10 1
141
и имеетn
цифры. Максимальное значение, которое может иметь его цифроугольный аналог, равно45n
, поэтомуdigi-△(x) ≤ 45n < 45(1+log_10(x))
, и дляx > 141
, мы имеем45(1+log_10(x)) < x
, следовательно,digi-△(x) ≤ x-1
дляx > 141
, и как только мы преодолеем141
предел, хорошо, мы осуществляем грубое доказательство с помощью программ.Ответы:
Шелуха , 6 байт
Попробуйте онлайн!
объяснение
источник
05AB1E ,
65 байтПопробуйте онлайн! Редактировать: 1 байт сохранен благодаря @Emigna. Объяснение:
источник
€
наS
, вы можете пропустить одинO
.L
даже так себя ведет?J,
2019 байтПопробуйте онлайн!
Выводит исходный номер тоже.
объяснение
источник
[:+/
->1#.
мяу!APL (Dyalog) ,
232017 байтов3 байта сохранены благодаря @ngn
Попробуйте онлайн!
Как?
⍵∪⍨
- добавить текущий массив к+/
- сумма∊
- сплющенный⍳¨
- диапазоны каждого⍎¨⍕
- цифра⊃⍵
- предыдущее значение⍣≡
до схождения. Использование∪
(union) гарантирует, что после присоединения первого 1 следующее будет исключено из-за уникальности набора, и массив будет сходиться.источник
1↓
(сначала брось){+/∊⍳¨⍎¨⍕⎕←⍵}⍣≡
не печатая последние 1?Haskell,
514746 байтовПопробуйте онлайн!
Редактировать: @ H.PWiz сохранил байт. Благодарность!
источник
Python 2 , 62 байта
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) ,
4341 байтПопробуйте онлайн!
Как это устроено
Выражение
#.(#+1)/2&@IntegerDigits@#
дает цифру аналог#
. Мы вводимEcho
данные, используем оценку короткого замыкания,&&
чтобы остановить, если мы достигли1
, и в противном случае выполнить рекурсивное преобразование в цифру.-2 байта спасибо Мартину Эндеру за
.
хитрость: нам не нужно использоватьTr
для суммирования цифр, если мы заменим умножение#(#+1)/2
на скалярное произведение#.(#+1)/2
.источник
Tr
:Echo@#>1&�[#.(#+1)/2&@IntegerDigits@#]&
FixedPointList
за исключением того, как это печатает фиксированную точку дважды). Кажется, что это должно было прийти раньше.Wolfram Language (Mathematica) ,
494239 байтСпасибо Мише Лаврову за сохранение 3 байта.
Попробуйте онлайн! (По
++y
какой-то причине TIO нужны круглые скобки . В моей локальной установке Mathematica он работает без них, как и должно.)Печатает каждое значение в отдельной строке с предшествующим
>>
и включает начальный номер.источник
#//.x_:>(y=IntegerDigits@Echo@x).++y/2&
. (... может быть. По какой-то причине TIO это не нравится, но с Mathematica все в порядке?)#//.x_:>(y=IntegerDigits@Echo@x).(++y)/2&
это 41 байт и работает в TIO. Но мой экземпляр Mathematica не считает скобки необходимыми.Ом v2 ,
97 байтПопробуйте онлайн!
объяснение
источник
u
нужно ли?}
не нужно разбивать цифрыСетчатка , 21 байт
Попробуйте онлайн! (Выходные данные отдельных случаев не очень хорошо разделены, но каждый выходной результат заканчивается символом
1
.)Печатает каждый номер в отдельной строке по порядку, включая начальный номер.
объяснение
Это всего лишь некоторая конфигурация программы.
{
делает программный цикл до тех пор, пока он не сможет изменить результат (что происходит, как только мы доберемся до него1
),:
печатает число перед каждой итерацией и;
предотвращает двойную печать окончательного результата в конце программы. ЭтоG
просто мой обычный способ создания неоперационной сцены.Преобразуйте каждую цифру в одинарную и поместите ее в отдельной строке.
Вычислите треугольное число в каждой строке, заменив каждый
1
префиксом. Мы также могли бы использоватьM!&`1+
здесь, что дает нам все суффиксы каждой строки.Подсчитайте все
1
s, которые суммируют все треугольные числа и преобразуют результат обратно в десятичную.источник
Рубин,
60 4742 байта-13 байт от @JustinMariner
-5 байт @GB
Попробуйте онлайн!
источник
[*...]
) и изменить(k+1)
на,-~k
чтобы сохранить в общей сложности 5 байтов: попробуйте онлайн! Кроме того, вы можете сэкономить еще 8, переключившись на анонимную лямбда-функцию: попробуйте онлайн!.map
не может принимать массивы.Befunge-93 , 51 байт
Попробуйте онлайн!
Джеймс Холдернесс умно преобразовал мою программу в 51-байтовую форму. Благодарность!
источник
Пушистый ,
24222117 байтПопробуйте онлайн!
объяснение
источник
Japt ,
1917 байтПринимает ввод как отдельный элемент массива.
Попытайся
источник
R 70 байт
Попробуйте онлайн!
Возвращает также оригинальное значение.
R , 80 байт
Попробуйте онлайн!
Не возвращает оригинальное значение.
источник
Луа , 91 байт
Попробуйте онлайн!
источник
05AB1E ,
2012 байтовСохранено 2 байта благодаря caird coinheringaahing
Попробуйте онлайн!
объяснение
(старая версия)
источник
JavaScript,
6157 байтПопробуйте онлайн!
источник
Python 2 , 69 байт
Попробуйте онлайн!
источник
Древесный уголь , 18 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
постоянный ток , 62 байта
Попробуйте онлайн!
источник
к , 19 байт
Неудивительно, что работает аналогично уже опубликованным решениям APL и J
источник
Желе , 7 байт
Попробуйте онлайн!
DRFSµÐĿ
: Полная программа / монадическая ссылка.ÐĿ
: Цикл до тех пор, пока результаты больше не будут уникальными (если что-то, отличное от 1, произойдет дважды, то данный вход не имеет определенного результата, поскольку он никогда не достигнет 1).D
Преобразование из целого числа в десятичное.R
: Диапазон (1-индексированный). Векторизация.F
: Flatten иS
: Sum (µ
просто создает новую монадическую цепочку)источник
постоянный ток, 31 байт
Функция
m
вычисляет цифроугольную функцию своего входа;f
повторяет это, пока результат не достигнет 1.Обратите внимание, что мы используем входной радиус для извлечения цифр - это означает, что он будет работать в любой базовой системе, а не только в десятичной.
демонстрация
источник
Python 2 , 76 байт
Попробуйте онлайн!
источник
Нейм , 8 байт
Объяснение:
Попробуйте онлайн!
Форматированный вывод
источник
D , 140 байт
Попробуйте онлайн!
источник
PHP, 71 + 1 байт
Запустите как трубу с
-nR
или попробуйте онлайн . (требуется PHP 5.3 или более поздняя версия для оператора Elvis)источник
A?:B
: если A правдива, то A else BДобавить ++ , 32 байта
Попробуйте онлайн!
Не выводит первое значение
Как это устроено
источник
Perl 6 , 36 байт
Попробуйте онлайн!
Включает номер входа в список вывода.
источник