Programcı Bahçesi
Profesyonel bir yazılım geliştiricisi olarak, kendinizi güneşin sert yapay olmayan ışığına maruz bırakma riski taşıyamazsınız, ancak aynı zamanda çiçekler için yumuşak bir noktaya sahip olursunuz ve bahçenizi tüm yıl boyunca iyi durumda tutmak istersiniz.
Bu amaçla, evinizin dibindeki çiçek tarhını toplamak için her ay bir bahçıvan kiralanır. Ancak bahçıvanın işini düzgün bir şekilde yaptığından emin olmanız ve çalışkan adam için uygun bir ödeme yapmanız gerekir. Doğal olarak bir yazılım çözümü en iyisidir.
Giriş
Programınız, çiçek tarhını güncel göründüğü haliyle ve kaldırılması gereken öğelerin ayrıntılarını tanımlayan girdi ile beslenecektir. Program, dağınıklıktan yoksun bahçe çıktısını almalı ve bahçıvanların ödemesinin bir dökümünü yazdırmalıdır. Giriş, STDIN'den veya tek bir komut satırı bağımsız değişkeni olarak olabilir.
İlk girdi satırı biçimindedir
width height unwanted_item_type_count
widthçiçek tarhının genişliği nerede , çiçek tarhının heightyüksekliği (her ikisi de ASCII karakterlerinde) ve unwanted_item_type_countbahçeden kaldırılacak bir tür öğenin açıklamasını içeren kaç satır izleyeceğini size söyler.
İstenmeyen her öğe türü için her satır formattadır
width height string_representation name fee_per_item
burada widthürünün genişliği, heightürünün yükseltir (ASCII karakter hem de), string_representationsatır sonları ürünün dize gösterimidir, name(boşluk çizgi ile değiştirilir) ürünün tipi için bir tanımlayıcı ve fee_per_itembahçıvanın her bir öğenin çıkarılması için ne kadar ödenmesi gerektiğidir.
Örneğin
3 2 .R.\|/ rouge_flower 3
Kaldırılması rouge_flower3 maliyeti olan bir öğe türünü temsil eder ve şöyle görünür:
.R.
\|/
Öğeler boşluk içermeyecek ve hiçbir öğenin tamamen noktalardan oluşan bir sınırı olamaz ve dize temsili de açıklanan tam boyutta olacaktır. Bu nedenle, aşağıdakilerin tümü geçersiz girdilerdir:
3 1 ( ) space 0
1 1 . dot 0
2 1 .! bang 0
3 2 .@.\|/. plant 0
Ancak 0'ın geçerli bir ücret olduğunu unutmayın (ücretler her zaman -1'den büyük tamsayılar olacaktır).
Çiçek tarhının ağırlıklı olarak .boşluklardan ziyade noktalardan ( ) oluştuğunu ve beyaz boşlukları tüm girişler için sınırlama olarak güvenle kullanabileceğinizi unutmayın. Çiçeklik her zaman noktaların kendisi ile sınırlıdır.
İstenmeyen öğe türleri listelendikten sonra, verilen genişlik ve yükseklikte çiçek tarhının ASCII temsili gelir.
Çıktı
Çıktı STDOUT'a veya diliniz desteklemiyorsa uygun bir alternatif olmalıdır.
Çıktı, çiçek tarhının bir çıktısıyla başlar, ancak tüm istenmeyen öğeler çıkarıldığında (noktalarla değiştirilir), böylece nasıl görünmesi gerektiğini görebilir ve bahçıvanın işini yaptığını kontrol edebilirsiniz. Çiçek tarhındaki her bir öğe bir nokta dikdörtgeni ile çevrelenecek ve bir bitişik öğe olacaktır (yani , öğenin içinde ayırma noktası olmayacaktır ). Örneğin
.....
.#.#.
.....
2 ayrı ürün gösterir
.....
.\@/.
.....
1 öğe gösterir
......
.#....
....|.
....|.
.o--/.
......
Taş (#) eşleştirilebilirken, yılan (yılan olduğunu söyleyemez miydiniz?) geçersizdir, çünkü taş noktaların gerekli çevresini engeller.
...
\@.
...
Salyangoz çiçek yatağının kenarında olduğu için ve kenar her zaman geçerli bir girişteki noktalarla sınırlandırılmalıdır.
Bundan sonra, sayımı, öğe başına maliyeti ve tüm öğelerin maliyetlerini (sayı * öğe başına maliyet) veren her istenmeyen öğe türünün bir biçimde listelenmesi gerekir:
<count> <name> at <cost_per_item> costs <cost>
Bundan sonra, toplam maliyeti veren (istenmeyen öğelerin maliyetlerinin toplamı) tek bir satır olmalıdır:
total cost <total_cost>
Misal
Verilen bu girdi için
25 18 3
4 2 .\/.\\// weeds 5
2 1 \@ snails 2
1 1 # stones 1
.........................
.\@/.................\@..
............\/...........
......O....\\//..^|^.....
.#...\|/.........^|^.....
..................|......
.................\|/.....
..\@.....\/...........#..
........\\//....#........
....*....................
...\|/......\/......\@/..
...........\\//..........
..................*......
.......\@/.......\|/.....
...O.....................
..\|/.......*............
.......#...\|/....\@.....
.........................
Program bu çıktıyı üretmelidir
.........................
.\@/.....................
.........................
......O..........^|^.....
.....\|/.........^|^.....
..................|......
.................\|/.....
.........................
.........................
....*....................
...\|/..............\@/..
.........................
..................*......
.......\@/.......\|/.....
...O.....................
..\|/.......*............
...........\|/...........
.........................
3 weeds at 5 costs 15
3 snails at 2 costs 6
4 stones at 1 costs 4
total cost 25
Çıkış gereken bir satır kesintisi ile sonlandırılabilir.
Bu kod golf, en kısa kod kazanabilir.
Ek test durumu
Düzenleme: Bu, çiçek tarhında izin verilmeyen çok modern olan Unicode'u içeriyordu. Bu düzeltildi, üzgünüm.
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
.........................
........@................
....$..\|/...........@...
............|.......\|/..
...#.......\@/...........
.........................
.........................
......@.......@......@...
.....\|/....\\|//...\|/..
.............\|/.........
.#....................#..
.........$.......|.......
...\/.......\/..\@/..\/..
..\\//.....\\//.....\\//.
.........................
Beklenen çıktı:
.........................
........@................
.......\|/...........@...
....................\|/..
.........................
.........................
.........................
......@..............@...
.....\|/............\|/..
.........................
.........................
.........................
...\/.......\/.......\/..
..\\//.....\\//.....\\//.
.........................
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
\@ve @/mesela .. Yoksa ebediyen batıya mı işaret ediyorlar?