Игра в китайские шашки ведется на доске с пробелами в форме шестиконечной звезды:
Мы можем создать ASCII-арт-представление этой доски, используя .
пустые места и буквы GYORPB
для шести цветных стартовых локаций:
G
G G
G G G
G G G G
B B B B . . . . . Y Y Y Y
B B B . . . . . . Y Y Y
B B . . . . . . . Y Y
B . . . . . . . . Y
. . . . . . . . .
P . . . . . . . . O
P P . . . . . . . O O
P P P . . . . . . O O O
P P P P . . . . . O O O O
R R R R
R R R
R R
R
Чтобы сделать его более интересным, мы также можем изменить размер. Мы измерим размер доски по длине стороны его треугольных стартовых локаций: доска выше имеет размер 4.
Поскольку вводить все это вручную очень сложно, напишем программу (или функцию) для этого!
Детали
Ваш код должен принимать положительное целое число, представляющее размер доски, через STDIN, ARGV или аргумент функции. Выведите шаблон шахматной доски в STDOUT (вы можете поочередно вернуть его в виде строки, если ваше представление является функцией).
Выход должен либо
- не иметь никаких пробелов или
- иметь ровно столько пробелов, чтобы заполнить шаблон идеальным прямоугольником шириной 6 * N + 1.
Выходные данные могут дополнительно иметь завершающий символ новой строки. Другие дополнительные (ведущие, конечные) пробелы не допускаются.
Примеры
Размер 1:
G
B . . Y
. . .
P . . O
R
Размер 2:
G
G G
B B . . . Y Y
B . . . . Y
. . . . .
P . . . . O
P P . . . O O
R R
R
Размер 4:
G
G G
G G G
G G G G
B B B B . . . . . Y Y Y Y
B B B . . . . . . Y Y Y
B B . . . . . . . Y Y
B . . . . . . . . Y
. . . . . . . . .
P . . . . . . . . O
P P . . . . . . . O O
P P P . . . . . . O O O
P P P P . . . . . O O O O
R R R R
R R R
R R
R
счет
Это код-гольф : выигрывает самый короткий код в байтах.
Ответы:
Рубин,
141127Возвращает прямоугольную строку
Неуправляемый в тестовой программе
источник
Python 2, 140 байт
Не здорово, но вот моя первоначальная ставка.
Правила пробелов добавили много байтов. Для сравнения приведем 120-байтовую программу Python 3, которая корректна только визуально и не соответствует правилам пробелов:
А вот моя чуть более длинная рекурсивная 149-байтовая попытка Python 3:
источник
Python 2, 152
Ретроспективно, это неправильный подход для Python, но я публикую его здесь на тот случай, если кто-то сможет его использовать. Вместо того, чтобы объяснять этот беспорядок кода, я попытаюсь изложить идею, стоящую за этим.
Идея состоит в том, чтобы использовать треугольные координаты , в которых треугольная решетка соответствует целым тройкам
(a,b,c)
сa+b+c=0
.(Здесь точки решетки изображены в виде шестиугольников.)
Мы можем преобразовать декартовы координаты в треугольные
отметив, что
x
иy
должен иметь одинаковый паритет, иначе это не шахматная доска, и мы должны напечатать пробел.В треугольных координатах, ограничивающие линии шестигранной звезды имеют уравнение:
a==n, b==n, c==n, a==-n, b==-n, c==-n
.Таким образом, мы можем определить, в каком регионе мы находимся, в каком из
[a,b,c,-a,-b,-c]
которых большеn
.Ограничительный прямоугольник требует, чтобы мы делали это для
x
закрытого интервала [-2 * n, 2 * n] иy
в закрытом интервале [-3 * n, 3 * n].источник
Сетчатка , 234 байта
Принимает участие в одинарных.
Каждая строка должна идти в свой собственный файл и
#
должна быть заменена на новую строку в файле. Это нецелесообразно, но вы можете запустить код как один файл с-s
флагом, сохранив#
маркеры и, возможно, заменив их на новые строки в выходных данных для удобства чтения.Код имеет минимальную регулярность-сложность. Основными этапами генерации являются следующие:
G
строку и первуюB.Y
строку (разделены маркерамиijk
и фактическими использованными символамиRPO
).G
строку с пробелом плюс минус G, пока не останется только один G.B.Y
строку с пробелом плюс и точка, минус аB
иY
до тех пор, пока нетB
иY
осталось.q
). Мы держим маркер (w
) в середине.RPO
наGBY
если они находятся перед маркером.Результаты после каждой из указанных выше точек (разделенных символом
=
') для ввода1111 (unary 4)
:источник
JavaScript ( ES6 ) 228
Строительство построчно. Невероятно длинный по сравнению с @ Sp3000, который делает то же самое.
Использование строки шаблона для сохранения еще 3 байтов для новых строк. Все новые строки значимы и подсчитаны.
источник