Цель
Цель программы - нарисовать художественный прямоугольник ASCII, многократно удвоенный по размеру, чередуясь по горизонтали и вертикали. Каждый раз, когда размер прямоугольника удваивается, дополнительная область представляется другим символом, а предыдущие области остаются неизменными. Два самых маленьких раздела содержат по одному символу каждый и могут находиться в любом углу.
Программа принимает одно целое число в качестве входных данных, определяя количество разделов, которые содержит полный прямоугольник.
Другие внешние ресурсы или входы не допускаются.
Пример ввода и вывода
10
ABDDFFFFHHHHHHHHJJJJJJJJJJJJJJJJ
CCDDFFFFHHHHHHHHJJJJJJJJJJJJJJJJ
EEEEFFFFHHHHHHHHJJJJJJJJJJJJJJJJ
EEEEFFFFHHHHHHHHJJJJJJJJJJJJJJJJ
GGGGGGGGHHHHHHHHJJJJJJJJJJJJJJJJ
GGGGGGGGHHHHHHHHJJJJJJJJJJJJJJJJ
GGGGGGGGHHHHHHHHJJJJJJJJJJJJJJJJ
GGGGGGGGHHHHHHHHJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
Критерий отбора
Самый короткий код за неделю выигрывает очки.
Ответы:
APL, 25 символов / байт *
В разобранном виде
Примеры
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL может быть записан в своей собственной (устаревшей) однобайтовой кодировке, которая отображает символы APL в верхние 128-байтовые значения. Следовательно, для целей оценки программа из N символов, в которой используются только символы ASCII и символы APL, может рассматриваться как длина N байтов.
источник
GolfScript, 30 символов
Пример (запустить онлайн ):
источник
Python 2.7 - 85
103Это использует
zip(*s)
синтаксис, чтобы постоянно транспонировать список. Большое спасибо Даниэлю за его совет, который побрил 12 персонажей! Затем побрился еще немного, используя цифры вместо букв.Кроме того, это использует,
1<<x
а не2**x
как сдвиг бит имеет более низкий (?) Приоритет. Заметим:И некоторый вывод:
источник
for i in s:print''.join(i)
.Руби, 88
Читает N из стандартного ввода.
Пример использования для N = 8:
Выход:
N = 10
Выход:
источник
J,
5743Примеры:
источник
MATLAB, 86 персонажей
Моя самая короткая попытка в MATLAB, pimped @flawr (дважды!):
Пример вывода:
источник
function M=f(n) M=''; if n M=cat(mod(n,2)+1,f(n-1),64+n*ones(2.^fix([n-1,n-2]/2))); end
fix
сfix(n/2-[.5,1])
PS: Действительно красивое решение сcat
, не знал об этом использовании , где вы можете выбрать размер =)q [73 символа]
пример
источник
Скриптинг , 59 символов
(Эта программа могла бы быть немного короче, если бы у меня были инструкции для логарифма по основанию-2, но я этого не делаю, поэтому я делаю это вручную с помощью цикла.)
Аннотированный код
n
это вход.Выход
Для
n
= 6:Конечно, вы можете изменить
뀀
(@
) на любой другой базовый символ, например, с помощью글
(пробела) иn
= 7:Самое большое число, которое не делает программу длиннее -
믰
(= 255), что дает нам (n
= 8 на этот раз):Если мы сделаем программу на 1 символ длиннее, например, используем
냟및
(=\u4DFF
) иn
= 9, мы получим:источник
C #,
239185182180 байтC # не имеет ничего о менее многословных языках.
Вывод, символы выбраны для красивости:
источник
for
цикла, сделав 182.PERL, 122 символа
с добавленным пробелом:
Выход:
источник
PERL,
9481 символОн строит фрактал итеративно по буквам, добавляя новые строки и столбцы, а также строки и столбцы ... Для этого используются простые строковые операции. Обратите внимание, что я вместо стандартной буквы использую стандартную переменную, чтобы допустить синтаксический сахар (например, пропуски пробелов
$:x2
и т. Д.)С добавленными пробелами и комментариями:
Некоторый вывод:
источник
Скриптинг , 45 символов
Это решение работает совершенно иначе, чем другое решение Sclipting. Это гораздо скучнее, но короче ...
аннотированный
источник
Delphi 348 || 449 с отступом
Без отступа
С отступом
источник
CJam, 30 (23) байтов
CJam на несколько месяцев моложе этой задачи, поэтому она не имеет права на зеленую галочку.
Проверьте это здесь.
ОП пояснил в комментарии, что разрешен любой набор уникальных печатных символов, поэтому я просто беру печатные символы ASCII с самого начала (с пробелом в углу,
!
рядом и так далее).Если ориентация может измениться между четными и нечетными входами (что я не думаю, но это то, что делает представление GolfScript), я могу сделать это в 25 байтов:
Идея очень проста: начать с сетки, содержащей пробел, а затем N-1 раз транспонировать ее и удвоить все строки следующим символом.
Для длинной версии, в конце я также переставляю снова N-1 раз, чтобы гарантировать последовательную ориентацию.
источник