พื้นหลัง
ฤดูร้อนจบไปแล้วในซีกโลกเหนือและพวกเราหลายคนคิดถึงแสงอาทิตย์ชายหาดคลื่นทะเล ... ความท้าทายนี้มุ่งหวังที่จะเชียร์พวกเขาด้วยการเตือนพวกเขาถึงทะเล
ความท้าทาย
นี่คือทะเล:
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
ทะเลทำจาก 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 ตัวอักษรต่อ 100ms (= 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 ดังนั้นรหัสที่สั้นที่สุดในการชนะ byte