本周的文件交换选择

我们最好的用户提交

Puzzler:六张牌扑克

更新:找到的解决方案比预期更快。我已经用更强大的解决方案取代了原件,即我持有储备。恭喜忍受解决原件(发现在zip中)。比赛仍然使用升级的ComputerHand.P运行


我已被众所周知,偶尔的扑克手,所以我有这个扑克启发的挑战。我组成了一个简单的扑克类型的游戏。甲板由16张卡组成,每个值为1-4。每个玩家都是六张牌。

CARDS1.JPG.

一旦你有卡片,你就设置了三手:高(3张牌),中间(2张牌),低(1张牌)。这些中的每一个都被评分不同。高手按卡的总和排名。当中间手最大的一对胜利。对击败非对,然后在未配对的手中赢得高卡赢,由第二张牌破碎。当低手,高卡赢了。

cards2.jpg.

让我们看一下同一卡的两个例子。请注意,右手播放器取决于他的策略。
CARDS3.JPG.

CARDS4.JPG.

你应该能够看到右手播放器也可以赢得!

每只手都值1点,赢得0.5次。为获胜赢得每轮三个总点中的1.5多个。
CARDS5.JPG.

我编纂了一个好的,但简单的策略。我相信有人可以制定一项持续胜利的战略。免费Matlab T恤,首先提出它。

修改人工后,并在评论中全部内容。

功能[高,中,低] =人工手(手)%对人类%的人进行有效的,随机的手将由选自%的六个随机“卡”组成[1 1 1 1 2 2 2 2 3 3 3 3 3 44 4 4];%%创建三手才能判断,以与从上述甲板的剩余百分比中选择的六个其他卡片进行SMAE。%百分比高手由三张牌组成。手的值是卡的总和。更高更好。%%中手由两张牌组成。任何配对的手都会击败任何非成对的手。%如果竞争双手都配对,最高的一对胜利。如果百分比竞争手不配对,那么每只手的最高卡都可以决定赢家。 If highest cards are the same, second highest cards % are compared. % % LOW hand consists of a single card. Highest card wins. % % This is a terrible plan that makes random hands. randomIndex = randperm(numel(hand)); hand = hand(randomIndex); high = hand(1:3); middle = hand(4:5); low = hand(6);

以下是运行比赛的代码:(无需修改此代码)

函数人类= main(numplays)numcardsindeck = 16;numcardsinhand = 6;对于i = 1:numplays;甲板= CEIL(RANDPERM(NUMARDSINDECK)/ 4);Hand.Computer = Sort(甲板(1:2:NumcardSinhand * 2  -  1));Hand.human = sort(甲板(2:2:numcardsinhand * 2));hand.deck = sort(甲板(numcardsinhand * 2 + 1:numcardsindeck));[HIGHC,MIDDLEC,LOWC] = COMPLOCHANCH(MAND.COMET);[Highh,Middh,Lowh] = Humanhan(Humman);Humanscore(3)= CompareHigh(Highh,Highc); humanScore(2) = compareMiddle(middleH , middleC); humanScore(1) = compareLow ( lowH , lowC); humanFinal(i) = compareLow(sum(humanScore), 1.5); end clf hist(humanFinal); ylim([0 numPlays]) clc humanPerWins = sum(humanFinal)/numPlays * 100; disp(['Your score against the computer: ' num2str(humanPerWins) '%.']) function score = compareHigh(H, C) if sum(H) > sum(C) score = 1; elseif sum(H) < sum(C) score = 0; else score = 0.5; end function score = compareMiddle(H, C) pairH = (H(1) == H(2)); pairC = (C(1) == C(2)); score = compareLow(pairH, pairC); if score ~= 0.5 %is pair vs non-pair return else %is non-pairs or pairs H = sort(H); C = sort(C); highH = H(2); highC = C(2); score = compareLow(highH, highC); if score ~= 0.5 return else lowH = H(1); lowC = C(1); score = compareLow(lowH, lowC); end end function score = compareLow(H, C) if H > C score = 1; elseif H < C score = 0; else score = 0.5; end

请记住在评论中使用代码周围的

  标记。

指示计算机策略的p-coded文件是:ComputerHand.P.

您可以找到所有三个文件在这里


一些有趣的笔记:我对自己的策略约为50%的胜率(当然)。我尝试了多种策略,并使用最好的一整体。但是,对于任何给定的“手VS手”一个“较小”策略将击败我的策略。我认为一个融合的策略,从卡片的许多策略中选择将获胜。

|
  • 打印
  • 发送电子邮件

评论

要发表评论,请点击在这里登录您的MathWorks帐户或创建新的。