Dans mon défi précédent , j'ai dessiné le premier diagramme principalement à la main (à l'aide du mode bloc visuel de vim). Mais il doit sûrement y avoir un meilleur moyen ...
Étant donné une entrée de deux dimensions, une largeur et une hauteur, sortez une grille hexagonale avec ces dimensions dans l'art ASCII.
Voici le diagramme référencé dans l'intro (avec des modifications mineures), qui devrait être votre sortie pour l'entrée 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 \
\ / \ / \ / \ /
\_____/ \_____/ \_____/ \_____/
Remarquez plusieurs choses:
La largeur et la hauteur sont essentiellement équivalentes au nombre d'hexagones qu'il y a respectivement pour une coordonnée y et x donnée. Ce seront toujours des nombres impairs.
Chaque hexagone est représenté par l'art ASCII
_____ / \ / \ \ / \_____/
mais les frontières sont «partagées» entre les hexagones voisins.
La virgule dans les coordonnées est toujours exactement deux caractères sous le centre du bord supérieur. La coordonnée x est ensuite positionnée directement avant la virgule, et la coordonnée y directement après.
Vous pouvez supposer que les coordonnées ne seront jamais trop grandes de sorte qu'elles chevaucheraient les frontières de l'hexagone.
L'entrée peut être considérée comme une chaîne séparée par des espaces / virgules, un tableau d'entiers ou deux arguments de fonction / ligne de commande. La sortie doit être une chaîne unique (vers STDOUT, comme valeur de retour, etc.).
Puisqu'il s'agit de code-golf , le code le plus court en octets gagnera.
La grille ci-dessus peut être utilisée comme cas de test. La width=199, height=199
grille de taille maximale
n'est évidemment pas pratique à inclure ici, mais les premières lignes et colonnes devraient ressembler à ceci:
_____ ___
/ \ /
_____/-98,-99\_____/-96,
/ \ / \
/-99,-99\_____/-97,-99\___
\ / \ /
\_____/-98,-98\_____/-96,
/ \ / \
/-99,-98\_____/-97,-98\___
\ / \ /
\_____/-98,-97\_____/-96,
/ \ / \
/-99,-97\_____/-97,-97\___
\ / \ /
la source
Réponses:
Rubis, 221 octets
Non testé dans le programme de test
Production
Alors que je terminais le débogage, j'ai remarqué une ambiguïté dans la spécification. Où
w+1
est divisible par 4, les première et dernière coordonnées x sont impaires et il n'y a pas d'ambiguïté. Mais oùw-1
est divisible par 4, les première et dernière coordonnées x sont paires. J'ai supposé que les première et dernière colonnes devraient être décalées en dessous des suivantes. Mais j'ai lu la question précédente et j'ai noté que dans ce cas, ce sont les colonnes impaires qui devraient être décalées en dessous des paires (note pourw-1
divisible par 4, il n'est pas possible de faire les deux.)Cette distinction n'a cependant pas été faite dans cette question. Je vais laisser cela au jugement de OP et retravailler si nécessaire, bien que je préfère ne pas avoir à le faire.
la source