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

1dar1es 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
12345dame -1, por lo que podría funcionar123456789tambié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
forbucle.Edición 3: Guardado 2 caracteres reescribiendo el
whilebucle como unaifdeclaració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
promptcosa.m?m:1=>m||1JavaScript,
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)$ d = shift; mapa {$ m = $ _. $ m, $ d / = $ _ hasta $ d% $ _} reverso 2..9; imprimir $ d-1? -1: $ m || 1inspirado 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
1dar1es un caso de prueba importante es que es un caso especial desagradable, el único número para el que1aparece 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-1en 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í-1que 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
foreachbucle de estilo por más tiempo. También es una lástima que Perl no piensemapque un bucleredoserí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-1y el número-1son idénticos cuando salen, el uso del número ahorra 2 bytes. (3)Pes 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