Понедельник Мини-Гольф: серия коротких вопросов о код-гольфе , публикуемых (надеюсь!) Каждый понедельник.
(Извините, я снова опоздал; я был вдали от своего компьютера практически весь вчера и сегодня.)
Американские программисты (особенно программисты) наверняка любят произвольные целочисленные последовательности. У нас даже есть целый сайт, посвященный этим последовательностям, который в настоящее время насчитывает около 200 000 записей. В этой задаче мы будем реализовывать еще один набор этих последовательностей.
Вызов
Ваша задача - написать программу или функцию, которая принимает целое число N и выводит последовательность из 10 основных чисел, где каждое следующее целое число определяется следующим образом:
- Начните с 1.
За каждую цифру D в представлении 10 предыдущего целого числа:
- Если D равно 0, добавьте единицу к текущему целому числу.
- В противном случае, необходимо умножить текущее число на D .
Детали
- Вы можете предположить, что 0 < N <2 31 .
- Вы должны вывести каждое целое число в последовательности, начиная с номера ввода, пока не будет достигнуто число меньше 10.
- Выходные данные могут быть массивом или строкой, разделенной пробелами, запятыми, символами новой строки или их комбинацией.
- Допускается завершающий пробел и / или символ новой строки, но не запятая.
- Там никогда не должно быть никаких ведущих нулей.
Примеры
Пример 1: 77
Этот пример довольно прост:
77 = 1*7*7 = 49
49 = 1*4*9 = 36
36 = 1*3*6 = 18
18 = 1*1*8 = 8
Таким образом, правильный вывод есть 77 49 36 18 8
.
Пример 2: 90
Здесь мы имеем:
90 = 1*9+1 = 10
10 = 1*1+1 = 2
Так что выход будет 90 10 2
.
Пример 3: 806
Прочитайте уравнения слева направо:
806 = 1*8+1*6 = 54 (((1*8)+1)*6)
54 = 1*5*4 = 20
20 = 1*2+1 = 3
Вывод должен быть 806 54 20 3
.
Тест-кейсы
Первое число в каждой строке - это ввод, а полная строка - ожидаемый результат.
77 49 36 18 8
90 10 2
249 72 14 4
806 54 20 3
1337 63 18 8
9999 6561 180 9
10000 5
8675309 45369 3240 25 10 2
9999999 4782969 217728 1568 240 9
1234567890 362881 2304 28 16 6
Для справки вот правильные следующие целые числа от 10 до 100:
Current | Next
--------+-----
10 | 2
11 | 1
12 | 2
13 | 3
14 | 4
15 | 5
16 | 6
17 | 7
18 | 8
19 | 9
20 | 3
21 | 2
22 | 4
23 | 6
24 | 8
25 | 10
26 | 12
27 | 14
28 | 16
29 | 18
30 | 4
31 | 3
32 | 6
33 | 9
34 | 12
35 | 15
36 | 18
37 | 21
38 | 24
39 | 27
40 | 5
41 | 4
42 | 8
43 | 12
44 | 16
45 | 20
46 | 24
47 | 28
48 | 32
49 | 36
50 | 6
51 | 5
52 | 10
53 | 15
54 | 20
55 | 25
56 | 30
57 | 35
58 | 40
59 | 45
60 | 7
61 | 6
62 | 12
63 | 18
64 | 24
65 | 30
66 | 36
67 | 42
68 | 48
69 | 54
70 | 8
71 | 7
72 | 14
73 | 21
74 | 28
75 | 35
76 | 42
77 | 49
78 | 56
79 | 63
80 | 9
81 | 8
82 | 16
83 | 24
84 | 32
85 | 40
86 | 48
87 | 56
88 | 64
89 | 72
90 | 10
91 | 9
92 | 18
93 | 27
94 | 36
95 | 45
96 | 54
97 | 63
98 | 72
99 | 81
100 | 3
Вы можете найти этот список расширен до 10000 здесь .
счет
Это код-гольф , поэтому выигрывает самый короткий действительный код в байтах. Tiebreaker переходит к представлению, которое первым достигло конечного числа байтов. Победитель будет выбран в следующий понедельник, 19 октября. Удачи!
Изменить: Поздравляем вашего победителя, @isaacg , снова используя Pyth для 14 байтов !
|*GHhG
сохраняет байты над?H*GHhG
.PowerShell,
9291908887 байтисточник
(...)
чтобы использовать автоматический вывод ... Мне нужно помнить об этом в будущем.Пип ,
282523 байтаПринимает число в качестве аргумента командной строки и выводит последовательность в последовательных строках.
Объяснение:
Теперь я рад, что
P
несколько раз назад я перешел от оператора к оператору.Pa
является выражением, которое оценивает значениеa
's', но также выводит его, поэтому я могу напечататьa
и одновременно проверить, меньше ли оно, используя десятьt>Pa
.источник
CJam,
26252422 байтаили
Попробуйте онлайн.
Как это работает
Обе программы по сути делают то же самое; первый - рекурсивный подход, второй - итеративный. Я объясню первый, который я считаю более интересным.
источник
Минколанг 0,7 ,
5246 байтWoohoo вложенные циклы!
объяснение
источник
Mathematica, 66 байт
источник
Python 3, 74,
76байтЗдесь уже был ответ Python с помощью Reduce, поэтому я хотел обойтись без него. Это должно быть вызвано с int.
источник
Python,
8580 байтТеперь это правильно печатает весь список, а не только первое значение.
источник
g=
.К5 , 24 байта
Сбор списка элементов при итерации к фиксированной точке - это именно то, что
\
делает оператор сканирования . На каждой итерации я сначала приводил число к строке, а затем оценивал каждый символ (.:'$:
), разбивая число на его цифры. Затем я выполняю сокращение (/
), начиная с 1 и используя лямбду{(x*y;x+1)@~y}
. В этом случаеx
это значение уменьшается иy
каждый последующий член последовательности.В бою:
источник
Юлия,
938988868377 байтЭто создает рекурсивную функцию
f
которая печатает элементы последовательности в отдельных строках.Ungolfed:
Попробуйте онлайн
Сэкономили 6 байтов благодаря Денису!
источник
n>9
соблюдать второй пример. Кроме того,f(n)=(println(n);if(d=n>9)for i=reverse(digits(n)) i<1?d+=1:d*=i end;f(d)end)
немного короче.Ruby
83, 72 байтаОригинал объявлен как функция:
Я пытался использовать,
Enumerator.new
но он использует так много байтов :-(Улучшено с помощью рекурсии:
источник
C # & LINQ,
165146 байтj (для Джарвиса) - рекурсивная функция. r - список целых чисел результата.
протестировано в LINQPAD:
источник
int n = 1
могут бытьint n=1
и т. Д.Haskell, 71 байт
Использование:
g 8675309
->[8675309,45369,3240,25,10,2]
.источник
Матлаб, 108
источник
Java 8, 148 байт
отформатированные
источник
Желе , 9 байт
Попробуйте онлайн!
источник