Antecedentes
El verano ha terminado en el hemisferio norte, y muchos de nosotros extrañamos el sol, las playas, las olas del océano ... Este desafío tiene como objetivo animarlos recordándoles el mar.
El reto
Aquí está el mar:
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
El mar está hecho de 5 veces este patrón de onda:
**
****
*****
** **
** **
* *****
Tenga en cuenta que el patrón tiene 16 caracteres de longitud y el mar tiene 5 veces este patrón = 80 caracteres de longitud.
Que puede imprimir en un terminal usando esta línea de comando:
perl -e 'print " ** \n **** \n ***** \n ** ** \n ** ** \n* *****\n"'
O este :
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"'
(El segundo debería facilitarle obtener el patrón exacto)
Su tarea es mostrar el mar en una terminal y hacer que parezca que las olas se mueven hacia la derecha: debe desplazarse hacia la derecha a una velocidad de 1 carácter cada 100 ms (= 10 veces cada segundo). No se debe imprimir ningún carácter después de la columna 80, pero a medida que desaparece la onda más a la derecha, aparece una nueva a la izquierda.
Aquí hay un ejemplo de salida:
tiempo = 0.0s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
tiempo = 0.1s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
*** ****** ****** ****** ****** ***
tiempo = 0.2s
* ** ** ** ** *
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
**** ****** ****** ****** ****** **
tiempo = 0.3s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
***** ****** ****** ****** ****** *
tiempo = 0.4s
** ** ** ** **
* **** **** **** **** ***
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
****** ****** ****** ****** ******
Por supuesto, cada salida debe reemplazar a la anterior.
Puede ejecutar este código en un terminal Unix para ver cómo debería verse con la animación:
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}'
(Tenga en cuenta que este código no está muy bien desarrollado: solo lo hice lo suficientemente compacto como para que sea conveniente ejecutarlo en una terminal).
Criterio ganador
Esto es codegolf, por lo que gana el código más corto en bytes.