Любой обычный шестиугольник может быть облицован бриллиантами, например, так (украдено из этого вопроса ):
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
Мы рассмотрим выше плитку размером 1 (так как стороны алмазов сделаны из одной / или \ каждой). Тот же лист размером 2 будет выглядеть так:
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
Ваша задача состоит в том, чтобы повернуть угол наклона алмаза кратным 60 градусам. Алмазная плитка на входе может быть любого размера (и размер явно не указан на входе). Но это всегда будет действительный тайлинг, и все стороны шестиугольника будут иметь одинаковую длину.
Это приведенные выше примеры, повернутые на 60 градусов по часовой стрелке:
______
/_/\_\_\
/\_\/_/\_\
/\/_/\_\/_/\
\/\_\/_/_/\/
\/_/\_\_\/
\_\/_/_/
____________
/ /\ \ \
/___/ \___\___\
/\ \ / /\ \
/ \___\/___/ \___\
/\ / /\ \ / /\
/ \/___/ \___\/___/ \
\ /\ \ / / /\ /
\/ \___\/___/___/ \/
\ / /\ \ \ /
\/___/ \___\___\/
\ \ / / /
\___\/___/___/
В качестве входного значения используется неотрицательное целое число и мозаичный ромб. Ваша программа (или функция) должна повернуть ее на целое число * 60 градусов. Вы сами решаете, вращать ли по часовой стрелке или против часовой стрелки, если это не противоречит. И на входе, и на выходе не должно быть лишних начальных или конечных пробелов.
Это код-гольф. Самый короткий код выигрывает.
Смежные вопросы:
источник
Ответы:
Pyth, 81 байт
Попробуйте онлайн
Вращается против часовой стрелки.
Каждое вращение на 60 ° выполняется с использованием следующего алгоритма. Предположим, что вход является шестиугольником порядка k , поэтому он имеет 2⋅ k + 1 строк и 4⋅ k столбцов. Чтобы найти повернутый символ в строке i столбца j ,
Тогда выходной символ
\
, если вход имеет/
в строке ( u + 1) / 2 столбца ( v + 1) / 2; еще/
, если вход имеет столбец_
строки u / 2 v / 2 или столбец строки u / 2 ( v + 2) / 2; еще_
, если вход имеет столбец\
строки ( u + 2) / 2 v / 2 или столбец строки ( u + 1) / 2 ( v - 1) / 2; еще(Мы не учитываем символы с полуцелыми индексами.)
источник
\
s, это просто_
s, которые вы должны проверить в обоих местах.\
s, но вам, возможно, придется нарисовать два_
s для каждого\
.JavaScript (ES6),
452356315 байтГде
\n
представляет буквальный символ новой строки. Редактировать: сэкономил 96 байт, поняв, что моему алгоритму не нужно знать количество и размер алмазов отдельно, а также несколько мелких гольфов, которые я пропустил в первый раз. Сэкономил 41 байт, переставив код так, чтобы в пункте назначения всегда была одна и та же пара символов, а также небольшой гольф, который я пропустил при переходе к моему предыдущему алгоритму.Показать фрагмент кода
Объяснение: Считает каждую пару выходных символов, которые могут быть
__
,/_
,_\
,/
или\
, проверку для соответствующих символов ввода , которые отображают на эти выходные символы. Ungolfed:источник