Para um determinado número inteiro positivo N, escreva um programa completo para encontrar o M natural mínimo, de modo que o produto dos dígitos de M seja igual a N. N seja menor que 1.000.000.000. Se não existir M, imprima -1. Seu código não deve demorar mais de 10 segundos para qualquer caso.
Sample Inputs
1
3
15
10
123456789
32
432
1296
Sample Outputs
1
3
35
25
-1
48
689
2899
1
dar1
é um caso de teste importante.Respostas:
Golfscript,
45 4340 caracteresSubstitui a versão que não agrupa primos pequenos em poderes e salva 8 caracteres ao fazê-lo. Nota: 12 = piso (9 log 10 / log 5).
Agradecimentos: dois caracteres salvos com um truque de @mellamokb; 3 salvos com uma dica do @Nabb.
fonte
12345
me dê -1, então talvez funcione123456789
também se eu puder esperar o suficiente.Javascript (
84787674727068)http://jsfiddle.net/D3WgU/7/
Editar: idéia de entrada / saída emprestada de outra solução e lógica de saída mais curta.
Editar 2: salvou 2 caracteres removendo chaves desnecessárias em
for
loop.Editar 3: salvou 2 caracteres reescrevendo o
while
loop comoif
instrução comi++
.Editar 4: salvou 2 caracteres movendo-se e reduzindo as operações
i
.Editar 5: Converter a declaração if em formato ternário, economizando mais 2 caracteres.
Editar 6: Salve 2 caracteres movendo
i--
- se para a parte verdadeira do ternário, remova++i
.fonte
prompt
coisa.m?m:1
=>m||1
JavaScript,
8872787469684 caracteres a mais, mas na verdade um script executável (em oposição a uma função).Edit: Usando idéias de outro JavaScript, posso reduzi-lo para isso:Finalmente! Uma solução de 69 caracteres, usa apenas 1 para loop;)Ok, raspou uma vírgula.
fonte
awk (
6361595857)fonte
Perl
(75)(72)inspirado no código javascript de mellamokb; destinado a ser executado com um parâmetro
fonte
GolfScript (
6057)Editar
Ok, acho que esta versão fornece saída correta para todos os casos agora :-)
Editar 2
Raspou 3 caracteres por sugestões de @ Peter.
fonte
1
dar1
é um caso de teste importante é que é um caso especial desagradável - o único número para o qual o dígito1
aparece na saída. E isso quebra seu código, receio.[
- se você não tiver um[
na pilha ao avaliar um]
, leva tudo na pilha. E você provavelmente pode salvar dois caracteres perto do final, não agrupando-1
em uma matriz e movendo a final$
.Haskell
fonte
(show m)
para$show m
.m<-[1..9^9]
.... caso contrário, é uma lista infinita ... então-1
nunca ocorrerá .... me corrija se eu estiver errado.Windows PowerShell, 87
fonte
Perl (68)
Ele parece como o truque impressionante que usos @mellamokb em javascript para evitar o loop aninhado que traduzem bem para perl, mas ele sai muito mais detalhado, porque você não pode usar o
foreach
loop de estilo por mais tempo. Também é uma pena que o perl não pense quemap
é um loop, caso contrário,redo
seria útil.fonte
scala 106 caracteres:
Teste e Invocação:
Tempo de resposta: imediatamente, <1s na CPU de 2Ghz.
fonte
Geléia ,
181310 bytesExperimente online!
Solução de 13 bytes:
Experimente online!
Explicação com entrada
N
:Solução de 18 bytes:
Experimente online!
O último link é apenas para substituir 0 (valor falsey padrão de Jelly, como todas as listas são indexadas por um) por -1. Se você considerar 0 um valor falsey OK, o programa será 8 bytes .
fonte
$ƊƲµ
. (2) Como a string-1
e o número-1
são idênticos na saída, o uso do número economiza 2 bytes. (3)P
é uma abreviação de×/
. (4) Falha na entrada3125
._¬$
deveria funcionar mais’¹¬?
o-
é ainda mais curto.µ
eu poderia usar_¬
sem o$
que salvou 2 bytes! Mas então eu percebi queo-
eu poderia simplesmente omitirµ
completamente e salvar 3 bytes!Rubi (100)
fonte
Python 2 , 89 bytes
Experimente online!
Só porque ainda não há resposta em Python. É realmente doloroso não ter uma conversão implícita de tipo entre string e int.
fonte