Sie haben eine Box mit einer einstelligen Nummer in jeder Ecke:
1|2
---
3|4
Wenn wir die Ziffern entlang der Zeilen von links nach rechts verketten, erhalten wir 12 und 34. Wenn wir die Ziffern entlang der Spalten von oben nach unten verketten, erhalten wir 13 und 24. Wenn wir alle diese Zahlen addieren, erhalten wir 12 + 34 + 13 + 24 = 83.
Herausforderung
Schreiben Sie ein Programm, um alle diese Felder zu drucken, wobei die wie oben berechnete Summe gleich 100 ist.
Angenommen, jede Ecke enthält eine einstellige Zahl zwischen 1 und 9, dann gibt es 9 Kombinationen: 1157, 1247, 1337, 1427, 1517, 2138, 2228, 2318 und 3119. (Beachten Sie, dass es 25 Kombinationen gibt, wenn wir 0 einschließen, aber Wir sind nicht für diese Herausforderung.)
Beachten Sie, dass das Beispiel 1234 nicht funktioniert, da 12 + 34 + 13 + 24 nicht gleich 100 ist.
Eingang
Keiner
Ausgabe
Antwortfelder im folgenden Format:
A|B
---
C|D
Die Ausgabe sollte auf STDOUT oder die nächstgelegene Alternative gedruckt werden.
Regeln
- AB + CD + AC + BD = 100
- Jede Ecke enthält nur die positiven ganzen Zahlen von 1 bis 9.
- 0 ist ausgeschlossen.
- Zahlen können mehrmals verwendet werden.
- Sie müssen die Kästchen wie oben zeichnen. (
A|B\n---\nC|D\n
) - Sie müssen alle gültigen Antworten ausgeben.
- Ein zusätzlicher Zeilenumbruch ist in Ordnung.
- Code-Golf , also gewinnt der kürzeste Code in Bytes.
- Es gelten Standardlücken und AGB.
Dies ist meine erste Einreichung. Bitte lassen Sie mich wissen, wenn ich etwas klären muss.
Antworten:
Pyth,
423834 BytesDie nachfolgende Zeile im Code ist wichtig. Der Hauptgrund, warum ich wettbewerbsfähig bin, ist, dass ich das Vektorpunktprodukt von
[1, 1, 5, 7]
und verwende[20, 11, 11, 2]
und es mit 100 vergleiche.quelle
"|"
->\|
,\n
-> (wörtlicher Zeilenumbruch) und Sie brauchen das endgültige Zitat nicht.Ruby, 71
Da die Hardcodierung nicht unzulässig ist (und es auf jeden Fall schwierig ist, eine Linie zu ziehen), ist hier eine teilweise hardcodierte Antwort.
Erläuterung
Die Formel für eine Lösung lautet wie folgt:
Durch modulare arithmetische Argumente sehen wir, dass A und D sich um einen konstanten Betrag unterscheiden müssen, der
(A*20+D*2)%11
konstant ist. Tatsächlich ist D = A + 6. Dasi
Schleife durchläuft die drei möglichen Werte von A.Der Wert von B kann irgendetwas von 1 bis sein
7-i*2
und die Summe von B und C muss sein14-A-D
. So erhalten wir die folgenden Ausdrücke, die gedruckt werden. Ruby erlaubt wörtliche Zeilenumbrüche in Strings, die in eingeschlossen sind''
quelle
Java,
202200198Zum ersten Mal versuchen: D
BEARBEITEN: 2 Bytes mit etwas kleinerer Berechnung in einem anderen Kommentar gespeichert.
quelle
Batch - 187 Bytes
Rohe Gewalt.
Ohne Golf ist es etwas weniger ekelhaft:
quelle
CJam, 40 Bytes
Die Vorgehensweise zum Finden der Kombinationen unterscheidet sich von der von @ Optimizer, der Code zum Drucken ist jedoch identisch.
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle
Haskell,
107131 BytesDie zweite Version meines ersten Haskell-Programms!
Diesmal mit Display nach Vorgabe, schamlos
gestohlenangepasst an Nimis.Und ... abgesehen von der Faktorisierung der Formel am Ende ist sie noch lesbar =)
quelle
Haskell,
125121 BytesVerwendung:
>>
in erstellt"abcd">>[[1..9]]
eine Liste mit 4 (Länge des 1. Parameters) Kopien des zweiten Elements, dh[[1..9],[1..9],[1..9],[1..9]]
.mapM id
erstellt eine Liste aller Kombinationen davon, dh[0,0,0,0]
bis[9,9,9,9]
. Behalten Sie die, die zusammenfassen,100
und bauen Sie eine Zeichenfolge mit der Box davon. Drucken Sie alle Felder.Vielen Dank an @ Mauris für 1 Byte und ich muss meinen Beitrag überprüfen, um weitere 3 zu finden.
quelle
mapM id
spart ein Byte gegensequence
.Python 2,
145129 BytesMomentan spiele ich mit ein paar verschiedenen Berechnungsmethoden, die kürzer sein sollten als die angegebenen, aber ich werde veröffentlichen, was ich jetzt habe.
quelle
CJam,
4342 BytesErklärung folgt .. bis heute EOD
Probieren Sie es hier online aus
quelle
Python 3, 159
Schnell und dreckig.
quelle
R, 165 Bytes
Dies wäre bedeutend kürzer gewesen, wenn ich mich dafür entschieden hätte, die Ausgabe auf irgendeine Weise hart zu codieren. Wie bei einigen anderen Lösungen wird die Identität 20 x 1 + 11 ( x 2 + x 3 ) + 2 x 4 = 100 verwendet.
Ungolfed + Erklärung:
Sie fragen sich vielleicht, warum die letzte Anweisung eine Aufgabe ist. Wie sich herausstellt, gibt die
cat
Funktion, die verkettet und druckt, einen Wert von zurückNULL
. Wenn Siecat
innerhalb einer Funktion wie aufrufenapply
, folgt der AusgabeNULL
, was unerwünscht ist. Es gibt zwei Möglichkeiten, dies zu umgehen: Zuweisen zu einer Variablen oder Einschließeninvisible
. Hier habe ich mich für das erstere entschieden, da es deutlich kürzer ist.Sie können es online ausprobieren .
quelle
Java, 450
Mein erster (ungolfed) Versuch sah so aus:
quelle
20*a + 11*(b + c) + 2*d == 100
.PowerShell, 98
Die Formel von Steveverrill wurde angepasst
quelle