PostScript 50 binär, 113 ASCII
Dies verwendet eine grafische Ausgabe. Hexdump des Programms mit Binärtoken:
$ hexdump -C textRect_binary.ps
00000000 74 5b 30 20 39 5b 74 92 62 34 92 36 92 38 92 10 |t[0 9[t.b4.6.8..|
00000010 32 92 19 5d 7b 92 2c 7b 32 92 19 7d 92 83 92 3e |2..]{.,{2..}...>|
00000020 92 6e 7d 92 49 5d 39 20 39 92 6b 91 c7 39 92 8e |.n}.I]9 9.k..9..|
00000030 92 c3 |..|
00000032
Laden Sie es herunter, um es zu testen . Mit Ghostscript kann der zu rendernde Text wie folgt an das Programm übergeben werden:
gs -st=helloworld textRect_binary.ps
Die grafische Ausgabe sieht folgendermaßen aus:
Derselbe Code, der ASCII-Token verwendet, sieht folgendermaßen aus:
t[0 9[t length
4 div dup
ceiling
2 copy]{cvi{2 copy}repeat
exch neg}forall]9 9 moveto/Courier 9 selectfont
xyshow
Die Strategie besteht darin, xyshow
zu definieren, wohin wir uns bewegen, nachdem wir jedes Zeichen gezeigt haben, bevor wir das nächste Zeichen zeigen. Wir beginnen in der unteren linken Ecke und bewegen uns im Uhrzeigersinn, dh zuerst nach oben, dann nach rechts, dann nach unten und dann nach links. Wir bewegen uns immer 9 Einheiten, so erste haben wir eine Relativbewegung 0 9
, dann 9 0
, dann 0 -9
, dann -9 0
. Mit der Sequenz können wir von einem Paar dieser Zahlen zum nächsten gelangen exch neg
.
Wir müssen ein Array erstellen xyshow
, das diese Zahlenpaare enthält, ein Paar für jedes Zeichen. Das heißt, wenn wir helloworld
als Beispiel einen String haben, der 10 Zeichen hat, wollen wir zweimal nach oben, dann dreimal nach rechts, dann zweimal nach unten und dreimal nach links. Wir erhalten diese Werte (zwei und drei), indem wir die Stringlänge durch 8 dividieren, einmal auf den Boden gerundet, einmal an die Decke.
Also kopieren wir 0 9
zweimal und wechseln dann mit zu den relativen x / y-Koordinaten exch neg
, kopieren diese dreimal und so weiter.
Dieser kommentierte Code zeigt, was auf dem Stapel passiert:
t[0 9 % t [ 0 9
[t length % t [ 0 9 [ length
4 div dup % t [ 0 9 [ length/4 length/4
ceiling % t [ 0 9 [ length/4=height width
2 copy] % t [ 0 9 [height width height width]
{%forall % t [ 0 9 ... x y height_or_width
cvi % t [ 0 9 ... x y height_or_width_integer
{2 copy} % t [ 0 9 ... x y height_or_width_integer {2 copy}
repeat % t [ 0 9 ... x y .. x y
exch neg % t [ 0 9 ... x y .. y -x
}forall] % t [0 9 ... -9 0]
9 9 moveto/Courier 9 selectfont
xyshow
xyshow
? Gerne stellst du dir dieses hier vor - vor einiger Zeit hast du mich vorgestelltkshow
, was mir nicht wirklich bewusst war ;-).Ruby
112100Ich bin neu in Ruby und dies ist mein erster Code Golf. Ich habe mich an Memowes Perl-Implementierung orientiert und versucht, eine Ruby-Version davon zu erstellen. Dies ist
112100 Zeichen und setzt voraus, dass Sie x eine Zeichenfolge zuweisen. Ich freue mich darauf, andere zu sehen.Bearbeitet, um Vorschläge umzusetzen. Ich denke, es sind jetzt 100 Zeichen. Danke Leute!
quelle
x.length
durchx.size
(Speichert 2 Zeichen)puts x[0..w=l/2-h=l/4]
.Perl (
124118109 + 3 = 112)Das war früher ziemlich einfach. Zählte alle Befehlszeilenoptionen als jeweils 1 Zeichen.
Beispiel:
quelle
(@s-$h*2)/2 == @s/2-$h
(2)$w
kann als dargestellt werden$w=(@s=split//)/2-($h=int@s/4);
, wodurch zwei Semikolons$"
–saves 1 char. (2) -$w+$h == @s/2
Speichert 1 Zeichen. (3) Wenn$w
um eins kleiner ist, können wir vereinfachen$"x($w-1)
. Dafür muss der$_
Wert um 1 erhöht werden. Speichert wie 3 Zeichen. (4) Das abschließende Semikolon ist überflüssig, spart 1 Zeichen. Dies führt zu dem Codefragmentsay@s[0..$w--];say$s[1-$_].$"x$w.$s[$w+$_]for+2..$h;say+reverse@s[@s/2..@s-$h]
(mit ein paar+
zum Spaß, so dass kein einziges Leerzeichen übrig bleibt).Brainfuck -
194187quelle
Mathematica
156 199344Bearbeiten : Dies ist eine umfangreiche Neufassung des früheren Codes. Es funktioniert im Wesentlichen genauso, nimmt jedoch als Eingabe eine Zeichenfolge mit einer Länge von <120 Zeichen und passt die Größe des Quadrats automatisch an.
Es könnte noch ein bisschen Golf gespielt werden, wird aber nicht die Größe der früheren und fehlerhafteren Versionen erreichen.
Beispiele
quelle
Perl + Regexes: 104 (101 + 3)
(Zählcode + Schalter)
Hier ist eine Lösung mit netten Regexes und ein bisschen Perl:
Dies funktioniert nur auf einer Eingangsleitung korrekt .
Inspiriert von memowe, aber im Wesentlichen ohne Arrays.
quelle
echo thisworksgreat | perl -plE'$w=($l=length)/2-($h=int$l/4);s/..{$w}\K.*/"\n".reverse$&/e;$"x=--$w;s/.\K(.*)(.)$/$"$2\n$1/while--$h'
PostScript (106)
Dies ist inspiriert von der Mathematica-Lösung von Dude .
Bei Ghostscript nennt man das so
Es erzeugt eine Ausgabe wie.
Hiermit
kshow
werden die Glyphen einzeln angezeigt. Nachdem genügend Glyphen für eine Seite angezeigt wurden, wird alles um -90 Grad gedreht, bevor mit den verbleibenden Glyphen fortgefahren wird.Um zu wissen, wann genügend Glyphen auf der Seite angezeigt wurden, erhöhen wir jedes Mal, wenn eine Glyphe angezeigt wird, einen Zähler um 4. Wenn der Zählerwert modulo the string length kleiner als 4 ist, dann wissen wir, dass wir drehen müssen:
Kommentierter und nicht Golf spielender Quellcode:
quelle
Python 2.x: 137
Ich bin neu im Code-Golfen und bin mir ziemlich sicher, dass dies verbessert werden kann ...
Visueller Testcode:
Etwas von Interesse: Diese Lösung hängt von der ganzzahligen Mathematik ab. Wenn Sie nur symbolisch rechnen, werden Sie feststellen,
h=(c-w-w)/2 => h=w-2
dass bei jedem anderen Ergebnis zwei Zeichen links unten fehlen, wenn Sie dieses Ergebnis ersetzen.quelle
K 84
.
quelle
Scala (135)
Das folgende Snippet setzt voraus, dass es
x
die zu formatierende Zeichenfolge enthält und in die Scala REPL eingefügt werden soll:Wenn Sie Scala nicht installiert haben, können Sie es mit diesem Online-Scala-Interpreter schnell überprüfen: http://www.simplyscala.com/ . Fügen Sie einfach den folgenden Text ein und drücken Sie auswerten:
quelle
Python 3 (120)
Prüfung
Eingang:
Ausgabe:
quelle
PHP (149)
Der zu druckende Text sollte sich in einer Variablen mit dem Namen befinden
$x
.quelle
Python2.7 (99)
Bearbeiten: Es verstößt anscheinend gegen die Regel, die maximale Fläche im Inneren einzuschließen.
quelle
JAVA - 320
Hinweis: - Die Eingabe erfolgt über die Befehlszeile
Eingabe: - HelloWorld
Ausgabe : -
Eingabe: - abcdefghijklmnopqrstuvwxyz
Ausgabe : -
quelle