क्या इस जोड़ पिरामिड पहेली का एक अनूठा समाधान है?


12

एक अतिरिक्त पिरामिड P को देखते हुए , यह निर्धारित करें कि क्या इसे हल किया जा सकता है। एक अतिरिक्त पिरामिड में परतें होती हैं , जिनमें से प्रत्येक के नीचे एक से कम संख्या होती है। Layer i को Pi रूप में प्रतीकित किया गया है । P1 आधार परत है, और Pi+1 परत PiP i की j संख्या को P i , j के रूप में दर्शाया गया है । P i , 1 P i , और P i की सबसे बाईं ओर हैPiPi,jPi,1PiPi,j+1Pi,j के दाईं ओर की संख्या है। आपPi+1,j को मध्यमेंPi,j औरPi,j+1 पर देख सकते हैं, इसलिए इसका नाम "जोड़पिरामिड" है।

  • Pi,j,Pi,jN , यह है कि, पिरामिड में हर संख्या एक गैर शून्य सकारात्मक पूर्णांक है।
  • i>1,Pi,j=Pi1,j+Pi1,j+1 , यानी हर संख्या जो पिरामिड की आधार परत पर नहीं है, उसके नीचे दो संख्याओं का योग है।
  • अगर P1 है n नंबर, Pi है ni+1 नंबर, इसलिए Pi,ni+1 की सबसे दायीं ओर का नंबर है Pi । सरल शब्दों में, प्रत्येक परत के नीचे की परत की तुलना में एक नंबर कम है।

एक अतिरिक्त पिरामिड पहेली Q एक अतिरिक्त पिरामिड है जिसमें कुछ संख्याओं को हटा दिया गया है (साथ प्रतिस्थापित ? )। इसका समाधान एक अतिरिक्त पिरामिड है P , जहां Qi,j?,Pi,j=Qi,j , अर्थात, जो संख्याएं मूल रूप से पहेली में मौजूद थीं, उन्हें अपरिवर्तित छोड़ दिया गया है। इस तरह की पहेली में एक से अधिक समाधान हो सकते हैं।

यह निर्धारित करने के लिए कि आपका कोई समाधान है, आपकी नौकरी को एक अतिरिक्त पिरामिड पहेली दी गई है।

इनपुट

आप निम्न में से किसी भी रूप में इनपुट प्राप्त कर सकते हैं, लेकिन सुसंगत रहें:

  • परतों की सरणी।
  • परतों की सरणी, तत्वों के बीच एक विभाजक के रूप में एक सुसंगत गैर-धनात्मक-पूर्णांक मान का उपयोग करके पिरामिड के आकार की है (प्रत्येक बार केवल एक बार उपयोग की जाती है) साथ ही साथ बाएँ और दाएँ पैडिंग। विभाजक और गद्दी समान होनी चाहिए।
  • एक समान वैध दाएं या बाएं गद्दी के साथ परतों की सरणी (आप इस मामले में सुसंगत और दाएं और बाएं गद्दी नहीं मिलनी चाहिए)।

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

उत्पादन

दो लगातार विशिष्ट मूल्यों में से एक, जहां एक अद्वितीय समाधान की उपस्थिति का प्रतिनिधित्व करता है और दूसरा समाधान की अनुपस्थिति या एक से अधिक समाधान की उपस्थिति का प्रतिनिधित्व करता है।

नियम

  • Qi+1,j=Qi,j+Qi,j+1 हमेशा सच हो सकता है अगरQi,j,Qi,j+1,Qi+1,jN , यह है कि, इनपुट दो अन्य नंबरों के शीर्ष पर एक नंबर शामिल नहीं होने की गारंटी दी जाती है, यदि सभी तीन नंबर ज्ञात नहीं हैं।
  • Qi,j,Qi,j?, अर्थात्, पिरामिड में कम से कम एक ज्ञात संख्या होगी।
  • इन चीजों को मत करो ।
  • यह , इसलिए सबसे छोटा उत्तर जीतता है! हालाँकि, उस समाधान को केवल इसलिए पोस्ट करने से हतोत्साहित न करें क्योंकि आपकी भाषा "बहुत क्रिया" है।

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

इन परीक्षणों के मामलों के लिए ऊपर से आधार तक की परतों के साथ एक सरणी का 0प्रतिनिधित्व किया जाता है ?

[[10], [0, 0], [0, 2, 0], [0, 0, 0, 1]] -> True
[[32], [0, 0], [0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]] -> True
[[0], [1, 1]] -> True
[[1], [0, 0]] -> False
[[10], [5, 5], [2, 3, 2], [0, 0, 0, 0]] -> False
[[5], [0, 0], [0, 0, 0]] -> False

काम के उदाहरण

