Schalten Sie das Feld um, wenn Sie eine Zeichenfolge angeben, in der möglicherweise eine Box enthalten ist. Dies wird in den Testfällen und Erklärungen klarer.
Input-Output
Eingabeformat
Die Eingabe ist entweder eine einzelne Zeichenfolge, die durch CR, LF oder CRLF getrennt ist, oder eine Liste von Zeichenfolgen. Das Eingabeformat liegt bei Ihnen.
Ausgabeformat
Das Ausgabeformat muss dasselbe Format wie die Eingabe haben.
Erklärung + Beispiel
Nehmen wir als Beispiel eine Box-Zeichenfolge:
+-------------+
|Hello, World!|
+-------------+
Um das Feld umzuschalten, entfernen wir die erste und letzte Zeile sowie die erste und letzte Spalte. Sie können davon ausgehen, dass nach der letzten Zeile kein nachgestelltes Leerzeichen (mit einem optionalen nachgestellten Zeilenumbruch am Ende der letzten Zeile) und in keiner Zeile ein nachfolgendes Leerzeichen vorhanden ist, wobei die neue Zeile natürlich nicht berücksichtigt wird.
Dies würde werden:
Hello, World!
Der andere Weg
Wenn sich die Zeichenfolge nicht in einem Feld befindet, fügen Sie ein Feld hinzu. Das ist ziemlich einfach; Stellen Sie +---...---+
eine eigene Zeile mit k
Bindestrichen voran, wobei k
die Länge der längsten Zeile angegeben ist, und füllen Sie sie dann für jede Zeile mit einem nachgestellten Leerzeichen auf, um sie an die Länge der längsten Zeile anzupassen, und stellen Sie dann ein Pipe-Zeichen vor und fügen Sie es hinzu ( "|"
). Fügen Sie abschließend eine Zeile hinzu, die das gleiche +---...---+
Setup wie die erste Zeile enthält.
Beispielsweise:
Hello, World!
wird:
+-------------+
|Hello, World!|
+-------------+
Sie können davon ausgehen, dass keine der Zeilen in der Eingabe nachgestellte Leerzeichen enthält.
Ein weiteres Beispiel für eine Zeichenfolge, um die ein Kästchen gelegt werden sollte:
Hello,
World!
wird
+----------+
|Hello, |
| World!|
+----------+
Ein Beispiel für etwas, das noch verpackt werden sollte:
+--------+
| |
--------+
wird:
+----------+
|+--------+|
|| ||
| --------+|
+----------+
Regeln + Spezifikationen
- Standardschlupflöcher gelten
- Keine Eingabezeile enthält sowohl insgesamt als auch in jeder Zeile ein führendes oder nachfolgendes Leerzeichen, unabhängig davon, ob sie eingegeben wurde oder nicht
- Boxen haben nur
+
als Ecken und|
für die vertikalen Kanten und-
für die horizontalen Seiten. - Eine Box muss ihre Pluspunkte haben, um als Box betrachtet zu werden. Wenn es Höhe oder Breite 2 hat (dh keinen Inhalt), sollte es immer noch entpackt sein, was abhängig von der Höhe der Box zu einer Reihe von Zeilenumbrüchen führen würde.
- Wenn die Eingabe ein Feld enthält, aber Text außerhalb des Felds, sollte das Ganze eingerahmt sein.
- Ihr Programm muss den gesamten Umfang der Zeichenfolge überprüfen. Wenn ein einzelnes Zeichen an der Außenseite nicht korrekt ist (entweder fehlt oder ein anderes Zeichen als das, was es sein sollte), sollte es eingerahmt und nicht entpackt werden.
- Die Zeichenfolge ohne Box selbst kann enthalten
+ | -
. Wenn die Zeichenfolge ohne Box selbst eine Box enthält, geben Sie die Zeichenfolge mit der Box zurück. Es sollte nur einmal entpackt werden.
Randfälle
1: Kleine Kisten
Eingang:
++
++
Die Ausgabe ist eine leere oder eine neue Zeile
Eingang:
+----+
+----+
Die Ausgabe ist leer oder eine neue Zeile
Eingang:
++
||
||
++
Ausgabe ist 2 Zeilenumbrüche oder 3 Zeilenumbrüche
2: Teilbox
Eingang:
+-------+
| Hello |
+ ------+
Ausgabe:
+---------+
|+-------+|
|| Hello ||
|+ ------+|
+---------+
3: Text außerhalb des Feldes
Eingang:
+-------+
a| Hello |
+-------+
Ausgabe:
+----------+
| +-------+|
|a| Hello ||
| +-------+|
+----------+
Antworten:
JavaScript (ES2017), 199 Byte
Die naive Lösung. Kann oder kann nicht das Beste sein, wir werden sehen ...
quelle
'+--+\n|hi|\n|world|\n+----------+'
. Es entfernt die Linien, obwohl es nicht rechteckig ist.SOGL V0.12 , 72 Bytes
Probieren Sie es hier aus!
+7 bytes (
⁰I{_=}¹χ
), weil elementweise gleich nicht implementiert ist+1 byte (
▓
), weil die Eingabe nicht garantiert quadratisch ist+1 byte (
A
), weil ich faul bin und keine typisierten Eingaben implementiere (dies erwartet also eine Eingabe auf dem Stapel Benutzerfreundlichkeit, der Online-Link enthält → damit das Eingabefeld verwendet werden kann)quelle
⁰I{_=}¹χ
ist +8 Bytes nicht +7.=
, aber da das nicht funktioniert, ändert es die Länge um -1 + 8 = +7Gelee , 46 Bytes
Probieren Sie es online aus!
quelle
Retina ,
197195 BytesProbieren Sie es online aus! Erläuterung:
Diese Phase ist an sich ziemlich kompliziert, deshalb werde ich sie ein wenig aufschlüsseln.
+
bedeutet, dass sich die Stufe wiederholt, bis keine Ersetzungen mehr gefunden werden können.m`^
bedeutet, dass die Bühne am Anfang einer Zeile übereinstimmt.((.)*)
stimmt dann mit der gesamten Zeile überein. Jetzt$1
ist einfach die übereinstimmende Zeile, aber es$2
ist eine Liste von Übereinstimmungen, dh Zeichen.(¶
stimmt dann mit dem Zeilenende und damit dem Anfang der nächsten Zeile überein.(?<-2>.)*
verwendet eine .NET-Ausgleichsgruppe. Das<-2>
entfernt Übereinstimmungen von$2
, solange ein Zeichen in der zweiten Zeile abgeglichen werden kann. An diesem Punkt kann eines von drei Dingen passieren:$2
hat noch einige Streichhölzer übrig.$2
hat keine Übereinstimmungen mehr und wir sind am Ende der Linie.(?(2)$|(.)))
hilft, diese anhand einer Bedingung zu unterscheiden. Wenn$2
noch einige Übereinstimmungen vorhanden sind, muss dies der Fall sein, da die zweite Zeile zu kurz ist, sodass wir mit dem Ende der Zeile übereinstimmen. Wenn$2
jedoch keine Übereinstimmungen mehr vorhanden sind, soll die zweite Zeile länger sein, damit wir übereinstimmen ein Charakter (der darauf eingeht,$4
damit wir wissen, dass das Match stattgefunden hat). Andernfalls sind die beiden Zeilen gleich lang und die Übereinstimmung schlägt an dieser Stelle fehl (möglicherweise stimmt sie in einer späteren Zeile erneut überein).Die Ersatzzeichenfolge ist
$1$#4$* $3$#2$*
. Das ergibt$#4
,1
ob wir ein zusätzliches Zeichen in der zweiten Zeile gefunden haben,0
wenn nicht. Dies bedeutet, dass$#4$*
der ersten Zeile ein Leerzeichen hinzugefügt wird, wenn die zweite Zeile länger war. Ebenso$#2$*
fügt Räume in die zweite Zeile , wenn die erste Zeile länger war. (Tatsächlich wird genau die richtige Anzahl von Leerzeichen hinzugefügt. Wenn wir nur zwei Zeilen+
ausgeglichen hätten, hätte der vierten Erfassungsgruppe ein hinzugefügt werden können, um dies auch für den Fall der längeren zweiten Zeile direkt zu erreichen.)Das Ergebnis all dessen ist, dass diese Stufe die Eingabe in ein Rechteck auffüllt. Wir können jetzt eine Kiste darum zeichnen.
Platziere
|
s auf jeder Seite.Legen Sie
+-...-+
auf der Oberseite.Und wieder unten.
Überprüfen Sie, ob wir eine Doppelbox erstellt haben. In diesem Fall werden oben und unten zusätzliche Leerzeilen hinzugefügt, damit die verbleibenden Stufen übereinstimmen und beide Felder gelöscht werden.
Wenn eine nachgestellte Leerzeile vorhanden ist, entfernen Sie zwei Zeichen am Anfang und Ende jeder Zeile.
Wenn eine führende Leerzeile vorhanden ist, löschen Sie diese und die nächsten beiden Zeilen (die
-
s bleiben oben im Feld). Wenn eine nachgestellte Leerzeile vorhanden ist, löschen Sie diese und die beiden vorherigen Zeilen. Der(\G|¶)
befasst sich mit dem Fall, dass es nur sechs Zeilen (und damit 5¶
s) gibt, weil die Box keinen Inhalt hatte.quelle