पृष्ठभूमि
उत्तरी गोलार्ध में गर्मियों में अच्छी तरह से खत्म हो गया है, और हम में से बहुत से सूरज, समुद्र तटों, समुद्र की लहरों को याद करते हैं ... इस चुनौती का उद्देश्य उन्हें समुद्र की याद दिलाकर खुश करना है।
चुनौती
यहाँ समुद्र है:
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
समुद्र इस लहर पैटर्न से 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"'
(दूसरे को आपके लिए सटीक पैटर्न प्राप्त करना आसान बनाना चाहिए)
आपका कार्य समुद्र को एक टर्मिनल में प्रदर्शित करना है, और यह देखना है कि लहरें दाईं ओर बढ़ रही हैं: इसे प्रत्येक 100ms (= 10 बार प्रत्येक सेकंड) पर 1 वर्ण की गति से दाईं ओर शिफ्ट करने की आवश्यकता है। 80 वें कॉलम के बाद किसी भी चरित्र को मुद्रित नहीं किया जाना चाहिए, लेकिन जैसे ही दाएं लहर गायब हो जाती है, बाईं ओर एक नया दिखाई देता है।
यहाँ आउटपुट का एक उदाहरण है:
समय = 0.0
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ****** ****** ****** ****** ****
समय = 0.1 s
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
*** ****** ****** ****** ****** ***
समय = 0.2 s
* ** ** ** ** *
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
**** ****** ****** ****** ****** **
समय = 0.3
** ** ** ** **
**** **** **** **** ****
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
***** ****** ****** ****** ****** *
समय = 0.4s
** ** ** ** **
* **** **** **** **** ***
***** ***** ***** ***** *****
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
****** ****** ****** ****** ******
बेशक, प्रत्येक आउटपुट को पिछले एक को बदलना चाहिए।
आप इस कोड को यूनिक्स टर्मिनल में देख सकते हैं कि यह एनीमेशन के साथ कैसा दिखना चाहिए:
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}'
(ध्यान दें कि यह कोड बहुत अच्छी तरह से गोल्फ नहीं है: मैंने अभी इसे कॉम्पैक्ट किया है जो टर्मिनल में चलाने के लिए सुविधाजनक है।)
कसौटी जीतना
यह कोडगोल्फ है, इसलिए बाइट जीत में सबसे छोटा कोड है।