Gim taktik berbasis giliran seperti Advance Wars, Wargroove, dan Fire Emblem terdiri dari kotak persegi dari berbagai medan dengan unit kelas gerakan berbeda yang membutuhkan biaya berbeda untuk setiap jenis medan. Kami akan menyelidiki sebagian masalah itu.
Tantangan
Tugas Anda adalah menentukan apakah satu lokasi dapat dijangkau dari yang lain mengingat kisi-kisi biaya medan dan kecepatan gerakan.
Unit hanya bisa bergerak secara orthogonal di mana biaya untuk pindah ke kotak adalah nilai sel yang sesuai pada kotak (pemindahan gratis). Misalnya, pindah dari sel yang bernilai 3 ke sel yang dihargai 1 membutuhkan 1 gerakan, tetapi sebaliknya membutuhkan 3. Beberapa kotak mungkin tidak dapat diakses.
Contoh
1 [1] 1 1 1
1 2 2 3 1
2 3 3 3 4
1 3 <1> 3 4
Pindah dari [1]
ke <1>
membutuhkan minimal 7 poin gerakan dengan bergerak ke kanan satu kotak dan kemudian turun tiga. Jadi, jika diberikan 6 atau kurang dari kecepatan gerakan, Anda harus menampilkan jawaban yang salah.
Contoh Kasus Uji
Ini akan menggunakan koordinat nol-indeks (baris, kolom) asal-kiri asal daripada sel kurung untuk memulai dan mengakhiri untuk membuat parsing lebih mudah. Sel yang tidak terjangkau akan diwakili denganX
Kasus 1a
1 1 2 1 X
1 2 2 1 1
2 1 1 2 1
X X X 1 2
Speed: 5
From (2, 3) to (0, 1)
Output: True
Kasus 1b
1 1 2 1 X
1 2 2 1 1
2 1 1 2 1
X X X 1 2
Speed: 4
From (2, 3) to (0, 1)
Output: False
Kasus 1c
1 1 2 1 X
1 2 2 1 1
2 1 1 2 1
X X X 1 2
Speed: 5
From (0, 1) to (2, 3)
Output: False
Kasus 2a
3 6 1 1 X 4 1 2 1 X
5 1 2 2 1 1 1 X 1 5
2 1 1 1 2 1 1 1 X 1
2 1 1 3 1 2 3 4 1 2
1 1 2 1 1 4 1 1 1 2
3 2 3 5 6 1 1 X 1 4
Speed: 7
From (3, 4) to (2, 1)
Output: True
Kasus 2b
3 6 1 1 X 4 1 2 1 X
5 1 2 2 1 1 1 X 1 5
2 1 1 1 2 1 1 1 X 1
2 1 1 3 1 2 3 4 1 2
1 1 2 1 1 4 1 1 1 2
3 2 3 5 6 1 1 X 1 4
Speed: 4
From (3, 4) to (2, 1)
Output: False
Kasus 2c
3 6 1 1 X 4 1 2 1 X
5 1 2 2 1 1 1 X 1 5
2 1 1 1 2 1 1 1 X 1
2 1 1 3 1 2 3 4 1 2
1 1 2 1 1 4 1 1 1 2
3 2 3 5 6 1 1 X 1 4
Speed: 7
From (1, 8) to (2, 7)
Output: True
Kasus 3a
2 1 1 2
2 3 3 1
Speed: 3
From (0, 0) to (1, 1)
Output: False
Kasus 3b
2 1 1 2
2 3 3 1
Speed: 3
From (1, 1) to (0, 0)
Output: True
Aturan, Asumsi, dan Catatan
- Celah standar dilarang, I / O bisa dalam format apa pun yang nyaman
- Anda dapat mengasumsikan koordinat semuanya ada di grid
- Kecepatan gerakan tidak akan pernah lebih dari 100
- Sel yang tidak dapat diakses dapat direpresentasikan dengan jumlah yang sangat besar (mis. 420, 9001, 1 juta) atau dengan 0 atau nol, yang mana yang paling nyaman bagi Anda.
- Semua input akan terdiri dari bilangan bulat positif (kecuali jika menggunakan nol atau 0 untuk mewakili sel yang tidak terjangkau)
sumber
Jawaban:
Permintaan TSQL,
205191 byteInput adalah variabel tabel @t
@ x = mulai xpos, @ y = mulai ypos @ i = end xpos, @ j = end ypos @ = kecepatan
Cobalah secara online versi ungolfed
sumber
Python 2 , 220 byte
Cobalah online!
Mengambil array
m
bilangan bulat, dengan'X'
nilai lebih besar dari 100; kecepatana
,m
memiliki lebarw
dan tinggih
; dan kembali ketika kita bisa mulai di baris / kolom sel nol diindeks(r,c)
dan sampai ke sel terakhir(R,C)
.Algoritma ini adalah pengisian banjir yang dimodifikasi. Kode sedikit ungolfed:
sumber
JavaScript (ES7),
116113 byteMengambil input sebagai0 1
(matrix)([endRow, endCol])(speed, startRow, startCol)
. Mengharapkan nilai besar untuk kotak yang tidak terjangkau. Mengembalikan atau .Cobalah online!
Berkomentar
sumber
Jelly , 59 byte
Cobalah online!
Tidak terlalu cepat; mencoba semua jalur sampai unit kecepatan habis, bahkan menelusuri kembali langkah-langkahnya. Namun, ini menghindari kebutuhan untuk memeriksa apakah ruang dikunjungi. Input diberikan sebagai
[nrows, ncols],[start_row, start_col],[end_row, end_col],speed,flattened matrix column-major
Penjelasan
Tautan pembantu
Tautan utama
sumber
Jelly , 38 byte
Program penuh yang sangat tidak efisien menerima medan (dengan unvisitables sebagai 101) kemudian mulai dan berakhir mengoordinasikan kemudian kecepatan.
Cobalah online! (tidak banyak gunanya mencoba sebagian besar kasus uji!)
Bagaimana?
Membuat daftar semua permutasi dari masing-masing set daya dari "semua lokasi medan kecuali awal & akhir", mengelilingi masing-masing dengan permulaan & akhir, filter untuk yang membuat hanya langkah orthogonal jarak satu, menjatuhkan awal dari masing-masing, indeks kembali ke medan, jumlah masing-masing, mengambil minimum, kurangi satu dan tes bahwa ini kurang dari kecepatan.
sumber