Binarny PostScript 50, 113 ASCII
Wykorzystuje to wyjście graficzne. Hexdump programu używającego tokenów binarnych:
$ 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
Pobierz, aby spróbować . Za pomocą Ghostscript tekst do renderowania można przekazać do programu w następujący sposób:
gs -st=helloworld textRect_binary.ps
Wyjście graficzne wygląda następująco:
Ten sam kod używający tokenów ASCII wygląda następująco:
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
Strategia polega xyshow
na określeniu, w którym miejscu poruszamy się po pokazaniu każdej postaci przed pokazaniem następnej postaci. Zaczynamy w lewym dolnym rogu, poruszając się zgodnie z ruchem wskazówek zegara, tj. Najpierw w górę, potem w prawo, potem w dół, a następnie w lewo. Zawsze poruszamy 9 jednostek, więc najpierw mamy względny ruch 0 9
, a 9 0
potem 0 -9
potem -9 0
. Możemy przejść od jednej pary tych liczb do następnej z sekwencją exch neg
.
Musimy zbudować tablicę dla xyshow
tych par liczb, po jednej dla każdej postaci. Oznacza to, że jeśli mamy helloworld
przykładowy ciąg znaków, który ma 10 znaków, chcemy iść dwa razy w górę, następnie trzy razy w prawo, następnie dwa razy w dół i trzy razy w lewo. Otrzymujemy te wartości (dwa i trzy) dzieląc długość struny przez 8, raz zaokrąglając do podłogi, raz do sufitu.
Tak więc kopiujemy 0 9
dwa razy, a następnie przełączamy się na względne współrzędne x / y za pomocą exch neg
, kopiujemy te trzy razy i tak dalej.
Ten skomentowany kod pokazuje, co dzieje się na stosie:
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
? Z przyjemnością przedstawiam Ci ten - jakiś czas temu przedstawiłeś mniekshow
, czego tak naprawdę nie byłem świadomy ;-).Ruby
112100Jestem nowy w Ruby i to jest mój pierwszy golf. Korzystałem z implementacji perla memowe i próbowałem stworzyć Ruby. Jest to
112100 znaków i zakłada, że przypisujesz ciąg do x. Nie mogę się doczekać, aby zobaczyć innych.Edytowane w celu wdrożenia sugestii. Myślę, że teraz ma 100 znaków. Dzięki chłopaki!
źródło
x.length
zx.size
(Zapisuje 2 znaki)puts x[0..w=l/2-h=l/4]
.Perl (
124118109 + 3 = 112)To dawniej było dość proste. Wszystkie opcje wiersza poleceń zostały policzone jako 1 znak.
Przykład:
źródło
(@s-$h*2)/2 == @s/2-$h
(2)$w
można przedstawić jako$w=(@s=split//)/2-($h=int@s/4);
, oszczędzając w ten sposób dwa średniki$"
oszczędza 1 znak. (2) -$w+$h == @s/2
oszczędza 1 znak. (3) Jeśli$w
jest o jeden mniejszy, możemy uprościć$"x($w-1)
. W tym$_
celu należy zwiększyć o 1. Zapisuje jak 3 znaki. (4) Końcowy średnik to überflüssig, oszczędza 1 znak. Prowadzi to do fragmentu kodusay@s[0..$w--];say$s[1-$_].$"x$w.$s[$w+$_]for+2..$h;say+reverse@s[@s/2..@s-$h]
(z kilkoma+
dla zabawy, więc nie ma już ani jednej spacji).Brainfuck -
194187źródło
Mathematica
156 199344Edycja : Jest to główne przepisanie wcześniejszego kodu. Działa zasadniczo tak samo, ale teraz pobiera jako ciąg ciąg znaków o długości <120 znaków i automatycznie dostosowuje rozmiar kwadratu.
Nadal może być nieco golfa, ale nie sprowadza się do rozmiarów wcześniejszych i bardziej buggerowych wersji.
Przykłady
źródło
Perl + Regeksy: 104 (101 + 3)
(liczenie kodu + przełączniki)
Oto rozwiązanie wykorzystujące ładne Regexy i trochę Perla:
Działa to poprawnie tylko na jednej linii wejściowej.
Zainspirowany memowe, ale zasadniczo bez żadnych tablic.
źródło
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)
Jest to inspirowane rozwiązaniem Mathematica dla kolesia .
Z Ghostscript nazwij to tak
Daje wydajność jak.
Służy
kshow
do wyświetlania glifów jeden po drugim. Po pokazaniu wystarczającej liczby glifów dla jednej strony wszystko jest obracane o -90 stopni, zanim przejdzie do pozostałych glifów.Aby wiedzieć, kiedy z boku pokazano wystarczającą liczbę glifów, zwiększamy licznik o 4 za każdym razem, gdy wyświetlany jest glif. Jeśli wartość licznika modulo długość łańcucha jest mniejsza niż 4, to wiemy, że musimy obrócić:
Skomentowany i niezagrzebany kod źródłowy:
źródło
Python 2.x: 137
Nie znam się na golfie i jestem pewien, że można to poprawić…
Kod testowania wizualnego:
Coś interesującego: To rozwiązanie zależy od matematyki liczb całkowitych. Jeśli tylko wykonasz matematykę symbolicznie, znajdziesz to
h=(c-w-w)/2 => h=w-2
, ale jeśli podmienisz ten wynik, w każdym innym wyniku nie będzie dwóch znaków w lewym dolnym rogu.źródło
K, 84
.
źródło
Scala (135)
Poniższy fragment kodu zakłada, że
x
zawiera ciąg do sformatowania i należy go wkleić w Scala REPL:Jeśli nie masz zainstalowanej Scali, możesz szybko to sprawdzić za pomocą tego internetowego interpretera Scala: http://www.simplyscala.com/ . Wystarczy wkleić następujący tekst i naciśnij klawisz oceny:
źródło
Python 3 (120)
Test
Wejście:
wynik:
źródło
PHP (149)
Tekst do wydrukowania powinien być w zmiennej o nazwie
$x
.źródło
Python2.7 (99)
Edycja: najwyraźniej narusza zasadę obejmowania maksymalnego obszaru wewnątrz.
źródło
JAVA - 320
Uwaga: - Dane wejściowe są pobierane z wiersza poleceń
Wejście: - HelloWorld
Wynik : -
Dane wejściowe: - abcdefghijklmnopqrstuvwxyz
Wynik : -
źródło