sfondo
L'estate è finita nell'emisfero settentrionale e a molti di noi manca il sole, le spiagge, le onde dell'oceano ... Questa sfida ha lo scopo di rallegrarli ricordandoli del mare.
La sfida
Ecco il mare:
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
Il mare è composto da 5 volte questo modello d'onda:
**
****
*****
** **
** **
* *****
Si noti che il modello è lungo 16 caratteri e il mare è 5 volte questo modello = 80 caratteri.
Che puoi stampare in un terminale usando questa riga di comando:
perl -e 'print " ** \n **** \n ***** \n ** ** \n ** ** \n* *****\n"'
O questo:
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"'
(Il secondo dovrebbe renderti più semplice ottenere il modello esatto)
Il tuo compito è quello di visualizzare il mare in un terminale e far sembrare che le onde si stiano muovendo verso destra: deve spostarsi a destra alla velocità di 1 carattere ogni 100 ms (= 10 volte al secondo). Nessun carattere dovrebbe essere stampato dopo l'80a colonna, ma quando scompare l'onda più a destra, una nuova appare a sinistra.
Ecco un esempio di output:
tempo = 0,0 s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
tempo = 0,1 s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
*** ****** ****** ****** ****** ***
tempo = 0,2 s
* ** ** ** ** *
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
**** ****** ****** ****** ****** **
tempo = 0,3 s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
***** ****** ****** ****** ****** *
tempo = 0.4s
** ** ** ** **
* **** **** **** **** ***
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
****** ****** ****** ****** ******
Naturalmente, ogni uscita dovrebbe sostituire la precedente.
Puoi eseguire questo codice in un terminale unix per vedere come dovrebbe apparire con l'animazione:
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}'
(Si noti che questo codice non è molto ben equipaggiato: l'ho appena reso abbastanza compatto da essere comodo da funzionare in un terminale.)
Criterio vincente
Questo è codegolf, quindi vince il codice più breve in byte.