वाईएमसीए में रहना मज़ेदार है


15

"वाईएमसीए" विलेज पीपल का एक लोकप्रिय डिस्को गीत है जिसमें एक प्रसिद्ध नृत्य है । कैपिटल लेटर्स "Y", "M", "C", और "A" को गाने के कोरस के लिए आउटपुट करने के लिए सबसे छोटा प्रोग्राम लिखें।

आम तौर पर, मानक आउटपुट पर भेजे गए प्रत्येक लाइन पर एक अक्षर जाता है। यह मुख्य रूप से सी मानक लाइब्रेरी के आउटपुट बफ़रिंग के अधीन प्रोग्रामों को सरल बनाने के लिए है (एक नईलाइन मुद्रण आउटपुट बफर को फ्लश करता है), इसलिए यदि आप इस तरह के चूक से आपके प्रोग्राम को छोटा कर देंगे, तो आप इनमें से किसी भी या सभी नईलाइन्स को छोड़ सकते हैं।

आपका कार्यक्रम, जो कि संगीत के समान समय पर शुरू किया गया है, को शुरू होने के बाद इनमें से प्रत्येक के 0.125 सेकेंड के भीतर "Y" अक्षर को आउटपुट करना होगा (सेकंड में; मैंने इन्हें YouTube पर पोस्ट किए गए संगीत वीडियो से निर्धारित किया है)।

 45.766   49.611   60.889
 64.661  109.816  113.591
124.810  128.687  173.830
177.620  188.950  192.724
204.013  207.739  219.057

"एम", "सी" और "ए" अक्षर क्रमशः 0.930 एस, 1.395 एस, और 1.628 एस प्रत्येक "वाई" के बाद आते हैं। परीक्षण प्रयोजनों के लिए, इन सापेक्ष समयों को पूर्ववर्ती "Y" के समय में जोड़कर निरपेक्ष समय में परिवर्तित कर दिया जाता है।

मैंने C में एक परीक्षण कार्यक्रम और संबंधित उदाहरण कार्यक्रम लिखा है, मान लें कि एक नई पंक्ति प्रत्येक अक्षर का अनुसरण करती है (हालांकि यह प्रतियोगिता का नियम नहीं है)। यह लिनक्स के लिए लिखा गया है और यह सिग्विन का उपयोग किए बिना विंडोज पर काम नहीं करेगा। यदि आप परीक्षण कार्यक्रम का उपयोग करके अपने सबमिशन का परीक्षण नहीं कर सकते हैं, तो कम से कम YouTube वीडियो के खिलाफ अपने सबमिशन की जांच करें

यदि आपके सबमिशन को ठीक से व्यवहार करने के लिए एक विशेष कमांड-लाइन विकल्प की आवश्यकता होती है, तो आपके स्कोर की गणना करते समय वह कमांड-लाइन विकल्प मायने रखता है। हालांकि, किसी भी दुभाषिया स्टार्टअप समय की आपके खिलाफ गणना नहीं की जाती है, और यदि आवश्यक हो तो इसे समायोजित करने के लिए परीक्षण कार्यक्रम को संशोधित किया जा सकता है।

हालाँकि मुझे संदेह है कि एक मौजूद है, मुझे यह कहना होगा कि इस कार्य के लिए विशेष रूप से डिज़ाइन की गई प्रोग्रामिंग भाषा फ़ंक्शन या लाइब्रेरी का उपयोग करना प्रतिबंधित है।

जवाबों:


3

सी, 161 154 चार

#define P(d,x)w(d);puts(#x);
w(n){usleep(n<<16);}
y(d){P(d,Y)P(14,M)P(7,C)P(3,A)}
b(){y(664);y(35);y(147);y(35);}
main(){b(b(b(w(34))));y(148);y(33);y(148);}

परीक्षक गुजरता है, लेकिन केवल अगर fflush(stdout);प्रत्येक के बाद जोड़ा जाता है puts। चूंकि प्रश्न स्पष्ट रूप से बताता है कि fflushआवश्यक नहीं है, मैं इसे परीक्षक में एक समस्या के रूप में लेता हूं।

लॉजिक:
wसोता है, समय 16.384 65.536 एमएस की इकाइयों में दिया जाता है । यह रिज़ॉल्यूशन सटीक पर्याप्त समय और छोटे स्थिरांक की अनुमति देता है (मुझे शायद 100ms की कोशिश करनी चाहिए)।
Pथोड़ी देर इंतजार करता है और एक चरित्र प्रिंट करता है।
yएक प्रारंभिक देरी के बाद, YMCA अनुक्रम प्रिंट करता है।
bप्रिंट 4 YMCA क्रम - यह 4 * YMCA समान समय के साथ 3 बार होता है।
mainप्रिंट करता है 3 * 4 * YMCA अनुक्रम, और शेष 3।


