Taman Programmer
Menjadi pengembang perangkat lunak profesional, Anda tidak bisa mengambil risiko mengekspos diri terhadap sinar matahari non-artifisial yang keras, tetapi Anda juga memiliki titik lemah untuk bunga, dan ingin menjaga taman Anda dalam kondisi yang baik sepanjang tahun.
Untuk tujuan ini, seorang tukang kebun disewa setiap bulan untuk merapikan petak bunga di kaki rumah Anda. Namun Anda perlu memastikan tukang kebun melakukan pekerjaannya dengan benar, dan mencari pembayaran yang sesuai untuk rekan kerja yang bekerja keras. Secara alami solusi perangkat lunak adalah yang terbaik.
Memasukkan
Program Anda akan diumpankan input yang menggambarkan petak bunga seperti yang terlihat saat ini, dan detail item yang perlu dihapus. Program ini harus menampilkan taman tanpa kekacauan, dan mencetak rincian upah tukang kebun. Input dapat berupa dari STDIN, atau sebagai argumen baris perintah tunggal.
Baris input pertama adalah format
width height unwanted_item_type_count
di mana widthlebar petak bunga, heightadalah tinggi petak bunga (keduanya dalam karakter ASCII), dan unwanted_item_type_countmemberi tahu Anda berapa banyak garis akan mengikuti yang berisi deskripsi jenis item yang akan dihapus dari kebun.
Setiap baris untuk setiap jenis item yang tidak diinginkan adalah format
width height string_representation name fee_per_item
di mana widthlebar item, heightadalah ketinggian item (baik dalam karakter ASCII), string_representationadalah representasi string dari item tanpa jeda baris, nameadalah pengidentifikasi untuk jenis item (spasi akan diganti dengan garis bawah), dan fee_per_itemadalah berapa banyak tukang kebun harus dibayar untuk menghilangkan setiap jenis barang.
Sebagai contoh
3 2 .R.\|/ rouge_flower 3
Merupakan jenis item nama rouge_flower, yang biaya 3 untuk dihapus, dan terlihat seperti ini:
.R.
\|/
Item tidak akan berisi spasi, dan tidak ada item yang memiliki batas yang seluruhnya terdiri dari titik-titik, dan representasi string juga akan menjadi ukuran yang tepat seperti yang dijelaskan. Karenanya, semua yang berikut ini adalah input yang tidak valid:
3 1 ( ) space 0
1 1 . dot 0
2 1 .! bang 0
3 2 .@.\|/. plant 0
Perhatikan bahwa 0 adalah biaya yang valid (biaya akan selalu bilangan bulat lebih besar dari -1).
Perhatikan juga bahwa petak bunga sebagian besar terdiri dari titik ( .) daripada spasi, dan Anda dapat menggunakan spasi dengan aman sebagai batasan untuk semua input. Petak bunga selalu dibatasi oleh titik-titik itu sendiri.
Setelah jenis item yang tidak diinginkan dicantumkan, maka muncul representasi ASCII dari petak bunga dengan lebar dan tinggi tertentu.
Keluaran
Outputnya harus STDOUT, atau alternatif yang sesuai jika bahasa Anda tidak mendukungnya.
Output dimulai dengan print-out dari petak bunga, tetapi dengan semua item yang tidak diinginkan dihapus (diganti dengan titik-titik), sehingga Anda dapat melihat bagaimana seharusnya muncul dan memeriksa tukang kebun telah melakukan tugasnya. Setiap item di petak bunga akan dikelilingi oleh titik persegi panjang, dan akan menjadi item yang bersebelahan (yaitu tidak akan ada titik pemisah di dalam item). Sebagai contoh
.....
.#.#.
.....
menunjukkan 2 item terpisah
.....
.\@/.
.....
menunjukkan 1 item
......
.#....
....|.
....|.
.o--/.
......
tidak valid, karena sementara batu (#) dapat dicocokkan, ular (Anda tidak bisa mengatakan itu adalah ular?) tidak bisa karena batu itu mengganggu persyaratan titik yang mengelilingi.
...
\@.
...
Ini juga tidak valid, karena siput berada di tepi petak bunga, dan ujung harus selalu dibatasi oleh titik-titik dalam input yang valid.
Setelah ini, harus ada daftar setiap jenis barang yang tidak diinginkan, memberikan perhitungan, biaya per item, dan biaya untuk semua item (jumlah * biaya per item), dalam format:
<count> <name> at <cost_per_item> costs <cost>
Setelah ini, harus ada satu baris menghasilkan total biaya (jumlah biaya untuk item yang tidak diinginkan):
total cost <total_cost>
Contoh
Untuk input yang diberikan ini
25 18 3
4 2 .\/.\\// weeds 5
2 1 \@ snails 2
1 1 # stones 1
.........................
.\@/.................\@..
............\/...........
......O....\\//..^|^.....
.#...\|/.........^|^.....
..................|......
.................\|/.....
..\@.....\/...........#..
........\\//....#........
....*....................
...\|/......\/......\@/..
...........\\//..........
..................*......
.......\@/.......\|/.....
...O.....................
..\|/.......*............
.......#...\|/....\@.....
.........................
Program harus menghasilkan output ini
.........................
.\@/.....................
.........................
......O..........^|^.....
.....\|/.........^|^.....
..................|......
.................\|/.....
.........................
.........................
....*....................
...\|/..............\@/..
.........................
..................*......
.......\@/.......\|/.....
...O.....................
..\|/.......*............
...........\|/...........
.........................
3 weeds at 5 costs 15
3 snails at 2 costs 6
4 stones at 1 costs 4
total cost 25
Output harus diakhiri oleh line-break.
Ini kode-golf, semoga kode terpendek menang.
Kasing uji tambahan
Sunting: ini digunakan untuk memuat Unicode, yang tidak diizinkan di petak bunga, terlalu modern. Ini sudah diperbaiki, maaf soal itu.
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
.........................
........@................
....$..\|/...........@...
............|.......\|/..
...#.......\@/...........
.........................
.........................
......@.......@......@...
.....\|/....\\|//...\|/..
.............\|/.........
.#....................#..
.........$.......|.......
...\/.......\/..\@/..\/..
..\\//.....\\//.....\\//.
.........................
Output yang Diharapkan:
.........................
........@................
.......\|/...........@...
....................\|/..
.........................
.........................
.........................
......@..............@...
.....\|/............\|/..
.........................
.........................
.........................
...\/.......\/.......\/..
..\\//.....\\//.....\\//.
.........................
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
\@dan @/misalnya .. Atau apakah mereka terikat untuk menunjuk ke barat selamanya?