Beschreibende Schlüsselwörter (für die Suche): Zwei Matrizen gleichsetzen, Überlappen, Array, Suchen
Herausforderung
Der Weihnachtsmann hatte in der Vergangenheit eine Geschichte, in der Elfen Geschenke aus seinem Tresor gestohlen haben. Deshalb entwarf er dieses Jahr ein Schloss, das sehr schwer zu knacken ist, und es scheint die Elfen in diesem Jahr davon abzuhalten. Leider hat er die Kombination verloren und kann auch nicht herausfinden, wie man sie öffnet! Glücklicherweise hat er Sie beauftragt, ein Programm zu schreiben, um die Kombination zu finden. Es muss nicht das kürzeste sein, aber er muss es so schnell wie möglich finden!
Er hat einen sehr strengen Zeitplan und kann es sich nicht leisten, sehr lange zu warten. Ihre Punktzahl ist die Gesamtlaufzeit Ihres Programms multipliziert mit der Anzahl der Schritte, die Ihr Programm für die Bewertungseingabe ausgibt. Die niedrigste Punktzahl gewinnt.
Spezifikationen
Die Sperre ist eine quadratische Matrix aus Einsen und Nullen. Es ist auf eine zufällige Anordnung von Einsen und Nullen festgelegt und muss auf einen bestimmten Code festgelegt werden. Glücklicherweise merkt sich der Weihnachtsmann den erforderlichen Code.
Es gibt ein paar Schritte, die er ausführen kann. Jeder Schritt kann für jede zusammenhängende Untermatrix ausgeführt werden (dh Sie müssen eine Untermatrix auswählen, die vollständig von einer oberen linken und unteren rechten Ecke begrenzt ist) (es kann sich um eine nicht quadratische Untermatrix handeln):
- 90 Grad nach rechts drehen *
- 90 Grad nach links drehen *
- 180 Grad drehen
- Zyklus jedes Zeilenelement nach
n
rechts oder links (Zeilenumbrüche) - Wechseln Sie die einzelnen Spaltenelemente nach
m
oben oder unten (Zeilenumbrüche). - Horizontal spiegeln
- Vertikal spiegeln
- Flip auf der Hauptdiagonale *
- Drehe die Haupt-Anti-Diagonale um *
* nur wenn die Submatrix quadratisch ist
Natürlich kann er diese Schritte auch auf der gesamten Matrix ausführen. Da Einsen und Nullen nur in der Matrix vertauscht werden können, der Wert eines Quadrats jedoch nicht direkt geändert werden kann, ist die Anzahl der Einsen und Nullen für die Start- und Endkonfiguration gleich.
Formatierungsspezifikationen + Regeln
Sie erhalten die Eingabe als zwei quadratische Matrizen (Startposition und Endposition) in einem beliebigen Format. Die Ausgabe sollte eine Folge dieser Schritte in einem beliebigen lesbaren Format sein. Da dies kein Code-Golf ist, machen Sie es bitte zu einem leicht überprüfbaren Format, aber das ist keine strenge Anforderung. Sie können wählen, ob Sie die Seitenlänge der Matrizen in der Eingabe verwenden möchten.
Ihr Programm wird auf meinem Computer ausgeführt (Linux Mint, genaue Versionsangaben auf Anfrage, falls dies von Belang ist: P). Die Zeitspanne zwischen dem Drücken der Eingabetaste in der Befehlszeile und dem Zeitpunkt, zu dem das Programm ausgeführt wird, hängt von der Zeit ab Befehl beendet.
Testfälle
1 0 0 1 0 0 0 0
0 1 1 0 -> 0 0 0 0
0 1 1 0 -> 1 1 1 1
1 0 0 1 1 1 1 1
- Nehmen Sie die gesamte Matrix. Jede Säule hochfahren 1.
- Nehmen Sie die beiden mittleren Spalten als Untermatrix. Fahren Sie jede Säule nach unten. 2.
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 -> 0 1 1 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
- Nehmen Sie die gesamte Matrix. Fahren Sie jede Säule nach unten. 1.
- Nimm die mittlere Spalte. Fahren Sie es runter 2.
- Nimm die obersten 2 Reihen. Drehe es vertikal.
- Nimm die obersten 2 Elemente ganz rechts. Tauschen Sie sie aus (drehen Sie sie 1 nach rechts / links, drehen Sie sie horizontal).
- Nimm die 2 Elemente ganz links in der obersten Reihe. Tausche sie aus.
Es könnte effizientere Methoden geben, aber das spielt keine Rolle. Fühlen Sie sich frei, in den Kommentaren darauf hinzuweisen, wenn Sie einen finden :)
Testfall beurteilen
Dieser Testfall wird verwendet, um Ihre Einreichung zu beurteilen. Wenn ich der Meinung bin, dass sich eine Antwort zu sehr auf den Testfall spezialisiert hat, kann ich eine zufällige Eingabe wiederholen und alle Antworten mit dem neuen Fall neu bewerten. Den Testfall finden Sie hier wo oben der Anfang und unten die gewünschte Konfiguration ist.
Wenn ich glaube, dass sich die Antworten zu sehr spezialisieren, ist das MD5 der nächste Testfall 3c1007ebd4ea7f0a2a1f0254af204eed
. (Dies ist hier gerade geschrieben, um mich von den Vorwürfen des Betrugs zu befreien: P)
Es gelten Standardlücken. Es wird keine Antwort akzeptiert. Viel Spaß beim Codieren!
Hinweis: Ich habe mich für diese Herausforderungsserie von Advent Of Code inspirieren lassen . Ich habe keine Zugehörigkeit zu dieser Site
Eine Liste aller Herausforderungen in der Serie finden Sie im Abschnitt "Verknüpft" der ersten Herausforderung hier .
0
und 641
, und es gibt insgesamt256 choose 64 ≈ 1.9 × 10⁶¹
erreichbare Matrizen. (Das ist vergleichbar mit einer Megaminx und ist größer als die Rache eines Rubiks, obwohl viel weniger als der Würfel eines Professors)