परीक्षण मामलों में यहां काम किया जाता है।

अनोखा उपाय १

10???2????1

चरण 1: x+y=2x=y=1

10???2??111

चरण 2: x=y=1x+y=2

10???22?111

चरण 3: x=y=2x+y=4

10?4?22?111

चरण 4: x+4=10x=6

1064?22?111

चरण 5-6 4 के समान हैं।

10644223111

तो यहाँ हम अपने अद्वितीय समाधान है।

अनोखा उपाय २

32????????????????????

चरण 1: यहां कोई स्पष्ट दृष्टिकोण नहीं है, तो चलो न्यूनतम संभव मूल्यों का उपयोग करने का प्रयास करें।

32??????????????111111

चरण 2-5: यह एक समाधान में न्यूनतम मूल्यों के परिणाम की तरह दिखता है, इसलिए यह एकमात्र समाधान है और इसलिए अद्वितीय है।

321616888444422222111111

संकेत: इस पहेली से संबंधित पिरामिड पहेलियों के बारे में एक प्रमेय है जिसे आप पर्याप्त कठिन सोचने पर साबित कर सकते हैं।

अनोखा उपाय ३

?11

x=y=1x+y=2

211

यह स्पष्ट रूप से अनूठा समाधान है।

कोई हल नहीं 1

1??

minN=1x,y1x+y2>1

कोई हल नहीं २

1055232????

x+y=2x=y=1

10552321111

1+1=3

गैर-अनूठा समाधान

5?????

दो समाधान:

552332112211

चूंकि कम से कम दो समाधान हैं, इसलिए कोई अनूठा समाधान नहीं है।


जवाबों:


5

जेली , 18 16 बाइट्स

FṀ‘ṗLSƝƬ€Ṗ€a@ċ⁼1

इसे ऑनलाइन आज़माएं!

एक मोनडिक लिंक जो पिरामिड को रिवर्स ऑर्डर में ले जाता है और 1 सच के लिए और 0 झूठे के लिए देता है। पिरामिड में अधिकतम संख्या तक एक आधार के साथ सभी संभव पिरामिड बनाता है और जांचता है कि क्या इनपुट के लिए एक अद्वितीय मैच है।

यह इंगित करने के लिए @Arnauld के लिए धन्यवाद कि यह विफल रहा [[1,0],[0]]; अब सही किया गया।

2 बाइट्स बचाने के लिए @JonathanAlan को धन्यवाद!

व्याख्या

F                | Flatten
 Ṁ               | Maximum
  ‘              | Increase by 1
   ṗ             | Cartesian power of this with:
    L            | - Length of input
        €        | For each:
       Ƭ         | - Repeat the following until no change
     SƝ          |   - Sum of neighbours
         Ṗ€      | Remove last element from each list
           a@    | Logical and input with each list
             ċ   | Count times input appears
              ⁼1 | Check if equal to 1

बहुत अच्छा। "सभी कब्जे को उत्पन्न करता है" तर्क कैसे काम करता है?
जोनाह

1
@ जोना आधार की लंबाई के साथ ग्रिड में अधिकतम संख्या का कैटेरेसियन शक्ति है। उदाहरण के लिए, यदि अधिकतम संख्या 10 और आधार 4 की लंबाई थी तो यह 10000 संभावनाओं से [1,1,1,1]लेकर हर चीज का परीक्षण करेगा [10,10,10,10]
निक केनेडी

सत्य के लिए आउटपुट देता है [[0,0],[0]]
केविन क्रूज़सेन

@KevinCruijssen मैंने स्पष्टीकरण के लिए कहा है कि क्या कोई ज्ञात मूल्यों वाला इनपुट मान्य नहीं है। यदि हां, तो मैं बदल सकते हैं करने के लिए »2भी क्षमता एक बाइट की कीमत पर, मेरा आखिरी परिवर्तन के साथ खो दिया है हालांकि फिर से का लाभ दिया है जो।
निक कैनेडी

2
...Ƭ€Ṗ€a@ċ⁼1दो बाइट्स बचाता है (जब तक कि किनारे के मामले न हों और परीक्षणों द्वारा पूरा नहीं किया जाता है?)
जोनाथन एलन

2

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 303 227 बाइट्स

n=>{int i=n.Max(x=>x.Max()),j=n.Count,t=0,k,m=0,z;for(;t<Math.Pow(i,j);){k=t++;var s=n.Select(_=>(a:k%i+1,k/=i).a).ToList();if(n.All(x=>(z=0,b:x.All(o=>o==s[z++]|o<1),s=s.Skip(1).Select((a,b)=>a+s[b]).ToList()).b))m++;}m/=m-1;}

यदि सत्य है, तो अपवाद फेंकता है, यदि सामान्य रूप से झूठ चलता है।

