休息时间

作者:Nelo Onyiah

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

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-j1n3l0.pl

use v6;

our %count_for;

sub MAIN(Str $orders = $*SPEC.catdir($*PROGRAM-NAME.IO.dirname, 'coffee.txt')) {
    # get the data
    my @contents = $orders.IO.lines;

    # count the orders
    for @contents -> $line {
        unless $line ~~ /^ (Office \s+ \d+) $/ {
            my ($drink, $count) = $line.split(/\s+/);
            %count_for{$drink} += $count;
        }
    }

    # print to screen
    for %count_for.kv -> $drink, $total {
        say $drink ~ ": " ~ $total;
    }
}