ASCII-Boxen sehen folgendermaßen aus:
++ +---+ +------+ +---+ +---+
++ | | | | | | | |
| | | | | | | |
+-+ | | | | | | | |
+-+ | | | | | | +---+
+---+ | | | |
+--+ | | | | ++
| | | | | | ||
| | +------+ | | ||
+--+ | | ||
+---+ ||
||
+-----+ ||
+------------+ | | ++
| | | |
| | | |
+------------+ +-----+
Hier einige Beispiele für dieselben implodierten ASCII-Boxen:
++ +- -+ +- -+ +- -+ +- -+
++ | - | | - - | | - | | - |
| | | -- | | | | |
+-+ | | | | " | - |
+-+ | - | || | | +- -+
+- -+ | | | |
+--+ | -- | | | ++
| | | - - | " ||
| | +- -+ | | ||
+--+ | - | | |
+- -+ | |
-- ||
- - +- -+ ||
+- - - -+ | - - | ++
| -- -- | | = |
| -- -- | | - - |
+- - - -+ +- -+
- -
--
Hier ist ein Link zu all diesen Testfallboxen in einem einfacher zu kopierenden Format. Die Reihenfolge besteht aus allen Eingaben, gefolgt von allen Ausgaben in derselben Reihenfolge.
Ihr Ziel ist es, eine ASCII-Box als Eingabe zu verwenden und die implodierte Box zurückzugeben. Die Implosionsregeln sind:
- "+" ändert sich nie; Weder "-" noch "|" direkt neben "+"
- Ausgehend von den Ecken werden "-" und "|" Bewegen Sie sich ein Feld weiter nach innen als der gleiche Charakter, der sich näher an der Ecke befand. Wenn ein "-" und "|" würde sich jemals an die gleiche Stelle bewegen, weder bewegt.
- Wenn sich ein "-" und ein "-" an derselben Stelle befinden, setzen Sie dort ein "=". Wenn ein "|" und "|" bewege dich an die gleiche Stelle, setze ein "in diese Stelle. Diese zählen als zwei ihrer jeweiligen Charaktere an der gleichen Stelle, die sich in entgegengesetzte Richtungen bewegen.
- Zwei "-" oder zwei "|" können sich aneinander vorbeibewegen, wie im Beispiel unten links gezeigt.
- Wenn die Box dünn genug ist, dehnt sie sich in gleicher Weise nach außen aus und bewegt sich dabei immer von der Seite weg, an der sie begonnen hat.
- Das Ergebnis sollte sowohl in x- als auch in y-Richtung symmetrisch zur Mittellinie sein (Zeilenumbrüche werden ignoriert). Dies schließt Leerzeichen ein. Daher muss das Ergebnis möglicherweise mit Leerzeichen aufgefüllt werden, um dies zu erfüllen.
Regeldetails:
- Das ist Code-Golf, also gewinnt das kürzeste Programm in Bytes.
- Es gelten Standardlücken.
- Sie können davon ausgehen, dass jede Zeile mit einem Zeilenumbruch endet.
- Die einzigen Zeichen in der Eingabezeichenfolge sind "+", "-", "|", "" und "\ n" (Zeilenvorschub). Die Ausgabezeichenfolge sollte denselben Regeln folgen, wobei "=" hinzugefügt wird. und "als mögliche Zeichen.
- Optional können Sie am Ende der letzten Zeile eine einzelne nachgestellte Zeile einfügen.
- Das kleinste ASCII-Feld, das Sie verarbeiten müssen, ist das Beispiel oben links. Jede ASCII-Box hat genau 4 "+" genau an ihren Ecken.
- Sie müssen Felder der Größe
m x n
für alle Ganzzahlenm,n
so behandeln, dass2<=m,n<256
(größtmögliche Zeichenfolgengröße von255*(255+1)
) - Sie können davon ausgehen, dass Sie immer eine einzige gültige ASCII-Box als Eingabe erhalten.
||
in diesem Beispiel muss ein"
oder etwas sein ..."
obwohl geben? Ich schätze das"
erscheint nur auf 3 oder größer?"
gehen? Links oder rechts? Es kann nicht beides sein, aber es kann auch nicht beides sein, weil das Ergebnis symmetrisch ist.Antworten:
Python 2 ,
591555545527525496436351334333303 BytesProbieren Sie es online!
EDIT : Meine alte Methode implodierte zuerst oben und unten und dann links und rechts. Stattdessen können wir die Spitze implodieren, um 90 Grad drehen und das viermal tun. Außerdem habe ich den benutzerfreundlichen Code verwendet, für diesen muss die Eingabe in der Form erfolgen,
[['+', '-', '-', '-', '-', '-', '+'], ['|', ' ', ' ', ' ', ' ', ' ', '|'], ['|', ' ', ' ', ' ', ' ', ' ', '|'], ['|', ' ', ' ', ' ', ' ', ' ', '|'], ['+', '-', '-', '-', '-', '-', '+']]
die hässlich, aber für das Programm kürzer ist: P (Dank an Phoenix, der das abgefangen hat)Dank an Leaky Nun für den Header-Code im TIO-Link, der zum Konvertieren von lesbaren Eingaben in computerlesbare Eingaben verwendet wird.
-85 Bytes dank Leaky Nun!
-17 Bytes durch Umschalten von Top-Implosion auf Left-Implosion, wodurch die gesamte Zeile in einer Variablen gespeichert und geändert werden kann. Vielen Dank an Leaky Nun für den Vorschlag!
-1 Byte durch Umschalten, um ein Leerzeichen zu entfernen.
-30 Bytes dank Leaky Nun!
quelle
s[0]
undS[0]
Variablen zu, um ein paar Bytes zu speichernp=s[0]
undP=S[0]
mitp=z(s[0])
undP=z(S[0])
ersetzen und dann alle Vorkommen vonz(p)
mitp
und allez(P)
mit ersetzenP
, um 18 Byte zu sparen.(z(s)-1)/2-p
mitz(s)/2-.5-p
und(p-1)/2-z(s)
mit ersetzenp/2-.5-z(s)
, um 2 weitere Bytes zu sparen.C (clang) , 693 Bytes
Neue Zeilen zur besseren Lesbarkeit hinzugefügt. Die ersten beiden sind erforderlich, der Rest jedoch nicht.
Danke für die tolle Herausforderung! Es war ziemlich knifflig, aber ich hatte trotzdem viel Spaß.
Dies nimmt die Eingabe als Befehlszeilenargumente und gibt eine mehrzeilige Zeichenfolge der implodierten Box an STDOUT aus. Golftipps werden wie immer sehr geschätzt.
Probieren Sie es online!
quelle