Marre d' expérimenter sur de minuscules animaux domestiques , Erwin Schrödinger, lauréat du prix Nobel, a décidé de trouver le laser le plus proche et de lui tirer dessus. Parce que ... la science!
La description
Vous recevrez deux points que le laser traverse et la taille d'un faisceau laser, et vous devez déterminer où le faisceau laser doit être allé, aurait pu aller et n'aurait pas pu aller.
Le faisceau laser peut être horizontal, vertical ou diagonal. Pour un faisceau laser de taille 1, ils ressemblent respectivement à ceci:
# #
# #
##### # #
# #
# #
Le faisceau laser diagonal peut également être inversé. Les faisceaux laser de taille 2 ressemblent à ceci:
### ##
##### ### ###
##### ### ###
##### ### ###
### ##
En général, pour obtenir un faisceau laser de taille (n), il suffit de prendre le faisceau laser de taille (n-1) et d'ajouter un faisceau laser de taille (1) des deux côtés. Comme dernier exemple, voici tous les faisceaux laser possibles de taille 3, montrés sur la même "carte":
###.....#####.....##
####....#####....###
#####...#####...####
.#####..#####..#####
..#####.#####.#####.
...###############..
....#############...
.....###########....
####################
####################
####################
####################
####################
.....###########....
....#############...
...###############..
..#####.#####.#####.
.#####..#####..#####
#####...#####...####
####....#####....###
Cette "planche" aura toujours des dimensions de 20x20 (en caractères).
Contribution
Votre programme recevra cinq entiers en entrée. Ils sont, dans l'ordre, x 1 , y 1 , x 2 , y 2 et la taille du faisceau laser. Ils doivent être pris exactement dans cet ordre. Si vous le souhaitez, vous pouvez prendre les paires ordonnées (x, y) comme un tableau, un tuple, une liste ou tout autre type de données intégré qui stocke deux valeurs.
Les deux points donnés en entrée seront dans le tableau et ils sont garantis distincts (c'est-à-dire que les deux points ne seront jamais identiques). La taille du faisceau laser est liée à 1 ≤ size < 20. Il y aura toujours au moins un faisceau laser possible qui passera par les deux points.
Sortie
Votre programme doit produire une grille 20x20 des caractères suivants:
#si chaque faisceau laser possible qui passe par les deux points passe également par ce point..s'il n'y a pas de faisceau laser qui passe par les deux points et ce point.?si certains, mais pas tous, des faisceaux laser possibles passent par ce point.Xs'il s'agit de l'un des deux points d'entrée d'origine (cela remplace le#).
Cas de test
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??????.....
..??????????????....
..???????????????...
..????????????????..
..?????????????????.
..??????????????????
..??????????????????
..????????.?????????
..????????..????????
..????????...???????
Les cas de test ont été générés avec le script Ruby suivant, situé à l'intérieur d'un extrait de pile pour conserver l'espace vertical.
Règles
Votre programme doit être capable de résoudre chacun des cas de test en moins de 30 secondes (sur une machine raisonnable). Il s'agit plus d'une vérification de santé mentale, car mon programme de test Ruby a résolu tous les cas de test presque instantanément.
C'est le code-golf , donc la solution la plus courte l'emporte.
2 * size - 1. La taille 1 est de 1 pixel, la taille 2 est de 3 pixels, la taille 3 est de 5 pixels (voir l'exemple ci-dessus), la taille 4 est de 7 pixels.