En mi desafío anterior , dibujé el primer diagrama principalmente a mano (con la ayuda del modo de bloqueo visual de vim). Pero seguramente debe haber una mejor manera ...
Dada una entrada de dos dimensiones, un ancho y una altura, genera una cuadrícula hexagonal con esas dimensiones en el arte ASCII.
Aquí está el diagrama al que se hace referencia en la introducción (con ediciones menores), que debería ser su salida para la entrada 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 \
\ / \ / \ / \ /
\_____/ \_____/ \_____/ \_____/
Observe varias cosas:
El ancho y la altura son esencialmente equivalentes a cuántos hexágonos hay para una coordenada y y x dada, respectivamente. Estos siempre serán números impares.
Cada hexágono está representado por el arte ASCII
_____ / \ / \ \ / \_____/
pero las fronteras son "compartidas" entre hexágonos vecinos.
La coma en las coordenadas siempre es exactamente dos caracteres debajo del centro del borde superior. La coordenada x se coloca directamente antes de la coma y la coordenada y directamente después.
Puede suponer que las coordenadas nunca serán demasiado grandes de modo que se superpongan con los bordes del hexágono.
La entrada puede tomarse como una cadena separada por comas / espacios en blanco, una matriz de enteros o dos argumentos de función / línea de comando. La salida debe ser una sola cadena (a STDOUT, como valor de retorno, etc.).
Como se trata de código golf , el código más corto en bytes ganará.
La cuadrícula de arriba se puede usar como un caso de prueba. La width=199, height=199
cuadrícula de tamaño máximo
es obviamente poco práctica para incluir aquí, pero las primeras filas y columnas deberían tener el siguiente aspecto:
_____ ___
/ \ /
_____/-98,-99\_____/-96,
/ \ / \
/-99,-99\_____/-97,-99\___
\ / \ /
\_____/-98,-98\_____/-96,
/ \ / \
/-99,-98\_____/-97,-98\___
\ / \ /
\_____/-98,-97\_____/-96,
/ \ / \
/-99,-97\_____/-97,-97\___
\ / \ /