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
дважды, затем переключаемся на относительные координаты x / y 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
xyshow
? Рада познакомить вас с этим - некоторое время назад вы представили меняkshow
, о котором я не знал ;-).Ruby
112100Я новичок в Ruby, и это мой первый гольф-код. Я обратил внимание на реализацию memlow в Perl и попытался сделать ее версию на Ruby. Это
112100 символов и предполагает, что вы присваиваете строку x. Ждем встречи с другими.Отредактировано для реализации предложений. Я думаю, что сейчас 100 символов. Спасибо ребята!
источник
x.length
наx.size
(Сохраняет 2 символа)puts x[0..w=l/2-h=l/4]
.Perl (
124118109 + 3 = 112)Раньше это было довольно просто. Все параметры командной строки учитываются как 1 символ каждый.
Пример:
источник
(@s-$h*2)/2 == @s/2-$h
(2)$w
может быть представлено как$w=(@s=split//)/2-($h=int@s/4);
, таким образом, сохраняя две точки с запятой$"
сохраняет 1 символ. (2) -$w+$h == @s/2
сохраняет 1 симв. (3) Если$w
меньше на единицу, мы можем упростить$"x($w-1)
. Для этого$_
нужно увеличить на 1. Сохраняет как 3 символа. (4) Последняя точка с запятой - überflüssig, экономит 1 символ. Это приводит к фрагменту кодаsay@s[0..$w--];say$s[1-$_].$"x$w.$s[$w+$_]for+2..$h;say+reverse@s[@s/2..@s-$h]
(с несколькими+
для развлечения, так что не осталось ни одного пробела).Brainfuck -
194187источник
Mathematica
156 199344Редактировать : это основной переписать предыдущий код. Он работает практически так же, но теперь принимает в качестве входных данных строку длиной <120 символов и автоматически измеряет квадрат.
Это может все еще быть немного игрой в гольф, но не уменьшится до размера более ранних, и изнурительных версий.
Примеры
источник
Perl + Regexes: 104 (101 + 3)
(считая код + переключатели)
Вот решение с использованием хороших регулярных выражений и небольшого количества Perl:
Это будет правильно работать только на одной входной линии.
Вдохновленный memowe, но по существу без каких-либо массивов.
источник
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)
Это вдохновлено решением Mathematica чувак .
С Ghostscript это называется
Это производит вывод как.
Он использует,
kshow
чтобы показать глифы один за другим. После того, как будет показано достаточное количество глифов для одной стороны, все поворачивается на -90 градусов, прежде чем продолжить работу с оставшимися глифами.Чтобы знать, когда на стороне было показано достаточное количество глифов, мы увеличиваем счетчик на 4 каждый раз, когда отображается глиф. Если значение счетчика по модулю длины строки меньше 4, то мы знаем, что нужно повернуть:
Прокомментированный исходный код без гольфа:
источник
Python 2.x: 137
Я новичок в коде игры в гольф и уверен, что это можно улучшить ...
Код визуального тестирования:
Что-то интересное: это решение зависит от целочисленной математики. Если вы просто выполните математику символически, вы найдете это
h=(c-w-w)/2 => h=w-2
, но если вы замените этот результат, в каждом другом результате будут пропущены два нижних левых символа.источник
К, 84
,
источник
Скала (135)
Следующий фрагмент предполагает, что
x
содержит строку для форматирования и должен быть вставлен в scala REPL:Если у вас не установлена программа Scala, вы можете быстро проверить ее с помощью онлайн-переводчика Scala: http://www.simplyscala.com/ . Просто вставьте следующий текст и нажмите «оценить»:
источник
Питон 3 (120)
Тестовое задание
вход:
выход:
источник
PHP (149)
Текст для печати должен быть в переменной с именем
$x
.источник
Python2,7 (99)
Редактировать: Это очевидно нарушает правило охвата максимальной площади внутри.
источник
ЯВА - 320
Примечание: - Ввод взят из командной строки
Вход: - HelloWorld
Выход : -
Входные данные: - abcdefghijklmnopqrstuvwxyz
Выход : -
источник