Фон
Лето в Северном полушарии уже позади, и многие из нас скучают по солнцу, пляжам, волнам океана ... Задача состоит в том, чтобы взбодрить их, напомнив им о море.
Соревнование
Вот море:
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
Море состоит из 5 раз по этой волновой схеме:
**
****
*****
** **
** **
* *****
Обратите внимание, что длина шаблона составляет 16 символов, а длина моря в 5 раз превышает 80 символов.
Который вы можете распечатать в терминале с помощью этой командной строки:
perl -e 'print " ** \n **** \n ***** \n ** ** \n ** ** \n* *****\n"'
Или этот:
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"'
(Второй должен облегчить вам получение точного шаблона)
Ваша задача - отобразить море в терминале и создать видимость, как волны движутся вправо: ему нужно сдвигаться вправо со скоростью 1 символ каждые 100 мс (= 10 раз каждые секунды). Ни один символ не должен быть напечатан после 80-го столбца, но когда исчезнет крайняя правая волна, слева появится новая.
Вот пример вывода:
время = 0,0 с
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
время = 0,1 с
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
*** ****** ****** ****** ****** ***
время = 0,2 с
* ** ** ** ** *
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
**** ****** ****** ****** ****** **
время = 0.3с
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
***** ****** ****** ****** ****** *
время = 0,4 с
** ** ** ** **
* **** **** **** **** ***
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
****** ****** ****** ****** ******
Конечно, каждый выход должен заменить предыдущий.
Вы можете запустить этот код в терминале Unix, чтобы увидеть, как он должен выглядеть с анимацией:
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}'
(Обратите внимание, что этот код не очень удачный: я просто сделал его достаточно компактным, чтобы его было удобно запускать в терминале.)
Критерий победы
Это Codegolf, поэтому выигрывает самый короткий код в байтах.