チャレンジ
整数の11x11配列を受け取り、3D ASCIIブロックビルディングを構築するプログラムを作成します。配列内の各値は、配列の位置に一致する座標のブロックの列の高さを表します。負の高さは「浮動」列です-一番上のブロックのみが表示されます。
例
__________________
___ /\__\__\__\__\__\__\
3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /\__\ /\/\__\__\__\__\__\__\
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /\/__/ /\/\/__/__/__/__/__/__/
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /\/\__\ /\/\/\__\ /\/\/__/
1, 0, 0, 7,-7,-7,-7,-7, 7, 0, 0, \/\/\__\ /\/\/\/__/ /\/\/__/
0, 0, 0, 7,-7,-7,-7,-7, 7, 0, 0, \/\/__/ /\/\/\/\__\ /\/\/__/
0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, \/\__\ /\/\/\/\/__/ /\/\/__/
0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, \/__/ \/\/\/\/\__\_ \/\/__/
1, 0, 0, 4, 3, 2, 1, 0, 0, 0, 1, \/\/\/\/__/_\_ \/__/
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, ___ \/\/\/__/__/_\_ ___
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /\__\ \/\/__/__/__/_\ /\__\
1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, \/\__\ \/__/__/__/__/ \/\__\
\/\__\_________ ______\/\__\
\/\__\__\__\__\ /\__\__\__\__\
\/__/__/__/__/ \/__/__/__/__/
入力
入力は121個の整数のリストで、stdinから読み取られるか(セパレーターの選択はユーザー次第)、配列として渡されます(1Dまたは2Dにすることができます)。
高さは-11〜11の範囲になります。
出力
生成された建物は、stdoutに書き込まれ、画面に直接表示されるか、改行で区切られた文字列として返されます。
先頭と末尾の空白は許可されます。
建築ルール
個々の3Dブロックの形状は次のようになります。
___
/\__\
\/__/
そして、ブロックの2x2x2キューブは次のようになります。
______
/\__\__\
/\/\__\__\
\/\/__/__/
\/__/__/
ブロックが重複する場合、高いブロックが低いブロックより優先され、前のブロックが後のブロックより優先され、左側のブロックが右側のブロックより優先されます。唯一の特殊なケースは、ブロックの一番上の行がその後ろのスペース以外の文字を上書きしないことです。
列の高さの解釈は、側面から2D表現を見ることで最もよく説明できます。
HEIGHT: 1 2 3 -3 -2 -1
__ __
__ |__| |__| __
__ |__| |__| |__| __
|__| |__| |__| |__|
テストケース
さらにいくつかの入力でソリューションを試してみたい場合は、ここでいくつかのテストケースをまとめました。
勝ち
これはcode-golfであるため、最短の送信(バイト単位)が優先されます。