Die Herausforderung
Geben Sie bei einer gegebenen Zeichenfolge den Text in Form eines Quadrats aus.
Sie können davon ausgehen, dass der Text immer in ein Quadrat passt und niemals eine leere Zeichenfolge ist.
Sie können auch davon ausgehen, dass es niemals Zeilenumbrüche geben wird.
Beispiel
Input:
Hi, world
Output:
Hi,
wo
rld
Testfälle
Input:
Hi, world! Hello
Output:
Hi,
worl
d! H
ello
Input:
Lorem ipsum dolor sit amt
Output:
Lorem
ipsu
m dol
or si
t amt
Input:
H
Output:
H
Regeln
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes! Tiebreaker ist die am besten bewertete Antwort.
- Standardlücken sind verboten.
Antworten:
Vim,
59, 57, 48 Bytes / TastenanschlägeDa V abwärtskompatibel ist, können Sie es online ausprobieren!
Ich habe zufällig eine positive Bewertung für diese Antwort erhalten, also habe ich sie noch einmal durchgesehen. Meine Vim-Golf-Fähigkeiten haben in den letzten 7 Monaten stark zugenommen, so dass ich sah, dass diese Antwort sehr schlecht golfen war. Dieser ist viel besser.
quelle
Brainfuck ,
116112 BytesProbieren Sie es online!
Sicher in Geschmacksrichtungen von BF, die die Zellen nicht maskieren
256
, unterstützt keine Null-Bytes.Entfernen Sie die anfänglichen Pfeile nach rechts, wenn die Variante einen negativen Speicher für 4 gespeicherte Bytes unterstützt.
Erläuterung
Das Programm ist in 3 Phasen unterteilt:
Bühne 1
In dieser Phase werden alle Zeichen auf das Band geschrieben, während die Anzahl der Zeichen gezählt wird.
Dies ist das Band für die Eingabe
abcdefghi
nach diesem Band:Das
009
ist die Zählung.Für jedes Zeichen verschieben wir die erste Null links
[<]
und addieren dann eine zur Zählung<<+>>>
und bewegen uns dann ganz rechts zur Null,[>]
um uns für das nächste Zeichen vorzubereiten .Stufe 2
In dieser Phase wird die Quadratwurzel der in der zweiten Zelle gespeicherten Länge erstellt.
Es wird
1, 3, 5, 7, ...
solange subtrahiert, bis die Zahl Null erreicht, während die Anzahl der Iterationen überprüft wird.Es funktioniert, weil quadratische Zahlen als ausgedrückt werden können
1 + 3 + 5 + ...
.Stufe 3
Bezeichnen Sie die Quadratwurzel der oben angegebenen Länge als
n
.Diese Stufe gibt
n
Zeichen auf einmal aus und gibt dann eine neue Zeile aus, bis das Band gelöscht ist.quelle
Python 2, 55 Bytes
quelle
05AB1E , 5 Bytes
Probieren Sie es online!
quelle
»
sich jetzt Zeilenumbrüche befinden.MATL , 6 Bytes
Probieren Sie es online!
Erläuterung
quelle
Gelee,
87 BytesEin Byte dank @ Dennis gespeichert .
Probieren Sie es online aus.
Erläuterung
quelle
œs
unds
mache dasselbe hier.½
nicht stattƽ
?s
undœs
so gießen sie auf int.JavaScript (ES7), 49 Byte
44 Bytes nur in Firefox Nightly 43-46 (
**
wurde irgendwann zwischen Firefox Nightly 42 und 43 eingeführt undg
als separater Parameter wurde irgendwann zwischen Firefox Nightly 46 und 47 entfernt):quelle
+
ins.length*+.5
*+
Syntax noch nie gesehen . Könnte es bitte jemand erklären?**
.J 9 Bytes
Dies ist ein monadischer Hook über der Eingabezeichenfolge:
Der richtige Ton ist eine Reihe von Kompositionen:
Das linke ist ein formendes Verb, das so geschaltet ist, dass es im Hook-Format funktioniert.
Hier sind einige Zwischenergebnisse:
In Worten:
quelle
$~,~@
eine Art Emoticon ähnelt, aber@
seltsam für ein Ohr scheint, aber&
besser passt, oder$~,~&
$~2#%:@#
ist 8. Der linke Teil einer Gabel kann eine Konstante sein.C 64 Bytes
Rufe
f()
mit der Schnur zum Quadrat.Probiere es auf ideone aus .
quelle
int
Argument anstelle von arbeiten lassenchar*
?int*
da dieser beim Hinzufügen falsch skaliert würde.s+=write(puts(""),s,m));
stattdessen vors+=m)printf("%.*s\n",m,s);
Perl, 23 + 4 (
-pF
Flags) = 27 Bytes-2 Bytes dank @DomHastings
-1 Bytes dank @DomHastings
Probieren Sie es online!
Erweiterungen : Berechnet die Quadratwurzel (nennen wir sie
S
für die Erklärung) der Größe der Eingabe (es wird immer eine Ganzzahl sein) (@F
wird im skalaren Kontext verwendet und gibt somit ihre Größe zurück) und fügt nach jedem Block von eine neue Zeile hinzuS
Zeichen.quelle
$@
,;) Sie können ein Byte mity///c
anstelle der Länge speichern, und ich denke, Sie können auch eine wörtliche neue Zeile verwenden. Ich habe versucht, etwas mit dem Einstellen$,
und Anpassen zu tun , aber ich denke, das ist viel kürzer!$@
! Vielen Dank für diey///c
, ich neige dazu zu vergessen, dass es existiert.$=
anstelle von verwendet wurde$@
, wodurch-l
Flag nicht verwendet werden kann .-pF
zsh, 36 Bytes
Nimmt Eingaben als Befehlszeilenargument und gibt sie an STDOUT aus.
quelle
05AB1E ,
86 BytesVielen Dank an @quartata, dass Sie mich über die Quadratwurzelfunktion informiert haben
Probieren Sie es online!
Erläuterung
quelle
«
ist kurz für den Beitritt in Newlines :).«
Python,
9475716563 BytesAlte Version:
quelle
input()
standardmäßig verwenden können , um Eingaben in Anführungszeichen zu erhalten, es sei denn, Sie möchten diese Option ausdrücklich entfernen.CJam , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
Pyth, 8 Bytes
Probieren Sie es online aus
Wie es funktioniert
quelle
Dyalog APL, 10 Bytes
Erläuterung:
Tests:
quelle
Cheddar, 27 Bytes (nicht konkurrierend)
Ich habe die
.chunk
Funktion vor einiger Zeit hinzugefügt , sie aber beim Übergang zum neuen stdlib-Format entfernt und vergessen, sie erneut hinzuzufügen. Cheddar hat einen engagiertensqrt
Operator,**.5
ist aber kürzerProbieren Sie es online!
Erläuterung
quelle
Bash + GNU-Dienstprogramme, 25
Nicht so unterschiedlich zu @ Doorknobs Antwort , aber es
dc
ist ein kürzerer Weg, um die Quadratwurzel zu erhalten.quelle
𝔼𝕊𝕄𝕚𝕟 11 Zeichen / 14 Bytes
Try it here (ES6 browsers only).
Mit diesem Code generiert (in der Browserkonsole des Interpreters ausführen):
quelle
Brainfuck, 83 Bytes
Probieren Sie es online!
Dies verwendet die gleiche Idee wie die Antwort von Leaky Nun . Er bat um Hilfe beim Golfspielen im Chat und schlug mir vor, dies als neue Antwort hinzuzufügen. (Eigentlich war das, was ich im Chat geschrieben habe, eine 84-Byte-Lösung, die dieser sehr ähnlich ist.)
Zum Vergleich
>
wird zu Beginn ein zusätzliches Element für Brainfuck-Implementierungen benötigt, die keine negativen Speicheradressen zulassen.Wie erwartet wird die Länge der Eingabe ermittelt, die Quadratwurzel verwendet und die Zeilen entsprechend gedruckt. Es nutzt perfekte Quadrate als Teilsummen von
1 + 3 + 5 ...
.quelle
Brain-Flak ,
11096 BytesProbieren 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 aussiehtUm 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.
quelle
PHP, 51 Bytes
quelle
Perl 6 , 38 Bytes
Erläuterung:
quelle
Cheddar, 57 Bytes
Da Variablen defekt sind, müsste ich Variablen durch Lambda-Anwendung übergeben.
Es stellt sich auch heraus, dass die Verwendung der Lambda-Anwendung kürzer wäre, selbst wenn die Variablen funktionieren würden.
Verwendung
quelle
Pyke, 5 Bytes
Probieren Sie es hier aus!
quelle
Java 1.7, 110 Bytes
Versuch es! (Ideone)
Ich habe einen anderen Ansatz mit einer Funktion versucht, die das Ergebnis als String zurückgibt, aber nur den String deklarieren zu müssen und die return-Anweisung ist bereits teurer (byte-count-weise) als die print-Anweisung.
Muss Javas Ausführlichkeit lieben ... :)
quelle
i=0
,i<k
unds.substring(i*k,i++*k+k)
statti=-1
,++i<k
,s.substring(i*k,i*k+k)
. Normalerweise verwenden wir nurJava 7
stattJava 1.7
, aber es ist gut, dass Sie es hinzugefügt haben, viele Leute vergessen dies.R ,
5954 BytesProbieren Sie es online!
Druckt mit einem nachgestellten Zeilenumbruch. Überraschend kurz, wenn man bedenkt, wie schlecht R mit Saiten umgeht.
quelle
PowerShell, 56
5861Bytesquelle
Ruby
-p
,403330 Bytes-7 Bytes von @Jordan.
Probieren Sie es online!
quelle
Konvex , 7 Bytes
Probieren Sie es online!
Lustige Tatsache:
_,mQ/\*
funktioniert auch mit TIO, weil es so funktioniert.Wie habe ich vergessen, eine 1-Zeichen-Quadratwurzel-Operation durchzuführen?
quelle