tło
Lato na półkuli północnej się kończy, a wielu z nas tęskni za słońcem, plażami, falami oceanu ... To wyzwanie ma na celu rozweselić ich, przypominając im o morzu.
Wyzwanie
Oto morze:
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
Morze składa się z 5 razy tego wzoru fali:
**
****
*****
** **
** **
* *****
Pamiętaj, że wzór ma 16 znaków, a morze ma 5 razy więcej niż 80 znaków.
Które możesz wydrukować na terminalu za pomocą tego wiersza poleceń:
perl -e 'print " ** \n **** \n ***** \n ** ** \n ** ** \n* *****\n"'
Albo ten :
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"'
(Drugi powinien ułatwić uzyskanie dokładnego wzoru)
Twoim zadaniem jest wyświetlanie morza w terminalu i wyglądanie, jakby fale poruszały się w prawo: musi przesuwać się w prawo z prędkością 1 znaku na każde 100 ms (= 10 razy co sekundę). Po 80. kolumnie nie należy drukować żadnego znaku, ale gdy zniknie prawa fala, po lewej pojawia się nowa.
Oto przykład wyniku:
czas = 0,0 s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
czas = 0,1s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
*** ****** ****** ****** ****** ***
czas = 0,2 s
* ** ** ** ** *
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
**** ****** ****** ****** ****** **
czas = 0,3 s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
***** ****** ****** ****** ****** *
czas = 0,4 s
** ** ** ** **
* **** **** **** **** ***
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
****** ****** ****** ****** ******
Oczywiście każde wyjście powinno zastąpić poprzednie.
Możesz uruchomić ten kod w terminalu unix, aby zobaczyć, jak powinien wyglądać z animacją:
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}'
(Należy pamiętać, że ten kod nie jest zbyt dobrze golfowany: właśnie uczyniłem go wystarczająco kompaktowym, aby można go było uruchomić w terminalu.)
Kryterium wygranej
To jest codegolf, więc wygrywa najkrótszy kod w bajtach.