Tantangan
Dengan ukuran kisi, posisi rintangan, posisi pemain, dan posisi target, tugas Anda adalah menemukan jalur bagi pemain untuk mencapai target dan menghindari rintangan pada saat yang bersamaan (jika perlu).
Memasukkan
- N : Ukuran kisi
N x N
- P : Posisi pemain
[playerposx, playerposy]
- T : Posisi target
[targetposx, targetposy]
- O : Posisi penghalang
[[x1, y1], [x2, y2],...,[xn, yn]]
Keluaran
Jalur : Pemain jalur dapat digunakan untuk mencapai target[[x1, y1], [x2, y2],...,[xn, yn]]
Aturan
- Intinya
[0,0]
adalah di sudut kiri atas grid. - Posisi pemain akan selalu berada di sisi kiri kotak.
- Posisi target akan selalu berada di sisi kanan grid.
- Grid akan selalu memiliki setidaknya satu kendala.
- Anda dapat mengasumsikan bahwa tidak ada halangan yang menimpa pemain atau posisi target.
- Anda tidak perlu menemukan jalur min.
- Pemain hanya bisa bergerak ke kiri, kanan, atas dan bawah tidak secara diagonal.
- Anda dapat mengambil input dengan cara apa pun yang nyaman.
- Anda dapat mengasumsikan bahwa jalur untuk mencapai target selalu ada.
- Jelas, untuk setiap input beberapa jalur yang valid ada, pilih satu.
- Anggap
N > 2
saja kisi itu setidaknya3 x 3
.
Contohnya
Input: 9
, [6, 0]
, [3, 8]
, [[0, 5], [2, 2], [6, 4], [8, 2], [8, 7]]
Kemungkinan Output:[[6, 0], [6, 1], [6, 2], [6, 3], [5, 3], [5, 4], [5, 5], [5, 6], [5, 7], [5, 8], [4, 8], [3, 8]]
Input: 6
, [1, 0]
, [3, 5]
, [[1, 2], [2, 5], [5, 1]]
Kemungkinan Output:[[1, 0], [1, 1], [2, 1], [2, 2], [2, 3], [2, 4], [3, 4], [3, 5]]
Catatan
Perhatikan itu X
untuk baris dan Y
untuk cols. Jangan membingungkan mereka dengan koordinat dalam gambar.
Edit
Seperti @digEmAll tunjukkan, karena aturan #2
dan #3
, playerY = 0
dan targetY = N-1
. Jadi, jika mau, Anda dapat mengambil sebagai input saja playerX
dan dan targetX
(jika itu membuat kode Anda lebih pendek).
sumber
Jawaban:
JavaScript (ES6), 135 byte
Mengambil input sebagai
(width, [target_x, target_y], obstacles)(source_x, source_y)
, di mana hambatan adalah array string dalam"X,Y"
format.Mengembalikan array string dalam
"X,Y"
format.Cobalah online!
Berkomentar
sumber
R , 227 byte
Cobalah online!
Tidak terlalu pendek, dan jelas tidak memberikan jalur terpendek (mis. Periksa contoh pertama).
Ini pada dasarnya melakukan pencarian kedalaman-rekursif pertama dan berhenti segera setelah target telah tercapai, mencetak path.
Terima kasih kepada JayCe untuk peningkatan format output
sumber
x1 y1 x2 y2 ... xn yn
: Dwrite(t(mx),1,N)
bukannyaprint
:)Python 2 ,
151149 byteCobalah online!
sumber
Haskell ,
133131130 byteCobalah online! (dengan beberapa testcases)
Fungsi
!
mengambil sebagai inputn :: Int
ukuran gridp :: [Int]
posisi pemain sebagai daftar[xp, yp]
o :: [[Int]]
posisi rintangan sebagai daftar[[x1, y1], [x2, y2], ...]
t :: [[[Int]]]
(implisit) posisi target sebagai daftar[[[xt, yt]]]
(daftar tiga hanya untuk kenyamanan)dan mengembalikan jalur yang valid sebagai daftar
[[xp, yp], [x1, y1], ..., [xt, yt]]
.Sebagai bonus, ia menemukan (salah satu) jalur terpendek dan berfungsi untuk posisi pemain dan target mana pun. Di sisi lain, ini sangat tidak efisien (tetapi contoh yang diberikan berjalan dalam jumlah waktu yang wajar).
Penjelasan
iterate
[[xt, yt]]
Ekspresi yang tampaknya tidak jelas
[id, map (+ 1)] <*> [[x - 1,y], [x, y - 1]]
hanyalah versi "golfy" (-1 byte)[[x + 1, y], [x, y + 1], [x - 1, y], [x, y - 1]]
.sumber
Retina 0.8.2 , 229 byte
Cobalah online! Tidak yakin apakah format I / O memenuhi syarat. Penjelasan:
Gandakan setiap sel. Salinan kiri digunakan sebagai area kerja sementara.
Tandai awal maze sebagai yang dikunjungi.
Tandai ujung labirin sebagai kosong.
Sel-sel kerja yang tersedia ada, arahkan ke sel yang berdekatan yang dikunjungi sebelumnya.
Lacak jalur dari pintu keluar ke mulai menggunakan sel yang berfungsi sebagai panduan.
Hapus sel yang berfungsi.
sumber
JavaScript, 450 byte
Mengambil input sebagai
(n, {playerx, playery}, {targetx, targety}, [{obstaclex, obstacley}])
. Mengembalikan array{hopx, hopy}
.Ini adalah versi yang tidak diacak di mess saya:
sumber