Реализуйте это рекуррентное отношение как функцию или программу, которая вводит и выводит неотрицательное целое число:
F (0) = 0
F (N) = наименьшее целое число больше, чем F (N-1), так что сумма и / или произведение его десятизначных цифр составляет N
N - это вход вашей программы, а F (N) - ее выход.
Для ясности, сумма цифр в числе, подобном 913, равна 9 + 1 + 3 = 13. Произведение 9 × 1 × 3 = 27. Для однозначных чисел сумма и произведение совпадают. Числа, которые содержат 0, конечно, имеют продукт 0.
Результаты через F (70):
N F(N)
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 19
11 29
12 34
13 49
14 59
15 69
16 79
17 89
18 92
19 199
20 225
21 317
22 499
23 599
24 614
25 799
26 899
27 913
28 1147
29 2999
30 3125
31 4999
32 5999
33 6999
34 7999
35 8999
36 9114
37 19999
38 29999
39 39999
40 41125
41 59999
42 61117
43 79999
44 89999
45 91115
46 199999
47 299999
48 311128
49 499999
50 511125
51 699999
52 799999
53 899999
54 911116
55 1999999
56 2111147
57 3999999
58 4999999
59 5999999
60 6111125
61 7999999
62 8999999
63 9111117
64 11111188
65 29999999
66 39999999
67 49999999
68 59999999
69 69999999
70 71111125
Самый короткий код в байтах побеждает. Престижность, если вы можете показать, что ваш код использует некоторые преимущества.
Ответы:
05AB1E ,
2012 байтовСохранено 8 байтов благодаря Osable !
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
µNSDOsP‚¾>å½
. Кажется, работает для случайно выбранных чисел.Mathematica, 71 байт, 68 символов
Еще 4 байта, вот версия, в которой хранятся значения
±n
:С последней версией, прежде чем оценить
±n
,PlusMinus
будет иметь два вниз значения:Теперь, если мы оценим
±20
:Это значительно ускоряет будущие вычисления, поскольку Mathematica больше не будет вычислять значения между
0
и20
рекурсивно. Сэкономленное время становится более драматичным по мереn
увеличения:источник
C #,
155159135 байтовСупер неэффективно, занимает много времени простоN>=14
. Собираюсь найти более эффективное, но более длительное решение.Хорошо, теперь намного лучше, но на 4 байта длиннее. О, хорошо, я могу сделать
N<=50
довольно быстро сейчас. Спасибо @milk за сохранение 24 байта!источник
for(;;)
и foreach наforeach(var c in++i+"")
. -22 байт для заменыint.Parse(c+"")
сc-48
.Pyth -
1817 байтОдин байт сохранен благодаря @Jakube!
Использует сокращение, чтобы сделать рекурсивную вещь.
Тестовый пакет .
источник
sM*FBjT;
также генерирует сумму цифр и произведение и на 1 байт короче.R,
124112 байтСбой при N = 45, потому что R настаивает на записи 10.000 как 1e + 05, что не оценивается
as.numeric()
, это можно исправить, используяas.integer()
по стоимости 12 байтов:В качестве языка статистического программирования R имеет раздражающие многословные способы разбиения чисел на вектор цифр. Тем более, что все должно быть преобразовано обратно из строк в числовые значения явно.
12 байтов сохранено благодаря billywob.
источник
as.double(el(strsplit(c(x,""),"")))
чтобы разбить целое число на вектор из его цифр. Тем не менее, вы все еще сталкиваетесь с проблемой форматирования, но это может быть, как и в вашем ответе,as.integer()
sprintf()
Вместо этого вы также можете использовать для форматирования целое число в строку без конечных нулей напрямуюas.double(el(strsplit(sprintf("%1.f",x),"")))
и пропустить использованиеas.integer()
x=x+1
это гарантированно будет вычислено один раз, потому что на стартеy=F(N-1)
он точно не равенN
.JavaScript (ES6)
1091071059189 байтисточник
JavaScript (ES6), 84
86Редактировать: 2 байта сохранены thx @Arnauld
Test Note выше 50, он будет использовать слишком много вашего процессора, нажмите «Скрыть результаты», чтобы остановить, пока не стало слишком поздно
источник
for(v=n&&f(n-1),p=s=n+1;s&&p-1;)[...++v+''].map(d=>(p/=d,s-=d),p=s=n);v
следует сохранить 2 байта. Я подозреваю, что это может быть сокращено еще немного, но я не мог понять это до сих пор.p /= d
дает точный результат, когдаd
на самом деле является делителемp
. Если я не ошибаюсь, это верно для любогоd <= p <= Number.MAX_SAFE_INTEGER
. Когда мы получим ошибки округления с плавающей запятойp % d != 0
, это должно быть безопасно.eval`1+1`
) (вот почему codegolf.stackexchange.com/a/52204/21348 : прочитайте первый комментарий)Mathematica, 67 байт
Функция, названная
a
. Принимает число в качестве ввода и возвращает число в качестве вывода. Вдохновленный предыдущим решением Mathematica, но использует другой механизм зацикливания.источник
C 240 байт
Попытка использовать некоторые математические свойства последовательности.
источник
PowerShell v3 +, 114 байт
Итеративное решение, в котором нет простого способа превратить число в сумму / произведение его цифр, поэтому оно немного длиннее, чем ответы JavaScript.
Принимает ввод
$n
, устанавливает$i
массив только0
(это коллекцияF()
, и устанавливает значение$l
равно1
(это самое последнееF
). Затем мы выполняем цикл вверх от1
к$n
, каждая итерация выполняетfor
цикл.В
for
условной Loop принимает на$l
ATEST числа, в строке"$l"
, а затем отбрасывает , что в качествеchar
-array, и сохраняет этот массив в переменный темпе$b
. Затем мы получим-join
эти цифры вместе+
и передадим ихiex
(сокращение отInvoke-Expression
и аналогичноeval
). Кроме того, мы также делаем подобное с*
. Эти два числа заключены в скобки и рассматриваются как аргумент массива для-notin
оператора против текущего номера$_
внешнего цикла (т.for
Е. Цикл выполняется до тех пор, пока любой из них+
и*
отличается от него$_
). Телоfor
цикла просто увеличивается$l++
.Как только мы выходим из этого внутреннего
for
цикла, мы добавляем наш$l
новый элемент$i
. Как только мы полностью завершили цикл диапазона, мы просто помещаем его$i[$n]
в конвейер, и вывод неявен.NB - становится довольно медленным для выполнения выше
20
, просто из-за структуры цикла. Например,N=40
на моей машине это занимает около двух минут, и я даже не потрудился на тестированииN>50
.источник
Пайк, 17 байт
Попробуй это здесь!
Или 13 байт неконкурентоспособны
first_n
теперь помещает количество уже найденных предметов плюс один,i
если используется.Попробуй это здесь!
источник
Python 2 , 77 байт
Попробуйте онлайн!
источник
Чудо , 49 байт
Образец соответствия ftw! Использование:
Более читабельно:
Это в основном просто дословная реализация спецификаций.
источник
BASH, 107 байт
со сгибом + паста + до н.
источник
Befunge, 101 байт
Попробуйте онлайн! Но учтите, что когда вы достигнете сороковых, будет очень медленно. Если вы хотите протестировать полный диапазон, вам действительно нужно использовать компилятор Befunge.
объяснение
источник
PHP , 110 байт
Попробуйте онлайн!
источник