Alice ist Praktikantin in einem Unternehmen, das Brainfuck sowohl für die clientseitige als auch für die serverseitige Entwicklung als Hauptsprache verwendet. Alice hat gerade ihren ersten Code geschrieben und ist etwas nervös, als sie sich auf ihre erste Codeüberprüfung vorbereitet.
Alice möchte ihren Code korrekt formatieren und gut aussehen lassen, hat aber keine Zeit, den 328-seitigen Style-Guide für Unternehmenscodes zu lesen, und hat sich daher entschieden, ihn als perfektes Quadrat zu formatieren . Leider kann die Codelänge nicht ausreichen, um ein Quadrat zu bilden, und sie hat beschlossen, eine rechteckige Lücke in der Mitte zu lassen. Die Lücken müssen perfekt zentriert und so quadratisch wie möglich sein.
Beispiele
++++++ +++++ +++++ +++++ +++++ +++++
++++++ +++++ +++++ + ++ ++ ++ +++++
++++++ ++ ++ + + + ++ + +
++++++ +++++ +++++ +++++ ++ ++ +++++
++++++ +++++ +++++ +++++ +++++ +++++
Perfect OK Acceptable Unacceptable No way! Nope.
Schreiben Sie ein Programm oder eine Funktion, um Alice zu helfen. Geben Sie den Code von Alice als Eingabezeichenfolge aus und formatieren Sie ihn nach Möglichkeit wie unten beschrieben. Wenn die Formatierung nicht möglich ist, geben Sie einen weinenden Emoji aus :~(
.
Dies ist Code-Golf, also werden Antworten in Bytes gewertet, wobei weniger Bytes das Ziel sind.
Einschränkungen
- Ihr Programm oder Ihre Funktion sollte eine einzelne Zeichenfolge als Eingabe und Ausgabe einer oder mehrerer Textzeilen verwenden (oder eine mehrzeilige Zeichenfolge oder ein Array von Zeichenfolgen zurückgeben, wenn Sie eine Funktion implementieren).
- Die Eingabezeichenfolge kann beliebige ASCII-Zeichen einschließlich Leerzeichen enthalten.
- Alle Leerzeichen in der Eingabe müssen ignoriert werden. Sie sollten nicht für die Codelänge zählen und nicht für die Ausgabe verwendet werden.
- Die Eingabezeichenfolge enthält mindestens ein Nicht-Leerzeichen.
- Der formatierte Code muss die gleichen Nicht-Leerzeichen in der gleichen Reihenfolge wie der eingegebene Code enthalten.
- Der formatierte Code muss ein perfektes Quadrat sein, dh alle Zeilen sollten die gleiche Länge haben und die Anzahl der Zeilen sollte der Länge der Zeilen entsprechen.
- Formatierter Code kann eine Lücke in der Mitte enthalten.
- In der Lücke dürfen nur Leerzeichen (ASCII-Code 32) verwendet werden.
- Der Spalt (falls vorhanden) muss rechteckig sein.
- Jede Zeile des formatierten Codes muss mindestens ein Nicht-Leerzeichen enthalten, dh die Lückenbreite muss unbedingt kleiner als die Quadratbreite sein (Lücke 5x1 ist für 5x5 Quadrat nicht akzeptabel).
- Der Spalt sollte horizontal sein, dh die Spaltbreite sollte größer oder gleich der Spalthöhe sein.
- Der Spalt muss perfekt zentriert sein.
- Folglich sollten die Lückenbreiten- und -höhenparität mit der Quadratbreitenparität identisch sein (beispielsweise kann die Lücke für 5 × 5 Quadrate 1 × 1, 3 × 1 oder 3 × 3 betragen).
- Wenn möglich, Quadrat ohne Lücke ausgeben.
- Wählen Sie bei mehreren Lösungen eine Lösung mit einer Lücke, die dem Quadrat am nächsten liegt, dh der Unterschied zwischen Lückenbreite und Lückenhöhe ist minimal (zum Beispiel: Lücke 10x10 ist vorzuziehen als 8x6 und 8x6 ist vorzuziehen als 6x2).
- Wenn immer noch ein Gleichstand besteht, wählen Sie eine Lösung mit minimaler Lückenfläche (z. B. Lücke 2x2 ist vorzuziehen gegenüber 4x4).
- Wenn es nicht möglich ist, Code zu formatieren, wird ausgegeben
:~(
. - Zeilenumbruch nach letzter Zeile ist optional.
- [Neu] Sie können davon ausgehen, dass jedes Zeichen mit einem Code unter 33 ein Leerzeichen ist. Ich hoffe es hilft dir beim Golfen.
Tests
Input Output Code length Comment
+++++++++ +++ 9 Alice is lucky,
+++ her code perfectly fits a square.
+++
++++++++ +++ 8 Though code length isn't enough for a square,
+ + a small gap fixes it.
+++
++++++ :~( 6 No luck, code cannot be formatted.
Hello, Hell 12 Input may contain any ASCII characters,
World! o , but whitespaces in input should be ignored.
W o
rld!
+++++ + +++++ +++++ 22 Gap is not required to be a square,
+++++ + +++++ +++++ it can be a rectangle.
+ +
+++++
+++++
+++ + +++ ++++++++ 28 There exists another solution:
+++ + +++ + + 6x6 square with 4x2 gap,
+++ + +++ + + but in Alice's opinion square gap
+++ + +++ + + makes code more readable.
+ +
+ +
+ +
++++++++
Heikle Tests
This must be Thism 24 7x7 with 5x5 gap looks good,
5x5 with 1x1 ustbe but 5x5 with 1x1 gap is better,
gap. 5x 5w because gap area is smaller.
ith1x
1gap.
+++ +++ +++ :~( 18 In case you tried 5x5 square
+++ +++ +++ with 7x1 gap ;)
Ressourcen
Aus Platzgründen finden Sie auf tio.run Beispielcode und zusätzliche Testfälle
[Neu] Sie können sich die Tabelle der akzeptierten Lösungen für Eingaben mit bis zu 100 Zeichen ansehen . Ich habe Breite und Höhe vertauscht, weil es intuitiver zu wirken scheint.
Inspiriert von: Ein Quadrat aus Text
Änderungen
2 Tests hinzugefügt, Fehler im Beispielcode behoben.
Es wurde eine Tabelle mit Lösungen bis zu 100 hinzugefügt und eine Klarstellung der Leerstellen hinzugefügt.