เบื่อหน่ายกับการทดลองกับสัตว์เลี้ยงตัวเล็ก ๆ Erwin Schrödingerที่ได้รับรางวัลโนเบลได้ตัดสินใจที่จะหาเลเซอร์ที่ใกล้ที่สุดแล้วยิงมันที่สิ่งของแทน เพราะ ... วิทยาศาสตร์!
ลักษณะ
คุณจะได้รับสองจุดที่เลเซอร์ผ่านและขนาดของลำแสงเลเซอร์และคุณจะต้องตรวจสอบที่ลำแสงเลเซอร์จะต้องได้ไปจะได้หายไปและไม่สามารถมีหายไป
ลำแสงเลเซอร์สามารถเป็นแนวนอนแนวตั้งหรือแนวทแยง สำหรับลำแสงเลเซอร์ขนาด 1 พวกมันมีลักษณะดังนี้:
# #
# #
##### # #
# #
# #
ลำแสงเลเซอร์ทแยงมุมสามารถพลิกได้ ลำแสงเลเซอร์ขนาด 2 มีลักษณะดังนี้:
### ##
##### ### ###
##### ### ###
##### ### ###
### ##
โดยทั่วไปเพื่อให้ได้ลำแสงเลเซอร์ขนาด (n) เพียงนำลำแสงเลเซอร์ขนาด (n-1) และเพิ่มลำแสงเลเซอร์ขนาด (1) ทั้งสองด้าน เป็นตัวอย่างขั้นสุดท้ายต่อไปนี้เป็นลำแสงเลเซอร์ที่เป็นไปได้ขนาด 3 ทั้งหมดที่แสดงบน "บอร์ด" เดียวกัน:
###.....#####.....##
####....#####....###
#####...#####...####
.#####..#####..#####
..#####.#####.#####.
...###############..
....#############...
.....###########....
####################
####################
####################
####################
####################
.....###########....
....#############...
...###############..
..#####.#####.#####.
.#####..#####..#####
#####...#####...####
####....#####....###
"บอร์ด" นี้จะมีขนาด 20x20 (เป็นตัวอักษร)
อินพุต
โปรแกรมของคุณจะได้รับห้าจำนวนเต็มเป็นอินพุท ตามลำดับ x 1 , y 1 , x 2 , y 2และขนาดของลำแสงเลเซอร์ พวกเขาจะต้องดำเนินการอย่างถูกต้องในลำดับที่ หากคุณต้องการคุณอาจใช้คู่ที่สั่งซื้อ (x, y) เป็นอาร์เรย์ tuple รายการหรือชนิดข้อมูลในตัวอื่น ๆ ที่เก็บค่าสองค่า
ทั้งสองจุดที่ให้เป็นอินพุตจะอยู่ในบอร์ดและรับประกันว่าจะชัดเจน (เช่นสองคะแนนจะไม่เหมือนเดิม) 1 ≤ size < 20ขนาดของลำแสงเลเซอร์ที่ถูกผูกไว้ จะมีลำแสงเลเซอร์ที่เป็นไปได้อย่างน้อยหนึ่งจุดที่ลอดผ่านจุดทั้งสอง
เอาท์พุต
โปรแกรมของคุณจะต้องส่งออกตาราง 20x20 ของตัวละครต่อไปนี้:
#หากลำแสงเลเซอร์ที่เป็นไปได้ทุกจุดที่ผ่านจุดสองจุดนั้นผ่านจุดนี้ด้วย.หากไม่มีลำแสงเลเซอร์ที่ผ่านจุดสองจุดและจุดนี้?ถ้ามีลำแสงเลเซอร์ที่เป็นไปได้บางส่วน แต่ไม่ใช่ทั้งหมดผ่านจุดนี้Xหากนี่เป็นหนึ่งในสองจุดอินพุตดั้งเดิม (นี่จะแทนที่#)
กรณีทดสอบ
7, 7, 11, 3, 1
..............#.....
.............#......
............#.......
...........X........
..........#.........
.........#..........
........#...........
.......X............
......#.............
.....#..............
....#...............
...#................
..#.................
.#..................
#...................
....................
....................
....................
....................
....................
18, 18, 1, 1, 2
#??.................
?X??................
??#??...............
.??#??..............
..??#??.............
...??#??............
....??#??...........
.....??#??..........
......??#??.........
.......??#??........
........??#??.......
.........??#??......
..........??#??.....
...........??#??....
............??#??...
.............??#??..
..............??#??.
...............??#??
................??X?
.................??#
10, 10, 11, 10, 3
?????..????????..???
??????.????????.????
????????????????????
????????????????????
.???????????????????
..??????????????????
????????????????????
????????????????????
????????????????????
????????????????????
??????????XX????????
????????????????????
????????????????????
????????????????????
????????????????????
..??????????????????
.???????????????????
????????????????????
????????????????????
??????.????????.????
3, 3, 8, 10, 4
??????????..........
??????????..........
??????????..........
???X??????..........
???##?????..........
???###????..........
????###????.........
.????###????........
..????###????.......
..?????##?????......
..??????X??????.....
..??????????????....
..???????????????...
..????????????????..
..?????????????????.
..??????????????????
..??????????????????
..????????.?????????
..????????..????????
..????????...???????
กรณีทดสอบถูกสร้างขึ้นด้วยสคริปต์ Ruby ต่อไปนี้ซึ่งอยู่ภายใน Stack Snippet เพื่อประหยัดพื้นที่ในแนวตั้ง
กฎระเบียบ
โปรแกรมของคุณจะต้องสามารถแก้ไขกรณีทดสอบแต่ละรายการในเวลาไม่เกิน 30 วินาที (ในเครื่องที่เหมาะสม) นี่คือการตรวจสุขภาพจิตที่มากขึ้นเนื่องจากโปรแกรมการทดสอบ Ruby ของฉันแก้ไขกรณีทดสอบทั้งหมดใกล้ทันที
นี่คือรหัสกอล์ฟดังนั้นทางออกที่สั้นที่สุดชนะ
2 * size - 1ความกว้างพิกเซลคือ ขนาด 1 คือ 1 พิกเซลขนาด 2 คือ 3 พิกเซลขนาด 3 คือ 5 พิกเซล (ดูตัวอย่างด้านบน) ขนาด 4 คือ 7 พิกเซล