ลองนึกภาพสถานการณ์ต่อไปนี้: คุณกำลังเล่นเรือรบกับเพื่อน แต่ตัดสินใจที่จะโกง แทนที่จะย้ายเรือหลังจากที่เขายิงจุดที่เรือของคุณเคยเป็นคุณตัดสินใจที่จะไม่วางเรือใด ๆ เลย คุณบอกเขาว่าทุกช็อตของเขาพลาดไปจนกว่าจะไม่สามารถวางเรือในลักษณะนี้ได้
คุณต้องเขียนฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบที่ใช้เวลา 3 ข้อโต้แย้ง: ขนาดฟิลด์รายการจำนวนขนาดของเรือและรายการของภาพ
สนามรบ
หนึ่งในพารามิเตอร์ที่กำหนดคือขนาดกระดาน สนามรบเป็นรูปสี่เหลี่ยมจัตุรัสของเซลล์และพารามิเตอร์ที่กำหนดเป็นเพียงด้านเดียวของจัตุรัส
ตัวอย่างเช่นต่อไปนี้เป็นบอร์ดขนาด 5
พิกัดบนฟิลด์ถูกระบุเป็นสตริง 2 องค์ประกอบ: ตัวอักษรตามด้วยตัวเลข คุณสามารถพึ่งพาตัวอักษรในบางกรณี
ตัวอักษรระบุคอลัมน์ตัวเลขระบุแถวของเซลล์ (1 ดัชนี) "D2"
ยกตัวอย่างเช่นในภาพข้างบนเซลล์ที่ไฮไลต์คือการแสดงโดย
เนื่องจากมีเพียง 26 ตัวอักษรสนามจึงไม่สามารถมีขนาดใหญ่กว่า 26x26
เรือ
เรือเป็นเส้นตรงที่มี 1 บล็อกขึ้นไป จำนวนเรือถูกระบุในรายการโดยที่องค์ประกอบแรกคือจำนวนเรือ 1 เซลล์สอง - จากเรือ 2 เซลล์และอื่น ๆ
ตัวอย่างเช่นรายการ[4,1,2,0,1]
จะสร้างชุดต่อไปนี้:
เมื่อวางไว้ในสนามรบเรือไม่สามารถตัดกันหรือแม้แต่แตะต้องกัน ไม่แม้แต่กับมุม อย่างไรก็ตามพวกเขาสามารถสัมผัสขอบของสนาม
ด้านล่างคุณสามารถดูตัวอย่างของการจัดส่งที่ถูกต้อง:
คุณสามารถสันนิษฐานได้ว่าสำหรับเรือที่ได้รับนั้นจะมีตำแหน่งบนกระดานเปล่าตามขนาดที่กำหนด
เอาท์พุต
หากตำแหน่งของเรือดังกล่าวมีอยู่คุณจะต้องแสดงผลลัพธ์ใด ๆ
โปรแกรมจะต้องส่งออกเมทริกซ์ที่คั่นด้วยการขึ้นบรรทัดใหม่ของอักขระ ASCII ทั้ง 3 ประเภท - หนึ่งเพื่อแสดงเซลล์ว่างเปล่าหนึ่ง - ชิ้นส่วนเรือและหนึ่ง - เซลล์ทำเครื่องหมายว่า "พลาด" ไม่ควรส่งออกอักขระอื่น
ตัวอย่างเช่น,
ZZ@Z
\@@Z
@\\Z
\Z\\
(ในตัวอย่างนี้ฉันกำหนด@
ให้เป็นเซลล์ว่างเปล่าเป็นเซลล์\
"พลาด" และZ
เป็นชิ้นส่วนจัดส่ง)
หากไม่มีตำแหน่งดังกล่าวโปรแกรม / ฟังก์ชั่นควรกลับมาโดยไม่แสดงผลใด ๆ
อินพุต
หากคุณตัดสินใจที่จะสร้างโปรแกรมเต็มรูปแบบขึ้นอยู่กับว่าคุณระบุว่ารายการนั้นป้อนเข้ามาอย่างไรบางรายการอาจผ่านข้อโต้แย้งบางรายการผ่าน stdin
นี่คือรหัส - กอล์ฟจำนวนอักขระต่ำสุดชนะ
ตัวอย่างโซลูชันที่ไม่เหมาะกับการเล่นกอล์ฟสามารถดูได้ที่นี่
คอมไพล์ด้วย-std=c99
อาร์กิวเมนต์แรกคือขนาดของบอร์ดส่วนอาร์กิวเมนต์อื่นคือขนาดของเรือ รายการภาพที่คั่นด้วยการขึ้นบรรทัดใหม่ถูกกำหนดไว้บน stdin ตัวอย่าง:
./a 4 1 1 1 <<< $'A2\nA4\nB3\nC3\nC4\D4'
10x10
กับชุด4,3,2,1
เรือ
26x26
? ผมร่างแก้ปัญหาบนพื้นฐานของ regexps และเรียกซ้ำและจะได้รับช้ามาก =6x6
ใช้ไม่ได้สำหรับเขตข้อมูลมากกว่า ไม่ว่าฉันจะทำอะไรที่โง่มากหรือขาดคำตอบก็หมายความว่าคนอื่นก็ไม่ประสบความสำเร็จ