निर्धारित करें कि क्या तर्कसंगत निर्देशांक सही Sierpinski त्रिकोण में हैं


9

सिएरपिन्स्की त्रिकोण विमान पर अंक जो एक त्रिकोण के साथ शुरू और बार बार चार सर्वांगसम त्रिभुजों में सभी त्रिकोण बंटवारे और केंद्र त्रिकोण को हटाने के द्वारा निर्माण किया है का एक सेट है। सही Sierpinski त्रिकोण के कोने हैं (0,0), (0,1)और (1,0)इस तरह दिखता है:

Sierpinski त्रिकोण

इस सेट की कुछ समकक्ष परिभाषाएँ इस प्रकार हैं:

  • nउपरोक्त वर्णित प्रक्रिया के वें पुनरावृत्ति में अंक , सभी के लिए n

  • के (x,y)साथ अंक 0 <= x <= 1और 0 <= y <= 1ऐसे सभी सकारात्मक पूर्णांकों के लिए n, nx और y के द्विआधारी विस्तार में वें बिट दोनों नहीं हैं 1

  • चलो T = {(0,0),(1,0),(0,1)}

    आज्ञा देना fनिम्नलिखित द्वारा परिभाषित 2 डी अंक के सेट पर एक समारोह हो:

    f(X) = {(0,0)} ∪ {(x+t)/2 | x∈X, t∈T}

    फिर सही Sierpinski त्रिभुज सबसे कम निश्चित बिंदु (सेट नियंत्रण द्वारा) का सामयिक समापन है ।f

  • आज्ञा देना Sवर्ग{(x,y) | 0<=x<=1 and 0<=y<=1}

    लेट g(X) = S ∩ {(x+t)/2 | x∈(X), t∈T}(जहाँ Tऊपर परिभाषित है)

    फिर सही Sierpinski त्रिकोण का सबसे बड़ा निश्चित बिंदु है g

चुनौती

एक प्रोग्राम या फ़ंक्शन लिखें जो 4 पूर्णांक को स्वीकार करता है , और एक सत्य मूल्य देता है a,b,c,dयदि (a/b,c/d)सही सिरिंपस्की त्रिकोण से संबंधित है, और अन्यथा एक गलत मूल्य देता है।

स्कोरिंग

यह एक कोड गोल्फ है। बाइट्स में सबसे छोटा कोड जीतता है।

परीक्षण के मामलों

निम्नलिखित सही Sierpinski त्रिकोण में हैं:

0 1 0 1
0 1 12345 123456
27 100 73 100
1 7 2 7
8 9 2 21
8 15 20 63
-1 -7 2 7

निम्नलिखित सही Sierpinski त्रिकोण में नहीं हैं:

1 1 1 1
-1 100 1 3
1 3 1 3
1 23 1 7
4 63 3 66
58 217 4351 7577
-1 -7 3 7

है -1 -3 1 1एक मान्य इनपुट?
xnor

हां, यह एक मान्य इनपुट है। मैंने इसे स्पष्ट करने के लिए परीक्षण मामले जोड़े हैं।
कार्डबोर्ड_बॉक्स

जवाबों:


5

अजगर 2, 68

lambda n,d,N,D:1>=n/d>=0<=N/D<=1and(n<<abs(D*d))/d&(N<<abs(D*d))/D<1

गैस्केट सदस्यता के लिए एक अच्छा तरीका बदसूरत बना दिया। अगर हमें गारंटी दी गई कि इनपुट गैर-नकारात्मक हैं और यूनिट स्क्वायर में, हमारे पास 38 होंगे:

lambda n,d,N,D:(n<<D*d)/d&(N<<D*d)/D<1

विचार यह है कि हम जाँचते हैं कि क्या कोई बिंदु गैस्केट के भीतर है या नहीं यह जाँच कर कि क्या उनके द्विआधारी अंश का विस्तार बिटवाइस-एंड से 0. kविस्तार के पहले वर्ण को प्राप्त करने के लिए , हम हर-बिट को अंश kसे विभाजित करने से पहले छोड़ देते हैं, जो भाजक द्वारा पूर्णांक-विभाजन से पहले छोड़ दिया जाता है । हमें kदोहराने को पकड़ने के लिए पर्याप्त रूप से बड़ा बनाने की आवश्यकता है । हम ध्यान दें कि द्विआधारी विस्तार n/dमें अधिकतम अवधि होती है d, इसलिए संयुक्त विस्तार में अधिकतम अवधि होती है d*D, इसलिए k=d*Dपर्याप्त होता है।

बाकी यह जांचना है कि अंश बॉक्स में है या नहीं और दिए गए इनपुट के खिलाफ इंसुलेट करें -1/-3

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