Фон
Влітку північна півкуля закінчилася, і багато з нас сумують за сонцем, пляжами, хвилями океану ... Цей виклик має на меті підбадьорити їх, нагадуючи їм море.
Змагання
Ось море:
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
Море складається в 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, тому найкоротший код у байті виграє.