Der Nobelpreisträger Erwin Schrödinger hat es satt, mit winzigen Haustieren zu experimentieren , und hat sich entschlossen, den nächsten Laser zu finden und auf Dinge zu schießen. Weil ... Wissenschaft!
Beschreibung
Sie erhalten zwei Punkte, die der Laser durchläuft, und die Größe eines Laserstrahls, und Sie müssen bestimmen, wohin der Laserstrahl gegangen sein muss , hätte gehen können und hätte nicht gehen können.
Der Laserstrahl kann horizontal, vertikal oder diagonal sein. Für einen Laserstrahl der Größe 1 sehen sie jeweils folgendermaßen aus:
# #
# #
##### # #
# #
# #
Der diagonale Laserstrahl kann auch gekippt werden. Laserstrahlen der Größe 2 sehen folgendermaßen aus:
### ##
##### ### ###
##### ### ###
##### ### ###
### ##
Um einen Laserstrahl der Größe (n) zu erhalten, nehmen Sie im Allgemeinen einfach den Laserstrahl der Größe (n-1) und fügen Sie auf beiden Seiten einen Laserstrahl der Größe (1) hinzu. Als letztes Beispiel sind hier alle möglichen Laserstrahlen der Größe 3 auf derselben "Tafel" dargestellt:
###.....#####.....##
####....#####....###
#####...#####...####
.#####..#####..#####
..#####.#####.#####.
...###############..
....#############...
.....###########....
####################
####################
####################
####################
####################
.....###########....
....#############...
...###############..
..#####.#####.#####.
.#####..#####..#####
#####...#####...####
####....#####....###
Diese "Tafel" hat immer Abmessungen von 20x20 (in Zeichen).
Eingang
Ihr Programm erhält fünf Ganzzahlen als Eingabe. Sie sind in der Reihenfolge x 1 , y 1 , x 2 , y 2 und der Größe des Laserstrahls. Sie müssen genau in dieser Reihenfolge genommen werden. Wenn Sie möchten, können Sie die geordneten (x, y) Paare als Array, Tupel, Liste oder anderen integrierten Datentyp verwenden, der zwei Werte speichert.
Beide als Eingabe angegebenen Punkte befinden sich innerhalb der Tafel und sind garantiert unterschiedlich (dh die beiden Punkte sind niemals gleich). Die Größe des Laserstrahls ist gebunden an 1 ≤ size < 20. Es wird immer mindestens einen möglichen Laserstrahl geben, der beide Punkte passiert.
Ausgabe
Ihr Programm muss ein 20x20-Raster mit den folgenden Zeichen ausgeben:
#wenn jeder mögliche Laserstrahl, der die beiden Punkte passiert, auch diesen Punkt passiert..wenn es keinen Laserstrahl gibt, der durch die beiden Punkte und diesen Punkt geht.?wenn einige, aber nicht alle der möglichen Laserstrahlen diesen Punkt passieren.XWenn dies einer der beiden ursprünglichen Eingabepunkte ist (dies überschreibt den#).
Testfälle
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??????.....
..??????????????....
..???????????????...
..????????????????..
..?????????????????.
..??????????????????
..??????????????????
..????????.?????????
..????????..????????
..????????...???????
Die Testfälle wurden mit dem folgenden Ruby-Skript generiert, das sich in einem Stack-Snippet befindet, um vertikalen Platz zu sparen.
Regeln
Ihr Programm muss in der Lage sein, jeden der Testfälle in weniger als 30 Sekunden (auf einem vernünftigen Computer) zu lösen. Dies ist eher eine Überprüfung der geistigen Gesundheit, da mein Ruby-Testprogramm alle Testfälle nahezu augenblicklich löste.
Das ist Code-Golf , also gewinnt die kürzeste Lösung.
2 * size - 1. Größe 1 ist 1 Pixel, Größe 2 ist 3 Pixel, Größe 3 ist 5 Pixel (siehe Beispiel oben), Größe 4 ist 7 Pixel.