Ein Top-Front-Side-Puzzle ist ein Puzzle, bei dem Sie eine 3D-Form von (normalerweise kubischen) Blöcken mit drei orthogonalen Ansichten konstruieren müssen: einer Draufsicht, einer Vorderansicht und einer Seitenansicht.
Beispiel für eine Draufsicht, eine Vorderansicht und eine Seitenansicht:
Top: Front: Side:
. . . . . . . . . . . .
. x x . . x x . . x x .
. x x . . x x . . x x .
. . . . . . . . . . . .
In this problem, the side view is taken from the right.
Ein 2x2x2 Würfel (mit Volumen 8) würde diese Lösung erfüllen, aber es ist in Volumen 4 machbar, wenn wir die folgende Schichtstruktur haben:
. . . . . . . .
. x . . . . x .
. . x . . x . .
. . . . . . . .
Es gibt auch einige unlösbare Vereinbarungen. Nehmen Sie zum Beispiel:
Top: Front: Side:
. . . . . . . . . . . .
. . . . . . x . . . . .
. x . . . . . . . x . .
. . . . . . . . . . . .
Wenn in der Draufsicht angegeben ist, dass der Block an zweiter Stelle von links liegt, kann die Vorderansicht nicht mit der Angabe übereinstimmen, dass der Block an dritter Stelle von links liegen muss. Diese Anordnung ist also unmöglich.
Ihre Aufgabe ist es, ein Programm zu erstellen, das bei einem beliebigen 4x4-Puzzle von oben nach vorne versucht, es in der geringsten Anzahl von Würfeln zu lösen, oder es für unlösbar erklärt.
Ihr Programm nimmt eine Reihe von 48 Bits als Eingabe, die die Draufsicht, die Vorderansicht und die Seitenansicht darstellen. Sie können in einem beliebigen Format vorliegen (eine 6-Byte-Zeichenfolge, eine Zeichenfolge aus 0en und 1en, eine 12-stellige Hex-Zahl usw.), die Reihenfolge der Bits muss jedoch wie folgt lauten:
Top: 0x00 Front: 0x10 Side: 0x20
0 1 2 3 0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7 4 5 6 7
8 9 a b 8 9 a b 8 9 a b
c d e f c d e f c d e f
Mit anderen Worten, die Bits werden von links nach rechts, von oben nach unten, von oben nach vorne und dann von der Seite betrachtet.
Ihr Programm gibt dann entweder eine Reihe von 64 Bit aus, die die ausgefüllten Würfel im 4x4x4-Raster anzeigen, oder Sie geben an, dass das Raster nicht lösbar ist.
Ihr Programm wird mit einer Batterie von 1.000.000 Testfällen bewertet.
Die Testdaten werden generiert, indem die MD5-Hashes der Ganzzahlen "000000" bis "999999" als Zeichenfolgen verwendet werden, die ersten 48 Bits (12 Hexits) jeder dieser Hashes extrahiert werden und als Eingabe für die Top-Front-Front-Funktion verwendet werden. Seitenrätsel. Als Beispiel hier sind einige der Testeingaben und die Rätsel, die sie erzeugen:
Puzzle seed: 000000 hash: 670b14728ad9
Top: Front: Side:
. x x . . . . x x . . .
x x x x . x . x x . x .
. . . . . x x x x x . x
x . x x . . x . x . . x
Puzzle seed: 000001 hash: 04fc711301f3
Top: Front: Side:
. . . . . x x x . . . .
. x . . . . . x . . . x
x x x x . . . x x x x x
x x . . . . x x . . x x
Puzzle seed: 000157 hash: fe88e8f9b499
Top: Front: Side:
x x x x x x x . x . x x
x x x . x . . . . x . .
x . . . x x x x x . . x
x . . . x . . x x . . x
Die ersten beiden sind unlösbar, während die letzte Lösung von vorne nach hinten die folgenden Ebenen enthält:
x . . . . . . . x x x . x x x .
. . . . x . . . . . . . . . . .
x . . . . . . . . . . . x x x x
x . . . . . . . . . . . x . . x
There are a total of 16 blocks here, but it can probably be done in less.
Die Punktzahl Ihres Programms wird anhand der folgenden Kriterien in absteigender Reihenfolge der Priorität bestimmt:
- Die höchste Anzahl gelöster Fälle.
- Die niedrigste Anzahl von Blöcken, die zur Lösung dieser Fälle erforderlich sind.
- Der kürzeste Code in Bytes.
Sie müssen die Punktzahl selbst einreichen und berechnen. Dies setzt voraus, dass Ihr Programm alle 1.000.000 Testfälle durchlaufen kann.