เรื่องย่อ : Jimmy หายไป; เราต้องไปหาเขา เราควรแยกกัน
เรื่องย่อ : Jimmy ตายไปแล้ว
แต่นักแสดงของเราไม่รู้เช่นนั้นดังนั้นพวกเขาจึงต้องค้นหาพื้นที่ทั้งหมดต่อไป มีตาราง N คอลัมน์ x M แถว (1 <= M, N <= 256) ตารางของเซลล์ซึ่งระบุว่าเป็น "S" สำหรับจุดเริ่มต้น " สำหรับพื้นที่เปิดโล่งหรือ "#" สำหรับสิ่งกีดขวาง นี่คือแผนที่
มีอยู่ 0 <= p <= 26 มีcostars , 0 <= Q <= 26 แถมและ 1 ดาว ทุกคนเริ่มต้นในเซลล์ที่มีเครื่องหมาย S
กฎระเบียบ
แต่ละคนมีรัศมีสายตาที่แสดงด้านล่าง:
...
.....
..@..
.....
...
ดาวฤกษ์นั้นเขียนด้วย "@" ซึ่งเป็นตัวพิมพ์ใหญ่โดยใช้ตัวพิมพ์ใหญ่เริ่มต้นด้วย "A" และส่วนที่เพิ่มเติมด้วยตัวอักษรพิมพ์เล็กเริ่มต้นด้วย "a" เริ่มแรกรัศมีการมองเห็นโดยรอบจุดเริ่มต้นจะถูกทำเครื่องหมายเป็นค้นหาแล้ว หากนี่เป็นการเปิดพื้นที่ทั้งหมดของแผนที่เกมจะสิ้นสุดลง กลับกันในลำดับต่อไปนี้ :
- แต่ละคนพร้อมกันทำให้กษัตริย์เคลื่อนไหว (ไม่ว่าจะยืนนิ่งหรือเคลื่อนที่ไปยังหนึ่งใน 8 เซลล์ใกล้เคียง)
- เซลล์ทั้งหมดในรัศมีสายตารอบ ๆ แต่ละคนจะถูกนับเป็นการค้นหา
- ถ้า costar ไม่เห็นใครเลยเธอก็ตาย หากมีคนพิเศษไม่สามารถมองเห็นคอสตาร์ดาวหรือสิ่งอื่นอย่างน้อย 2 อย่างเขาก็ตาย สิ่งเหล่านี้เกิดขึ้นพร้อมกัน - นั่นคือจะไม่มีปฏิกิริยาลูกโซ่ของการเสียชีวิตในรอบเดียว มีการตรวจสอบเงื่อนไขข้างต้นและทุกคนที่กำลังจะตายจะตายทันที
- หากพื้นที่ว่างทั้งหมดบนแผนที่ถูกค้นหาการค้นหาจะจบลง
หมายเหตุ
หลายคนสามารถอยู่ในจตุรัสเดียวกันได้ทุกเวลาและคนเหล่านี้สามารถเห็นกันได้
อุปสรรคไม่ขัดขวางการมองเห็นการเคลื่อนไหวเท่านั้น ผู้คนสามารถเห็นกันข้ามเอ่อลาวา?
พื้นที่เปิดโล่งบนแผนที่รับประกันได้ว่าจะเชื่อมต่อกันด้วยการเคลื่อนไหวของกษัตริย์
"S" เริ่มต้นนั้นยังถือว่าเป็นพื้นที่เปิดโล่งมากกว่าสิ่งกีดขวาง
การย้ายของกษัตริย์ใด ๆ ที่ลงจอดบนพื้นที่เปิดโล่งนั้นใช้ได้ ตัวอย่างเช่นการย้ายต่อไปนี้ถูกกฎหมาย:
.... ....
.@#. ---> ..#.
.#.. .#@.
.... ....
อินพุต
อินพุตจะอยู่ในรูปแบบ
N M p q
[N cols x M rows grid with characters ".", "#", and "S"]
อินพุตตัวอย่าง:
6 5 0 0
......
......
..S...
......
......
และ
9 9 1 1
S.......#
.......##
......##.
..#####..
...##....
...##....
...#.....
....#..#.
.........
p และ q คือจำนวนของ costars และ extras ตามลำดับ
เอาท์พุต
เอาท์พุทควรจะเป็นสำหรับการเปิดแต่ละครั้งการเคลื่อนไหวที่ทำด้วยทิศทางที่ระบุ
789
456
123
คำสั่งของการเคลื่อนไหวไม่สำคัญเพราะพวกเขาทั้งหมดพร้อมกัน ไม่แสดงรายการการย้ายสำหรับบุคคลนั้นเป็นเรื่องปกติและเทียบเท่ากับการย้ายเขาไปในทิศทางที่ 5 การย้ายควรจะอยู่ในรูปแบบต่อไปนี้:
@9 A2 a2 B7.
"" หมายถึงการสิ้นสุดของการเคลื่อนไหวของคุณสำหรับการเปิด
หลังจากค้นหาแผนที่แล้วบรรทัดสุดท้ายของผลลัพธ์ควรเป็นจำนวนเต็มสามจำนวนคั่นด้วยช่องว่าง: จำนวนรอบที่คุณใช้เพื่อค้นหาบอร์ดให้เสร็จสิ้นจำนวนค่าใช้จ่ายในการดำรงชีวิตและจำนวนของสิ่งอำนวยความสะดวกพิเศษ สำหรับอินพุตตัวอย่างแรก
6 5 0 0
......
......
..S...
......
......
ต่อไปนี้คือผลลัพธ์ที่ถูกต้อง:
@4.
@6.
@6.
@6.
4 0 0
หมายเหตุสุดท้าย: ดาวไม่สามารถตายได้และรับประกันว่าจะมีการเปิดพื้นที่บนแผนที่เพื่อเชื่อมต่อดังนั้นการค้นหาจะประสบความสำเร็จในที่สุด
เกณฑ์การให้คะแนน
คะแนนของคุณคือจำนวนเทิร์นทั้งหมดที่ใช้ในชุดการทดสอบเกณฑ์มาตรฐาน คุณสามารถส่งกรณีทดสอบของคุณเองพร้อมกับคำตอบของคุณ ผลรวมของจำนวนค่าครองชีพเหนือชุดมาตรฐานจะถูกใช้เป็นตัวแบ่งไทเบรกเกอร์และในกรณีที่ยังมีเน็คไทอยู่จะใช้ผลรวมของจำนวนค่าครองชีพพิเศษ
ชุดทดสอบและคอนโทรลเลอร์
ปัจจุบัน 5 แผนที่ที่ออนไลน์อยู่ในhttps://github.com/Tudwell/HorrorMovieSearchParty/ ใครก็ตามที่ส่งคำตอบอาจส่งกรณีทดสอบซึ่งฉันขอสงวนสิทธิ์ในการปฏิเสธด้วยเหตุผลใด ๆ (ถ้าฉันปฏิเสธแผนที่ของคุณด้วยเหตุผลบางอย่างคุณอาจส่งอีก) สิ่งเหล่านี้จะถูกเพิ่มเข้าไปในชุดทดสอบตามดุลยพินิจของฉัน
งูหลาม(ทดสอบใน 2.7.5)ตัวควบคุมอยู่ใน GitHub เป็น controller.py ตัวควบคุมตัวที่สองนั่นคือcontroller_disp.pyเหมือนกันยกเว้นจะแสดงเอาท์พุทกราฟิกในระหว่างการค้นหา (ต้องใช้ Pygame library)
การใช้งาน :
python controller.py <map file> <your execution line>
เช่น:
python controller.py map1.txt python solver.py map1.txt
คอนโทรลเลอร์มีเอาต์พุต (ไปยังstdinของโปรแกรม) ของฟอร์ม
Turn 1
@:2,3 A:2,3 B:2,3.
##...##
#ooo..#
ooooo..
ooooo..
ooooo..
#ooo...
##.....
###....
----------------------------------------
นี่คือหมายเลขเทิร์น (เทิร์น 1 คือก่อนที่คุณจะย้าย), รายการ '.'- ที่สิ้นสุดของนักแสดงและพิกัด x, y ของพวกเขา (อักขระบนซ้ายคือ (0,0)) ซึ่งเป็นตัวแทนของทั้งหมด คณะกรรมการและสอดคล้องกับ 40 '- ของ จากนั้นรออินพุต (จากstdoutของโปรแกรม) ของฟอร์ม
@9 A2 B7.
นี่เป็นรูปแบบเอาต์พุตที่ระบุไว้ด้านบน ตัวควบคุมจะแสดง 'o' สำหรับพื้นที่เปิดโล่งที่ถูกค้นหา '.' สำหรับพื้นที่เปิดโล่งที่ไม่ได้ถูกค้นหาและ '#' สำหรับสิ่งกีดขวาง มันมีเพียงคนที่มีชีวิตอยู่ในรายชื่อผู้คนและพิกัดของพวกเขาและติดตามกฎทั้งหมดของเกม ตัวควบคุมจะออกหากมีการพยายามย้ายที่ผิดกฎหมาย หากการเคลื่อนที่ของเทิร์นที่ระบุสิ้นสุดการค้นหาเอาต์พุตจะไม่เป็นไปตามด้านบน แทนมันเป็นของฟอร์ม
Finished in 4 turns
4 1 0
"4 1 0" ที่นี่หมายถึงเทิร์นทั้งหมด 4, 1 ที่อยู่อาศัยและ 0 ความพิเศษ คุณไม่จำเป็นต้องใช้คอนโทรลเลอร์ อย่าลังเลที่จะใช้มันหรือแก้ไขมันสำหรับรายการของคุณเอง หากคุณตัดสินใจที่จะใช้และพบปัญหาแจ้งให้เราทราบ
ขอบคุณ @githubphagocyte ที่ช่วยฉันเขียนคอนโทรลเลอร์
แก้ไข: สำหรับรายการแบบสุ่มคุณสามารถเลือกวิ่งบนแผนที่ใด ๆ เป็นคะแนนของคุณสำหรับแผนที่นั้น โปรดทราบว่าเนื่องจากข้อกำหนดการให้คะแนนคุณควรเลือกเทิร์นที่น้อยที่สุดจากนั้นเลือก costars ที่ตายแล้วน้อยที่สุดจากนั้นเลือก extras deadest ที่น้อยที่สุดสำหรับแต่ละแผนที่