マーチングスクエアはコンピューターグラフィックスのアルゴリズムであり、サンプルのグリッドから2D等高線を復元するために使用されます(3D設定用の兄貴のマーチングキューブも参照)。アイデアは、グリッドの各セルを個別に処理し、コーナーの値に基づいてそのセルを通過する輪郭を決定することです。
このプロセスの最初のステップは、コーナーがコンターの値の上か下かに基づいて、コンターによって接続されているエッジを判別することです。簡単にするため、値0に沿ったコンターのみを考慮し、コーナーが正か負かを調べます。区別するケースがあります:24 = 16

画像ソース:ウィキペディア
ここでは白と黒の識別はそれほど重要ではありませんが、明確にするために、白はポジティブで黒はネガティブであると言います。コーナーの1つが正確にある場合は無視し0ます。
サドルポイント(ケース5と10)は、少し余分な難しさを提供します。コーナーを見るだけではどの対角線を使用すべきかが明確ではありません。これは、4つのコーナーの平均(つまり、中心値の概算)を見つけ、コンターが反対の符号でコーナーからセンターを分離するように対角線を選択することで解決できます。平均が正確0にの場合、どちらのケースも選択できます。
通常、これらの16のケースは単にルックアップテーブルに格納されます。これは効率的には優れていますが、もちろん、ここではコードを短くすることをお勧めします。したがって、あなたの仕事は、このルックアップ手順を実行し、ケースのASCII表現をできるだけ少ないコードで出力することです。
チャレンジ
選択した固定順序で4つのコーナー(ゼロ以外の整数)の値が与えられます。次に、等高線の正しいレイアウトを生成し、鞍点のケースを正しく解決する必要があります。
プログラムまたは関数を記述し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取り、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。
入力は、任意の便利な文字列またはリスト形式で取得できます。
16のケースは、次の5x5ブロックのいずれかを使用してASCIIアートで表されます。
o---o o---o o---o
| | | | | | |
| | |---| | | |
| | | | | | |
o---o o---o o---o
o---o o---o o---o o---o
|/ | | \| | | | |
| | | | | | | |
| | | | |\ | | /|
o---o o---o o---o o---o
o---o o---o
|/ | | \|
| | | |
| /| |\ |
o---o o---o
先頭または末尾の空白を印刷することはできませんが、オプションの改行を1つ印刷できます。
これはコードゴルフなので、最も短い答え(バイト単位)が勝ちます。
テストケース
テストケースでは、入力がtop-left、top-right、bottom-left、bottom-rightの順に与えられることを前提としています。テストケースは9つのグループに分けられ、1つは上記の9つの表現のそれぞれに対応します(同じ順序で、空のセルから始まり、2つのサドルポイントで終わります)。
[1, 2, 1, 3]
[-9, -2, -2, -7]
[4, 5, -1, -2]
[-1, -2, 3, 4]
[7, -7, 7, -7]
[-5, 5, -5, 5]
[1, -6, -4, -1]
[-2, 3, 3, 4]
[-1, 6, -4, -1]
[2, -3, 3, 4]
[-1, -6, 4, -1]
[2, 3, -3, 4]
[-1, -6, -4, 1]
[2, 3, 3, -4]
[3, -8, -9, 2]
[-3, 8, 9, -2]
[8, -3, -2, 9]
[-8, 3, 2, -9]
さらに、次のテストケースでは、どちらかのサドルポイント(選択)が返される場合があります。
[1, -4, -2, 5]
[-1, 4, 2, -5]