सर्किल भूलभुलैया परीक्षक


12

आप उन लकड़ी के खिलौनों को जानते हैं, जहाँ बॉल टेंपरिंग होती है, जहाँ वस्तु भूलभुलैया के चारों ओर घूमती है? यह उस तरह थोड़े है। भूलभुलैया और चाल की एक श्रृंखला को देखते हुए, यह निर्धारित करें कि गेंद कहाँ समाप्त होती है।

बोर्ड को लंबवत रखा जाता है, और बोर्ड को घुमाए जाने पर गेंद केवल गुरुत्वाकर्षण द्वारा चलती है। प्रत्येक "चाल" एक रोटेशन (रेडियंस में) है।

भूलभुलैया बस संकेंद्रित गोलाकार दीवारें है, प्रत्येक दीवार के बाहरी गलियारे में एक ही खुलता है, इसी के समान (मान लें कि वे दीवारें मंडलियां हैं और इंगित नहीं हैं):

भूलभुलैया

जैसा कि आप देख सकते हैं, गेंद बीच में शुरू होती है और बाहर निकलने की कोशिश कर रही है। सही अभिविन्यास प्राप्त होते ही गेंद तुरंत गिर जाएगी , भले ही यह रोटेशन के माध्यम से हो। एक एकल घुमाव से गेंद कई उद्घाटन के माध्यम से गिर सकती है। उदाहरण के लिए, एक >= n * 2 * piचक्रव्यूह किसी भी चक्रव्यूह से बचने के लिए पर्याप्त है।

खेल के प्रयोजनों के लिए, 0.001उद्घाटन के रेडियन के भीतर स्थित एक गेंद को "फिट" माना जाता है, और अगले गलियारे के माध्यम से गिर जाएगा।

इनपुट:

इनपुट दो भागों में है:

  • भूलभुलैया एक पूर्णांक द्वारा दी गई है जो यह nदर्शाती है कि भूलभुलैया में कितनी दीवारें / उद्घाटन हैं। इसके बाद nलाइनें हैं, प्रत्येक पर एक नंबर के साथ, यह दर्शाता है कि अगले गलियारे में मार्ग कहाँ है।

  • मूव्स को पूर्णांक के रूप में दिया जाता है, जिसमें mदर्शाया गया है कि रेडियन में बोर्ड के क्लॉक वाइज mघुमावों द्वारा (फिर से अलग-अलग लाइनों पर) कितनी चालें चली गईं (नेगेटिव एंटीलॉकवाइज है)।

सभी मार्ग पदों के रूप में दिया जाता है 0 rad = up, सकारात्मक रेडियन दक्षिणावर्त जा रहे हैं।

ऊपर नमूना छवि के लिए, इनपुट इस तरह दिख सकता है:

7                        // 7 openings
0
0.785398163
3.14159265
1.74532925
4.71238898
4.01425728
0
3                        // 3 moves
-3.92699082
3.14159265
0.81245687

आउटपुट: गेंद को समाप्त करने वाले गलियारे की संख्या को आउटपुट करें। गलियारे केंद्र से शुरू होने वाले शून्य-अनुक्रमित होते हैं, इसलिए आप में शुरू करते हैं 0। यदि आप एक उद्घाटन से गुजरते हैं, तो आप गलियारे में हैं 1। यदि आप पूरे भूलभुलैया से बच जाते हैं, तो किसी भी पूर्णांक को आउटपुट करें>= n

नमूना इनपुट के लिए, तीन चालें हैं। पहली गेंद पर दो सलामी बल्लेबाजों के गिरने का कारण होगा । दूसरा एक उद्घाटन नहीं पाता है, और तीसरा एक पाता है । गेंद अब गलियारे में है 3, इसलिए अपेक्षित आउटपुट है:

3

अमान्य इनपुट के लिए व्यवहार अपरिभाषित है। मान्य इनपुट के साथ n >= 1और , अच्छी तरह से बनता है m >= 0

स्कोरिंग मानक कोड गोल्फ है, सबसे कम संख्या में बाइट्स जीतती हैं। मानक खामियों को मना किया जाता है। इनपुट हार्ड-कोडेड नहीं होना चाहिए, लेकिन मानक इनपुट, तर्क, कंसोल आदि से लिया जा सकता है। आउटपुट कंसोल, फाइल, जो भी हो, हो सकता है, बस इसे आउटपुट कहीं दिखाई दे।


