พื้นหลัง
ความท้าทายนี้เป็นเกียรติของapsillersผู้ชนะรางวัลNot as simple ตามหมวดหมู่ Best of PPCG 2016 ด้วยความท้าทายกล่องดนตรี 4 โน้ตของฉันสามารถเล่นเพลงนั้นได้หรือไม่? ขอแสดงความยินดี!
ในหน้า "เกี่ยวกับฉัน" ผู้ใช้รายนี้มีตัวจำลองที่ประณีตมากสำหรับออโตเมติกเซลเกมแห่งชีวิต (อย่างจริงจังไปตรวจสอบออก) ในทางกลับกันคำว่าaspilleraเป็นภาษาสเปนสำหรับ "ลูกศรเรืองแสง " จากข้อเท็จจริงเหล่านี้ความท้าทายนี้เกี่ยวกับ arrowslits ใน Game of Life
เกมแห่ง arrowslits ชีวิต
กอลเราจะเป็นตัวแทนของลูกศรโดยเครื่องร่อนและผนังโดยลำดับของบล็อก ร่อนเดี่ยวเข้าใกล้กำแพงจากด้านบนและพยายามที่จะบินผ่านช่องว่างในกำแพง งานของคุณคือการตรวจสอบว่าเครื่องร่อนผ่านลูกศรไฟหรือชนเข้ากับผนัง
อินพุต
อินพุตของคุณคือตารางบิตซึ่งแสดงถึงการกำหนดค่า GoL คุณสามารถนำไปใช้ในรูปแบบที่สมเหตุสมผล (สตริงหลายบรรทัดของอักขระ ASCII ที่พิมพ์ได้สองรายการ, รายการสตริง, อาร์เรย์ 2D ของจำนวนเต็ม, อาร์เรย์ 2D ของ booleans ฯลฯ ) เพื่อความชัดเจนฉันจะใช้สตริงหลายบรรทัดของตัวละคร.#
ดังต่อไปนี้
อินพุตรับประกันว่ามีคุณสมบัติหลายอย่าง ครั้งแรกที่ความสูงของมันคือ2NสำหรับบางN ≥ 6และความกว้างอย่างน้อย2 คืน + 2 การป้อนข้อมูลจะเป็นของทั้งหมด.
ยกเว้นว่าที่ใดที่หนึ่งในสามแถวบนสุดคือเครื่องร่อนและในแถวกลางสองแถวนั้นจะมีกำแพงของบล็อก เครื่องร่อนจะมุ่งหน้าไปทางตะวันตกเฉียงใต้หรือตะวันออกเฉียงใต้และตำแหน่งของมันจะเป็นเช่นนั้นหากผนังถูกถอดออกมันจะไม่ผ่านขอบด้านข้างก่อนที่จะถึงขอบด้านล่าง (แต่อาจถึงมุมหนึ่งของตาราง) เครื่องร่อนจะถูกแยกออกจากต้นขอบซ้ายและขวาโดยขั้นตอนอย่างน้อยหนึ่งของ.
s สามารถอยู่ในช่วงใดก็ได้
ผนังประกอบด้วยบล็อกซึ่งจะถูกแยกออกจากกันโดยหนึ่งคอลัมน์.
s ยกเว้นในสถานที่แห่งหนึ่งที่พวกเขาจะได้รับการแยกออกจากกันอย่างน้อยสองคอลัมน์ของ.
s เช่นเดียวกับเครื่องร่อนบล็อกซ้ายและขวาสุดจะถูกแยกออกจากขอบด้วยขั้นตอน.
เดียว จะมีอย่างน้อยหนึ่งบล็อคที่ขอบด้านซ้ายและหนึ่งบล็อคที่ขอบด้านขวา
นี่คือตัวอย่างของตารางอินพุตที่ถูกต้อง:
....#......................
..#.#......................
...##......................
...........................
...........................
...........................
.##.##............##.##.##.
.##.##............##.##.##.
...........................
...........................
...........................
...........................
...........................
...........................
เอาท์พุต
ตามที่ระบุไว้งานของคุณคือการตรวจสอบว่าเครื่องร่อนชนเข้ากับผนังหรือทำให้ผ่านไปทางทิศใต้ สำหรับวัตถุประสงค์ของการท้าทายนี้การชนจะเกิดขึ้นหากการกำหนดค่าไม่ประกอบด้วยเครื่องร่อนเดี่ยวและกำแพงบล็อกโดยไม่คำนึงว่าจะเกิดอะไรขึ้นในภายหลังในการจำลอง แผนภาพต่อไปนี้แสดงช่องว่างที่เล็กที่สุดที่เครื่องร่อนตะวันออกเฉียงใต้สามารถผ่านได้โดยไม่ชนในสองขั้นตอนที่แตกต่างกัน (เงื่อนไขสำหรับเครื่องร่อนตะวันตกเฉียงใต้คือสมมาตร)
...#...........
.#.#...........
..##...........
...............
...............
##...........##
##...........##
...#...........
....#..........
..###..........
...............
...............
##...........##
##...........##
หากเครื่องร่อนบินผ่านกำแพงคุณจะต้องส่งค่าความจริงออกมาและเป็นค่าที่ผิดพลาด สำหรับตัวอย่างข้างต้นผลลัพธ์ที่ถูกต้องนั้นเป็นเท็จเนื่องจากเครื่องร่อนจะชนเข้ากับส่วนด้านซ้ายของกำแพง
สำหรับจุดประสงค์ของการท้าทายนี้คุณสามารถสันนิษฐานได้ว่าถ้าคุณจำลอง GoL ในอินพุตสำหรับขั้นตอน2 * (ความสูง - 3)เครื่องร่อนจะอยู่ที่แถวล่างสุดในตำแหน่งที่คาดหวังและกำแพงจะสมบูรณ์ .
กฎและการให้คะแนน
คุณสามารถเขียนโปรแกรมเต็มรูปแบบหรือฟังก์ชั่น จำนวนไบต์ต่ำสุดชนะ
กรณีทดสอบ
ฉันได้รวบรวมกรณีทดสอบไว้ในที่เก็บ GitHubเนื่องจากมีขนาดค่อนข้างใหญ่ นี่คือลิงค์ไปยังไฟล์แต่ละไฟล์: