Contexte
L’été est bien terminé dans l’hémisphère Nord et le soleil, les plages, les vagues de l’océan nous manquent à beaucoup… Ce défi consiste à leur remonter le moral en leur rappelant la mer.
Le défi
Voici la mer:
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
La mer est composée de 5 fois ce type de vagues:
**
****
*****
** **
** **
* *****
Notez que le modèle comporte 16 caractères et la mer 5 fois plus que celui-ci = 80 caractères.
Que vous pouvez imprimer dans un terminal en utilisant cette ligne de commande:
perl -e 'print " ** \n **** \n ***** \n ** ** \n ** ** \n* *****\n"'
Ou celui-ci:
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"'
(Le second devrait vous aider à obtenir le motif exact)
Votre tâche consiste à afficher la mer dans un terminal et à donner l’impression que les vagues se déplacent vers la droite: elle doit se déplacer vers la droite à une vitesse de 1 caractère toutes les 100 ms (= 10 fois par seconde). Aucun caractère ne doit être imprimé après la 80e colonne, mais comme la vague la plus à droite disparaît, une nouvelle apparaît à gauche.
Voici un exemple de sortie:
temps = 0.0s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
temps = 0.1s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
*** ****** ****** ****** ****** ***
temps = 0.2s
* ** ** ** ** *
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
**** ****** ****** ****** ****** **
temps = 0.3s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
***** ****** ****** ****** ****** *
temps = 0.4s
** ** ** ** **
* **** **** **** **** ***
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
****** ****** ****** ****** ******
Bien entendu, chaque sortie devrait remplacer la précédente.
Vous pouvez exécuter ce code dans un terminal Unix pour voir comment il devrait ressembler à l'animation:
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}'
(Notez que ce code n'est pas très bien joué au golf: je l'ai juste rendu assez compact pour qu'il soit pratique de fonctionner dans un terminal.)
Critère gagnant
C'est codegolf, donc le code le plus court en octets gagne.