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\___
\ / \ /
fuente
Respuestas:
Rubí, 221 bytes
Sin golf en el programa de prueba
Salida
Cuando estaba terminando de depurar, noté una ambigüedad en la especificación. Donde
w+1
es divisible por 4, la primera y la última coordenada x son impares y no hay ambigüedad. Pero dondew-1
es divisible por 4, las primeras y últimas coordenadas x son pares. Supuse que la primera y la última columna deberían estar desplazadas debajo de las siguientes. Pero luego leí la pregunta anterior y noté en ese caso que las columnas impares debían compensarse por debajo de las pares (tenga en cuenta que paraw-1
divisible por 4 no es posible hacer ambas cosas).Sin embargo, esa distinción no se hizo en esta pregunta. Dejaré esto a juicio de OP y volver a trabajar si es necesario, aunque preferiría no tener que hacerlo.
fuente