Для заданного положительного целого числа N напишите полную программу, чтобы найти минимальное натуральное M, такое, что произведение цифр M равно N. N меньше 1 000 000 000. Если M не существует, выведите -1. Ваш код не должен занимать более 10 секунд в любом случае.
Sample Inputs
1
3
15
10
123456789
32
432
1296
Sample Outputs
1
3
35
25
-1
48
689
2899
1
предоставление1
является важным тестовым примером.Ответы:
Golfscript,
45 4340 символовЗаменяет версию, которая не группировала небольшие простые числа в степени, и при этом экономит 8 символов. Примечание: 12 = этаж (9 log 10 / log 5).
Благодарности: два символа, сохраненные при помощи трюка от @mellamokb; 3 сохранено с подсказкой от @Nabb.
источник
12345
дай мне -1, так что, может быть, это123456789
тоже сработает, если я смогу подождать достаточно долго.Javascript (
84787674727068)http://jsfiddle.net/D3WgU/7/
Редактировать: заимствовал идею ввода / вывода из другого решения и более короткую логику вывода.
Редактировать 2: Сохранены 2 символа, удалив ненужные скобки в
for
цикле.Редактировать 3: Сохранить 2 символа, переписав
while
цикл какif
заявление сi++
.Редактировать 4: Сохранение 2 символов путем перемещения и сокращения операций над
i
.Редактировать 5: преобразовать оператор if в троичный формат, сохранив еще 2 символа.
Редактировать 6: Сохранить 2 символа, перейдя
i--
в истинную часть троичной, удалить++i
.источник
prompt
.m?m:1
=>m||1
JavaScript,
887278746968На 4 символа длиннее, но на самом деле исполняемый скрипт (в отличие от функции).Редактировать: используя идеи из другого JavaScript, я могу свести это к следующему:В заключение! Решение из 69 символов, использует только 1 для цикла;)Хорошо, сбрил одну запятую.
источник
awk (
6361595857)источник
Perl
(75)(72)вдохновленный JavaScript-кодом Mellamokb; предназначен для запуска с параметром
источник
GolfScript (
6057)редактировать
Хорошо, я думаю, что эта версия дает правильный вывод для каждого случая сейчас :-)
Редактировать 2
Скинул 3 символа за @ предложения Питера.
источник
1
предоставление1
- это важный тестовый случай, заключается в том, что это неприятный особый случай - единственный номер, для которого цифра1
появляется в выходных данных. И это боится вашего кода, я боюсь.[
- если у вас нет[
стека во время оценки,]
он забирает все в стеке. И вы, вероятно, можете сохранить два символа ближе к концу, не оборачивая-1
массив и перемещая финал$
.Haskell
источник
(show m)
на$show m
.m<-[1..9^9]
... иначе это бесконечный список ... так-1
никогда не произойдет .... поправьте меня, если я ошибаюсь.Windows PowerShell, 87
источник
Perl (68)
Это , кажется , как удивительный трюк , который @mellamokb использует в JavaScript , чтобы избежать вложенного цикла бы хорошо перевести на Perl , но это выходит намного более многословным , потому что вы не можете использовать
foreach
цикл стиля больше. Жаль также, что Perl не думаетmap
, что циклredo
пригодится.источник
Скала 106 символов:
Тест и вызов:
Время отклика: немедленно, <1 с на 2 ГГц ЦП.
источник
Желе ,
181310 байтПопробуйте онлайн!
13-байтовое решение:
Попробуйте онлайн!
Объяснение с вводом
N
:18-байтовое решение:
Попробуйте онлайн!
Последняя ссылка предназначена только для замены 0 (значение по умолчанию для Jelly по умолчанию, поскольку все списки имеют один индекс) на -1. Если вы считаете 0 допустимым значением Falsey, программа занимает 8 байт .
источник
$ƊƲµ
. (2) Поскольку строка-1
и число-1
идентичны при выводе, использование числа экономит 2 байта. (3)P
является сокращением для×/
. (4) Сбой для ввода3125
._¬$
должен работать над’¹¬?
o-
еще короче.µ
я мог просто использовать_¬
без того,$
который сэкономил 2 байта! Но потом я понял, чтоo-
могу простоµ
полностью опустить и сохранить 3 байта!Рубин (100)
источник
Python 2 , 89 байт
Попробуйте онлайн!
Просто потому, что пока нет ответа от Python. Это действительно больно - неявное преобразование типов между строкой и int.
источник