([]<>){({}{}(({}[()])))}{}{({}()<(({})<{({}()<<>({}<>)>)}{}((()()()()()){})>)>)}{}{}{({}<>)<>}<>
Probieren Sie es online!
Zweite Lösung, 96 Bytes
(([]<>)<{({}({})({}[()]))}{}>){({}(({})<{({}()<<>({}<>)>)}{}((()()()()()){})>))}{}{}{({}<>)<>}<>
Probieren Sie es online!
Erläuterung
Hier erkläre ich die erste Lösung, beide sind gleich lang, aber ich mag die erste, weil sie kühler ist und einige nette Tricks anwendet.
Der wichtigste Teil des Codes ist eine modifizierte Quadratwurzelfunktion, die ich vor einiger Zeit geschrieben habe. Die ursprüngliche Version war
{({}[({})({}())])}{}
Und das funktioniert, aber wir wollen eigentlich zwei Kopien der negativen Quadratwurzel. Warum? Wir benötigen zwei Kopien, da wir die Zeichenfolge auf zwei Ebenen durchlaufen, eine, um die Zeilen zu erstellen, und eine, um die Anzahl der Zeilen zu zählen. Wir wollen, dass es negativ ist, weil das Schleifen mit Negativen billiger ist.
Um dieses Negativ zu machen, bewegen wir uns [...]
so, dass es so aussieht
{({}({})({}[()]))}{}
Um zwei Kopien zu erstellen, ändern wir, wenn Pops auftreten
{({}{}(({}[()])))}{}
Jetzt, da wir das Bit haben, können wir es mit einer Stapelhöhe zusammenfügen, um den ersten Code zu erhalten, den wir brauchen.
([]<>){({}{}(({}[()])))}{}
Wir begeben uns in den Offstack, weil unsere Quadratwurzelfunktion zwei freie Nullen für die Berechnung benötigt und weil dies die Dinge in der Zukunft im Hinblick auf die Stapelumschaltung ein wenig billiger macht.
Nun konstruieren wir die Hauptschleife
{({}()<(({})<{({}()<<>({}<>)>)}{}((()()()()()){})>)>)}{}{}
Dies ist ziemlich einfach, wir wiederholen n-mal jedes Mal, wenn wir n Elemente verschieben und mit einer neuen Zeile abschließen (ASCII 10).
Sobald die Schleife beendet ist, müssen wir die Reihenfolge unserer Ausgabe umkehren, damit wir nur ein Standard-Umkehrkonstrukt verwenden.
{({}<>)<>}<>