Напишите программу или функцию, которая принимает два натуральных числа, ширину и высоту, и рисует шаблон ASCII- рисунка с ломаной клеткой с этими размерами, используя эту текстовую сетку 25 × 26 в качестве базовой ячейки:
.......#.....#####.......
.......##.....#####......
.......###.....#####.....
.......####.....####.....
.......#####.....###.....
.......######.....##.....
.......#######.....#.....
.......########..........
####################.....
.####################....
..####################...
...####################..
....####################.
.....####################
#.....##############.####
##.....#############..###
###....#############...##
####...#############....#
#####..#############.....
.#####.#############.....
..##################.....
........#####............
.........#####...........
..........#####..........
...........#####.........
............#####........
Так что, если вход был 2,1
выходом, будет:
.......#.....#####..............#.....#####.......
.......##.....#####.............##.....#####......
.......###.....#####............###.....#####.....
.......####.....####............####.....####.....
.......#####.....###............#####.....###.....
.......######.....##............######.....##.....
.......#######.....#............#######.....#.....
.......########.................########..........
####################.....####################.....
.####################.....####################....
..####################.....####################...
...####################.....####################..
....####################.....####################.
.....####################.....####################
#.....##############.#####.....##############.####
##.....#############..#####.....#############..###
###....#############...#####....#############...##
####...#############....#####...#############....#
#####..#############.....#####..#############.....
.#####.#############......#####.#############.....
..##################.......##################.....
........#####....................#####............
.........#####....................#####...........
..........#####....................#####..........
...........#####....................#####.........
............#####....................#####........
И если бы ввод был 5,4
выводом было бы:
.......#.....#####..............#.....#####..............#.....#####..............#.....#####..............#.....#####.......
.......##.....#####.............##.....#####.............##.....#####.............##.....#####.............##.....#####......
.......###.....#####............###.....#####............###.....#####............###.....#####............###.....#####.....
.......####.....####............####.....####............####.....####............####.....####............####.....####.....
.......#####.....###............#####.....###............#####.....###............#####.....###............#####.....###.....
.......######.....##............######.....##............######.....##............######.....##............######.....##.....
.......#######.....#............#######.....#............#######.....#............#######.....#............#######.....#.....
.......########.................########.................########.................########.................########..........
####################.....####################.....####################.....####################.....####################.....
.####################.....####################.....####################.....####################.....####################....
..####################.....####################.....####################.....####################.....####################...
...####################.....####################.....####################.....####################.....####################..
....####################.....####################.....####################.....####################.....####################.
.....####################.....####################.....####################.....####################.....####################
#.....##############.#####.....##############.#####.....##############.#####.....##############.#####.....##############.####
##.....#############..#####.....#############..#####.....#############..#####.....#############..#####.....#############..###
###....#############...#####....#############...#####....#############...#####....#############...#####....#############...##
####...#############....#####...#############....#####...#############....#####...#############....#####...#############....#
#####..#############.....#####..#############.....#####..#############.....#####..#############.....#####..#############.....
.#####.#############......#####.#############......#####.#############......#####.#############......#####.#############.....
..##################.......##################.......##################.......##################.......##################.....
........#####....................#####....................#####....................#####....................#####............
.........#####....................#####....................#####....................#####....................#####...........
..........#####....................#####....................#####....................#####....................#####..........
...........#####....................#####....................#####....................#####....................#####.........
............#####....................#####....................#####....................#####....................#####........
.......#.....#####..............#.....#####..............#.....#####..............#.....#####..............#.....#####.......
.......##.....#####.............##.....#####.............##.....#####.............##.....#####.............##.....#####......
.......###.....#####............###.....#####............###.....#####............###.....#####............###.....#####.....
.......####.....####............####.....####............####.....####............####.....####............####.....####.....
.......#####.....###............#####.....###............#####.....###............#####.....###............#####.....###.....
.......######.....##............######.....##............######.....##............######.....##............######.....##.....
.......#######.....#............#######.....#............#######.....#............#######.....#............#######.....#.....
.......########.................########.................########.................########.................########..........
####################.....####################.....####################.....####################.....####################.....
.####################.....####################.....####################.....####################.....####################....
..####################.....####################.....####################.....####################.....####################...
...####################.....####################.....####################.....####################.....####################..
....####################.....####################.....####################.....####################.....####################.
.....####################.....####################.....####################.....####################.....####################
#.....##############.#####.....##############.#####.....##############.#####.....##############.#####.....##############.####
##.....#############..#####.....#############..#####.....#############..#####.....#############..#####.....#############..###
###....#############...#####....#############...#####....#############...#####....#############...#####....#############...##
####...#############....#####...#############....#####...#############....#####...#############....#####...#############....#
#####..#############.....#####..#############.....#####..#############.....#####..#############.....#####..#############.....
.#####.#############......#####.#############......#####.#############......#####.#############......#####.#############.....
..##################.......##################.......##################.......##################.......##################.....
........#####....................#####....................#####....................#####....................#####............
.........#####....................#####....................#####....................#####....................#####...........
..........#####....................#####....................#####....................#####....................#####..........
...........#####....................#####....................#####....................#####....................#####.........
............#####....................#####....................#####....................#####....................#####........
.......#.....#####..............#.....#####..............#.....#####..............#.....#####..............#.....#####.......
.......##.....#####.............##.....#####.............##.....#####.............##.....#####.............##.....#####......
.......###.....#####............###.....#####............###.....#####............###.....#####............###.....#####.....
.......####.....####............####.....####............####.....####............####.....####............####.....####.....
.......#####.....###............#####.....###............#####.....###............#####.....###............#####.....###.....
.......######.....##............######.....##............######.....##............######.....##............######.....##.....
.......#######.....#............#######.....#............#######.....#............#######.....#............#######.....#.....
.......########.................########.................########.................########.................########..........
####################.....####################.....####################.....####################.....####################.....
.####################.....####################.....####################.....####################.....####################....
..####################.....####################.....####################.....####################.....####################...
...####################.....####################.....####################.....####################.....####################..
....####################.....####################.....####################.....####################.....####################.
.....####################.....####################.....####################.....####################.....####################
#.....##############.#####.....##############.#####.....##############.#####.....##############.#####.....##############.####
##.....#############..#####.....#############..#####.....#############..#####.....#############..#####.....#############..###
###....#############...#####....#############...#####....#############...#####....#############...#####....#############...##
####...#############....#####...#############....#####...#############....#####...#############....#####...#############....#
#####..#############.....#####..#############.....#####..#############.....#####..#############.....#####..#############.....
.#####.#############......#####.#############......#####.#############......#####.#############......#####.#############.....
..##################.......##################.......##################.......##################.......##################.....
........#####....................#####....................#####....................#####....................#####............
.........#####....................#####....................#####....................#####....................#####...........
..........#####....................#####....................#####....................#####....................#####..........
...........#####....................#####....................#####....................#####....................#####.........
............#####....................#####....................#####....................#####....................#####........
.......#.....#####..............#.....#####..............#.....#####..............#.....#####..............#.....#####.......
.......##.....#####.............##.....#####.............##.....#####.............##.....#####.............##.....#####......
.......###.....#####............###.....#####............###.....#####............###.....#####............###.....#####.....
.......####.....####............####.....####............####.....####............####.....####............####.....####.....
.......#####.....###............#####.....###............#####.....###............#####.....###............#####.....###.....
.......######.....##............######.....##............######.....##............######.....##............######.....##.....
.......#######.....#............#######.....#............#######.....#............#######.....#............#######.....#.....
.......########.................########.................########.................########.................########..........
####################.....####################.....####################.....####################.....####################.....
.####################.....####################.....####################.....####################.....####################....
..####################.....####################.....####################.....####################.....####################...
...####################.....####################.....####################.....####################.....####################..
....####################.....####################.....####################.....####################.....####################.
.....####################.....####################.....####################.....####################.....####################
#.....##############.#####.....##############.#####.....##############.#####.....##############.#####.....##############.####
##.....#############..#####.....#############..#####.....#############..#####.....#############..#####.....#############..###
###....#############...#####....#############...#####....#############...#####....#############...#####....#############...##
####...#############....#####...#############....#####...#############....#####...#############....#####...#############....#
#####..#############.....#####..#############.....#####..#############.....#####..#############.....#####..#############.....
.#####.#############......#####.#############......#####.#############......#####.#############......#####.#############.....
..##################.......##################.......##################.......##################.......##################.....
........#####....................#####....................#####....................#####....................#####............
.........#####....................#####....................#####....................#####....................#####...........
..........#####....................#####....................#####....................#####....................#####..........
...........#####....................#####....................#####....................#####....................#####.........
............#####....................#####....................#####....................#####....................#####........
- Аргумент ширины должен стоять первым. Любой разумный формат ввода (например
w,h
,w h
,(w, h)
) отлично. - Напечатайте или верните результат с дополнительным завершающим переводом строки.
- Вы можете использовать любые два различных печатных символа ASCII вместо
.
и#
. - Вы можете перевести базовую ячейку вертикально или горизонтально, как если бы она имела периодические граничные условия . Таким образом, верхний левый угол вывода не обязательно будет прямоугольником 7 × 8
.
. ( Новое правило! )
Самый короткий код в байтах побеждает.
В качестве бонуса создайте вместо этого изображение, где каждый .
является пикселем одного цвета, а каждый #
- пикселем другого цвета.
code-golf
ascii-art
kolmogorov-complexity
Кальвин Хобби
источник
источник
Ответы:
Pyth
61605549 байтПопробуйте онлайн: демонстрация
редактировать 1: объединить два утверждения, генерирующие полосу и треугольник (см. ниже)
редактировать 2: не видел, что мы можем использовать любые символы. Сохранено 5 байт редактирования
edit 3: @ Calvin'sHobbies позволил перевести базовое изображение. Поскольку мой подход был основан на этой идее, это очень помогло. -6 байт
И для бонуса Cookie :
Это только на 2 байта больше (51 байт) и генерирует файл
o.png
. Для ввода5\n4
он генерирует следующую картину:Объяснение:
Houndstooth Pattern выглядит действительно довольно нерегулярно. Но если мы перенесем левые 7 столбцов вправо и верхние 5 строк в нижнюю область, мы получим гораздо более приятный шаблон:
Сначала я создаю верхний левый блок 13x13:
Есть два простых неравенства, которые описывают две
#
области. Полоса может быть описана с помощью,y + 1 <= x <= y + 5
а треугольник может быть описан с помощьюx <= y - 5
. Я совместил эти два условия:Затем
+Rm012
добавляет 12 нулей в конце каждой строки, чтобы получить верхний блок 25x13.Нижний блок 25x13 теперь действительно прост:
Теперь осталось повторить шаблон и распечатать его.
Разница с бонусным кодом Cookie :
255
вместо того1
mjk*Qd
использовать*RQ
, так как я не хочу строку.w
сохраняет этот 2D-массив в файл (неявно преобразует его в png)источник
CJam,
1067371 байтПечатает
1
и0
вместо.
и#
. Попробуйте онлайн в интерпретаторе CJam .Как это работает
Бонус за печенье
печатает Portable BitMap вместо ASCII art.
Ниже приведен вывод для ввода
24 13
, преобразованный в PNG:источник
Befunge-93 ,
21201967 байтВот некоторые качественные befunge с обработкой исключений для отладки!
(Очевидно, это все еще очень пригодно для игры в гольф. Я просто хотел получить ответ здесь сейчас)
Итак, это состоит из разных частей.
Это просто инициализатор, он принимает значения и сохраняет их
В этом разделе сбрасывается количество строк, поэтому мы можем распечатать другие (по ширине) картинки рядом.
94+2*
рассчитывается 26, количество строк. Также, если высота равна нулю, программа завершится.Это дает ширину в стеке, поэтому мы знаем, сколько печатать
Это добавляет два фиктивных значения в стек, чтобы сообщить, когда мы завершили операцию, а также какую строку (n) мы выполняем. Затем это добавляет n значений в стек
Это контрольная секция, которая будет в (26-н) ряду. Это самый простой способ понять, как это сделать.
Это, очевидно, читается и выталкивает любую строку, читаемую в стек назад. Это означает, что когда мы вытащим его, он будет печататься правильно.
Это будет печатать, пока стек не достигнет 0, который мы оставили ранее.
Это берет 1 от номера определенной строки, чтобы напечатать, затем проверяет, является ли это нолем или нет. Если оно ненулевое, мы возвращаемся к четвертому блоку кода.
Это вычитает 1 из строки (n), печатает новую строку и возвращается к блоку 3
Как только все строки напечатаны, это вычитает одну из начальной высоты и возвращается к блоку 2.
Все остальное в коде - либо поток управления, либо управление стеками. Писать эту маску больше, чем я думал, будет, но я доволен тем, как она выглядит. Это намного более пригодно для игры в гольф, и это, вероятно, останется проектом в течение другого дня.
2120 -> 1967 : урезаны некоторые строки с большим количеством потерянного пространства
источник
Perl, 243
(Добавлен один байт для
-n
переключателя для получения входных данных от стандартного ввода.)Это довольно просто - все, что он делает, это конвертирует массив из 26 шестнадцатеричных чисел в двоичное и выводит их необходимое количество раз.
Пример:
Входные данные:
Выход:
источник
Rev 1, C,
118115 байтов9 байтов сохранено благодаря новому правилу, позволяющему переводить ячейку. 3 байта сохранены при использовании
w*=25
. Остальная часть поста остается без изменений.Rev 0, C, 127 байт
Это проходит через символы, печатая их по одному.
i%(25*w)||puts("")
вставляет новую строку в конце каждой строки.Мой способ просмотра дизайна похож на Jakube, но я перенесу верхние 8 строк в нижнюю и 5 правых столбцов влево, чтобы получить следующий вид. В программе этот шаг «переворачивается»
+20
и+8
в выражениях для x и y.Помимо «инверсии цветов» это может выглядеть очень похоже, но есть важное отличие: диагональные полосы совпадают. (обратите внимание, что оригинальный дизайн не имеет диагональной симметрии, поскольку он имеет размеры 25x26.)
Выражение
((y>x^y>x+5^x>y+4)^y/13)+34
производит следующее, где различные операторы сравнения производят полосы,^y/13
производят «изменение цвета» наполовину вверх и+34
принимают полученное число0,1
и увеличивают его до диапазона ASCII34,35
.Термин
&y/13==x/13
оценивается как false = 0 в верхнем правом и нижнем левом кварталах, создавая квадратную часть шаблона, как показано ранее. Обратите внимание, что, поскольку программа выполняет обратный отсчет, источник x = y = 0 находится внизу справа. Это удобно, так как квадрат#
шириной 13 символов, а квадрат"
шириной всего 12 символов.источник
Befunge -93, 968 байт
Да все верно! Соревновательный ответ Befunge!
Объяснение завтра, постель сейчас. Я скажу, однако, что я делаю умные вещи, перемещая пару стрел перенаправления, и я тоже довольно часто использую свойство циклического перехода. Проверьте это в этом онлайн-переводчике .
источник