Einführung
Jonny will Frogger spielen. Er ist jedoch nicht sehr gut. Tatsächlich wird er nur versuchen, sich vorwärts zu bewegen, und zwar erst, nachdem sich die Plattformen bewegt haben.
Finde heraus, ob Jonnys Frosch das Ende des Weges erreicht oder ob er auf seinem Weg stirbt.
Herausforderung
Das Programm empfängt als Eingabe ein Frogger-Gitter, das aus 0
s und 1
s besteht und das das folgende Format aufweist:
- Das Gitter hat eine zufällige Breite und Länge und mindestens 3x3
1
repräsentiert Plattformen0
steht für WasserF
repräsentiert die Startposition des Frosches- Jede erste und letzte Zeile des Gitters besteht nur aus
1
s und bewegt sich nicht. Der FroschF
wird in der letzten Zeile zufällig platziert - Jede Zwischenebene ist immer in Bewegung und hat ein
<
oder>
am Ende jeder Zeile, das angibt, ob sie sich nach links oder rechts bewegt
Das Ersetzen dieser Symbole durch Ihre eigenen ist zulässig, sofern sie alle unterschiedlich sind und Sie die Ersetzungen in Ihrer Antwort angeben.
Die Eingabe kann in jedem kompatiblen Format erfolgen (Zeichenfolge mit Zeilenumbrüchen, Zeichenfolge, Zeichenfolge, ...).
Herausforderungsregeln
- In jeder Runde bewegen sich alle Plattformen um ein Feld, basierend auf der Richtung, die durch das
<
oder>
-Zeichen angezeigt wird - Plattformen erscheinen wieder auf der anderen Seite des Gitters, wenn sie vom "Bildschirm" gestoßen werden
- Befindet sich der Frosch auf einer sich bewegenden Plattform, bewegt er sich mit
- Danach springt der Frosch ein Feld in Richtung oberste Reihe. Der Frosch wird sich jede Runde bewegen.
- Der Frosch stirbt, wenn er ins Wasser springt (
0
) oder zusammen mit einer sich bewegenden Plattform die Seite des Gitters berührt
Ihr Programm muss einen Wahrheitswert ausgeben, wenn der Frosch überlebt, und einen falschen Wert, wenn er nicht überlebt.
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes. Es gelten Standardlücken.
Beispiele
Beispiel 1
Eingang
11111
00111>
00101<
1F111
Ausgabe
1
Ausführung
Abbiegung 1:
11111
10011
01010
1F111
11111
10011
0F010
11111
Turn 2:
11111
11001
F0100
11111
11111
F1001
10100
11111
Wende 3:
11111
1F100
01001
11111
1F111
11100
01001
11111
Beispiel 2
Eingang
11111
00100<
00100<
1F111
Ausgabe
0
Ausführung
Abbiegung 1:
11111
01000
01000
1F111
11111
01000
0F000
11111
Turn 2:
11111
10000
F0000
11111
11111
F0000
10000
11111
Wende 3:
11111
00001
00001
11111
quelle
<
oder>
können wir rechteckige Arrays als Eingabe verwenden? Übrigens schöne Herausforderung!<
oder>
am Ende.0
davor befindet, oder wartet er auf den nächsten1
? Wenn es warten kann, geht es dann bei jedem vorwärts1
oder kann es intelligent warten? Dh mit dem Testfall11111 00001< 00011< 11F11
wird es falsch sein, weil es ins Wasser springt ( Pastebin of Steps ); wird es falsch sein, weil es sich aus dem Rahmen bewegt ( Pastebin of Steps ); oder ist es wahr, weil es intelligent auf die zweite Plattform wartet, bevor es vorwärts springt ( Pastebin of Steps )?0
.Antworten:
Python 2 ,
168165152145137129 BytesProbieren Sie es online!
Das Eingabeformat ist eine Liste von Zeichenfolgen. Zeichen mit den in der Problemstellung angegebenen Bedeutungen.
Erläuterung:
i
ist die Zugnummer (beginnend mit Zug 1);x
ist die Position des Froggers zu Beginn dieses Zuges.Die Reihe, auf die der Frogger gerade tritt, ist die Schnur
l
(beachten Sie, dass diese durch das Schneiden von unten nach oben sortiert werden).d=('<'in l)%-2|1
ergibt-1
oder1
abhängig von der Richtung, in die sich die Reihe bewegt.Da dies der
i
dritte Zug ist, hat sich diese Zeile von ihrer ursprünglichen Position umi
Bytes verschoben . und so ist das Zeichen, auf das der Frogger springen wird,l[(x-d*i)%L]
woL
die Breite der Reihe ist, also wollen wir, dass dieses Zeichen gleich ist'1'
; dh>'0'
.Außerdem möchten wir sicherstellen, dass der Frogger zu Beginn der nächsten Abbiegung nicht von der Kante verschoben wird . das ist die Funktion des Ausdrucks
-1<x+d<L
.Diese Bedingungen sind verkettet (da
'0'>-1
ist immerTrue
); und wenn der resultierende Ausdruck zu irgendeinem Zeitpunkt falsch ist,k
wird er (und bleibt dann)0
.In jedem Fall aktualisieren wir die Position des Froggers
x+=d
und erhöhen die Zeilennummer. dann aufschäumen, ausspülen, wiederholen.quelle
Python 2 ,
246245244242 Bytes-3 Byte dank Mr. Xcoder
-1 Byte dank Jonathan Frech
Probieren Sie es online!
Erläuterung
d
ist die Richtung, in die sich jede Ebene bewegen wirdq
ist das Zeichen, um das herum gewickelt wird[q,' '][q<'L']
Lässt den Frosch vom Bildschirm fallensum([r[d+1:d-1],[[q,' '][q<'L']]][::d-~d],[])+r[-1:]
Entfernt das letzte Zeichen (die Richtung), dann das erste Zeichen und hängt es an oder entfernt das vorletzte und stellt es voran (basierend aufd
) und hängt die Richtung zurück, wodurch die gesamte Zeile nach links / rechts verschoben wird.if'F'in r:j=r.index('F');r[j]='L';m[i-1][j]=min('F',m[i-1][j])
wird den Frosch nach vorne springen lassenmin('F',m[i-1][j])
wird den Frosch ins Wasser fallen lassenmin
und<
) folgt der Reihenfolge' ' < '0' < '1' < 'F' < 'L'
Die Eingabe ist eine Liste mit Zeichen:
' '
- Wasser'F'
- Frosch'L'
- Plattform'0'
- verschiebe die Ebene nach links'1'
- verschiebe die Ebene nach rechtsquelle
if i<len(m)-1
könnte möglicherweise seinif~-len(m)>i
.Java 8,
293277 BytesVerwendet die in der Challenge-Beschreibung (
01F<>
) angegebenen Standardzeichen .Probieren Sie es online aus.
Erläuterung:
quelle