इस चुनौती का लक्ष्य एक चेन ड्राइव सिस्टम का एक एनीमेशन तैयार करना है, जिसमें एक चेन द्वारा जुड़े स्प्रोकेट गियर के एक सेट से मिलकर बना है। ।
सामान्य आवश्यकताएँ
आपके कार्यक्रम को sprockets की एक सूची दी जाएगी , जिसे (x, y, radius)
ट्रिपल के रूप में निर्दिष्ट किया गया है । जिसके परिणामस्वरूप श्रृंखला ड्राइव प्रणाली इन sprockets, एक से एक साथ जुड़े के शामिल है बंद तना हुआ श्रृंखला उनमें से प्रत्येक के ऊपर से गुजर, क्रम में । आपका लक्ष्य एक असीम लूपिंग एनीमेशन का उत्पादन करना है , जो सिस्टम को गति में दिखाता है। उदाहरण के लिए, इनपुट दिया गया
(0, 0, 16), (100, 0, 16), (100, 100, 12), (50, 50, 24), (0, 100, 12)
आउटपुट कुछ इस तरह दिखना चाहिए
।
समन्वय प्रणाली इस तरह के एक्स-अक्ष सही अंक, और y- अक्ष अंक ऊपर है कि होना चाहिए। आप मान सकते हैं कि त्रिज्या संख्या 8 से अधिक या उसके बराबर है (हम देखेंगे कि यह बाद में क्यों मायने रखता है।) आप यह भी मान सकते हैं कि कम से कम दो sprockets हैं , और यह है कि sprockets एक दूसरे को नहीं काटते हैं । इकाइयोंइनपुट बहुत क्रिटिकल नहीं हैं। इस पोस्ट में सभी उदाहरण और परीक्षण मामले इनपुट इकाइयों के रूप में पिक्सल का उपयोग करते हैं (इसलिए, उदाहरण के लिए, पिछले आंकड़े में मध्य sprocket की त्रिज्या 24 पिक्सेल है;) इन इकाइयों से बहुत अधिक विचलन न करने का प्रयास करें। शेष चुनौती में, स्थानिक मात्राओं को उसी इकाइयों में दिया जाना समझा जाता है, जैसा कि अनुपात को सही रखने के लिए सुनिश्चित करें! उत्पादन के आयामसभी sprockets के बाउंडिंग बॉक्स से थोड़ा बड़ा होना चाहिए, इतना बड़ा कि पूरा सिस्टम दिखाई दे। विशेष रूप से, स्प्रोकेट के पूर्ण स्थान को आउटपुट को प्रभावित नहीं करना चाहिए; केवल उनके सापेक्ष पदों को (इसलिए, उदाहरण के लिए, यदि हमने उपरोक्त उदाहरण में सभी राशि को समान मात्रा में स्थानांतरित किया, तो आउटपुट समान रहेगा।)
श्रृंखला को स्पॉकेट्स के साथ स्पर्श किया जाना चाहिए जो संपर्क के सभी बिंदुओं पर गुजरता है, और सीधे हर जगह। श्रृंखला को sprockets के ऊपर से गुजरना चाहिए जैसे कि आसन्न श्रृंखला खंड (यानी, दो sprockets के बीच श्रृंखला के भाग, जो एक ही sprocket पर मिलते हैं) एक दूसरे को नहीं काटते हैं।
।
उदाहरण के लिए, जबकि ऊपर की बाईं प्रणाली वैध है, मध्य एक नहीं है, क्योंकि दो आसन्न श्रृंखला खंड जो नीचे बाएं स्प्रोकेट चौराहे से गुजरते हैं। हालांकि, ध्यान दें कि सही प्रणाली है मान्य है, क्योंकि दो अन्तर्विभाजक श्रृंखला क्षेत्रों आसन्न नहीं हैं (इस प्रणाली हालांकि, के अलावा अन्य दो एक अलग इनपुट द्वारा निर्मित है।)
चीजों को सरल (r) रखने के लिए, आप मान सकते हैं कि कोई भी sprocket अपने दो पड़ोसी sprockets के उत्तल पतवार , या उसके प्रत्येक पड़ोसी और उनके दूसरे पड़ोसी के उत्तल पतवार को नहीं काटता है। दूसरे शब्दों में, नीचे दिए गए आरेख में शीर्ष स्थान किसी भी छायांकित क्षेत्र को नहीं काट सकता है।
चेन सेगमेंट, उनके ऊपर से गुजरने वाले स्पैक्ट्रेट्स को पार कर सकते हैं (जैसे कि अंतिम टेस्ट केस में)। इस मामले में, श्रृंखला हमेशा sprockets के सामने दिखाई देनी चाहिए।
दृश्य आवश्यकताएँ
श्रृंखला में वैकल्पिक चौड़ाई के लिंक की एक श्रृंखला शामिल होनी चाहिए । संकीर्ण लिंक की चौड़ाई लगभग 2 होनी चाहिए, और चौड़ी लिंक की चौड़ाई लगभग 5. होनी चाहिए। दोनों प्रकार के लिंक की लंबाई लगभग बराबर होनी चाहिए। अवधिश्रृंखला की, यानी, लिंक की एक विस्तृत / संकीर्ण जोड़ी की कुल लंबाई, 4π के निकटतम संख्या होनी चाहिए जो श्रृंखला की लंबाई में एक पूर्णांक संख्या को फिट करती है। उदाहरण के लिए, यदि श्रृंखला की लंबाई 1,000 है, तो इसकी अवधि 12.5 होनी चाहिए, जो कि 466 (12.566 ...) के निकटतम संख्या है जो 1,000 में एक पूर्णांक संख्या (80) को फिट करती है। श्रृंखला की लंबाई में एक पूर्णांक संख्या को फिट करने की अवधि के लिए यह महत्वपूर्ण है, ताकि उस बिंदु पर कोई कलाकृतियां न हों जहां श्रृंखला चारों ओर घूमती है।
त्रिज्या आर का एक स्प्रोकेट तीन गाढ़ा भागों से मिलकर होना चाहिए: एक केंद्रीय धुरा , जो त्रिज्या का एक चक्र होना चाहिए 3 के बारे में; स्प्रोकेट के शरीर , धुरा, जिसके बारे में त्रिज्या का एक चक्र होना चाहिए चारों ओर आर - 4.5; और स्प्रोकेट का रिम , शरीर के चारों ओर, जो कि
आर - 1.5 के बारे में त्रिज्या का एक चक्र होना चाहिए । रिम में sprocket के दांत भी होने चाहिए , जिसकी चौड़ाई लगभग 4 होनी चाहिए; दांतों के आकार और रिक्ति को चेन लिंक के आकार से मेल खाना चाहिए, ताकि वे बड़े करीने से घेरे रहें।
Sprocket के दांतों की अवधि, यानी, sprocket की परिधि के साथ लगातार दो दांतों के बीच की दूरी, श्रृंखला की अवधि से मेल खाना चाहिए। चूंकि अवधि लगभग 4π है, और चूंकि स्प्रोकेट की त्रिज्या की गारंटी दी जाती है, यहां तक कि अवधि को स्प्रोकेट की परिधि में लगभग एक-पूर्णांक संख्या में फिट होना चाहिए, ताकि बिंदु पर कोई ध्यान देने योग्य कलाकृतियां न हों। Sprocket के दाँत चारों ओर लपेटते हैं।
आप श्रृंखला के लिए रंगों के किसी भी संयोजन का उपयोग कर सकते हैं , स्प्रोकेट के विभिन्न भागों और पृष्ठभूमि, जब तक वे आसानी से अलग-अलग होते हैं । पृष्ठभूमि पारदर्शी हो सकती है। इस पोस्ट में दिए गए उदाहरण #202020
चेन के लिए उपयोग करते हैं, #868481
स्प्रोकेट के एक्सल और रिम के #646361
लिए और स्प्रोकेट के शरीर के लिए।
एनिमेशन आवश्यकताएँ
पहले स्प्रोकेट इनपुट सूची बारी बारी चाहिए में दक्षिणावर्त ; बाकी sprockets को उसी के अनुसार घूमना चाहिए। श्रृंखला को प्रति सेकंड 16 a (लगभग 50) इकाइयों की गति से बढ़ना चाहिए ; फ़्रेम दर आपके ऊपर है, लेकिन एनीमेशन को पर्याप्त रूप से चिकना होना चाहिए।
एनीमेशन को मूल रूप से लूप करना चाहिए ।
अनुरूपता
दृश्य विशेषताओं और अनुपातों में से कुछ जानबूझकर केवल मोटे तौर पर निर्दिष्ट किए जाते हैं - आपको उनसे बिल्कुल मेल नहीं खाना है । आपके प्रोग्राम के आउटपुट को यहां दिए गए उदाहरणों का पिक्सेल-टू-पिक्सेल प्रतिकृति नहीं होना चाहिए, लेकिन यह समान दिखना चाहिए। विशेष रूप से, श्रृंखला और sprockets के सटीक अनुपात, और श्रृंखला के लिंक और sprocket के दांतों का सटीक आकार, लचीले होते हैं।
पालन करने के लिए सबसे महत्वपूर्ण बिंदु ये हैं:
- श्रृंखला को सही दिशा से, इनपुट क्रम में, sprockets के ऊपर से गुजरना चाहिए।
- श्रृंखला को संपर्क के सभी बिंदुओं पर स्पॉकेट्स के लिए स्पर्शरेखा होना चाहिए।
- श्रृंखला और sprockets के दांतों के लिंक को बड़े करीने से कम से कम सही स्थान और चरण तक घेरना चाहिए।
- श्रृंखला के लिंक, और sprockets के दांतों के बीच अंतर, ऐसा होना चाहिए कि उस बिंदु पर ध्यान देने योग्य कलाकृतियां नहीं हैं जहां वे चारों ओर लपेटते हैं।
- Sprockets को सही दिशा में घुमाना चाहिए।
- एनीमेशन को मूल रूप से लूप करना चाहिए।
अंतिम नोट के रूप में, जबकि, तकनीकी रूप से, इस चुनौती का लक्ष्य सबसे छोटा कोड लिखना है, अगर आपको लगता है कि रचनात्मक हो रहा है और सभी तरीकों से अधिक विस्तृत आउटपुट का उत्पादन कर रहा है, तो इसके लिए जाएं!
चुनौती
जैसा कि ऊपर वर्णित है, एक कार्यक्रम या एक समारोह लिखें , sprockets की एक सूची ले रहा है, और इसी श्रृंखला ड्राइव सिस्टम एनीमेशन का निर्माण कर रहा है।
इनपुट और आउटपुट
आप समय लग सकता है इनपुट के माध्यम से कमांड लाइन , के माध्यम से STDIN , के रूप में समारोह तर्क है, या एक का उपयोग कर बराबर विधि । आप इनपुट के लिए किसी भी सुविधाजनक प्रारूप का उपयोग कर सकते हैं , लेकिन इसे अपनी पोस्ट में निर्दिष्ट करना सुनिश्चित करें।
आउटपुट के रूप में , आप सीधे एनीमेशन प्रदर्शित कर सकते हैं , एक एनीमेशन फ़ाइल (जैसे, एक एनिमेटेड GIF) का उत्पादन कर सकते हैं, या फ़्रेम फ़ाइलों के अनुक्रम का उत्पादन कर सकते हैं (हालांकि, इस मामले में एक छोटा जुर्माना है; नीचे देखें।) यदि आप फ़ाइल आउटपुट का उपयोग करते हैं, सुनिश्चित करें कि फ़्रेमों की संख्या उचित है (इस पोस्ट में उदाहरण बहुत कम फ़्रेमों का उपयोग करते हैं;) फ़्रेमों की संख्या न्यूनतम नहीं होनी चाहिए, लेकिन आपको बहुत अधिक फ़ालतू फ़्रेमों का उत्पादन नहीं करना चाहिए। यदि आप फ़्रेम का एक अनुक्रम आउटपुट करते हैं, तो अपनी पोस्ट में फ़्रेम दर निर्दिष्ट करना सुनिश्चित करें ।
स्कोर
यह कोड-गोल्फ है । सबसे छोटा जवाब , बाइट्स में, जीतता है।
+ 10% पेनल्टी यदि आपका प्रोग्राम आउटपुट के रूप में फ़्रेम का एक अनुक्रम उत्पन्न करता है, तो एनीमेशन को सीधे प्रदर्शित करने या एकल एनीमेशन फ़ाइल का उत्पादन करने के बजाय, अपने स्कोर में 10% जोड़ें।
परीक्षण के मामलों
परीक्षण 1
(0, 0, 26), (120, 0, 26)
परीक्षण २
(100, 100, 60), (220, 100, 14)
परीक्षण ३
(100, 100, 16), (100, 0, 24), (0, 100, 24), (0, 0, 16)
टेस्ट 4
(0, 0, 60), (44, 140, 16), (-204, 140, 16), (-160, 0, 60), (-112, 188, 12),
(-190, 300, 30), (30, 300, 30), (-48, 188, 12)
परीक्षण ५
(0, 128, 14), (46.17, 63.55, 10), (121.74, 39.55, 14), (74.71, -24.28, 10),
(75.24, -103.55, 14), (0, -78.56, 10), (-75.24, -103.55, 14), (-74.71, -24.28, 10),
(-121.74, 39.55, 14), (-46.17, 63.55, 10)
परीक्षण ६
(367, 151, 12), (210, 75, 36), (57, 286, 38), (14, 181, 32), (91, 124, 18),
(298, 366, 38), (141, 3, 52), (80, 179, 26), (313, 32, 26), (146, 280, 10),
(126, 253, 8), (220, 184, 24), (135, 332, 8), (365, 296, 50), (248, 217, 8),
(218, 392, 30)