( Связано )
Дано целое число n > 1
:
1) Построить диапазон чисел n, n-1, n-2, ... 3, 2, 1
и вычислить сумму.
2) Возьмите отдельные цифры этого числа и рассчитать произведение.
3) Возьмите отдельные цифры этого числа и рассчитайте сумму.
4) Повторяйте шаги 2 и 3, пока достичь одной цифры. Эта цифра является результатом.
Первые двадцать членов последовательности приведены ниже:
3, 6, 0, 5, 2, 7, 9, 2, 7, 9, 1, 9, 0, 0, 9, 6, 7, 0, 0, 6
Примечание: эта последовательность НЕ в OEIS.
I / O и правила
- Числа быстро становятся очень большими, поэтому решение должно иметь возможность обрабатывать входные числа до 100 000 без сбоев (хорошо, если ваш код может справиться с этим).
- Вход и выход могут быть заданы любым удобным способом .
- Допустимы либо полная программа, либо функция. Если функция, вы можете вернуть вывод, а не распечатать его.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
Примеры
n output
1234 9
3005 3
5007 5
9854 8
75849 8
100000 0
code-golf
sequence
number-theory
AdmBorkBork
источник
источник
n
. Размещенное решение должно работать доn = 100000
.Numbers will get very large quickly
нет, это не такОтветы:
Python 2 ,
7772716260 байтСпасибо @xnor за 2 байта!
Попробуйте онлайн!
источник
repeat until you reach a single digit
?236172
; и это единственный ниже 1 миллиона.05AB1E , 7 байтов
Попробуйте онлайн!
Exlpanation
источник
Желе , 8 байт
Попробуйте онлайн!
Полная программа (возвращает одноэлементный массив, содержащий результат, но скобки не отображаются в STDOUT).
источник
MATL ,
1513 байтВ честь языка месяца :
Попробуйте онлайн!
Я не думаю, что есть более простой способ получить цифры числа, чем преобразовать число в строку
V
, затем транспонировать его!
и преобразовать этот вертикальный вектор обратно в числовойU
.Сохранено 2 байта благодаря самому Создателю 1 ! Я забыл неявный конец, то есть мог удалить
]
, и вместо того, чтобы сравнивать количество элементов с1
, я мог просто уменьшить это значение и использовать его как логическое значение напрямую.Итак, объяснение выглядит так:
1 ... из MATL, Луис Мендо.
источник
JavaScript (ES6), 60 байт
Попробуйте онлайн!
комментарии
Альтернативная версия, 59 байт (не конкурирует)
Нерекурсивная версия, которая работает только для n <236172 . (Он охватывает запрошенный диапазон, но не может считаться допустимым универсальным алгоритмом.)
Попробуйте онлайн!
источник
Number.MAX_SAFE_INTEGER ** 0.5 ~= 94906265
.Haskell ,
7271 63 байтаСпасибо @BMO за байт и @nimi за 8 байт!
Попробуйте онлайн!
источник
Stax ,
141310 байтЗапустите и отладьте его
Было довольно весело сделать. Интересно, есть ли более краткий способ сделать сравнение в конце.
объяснение
-1 байт благодаря овсу
-3 байта благодаря Скрублу
источник
R ,
152 130109 байтПопробуйте онлайн!
@Giuseppe нашел
2142 байта с различными R- объектами, к которым я еще не привык, а также со способом получения цифр числа без принуждения к строке и назад и с меньшим количеством байтов!options(scipen=9)
этотребуется для случая 9854 для старой функции, потому что сцена первого продукта заканчивается как 80000, который печатает R как 8e + 05.источник
scipen
: попробуйте онлайн ! обратите внимание,max(0,log10(x))
что еслиx=0
, то,log10(0)=-Inf
что вызывает ошибку.Pyth , 11 байт
Попробуй это здесь!
источник
Древесный уголь , 18 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Суммируйте целые числа до входных данных.
Пока результат больше 9, возьмите сумму цифр с произведением цифр.
Приведите результат в строку и неявно напечатайте его.
источник
Gaia , 8 байт
Попробуйте онлайн!
Старое объяснение (перед исправлением ошибки, по вине Гайи ИМО: P):
Спас 1 байт благодаря Денису .
источник
┅⟨ΣΠ⟩°
сохраняет байт.4
0
результатов[]
по какой-то причине :(F #, 175 байт
Попробуйте онлайн!
Единственное предостережение для функции заключается в том, что входное значение должно иметь тип
uint64
.Разоблаченный это немного похоже на это:
Функция
d n
преобразует числоn
в свои составляющие цифры. Сначала он преобразуется в строку, а затем получает каждый символ в строке. Затем каждый символ должен быть преобразован обратно в строку, иначе символы будут преобразованы в их значения ASCII вместо их «реальных» значений.c n
Функция является основной функцией, с вn
качестве начального значения. В этой функцииr
наша текущая ценность.while
Цикл выполняет следующие действия :r
в составляющие цифры (d r
).Seq.reduce
который берет функцию с накопленным значением (a
) и следующим значением в sequence (x
) и в этом случае возвращает продукт. Начальное значение является первым элементом в последовательности.d
).r
.источник
Befunge, 136 байт
Вы можете попробовать это здесь .
Хотя не все переводчики имеют достаточно большой размер ячейки, он работает с небольшими числами практически для любого человека. Для большего числа
n
вам может понадобиться переводчик, как BefunExec .источник
Gol> <> ,
3533 байтаПопробуйте онлайн!
-2 байта от Джо Кинга.
Широкое использование функций и неявных бесконечных циклов.
Пример полной программы и как она работает
источник
Japt,
161413 байтПопытайся
объяснение
источник
Шелуха , 7 байт
Попробуйте онлайн!
источник
PHP 7, 89 байт
Запустите как трубу с
-r
или попробуйте онлайн .+
приведение к int,~
чтобы работать так, как хотел.for()
вместоdo ... while()
.В более старом PHP требуется еще один байт:
for($s=str_split,$a=...;$a>9;)$a=array_sum($s(...));
(Если
str_split
вообще не присвоить переменную, тратится еще один байт.)источник
Perl 6 , 49 байт
Попробуйте онлайн!
источник
[*](.comb).comb
вместо([*] .comb).comb
Tcl , 118 байт
Попробуйте онлайн!
источник
PowerShell Core ,
91 10193 байтаПопробуйте онлайн!
Немного растянулся ...
Первыми шагами было разделение целых чисел на цифры - это делалось путем разбиения целого числа на массив символов
строк. После этого вставьте операнд, а затем оцените строку как команду. Затем необходимо выполнить цикл множественного добавления, пока ввод не станет одной цифрой.iex
это псевдоним, дляInvoke-Command
которого вычисляется строка, переданная в первую позицию параметра.Редактировать: по запросу @AdmBorkBork я добавил заголовок функции к счетчику байтов. Кроме того, я немного подсчитал и понял, что верхняя граница числа итераций такова
< log log 10^6 < log 6 < 2
, что сохранил еще шесть байтов.Изменить x2: @AdmBorkBork нашел более краткий способ преобразования целого числа в математическое выражение, а затем предложил добавить его в строку
iex
. Это сэкономило 8 байтов. Спасибо!источник
Function F($a){ }
в ваш счетчик байтов. Тем не менее, вы должны быть в состоянии сохранить некоторые использования[char[]]
вместо-split''-ne''
, я думаю.[char[]]1234=Ӓ
, который является недействительным; Я мог бы заставить это работать, но это не могло бы быть очевидным только сейчас. Спасибо за предложение![char[]]"$o"
и|iex
скорее чемiex( )
.Perl 5
-p
, 61 байтПопробуйте онлайн!
источник
Рубин , 57 байт
Попробуйте онлайн!
источник
Java 8, 129 байт
Попробуйте онлайн.
Объяснение:
источник
Юлия 0,6 , 56 байт
Попробуйте онлайн!
Довольно просто: вычислите
(n+1)n÷2
сумму из 1..n, проверьте, является ли это однозначным числом (>9
), если нет, попробуйте еще раз с k, установленным на сумму цифр произведения цифр k, иначе верните k.источник