Jemand hat die Weihnachtsgeschenke hastig gestapelt, und es ist ein ziemliches Durcheinander:
========================
| |
========================
=============
| |
| |
| |
| |
| |
| |
=============
=======
| |
| |
| |
=======
===================
| |
| |
| |
===================
=================
| |
| |
| |
| |
=================
=======
| |
| |
=======
Im Ernst, wie präsentiert dieses Top das Gleichgewicht? Es ist wahrscheinlich ein Hammer. Um zu verhindern, dass dieser Turm aus Geschenken zusammenbricht, müssen Sie die Geschenke neu anordnen, damit sie gut gestapelt werden:
=======
| |
| |
=======
=======
| |
| |
| |
=======
=============
| |
| |
| |
| |
| |
| |
=============
=================
| |
| |
| |
| |
=================
===================
| |
| |
| |
===================
========================
| |
========================
Die Regeln
- Jedes Geschenk besteht aus einem oberen und unteren
=
Zeichenbereich und einer oder mehreren mittleren Reihen, die aus zwei|
durch Leerzeichen getrennten Zeichen bestehen . Die Breite der Gegenwart ist in allen Reihen gleich. - Es sind keine Leerzeilen vorhanden.
- Aufeinanderfolgende Geschenke überlappen sich in mindestens einer Spalte.
- Geschenke sind in abnehmender Reihenfolge zu stapeln. Bei einem Unentschieden sollte das größere Geschenk unter das flachere Geschenk fallen.
- Geschenke sollten auf die darunter liegende Gegenwart zentriert sein. Wenn das Geschenk nicht genau in der Mitte platziert werden kann (weil der Breitenunterschied ungerade ist), können Sie eine der beiden Positionen wählen, die ein halbes Zeichen von der Mitte entfernt sind.
- Sie können davon ausgehen, dass die Eingabe eine einzelne nachgestellte Zeile enthält, geben Sie jedoch Ihre Annahme an.
- Ihre Lösung muss nicht für eine leere Eingabe funktionieren, sondern muss in der Lage sein, ein einzelnes Geschenk zu verarbeiten.
- Sie können ein Programm oder eine Funktion schreiben, die Eingaben über STDIN oder ein Funktionsargument entgegennimmt und das Ergebnis zurückgibt oder an STDOUT ausgibt.
- Dies ist Codegolf, daher gewinnt die kürzeste Antwort (in Bytes).
Japt , 18 Bytes
Probieren Sie es online!
Ich benutze eine ausreichend andere Strategie als die andere Japt-Antwort, die ich für eine eigene Antwort wert hielt. Nimmt Ein- und Ausgabe als Array von Zeilen
Erläuterung:
Ich weiß nicht genau, warum "Standardsortierung" so funktioniert, aber ich habe getestet, dass sich das größere Kästchen der beiden mit der gleichen Breite unten befindet, unabhängig davon, welches in der Eingabe zuerst kommt.
quelle
"=="
durch'=²
, um ein Byte zu speichern.Rubin, 164
Ordentliche Herausforderung! Konnte es nicht viel weiter runterholen.
Erläuterung
Die Eingabe
String
wird inArray
ein Element zerlegt, in dem jedes Vorhandene ein Element ist. Dann wird das Array nach der Anzahl der Pipe-Zeichen und erneut nach der Anzahl der Gleichheitszeichen sortiert .Anschließend werden alle führenden Leerzeichen entfernt und jede Zeile einzeln gedruckt, zentriert um die Breite des größten Geschenks.
Es verhält sich mit oder ohne abschließende Zeilenumbrüche in der Eingabe gleich.
Lesbare Version
quelle
05AB1E ,
2320 Bytes-3 Bytes dank @ErikTheOutgolfer .
Probieren Sie es online aus.
Erläuterung:
Anmerkungen:
c
in einen Großbuchstaben auf rechts eingestellt werdenC
.|
kann weggelassen werden, wenn wir die Eingabe als Liste von String-Zeilen annehmen dürfen.|
sowieso entfernt werden.quelle
ðδÛ
kann anstelle vonεðÛ}
hier verwendet werden,¶'=.ø
ist das gleiche wie…=\n=
(\n
bedeutet newline),0'=.ø
ist das gleiche wie…=0=
..ø
anstelle der wörtlichen 3-Zeichen-Zeichenfolgen. Und danke fürðδÛ
. Eigentlich noch nie benutztδ
und hatte keine Ahnung, dass es so funktioniert.Attache , 91 Bytes
Probieren Sie es online!
Ungolfed
quelle
Perl 5
-n0
, 123 BytesProbieren Sie es online!
quelle
Python 2 ,
221196 BytesProbieren Sie es online!
Erwartet eine Zeichenfolge in Anführungszeichen, ohne Zeilenumbrüche als Eingabe zu verfolgen.
Nicht großartig, aber es ist das Beste, was ich tun kann.
quelle
Japt ,
232019 BytesÄhnliches Vorgehen wie bei Kevins Lösung . Das erste Byte kann entfernt werden, wenn die Eingabe als Array von Zeilen erfolgen kann.
Versuch es
quelle
Ich bin ein Anfänger im Code-Golf und kein Experte für Javascript, aber die Herausforderung ist interessant und macht Spaß. Ich würde gerne sehen, welche Tricks ein echter Experte in Js anwenden würde.
Annahmen
Code
Eingang ist in
g[]
. Ausgabe inm[]
.Der Code funktioniert von
Erstellen eines Arrays von Objekten, wobei jedes Objekt eine Box darstellt, mit zwei Elementen: K, wobei ein Sortierschlüssel die (Breite x 100 + Höhe) und O ist, ein Array der (abgeschnittenen) Zeichenfolgen, aus denen die Box besteht. Während der Erstellung des Arrays merkt sich der Code die Breite der breitesten Box.
Die Anordnung der Box-Objekte wird nach dem Schlüssel K sortiert. Wenn die Boxen die gleiche Breite haben, wird durch den Schlüssel sichergestellt, dass sie nach der Höhe sortiert sind.
Nach dem Sortieren der Felder werden die Zeichenfolgen für jedes Feld in das Ausgabearray verschoben, wobei führende Leerzeichen hinzugefügt werden, wodurch das Feld zentral über dem breitesten positioniert wird.
Probieren Sie es online!
quelle