Einführung
Ich habe viele ASCII-Felsen. Sie bestehen aus Bindestrichen, Rohren, Vs, Carets, spitzen Klammern, Schrägstrichen und Leerzeichen. Beispiel:
/--\
| |
| |
\--/
Ich möchte sie wie folgt aushöhlen:
/\
/ \
\ /
\/
Alle Ecken sind runder geworden. Ein komplizierteres Beispiel:
/----\
| \------\
| |
| |
\------------/
/--\
/ \------\
| \
\ /
\----------/
Nach einer weiteren Erosion würde es werden
/\
/ \------\
< \
\ /
\--------/
Und ein anderer:
/\------\
< \
\ /
\------/
Herausforderung
Ihre Herausforderung besteht darin, ein Programm zu schreiben, das eine Eingabe einmal aushöhlen kann. Sie können davon ausgehen, dass es nur einen Stein gibt, und Sie können davon ausgehen, dass es sich um eine geschlossene Schleife handelt. Die Eingabe enthält nur die Zeichen /\ -| <> ^V \n
und enthält nachgestellte Leerzeichen, um ein Rechteck zu erstellen. Das Programm kann entweder eine Eingabe von STDIN und eine Ausgabe an STDOUT erhalten oder eine Funktion sein. Am Ende jeder Zeile befindet sich ein Zeilenumbruch. Die Erosion muss den unten aufgeführten Regeln entsprechen (Hinweis: In den Beispielen ist der Fels nicht fertiggestellt, dies dient der einfacheren Erklärung). Die Ausgabe muss dasselbe Format wie die Eingabe haben und dieselbe Größe wie die Eingabe haben. Nachgestellte Leerzeichen können jedoch weggelassen werden.
Die Schrägstriche breiten sich auf Pipelines und Striche aus und bewegen sich über diese.
/---
|
|
/--
/
|
/-
/
/
Wenn zwei Schrägstriche zusammengeführt werden, wird das entsprechende Zeichen aus <>^V
verwendet.
/-----\
| |
| |
| |
\-----/
/---\
/ \
| |
\ /
\---/
/-\
/ \
< >
\ /
\-/
^
/ \
< >
\ /
V
Wenn ein Teil des Felsens verschmelzen kann, wird es. Hinweis: Wenn ein Teil zusammengeführt werden kann, der andere jedoch nicht (dh /\
in der zweiten Zeile des Beispiels), wird derjenige, der zusammengeführt werden kann, (siehe Beispiel).
/\
/\-^-/\-/ \--
|
<
|
/
\
|
/
/
\
\
|
|
/-------/\--
/
|
|
|
|
|
|
/
\
|
|
|
Schließlich werden alle Felsen nichts.
<> ^ /\
V \/
Testfälle
Test 1:
/----\
| \------\
| |
| |
\------------/
/--\
/ \------\
| \
\ /
\----------/
/\
/ \------\
< \
\ /
\--------/
/\------\
< \
\ /
\------/
/-----\
< \
\ /
\----/
/---\
< \
\ /
\--/
/-\
< \
\ /
\/
^
< \
\/
Test 2:
/----\
| |
| |
| |
| |
\----/
/--\
/ \
| |
| |
\ /
\--/
/\
/ \
/ \
\ /
\ /
\/
/\
/ \
\ /
\/
/\
\/
Test 3:
^ /\
/\--/\--/ \--/ \-\
\ |
| |
/ |
\ |
| |
| |
/ |
< |
\ |
| |
| |
/ |
/ |
\ |
\-----------------/
/-------^----/\-\
/ \
| |
| |
| |
| |
| |
| |
< |
| |
| |
| |
| |
/ |
\ /
\---------------/
/-------------\
/ \
/ \
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
\ /
\ /
\-------------/
/-----------\
/ \
/ \
/ \
| |
| |
| |
| |
| |
| |
| |
| |
\ /
\ /
\ /
\-----------/
/---------\
/ \
/ \
/ \
/ \
| |
| |
| |
| |
| |
| |
\ /
\ /
\ /
\ /
\---------/
/-------\
/ \
/ \
/ \
/ \
/ \
| |
| |
| |
| |
\ /
\ /
\ /
\ /
\ /
\-------/
/-----\
/ \
/ \
/ \
/ \
/ \
/ \
| |
| |
\ /
\ /
\ /
\ /
\ /
\ /
\-----/
/---\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\---/
/-\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\-/
^
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
\ /
\ /
\ /
V
^
/ \
/ \
\ /
\ /
V
^
/ \
\ /
V
^
V
Wertung
Das ist Code-Golf , also gewinnt das Programm mit der geringsten Anzahl von Bytes!
Standardlücken sind nicht erlaubt.
"\x20\x20\x20\x20\x20\x20/\\\n/-\\\x20\x20/\x20\x20\\-\\\n|\x20\x20\\/\x20\x20\x20\x20\x20|\n\\---------/\n"
Antworten:
Rost
Ich habe das nach einer Weile aufgegeben, die Anweisungen scheinen mehrdeutig. Allerdings habe ich ein paar schrumpfende Steine bekommen (siehe Ausgabe). Ich bin mir auch ziemlich sicher, dass dies in einem zweidimensionalen Raum und nicht in einer eindimensionalen Zeichenfolge erfolgen muss, wie ich es hier versucht habe. Mein "Hauptproblem" ist, dass ich die angegebene Eingabe transformiere, indem ich das Leerzeichen als "innerhalb" oder "außerhalb" des Felsens markiere. Leider kann es an dieser Stelle nicht zwischen Innen- und Ober- / Unterkante unterscheiden.
Ausgabe
quelle