Schreiben Sie ein Programm oder eine Funktion, die eine nicht leere einzeilige Zeichenfolge aus druckbaren ASCII- Zeichen ohne Leerzeichen enthält:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Sie können davon ausgehen, dass die Eingabe gültig ist.
Basierend auf der Eingabe, eine neue Zeichenfolge zeichnet auf einem textuellen Raster von Räumen angeordnet ist und neue Zeilen folgenden Schildkröte Grafiken -esque Regeln in dem die Schildkröte immer einen Gitterraum einnimmt und nur die vier Himmelsrichtungen stellen kann.
Geben Sie das erste Zeichen der Eingabezeichenfolge in das Textraster ein. Die Schildkröte beginnt hier nach rechts. Iteriere über den Rest der Zeichen in der Eingabezeichenfolge (stoppe nur, wenn die Schildkröte stecken bleibt) und wiederhole diesen Vorgang:
Wenn die 4 Gitterfelder direkt neben der Schildkröte alle gefüllt sind (dh keines von ihnen ist ein Feld), beenden Sie die Iteration. Die Schildkröte steckt fest und das Gitter ist so vollständig wie möglich.
Sehen Sie sich das aktuelle Zeichen in der Eingabe im Vergleich zum vorherigen Zeichen an:
Wenn das aktuelle Zeichen lexikalisch vor dem vorherigen steht, drehen Sie die Schildkröte eine viertel Umdrehung nach links.
Wenn das aktuelle Zeichen lexikalisch nach dem vorherigen ist, drehen Sie die Schildkröte um eine Vierteldrehung nach rechts.
Wenn das aktuelle Zeichen mit dem vorherigen übereinstimmt, drehen Sie die Schildkröte nicht.
Wenn das Gitterfeld, dem die Schildkröte jetzt zugewandt ist, nicht leer ist (dh kein Feld), drehen Sie die Schildkröte wiederholt eine Vierteldrehung nach links, bis sie einem leeren Gitterfeld zugewandt ist.
Bewegen Sie die Schildkröte einen Rasterschritt vorwärts in die Richtung, in die sie blickt, und drucken Sie das aktuelle Zeichen auf dem Raster an der neuen Position der Schildkröte.
Die resultierende Textrasterzeichenfolge ohne überflüssige Zeilen oder Spalten mit Leerzeichen drucken oder zurückgeben. Zeilen können nachgestellte Leerzeichen bis zur äußersten rechten Spalte mit einem Nicht-Leerzeichen enthalten, jedoch nicht darüber hinaus. Eine einzelne nachgestellte Zeile ist optional zulässig.
Der kürzeste Code in Bytes gewinnt.
Beispiel
Hier sind alle Schritte der Eingabe spattuuxze
. Die ^V<>
Zeichen geben die Richtung an, in die die Schildkröte blickt. Sie sind nicht Teil der Eingabe oder Ausgabe.
s>
^
p
s
<ap
s
^
t
ap
s
^
t
t
ap
s
tu>
t
ap
s
tuu>
t
ap
s
tuu
t x
apV
s
tuu
<zx
ap
s
Zu diesem Zeitpunkt steckt die Schildkröte fest, sodass sie e
nie gedruckt wird und die endgültige Ausgabe lautet:
tuu
tzx
ap
s
Das Folgende ist eine ähnliche, aber ungültige Ausgabe, da sie eine unnötig führende Spalte mit Leerzeichen enthält:
tuu
tzx
ap
s
Testfälle
spattuuxze
tuu
tzx
ap
s
spattuuxxze
tuu
t x
apx
sze
1111111
1111111
ABCDEFGHIJKLMNOP
PEFG
ODAH
NCBI
MLKJ
`_^]\[ZYXWVUTSR
^_RS
\]`UT
[ZWV
YX
Woo!
W
o
o!
woo!
!o
o
w
Wheeee
W
heeee
banana
a
an
an
b
Turtle
T
ure
tl
turTle
e
tTl
ur
(Sagen Sie mir bitte sofort, ob einer dieser Fehler vorliegt.)
PONMLKJIHGFEDCBA
, da das Ergebnis nicht nur ein Quadrat ist und im GegensatzABCDEFGHIJKLMNOP
dazu die Asymmetrie in den Regeln hervorhebt.Antworten:
Groovy (357 Bytes)
Es wurden keine externen Schildkrötenbibliotheken verwendet und es wurden keine Schildkröten verletzt.
Versuchen Sie es hier: https://groovyconsole.appspot.com/edit/5115774872059904
Frühere Versuche
Groovy (397 Bytes)
https://groovyconsole.appspot.com/script/5179465747398656
quelle
Java,
408 -406 ByteDie Funktion erhält die Eingabe als String und gibt das Ergebnis als String zurück.
Intern verwendet es ein 2D-Zeichen-Array zum Speichern der Buchstaben und behält die verwendeten Min- und Max-Spalten und -Zeilen bei, um das verwendete Sub-Array zurückzugeben.
In der Ergebniszeichenfolge gibt es also keine führenden Spalten mit Leerzeichen, sondern nachgestellte Leerzeichen bis zur äußersten rechten Spalte mit einem Nicht-Leerzeichen-Zeichen. Am Ende wird eine neue Zeile hinzugefügt.
Anregungen zum Golfspielen sind willkommen :-)
quelle
%
der Rest in Java ist und negativ sein kann, was nicht erwünscht ist. Danke für die Vorschläge :-)Python3,
419414 Bytesquelle