В моем предыдущем задании я нарисовал первую диаграмму в основном вручную (с помощью режима визуального блока vim). Но наверняка должен быть лучший способ ...
Учитывая ввод двух измерений, ширину и высоту, выведите гексагональную сетку с этими размерами в ASCII art.
Вот диаграмма, на которую ссылаются во вступлении (с незначительными правками), которая должна быть вашим выводом для ввода width=7, height=3
:
_____ _____ _____
/ \ / \ / \
_____/ -2,-1 \_____/ 0,-1 \_____/ 2,-1 \_____
/ \ / \ / \ / \
/ -3,-1 \_____/ -1,-1 \_____/ 1,-1 \_____/ 3,-1 \
\ / \ / \ / \ /
\_____/ -2,0 \_____/ 0,0 \_____/ 2,0 \_____/
/ \ / \ / \ / \
/ -3,0 \_____/ -1,0 \_____/ 1,0 \_____/ 3,0 \
\ / \ / \ / \ /
\_____/ -2,1 \_____/ 0,1 \_____/ 2,1 \_____/
/ \ / \ / \ / \
/ -3,1 \_____/ -1,1 \_____/ 1,1 \_____/ 3,1 \
\ / \ / \ / \ /
\_____/ \_____/ \_____/ \_____/
Обратите внимание на несколько вещей:
Ширина и высота по существу эквивалентны количеству шестиугольников для заданной координаты y и x соответственно. Это всегда будут нечетные числа.
Каждый шестиугольник представлен искусством ASCII
_____ / \ / \ \ / \_____/
но границы «разделяются» между соседними шестиугольниками.
Запятая в координатах всегда ровно на два символа ниже центра верхнего края. Затем координата x располагается непосредственно перед запятой, а координата y - сразу после.
Вы можете предположить, что координаты никогда не будут слишком большими, чтобы они перекрывали границы шестиугольника.
Входные данные могут быть приняты в виде строки, разделенной пробелами / запятыми, массива целых чисел или двух аргументов функции / командной строки. Выход должен быть одной строкой (в STDOUT, в качестве возвращаемого значения и т. Д.).
Поскольку это код-гольф , победит самый короткий код в байтах.
Сетка выше может быть использована в качестве контрольного примера. width=199, height=199
Сетка максимального размера,
очевидно, нецелесообразно включать сюда, но первые несколько строк и столбцов должны выглядеть следующим образом:
_____ ___
/ \ /
_____/-98,-99\_____/-96,
/ \ / \
/-99,-99\_____/-97,-99\___
\ / \ /
\_____/-98,-98\_____/-96,
/ \ / \
/-99,-98\_____/-97,-98\___
\ / \ /
\_____/-98,-97\_____/-96,
/ \ / \
/-99,-97\_____/-97,-97\___
\ / \ /
источник
Ответы:
Рубин, 221 байт
Неуправляемый в тестовой программе
Выход
Когда я заканчивал отладку, я заметил двусмысленность в спецификации. Где
w+1
делится на 4, первая и последняя координаты х нечетны, и нет никакой двусмысленности. Но гдеw-1
делится на 4, первая и последняя координаты х четные. Я предположил, что первый и последний столбцы должны быть смещены ниже следующих. Но затем я прочитал предыдущий вопрос и отметил, что в этом случае нечетные столбцы должны быть смещены ниже четных (обратите внимание, что дляw-1
деления на 4 невозможно выполнить оба варианта).Это различие не было сделано в этом вопросе, однако. Я оставлю это на усмотрение ОП и переделать в случае необходимости, хотя я бы предпочел этого не делать.
источник