"व्यवहार अमान्य इनपुट के लिए अपरिभाषित है।" << - यह सभी पहेली में डालने की जरूरत है!
TheDoctor

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

@Wrzlprmft गेंद छेद में नहीं जाती। दहलीज को इस अर्थ में समझें कि छेद गेंद की तुलना में थोड़े चौड़े हैं। यह अभी भी एक ही स्थान से होकर गुजरता है, बस एक स्तर आगे। यदि आपको लगता है कि सीमा थी 1, तो आप बड़े छेद के साथ काम कर रहे होंगे, न कि उछलते हुए गेंदों को छेद के केंद्र में ले जाते समय।
जियोबिट्स

ऐसे असुविधाजनक प्रारूप में इनपुट क्यों है? मुझे पूरा यकीन है कि मैंने इसे पढ़ने के लिए जितने भी कार्यक्रमों की आवश्यकता है, उससे छोटे कार्यक्रमों को पूरा किया है: /
Tal

जवाबों:


2

पर्ल, 211 191

पठनीयता के लिए नई सूचियों और मांगपत्र के साथ:

$p=atan2 0,-1;
@n=map~~<>,1..<>;
<>;
while(<>){
    $_=atan2(sin,cos)for@n;
    $y=abs($n[$-]+$_)<$p-.001
        ?$_
        :($_<=>0)*$p-$n[$-];
    $_+=$y for@n;
    $p-.001<abs$n[$-]&&++$-==@n&&last;
    $_-=$y;
    .001<abs&&redo
}
print$-

इनपुट में चालों की संख्या को खारिज कर दिया गया है, स्टडिन का ईओएफ चालों के अंत को इंगित करता है।


5

जावास्क्रिप्ट 200

function f(i){with(Math)for(m=i.split('\n'),o=m.slice(1,t=+m[0]+1),m=m.slice(t+1),c=PI,p=2*c,r=0,s=1e-3;m.length;c%=p)abs(c-o[r])<s?r++:abs(t=m[0])<s?m.shift(c+=t):(b=t<0?-s:s,c+=p-b,m[0]-=b);return r}

संपादित करें : यहां एक एनिमेटेड उदाहरण साबित हुआ है कि यह सॉल्वर काम करता है: http://jsfiddle.net/F74AP/4/

एनिमेटेड

फ़ंक्शन को इनपुट स्ट्रिंग पासिंग कहा जाना चाहिए।
यहाँ ओपी द्वारा दिए गए उदाहरण की कॉल है:

f("7\n0\n0.785398163\n3.14159265\n1.74532925\n4.71238898\n4.01425728\n0\n3\n-3.92699082\n3.14159265\n0.81245687");

यह 3इच्छानुसार लौटता है ।


2
चुनौती से, "... इनपुट को हार्ड-कोडेड नहीं होना चाहिए ..." । जब तक मैं गलत नहीं हूँ, इसका मतलब है कि आपको इसे पढ़ना होगा और आपको एक पूरा कार्यक्रम भी रखना होगा। यह सिर्फ एक फंक्शन की तरह दिखता है।
रेनबोल्ट

2
मुझे समझ नहीं आ रहा है, मान हार्ड-कोडेड नहीं हैं! "... इनपुट हार्ड-कोडेड नहीं होना चाहिए, लेकिन मानक इनपुट, तर्क, कंसोल, आदि से लिया जा सकता है "। पूरा कार्यक्रम के बारे में , मैं यह नहीं देखता कि यह कहाँ निर्दिष्ट है और वैसे भी, IMO यह एक पूर्ण JS समाधान है।
माइकल एम।

मैंने एक पूर्ण कार्यक्रम निर्दिष्ट नहीं किया, इसलिए मुझे केवल एक फ़ंक्शन के साथ कोई समस्या नहीं दिखती है। हालांकि, इनपुट को नई सीमाओं से अलग होने के रूप में निर्दिष्ट किया गया है, पहले से ही देशी सरणियों में व्यवस्थित नहीं किया गया है। यह संतुष्ट करने के लिए सरल होना चाहिए।
Geobits

1
@Geobits, मैं इसे बाद में संशोधित करूंगा, इस फिडेल पर एक नज़र डालेंगे: jsfiddle.net/F74AP/1
माइकल एम।

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