イントロ
パイプを使用したWindows MEスクリーンセーバーを覚えていますか?懐かしさを取り戻す時が来ました!
チャレンジ
スクリーンセーバーのASCII表現を出力するプログラムまたは関数を作成する必要があります。スクリーンセーバーには、半ランダムな方向に伸びる単一のパイプがあります。
パイプの始点は、画面の任意の境界にランダムに配置され、パイプ部分は境界に対して垂直になります(角の最初のパイプは水平または垂直のいずれかです)。パイプがティックするたびに、80%
偶然に直面している方向(水平/垂直)に成長するか、偶然に角を取り20%
ます。
パイプ表現
パイプを作成するには、6つのUnicode文字が使用されます
─ \u2500 horizontal pipe
│ \u2502 vertical pipe
┌ \u250C upper left corner pipe
┐ \u2510 upper right corner pipe
└ \u2514 lower left corner pipe
┘ \u2518 lower right corner pipe
入力
プログラム/関数は、入力の3つの値を取ります。これらの値は、関数パラメーターを介して収集するか、ユーザーにプロンプトを出すことができます。
- ティックの量
- スクリーン幅
- スクリーンの高さ
ティックの量
ティックごとに、パイプが画面に追加されます。パイプは、同じ位置にスポーンすると、古いパイプを上書きします。
たとえば、サイズ3x3の画面を使用します
ticks == 3
─┐
┘
ticks == 4
─┐
└┘
ticks == 5
│┐
└┘
最後の5ティックの例のように、パイプが画面から出るたびに、新しいパイプがランダムな境界に出現します。例えば:
ticks == 6
│┐
└┘
─
新しいパイプは、水平または垂直になる可能性が50%あるはずです。
画面の幅/高さ
選択した言語で望ましい場合は、画面の幅と高さを1つの値に組み合わせることができます。画面の幅と高さの最小値は常に1、最大値は255です。選択する言語が、255x255の文字グリッドより小さいコンソールまたは出力画面をサポートしている場合、幅と高さはコンソールの境界を決して超えないでください。(例:Windows 80x25 cmdウィンドウ)
出力
プログラム/関数の出力は、画面に印刷するか、関数から返される必要があります。プログラムを実行するたびに、異なるパイプのセットを生成する必要があります。
テストケース
次のテストケースはすべて、有効な出力のランダムな例です。
f(4, 3, 3)
│
─┘
│
f(5, 3, 3)
│
─┘┌
│
f(6, 3, 3)
─│
─┘┌
│
f(7, 3, 3)
──
─┘┌
│
明らかに、発生したティックが多いほど、プログラムの妥当性を証明することが難しくなります。したがって、実行中の出力のgifを投稿することをお勧めします。これが不可能な場合は、出力の印刷を含むコードのバージョンを投稿してください。明らかに、これはあなたのスコアにはカウントされません。
ルール
- これはcode-golfで、最短バイト数が勝ちます
- 標準的な抜け穴が適用されます
- ソースコードでUnicodeパイプ文字を使用する場合、それらをシングルバイトとしてカウントできます。
これは非常に難しい課題であり、多くの創造的な方法で解決できる可能性があります。短いエソランで既に回答があったとしても、より冗長な言語で回答を書くことをお勧めします。これにより、言語ごとの最短回答のカタログが作成されます。派手な色のgifのボーナスupvotes;)
ハッピーゴルフ!
免責事項:Unicode文字はASCIIではないことを承知していますが、より良い名前がないため、単にASCIIアートと呼びます。提案は大歓迎です:)