バックグラウンド
北半球の夏は終わりました。多くの人は太陽、ビーチ、海の波を逃します。
挑戦
ここに海があります:
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
海はこの波パターンの5倍でできています。
**
****
*****
** **
** **
* *****
パターンの長さは16文字で、海はこのパターンの5倍= 80文字です。
このコマンドラインを使用して端末に印刷できます:
perl -e 'print " ** \n **** \n ***** \n ** ** \n ** ** \n* *****\n"'
またはこれ:
perl -e 'print " "x12, "*"x2, " "x2, "\n", " "x8, "*"x4, " "x4, "\n", " "x5, "*"x5, " "x6, "\n", " "x3, "*"x2, " "x3, "*"x2, " "x6, "\n", " "x1, "*"x2, " "x6, "*"x2, " "x5, "\n", "*"x1, " "x10, "*"x5, "\n"'
(2つ目は、正確なパターンを取得しやすくするためです)
あなたの仕事は、ターミナルに海を表示し、波が右に向かって動いているように見せることです。100msごとに1文字の速度(=秒ごとに10回)で右にシフトする必要があります。80桁目以降に文字を印刷する必要はありませんが、右端の波が消えると、新しい波が左側に表示されます。
出力の例を次に示します。
時間= 0.0s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
時間= 0.1秒
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
*** ****** ****** ****** ****** ***
時間= 0.2秒
* ** ** ** ** *
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
**** ****** ****** ****** ****** **
時間= 0.3秒
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
***** ****** ****** ****** ****** *
時間= 0.4秒
** ** ** ** **
* **** **** **** **** ***
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
****** ****** ****** ****** ******
もちろん、各出力は前の出力を置き換えます。
このコードをUNIXターミナルで実行して、アニメーションでどのように見えるかを確認できます。
perl -M5.010 -MTime::HiRes=sleep -E '@arr=([($")x12,($n="*")x2,($")x3],[($")x8,($n)x4,($")x4],[($")x5,($n)x5,($")x6],[($")x3,($n)x2,($")x3,($n)x2,($")x6],[($")x1,($n)x2,($")x6,($n)x2,($")x5],[($n)x1,($")x10,($n)x5]);while(++$j){for$i(0..5){for$k(0..15) {$out[$i][16*$_+$k]=$arr[$i][($k-$j)%16]for 0..4}}say"\e[H",$/,join$/,map{join"",@$_}@out;sleep 0.1}'
(このコードはあまりよくゴルフされていないことに注意してください:ターミナルで実行するのに便利なほどコンパクトにしただけです。)
勝利基準
これはcodegolfなので、バイト単位の最短コードが優先されます。