คริสต์มาสกำลังใกล้เข้ามาอย่างรวดเร็วพร้อมกับจัดระเบียบความลับประจำปีของครอบครัวซานต้า ฉันต้องการที่จะลองและเริ่มต้นในเรื่องนี้ แต่ทำให้แน่ใจว่าคู่รักจะไม่ซื้อให้ซึ่งกันและกันทำให้เกิดปัญหาและแม้จะทำสิ่งนี้มานานหลายปีก็ยังมีปัญหาที่Bobขยะสวยที่ซื้อของขวัญสำหรับ giftees ส่วนใหญ่ , Erinมีแนวโน้มที่จะผิดหวัง แต่เขารู้ดีว่าFrankชอบ Talisker ดังนั้นเขาจึงเป็นคู่ที่ดีสำหรับเขา สิ่งนี้ทำให้ไม่มีโซลูชันแบบง่าย ๆ ที่ยอมรับได้สำหรับความต้องการของฉัน
เพื่อให้ชีวิตของฉันง่ายขึ้นงานของคุณคือการเขียนฟังก์ชั่น (หรือทางเลือกที่ใกล้เคียงที่สุดในภาษาของคุณ) ว่าเมื่อได้รับอาร์เรย์ (หรือทางเลือกที่ใกล้เคียงที่สุดในภาษาที่คุณเลือก) ผลตอบแทน (หรือเอาท์พุท) เป็นการจับคู่ 'gifters' 'giftees' ในรหัสที่สั้นที่สุดที่เป็นไปได้ในไบต์เช่นว่าเงื่อนไขต่อไปนี้จะได้พบ:
- แต่ละชื่อจะถูกจับคู่กับชื่ออื่นที่สุ่มเลือกจากข้อมูลอินพุต (โปรดทราบว่าอาจไม่สามารถสุ่มผลลัพธ์ได้ตามเงื่อนไขที่กำหนด)
- ชื่อจะได้รับรายการของธงที่เป็นตัวแทนต์เมทริกซ์ถ้อยคำที่มีการสั่งซื้อที่สอดคล้องกันดังนั้นคอลัมน์นั้นหมายถึงการเป็นบุคคลเดียวกับแถว
nn - หากไม่สามารถปฏิบัติตามเงื่อนไขได้ให้ส่งคืนสิ่งที่เป็นเท็จในภาษาของคุณ
- หากมีหลายวิธีโปรแกรมของคุณจะต้องสามารถสร้างได้ทั้งหมดหากทำงานหลายครั้ง
คุณสามารถสันนิษฐานได้ว่าคุณจะไม่ถูกนำเสนอที่มีชื่อซ้ำกันในขณะที่เราจะต้องสามารถที่จะบอกว่าเป็นสมาชิกในครอบครัวซึ่ง แต่คุณอาจจะนำเสนอกับข้อมูลที่มีช่องว่างที่จะแยกความแตกต่างBob SeniorจากBob Junior! มันควรจะเสร็จสิ้นกรณีทดสอบที่ให้มาทั้งหมดภายในหนึ่งชั่วโมงสำหรับครอบครัวขนาดใหญ่ที่น่ารักเช่น 100 ชื่อที่ไม่ซ้ำกันในแหล่งข้อมูล (โปรดดูตัวอย่างชุดข้อมูลด้านล่างคุณจะต้องสามารถแยกวิเคราะห์เหล่านี้ทั้งหมดภายในเวลาที่กำหนด)
อินพุตตัวอย่าง:
santa([
["Alice", 0, 0, 1, 1, 1, 1, 1],
["Bob", 0, 0, 0, 0, 0, 1, 0],
["Carla", 1, 1, 0, 0, 0, 1, 1],
["Dan", 1, 1, 0, 0, 0, 1, 1],
["Erin", 1, 1, 0, 0, 0, 1, 1],
["Frank", 1, 1, 1, 1, 1, 0, 1],
["Gary", 1, 1, 1, 1, 1, 1, 0]
]);
// might return something like:
[
["Alice", "Erin"],
["Bob", "Frank"],
["Carla", "Alice"],
["Dan", "Gary"],
["Erin", "Bob"],
["Frank", "Dan"],
["Gary", "Carla"]
]
santa([
["Alice", 0, 1, 1, 1, 0, 1],
["Bob", 0, 0, 1, 1, 0, 1],
["Carla", 0, 1, 0, 1, 0, 1],
["Dan", 0, 1, 1, 0, 0, 0],
["Erin", 0, 0, 1, 0, 0, 1],
["Frank", 1, 1, 1, 1, 1, 0]
]);
false
santa([
["Alice", 0, 1, 1],
["Bob", 1, 0, 1],
["Carla", 1, 1, 0]
]);
[
["Alice", "Bob"],
["Bob", "Carla"],
["Carla", "Alice"]
]
ขึ้นอยู่กับภาษาการป้อนข้อมูลสามารถอยู่ในรูปแบบอื่น ๆ สำหรับรายละเอียดเกี่ยวกับอินสแตนซ์STDIN อาจจะให้เป็น:
script <<< 'Alice,0,0,1,1,1,1,1
Bob,0,0,0,0,0,1,0
Carla,1,1,0,0,0,1,1
Dan,1,1,0,0,0,1,1
Erin,1,1,0,0,0,1,1
Frank,1,1,1,1,1,0,1
Gary,1,1,1,1,1,1,0'
นอกจากนี้ยังสามารถให้ผลลัพธ์ในรูปแบบที่เหมาะสมได้ตามความเหมาะสมกับภาษาของคุณ รูปแบบที่ยอมรับได้รวมถึงอาร์เรย์ของอาร์เรย์ (ตามด้านบน) หรืออาจเป็น hash / Object/ อาเรย์แบบเชื่อมโยงหรือแม้แต่พิมพ์ parings ไปที่STDOUT:
Alice:Dan
Bob:Erin
Carla:Bob
Dan:Alice
Erin:Frank
Frank:Carla
หากมีข้อสงสัยกรุณาถามและให้ตัวอย่างของรูปแบบอินพุตที่ต้องการและรูปแบบผลลัพธ์ที่คาดหวังพร้อมคำตอบของคุณ
ดำเนินการอ้างอิง JavaScript
ขนาดใหญ่ชุดข้อมูล: 100 , 100 , 200 , 200 - หลายโซลูชั่น , 200 - เพียงหนึ่งวิธีการแก้ปัญหา
การติดตั้งอ้างอิงเสร็จสมบูรณ์ทั้งหมดใน <4s บนเครื่องของฉัน
ชุดด้านบนที่สร้างด้วยสคริปต์นี้
Bobที่Erinใด ฉันเพียงแค่เห็นหนึ่งจากการErin Bob
1ในองค์ประกอบย่อยของ kth (n + 1) หมายความว่าบุคคลที่ kth สามารถมอบให้กับบุคคลที่ n ได้หรือไม่