"परीक्षक में एक समस्या" - आप सही कह रहे हैं , क्योंकि जाहिरा तौर पर पाइप "इंटरएक्टिव" डिवाइस नहीं हैं :( मैं इसे एक पाइप के बजाय एक PTY (जो अधिक यथार्थवादी होना चाहिए) का उपयोग करूंगा जैसे ही मुझे समय मिलेगा ।
प्लीजस्टैंड

ठीक है, मैंने एक PTY का उपयोग करने के लिए परीक्षक को बदल दिया, और आपका कार्यक्रम परीक्षण पास करता है। मुझे stdbuf नामक एक उपयोगिता के बारे में भी पता चला है जो C मानक I / O लाइब्रेरी के डिफ़ॉल्ट बफरिंग व्यवहार को ओवरराइड करने के लिए कुछ LD_PRELOAD ट्रिक का उपयोग करता है।
कृपया

4

रूबी 180 135 124 124 118 108 104

[458,k=22,*[97,k,435,k]*2,*[98,k]*2,98].flat_map{|e|[e,9,5,2]}.zip(%w(Y M C A)*15){|a,b|sleep a/1e1;p b}

मुझे बस एहसास हुआ कि प्रत्येक पत्र के आसपास दोहरे उद्धरण चिह्नों को प्रतिबंधित करने वाले नियमों में कुछ भी नहीं है। हालाँकि, सबमिशन पूरी तरह से काम करने लगता है :)
PleaseStand

1
Codegolf.stackexchange.com/questions/6695/… का दूसरा भाग आपके लिए भी प्रासंगिक है।
JPvdMerwe

@JPvdMerwe बहुत बहुत धन्यवाद! तुम सही हो। दो दशमलव गिराने से कोई महत्वपूर्ण प्रभाव नहीं पड़ता है। इसके अलावा, मैंने ऐसा करने के बाद यह देखा कि यदि मैं मूल्यों को after 0.1 मोड़ देता हूं तो कुछ पैटर्न हैं जो सरणी को कम वर्णों में निर्मित करने की अनुमति देते हैं।
क्रिस्टियन लुपस्क्यू

क्या आप पत्र उत्पन्न करने के %w(Y M C A)*15बजाय कर सकते थे 'Y M C A'.split*15? इसके अलावा, eachशायद यह mapभी एक हो सकता है , हालांकि आपको आउटपुट की आवश्यकता नहीं है। ओह, और आप के 10.0रूप में लिख सकते हैं 1e1!
पॉल प्रेस्टिज

@ तुल्यकालित धन्यवाद! मुझे लगा कि इस कोड को और अधिक करने के लिए मैं कुछ भी नहीं कर सकता, लेकिन मैं स्पष्ट रूप से गलत था। :-)
क्रिस्टियन लुपस्कू

0

पायथन 2.6 ( 82 ) ( 214 ) ( 219 ) ( 196 ) ( 185 ) (152)

फिक्स्ड। वीडियो के खिलाफ भाग गया और सटीक लगता है। अधिकांश मामलों में परिशुद्धता को 3 से 2 तक कम करके कुछ पात्रों को शांत किया (टिप @JPvdMV के लिए धन्यवाद)।

एकमात्र समस्या यह है कि परीक्षक समय में एक बड़ी विसंगति दिखाता है। यह सिंक से बाहर शुरू होता है और सिंक में वापस आने की कोशिश करता है। दो परीक्षण मामलों में यह शुरुआत में सिंक से 175 सेकंड से अधिक था और वापस सिंक में होने के 0.342 और 0.451 सेकंड के भीतर वापस आ गया।

import time;s=time.sleep
for t in[45.8,2.1,9.5,2,43.4,2,9.5,2.1,43.4,2,9.6,2,9.5,2,9.6]*15:
 i=0;s(t)
 while i<4:s([.1,.9,.5,.2][i]);print'YMCA'[i];i+=1

क्या आप इसे ऊपर सूचीबद्ध पंद्रह बार में से प्रत्येक पर चला सकते हैं? यह भी लगता है कि मेरी मशीन पर, आपको -uगिनती में कमांड लाइन विकल्प शामिल करना होगा ।
कृपया

@PleaseStand किया, अब यह 15 बार चलता है। मैं -यू को जोड़ने के बारे में नहीं जानता, मुझे इसकी जरूरत नहीं है। मेरे पास Python2.6 है, अगर यह मदद करता है
elssar

स्पष्ट करने के लिए, आपके प्रोग्राम को लगभग 45.766 सेकंड के बाद पहले "Y" प्रिंट करना चाहिए, और -uटेस्टर प्रोग्राम (जो पाइप का उपयोग करता है) के लिए आवश्यक है, न कि सीधे टर्मिनल के आउटपुट के लिए।
कृपया जूल

@PleaseStand हाँ, मैं समय के बारे में सोच रहा था। आपसे पूछने वाला था, लेकिन मेरे पास मौका होने से पहले ही आपने जवाब दे दिया। और टेस्टर प्रोग्राम के बारे में, क्या यह एक आवश्यकता है कि प्रोग्राम आपके टेस्टर पर चलता है जैसा कि है, या क्या आप प्रस्तुतियाँ स्वीकार करेंगे जिन्हें परीक्षक पर चलाने के लिए संशोधित करने की आवश्यकता है, लेकिन ठीक स्टैंडअलोन चलाएं?
एलसर

हम्म, मैं किसी भी विकल्प का उपयोग किए बिना अपने कोड को परीक्षक को पास कर सकता हूं
बजे

0

गणितज्ञ, 157

p=Print[Pause@#;#2]&

(#~p~"Y";.93~p~"M";.465~p~"C";.233~p~"A")&/@{45.766,2.217,9.65,2.144,43.527,2.147,9.591,2.249,43.515,2.162,9.702,2.146,9.661,2.098,9.69}

मैंने समय की पुष्टि करने के लिए पूरा वीडियो देखा। YMC A .... YMC A ...

यह कम सटीकता के साथ छोटा हो सकता है, लेकिन फिर मुझे यह पुष्टि करने के लिए वीडियो को फिर से देखना होगा कि यह अंत में अधिक से अधिक नहीं है। 125। जबरदस्त हंसी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.