Blackbeard war ein englischer Pirat des frühen 18. th Jahrhundert. Obwohl er dafür bekannt war, Schiffe zu plündern und zu nehmen, befehligte er seine Schiffe mit Erlaubnis ihrer Besatzungen. Es gibt keine Berichte darüber, dass er jemals seine Gefangenen verletzt oder ermordet hat.
Diese Herausforderung ist zu Ehren des berüchtigten Blackbeard und inspiriert vom International Talk Like a Pirate Day (19. September). Es ist auch das Gegenteil dieser Herausforderung von Pyrrha .
Die Herausforderung
Erstellen Sie ein Programm, das eine Schatzkarte als Eingabe verwendet (bestehend aus den unten aufgeführten Zeichen) und deren Anweisungen ausgibt.
Eingang
Alle Eingänge besteht aus v
, >
, <
, ^
, Leerzeichen, und eine einzige X
.
Sie können Folgendes annehmen:
Die Karte wird sich niemals selbst schleifen oder kreuzen
Der Startpfeil ist immer das unterste Zeichen in der Spalte ganz links
es wird immer einen Schatz geben (
X
)
Eine Beispieleingabe ist unten dargestellt.
>>v >>>>>>v
^ v ^ v
^ v ^ v<<
^ v ^ v
^ >>>>^ >>X
^
>>^
Ausgabe
Die Ausgabe sollte eine durch ", "
Grenzen begrenzte Zeichenfolge sein. Unten ist die korrekte Ausgabe der obigen Karte.
E2, N6, E2, S4, E4, N4, E6, S2, W2, S2, E2
Eine einzelne nachfolgende Newline oder ein Leerzeichen ist zulässig.
Beispiele
In:
>>>>>>>>>>>>>>>v
v
v
>>>>X
Out:
E15, S3, E4
In:
>>>>>>v
^ v
^ >>>>X
Out:
N2, E6, S2, E4
In:
X
^
^
^
Out:
N3
In:
>>>>>>v
^ v
^ v
v
>>>>>>X
Out:
N2, E6, S4, E6
In:
X
^
^
>^
Out:
E1, N3
In:
>X
Out:
E1
In:
v<<<<<
vX<<<^
>>>>^^
>>>>>^
Out:
E5, N3, W5, S2, E4, N1, W3
Glückliches internationales Gespräch wie ein Piratentag!
Antworten:
CJam, 78 Bytes
Probieren Sie es online aus .
Erläuterung
Die Hauptidee hier ist, die längste Zeile zu finden (wir nennen diese Länge
T
), dann alle Zeilen auf die gleiche Länge aufzufüllen und sie zu verketten (diese neue Zeichenfolge istU
). Auf diese Weise wird nur ein einziger Zähler benötigt, um sich in der Karte zu bewegen. Addieren / Subtrahieren1
bedeutet, sich in derselben Zeile nach rechts / links zuT
bewegen. Addieren / Subtrahieren bedeutet, sich eine Zeile nach unten / oben zu bewegen.Jetzt ist es Zeit, die Schleife einzurichten.
Der Schleifenkörper verwendet eine Nachschlagetabelle und eine Auswertung, um auszuwählen, was zu tun ist. Zu Beginn jeder Iteration ist das oberste Stapelelement die aktuelle Position. Darunter befinden sich alle verarbeiteten NSWE-Anweisungen. Am Ende der Iteration wird die neue Richtung unter der Position platziert und eine Kopie davon wird als Bedingung für die Schleife verwendet. Zeichen ungleich Null sind wahr. Wenn ein X angetroffen wird, wird 0 als Richtung gedrückt, wodurch die Schleife beendet wird.
Jetzt sieht der Stapel folgendermaßen aus :
[directions 0 position]
. Lassen Sie uns die Ausgabe generieren.quelle
CJam, 86 Bytes
Probieren Sie es online aus
Erläuterung:
quelle
Javascript (ES6), 239 Bytes
Erläuterung:
quelle
JavaScript (ES6), 189
Testen Sie das Ausführen des folgenden Snippets in einem EcmaScript 6-kompatiblen Browser.
Weniger Golf gespielt
quelle