で、私の前の課題、私はほとんど手で(Vimのビジュアル・ブロックモードの助けを借りて)最初の図を描きました。しかし、確かにもっと良い方法があるはずです...
幅と高さの2つの次元の入力が与えられた場合、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アートで表されます
_____ / \ / \ \ / \_____/
しかし、境界線は隣接する六角形の間で「共有」されます。
座標のコンマは常に上端の中心からちょうど2文字下にあります。次に、x座標はコンマの直前に配置され、y座標は直後に配置されます。
座標が大きすぎて六角形の境界線と重ならないようにすることができます。
入力は、空白/コンマ区切りの文字列、整数の配列、または2つの関数/コマンドライン引数として取得できます。出力は単一の文字列でなければなりません(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\___
\ / \ /