इसे ऑनलाइन आज़माएं!


1

वोल्फ्राम लैंग्वेज (गणितज्ञ) , 85 88 बाइट्स

Count[l=Length@#;NestList[2#~MovingMedian~2&,#,l-1]&/@Range@Max@#~Tuples~l,#/. 0->_]==1&

इसे ऑनलाइन आज़माएं!

+3 तय किया।

जानवर बल: मूल्यों के साथ सभी ठिकानों के लिए , देखें कि परिणामी पिरामिड दिए गए फॉर्म से मेल खाता है या नहीं, और देखें कि क्या कुल मिलान संख्या 1 है। लेवल की सूची के रूप में इनपुट लेता है, पहले बेस, लापता संख्याओं का प्रतिनिधित्व करने के साथ ।1..(sum of all numbers)0


1

05AB1E , 25 बाइट्स

ZÌLsgãε©.Γü+}¨®š.S*˜O_}OΘ

पिरामिड परतों को उल्टा क्रम में, टिप (यानी [[0,0,0,1],[0,2,0],[0,0],[10]]) के आधार पर ले जाता है ।

इसके अलावा, एक मानचित्र के अंदर 05AB1E में कहीं न कहीं एक बग लगता है .. ©...®šबस ...yš-1 बाइट के लिए होना चाहिए ।

इसे ऑनलाइन आज़माएं या कुछ और परीक्षण मामलों को सत्यापित करें

इसके लिए एक मामूली बाइट्स विकल्प ©.ΓüO}®šहो सकता है [Ðg#üO}\): इसे ऑनलाइन आज़माएं।

स्पष्टीकरण:

Z        # Get the flattened maximum of the (implicit) input (without popping)
 Ì       # Increase it by 2
  L      # Create a list in the range [1, max+2]
   sg    # Swap to get the input again, and get the length (amount of layers)
     ã   # Create a cartesian product of this list repeated that many times
ε        # Map each inner list to:
 ©       #  Store it in variable `®` (without popping)
       #  Collect all results until the following doesn't change anymore:
    ü    #   Get the pairwise:
     +   #    Sums
   }®š   #  After we've collected all, prepend the original list `®`
 .S      #  Now compare this potential pyramid with the (implicit) input-pyramid
         #  (-1 if a<b; 0 if a==b; 1 if a>b)
   *     #  Multiply that with the (implicit) input-pyramid
    ˜O   #  Then take the flattened sum
      _  #  And check that this sum equals 0 (1 if truhy; 0 if falsey)
}O       # After the map, take the sum to get the amount of truthy values
  Θ      # And trutify it (== 1), since we must output distinct values instead of truthy/falsey
         # (after which the result is output implicitly)

1
कई आसान मामलों में विफल रहता है । ऐसा लगता है कि आप a%b == 0शॉर्टकट के रूप में उपयोग करने की कोशिश कर रहे हैं a == b || a == 0, लेकिन यह काम नहीं करता है क्योंकि एक से अधिक बी हो सकता है।
ग्रिमी

अलग मुद्दा: कोड ऐसे मामलों के लिए सही होता है [[0,0],[0]], जिनमें असीम रूप से कई समाधान होते हैं। मुझे लगता है कि बस >सही ढंग से उच्चारण Iसुधारों को बदल रहा है।
ग्रैमी जूल

1
@Grimy के .S*बजाय का उपयोग करके फिक्स्ड %, तो बस +2 बाइट्स।
केविन क्रूज़सेन

0

हास्केल, 106 बाइट्स

z=zipWith
a#b=a*b==a*a
f x=[1|t<-mapM(\_->[1..sum(sum<$>x)])x,all and$z(z(#))x$iterate(z(+)=<<tail)t]==[1]

एक उल्टा पिरामिड लेता है, जैसे [[0,0,0,1],[0,2,0],[0,0],[10]]

इसे ऑनलाइन आज़माएं!

हास्केल में जानवर बल दृष्टिकोण:

  • सभी संभावित आधार परतें बनाएं t( mapM(\_->[1..sum(sum<$>x)])x), जहां इनपुट पिरामिड में सभी संख्याओं के योग 1 से संख्या तक जाएं
  • t( iterate(z(+)=<<tail)t) से एक पिरामिड बनाएं
  • इनपुट के साथ प्रत्येक परत तत्व-वार की तुलना करें ( z(z(#))x)। यदि दोनों संख्याएँ समान हैं या शून्य ( ) है तो तुलनात्मक फ़ंक्शन a # bलौटाता है ।Trueaa*b==a*a
  • एक ले 1हर पिरामिड कि मैचों के लिए और सिंगलटन सूची में जिसके परिणामस्वरूप सूची की तुलना [1]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.