在上一个挑战中,我主要是手工绘制了第一张图(借助vim的可视块模式)。但是肯定有更好的方法...
给定一个二维输入(宽度和高度),则输出具有这些尺寸的六边形网格(在ASCII艺术中)。
这是在简介中引用的图表(进行少量修改),它应该是输入的输出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,作为返回值,等等)。
由于这是code-golf,因此以字节为单位的最短代码将获胜。
上面的网格可用作测试用例。在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\___
\ / \ /
相关
—
Alex A.