Muak dengan bereksperimen pada hewan peliharaan kecil , pemenang hadiah Nobel Erwin Schrödinger telah memutuskan untuk menemukan laser terdekat dan menembaknya pada berbagai hal. Karena ... sains!
Deskripsi
Anda akan diberikan dua titik yang dilewati laser dan ukuran sinar laser, dan Anda harus menentukan ke mana sinar laser itu harus pergi, bisa pergi, dan tidak bisa pergi.
Sinar laser bisa horisontal, vertikal, atau diagonal. Untuk sinar laser ukuran 1, mereka terlihat seperti ini masing-masing:
# #
# #
##### # #
# #
# #
Sinar laser diagonal juga bisa dibalik. Sinar laser ukuran 2 terlihat seperti ini:
### ##
##### ### ###
##### ### ###
##### ### ###
### ##
Secara umum, untuk mendapatkan sinar laser ukuran (n), cukup ambil sinar laser ukuran (n-1) dan tambahkan sinar laser ukuran (1) di kedua sisi. Sebagai contoh terakhir, berikut adalah semua kemungkinan sinar laser ukuran 3, ditampilkan pada "papan" yang sama:
###.....#####.....##
####....#####....###
#####...#####...####
.#####..#####..#####
..#####.#####.#####.
...###############..
....#############...
.....###########....
####################
####################
####################
####################
####################
.....###########....
....#############...
...###############..
..#####.#####.#####.
.#####..#####..#####
#####...#####...####
####....#####....###
"Papan" ini akan selalu memiliki dimensi 20x20 (dalam karakter).
Memasukkan
Program Anda akan diberikan lima bilangan bulat sebagai input. Mereka, dalam urutan, x 1 , y 1 , x 2 , y 2 , dan ukuran sinar laser. Mereka harus diambil tepat dalam urutan itu. Jika mau, Anda dapat mengambil pasangan yang dipesan (x, y) sebagai larik, tupel, daftar, atau tipe data bawaan lainnya yang menyimpan dua nilai.
Kedua poin yang diberikan sebagai input akan berada di dalam papan, dan keduanya dijamin berbeda (yaitu dua poin tidak akan pernah sama). Ukuran sinar laser terikat 1 ≤ size < 20. Akan selalu ada setidaknya satu sinar laser yang mungkin melewati kedua titik.
Keluaran
Program Anda harus menampilkan kisi 20x20 karakter berikut:
#jika setiap kemungkinan sinar laser yang melewati dua titik juga melewati titik ini..jika tidak ada sinar laser yang melewati dua titik dan titik ini.?jika beberapa, tetapi tidak semua, sinar laser yang mungkin melewati titik ini.Xjika ini adalah salah satu dari dua titik input asli (ini menimpa#).
Uji kasus
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??????.....
..??????????????....
..???????????????...
..????????????????..
..?????????????????.
..??????????????????
..??????????????????
..????????.?????????
..????????..????????
..????????...???????
Kasing uji dibuat dengan skrip Ruby berikut, yang terletak di dalam Cuplikan Stack untuk menghemat ruang vertikal.
Aturan
Program Anda harus dapat menyelesaikan setiap kasus uji dalam waktu kurang dari 30 detik (pada mesin yang masuk akal). Ini lebih merupakan pemeriksaan kewarasan, karena program Ruby pengujian saya menyelesaikan semua kasus pengujian secara instan.
Ini adalah kode-golf , sehingga solusi terpendek menang.
2 * size - 1. Ukuran 1 adalah 1 piksel, ukuran 2 adalah 3 piksel, ukuran 3 adalah 5 piksel (lihat contoh di atas), ukuran 4 adalah 7 piksel.