एक नेस्टेड सूची "चुनने" की प्रक्रिया पर विचार करें। उठा के रूप में परिभाषित किया गया है:
- यदि तर्क एक सूची है, तो यादृच्छिक (समान रूप से) सूची में से एक तत्व लें, और उसी से चुनें।
- यदि तर्क एक सूची नहीं है, तो बस इसे वापस करें।
पायथन में एक उदाहरण कार्यान्वयन:
import random
def pick(obj):
if isinstance(obj, list):
return pick(random.choice(obj))
else:
return obj
सादगी के लिए, हम मानते हैं कि नेस्टेड सूचियों में केवल पूर्णांक या आगे की नेस्टेड सूचियाँ हैं।
किसी भी सूची को देखते हुए, एक चपटा संस्करण बनाना संभव है, जो कि अप्रभेद्य है pick
, अर्थात इससे चुनने पर समान परिणाम मिलते हैं।
उदाहरण के लिए, सूची को "पिक-सपाट करना"
[1, 2, [3, 4, 5]]
सूची तैयार करता है
[1, 1, 1, 2, 2, 2, 3, 4, 5]
। बस चपटे होने का कारण अमान्य है, क्योंकि उप-सूचियों के तत्वों को चुने जाने की कम संभावना है, उदाहरण के लिए सूची [1, [2, 3]]
में 1 में 2/4 = 1/2 मौका है, जबकि 3 और 4 दोनों में 1/4 है। प्रत्येक को मौका दें।
यह भी ध्यान दें कि एकल सूची से चुनना अपने तत्व से लेने के बराबर है, और खाली सूची से चुनने का कोई अर्थ नहीं है।
चुनौती
नॉनजेगेटिव पूर्णांकों की एक नेस्टेड सूची को देखते हुए, नॉनजेगेटिव पूर्णांकों की एक चपटी सूची लौटाएं, जिसमें से उठाकर समान संभाव्यता के साथ समान परिणाम मिलते हैं।
यह कोड-गोल्फ है , इसलिए सबसे छोटा वैध उत्तर (बाइट्स में मापा गया) जीतता है।
विशेष विवरण
- इनपुट्स
[2, 3, 4]
,[2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4]
और[2, [3, 3], [[4]]]
समतुल्य हैं (यानी उन्हें समतुल्य परिणाम देना चाहिए)। - आउटपुट
[2, 2, 2, 2, 3, 3, 3, 3]
और[2, 3]
समतुल्य हैं (यानी या तो आउटपुट हो सकता है)। - आप केवल अनुमान लगा सकते हैं कि समावेशी रेंज 1-100 की संख्या सूची में मौजूद होगी।
- आप मान सकते हैं कि शीर्ष-स्तरीय इनपुट एक सूची होगी, अर्थात
2
एक वैध इनपुट नहीं है। - आप उदाहरण के लिए, नेस्टेड सूचियों के किसी भी उचित प्रतिनिधित्व का उपयोग कर सकते हैं:
[1, [2, 3]]
,1 {2 3}
,"[ 1 [ 2 3 ] ]"
, आदि - एक सूची के बजाय, आप एक मल्टीसेट या मैपिंग आउटपुट कर सकते हैं, या, चूंकि 1-100 की रेंज में संख्याओं की अनुमति है, मात्रा का प्रतिनिधित्व करने वाले पूर्णांकों की लंबाई -100 सूची।
परीक्षण के मामलों
ध्यान दें कि सूचीबद्ध आउटपुट केवल एक वैध संभावना है; मान्य इनपुट या आउटपुट के लिए विशिष्टताओं को देखें।
format:
input -> output
[3] -> [3]
[1, [1, 1]] -> [1]
[1, [2, 3]] -> [1, 1, 2, 3]
[2, 3, [4, [5, 5, 6], 6, 7]] -> [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7]
[[1, 1, 2], [2, 3, 3]] -> [1, 2, 3]
[[1, 1, 2], [2, 3, 3, 3]] -> [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3]