ชุดค่าผสม Kakuro
เนื่องจากฉันไม่สามารถทำเลขในใจได้ฉันจึงมักจะต่อสู้กับปริศนาKakuroซึ่งต้องให้ผู้เสียหายซ้ำหลาย ๆ ตัวเลขที่อยู่ในช่วง 1 ถึง 9 (รวม) รวมกับตัวเลขอื่นในช่วง 1 ถึง 45 เมื่อคุณรู้ มีตัวเลขมากมาย ตัวอย่างเช่นหากคุณต้องการทราบวิธีรับ 23 จาก 3 หมายเลขคำตอบเดียวคือ 6 + 8 + 9 (นี่เป็นแนวคิดเดียวกับ Killer Sudoku หากคุณคุ้นเคย)
บางครั้งคุณจะมีข้อมูลอื่นเช่นหมายเลข 1 ไม่สามารถแสดงได้ดังนั้นเพื่อให้ได้ 8 ใน 2 หมายเลขคุณสามารถใช้ 2 + 6 และ 3 + 5 เท่านั้น (คุณไม่สามารถใช้ 4 + 4 เพราะพวกเขา ไม่ชัดเจน) หรืออาจเป็นได้ว่าคุณได้พบ 3 ในการแก้ปัญหาแล้วดังนั้นบางอย่างเช่น 19 ใน 3 หมายเลขต้องเป็น 3 + 7 + 9
งานของคุณคือการเขียนโปรแกรมที่แสดงวิธีการแก้ปัญหาที่เป็นไปได้ทั้งหมดเพื่อปัญหาที่กำหนดตามลำดับที่เข้มงวดในรูปแบบที่เข้มงวด
อินพุต
วิธีการแก้ปัญหาของคุณสามารถรับอินพุตเป็นสตริง ASCII เดี่ยวทั้งผ่าน stdin อาร์กิวเมนต์บรรทัดคำสั่งอาร์กิวเมนต์ของฟังก์ชันค่าที่เหลืออยู่บนสแต็กหรือสิ่งใดก็ตามที่คุณใช้ในภาษาลึกลับที่คุณชื่นชอบ สตริงอยู่ในรูปแบบ
number_to_achieve number_of_numbers_required list_of_rejected_numbers list_of_required_numbers
ข้อโต้แย้ง 2 ข้อแรกคือเลขฐาน 10 ทั่วไปที่ไม่เป็นลบจำนวนเต็มไม่ใช่ศูนย์ในช่วง 1 ถึง 45 และ 1 ถึง 9 ตามลำดับ (โดยใช้จุดทศนิยมจะเป็นอินพุตที่ไม่ถูกต้อง) ทั้งสองรายการเป็นเพียงตัวเลขหลักที่ถูกโยงเข้าด้วยกัน ไม่มีคำสั่งซื้อใดที่ไม่มีการทำซ้ำหรือ '0' หากรายการนั้นว่างเปล่า ไม่สามารถมีตัวเลขที่ใช้ร่วมกันระหว่างรายการ (ยกเว้นสำหรับ 0) ตัวคั่นเป็นช่องว่างเดียว
เอาท์พุต
เอาต์พุตของคุณต้องเริ่มต้นด้วยบรรทัดที่มีจำนวนโซลูชันที่เป็นไปได้ โปรแกรมของคุณจะต้องพิมพ์ทางออกที่มีตัวคั่นเส้นแบ่งที่เรียงลำดับตามตัวเลขที่สำคัญยิ่งขึ้นโดยที่แต่ละตำแหน่งนั้นจะอยู่ในตำแหน่งถ้าคุณแสดงหมายเลขจาก 1 ถึง 9 ตัวอย่างด้านล่างจะทำให้ชัดเจนยิ่งขึ้น
หากมีการป้อนข้อมูลที่ไม่ถูกต้องฉันไม่สนใจสิ่งที่โปรแกรมของคุณทำ แต่ฉันต้องการที่จะไม่ให้เซกเตอร์สำหรับเริ่มระบบของฉันเป็นศูนย์
ตัวอย่าง
สำหรับอินพุตตัวอย่างนี้
19 3 0 0
ผลลัพธ์ที่คาดหวังจะเป็น
5
2 89
3 7 9
4 6 9
4 78
56 8
สังเกตช่องว่างแทนหมายเลข "หายไป" ซึ่งจำเป็นต้องใช้ ฉันไม่ได้กังวลเกี่ยวกับช่องว่างที่ไม่มีตัวเลขหลังจากพวกเขา (เช่น 9s ที่หายไปด้านบน) คุณสามารถสมมติได้ว่าสิ่งที่คุณกำลังพิมพ์จะใช้ฟอนต์ขาวดำ โปรดสังเกตการสั่งซื้อโดยที่การแก้ปัญหาที่มีตัวเลขที่เล็กที่สุดจะถูกระบุไว้ในรายการแรกและจากนั้นจะมีการเรียงลำดับตัวเลขที่เล็กที่สุดถัดไปเป็นต้น
อีกตัวอย่างหนึ่งขึ้นอยู่กับว่าข้างต้น
19 3 57 9
ผลลัพธ์ที่คาดหวังจะเป็น
2
2 89
4 6 9
โปรดทราบว่าทุกผลลัพธ์มี 9 และไม่มีผลลัพธ์ประกอบด้วย 5 หรือ 7
หากไม่มีวิธีแก้ปัญหาเช่น
20 2 0 0
จากนั้นคุณควรเอาท์พุทบรรทัดเดียวด้วย 0 บนมัน
0
ฉันตั้งใจแยกส่วนของอินพุตของความสนุกของคำถามนี้ นี่คือรหัสกอล์ฟอาจเป็นทางออกที่สั้นที่สุดที่จะชนะ