Hintergrund
Der Sommer ist in der nördlichen Hemisphäre schon lange vorbei und viele von uns vermissen die Sonne, die Strände, die Wellen des Ozeans ... Diese Herausforderung zielt darauf ab, sie aufzuheitern, indem sie an das Meer erinnert werden.
Die Herausforderung
Hier ist das Meer:
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
Das Meer besteht aus dem 5-fachen dieses Wellenmusters:
**
****
*****
** **
** **
* *****
Beachten Sie, dass das Muster 16 Zeichen lang ist und das Meer das Fünffache dieses Musters = 80 Zeichen lang ist.
Was Sie über diese Befehlszeile in ein Terminal drucken können:
perl -e 'print " ** \n **** \n ***** \n ** ** \n ** ** \n* *****\n"'
Oder dieses :
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"'
(Die zweite sollte es Ihnen leichter machen, das genaue Muster zu finden.)
Ihre Aufgabe ist es, das Meer in einem Terminal anzuzeigen und es so aussehen zu lassen, als würden sich die Wellen nach rechts bewegen. Es muss sich mit einer Geschwindigkeit von 1 Zeichen pro 100 ms (= 10-mal pro Sekunde) nach rechts verschieben. Nach der 80. Spalte sollte kein Zeichen gedruckt werden, aber wenn die Welle ganz rechts verschwindet, erscheint links eine neue.
Hier ist ein Beispiel für die Ausgabe:
Zeit = 0,0s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
Zeit = 0,1 s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
*** ****** ****** ****** ****** ***
Zeit = 0,2 s
* ** ** ** ** *
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
**** ****** ****** ****** ****** **
Zeit = 0,3 s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
***** ****** ****** ****** ****** *
Zeit = 0,4 s
** ** ** ** **
* **** **** **** **** ***
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
****** ****** ****** ****** ******
Natürlich sollte jeder Ausgang den vorherigen ersetzen.
Sie können diesen Code in ein Unix-Terminal ausführen, um zu sehen, wie er mit der Animation aussehen soll:
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}'
(Beachten Sie, dass dieser Code nicht besonders gut funktioniert: Ich habe ihn so kompakt gestaltet, dass er bequem in einem Terminal ausgeführt werden kann.)
Gewinnkriterium
Das ist Codegolf, also gewinnt der kürzeste Code in Byte.