Latar Belakang
Musim panas telah berakhir di belahan bumi utara, dan banyak dari kita merindukan matahari, pantai, ombak lautan ... Tantangan ini bertujuan menyemangati mereka dengan mengingatkan mereka pada laut.
Tantangan
Inilah laut:
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
Lautan terbuat dari 5 kali pola gelombang ini:
**
****
*****
** **
** **
* *****
Perhatikan bahwa polanya adalah 16 karakter, dan laut adalah 5 kali polanya = 80 karakter.
Yang dapat Anda cetak ke terminal menggunakan baris perintah ini:
perl -e 'print " ** \n **** \n ***** \n ** ** \n ** ** \n* *****\n"'
Atau yang ini:
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"'
(Yang kedua harus memudahkan Anda untuk mendapatkan pola yang tepat)
Tugas Anda adalah menampilkan laut di terminal, dan menjadikannya seperti ombak bergerak ke kanan: ia perlu bergeser ke kanan dengan kecepatan 1 karakter masing-masing 100 ms (= 10 kali setiap detik). Tidak ada karakter yang harus dicetak setelah kolom ke-80, tetapi ketika gelombang paling kanan menghilang, yang baru muncul di sebelah kiri.
Ini adalah contoh dari output:
waktu = 0,0s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
waktu = 0,1s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
*** ****** ****** ****** ****** ***
waktu = 0.2s
* ** ** ** ** *
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
**** ****** ****** ****** ****** **
waktu = 0,3 detik
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
***** ****** ****** ****** ****** *
waktu = 0,4 dtk
** ** ** ** **
* **** **** **** **** ***
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
****** ****** ****** ****** ******
Tentu saja, setiap output harus menggantikan yang sebelumnya.
Anda dapat menjalankan kode ini ke terminal unix untuk melihat bagaimana tampilannya dengan animasi:
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}'
(Perhatikan bahwa kode ini tidak golf dengan sangat baik: Saya baru saja membuatnya cukup ringkas untuk nyaman dijalankan di terminal.)
Kriteria menang
Ini codegolf, jadi kode terpendek dalam byte menang.