หมายเหตุ: สิ่งนี้เกี่ยวข้องกับการเปลี่ยนแปลงของเกมRummikub
พื้นหลังและกฎ
Rummikubเป็นเกมแบบเรียงต่อกัน มีสี่สีคือแดงส้มน้ำเงินและดำ สำหรับแต่ละสีนั้นจะมีไพ่ 13 ใบ (ที่มีป้ายกำกับตั้งแต่ 1 ถึง 13) และยังมีโจ๊กเกอร์ 2 ชิ้นที่ไม่ขึ้นกับสีจึงมีทั้งหมด 54 ชิ้น ในรูปแบบของ Rummikub นี้ผู้เล่นแต่ละคนจะได้รับไพ่ 14 ใบและจะต้องได้ไพ่เพิ่มอีกหนึ่งแผ่นและวางไพ่อีกหนึ่งใบในแต่ละรอบ ผู้เล่นไม่เห็นไพ่ของกันและกัน เป้าหมายคือการจัดกลุ่มกระเบื้องเพื่อให้ทุกชิ้นเป็นของกลุ่มอย่างน้อยหนึ่งกลุ่ม (ดูด้านล่าง) เมื่อผู้เล่นมีการจัดกลุ่มชิ้นส่วนทั้งหมดพวกเขาจะวางกระดานไทล์และเปิดเผยชิ้นส่วน จากนั้นคนอื่น ๆ ตรวจสอบว่าชุดค่าผสมทั้งหมดถูกต้องหรือไม่และถ้าเป็นเช่นนั้นผู้เล่นชนะรอบนั้นหรือไม่
กระเบื้องสามารถจัดกลุ่มได้อย่างไร?
มีกลุ่มสองประเภทเท่านั้น:
กลุ่มหลายสี :
- ประกอบด้วย 3 หรือ 4 แผ่น
- พวกเขามีเพียงกระเบื้องที่มีหมายเลขเดียวกันกับพวกเขา
- กระเบื้องทั้งหมดมีสีแตกต่างกัน
- ตัวอย่าง:
RED 9, BLUE 9, BLACK 9
.
กลุ่มสีโมโน :
- พวกเขาประกอบด้วยอย่างน้อย 3 แผ่น
- พวกเขาไม่สามารถมีมากกว่า 13 แผ่น
- พวกเขามีเพียงกระเบื้องที่มีหมายเลขแตกต่างกันติดต่อกันในลำดับเรียง
- กระเบื้องทั้งหมดมีสีเดียวกัน
- กระเบื้องที่มีป้ายกำกับ
1
อาจจะไม่ได้13
เป็นสถานที่หลังจากกระเบื้องที่มีป้ายกำกับ - ตัวอย่าง:
RED 5, RED 6, RED 7
.
รอสิ่งที่นักเลงทำอะไร?
โจ๊กเกอร์สามารถทดแทนชิ้นส่วนใดก็ได้ในเกม ตัวอย่างเช่นตัวอย่างแรกของเราจะกลายเป็น JOKER, BLUE 9, BLACK 9
, หรือRED 9, JOKER, BLACK 9
RED 9, BLUE 9, JOKER
เช่นเดียวกับตัวอย่างอื่น ๆ ของเรา อย่างไรก็ตามหนึ่งอาจไม่ได้วาง Jokers สองคนในกลุ่มเดียวกันดังนั้นสิ่งต่าง ๆ ที่JOKER, ORANGE 8, JOKER
เป็นสิ่งต้องห้าม
งาน
ให้กลุ่มกระเบื้อง Rummikub พิจารณาว่าถูกต้องหรือไม่ คุณรับประกันได้ว่าจะไม่มีการเรียงต่อกันที่ซ้ำกันยกเว้นสำหรับนักต้มตุ๋น 2 คนและการเรียงต่อที่คุณได้รับจากการป้อนข้อมูลนั้นถูกต้อง (เช่นสิ่งต่างๆ60
จะไม่ปรากฏขึ้น)
อินพุต / เอาต์พุต
คุณสามารถรับอินพุตและให้ผลลัพธ์ด้วยวิธีมาตรฐานใด ๆ
รูปแบบอินพุตที่ถูกต้องบางรายการ: รายการสตริง, รายการของ tuples, รายการซ้อน, สตริงหรือสิ่งอื่นที่คุณเห็นว่าเหมาะสม สีสามารถใช้เป็น Strings (เช่น:) "Blue","Red", etc.
, เป็นตัวย่อของสตริง (โปรดสร้างความแตกต่างของสีน้ำเงินและสีดำ) หรือเป็นจำนวนเต็มที่สอดคล้องกับสี เมื่อพูดถึง Jokers คุณควรพูดถึงวิธีที่โปรแกรมของคุณรับพวกเขาเป็นอินพุท หากคุณเลือก Strings คุณอาจมีสิ่งที่ชอบRED 9, JOKER, ...
ถ้าคุณเลือกสิ่งอันดับคุณสามารถมี(9,"RED"), ("JOKER")
หรืออะไรก็ได้ที่เทียบเท่า ถ้ามันช่วยได้คุณอาจได้รับสีสำหรับตัวโจ๊กเกอร์นั้น (ซึ่งไม่ควรส่งผลกระทบต่อผลลัพธ์ของโปรแกรมของคุณ) ตัวอย่างเช่นคุณอาจมี("JOKER","RED")
หรือ("JOKER","BLUE")
แต่ไม่ควรมีอิทธิพลต่อผลลัพธ์ในทางใดทางหนึ่ง
เกี่ยวกับการส่งออกกฎระเบียบมาตรฐานสำหรับการตัดสินใจปัญหาใช้
ตัวอย่างการทำงาน
ลองยกตัวอย่างหวังว่าจะทำให้เข้าใจง่ายขึ้น รับกลุ่มดังต่อไปนี้ที่แต่ละ tuple แสดงถึงไทล์:
[(9, "RED"), (9, "ORANGE"), ("JOKER"), (9, "BLACK")]
สิ่งนี้ควรส่งคืนค่าความจริงเนื่องจากอินพุตถูกต้อง ในกรณีนี้ Joker ใช้ทดแทน(9, "BLUE")
และพวกมันจะรวมกลุ่มหลายสี
หากคุณจะได้รับกลุ่มต่อไปนี้:
[(9, "BLUE"), (9, "ORANGE"), (9, "RED"), (9, "BLACK"), ("JOKER")]
มันจะไม่ถูกต้องและทำให้คุณโปรแกรมควรส่งคืนค่าที่ผิดพลาดเนื่องจากไม่มีสิ่งใดที่โจ๊กเกอร์จะมาแทนที่เนื่องจากจำนวนสูงสุดของการ์ดในกลุ่มที่มีหลายสีคือ 4
กรณีทดสอบเพิ่มเติม
สิ่งเหล่านี้มีไว้สำหรับชุดทดสอบเพิ่มเติมที่ครอบคลุมสถานการณ์เกือบทั้งหมดที่เป็นไปได้:
อินพุต -> เอาท์พุท [(1, "BLUE"), (2, "BLUE"), (3, "BLUE"), (4, "BLUE"), (5, "BLUE"), (6, "BLUE")] - > ความจริง [(6, "BLUE"), (6, "RED"), (6, "BLACK)] -> ความจริง [(5, "สีดำ"), (6 "สีดำ") (7 "สีดำ") (8 "สีดำ") (9, "สีดำ"), (10 "สีดำ"), ( "JOKER"), (12, "BLACK")] -> ความจริง [("JOKER"), (3, "BLUE"), (3, "RED")] -> ความจริง [(8, "BLACK"), (2, "RED"), (13, "BLUE")] -> เท็จ [(4, "RED"), (3, "RED"), (5, "RED")] -> เท็จ [(5, "BLACK"), (6, "BLACK)] -> เท็จ [("JOKER"), (5, "RED"), ("JOKER")] -> เท็จ [(4, "RED"), (5, "RED"), (6, BLUE ")] -> เท็จ [(4, "RED"), ("JOKER"), (5, "RED")] -> เท็จ [(12, "BLACK"), (13, "BLACK), (1," BLACK ")] -> เท็จ
นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์ในทุกภาษาชนะ!