अंकों के एक सेट से सबसे लंबा टॉवर


20

संपादित करें: प्रश्न के अंत में बाउंटी पहेली।

1-अंकीय संख्याओं के एक सेट को देखते हुए, आपको यह निर्धारित करना चाहिए कि वे कितने ऊंचे टॉवर का निर्माण कर सकते हैं।

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

4 2  1 9  6  8

एक अंक दूसरे के ऊपर हो सकता है:

2
6

या इसके नीचे दो अन्य तिरछे समर्थन कर सकते हैं:

 9
5 8

नीचे वाले को वजन का समर्थन करना होता है, जो ऊपरी एक का समर्थन करता है (यदि कोई है), तो ऊपरी वाले का वजन जो हमेशा 1 होता है । यदि दो समर्थक हैं, तो वे ऊपरी कुल वजन को समान रूप से विभाजित करते हैं (50% -50%)।

प्रत्येक अंक का वजन इसके मूल्य से 1 स्वतंत्र है।

यदि एक अंक दो अन्य का समर्थन करता है तो उसे अपने संबंधित वजन के योग का समर्थन करने में सक्षम होना चाहिए। एक अंक अपने अधिकांश संख्यात्मक मूल्य पर समर्थन कर सकता है।

कुछ मान्य टावरों (ऊंचाइयों के साथ 4, 3और 5):

            0          
7           1
5    1     1 1         9 supports a total weight of 1.5 = (1+1/2)/2 + (1+1/2)/2
2   5 4    5 5        
3  5 9 5  5 6 3        6 supports a total weight of 3 =  1.5 + 1.5 = (2*1+(2*1/2))/2 + (2*1+(2*1/2))/2

कुछ अमान्य टॉवर:

1         5           The problems with the towers are (from left to right):
1  12    2 3     8      1 can't support 1+1; no space between 1 and 2;
1  5 6  1 1 1   9       1 can't support 1.5 = (1+1/2)/2 + (1+1/2)/2; 8 isn't properly supported (digits at both bottom diagonals or exactly below the 8)    

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

इनपुट

  • कम से कम एक तत्व के साथ गैर-नकारात्मक एकल-अंकीय संख्याओं की एक सूची।

उत्पादन

  • एक एकल सकारात्मक पूर्णांक, उच्चतम निर्माणीय टॉवर की ऊंचाई।
  • आपके समाधान को मेरे कंप्यूटर पर एक मिनट के तहत किसी भी उदाहरण के परीक्षण के मामले को हल करना है (मैं केवल करीबी मामलों का परीक्षण करूंगा। मेरे पास एक नीचे-औसत पीसी है।)।

उदाहरण

प्रारूप Input list => Output numberअगली पंक्तियों पर एक संभावित टॉवर के साथ है जो आउटपुट का हिस्सा नहीं है।

[0]  =>  1

0

[0, 1, 1, 1, 1, 1]  =>  3

  0
  1
 1 1

[1, 1, 1, 1, 1, 2, 2]  =>  4

   1
   1
  1 1
 1 2 2

[0, 0, 2, 2, 2, 2, 2, 5, 5, 5, 7, 7, 9]  =>  9

0
2
2
5
5
5
7
7
9

[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]  =>  9

   1
   2
   2
   3
   4
   5
  3 3
 4 4 4
5 5 5 5

[0, 0, 0, 0, 0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 7, 7, 9]  =>  11

   0
   1
   2
   3
   4
   5
  3 3
  4 5
  5 5
 3 7 3
2 7 9 2

[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9]  =>  12

 0
 1
 2
 3
 4
 5
 6
 7
4 5
6 7
8 8
9 9

[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9]  =>  18

      0
      1
      2
      3
      4
      5
      6
      7
      8
      9
     5 5
     6 6
     7 7
    4 8 4
   3 7 7 3
  2 6 8 6 2
 2 5 8 8 5 2
 3 9 9 9 9 3

यह कोड-गोल्फ है, इसलिए सबसे छोटी प्रविष्टि जीतती है।

इनाम

मैं बहुपद समय (इनपुट सूची की लंबाई के संबंध में) के नीचे विस्तारित समस्या के समाधान के लिए 100 प्रतिष्ठा इनाम (पहले से सम्मानित किए गए से असंबंधित) को पुरस्कार दूंगा या यह साबित करूंगा कि यह संभव नहीं है (पी = एनपी मानकर)। विस्तारित समस्या का विवरण:

  • इनपुट नंबर किसी भी गैर-नकारात्मक पूर्णांक हो सकते हैं, न कि केवल अंक
  • बहु-अंकीय संख्याएँ एकल-अंकीय संख्याओं के समान स्थान लेती हैं
  • बहु-अंक संख्या वे संख्यात्मक मान 24का समर्थन कर सकते हैं जैसे कि समर्थन कर सकते हैं24

बाउंटी प्रस्ताव की कोई समाप्ति तिथि नहीं है। यदि कोई सबूत दिखाई देता है तो मैं इनाम को जोड़ूंगा और इनाम दूंगा।


1
क्या आपके पास नए पीसी के लिए पर्याप्त पैसा है? फिर मेरे पास एक समाधान है: पी
थ्री एफएक्स

1
आपका 3-2-5-7टॉवर मुझे भ्रमित करता है। आप कहते हैं कि "नीचे वाला (s) को वजन का समर्थन करना होता है ऊपरी एक का समर्थन करता है (यदि कोई है), और ऊपरी का वजन जो हमेशा 1. होता है", जो आपके साथ यह कहते हुए टकराता है कि एक अंक अधिकतम समर्थन कर सकता है 'इसका संख्यात्मक मान' - यदि प्रत्येक अंक का वजन एक है, तो अलग-अलग संख्या होने का क्या मतलब है?
MI राइट

3
@ सीधे संख्या बताती है कि आप नंबर के शीर्ष पर कितना वजन रख सकते हैं। लेकिन संख्या का भार हमेशा 1. होता है
मार्टिन एंडर

@ मार्टिनबटनर ओह, डुह। धन्यवाद।
एमआई राइट

शीर्षक में अंकों के सेट का उल्लेख किया गया है, लेकिन उदाहरणों को देखते हुए, ऐसा लगता है कि आप सूचियों का मतलब है । सेट में डुप्लिकेट नहीं हो सकते।
ग्रिम्मी

जवाबों:


10

अजगर 2 - 326

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

def S(u,c=0,w=[]):
 for(s,e)in[(len(w),lambda w,i:w[i]),(len(w)+1,lambda w,i:.5*sum(([0]+w+[0])[i:i+2]))]:
    m=u[:];l=[-1]*s
    for n in u:
     for i in range(s):
        if 0>l[i]and n>=e(w,i):m.remove(n);l[i]=n;break
    if([]==l or-1in l)==0:
     for r in S(m,c+1,[1+e(w,i)for i in range(s)]):yield r
 yield c
print max(S(sorted(input())))

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