Schreiben Sie für eine gegebene positive ganze Zahl N ein vollständiges Programm, um das minimale natürliche M zu finden, so dass das Produkt der Ziffern von M gleich N ist. N ist kleiner als 1.000.000.000. Wenn kein M vorhanden ist, drucken Sie -1. Ihr Code sollte auf keinen Fall länger als 10 Sekunden dauern.
Sample Inputs
1
3
15
10
123456789
32
432
1296
Sample Outputs
1
3
35
25
-1
48
689
2899
1
Geben1
ist ein wichtiger Testfall.Antworten:
Golfscript,
45 4340 ZeichenErsetzt die Version, bei der kleine Primzahlen nicht in Potenzen gruppiert wurden, und spart dabei 8 Zeichen. Hinweis: 12 = Etage (9 log 10 / log 5).
Danksagung: zwei Zeichen, die durch einen Trick von @mellamokb gespeichert wurden; 3 mit einem Hinweis von @Nabb gespeichert.
quelle
12345
gib mir -1, vielleicht sollte es auch funktionieren,123456789
wenn ich lange genug warten könnte.Javascript (
84787674727068)http://jsfiddle.net/D3WgU/7/
Bearbeiten: Ausgeliehene Eingabe / Ausgabe-Idee von einer anderen Lösung und kürzere Ausgabelogik.
Bearbeiten 2: 2 Zeichen gespeichert, indem nicht benötigte Klammern in der
for
Schleife entfernt werden.Bearbeiten 3: 2 Zeichen durch Umschreiben der
while
Schleife alsif
Anweisung mit gespeicherti++
.Bearbeiten 4: 2 Zeichen gespeichert, indem Sie sich bewegen und Operationen weiter reduzieren
i
.Bearbeiten 5: Konvertieren Sie die if-Anweisung in ein ternäres Format, wobei Sie 2 weitere Zeichen sparen.
Bearbeiten 6: Speichern Sie 2 Zeichen, indem Sie
i--
in den wahren Teil des Ternärs wechseln, und entfernen Sie ihn++i
.quelle
prompt
Ding machen.m?m:1
=>m||1
JavaScript,
8872787469684 Zeichen länger, aber tatsächlich ein ausführbares Skript (im Gegensatz zu einer Funktion).Bearbeiten: Mit Ideen aus dem anderen JavaScript kann ich es auf Folgendes reduzieren:Schließlich! Eine 69-stellige Lösung verwendet nur 1 für Schleife;)Okay, ein Komma abgeschabt.
quelle
awk (
6361595857)quelle
Perl
(75)(72)inspiriert von Mellamokbs Javascript-Code; soll mit einem Parameter ausgeführt werden
quelle
GolfScript (
6057)Bearbeiten
Ok, ich denke diese Version liefert jetzt für jeden Fall die richtige Ausgabe :-)
Bearbeiten 2
3 Zeichen pro @ Peters Vorschläge rasiert.
quelle
1
Geben1
ein wichtiger Testfall ist, ist, dass es ein böser Sonderfall ist - die einzige Zahl, für die die Ziffer1
in der Ausgabe erscheint. Und es bricht Ihren Code, fürchte ich.[
Wenn Sie[
bei der Auswertung kein Zeichen auf dem Stapel]
haben, wird alles auf dem Stapel benötigt. Und Sie können wahrscheinlich zwei Zeichen gegen Ende speichern, indem Sie nicht-1
in ein Array einwickeln und das Finale verschieben$
.Haskell
quelle
(show m)
an$show m
.m<-[1..9^9]
... sonst ist es eine unendliche Liste ... also-1
wird es nie vorkommen ... korrigiere mich, wenn ich falsch liege.Windows PowerShell, 87
quelle
Perl (68)
Es scheint, als würde der großartige Trick, den @mellamokb in Javascript verwendet, um die verschachtelte Schleife zu vermeiden, gut in Perl übersetzt, aber er ist viel ausführlicher, da Sie die
foreach
Stilschleife nicht mehr verwenden können. Es ist auch schade, dass Perl nicht glaubt, dassmap
eine Schleife sonstredo
nützlich wäre.quelle
Scala 106 Zeichen:
Test & Aufruf:
Reaktionszeit: sofort <1s auf 2-GHz-CPU.
quelle
Gelee ,
181310 BytesProbieren Sie es online aus!
13-Byte-Lösung:
Probieren Sie es online aus!
Erklärung mit Eingabe
N
:18-Byte-Lösung:
Probieren Sie es online aus!
Der letzte Link ersetzt nur 0 (Jellys Standard-Falsey-Wert, da alle Listen einsindiziert sind) durch -1. Wenn Sie 0 als OK-Falsey-Wert betrachten, beträgt das Programm 8 Byte .
quelle
$ƊƲµ
. (2) Da die Zeichenfolge-1
und die Nummer-1
bei der Ausgabe identisch sind, werden durch die Verwendung der Nummer 2 Byte eingespart. (3)P
ist eine Abkürzung für×/
. (4) Eingabe fehlgeschlagen3125
._¬$
sollte’¹¬?
o-
ist noch kürzer.µ
nur_¬
ohne$
die 2 Bytes sparen konnte! Aber dann wurde mir klar, dasso-
ich das einfachµ
ganz weglassen und 3 Bytes sparen konnte!Rubin (100)
quelle
Python 2 , 89 Bytes
Probieren Sie es online aus!
Nur weil es noch keine Python-Antwort gibt. Es ist wirklich schmerzhaft, keine implizite Typkonvertierung zwischen string und int zu haben.
quelle