Xウィンドウシステムに付属している(そして、私が知る限り、まだ付属している)デモプログラムであるXeyesを覚えているかもしれません。その目的は、マウスカーソルに追従する目を描くことでした。
あなたの課題は、ASCIIアートでXeyesを再作成することです。ユーザーがクリックするたびに2つのASCIIアートの目(以下で指定)を描画し、カーソルの方向を指すように瞳孔を移動するプログラムまたは関数を記述します。
上記のGIFは、このゴルフ以外のRuby実装の記録であり、Rubyの最新バージョンで実行できます。また、Xterm制御シーケンスのリファレンスとしても役立ちます。
仕様書
これはcode-golfであるため、バイト数が最も少ないソリューションが優先されます。
これは、アスキー・アート・プログラムがASCII文字-具体的には、文字使用して描く必要がありますので、挑戦-
、.
、|
、'
、0
、スペース、改行を。1 2
これはインタラクティブなチャレンジなので、プログラムは入力を受け入れ、リアルタイムで出力を描画する必要があります。3
プログラムが入力の受け入れを開始する前に、少なくとも20行20列の空白のキャンバスを初期化する必要があります。ユーザーがキャンバスをクリックするまで、何も描画しないでください。
ユーザーがキャンバス上で4をクリックするたびに、プログラムは以前の出力をクリアしてから、マウスカーソルの位置に最も近い文字を中心に、これらのASCIIの目をキャンバス上に描画します。5 6(以下、✧
マウスカーソルを表し、描画しないでください。)
.---. .---.
| | | |
| 0|✧|0 |
| | | |
'---' '---'
生徒がどのようにカーソルを「指す」かに注意してください。
マウスカーソルがキャンバス上を移動するたびに、プログラムは瞳孔を再描画して、カーソルの方向を指し続けるようにします。例:7
✧
.---. .---.
| 0| | 0|
| | | |
| | | |
'---' '---'
瞳孔ポインティング
次のように、各目の内側の9文字の位置を列挙したとします。
.---.
|678|
|591|
|432|
'---'
瞳孔はいずれかの場所に描かれます1
- 9
。どちらを決定するかは、キャラクターが正方形で、キャンバスがデカルトグリッドであると仮定し、9
キャラクターの中心を(0、0)に、中心を1
(1、0)に、などとします。プログラムが入力(クリックまたは移動)を受け取ると、入力位置を最も近いグリッド座標mapにマップする必要があります。𝑀が(0、0)の場合、瞳孔は(0、0)に描画されます。つまり、9
ます。それ以外の場合は、以下で説明するように描画する必要があります。
番号デカルト平面グリッド上に重ねて八分円に分割想像1 - 8:
𝑀がオクタント1の範囲内にある場合、瞳孔は1
上の位置、つまり(1、0)に描かれます。𝑀がオクタント2の場合は、などで描画する必要があります2
。説明のために、下の画像は、マウスカーソルが特定の位置にあるときに瞳孔を描画する場所に応じて色分けされたグリッドの一部を示しています。たとえば、カーソルが緑色の座標のいずれかにある場合(グリッド座標は四隅の角ではなく、正方形の中心にあることに注意してください)、瞳孔はに描画され4
ます。
2つの目の瞳孔は独立して移動するため、各目について、その目の中心に対してwithでプロセスを繰り返します。
ノート
これは、グラフィック出力の課題ではありません。出力は文字のグリッドでなければなりません。もちろん、グラフィックルーチンを使用して文字のグリッドを描画することもできます。
空白は描画されます(または、描画されません)が便利です。グリッド内の空のスポットはスペース文字と同じように見え、同等と見なされます。
ここで「リアルタイム」とは、入力と描画される対応する出力との間の200ミリ秒未満として定義されます。
入力のために監視されるマウスボタンはどれか、また押すか放すかが「クリック」を構成するかどうかは、ユーザーの裁量です。
キャンバスをクリアするか、視覚的に同等にする必要があります。たとえば、端末ベースのソリューションでは、以前のキャンバスの下に新しいキャンバスを印刷することは同等とは見なされません。
ユーザーがキャンバスの端付近をクリックして、目のキャラクターの一部が端を越えて描画される場合、動作は未定義です。ただし、その後のクリック時にプログラムは正常に実行を継続する必要があります。
マウスカーソルが「キャンバス」から離れると、動作は未定義になりますが、カーソルがキャンバスに再び入っても、プログラムは正常に動作し続ける必要があります。
出力が不明瞭にならない限り、テキストカーソルがキャンバスに表示される場合があります。
標準的な抜け穴は禁止されています。
<pre>
またはfont-family:monospace
)。