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 width
lebar petak bunga, height
adalah tinggi petak bunga (keduanya dalam karakter ASCII), dan unwanted_item_type_count
memberi 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 width
lebar item, height
adalah ketinggian item (baik dalam karakter ASCII), string_representation
adalah representasi string dari item tanpa jeda baris, name
adalah pengidentifikasi untuk jenis item (spasi akan diganti dengan garis bawah), dan fee_per_item
adalah 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?Jawaban:
Perl - 636
Pasti ada beberapa golf lagi yang bisa dilakukan. Dan mungkin cara yang lebih baik untuk melakukannya juga.
635 karakter +1 untuk
-C
bendera untuk menangani euro.Jika Anda memiliki input yang tersimpan di
input.txt
dalamnya, Anda dapat menjalankannya dengan:Ini adalah versi yang sudah dihapus. Saya membaca dan menambahkan beberapa komentar untuk membantu menjelaskan berbagai hal. Mungkin saya akan membuat nama variabel lebih mudah dibaca kapan-kapan. Mungkin ada beberapa kasus tepi yang tidak bekerja dengan ini, tetapi setidaknya berfungsi dengan contoh.
Jangan ragu untuk menyarankan peningkatan!
sumber
-C
bendera sebelum ini. Saya akan membiarkannya di sana agar tetap kompatibel karena perbedaannya hanya 1 karakter.Python 3, 459 byte
Mengasumsikan input akan diberikan sebagai daftar string.
sumber
~H
triknya; Saya tidak dapat menguji ini sekarang, tetapi saya akan mencoba melakukannya hari ini.ValueError: not enough values to unpack (expected 3, got 1)
, python 3.6.6); dapatkah Anda memberikan tautan TIO atau deskripsi tentang cara menjalankannya. Saya pikir itu mungkin membengkokkan aturan dengan mengasumsikan input semua pada satu baris, tetapi saya tidak sepenuhnya jelas tentang hal itu dalam pertanyaan jadi saya tidak akan mengeluh.