พิจารณากระบวนการ "เลือก" รายการที่ซ้อนกัน การเลือกมีการกำหนดดังนี้:
- หากอาร์กิวเมนต์เป็นรายการให้นำองค์ประกอบจากรายการโดยการสุ่ม (สม่ำเสมอ) แล้วเลือกจากสิ่งนั้น
- หากการโต้แย้งไม่ใช่รายการเพียงแค่ส่งคืน
ตัวอย่างการนำไปใช้ใน Python:
import random
def pick(obj):
if isinstance(obj, list):
return pick(random.choice(obj))
else:
return obj
เพื่อความง่ายเราจะสมมติว่ารายการแบบซ้อนมีเพียงจำนวนเต็มหรือรายการแบบซ้อน
หากมีรายการใด ๆ ก็เป็นไปได้ที่จะสร้างเวอร์ชันที่แบนราบซึ่งไม่สามารถแยกออกได้pick
เช่นการเลือกจากรายการนั้นให้ผลลัพธ์ที่เหมือนกันโดยมีความน่าจะเป็นเหมือนกัน
ตัวอย่างเช่น "pick-flattening" รายการ
[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]