Наситившись експериментами над крихітними домашніми тваринами , Нобелівський призер Ервін Шрьодінгер вирішив знайти найближчий лазер і замість цього вистрілити в речі. Тому що ... наука!
Опис
Вам дадуть дві точки, через які проходить лазер, і розмір лазерного променя, і ви повинні визначити, куди повинен був піти лазерний промінь , міг піти, а не міг піти.
Лазерний промінь може бути горизонтальним, вертикальним або діагональним. Для лазерного променя розміром 1 вони виглядають приблизно так:
# #
# #
##### # #
# #
# #
Діагональний лазерний промінь також можна перевернути. Лазерні промені розміром 2 виглядають так:
### ##
##### ### ###
##### ### ###
##### ### ###
### ##
Загалом, щоб отримати лазерний промінь розміром (n), просто візьміть лазерний промінь розміром (n-1) і додайте лазерний промінь розміром (1) з обох сторін. Як остаточний приклад, ось усі можливі лазерні промені розміром 3, показані на одній "дошці":
###.....#####.....##
####....#####....###
#####...#####...####
.#####..#####..#####
..#####.#####.#####.
...###############..
....#############...
.....###########....
####################
####################
####################
####################
####################
.....###########....
....#############...
...###############..
..#####.#####.#####.
.#####..#####..#####
#####...#####...####
####....#####....###
Ця "дошка" завжди матиме розміри 20х20 (у символах).
Вхідні дані
Вашій програмі буде введено п'ять цілих чисел. Вони, по порядку, х 1 , у 1 , х 2 , у 2 , і розмір лазерного променя. Їх треба приймати саме в тому порядку. За бажанням ви можете взяти впорядковані (x, y) пари як масив, кортеж, список чи інший вбудований тип даних, який зберігає два значення.
Обидві точки, подані як вхідні дані, будуть знаходитись у дошці, і вони гарантовано будуть різними (тобто два бали ніколи не будуть однаковими). Розмір лазерного променя пов'язаний з1 ≤ size < 20 . Завжди знайдеться хоча б один можливий лазерний промінь, який проходить через обидві точки.
Вихідні дані
Ваша програма повинна вивести сітку 20х20 таких символів:
#якщо кожен можливий лазерний промінь, який проходить через дві точки, також проходить через цю точку..якщо немає лазерного променя, який проходить через дві точки і цю точку.?якщо деякі, але не всі, можливі лазерні промені проходять через цю точку.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 вирішила всі тестові випадки майже миттєво.
Це код-гольф , тому найкоротше рішення виграє.
2 * size - 1. Розмір 1 - 1 піксель, розмір 2 - 3 пікселі, розмір 3 - 5 пікселів (див. Приклад вище), розмір 4 - 7 пікселів.