불만을 품고 작은 국내 동물 실험 , 노벨상을 수상한 에르빈 슈뢰딩거는 가장 가까운 레이저를 찾을 대신 사물을 촬영하기로 결정했다. 왜냐하면 ... 과학!
기술
당신은 두 개의 레이저가 통과한다는 점과 레이저 빔의 크기를 받게됩니다, 당신은 레이저 빔이 위치를 결정해야 한다 , 갈 수 갔다, 그리고 수 없었다 갔다.
레이저 빔은 수평, 수직 또는 대각선 일 수 있습니다. 크기 1 레이저 빔의 경우 각각 다음과 같습니다.
# #
# #
##### # #
# #
# #
대각선 레이저 빔도 뒤집을 수 있습니다. 크기 2 레이저 빔은 다음과 같습니다.
### ##
##### ### ###
##### ### ###
##### ### ###
### ##
일반적으로 크기 (n)의 레이저 빔을 얻으려면 크기 (n-1)의 레이저 빔을 가져 와서 양쪽에 크기 (1)의 레이저 빔을 추가하십시오. 마지막 예로 동일한 "보드"에 표시된 크기 3의 가능한 모든 레이저 빔이 있습니다.
###.....#####.....##
####....#####....###
#####...#####...####
.#####..#####..#####
..#####.#####.#####.
...###############..
....#############...
.....###########....
####################
####################
####################
####################
####################
.....###########....
....#############...
...###############..
..#####.#####.#####.
.#####..#####..#####
#####...#####...####
####....#####....###
이 "보드"의 크기는 항상 20x20 (문자)입니다.
입력
프로그램은 5 개의 정수를 입력으로받습니다. 이들은 순서대로 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 스크립트로 생성되었습니다.
규칙
귀하의 프로그램은 30 초 이내에 (적당한 기계에서) 각 테스트 사례를 해결할 수 있어야합니다. 내 테스트 Ruby 프로그램이 모든 테스트 사례를 거의 즉각적으로 해결했기 때문에 이것은 더 건전한 점검입니다.
이것은 code-golf 이므로 가장 짧은 솔루션이 승리합니다.
2 * size - 1
입니다. 크기 1은 1 픽셀, 크기 2는 3 픽셀, 크기 3은 5 픽셀 (위 예 참조), 크기 4는 7 픽셀입니다.