厌倦了对微小家畜的实验,诺贝尔奖获得者ErwinSchrödinger决定寻找最接近的激光,然后将其发射到物体上。因为……科学!
描述
您将得到两分,激光通过和激光束的大小,你必须确定激光束必须走了,可能已经走了,不能去了。
激光束可以是水平,垂直或对角线。对于1号激光束,它们分别如下所示:
# #
# #
##### # #
# #
# #
对角激光束也可以翻转。2号激光束看起来像这样:
### ##
##### ### ###
##### ### ###
##### ### ###
### ##
通常,要获得大小为(n)的激光束,只需获取大小为(n-1)的激光束,并在两侧添加大小为(1)的激光束。作为最后一个示例,这是所有大小为3的激光束,在同一“面板”上显示:
###.....#####.....##
####....#####....###
#####...#####...####
.#####..#####..#####
..#####.#####.#####.
...###############..
....#############...
.....###########....
####################
####################
####################
####################
####################
.....###########....
....#############...
...###############..
..#####.#####.#####.
.#####..#####..#####
#####...#####...####
####....#####....###
此“木板”的尺寸始终为20x20(以字符为单位)。
输入项
您的程序将获得五个整数作为输入。它们依次是x 1,y 1,x 2,y 2和激光束的大小。必须严格按照该顺序进行。如果愿意,可以将有序(x,y)对作为存储两个值的数组,元组,列表或其他内置数据类型。
作为输入给出的两个点都将在电路板上,并且保证它们是不同的(即,两个点永远不会相同)。激光束的大小必定为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像素。