配对

作者:Eric Hodges

http://web.archive.org/web/20080324231941/http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/bevent1.mspx

事件场景

这是比较简单的事件之一,无论是解释还是执行。在这个事件中,我们将使用一副标准的扑克牌。一副标准的扑克牌由四种花色组成:红桃、黑桃、梅花和方块。每种花色都有从 2 到 10 的数字牌,外加一张 J、一张 Q、一张 K 和一张 A。

给定一组随机的五张牌,你的任务是找出这组牌中有多少对。换句话说,如果你的五张牌是红桃 2、黑桃 4、梅花 4、方块 Q 和黑桃 Q,那么你有 2 对:2 个 4 和 2 个 Q。再举一个例子,你可能有梅花 3、方块 3、红桃 3、黑桃 10 和红桃 A。在这种情况下,你有 3 对:梅花 3 和方块 3;方块 3 和红桃 3;以及梅花 3 和红桃 3。

对于此事件,您应该假设您已收到以下五张牌

  • 黑桃 7

  • 红桃 5

  • 方块 7

  • 梅花 7

  • 梅花 K

使用这组牌,您的脚本应该显示对数。请记住,我们会在测试时查看脚本。只显示数字 3 的脚本将获得 0 分;您实际上必须根据这些卡片进行计算。不仅如此,卡片是什么并不重要:如果我们替换任何其他五张牌,您的脚本应该仍然返回正确的对数。

源代码:event001-eric256.pl

use v6;

my @cards = qw{6 5 6 6 K};
my $p = 0;
for @cards.kv -> $k, $v {
    $p += @cards[$k+1 .. *].grep: {$_ eq $v}
}
say "Total: $p";