イントロ
次のf A\/ような文字のグリッドを考えます
f f f
A
A / \
\ / A
A \/
/
\/
ここで:
f水の流れを下に注ぐ蛇口を表しますA上の水の流れを分岐させて、ちょうど半分が左に、半分が右に行くようにします\上の水の流れを1単位だけ右にシフトします/上の水の流れを左に1単位シフトします- 組み合わせ
\/は、その上の水流を収集する無限の容量を持つトラフを作成します [space]水が通過できるよりも空きスペースです
これから、水(*)が蛇口から出て、トラフまたはグリッド領域のいずれかに落ちるときに通る経路を想像できます。
f f f <-- first second and third faucets
* * *A*
* *A*/ \*
\*/ * *A <-- a '*' is not drawn to the right of this A because it would be out of the 9×7 bounds
* *A*\/ <-- upper trough
**/ *
\/ * <-- lower trough
3つの蛇口が同じ量の水を一度に1つずつ出力すると仮定すると、
- 最初の蛇口の水はすべて下のトラフに流れます。
- 2番目の蛇口の水の半分は下部トラフに流れ、残りの半分は下部トラフとグリッドからの落下に分けられます。
- 3番目の蛇口の水の4分の1が下部トラフに流れ、1/4がグリッドの底から流れ落ち、4分の1が上部トラフに流れ込み、1/4がグリッドの右に流れ落ちます。
このことから(1 + 3/4 + 1/4 + 1/4) / 3 = 75%、水がトラフに捕捉され(1/4 + 1/4 + 1/4) / 3 = 25%、グリッドから落ちることがわかります。
課題
このASCII水流設定に関連するこれらの課題のいずれかまたはすべてを完了することができます。それらはすべてコードゴルフであり、各チャレンジの最短回答が勝者です。受け入れられる答えは、最も長いチャレンジを完了した人であり、コードの合計長はタイブレーカーです。
課題1
特定のグリッドの谷に流入する水の割合を出力するプログラムを作成します。上記の例の出力は、単にになります0.75。
課題2
グリッドを指定して、*上記のように水が流れる場所にを描画するプログラムを作成します。スペース文字以外は上書きしないでください。グリッドのサイズを変更しないでください。のようなもの
f
/A
Aの両側に水が流れますが、水を除去せずに左に引く/ことはできず、2×2グリッドを大きくせずに右に引くことはできないため、何もする必要はありません。
課題3(更新済み)
2つの非負整数、合計TおよびKを保持する量(T> = K)を取り込むプログラムを作成します。f蛇口がT単位の水を注ぐと、正確にKがトラフに流れるように、グリッドを1つだけ生成して描画します。特定の(T、K)ペアの有限グリッドでこれを行うことが不可能な場合、「不可能」を出力します。
明確化(すべての課題に適用)
- 入力は、stdin、ファイル、またはグリッドの文字列表現での関数呼び出しを介して行うことができます。異なる入力の実行方法を明確にするだけです。
- 出力はstdoutに送信する必要があります。
\AそしてA/、AAあなたが期待するようにまた谷です。- w x hグリッドは、常に改行をカウントしないw * h文字の適切にフォーマットされた長方形になります。末尾のスペースが欠落したり、が出現したりすることはありません
*。 - グリッドの寸法は、1×1程度の小ささで、任意に大きくすることができます。(理由の範囲内で任意に大きく、int.maxValueなどは許容範囲です。TおよびKについても同様です。)
- 上のストリームは、その中を
f流れます。 - 蛇口は、上の列だけでなく、どこにでも配置できます。
A常に注ぐ水の量を正確に半分に分けます。
注:のようなもの/Aとは//完全に有効です。キャラクター間で水は自由に流れます(ただし、チャレンジ2の場合、水を引くのに十分なスペースがありません)。
だから、セットアップで
ff
/A
左のfストリームが流れ落ち、ヒットし/、左にシフトします。右側のfストリームが降り注ぎ、をヒットしA、半分が右に進み、半分がの間で左に移動Aし/ます。
例えば
ff
**
*/A*
** *
** *
/A水がに落ちる場合のように入力を処理する方法を指定する必要がありますA。すべての課題について\A、トラフであるかどうかを明確にするとよいでしょう。3番目の課題では、3つのユニットAが分割されると想定される1.5 / 1.5ので(入力は実際には単一の有理数になります)2 / 1、2それともどちらの側が受信しますか?
A場合、両側は1.5になります。フロートの精度が問題にならないことを確認するのはコーダー次第です。)
fS