Резюме
Вдохновленный недавней популярностью художественных испытаний ASCII, цель этой задачи состоит в том, чтобы нарисовать шахматную доску ASCII, подобную той, на которой можно играть в шахматы.
Напишите программу, которая принимает положительное целое число n
в качестве аргумента, stdin
входного или пользовательского ввода, и выводит шахматную доску с квадратами n
х n
вместе с границей толщиной 1 символ.
Каждый квадрат должен быть 2х2 символов. Квадраты должны следовать обычному чередующемуся бело-черному (сначала белый, как в левом верхнем углу) узору шахматной доски. Белые квадраты должны состоять из символов пробела ( ), а черные квадраты - из
#
символов фунта ( ).
Граница должна быть сделана из тире ( -
) с плюсом ( +
) на границе или перпендикулярной точке квадрата.
вход
Положительное целое число, представляющее количество квадратов (размеры в квадратах) для рисования на шахматной доске, причем каждый квадрат равен 2х2 символа.
Пример результатов
n=2
+--+--+
| |##|
| |##|
+--+--+
|##| |
|##| |
+--+--+
n=3
+--+--+--+
| |##| |
| |##| |
+--+--+--+
|##| |##|
|##| |##|
+--+--+--+
| |##| |
| |##| |
+--+--+--+
n=4
+--+--+--+--+
| |##| |##|
| |##| |##|
+--+--+--+--+
|##| |##| |
|##| |##| |
+--+--+--+--+
| |##| |##|
| |##| |##|
+--+--+--+--+
|##| |##| |
|##| |##| |
+--+--+--+--+
... и так далее.
Заметки
- Конечные пробелы и новые строки являются приемлемыми.
- Вы можете написать целую программу или функцию.
- Нет ведущих пробелов.
- Ваша программа должна отображать правильные результаты для n = 15.
- Для менее известных эзотерических языков и аналогичных, предоставьте ссылку на язык.
n=0
должен производить+
. (необязательно, но настоятельно рекомендуется и рекомендуется)- Самый короткий код в байтах выигрывает, так как это код гольфа.
+
дляn=0
.Ответы:
J, 24 байта
Анонимная функция:
Использование:
источник
&.>
один короче чемeach
. Стоит отметить, что это работает, только еслиBoxForm
установленоASCII
.Python 2, 79
Для каждой строки выбирается один из паттернов
и печатает
3*n+1
символы из него. Шаблон выбирается путем повторения его первых 6 символов, выбранных с помощью трюка с чередованием строк, который также служит для извлечения фрагмента правильной длины.Правильный шаблон выбирается на основе значения индекса строки
i
по модулю 6 с помощью арифметического выражения,3**i%7/2%3
которое дает повторяющийся шаблон [0,1,1,0,2,2]. Я нашел это, используя тот факт, чтоx**i%7
есть точка6
, затем пробовал разные значенияx
и разную постобработку, чтобы получить правильный шаблон.источник
Пиф, 37
Скорее взломано вместе, но коротко.
Демонстрация.
источник
CJam,
4342 байтаПопробуйте онлайн .
Каждая координата отображается на символ, например, в верхнем левом углу
(0, 0) -> "+"
. В частности, мы рассчитываеми индексировать в строку
"#|-+ "
соответственно.источник
Сетчатка , 106 байт
Принимает ввод как унарный (на основе этого мета-обсуждения ).
Каждая строка должна идти в свой собственный файл и
n
должна быть заменена на новую строку в файлах. Это нецелесообразно, но вы можете запускать код как есть, как один файл, с-s
флагом, сохраняяn
маркеры. При желании вы можете изменитьn
символы на новые строки в выходных данных. Например:Далее игра в гольф и некоторые объяснения придут позже.
источник
JavaScript (ES6), 117
Отрывок:
Анонимная функция. Начинается с полного массива
+--+--+--...
строк и соответствующих строк, заменяет значения+
for|
и-
forили,
#
в зависимости от ситуации.Выражение, которое решает заменяющий символ, возможно
"| |##| "[x%6+(i%6>2)*3]
, может быть использовано в дальнейшем, но я обнаружил, что использование более длинной избыточной строки экономит больше символов, чем сложные вычисления.источник
CJam, 59 байт
Это слишком долго ..
Попробуйте онлайн здесь
источник
CoffeeScript с ES6, 106 байт
JavaScript (ES6), 111 байт
Символы новой строки значимы и считаются по 1 байту каждая.
Явный возврат сделал это немного длиннее:
демонстрация
На момент написания статьи Firefox был единственным крупным браузером, совместимым с ES6.
источник
Питон 3,
114 108100Предыдущие решения
108
114
118 (не представлено)
источник
CJam, 46 байтов
Попробуйте онлайн
Ну, я надеялся, что у меня будет хотя бы оригинальное решение (я обычно не смотрю на другие ответы, прежде чем работать самостоятельно). Оказывается, что @ Sp3000 уже сделал что-то очень похожее, только лучше. Но так как я уже сделал работу, я решил опубликовать ее в любом случае.
Объяснение:
источник
HackVM , 158 байт
Определенно не победитель, но это выглядело как хороший вызов для HVM.
Поместите размер в первую ячейку памяти и используйте следующий код:
Примечание: код должен быть точно в одну строку, чтобы работать.
Объяснение:
Код вызывает 2 функции
PLUSHDASHLINE
иNORMALLINE
поддерживает глобальное состояние для четностей (т. Е. Помещать a' '
или a'#'
в ячейку).Объяснение для
PLUSDASHLINE
:Объяснение для
NORMALLINE
:Был бы признателен, если бы кто-то дал советы по его дальнейшему улучшению :)
источник
Python 2, 98
Не самый короткий путь, но забавный способ. Функция
f
принимает две строкиa,b
и разделительs
и чередует свои аргументы какsaasbbsaasbbsaas
. Строки доски создаются в этой форме с соответствующими символами, а затем сами чередуются таким образом, чтобы получить результат.источник
n=0
. Большинство решений (которые будут приняты) выдает «+». Это решение создает "++ (newline) ++", исключая обычные завершающие 2 новых строки (что разрешено).Рубин: 83 символа
Образец прогона:
источник
Руби, 87
Это анонимная функция. Назовите это так (все возможности от 0 до 5)
Он использует
ljust
метод для пустой строки. Ruby позволяет указывать строку дополнения для выравнивания, поэтому мы используемljust
одну из трех возможных строк дополненияb,c,d
на массивa
, упорядоченную какbccbdd
.источник
Юлия, 124 байта
Это создает безымянную функцию, которая принимает целое число и печатает на стандартный вывод.
Ungolfed + объяснение:
источник
Javascript, ES6 149
Довольно весело писать, хотя это немного долго
Работает на Firefox
1 - Открытая консоль
2 - Введите следующее
Выход (n = 15):
источник
join('\n')
сjoin` `
, где пространство я написал означает фактический символ новой строки.Хаскелл, 99
Это частично вдохновлено предыдущим ответом на Haskell от catgocat ; Я написал свою версию, потом посмотрел на нее и написал другую. Я играю по тем же правилам - вход является аргументом, а вывод - stdout. (Если это может быть чистая функция, вычтите 7 символов
putStr$
.)Мы используем,
t
чтобы взять область 3 n + 1 символов из бесконечной шахматной доски, построенной с использованиемcycle
, и все. Основная идея , которую я взял из другого ответа заключается в том , что положить образцы обоего пограничным и клетчатые клетки вместе в строках.Моя первая версия (140 символов) использовала стратегию вычисления символа в каждой точке, что может быть лучше для более сложной задачи, чем эта.
источник
cat <<EOF > sol1.hs
и считая сdu -b sol1.hs
.wc
согласен, и я проверил наличие непечатных символов. Означает ли это 84-байтовое версия работать ? Если так, я возьму это :)Хаскелл, 118
Это мой первый ответ по гольфу с кодом Haskell и вот он:
Более читаемая версия:
Выход
источник
f 1
должен выдать 1 пустое поле,f 0
выдает только знак плюс.С -
119101Использует теперь расчет, похожий на ответ @ Sp3000. Также пара оптимизаций.
я думаю что
?:
это расширение GCC ...Старый ответ:
Он поддерживает 2 координаты и честно вычисляет, какой символ печатать для каждой пары. Список символов для печати хранится в массиве, и он один печатает «неокрашенную» сетку. Первый элемент массива модифицируется для рисования черных квадратов.
Я мог бы изменить это так, чтобы вместо двух независимых координат это было одно значение, считая вверх или (может быть, даже лучше), но сейчас я не могу обернуться вокруг этого.
Бонус - замена 3 любым другим числом приводит к программе, которая рисует правильную шахматную доску с другим размером ячейки.
источник
awk - 91
Была настоящая борьба, чтобы получить ее ниже 100. Подсчет в обратном направлении и использование оператора матча были прорывами;) Остальное - довольно простая логика.
источник
Пайк, 47 байт, неконкурирующий
Попробуй это здесь!
источник