Para un número entero positivo dado N, escriba un programa completo para encontrar la M natural mínima de manera que el producto de los dígitos de M sea igual a N. N es menor que 1,000,000,000. Si no existe M, imprima -1. Su código no debería tomar más de 10 segundos para cualquier caso.
Sample Inputs
1
3
15
10
123456789
32
432
1296
Sample Outputs
1
3
35
25
-1
48
689
2899
1
dar1
es un caso de prueba importante.Respuestas:
Golfscript,
45 4340 caracteresReemplaza la versión que no agrupaba pequeños números primos en poderes y guarda 8 caracteres al hacerlo. Nota: 12 = piso (9 log 10 / log 5).
Agradecimientos: dos personajes salvados al robar un truco de @mellamokb; 3 guardados con una pista de @Nabb.
fuente
12345
dame -1, por lo que podría funcionar123456789
también si pudiera esperar el tiempo suficiente.Javascript (
84787674727068)http://jsfiddle.net/D3WgU/7/
Editar: idea de entrada / salida prestada de otra solución y lógica de salida más corta.
Edición 2: guardado 2 caracteres al eliminar llaves innecesarias en el
for
bucle.Edición 3: Guardado 2 caracteres reescribiendo el
while
bucle como unaif
declaración coni++
.Edición 4: Guarde 2 caracteres moviéndose y reduciendo las operaciones
i
.Edición 5: Convierta la declaración if en formato ternario ahorrando 2 caracteres más.
Edición 6: guarde 2 caracteres moviéndose
i--
a la parte verdadera de ternary, elimine++i
.fuente
prompt
cosa.m?m:1
=>m||1
JavaScript,
8872787469684 caracteres más largos, pero en realidad un script ejecutable (a diferencia de una función).Editar: Usando ideas del otro JavaScript, puedo reducirlo a esto:¡Finalmente! Una solución de 69 caracteres, solo usa 1 para loop;)De acuerdo, afeitado una coma.
fuente
awk (
6361595857)fuente
Perl
(75)(72)inspirado en el código javascript de mellamokb; destinado a ejecutarse con un parámetro
fuente
GolfScript (
6057)Editar
Ok, creo que esta versión da la salida correcta para cada caso ahora :-)
Editar 2
Afeitado 3 caracteres por sugerencias de @ Peter.
fuente
1
dar1
es un caso de prueba importante es que es un caso especial desagradable, el único número para el que1
aparece el dígito en la salida. Y me temo que rompe tu código.[
; si no tienes un[
en la pila cuando evalúas un]
, toma todo en la pila. Y probablemente pueda guardar dos caracteres cerca del final al no envolverlos-1
en una matriz y mover el final$
.Haskell
fuente
(show m)
a$show m
.m<-[1..9^9]
... de lo contrario es una lista infinita ... así-1
que nunca ocurrirá ... corrígeme si me equivoco.Windows PowerShell, 87
fuente
Perl (68)
Se parece al igual que el truco impresionante que @mellamokb usos en javascript para evitar el bucle anidado se traduciría bien en Perl pero sale mucho más detallado porque no se puede utilizar el
foreach
bucle de estilo por más tiempo. También es una lástima que Perl no piensemap
que un bucleredo
sería útil.fuente
Scala 106 caracteres:
Prueba e invocación:
Tiempo de respuesta: inmediatamente, <1s en CPU de 2Ghz.
fuente
Jalea ,
181310 bytesPruébalo en línea!
Solución de 13 bytes:
Pruébalo en línea!
Explicación con entrada
N
:Solución de 18 bytes:
Pruébalo en línea!
El último enlace es solo para reemplazar 0 (el valor de falsey predeterminado de Jelly, ya que todas las listas tienen un índice) con -1. Si considera que 0 es un valor correcto de falsey, el programa es de 8 bytes .
fuente
$ƊƲµ
. (2) Como la cadena-1
y el número-1
son idénticos cuando salen, el uso del número ahorra 2 bytes. (3)P
es la abreviatura de×/
. (4) Falla en la entrada3125
._¬$
debería funcionar’¹¬?
o-
Es aún más corto.µ
que podía usar_¬
sin el$
que ahorró 2 bytes! ¡Pero luego me di cuenta deo-
que podía omitirlo porµ
completo y ahorrar 3 bytes!Rubí (100)
fuente
Python 2 , 89 bytes
Pruébalo en línea!
Solo porque todavía no hay una respuesta de Python. Es realmente doloroso no tener una conversión de tipo implícita entre string e int.
fuente