PostScript 50 двійкових, 113 ASCII
Для цього використовується графічний вихід. Hexdump програми з використанням двійкових маркерів:
$ 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
Завантажте, щоб спробувати . Використовуючи Ghostscript, текст, що підлягає передачі, може бути переданий програмі наступним чином:
gs -st=helloworld textRect_binary.ps
Графічний вихід виглядає приблизно так:

Той самий код, що використовує маркери ASCII, виглядає приблизно так:
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
Стратегія полягає в тому, щоб xyshowвизначити, куди ми рухаємося після показу кожного символу, перш ніж показувати наступний символ. Ми починаємо в нижньому лівому куті, рухаючись за годинниковою стрілкою, тобто спочатку вгору, потім праворуч, потім вниз, потім вліво. Ми завжди рухаємо 9 одиниць, тому спочатку ми маємо відносний рух 0 9, потім 9 0, потім 0 -9, потім -9 0. Ми можемо отримати від однієї пари цих чисел до наступної послідовність exch neg.
Нам потрібно створити масив, xyshowякий містить ці пари чисел, по одній парі для кожного символу. Це означає, що якщо у нас є helloworld, наприклад, рядок, що містить 10 символів, ми хочемо двічі піднятися вгору, потім праворуч тричі, потім двічі вниз та вліво тричі. Ми отримуємо ці значення (два і три), діливши довжину струни на 8, один раз округлюючи до підлоги, один раз до стелі.
Отже, ми копіюємо 0 9двічі, потім переходимо на відносні координати х / у, використовуючи exch neg, копіюємо ці три рази тощо.
Цей коментований код показує, що відбувається в стеку:
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