Aristoteles 'Zahlenrätsel besteht darin, jede der 19 Zellen in einem hexagonalen Raster mit einer eindeutigen Ganzzahl zwischen 1 und 19 zu füllen, sodass die Summe entlang jeder Achse 38 beträgt.
Sie können sich das Spielbrett so vorstellen:
Das Rätsel ist im Wesentlichen die Lösung für die folgenden fünfzehn Gleichungen:
((a + b + c) == 38 && (d + e + f + g) == 38 && (h + i + j + k + l) ==
38 && (m + n + o + p) == 38 && (q + r + s) == 38 && (a + d + h) ==
38 && (b + e + i + m) == 38 && (c + f + j + n + q) ==
38 && (g + k + o + r) == 38 && (l + p + s) == 38 && (c + g + l) ==
38 && (b + f + k + p) == 38 && (a + e + j + o + s) ==
38 && (d + i + n + r) == 38 && (h + m + q) == 38)
Wobei jede Variable eine eindeutige Nummer in der Menge ist {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}
.
Es gibt mehrere mögliche Lösungen und 19!
mögliche Kombinationen von ganzen Zahlen, so dass naive rohe Gewalt unpraktisch ist.
Regeln:
- Keine Hardcodierung der Antwort oder Nachschlagen der Antwort an anderer Stelle; Ihr Code muss es selbst finden
- Geschwindigkeit spielt keine Rolle, aber Sie müssen Ihre Ergebnisse anzeigen, sodass die Ausführung von Code, dessen Ausführung 1000 Jahre dauert, keine Hilfe darstellt
- Hier finden Sie alle Antworten
- Behandeln Sie Antworten, die bei Rotation identisch sind, als identisch
- Ziehen Sie 5% Ihrer Gesamtbytezahl ab, wenn Sie die Ergebnisse in einer attraktiven Wabe ausgeben
- Wenigste Bytes gewinnt
code-golf
game
hexagonal-grid
Michael Stern
quelle
quelle
Antworten:
Haskell
295289Eine weitere ähnliche Antwort, bei der Arithmetik verwendet wird, um die Zwischenhexe zu erhalten. Im Gegensatz zu den anderen Lösungen prüfe ich nicht, ob diese Summen> 0 sind, sondern ob die sortierten Hexes dem Bereich [1..19] entsprechen. a, c und h sind eingeschränkt, so dass nur eindeutig gedrehte / gespiegelte Lösungen zulässig sind. Die Lösung wird nach ein paar Sekunden angezeigt. Dann dauert es ungefähr eine Minute, bis entschieden wird, dass keine Lösung mehr vorhanden ist.
Verwendung in ghci:
Bearbeitet, um ein paar Zeichen zu rasieren. 'y 0 t' ergibt [1..19].
quelle
x>0
Scheck verpassen , weil ich die Liste mit Negativen sortiere, anstatt ein Array zu erhöhen? Andererseits muss ich die Bereiche (myy a b
) einschränken , damit Haskell funktioniert, was mich ein paar Zeichen kostet. Aber es wird mit Sicherheit eine andere Sprache geben, die es mir erlaubt, auf die gleiche Weise zu arbeiten (dich anzusehen, Mathematica).Java
(1517 - 75,85) = 1441,15(1429 - 71,45) = 1357,55(1325 - 66,25) = 1258,75Das hat Spaß gemacht.
Druckt alle einzigartigen Lösungen für Spiegelung und Drehung in einer angenehmen Wabe (daher 5% Reduzierung)
Laufzeit: ~ 0.122s (122 Millisekunden) auf meinem 4 Jahre alten Laptop.
Golfed Code ( edit erkannte ich dummerweise wurde meinen printfs wiederholen, reduzierte sie auf einen einzigen printf für maximalen Golf) ( neu bearbeiten Reduzieren Anrufe Set - Funktionen in clevere kleinere Funktionen, einige andere Mikro-Optimierungen):
Genießen!
quelle
return;
Anweisung.return;
Anweisung hinzuzufügen , vergrößert sich meine Codelänge um 7, und es wäre verrückt, sie hinzuzufügen, wenn die wahre Antwort alle 12 Lösungen enthielte, bei denen es sich einfach um gedrehte / gespiegelte Versionen voneinander handelt. Obwohl Wahnsinn nicht ausgeschlossen werden kann, war in diesem Fall das Hinzufügen vonreturn;
beabsichtigt, und wie ich beschrieben habe, basierend auf dem vollständigen Frage- und Kommentardialog , den Sie sorgfältig prüfen sollten, bevor Sie Anschuldigungen werfen. Vielen Dank!C, 366 Bytes (
C ++ 541 450)Kompilieren mit
gcc -std=c99 -O3
.Druckt alle einzigartigen Lösungen Modulo-Rotation und Spiegelung im Format
a b c d ...
einer pro Zeile.Laufzeit: 0,8 Sekunden auf meinem Computer.
quelle
Matlab:
333320 ZeichenDies ist ein ziemlich dummer Ansatz, bei dem keine Rekursion angewendet wird. Es baut Teillösungen auf
z
, die am Ende ausgedruckt werden. Jede Spalte ist eine Lösung; Die Elemente werden von oben nach unten aufgelistet. Die Laufzeit beträgt 1-2 Stunden.Laufen aus Matlab heraus:
quelle