让我们为纸牌游戏的一个方面构建一个模拟,我个人以荷兰语名字“ Oorlog”(译为“战争”)来知道。
“ Oorlog”如何工作?
两副纸牌(每张纸牌包括两个小丑)在玩的玩家数量之间平均分配。每个玩家随机洗牌,将其倒置在他们面前,然后所有玩家同时打开该股票的第一张牌。
“战斗”的获胜者由遵循以下规则的纸牌值决定:小丑/王牌击败金;国王击败女王;女王击败杰克;杰克击败10;10败9; ....此外,2和3都击败了Ace / Joker。最后一条规则可能会导致一个循环,其中2或3击败Ace或Joker,Ace或Joker击败某些其他牌,反过来又击败2或3。在这种情况下,2或3赢得战斗。
(在此纸牌游戏中,衣服是无关紧要的。)
当两个或两个以上的玩家拥有相等的最高卡牌时,他们就会有“战争”。这意味着他们将一张卡片倒置,然后每张卡片从库存中打开一张新卡片,再次寻找谁拥有最高的卡片。这一直持续到一个玩家赢得整个战斗为止。
(该战役的所有卡都移到赢得战斗的玩家的弃牌堆中。然后每个人都打开一张新牌。当玩家的存储卡用完时,他们将其弃牌堆倒置并继续使用此新股票。这一直持续到玩家的所有卡都用完,然后赢得最高卡数的玩家才获胜。)
具有三个玩家的“战斗”示例:
- 4、8,杰克:
杰克获胜。 - 7,王牌,女王:
王牌获胜。 - 10、10,国王:
国王获胜。 - 3,小丑,2:
3胜。 - 小丑王牌:
2 :2获胜。 - 3,女王,王牌:
3胜。 - 皇后区,皇后区9:
皇后区和皇后区之间有一场“战争”,因此继续使用两张新牌:4、8;
8胜。 - 4、4、4:
所有人都有一场“战争”,所以它继续了三张新牌:8,王牌,2;
2胜。 - Jack,5岁,Jack:
Jack和Jack发生了一场“战争”,因此它继续增加了两张新牌:5、5;
5和5也相等,因此“战争”再次以两张新牌继续:10,国王;
国王赢了。 - 小丑,小丑,王牌:
所有人都在打一场“战争”,所以它继续推出三张新牌:9、7、9;
9和9也相等,因此“战争”继续出现了两张新牌:杰克,3;
杰克赢了。
因此,面临代码挑战:
输入:
带数组的STDIN或模拟数组的字符串(您的调用-即使您的语言支持数组也是如此)。此阵列按时间顺序包含一场战斗的卡片(请参阅测试案例以更清楚地了解这一点)。
输出:
STDOUT赢得战斗的玩家的索引。
您可以选择是否要零索引(即0
,1
或2
)或一个索引的输出(即1
,2
,3
)。
挑战规则:
- 输入将是单个数组/代表数组的字符串。因此,您无法使用数组数组来简化它。对于不参与战争的卡,您也不能拥有替代物品。
- 我们使用数字符号代替字母符号。所以Ace / Joker =
1
; 杰克=11
; 皇后=12
; 和King =13
。 - 在这个挑战中,我们可以假设我们一直在和3个玩家一起玩。
- 前三个表示“战斗”的开始。当两个或两个以上的玩家进行“战争”时,阵列中的连续纸牌会表明他们的战斗(请参阅测试案例以更清楚地了解此情况)。
通用规则:
- 这被标记为代码高尔夫,因此以字节为单位的最短答案将获胜。
这并不意味着不应该输入非编码语言。尝试针对“每种”编程语言提出尽可能短的代码高尔夫答案。 - 请提及您用于输出的索引(零索引或一索引)。
测试用例:
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)