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\___
\ / \ /