Zielsetzung
Eine Eingangs Liste der genannten 6
deutlichen Ziffern, finden drei Zahlen a
, b
und c
so , dass a × b = c
, mit a
2 Ziffern aufweisen, b
mit 1 Ziffer und c
3 Ziffern haben. Visuell muss Ihr Programm diese 6 Ziffern in den Feldern dieses Bildes anordnen:
Wenn mehr als eine Lösung vorhanden ist, können Sie eine davon ausgeben.
Eingang
6 verschiedene Ziffern. Sie können sie in jeder für Ihre Sprache angemessenen Weise verwenden.
Ausgabe
Die drei Zahlen a
, b
und c
. Das Ausgabeformat ist relativ frei, solange die 3 Zahlen getrennt sind und immer in derselben Reihenfolge gedruckt werden (aber nicht unbedingt in der Reihenfolge a, b, c
).
Testfälle
1, 2, 3, 4, 5, 6 -> 54,3,162
2, 3, 4, 5, 6, 7 -> 57,6,342 or 52,7,364
Wertung
Der kürzeste Code in Bytes gewinnt.
0,1,2,3,4,5
result in13,4,052
; keine Lösung; oder ist irgendein Verhalten in Ordnung?Antworten:
Brachylog (2), 10 Bytes
Probieren Sie es online!
Viel zu langsam, um in einem angemessenen Zeitraum ausgeführt zu werden (der Brachylog-Interpreter verbringt viel Zeit damit, Multiplikationen mit leeren Zeichenfolgen, 4-stelligen Zahlen, negativen Zahlen usw. unter Verwendung eines sehr langsamen Constraint-Lösers durchzuführen). Die TIO-Verbindung verwendet eine Eingabe mit nur 3 Stellen (dieses Programm kann Eingaben mit einer beliebigen Anzahl von Stellen verarbeiten). Dies ist eine Funktion, deren Eingabe eine Zahl ist, die alle erforderlichen Ziffern enthält (z. B.
234567
das Fehlen von Duplikaten in der Eingabe bedeutet, dass Sie immer nur eine0
am Ende einfügen können, um eine führende Null zu vermeiden) und deren Ausgabe eine Liste in der ist bestellen[b, a, c]
(zB[6, 57, 342]
).Erläuterung
Wie lautete die Anforderung an die Gruppen, 2, 1 und 3 Ziffern zu haben? Nun, wir wissen, dass die Eingabe 6 Ziffern enthält und die Gruppen in sortierter Reihenfolge sind. Die einzigen möglichen Größen, die sie haben können, sind daher [1, 1, 4], [1, 2, 3] oder [2, 2, 2]. Der erste Fall ist unmöglich (Sie können nicht zwei 1-stellige Zahlen multiplizieren, um eine 4-stellige Zahl zu erhalten, da 9 × 9 nur 81 ist), ebenso wie der letzte Fall (Sie können nicht zwei 2-stellige Zahlen mit multiplizieren) eine zweistellige Zahl erzeugen, da gerade 10 × 10 100 ergibt). Daher müssen die Rückgabewerte
[b, a, c]
in dieser Reihenfolge 1, 2 und 3 Ziffern lang sein, alsoa
2 Ziffern,b
1 Ziffer undc
3 Ziffern, wie angefordert.quelle
JavaScript (ES6),
9088 BytesNimmt die Eingabe als Array von 6 Ziffern. Gibt eine Zeichenfolge zurück, die eine mögliche Lösung beschreibt (z. B.
'54*3==162'
), oder wird mit dem Fehler "zu viel Rekursion" beendet, wenn (und nur wenn) keine Lösung vorliegt.Wie es funktioniert
Dies ist ein deterministischer Algorithmus.
Die Primzahlen
P=2
undQ=3779
wurden so gewählt, dass der Sort Callback(k = k * P % Q) & 2
garantiert alle 720 möglichen Permutationen des Input Arrays über die Zeit generiert. Genauer gesagt werden alle Permutationen nach 2798 Sortierungen abgedeckt - dies sollte innerhalb der Rekursionsgrenze aller Browser liegen.Wir fügen jede Permutation in den Ausdruck ein,
01*2==345
indem wir die Ziffern den entsprechenden Einträgen im Array zuordnen.Wir werten diesen Ausdruck aus und führen rekursive Aufrufe durch, bis er wahr ist.
Prüfung
Code-Snippet anzeigen
quelle
-
mit==
(und kehren Sie es um?:
).Brachylog , 17 Bytes
Probieren Sie es online!
Erläuterung
quelle
05AB1E ,
1513 BytesZwei Bytes gespart dank Emigna !
Verwendet die CP-1252- Codierung. Probieren Sie es online!
Erläuterung:
quelle
213S
mit3L
wie der Auftrag nicht über sein2,1,3
auf die Spezifikationen nach.£
kumulativ vektorisiert ... Wenn das der richtige Weg ist, das zu sagen.Bash + Coreutils, 70
Keine besonders einfache Möglichkeit, alle Permutationen zu generieren. Generieren Sie stattdessen zufällig Permutationen und berechnen Sie, bis wir eine gute finden.
Die Ausgabe erfolgt in der Form
A*B-C
- dh der Ausdruck, der bei korrekter Permutation mit Null bewertet wird.Probieren Sie es online aus .
quelle
CJam , 23 Bytes
Probieren Sie es online!
quelle
Python 2 , 105 Bytes
Probieren Sie es online!
88-Byte-Lösung mit flexiblerer Ausgabe
Probieren Sie es online!
Wobei die Ausgabe ['6', '5', '7', '3', '4', '2'] statt '6', '57', '342' wäre
quelle
import
an der Spitze gesetzt ... schüttelt den Kopff=
in den Header gesetzt hat. Es ist keine große Sache.PHP, 110 Bytes
Es wird dort ankommen ... irgendwann ...
Ungolfed:
quelle
PHP, 77 Bytes
Übernimmt die Eingabe als Zeichenfolge.
quelle
ES6 (Javascript),
85,8279 BytesAkzeptiert ein Array von Ziffern (Strings) und gibt ein Array mit 3 Elementen zurück
[A,B,C]
=>C=A*B
Golf gespielt
EDITS:
d
unda
und==
Entfernen von (Danke @Arnauld!)Versuch es !
quelle
Pip , 18 Bytes
17 Byte Code, +1 für
-S
Flag.Übernimmt die Eingabe als Ziffernfolge über das Befehlszeilenargument. Die Ausgabe erfolgt in der Reihenfolge c, b, a. Probieren Sie es online!
Dieser Code gibt alle Lösungen aus, wenn mehrere vorhanden sind. Wenn nur eine Lösung ausgegeben werden muss, fügen Sie drei Bytes hinzu und schließen Sie das Programm ein
(...0)
.Erläuterung
quelle
Ruby, 60 Bytes
Druckt alle Lösungen als "a * b == c"
Beispiel:
quelle
Batch, 305 Bytes
Übernimmt die Eingabe in STDIN als Zeichenfolge
[1-9]{6}
und gibt alle Lösungen imdd*d-ddd
Format aus. Batch ist nicht sehr gut in der Manipulation von Strings, daher ist es etwas umständlich, die 720-Permutationen zu erzeugen.quelle