Hãy xây dựng một mô phỏng cho một khía cạnh trong trò chơi bài, mà cá nhân tôi biết bằng tên tiếng Hà Lan 'Oorlog' (tạm dịch là 'Chiến tranh').
'Oorlog' hoạt động như thế nào?
Hai bộ bài (mỗi bộ gồm hai Joker) được chia đều cho số lượng người chơi đang chơi. Mỗi người chơi xáo trộn cổ phiếu của chính họ, đặt nó lộn ngược trước mặt họ, và tất cả người chơi mở thẻ đầu tiên của cổ phiếu cùng một lúc.
Người chiến thắng trong 'trận chiến' đó được xác định bởi các giá trị của các quân bài theo các quy tắc sau: Joker / Ace đánh bại King; Vua đánh bại Nữ hoàng; Nữ hoàng đánh bại Jack; Jack đánh bại 10; 10 thất bại 9; .... Ngoài ra, cả 2 và 3 đều đánh bại Ace / Joker. Quy tắc cuối cùng có thể dẫn đến một chu kỳ trong đó 2 hoặc 3 nhịp Ace hoặc Joker, Ace hoặc Joker đánh bại một số thẻ khác, lần lượt đánh bại 2 hoặc 3. Trong trường hợp này, 2 hoặc 3 thắng trận chiến.
(Suit không liên quan trong trò chơi bài này.)
Khi hai hoặc nhiều người chơi có thẻ cao nhất bằng nhau, họ có 'chiến tranh'. Điều này có nghĩa là họ đặt một thẻ lộn ngược, và sau đó mỗi thẻ mở ra một thẻ mới từ cổ phiếu của họ, một lần nữa xem ai có thẻ cao nhất. Điều này tiếp tục cho đến khi một người chơi chiến thắng toàn bộ trận chiến.
. Điều này tiếp tục cho đến khi một người chơi hết thẻ và sau đó người chơi có số lượng thẻ cao nhất sẽ thắng.)
Ví dụ 'trận chiến' với ba người chơi:
- 4, 8, Jack:
Jack thắng. - 7, Ace, Queen:
Ace thắng. - 10, 10, Vua:
Vua thắng. - 3, Joker,
thắng 2: 3. - Ace, Joker,
thắng 2 : 2. - 3, Nữ hoàng, Ace:
3 chiến thắng. - Queen, Queen, 9:
Queen & Queen đang có một 'cuộc chiến', vì vậy nó tiếp tục với hai lá bài mới: 4, 8;
8 chiến thắng. - 4, 4, 4:
Tất cả đang có một 'cuộc chiến', vì vậy nó tiếp tục với ba thẻ mới: 8, Ace, 2;
2 chiến thắng. - Jack, 5, Jack:
Jack & Jack đang có một 'cuộc chiến', vì vậy nó tiếp tục với hai thẻ mới: 5, 5;
5 & 5 cũng bằng nhau, vì vậy 'cuộc chiến' lại tiếp tục với hai lá bài mới: 10, King;
Vua thắng. - Joker, Joker, Ace:
Tất cả đang có một 'cuộc chiến', vì vậy nó tiếp tục với ba thẻ mới: 9, 7, 9;
9 & 9 cũng bằng nhau, vì vậy 'cuộc chiến' tiếp tục với hai lá bài mới: Jack, 3;
Jack thắng.
Vì vậy, vào thử thách mã:
Đầu vào:
STDIN với một mảng hoặc một chuỗi mô phỏng một mảng (cuộc gọi của bạn - ngay cả khi ngôn ngữ của bạn không hỗ trợ mảng). Mảng này chứa các quân bài của một trận chiến theo thứ tự thời gian (xem các trường hợp thử nghiệm để hiểu rõ hơn về điều này).
Đầu ra:
KHÔNG CÓ chỉ số của người chơi đã thắng trận chiến.
Bạn có thể chọn xem bạn có muốn một zero-lập chỉ mục (ví dụ 0
, 1
hoặc 2
) hoặc một chỉ mục đầu ra (tức là 1
, 2
, 3
).
Quy tắc thử thách:
- Đầu vào sẽ là một mảng / chuỗi đơn đại diện cho một mảng. Vì vậy, bạn không thể có một mảng các mảng để đơn giản hóa nó. Bạn cũng không thể có vật phẩm thay thế cho thẻ không tham gia chiến tranh.
- Chúng tôi sử dụng ký hiệu số cho thẻ mặt thay vì ký hiệu chữ cái. Vậy Ace / Joker =
1
; Jack =11
; Nữ hoàng =12
; và vua =13
. - Trong thử thách này, chúng tôi có thể cho rằng chúng tôi luôn chơi với 3 người chơi .
- Ba phần đầu chỉ ra sự bắt đầu của 'trận chiến'. Khi hai hoặc nhiều người chơi có 'chiến tranh', các thẻ tiếp tục trong mảng biểu thị trận chiến của họ (xem các trường hợp thử nghiệm để hiểu rõ hơn về điều này).
Quy tắc chung:
- Đây được gắn thẻ code-golf , vì vậy câu trả lời ngắn nhất bằng byte thắng.
Điều này không có nghĩa là các ngôn ngữ không chơi mã không nên nhập. Cố gắng đưa ra một câu trả lời golf-code càng ngắn càng tốt cho ngôn ngữ lập trình 'mọi'. - Vui lòng đề cập đến việc lập chỉ mục (không hoặc chỉ mục một) mà bạn đã sử dụng cho đầu ra.
Các trường hợp thử nghiệm:
Test case 1: [4, 8, 11] -> 2 (or 3)
Test case 2: [7, 1, 12] -> 1 (or 2)
Test case 3: [10, 10, 13] -> 2 (or 3)
Test case 4: [3, 1, 2] -> 0 (or 1)
Test case 5: [1, 1, 2] -> 2 (or 3)
Test case 6: [3, 12, 1] -> 0 (or 1)
Test case 7: [12, 12, 9, 4, 8] -> 1 (or 2)
Test case 8: [4, 4, 4, 8, 1, 2] -> 2 (or 3)
Test case 9: [11, 5, 11, 5, 5, 10, 13] -> 2 (or 3)
Test case 10: [1, 1, 1, 9, 7, 9, 11, 3] -> 0 (or 1)
Test case 11: [13, 13, 4, 1, 3] -> 1 (or 2)
Test case 12: [13, 4, 13, 2, 3] -> 2 (or 3)