Hintergrund
Diese Herausforderung ist zu Ehren von Apsillern , die mit ihrer Herausforderung die Kategorie Nicht so einfach wie es aussieht in Best of PPCG 2016 gewonnen haben. Kann meine 4-Noten-Spieluhr dieses Lied spielen? Herzliche Glückwünsche!
Auf ihrer "Über mich" -Seite hat dieser Benutzer einen wirklich tollen Simulator für den Game of Life- Zellularautomaten. (Im Ernst, probieren Sie es aus.) Auf der anderen Seite ist das Wort Aspillera spanisch für "pfeilbeleuchtet". In Anbetracht dieser Tatsachen geht es bei dieser Herausforderung um Pfeile im Spiel des Lebens.
Spiel des Lebens Pfeile
In GoL repräsentieren wir einen Pfeil durch einen Gleiter und eine Wand durch eine Folge von Blöcken . Ein einzelnes Segelflugzeug nähert sich der Wand von oben und versucht, durch eine Lücke in der Wand zu fliegen (das Pfeillicht). Ihre Aufgabe ist es, zu überprüfen, ob der Schirm durch das Pfeillicht geht oder gegen die Wand stößt.
Eingang
Ihre Eingabe ist ein Bitgitter, das eine GoL-Konfiguration darstellt. Sie können es in jedem vernünftigen Format verwenden (mehrzeilige Zeichenfolge aus zwei beliebigen druckbaren ASCII-Zeichen, Liste der Zeichenfolgen, 2D-Array von Ganzzahlen, 2D-Array von Booleschen Werten usw.). Der Übersichtlichkeit halber werde ich .#
im Folgenden mehrzeilige Zeichenfolgen verwenden .
Die Eingabe hat garantiert mehrere Eigenschaften. Erstens beträgt seine Höhe 2N für einige N ≥ 6 und seine Breite mindestens 2N + 2 . Die Eingabe ist alles .
s, außer dass sich irgendwo in den oberen drei Reihen ein Segelflugzeug befindet und in den beiden mittleren Reihen eine Wand aus Blöcken. Der Schirm bewegt sich nach Südwesten oder Südosten, und seine Position ist so, dass er, wenn die Wände entfernt werden, eine Seitenkante nicht passiert, bevor er die Unterkante erreicht (er kann jedoch eine Ecke des Gitters erreichen). Der Schirm ist anfänglich von der linken und rechten Kante durch mindestens eine Stufe von .
s getrennt. Es kann in jeder Phase sein.
Die Wand besteht aus Blöcken, die durch eine Spalte von .
s getrennt sind, außer an einer Stelle, wo sie durch mindestens zwei Spalten von .
s getrennt sind. Wie beim Segelflugzeug sind auch die Blöcke ganz links und ganz rechts durch einen Schritt von .
s von den Kanten getrennt . Es wird immer mindestens einen Block am linken Rand und einen Block am rechten Rand geben.
Hier ist ein Beispiel für ein gültiges Eingaberaster:
....#......................
..#.#......................
...##......................
...........................
...........................
...........................
.##.##............##.##.##.
.##.##............##.##.##.
...........................
...........................
...........................
...........................
...........................
...........................
Ausgabe
Wie bereits erwähnt, müssen Sie feststellen, ob der Schirm gegen die Wand stößt oder bis zur Südkante vordringt. Für die Zwecke dieser Herausforderung tritt ein Absturz auf, wenn die Konfiguration nicht mehr aus einem einzelnen Segelflugzeug und der Wand aus Blöcken besteht, unabhängig davon, was später in der Simulation passiert. Die folgenden Diagramme zeigen die kleinsten Lücken, die ein Südostgleiter ohne Absturz in den beiden unterschiedlichen Phasen überwinden kann (die Bedingung für Südostgleiter ist symmetrisch).
...#...........
.#.#...........
..##...........
...............
...............
##...........##
##...........##
...#...........
....#..........
..###..........
...............
...............
##...........##
##...........##
Wenn der Schirm durch die Wand fliegt, müssen Sie einen Wahrheitswert und ansonsten einen falschen Wert ausgeben. Für das obige Beispiel ist die korrekte Ausgabe falsch, da der Schirm in den linken Teil der Wand stürzt.
Für die Zwecke dieser Herausforderung können Sie davon ausgehen, dass, wenn Sie GoL auf der Eingabe für 2 * (Höhe - 3) Schritte simulieren , sich der Gleitschirm in der unteren Reihe in der erwarteten Position befindet und die Wand intakt ist, die Ausgabe wahr ist .
Regeln und Wertung
Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt.
Testfälle
Ich habe die Testfälle in einem GitHub-Repository gesammelt , da sie ziemlich groß sind. Hier sind Links zu den einzelnen Dateien: