Nagrodzony nagrodą Nobla Erwin Schrödinger, mający dość eksperymentowania z małymi zwierzętami domowymi , postanowił znaleźć najbliższy laser i zamiast tego zastrzelić go. Ponieważ ... nauka!
Opis
Będziesz mieć dwa punkty, które przechodzi przez laser i rozmiaru wiązki laserowej, i trzeba określić, gdzie wiązka laserowa musi pójść, mogła pójść, i nie mogła pójść.
Promień lasera może być poziomy, pionowy lub ukośny. W przypadku wiązki laserowej wielkości 1 wyglądają one odpowiednio tak:
# #
# #
##### # #
# #
# #
Ukośną wiązkę laserową można również odwrócić. Wiązki laserowe wielkości 2 wyglądają tak:
### ##
##### ### ###
##### ### ###
##### ### ###
### ##
Ogólnie, aby uzyskać wiązkę laserową o rozmiarze (n), wystarczy wziąć wiązkę laserową o rozmiarze (n-1) i dodać wiązkę laserową o rozmiarze (1) po obu stronach. Jako ostatni przykład, oto wszystkie możliwe wiązki laserowe o rozmiarze 3, pokazane na tej samej „płycie”:
###.....#####.....##
####....#####....###
#####...#####...####
.#####..#####..#####
..#####.#####.#####.
...###############..
....#############...
.....###########....
####################
####################
####################
####################
####################
.....###########....
....#############...
...###############..
..#####.#####.#####.
.#####..#####..#####
#####...#####...####
####....#####....###
Ta „plansza” zawsze będzie miała wymiary 20 x 20 (w znakach).
Wkład
Twój program otrzyma pięć liczb całkowitych jako dane wejściowe. Są to kolejno: 1 , y 1 , x 2 , y 2 oraz wielkość wiązki laserowej. Muszą być wykonane dokładnie w tej kolejności. Jeśli chcesz, możesz wziąć uporządkowane pary (x, y) jako tablicę, krotkę, listę lub inny wbudowany typ danych, który przechowuje dwie wartości.
Oba dwa punkty podane jako dane wejściowe będą znajdować się na planszy i na pewno będą się różnić (tzn. Dwa punkty nigdy nie będą takie same). Wielkość wiązki laserowej jest związana 1 ≤ size < 20. Zawsze będzie co najmniej jedna możliwa wiązka laserowa, która przechodzi przez oba punkty.
Wydajność
Twój program musi wypisać siatkę 20x20 następujących znaków:
#jeśli każda możliwa wiązka laserowa, która przechodzi przez dwa punkty, również przechodzi przez ten punkt..jeśli nie ma wiązki laserowej, która przechodzi przez dwa punkty i ten punkt.?jeśli niektóre, ale nie wszystkie z możliwych wiązek laserowych przechodzą przez ten punkt.Xjeśli jest to jeden z dwóch oryginalnych punktów wejściowych (zastępuje to#).
Przypadki testowe
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??????.....
..??????????????....
..???????????????...
..????????????????..
..?????????????????.
..??????????????????
..??????????????????
..????????.?????????
..????????..????????
..????????...???????
Przypadki testowe zostały wygenerowane za pomocą następującego skryptu Ruby, umieszczonego wewnątrz fragmentu stosu w celu zaoszczędzenia przestrzeni pionowej.
Zasady
Twój program musi być w stanie rozwiązać każdy z przypadków testowych w mniej niż 30 sekund (na rozsądnej maszynie). Jest to raczej kontrola rozsądku, ponieważ mój testowy program Ruby rozwiązał wszystkie przypadki testowe niemal natychmiast.
To jest golf golfowy , więc wygrywa najkrótsze rozwiązanie.
2 * size - 1. Rozmiar 1 to 1 piksel, rozmiar 2 to 3 piksele, rozmiar 3 to 5 pikseli (patrz przykład powyżej), rozmiar 4 to 7 pikseli.