休息时间

作者:Eric Hodges

今天是星期一早上,至少有一半的人周末加班了,每个人都有些疲惫,但还有大量的工作要做。因此,好心的助理决定去给大家买咖啡。每个人可以选择拿铁、浓缩咖啡或卡布奇诺。助理挨个办公室询问订单。(每个办公室都有几个人。)他写下办公室号,然后是拿铁、浓缩咖啡和卡布奇诺的数量。他的清单如下所示

Office 100
Espresso 3
Latte 1
Cappuccino 1
Office 200
Cappucino 2
Latte 2
Espresso 1
Office 300
…

等等。然而,他一完成就意识到自己遇到了一个问题:他不想分别订购 3 杯浓缩咖啡、1 杯浓缩咖啡和 2 杯浓缩咖啡等。他需要订购每种饮料的总数。如果您从包含订单的文本文件(Scripting Games 2008 竞赛包中的 Coffee.txt)中读取数据,并正确输出助理需要订购的每种饮料的数量统计,则您将成功完成此事件,如下所示

Espresso: 15
Latte: 10
Cappuccino: 14

请确保将文件 Coffee.txt 放在 C:\Scripts 文件夹中。如果引用 C:\Scripts\Coffee.txt 以外的任何路径,则脚本在我们测试时可能会失败。

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

源代码:event006-eric256.pl

use v6;

my $coffee-list = $*SPEC.catdir($*PROGRAM-NAME.IO.dirname, 'coffee.txt');
my $lines = slurp($coffee-list).chomp;
my %order;
for $lines.split(/\n/) {
    my ($drink, $amount) = $_.split(' ');
    next if $drink eq 'Office';
    %order{$drink} += $amount;
}

for %order.kv -> $drink, $qty {
    "{$drink}: {$qty}".say;
}