2
配管のランダムパス
width w、height h、およびstep countの3つの整数を受け取るプログラムまたは関数を作成しますs。あなたは、非自己交差描画されるランダムウォーク sに長いステップを5*wすることにより5*h、すべての5により画素セルが空にされるか(ピュアベージュ)、またはこれらの12の簡単な「パイプ」の1ピクセルの画像: 上の画像は詳細を示すために拡大されています。実際のサイズのパイプは次のとおりです。 (灰色の線は、パイプタイプを区別するためのものです。) ランダムウォークは、1つのパイプエンドポイント(下から4つのパイプタイプの1つ)で始まり、別のパイプエンドポイントで終わる単一の連続パイプパスになります。 空で開始wすることによりh、グリッドとランダム開始点であることを一つのセルを選択してください。次に、開始する4つの方向のいずれかをランダムに選択し、対応するパイプエンドポイントを描画します。この開始セルは、ウォークの最初のステップをマークし、新しいセルを描画するか、既存のセルを上書きするたびに、別のステップとしてカウントされます。 ここで、選択された方向が有効な場合、適切なパイプセルを描画して、繰り返しランダムに右、左、または直線に進むことを選択します。完全なsステップパスが形成されるまで方向が有効でない場合は、バックトラックして再選択します。パスは、パイプエンドポイントで終了する必要があります。パイプエンドポイントは、パスがたどった経路に応じて、グリッド上のどこかにある場合があります。 2つの直線パイプセルのみを上書きでき、反対方向の直線パイプセルによってのみ上書きできることに注意してください。結果は交差セルになります。それ以外の場合は、すべてのパイプを空のセルに配置する必要があります。 交差点が描画されるとき、開始セルからさらに遠いパスの部分が一番上に描画されます。 グリッドに周期的境界条件(PBC)があるかどうか、つまり、グリッドの片側から出るパイプが反対側に出るかどうかはあなた次第です。PBCがない場合、グリッドの境界は、他のパイプと同様に遭遇する可能性のある障壁としてカウントされます。 特殊なケース s0の場合、パイプは描画されず、出力はイメージごとに空白5*wになり5*hます(つまり、すべてベージュ)。 場合s1つの管スタブであります (実寸:) ランダムに選択された開始セルに描画する必要があります。 その他の詳細 あなたはそれsがせいぜいw*hパスであると仮定するかもしれません。(ただし、交差点により長いパスが可能です。) wそしてh常にポジティブです。 すべてのランダムな選択は、一様にランダムでなければなりません。たとえば、問題が簡単になったとしても、可能であれば交差点を作成することを避けるべきではありません。疑似乱数ジェネレーターが許可されています。 黒、青、ベージュの代わりに、視覚的に異なる3色を使用できます。 彼らは実際にあるように、あなたの出力画像が拡大される5*w*kことにより、5*h*k画素のk正の整数です。(あなたkが1 歳であっても、投稿するサンプルを拡大することをお勧めします。) 一般的なロスレス画像ファイル形式を使用でき、画像をファイルに保存したり、表示したり、生のまま標準出力に吐き出したりできます。 バイト単位の最短コードが優先されます。 例 (すべて500%拡大)。 入力がw=2, h=1, s=0その場合、出力は常に次のようになります。 入力がw=2, h=1, s=1その場合、出力はこれらの画像のいずれかであり、同じチャンスがあります。 入力がw=2, h=1, s=2次の場合、出力は または多分 グリッドにPBCがあると想定されている場合。 (このようにパスを開始すると、2番目のステップが不可能になることに注意してください。) w=3, h=2, s=6PBCを想定した、の可能な出力を次に示します。 w=3, h=3, s=9PBCを想定した場合の可能な出力は次のとおりです。 交差点が2つのステップとしてカウントされるため、パスがすべてのセルをカバーする必要がないことに注意してください。また、交差点の陸橋は後で描かれている必要があるため、コーナーの端点が開始セルであると推定できます。したがって、行われたランダムな選択のシーケンスを推測できます。 start at …