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:
Antworten:
Python 2 ,
142136135 Bytes-6 Bytes dank ElPedro
-1 Bytes dank TuukkaX
Probieren Sie es online! oder Überprüfen Sie alle Testfälle
Ausrichtung prüfen (Ost / West):
Verwenden Sie
z=p[2].index(1)
, um das erste Quadrat in der 3. Reihe (dargestellt durch das rote Quadrat) zu erhalten und dannm=(p[1][z]-p[1][z+1]<1)*2-1
den Wert rechts (grün) von dem Wert links (blau) zu subtrahieren, um auf diese Weise alle 4 Segelflugzustände zu erhalten, die anstehen Südwesten führen zu1
(obere Reihe im Bild), während diejenigen, die nach Südosten gehen, zu0
oder führen-1
.Dann konvertiere:
1 -> -1
und0,-1 -> 1
verwende den Parameter, um die Listen umzukehren, wenn es sich um westliche handelt. Auf diese Weise sind die nach Südwesten fliegenden Segelflugzeuge genauso bedroht wie die nach Südosten.Segelflugbewegung
Dies ist die Bewegung, die der nach Südosten fliegende Segelflugzeug macht, er hat ein "Leitermuster" und der am weitesten links stehende Block in der dritten Zeile ist für jedes Muster konstant. Wenn Sie es als Ausgangspunkt verwenden, werden die umliegenden 3 Blöcke links und rechts und die mittleren 4 Blöcke auf das Vorhandensein von
1
s (das wäre die Wand) überprüft .quelle
i
auf0
die äußerefor
Schleife dann 1 Hinzufügen , um sie jedem Durchgang und so loswerdenenumerate
. Scheint zu funktionieren, als ich es mit deinem TIO ausprobiert habe. +1 für eine coole Antwort, ob ich richtig oder falsch bin.1 in
. +1.Oktave,
123122108 BytesDank @LuisMendo konnten 2 Bytes eingespart werden
Probieren Sie es online!
Oder
Überprüfen Sie alle Testfälle
Dank Rod Testfälle vorbereiten.
Vorherige Antwort:
Zuerst Wandmuster als Variable extrahieren
B
.Führen Sie eine GoL-Simulation durch, bis das Wandmuster und das simulierte Muster mehr oder weniger als 5 verschiedene Zellen aufweisen.
Wenn der Schirm die letzte Zeile erhalten hat, gibt die Funktion true zurück.
quelle
Retina ,
1019391 BytesDie Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
Sicher noch nicht optimal.
quelle