Lưu ý: Điều này có liên quan đến một biến thể của trò chơi Rummikub
Bối cảnh & Quy tắc
Rummikub là một trò chơi dựa trên gạch. Có bốn màu: đỏ, cam, xanh và đen. Đối với mỗi màu có 13 gạch (được dán nhãn từ 1 đến 13), và cũng có 2 Joker độc lập với màu, do đó có tổng cộng 54 mảnh. Trong biến thể này của Rummikub, mỗi người chơi nhận được 14 ô và phải nhận thêm một ô và thả một ô khác mỗi vòng, sao cho số lượng ô không đổi. Các cầu thủ không nhìn thấy gạch của nhau. Mục tiêu là nhóm các gạch, sao cho tất cả các mảnh thuộc về ít nhất một nhóm (xem bên dưới). Khi một người chơi có tất cả các mảnh được nhóm lại, họ thả bảng gạch của họ và tiết lộ các mảnh của họ. Những người khác sau đó kiểm tra xem tất cả các kết hợp có hợp lệ không và nếu có, người chơi sẽ thắng vòng đấu.
Làm thế nào gạch có thể được nhóm?
Chỉ có hai loại nhóm:
Nhóm nhiều màu :
- Chúng bao gồm 3 hoặc 4 gạch.
- Chúng chỉ chứa gạch có cùng số trên chúng.
- Tất cả các gạch có màu sắc khác nhau.
- Ví dụ :
RED 9, BLUE 9, BLACK 9
.
Nhóm đơn sắc :
- Chúng bao gồm ít nhất 3 gạch.
- Chúng không thể chứa hơn 13 gạch.
- Chúng chỉ chứa các ô có số khác nhau, liên tiếp trên chúng, theo thứ tự tăng dần.
- Tất cả các gạch có cùng màu.
- Gạch có nhãn có
1
thể không phải là nơi sau khi gạch có nhãn13
. - Ví dụ :
RED 5, RED 6, RED 7
.
Đợi đã, Joker làm gì?
Joker có thể thay thế bất kỳ phần nào trong trò chơi. Ví dụ, ví dụ đầu tiên của chúng tôi có thể trở thành JOKER, BLUE 9, BLACK 9
, RED 9, JOKER, BLACK 9
hoặc RED 9, BLUE 9, JOKER
. Điều tương tự áp dụng cho ví dụ khác của chúng tôi. Tuy nhiên, người ta không thể đặt hai Joker trong cùng một nhóm, vì vậy những thứ như JOKER, ORANGE 8, JOKER
bị cấm.
Bài tập
Đưa ra một nhóm gạch Rummikub, xác định xem nó có hợp lệ không. Bạn được đảm bảo rằng sẽ không có các ô trùng lặp nào xuất hiện, ngoại trừ 2 trò đùa và các ô bạn nhận làm đầu vào là hợp lệ (ví dụ: những thứ như 60
sẽ không xuất hiện).
Đầu ra đầu vào
Bạn có thể lấy đầu vào và cung cấp đầu ra theo bất kỳ phương pháp tiêu chuẩn nào.
Một số định dạng đầu vào hợp lệ: danh sách các chuỗi, danh sách các bộ dữ liệu, danh sách lồng nhau, chuỗi hoặc bất kỳ thứ gì khác mà bạn thấy phù hợp. Các màu có thể được lấy dưới dạng Chuỗi (ví dụ "Blue","Red", etc.
:), dưới dạng viết tắt Chuỗi (vui lòng phân biệt các ô màu Xanh lam và Đen) hoặc dưới dạng số nguyên cho phép tô màu cho một màu. Khi nói đến Jokers, bạn nên đề cập đến cách chương trình của bạn tiếp nhận chúng làm đầu vào. Nếu bạn chọn Chuỗi, bạn có thể có một cái gì đó như RED 9, JOKER, ...
, nếu bạn chọn bộ dữ liệu bạn có thể có (9,"RED"), ("JOKER")
hoặc một cái gì đó tương đương. Nếu nó giúp, bạn có thể nhận được màu cho Joker đó (không ảnh hưởng đến đầu ra của chương trình của bạn). Ví dụ, bạn có thể có ("JOKER","RED")
hoặc ("JOKER","BLUE")
, nhưng điều đó sẽ không ảnh hưởng đến đầu ra theo bất kỳ cách nào.
Về đầu ra, các quy tắc tiêu chuẩn cho một vấn đề quyết định được áp dụng.
Ví dụ làm việc
Hãy lấy một ví dụ, điều đó hy vọng sẽ làm cho nó dễ hiểu hơn. Đưa ra một nhóm như sau, trong đó mỗi bộ đại diện cho một ô:
[(9, "ĐỎ"), (9, "ORANGE"), ("CÔNG VIỆC"), (9, "ĐEN")]
Điều này sẽ trả về một giá trị trung thực, bởi vì đầu vào là hợp lệ. Trong trường hợp này, Joker thay thế (9, "BLUE")
, và họ tạo thành một nhóm nhiều màu.
Nếu bạn sẽ được đưa ra nhóm sau:
[(9, "BLUE"), (9, "ORANGE"), (9, "ĐỎ"), (9, "ĐEN"), ("JOKER")]
Nó sẽ không hợp lệ và do đó, chương trình của bạn sẽ trả về giá trị giả, bởi vì không còn gì để joker thay thế, bởi vì số lượng thẻ tối đa trong một nhóm nhiều màu là 4.
Các trường hợp kiểm tra bổ sung
Đây là cho một bộ thử nghiệm mở rộng bao gồm gần như tất cả các tình huống có thể:
Đầu vào -> Đầu ra [(1, "BLUE"), (2, "BLUE"), (3, "BLUE"), (4, "BLUE"), (5, "BLUE"), (6, "BLUE")] - > sự thật [(6, "XANH"), (6, "ĐỎ"), (6, "ĐEN)] -> sự thật [(5, "ĐEN"), (6, "ĐEN"), (7, "ĐEN"), (8, "ĐEN"), (9, "ĐEN"), (10, "ĐEN"), ( "JOKER"), (12, "ĐEN")] -> sự thật [("JOKER"), (3, "BLUE"), (3, "ĐỎ")] -> sự thật [(8, "ĐEN"), (2, "ĐỎ"), (13, "XANH")] -> giả [(4, "ĐỎ"), (3, "ĐỎ"), (5, "ĐỎ")] -> giả [(5, "ĐEN"), (6, "ĐEN)] -> giả [("JOKER"), (5, "ĐỎ"), ("JOKER")] -> giả [(4, "ĐỎ"), (5, "ĐỎ"), (6, XANH ")] -> giả [(4, "ĐỎ"), ("CÔNG VIỆC"), (5, "ĐỎ")] -> giả [(12, "ĐEN"), (13, "ĐEN), (1," ĐEN ")] -> giả
Đây là môn đánh gôn , vì vậy mã ngắn nhất tính theo byte trong mọi ngôn ngữ sẽ thắng!