免責事項
私はこの特定の関連する質問があることを知っていますが、私の質問はランダム化コンポーネントである2つのガレージドアを使用し、実際の生活上の出来事にも基づいています。先週のガレージ...創造力を発揮するために頭に衝撃を与えるようなものはありません!;)
背景
ルーカス(私の15ヶ月の息子)は、ガレージのリモコンで遊ぶのが好きです。このリモコンには2つのボタンがあります。1つは左のガレージドア用で、もう1つは右のガレージドア用です。両方のボタンは同じように機能します。一度押すとドアが開き始め、もう一度押すと停止し、もう一度押すと閉じるようになり、もう一度押すと再び停止します。
ルーカスはこのリモコンが大好きで、ボタンのいずれか、または両方をランダムに押すか、まったく押しません。両方が押された場合、信号は送信されませんが、1つのボタンを押すと信号が送信されます。
そのため、コードゴルフの課題は2つの部分に分かれています。
パート1
ルーカスのボタンが1分以上押されたことを表す60文字の文字列を生成します。この場合の「ランダム」とは、「各ティックで各入力が均等に発生する」ことを意味します。文字は次のとおりです。
- 0:ルーカスはボタンを押さなかったか、両方のボタンを押しました。いずれにしても、信号は送信されていません。
- 1:左のガレージのドアのボタンがルーカスによって押されました
- 2:右のガレージのドアのボタンがルーカスによって押されました
二部
パート1で生成された文字列を使用して、これらのドアを開閉するためのトリガーとして番号を使用して、2台の車のガレージの開閉をシミュレートします。
私のガレージのドアは非常に高速です(理由については上記の免責事項を参照してください)。ボタンを押すと、完全に開いたり閉じたりするのに4秒かかります。
したがって、閉じている場合:
- 0秒:0%オープン(クローズ); ボタンを押すと、ドアが開き始めます
- 1秒:25%オープン
- 2秒:50%オープン
- 3秒:75%オープン
- 4秒:100%開いて、ドアが止まる
したがって、開いている場合:
- 0秒:100%オープン; ボタンを押すと、ドアが閉じ始めます
- 1秒:75%オープン
- 2秒:50%オープン
- 3秒:25%オープン
- 4秒:0%開いた(閉じた)、ドアストップ
特定のドアが動いている場合、その同じドアへの信号はそれを停止します。同じドアに送信された次の信号は、反対方向に移動して送信されます。以前に動いていたときにドアが停止し、「停止」信号を受信したときに完全に開いたり完全に閉じたりすると、ドアは完全に開いた状態または完全に閉じた状態で「停止」として登録され、新しい信号を受信すると、反対方向に移動します。
このシミュレーションでは、両方のガレージドアが最初に閉じた位置にあります。それでは、コマンドの10秒のリストを見て、Lucasがリモートでコマンドを実行した場合にどうなるかを見てみましょう。
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
出力
出力の最初の部分では、パート1から生成されたランダムな「0」、「1」、「2」文字の60文字の文字列を表示する必要があります。例えば。
212022112021202211202120221120212022112021202211202120221120
この文字列の下に、ガレージのドアがそれぞれのキャラクターでどのように振る舞うかについての上記の規則に従ったこれらの「信号」の処理があります(1秒ごとに)。結果として、最初の表示文字列の下に60行が表示されます。
これらの処理された各行は、次の形式になります
N: (L:X% XXXXXXX, R:Y% YYYYYYY)。
- Nは、それぞれのランダム文字列のn番目の文字で、0、1、または2の形式になります。
- X%は、左のドアが開いている割合です(ゼロパディングはありません)
- XXXXXXXは左ドアのステータスです。ドアが動いていない(つまり、開閉していない)場合、ステータス「停止」が強制されます。つまり、動いている(25%、50%、または75%でのみ)停止または完全に開いた(100% )または完全に閉じています(0%)。それ以外の場合、ドアは「開く」または「閉じる」のいずれかになります。
- Y%は、右側のドアが開いている割合です(ゼロパディングはありません)
- YYYYYYYは右側のドアのステータスです。ドアが動いていない(つまり、開閉していない)場合、ステータス「停止」が強制されます。つまり、動いている(25%、50%、または75%でのみ)停止または完全に開いた(100% )または完全に閉じています(0%)。それ以外の場合、ドアは「開く」または「閉じる」のいずれかになります。
10個の「信号」と10個の処理された行を使用した以下の例
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
これはコードゴルフなので、最短のコードが明確な勝者になります。「開始」、「停止」、「終了」などの7文字すべてのフレーズを使用して、これを少し簡単にしました。
幸運を祈ります!
1あなたの例では、最後のコマンドが左ドアを75%で停止しないのはなぜですか?