โปรแกรมเมอร์ของการ์เด้น
ในฐานะนักพัฒนาซอฟต์แวร์มืออาชีพคุณไม่สามารถเสี่ยงที่จะเปิดเผยตัวคุณเองต่อแสงที่ไม่ใช้แสงจากดวงอาทิตย์ แต่คุณมีจุดอ่อนสำหรับดอกไม้และต้องการให้สวนของคุณอยู่ในสภาพดีตลอดปี
ด้วยเหตุนี้จึงมีการว่าจ้างนักทำสวนในแต่ละเดือนเพื่อจัดระเบียบสวนดอกไม้ที่เชิงบ้านของคุณ อย่างไรก็ตามคุณต้องแน่ใจว่าคนสวนกำลังทำงานของเขาอย่างถูกต้องและหาเงินที่เหมาะสมสำหรับเพื่อนที่ทำงานหนัก โดยธรรมชาติแล้วโซลูชันซอฟต์แวร์ที่ดีที่สุด
อินพุต
โปรแกรมของคุณจะได้รับการป้อนข้อมูลป้อนดอกไม้ที่ปรากฏในปัจจุบันและรายละเอียดของรายการที่ต้องลบออก โปรแกรมจะต้องส่งออกสวนที่ปราศจากความยุ่งเหยิงและพิมพ์รายละเอียดของชาวสวนจ่าย อินพุตอาจมาจาก STDIN หรือเป็นอาร์กิวเมนต์บรรทัดคำสั่งเดียว
บรรทัดแรกของการป้อนข้อมูลเป็นรูปแบบ
width height unwanted_item_type_count
โดยที่widthความกว้างของ flowerbed heightคือความสูงของ flowerbed (ทั้งในตัวอักษร 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
แสดงประเภทรายการชื่อrouge_flowerซึ่งมีค่าใช้จ่าย 3 ในการลบและมีลักษณะดังนี้:
.R.
\|/
รายการจะไม่มีช่องว่างและไม่มีรายการใดอาจมีเส้นขอบที่ประกอบด้วยจุดทั้งหมดและการแทนสตริงจะเป็นขนาดที่แน่นอนที่อธิบายไว้ ดังนั้นทั้งหมดต่อไปนี้เป็นอินพุตที่ไม่ถูกต้อง:
3 1 ( ) space 0
1 1 . dot 0
2 1 .! bang 0
3 2 .@.\|/. plant 0
โปรดทราบว่า 0 เป็นค่าธรรมเนียมที่ถูกต้อง (ค่าธรรมเนียมจะเป็นจำนวนเต็มมากกว่า -1 เสมอ)
โปรดทราบว่าส่วนดอกไม้นั้นประกอบด้วยจุด ( .) มากกว่าช่องว่างและคุณสามารถใช้ช่องว่างเป็นช่องว่างสำหรับอินพุตทั้งหมดได้อย่างปลอดภัย ดอกไม้มักถูกล้อมรอบด้วยจุดต่างๆเสมอ
หลังจากประเภทรายการที่ไม่พึงประสงค์มีการระบุไว้แล้วการแสดง ASCII ของ flowerbed ของความกว้างและความสูงที่กำหนด
เอาท์พุต
ผลลัพธ์ควรเป็น STDOUT หรือทางเลือกอื่นที่เหมาะสมหากภาษาของคุณไม่รองรับ
เอาท์พุทเริ่มต้นด้วยการพิมพ์ออกมาจาก flowerbed แต่มีรายการที่ไม่พึงประสงค์ทั้งหมดออก (แทนที่ด้วยจุด) เพื่อให้คุณสามารถดูว่ามันควรจะปรากฏขึ้นและตรวจสอบสวนได้ทำงาน แต่ละรายการใน flowerbed จะถูกล้อมรอบด้วยสี่เหลี่ยมของจุดและจะเป็นรายการที่ต่อเนื่องกัน (เช่นจะไม่มีจุดแยกอยู่ภายในรายการ) ตัวอย่างเช่น
.....
.#.#.
.....
แสดง 2 รายการแยกกัน
.....
.\@/.
.....
แสดง 1 รายการ
......
.#....
....|.
....|.
.o--/.
......
ไม่ถูกต้องเนื่องจากหิน (#) สามารถจับคู่ได้งู (คุณไม่สามารถบอกได้ว่ามันเป็นงู?) ไม่สามารถทำได้เพราะหินนั้นรบกวนการล้อมรอบจุดที่ต้องการ
...
\@.
...
นอกจากนี้ยังไม่ถูกต้องเนื่องจากหอยทากอยู่บนขอบของ flowerbed และขอบจะต้องล้อมรอบด้วยจุดในอินพุตที่ถูกต้อง
หลังจากนี้ควรมีรายชื่อของรายการที่ไม่ต้องการแต่ละประเภทให้นับต้นทุนต่อรายการและต้นทุนสำหรับรายการทั้งหมด (นับ * ต้นทุนต่อรายการ) ในรูปแบบ:
<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
\@และ@/ยกตัวอย่าง .. หรือว่าพวกมันจะชี้ไปทางทิศตะวันตกตลอดไป?