程序员花园
作为专业的软件开发人员,您不会冒险将自己暴露在强烈的非人工阳光下,但是您对鲜花也情有独钟,并希望全年保持花园良好的状态。
为此,每个月都会雇用一名园丁来整理房子脚下的花坛。但是,您需要确保园丁工作正常,并为辛勤工作的同事制定适当的薪酬。自然,软件解决方案是最好的。
输入值
将为您的程序提供输入,以描述花坛当前的状态以及需要删除的项目的详细信息。该程序必须输出没有混乱的花园,并打印出园丁的工资明细。输入可以来自STDIN,也可以作为单个命令行参数。
输入的第一行格式为
width height unwanted_item_type_count
width花圃的宽度在哪里,花坛height的高度(都是ASCII字符),并unwanted_item_type_count告诉您接下来将出现几行,其中包含要从花园中移除的物品类型的描述。
每种不需要的商品类型的每一行的格式为
width height string_representation name fee_per_item
其中width是项目的宽度,是项目height的高度(均以ASCII字符表示),string_representation是不带换行符的项目的字符串表示形式,是项目name类型的标识符(空格将由下划线替换),以及fee_per_item是指园丁为清除每种物品而需要支付的费用。
例如
3 2 .R.\|/ rouge_flower 3
表示name的项目类型,该项目类型rouge_flower需要花费3来删除,如下所示:
.R.
\|/
这些项目将不包含空格,并且任何项目都不能具有完全由点组成的边框,并且字符串表示形式也将是所述的确切大小。因此,以下所有都是无效输入:
3 1 ( ) space 0
1 1 . dot 0
2 1 .! bang 0
3 2 .@.\|/. plant 0
请注意,0是有效费用(费用始终是大于-1的整数)。
还要注意,花坛主要由点(.)而不是空格组成,您可以放心地将空格用作所有输入的定界。花坛总是以点本身为界。
列出不需要的项目类型之后,然后是给定宽度和高度的花坛的ASCII表示形式。
输出量
输出应该输出到STDOUT,或者如果您的语言不支持,则输出到STDOUT。
输出从花坛的打印输出开始,但是所有不需要的物品都被删除(用圆点代替),因此您可以看到它的外观并检查园丁的工作。花坛中的每个项目都将由一个矩形的点包围,并且将是一个连续的项目(即,项目内部没有分隔的点)。例如
.....
.#.#.
.....
显示2个单独的项目
.....
.\@/.
.....
显示1项
......
.#....
....|.
....|.
.o--/.
......
是无效的,因为可以匹配石头(#),但蛇(您不能说它是蛇吗?)不能匹配,因为石头会干扰所需的点周围。
...
\@.
...
这也是无效的,因为蜗牛位于花坛的边缘,并且该边缘必须始终由有效输入中的点包围。
此后,应列出每种类型的不需要的物品,并以以下格式给出计数,每件物品的成本以及所有物品的成本(计数*每件物品的成本):
<count> <name> at <cost_per_item> costs <cost>
在此之后,应该有一行显示总成本(不需要的项目的成本之和):
total cost <total_cost>
例
对于此给定的输入
25 18 3
4 2 .\/.\\// weeds 5
2 1 \@ snails 2
1 1 # stones 1
.........................
.\@/.................\@..
............\/...........
......O....\\//..^|^.....
.#...\|/.........^|^.....
..................|......
.................\|/.....
..\@.....\/...........#..
........\\//....#........
....*....................
...\|/......\/......\@/..
...........\\//..........
..................*......
.......\@/.......\|/.....
...O.....................
..\|/.......*............
.......#...\|/....\@.....
.........................
程序应产生此输出
.........................
.\@/.....................
.........................
......O..........^|^.....
.....\|/.........^|^.....
..................|......
.................\|/.....
.........................
.........................
....*....................
...\|/..............\@/..
.........................
..................*......
.......\@/.......\|/.....
...O.....................
..\|/.......*............
...........\|/...........
.........................
3 weeds at 5 costs 15
3 snails at 2 costs 6
4 stones at 1 costs 4
total cost 25
输出必须以换行符终止。
这是代码高尔夫球,请以最短的代码为准。
附加测试用例
编辑:这曾经包含Unicode,这在花坛中是不允许的,太现代了。这已得到纠正,对此感到抱歉。
25 15 5
5 3 ..@..\\|//.\|/. overgrown_plants 3
5 3 @-o....|...\|/. semi-articulated_plant 4
3 2 .|.\@/ mutant_plants 5
1 1 $ dollars 0
1 1 # stones 1
.........................
........@................
....$..\|/...........@...
............|.......\|/..
...#.......\@/...........
.........................
.........................
......@.......@......@...
.....\|/....\\|//...\|/..
.............\|/.........
.#....................#..
.........$.......|.......
...\/.......\/..\@/..\/..
..\\//.....\\//.....\\//.
.........................
预期产量:
.........................
........@................
.......\|/...........@...
....................\|/..
.........................
.........................
.........................
......@..............@...
.....\|/............\|/..
.........................
.........................
.........................
...\/.......\/.......\/..
..\\//.....\\//.....\\//.
.........................
1 overgrown_plants at 3 costs 3
0 semi-articulated_plants at 4 costs 0
2 mutant_plants at 5 costs 10
2 dollars at 0 costs 0
3 stones at 1 costs 3
total cost 16
\@而@/例如..或者,他们必然要永远点向西?