子供の科学博物館でジェイコブのはしごを見たことがあるかもしれません。外観がよくわからない場合は、ウィキメディアコモンズにいくつかの画像とビデオの例があります。今日の課題は、電気機器のアニメーション化されたASCIIバージョンを作成することです。最終的には、次のようになります。
ラダー構造
以下は、高さ(H)が6のはしごの基本形状です。
6 \ /
5 \ /
4 \ /
3 \ /
2 \ /
1 \ /
0 ¯¯
左側の数字は、この例の行番号を示しているだけであり、出力に含めるべきではありません。特定の行を番号(R)で参照します。行0が一番下¯¯
です。行1からHはそれぞれ4つの部分で構成されています。
- スペース
(U + 0020)が(H - R)回繰り返された
- バックスラッシュ
\
(U + 005C) - スペース
(U + 0020)が(2 * R)回繰り返された
- スラッシュ
/
(U + 002F)
行0は、両方のスラッシュがマクロン¯
(U + 00AF)に置き換えられることを除いて同一です。各行の末尾またはラダーの下の末尾の空白は問題ありません。先頭の空白はそうではありません。
アーク建設
はしごを作成したら、左側と右側の間に円弧を作成できます。1つの円弧は完全に行内にあり、先頭\
と末尾の間のスペースを置き換えます/
。したがって、行2のアークには4文字、行3には6というように続きます。各アークは、次のルールを使用して構成されます。
- 使用できる文字は
_/¯\
(U + 005F、U + 002F、U + 00AF、U + 005C)のみです - 滑らかな外観を確保するために、いずれ
¯
かまたは/
後には、¯
または\
- 滑らかな外観を確保するために、いずれ
_
かまたは\
後には、_
または/
- 上記の2つのルールは、ラダーのエッジにも適用されます
- 上記の3つのルールは、アークの最初の文字が
_
orで/
あり、最後の文字が_
orでなければならないことを意味します\
(\¯\_//
両端で無効\_/¯\/
ですが、OKです) - 特定のポイントで発生する可能性のある文字ごとに、ゼロ以外のチャンスがなければなりません
- 各アークは他のすべてのアークから独立しています
アニメーション
単一のアークの寿命は、行1で開始し、頂点に達するまで一度に1行ずつ「移動」することによって作成されます。IEでは、最初に行1でアークを生成し、次にスペースに戻し、行2でアークを生成します。表示するアークの数(N)を考慮して、次のガイドラインを使用して、その多くのアークの完全な寿命を一度に1つずつ表示します。
- 一度に「生きている」アークは1つだけです。次のアークは、現在のアークがトップに到達してから消えるまで開始できません。
- アークの寿命の各行は、正確に1つのフレームに対して表示される必要があります
- 新しいアークを開始する前に、基本的なはしご(アークなし)だけのフレームが1つ必要です(最初のアークの前にオプション)
- アニメーションは、N個のアークの寿命全体を表示する必要があります。N = 0の場合、停止するまでランダムアークを永久にアニメーション化する必要があります。
- N > 0の場合、アニメーションを永久にループできますが、繰り返し同じ円弧のループである必要があります。(この投稿の上部にあるGIFの例はH = 6とN = 3ですが、永久にループします。)
- アニメーションはインプレースで発生するはずです。つまり、各フレームは次のフレームを完全に上書きし、同じ場所にある必要があります。
- 各フレームの長さは自由に設定できますが、人間が見ることができるようにします(つまり、常識に従ってください:0.01s / frameと30s / frameはどちらも受け入れられません)。
入出力
- 入力および出力は、任意の標準形式にすることができます
- GIFのエクスポート、画面へのテキストの書き込み、フレームごとに1つのファイルの出力、またはその他の妥当な手段
- 標準的な抜け穴は禁止されています
- はしごの高さHは正の整数になります
- Nを示す弧の数は負でない整数になります
- どちらもHとNは、あなたが選択した任意の順序で入力(あなたの答えで順序を記載してください)として採用されています
勝利条件
これはコードゴルフなので、最短のコードが優先されます。
the first character in the arc must be _ or / and the last character must be _ or \
とThere must be a non-zero chance for each allowable character to occur at a given point
。対称にするためには、最初と最後の両方の文字が_
毎回である必要があります/
。つまり、どちらかまたは「\」が発生する可能性はゼロです。