Stufo di sperimentare piccoli animali domestici , il vincitore del premio Nobel Erwin Schrödinger ha deciso di trovare il laser più vicino e sparargli contro le cose. Perché ... scienza!
Descrizione
Ti verranno dati due punti attraverso i quali passa il laser e le dimensioni di un raggio laser, e devi determinare dove deve essere passato il raggio laser , potrebbe esserci andato e non avrebbe potuto andare.
Il raggio laser può essere orizzontale, verticale o diagonale. Per un raggio laser di dimensione 1, assomigliano rispettivamente a questo:
# #
# #
##### # #
# #
# #
Il raggio laser diagonale può anche essere capovolto. I raggi laser di dimensione 2 si presentano così:
### ##
##### ### ###
##### ### ###
##### ### ###
### ##
In generale, per ottenere un raggio laser di dimensioni (n), è sufficiente prendere il raggio laser di dimensioni (n-1) e aggiungere un raggio laser di dimensioni (1) su entrambi i lati. Come ultimo esempio, qui ci sono tutti i possibili raggi laser di dimensione 3, mostrati sulla stessa "scheda":
###.....#####.....##
####....#####....###
#####...#####...####
.#####..#####..#####
..#####.#####.#####.
...###############..
....#############...
.....###########....
####################
####################
####################
####################
####################
.....###########....
....#############...
...###############..
..#####.#####.#####.
.#####..#####..#####
#####...#####...####
####....#####....###
Questa "tavola" avrà sempre dimensioni di 20x20 (in caratteri).
Ingresso
Al tuo programma verranno dati cinque numeri interi come input. Sono, nell'ordine, x 1 , y 1 , x 2 , y 2 e le dimensioni del raggio laser. Devono essere presi esattamente in quell'ordine. Se lo si desidera, è possibile prendere le coppie ordinate (x, y) come una matrice, tupla, elenco o altro tipo di dati incorporato che memorizza due valori.
Entrambi i due punti dati come input saranno all'interno del tabellone e sono garantiti per essere distinti (cioè i due punti non saranno mai gli stessi). La dimensione del raggio laser è legata a 1 ≤ size < 20. Ci sarà sempre almeno un possibile raggio laser che attraversa entrambi i punti.
Produzione
Il tuo programma deve generare una griglia 20x20 dei seguenti caratteri:
#se ogni possibile raggio laser che passa attraverso i due punti attraversa anche questo punto..se non c'è raggio laser che attraversa i due punti e questo punto.?se alcuni, ma non tutti, i possibili raggi laser passano attraverso questo punto.Xse questo è uno dei due punti di input originali (questo sostituisce il#).
Casi 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??????.....
..??????????????....
..???????????????...
..????????????????..
..?????????????????.
..??????????????????
..??????????????????
..????????.?????????
..????????..????????
..????????...???????
I casi di test sono stati generati con il seguente script Ruby, situato all'interno di un frammento di stack per conservare lo spazio verticale.
Regole
Il tuo programma deve essere in grado di risolvere ciascuno dei casi di test in meno di 30 secondi (su una macchina ragionevole). Questo è più di un controllo di integrità, poiché il mio programma di test Ruby ha risolto quasi tutti i casi di test quasi istantaneamente.
Questo è code-golf , quindi vince la soluzione più breve.
2 * size - 1. La dimensione 1 è 1 pixel, la dimensione 2 è 3 pixel, la dimensione 3 è 5 pixel (vedi esempio sopra), la dimensione 4 è 7 pixel.