プログラマーズガーデン
プロのソフトウェア開発者であるあなたは、太陽の厳しい非人工光にさらされる危険を冒すことはできませんが、花のためのソフトスポットもあり、一年中庭を良い状態に保ちたいです。
このため、毎月庭師を雇って家のふもとの花壇をきれいにします。ただし、庭師が仕事を適切に行っていることを確認し、勤勉な仲間に適切な支払いをする必要があります。当然、ソフトウェアソリューションが最適です。
入力
プログラムには、現在表示されている花壇を説明する入力と、削除する必要があるアイテムの詳細が入力されます。プログラムは、乱雑さのない庭を出力し、庭師の支払いの内訳を印刷する必要があります。入力は、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であるか、言語がサポートしていない場合は適切な代替である必要があります。
出力は花壇のプリントアウトから始まりますが、不要なアイテムはすべて削除(ドットに置き換え)されるため、どのように表示されるかを確認し、庭師が仕事をしたことを確認できます。花壇の各アイテムはドットの長方形で囲まれ、1つの連続したアイテムになります(つまり、アイテム内に分離するドットはありません)。例えば
.....
.#.#.
.....
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
出力は改行で終了する必要があります。
これはコードゴルフです。最短のコードが勝つかもしれません。
追加のテストケース
編集:これはユニコードを含んでいたが、これは花壇では許可されておらず、あまりにも現代的である。これは修正されました。ごめんなさい。
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
\@そして@/、例えば..彼らは永遠に西を指すようにバインドされていますか?