Premis
Jadi baru-baru ini saya sekitar setengah jam lebih awal untuk membuat janji, dan memutuskan untuk menunggu di luar. Saya juga memutuskan bahwa itu akan terlihat aneh jika saya hanya berdiri tanpa bergerak di depan rumah. Karena itu, saya memutuskan untuk berjalan cepat, dalam area terbatas. Saya juga menyimpulkan bahwa jika saya mulai berjalan dalam lingkaran itu akan membuat jelas bahwa saya berkeliaran. Jadi saya terinspirasi untuk membuat tantangan Golf Code pertama saya.
Spesifikasi
Anda akan diberikan daftar, peta area, yang akan berisi salah satu " "
atau "#"
, yang mewakili ruang bebas dan semacam rintangan. Ruang bebas hanya dapat dilintasi satu kali, dan dibutuhkan 1 menit untuk melewatinya. Posisi awal Anda akan ditandai dengan "@"
tradisi per roguelike, dan target akan diwakili dengan a "$"
karena itulah yang akan Anda kehilangan di sana. Anda juga akan diberikan bilangan bulat yang akan mewakili berapa menit Anda harus membuang sebelum tidak tampak seolah-olah Anda mengganggu. Ketika Anda mendarat di"$"
, itu harus menjadi jumlah menit yang tepat (jadi jika Anda menghitung mundur, itu harus 1 pada ubin yang berdekatan, dan menjadi 0 pada ubin). Akan selalu mungkin untuk mencapai tujuan. Program atau fungsi Anda harus mengembalikan daftar yang menunjukkan jalur terpendek dengan <,>, ^, dan v untuk mewakili empat kemungkinan arah.
Contohnya
Memasukkan:
[[" ", " ", " ", " "],
["@", " ", " ", "$"],
[" ", " ", " ", " "],
[" ", " ", " ", " "]]
dan
5
Ouput:
[[">", ">", ">", "v"],
["^", " ", " ", "$"],
[" ", " ", " ", " "],
[" ", " ", " ", " "]]
Memasukkan:
[[" ", "#", " ", " ", " "],
[" ", "#", " ", " ", " "],
["@", "#", " ", "$", " "],
[" ", " ", " ", " ", " "],
[" ", "#", " ", " ", " "],
[" ", "#", " ", " ", " "]]
dan
7
Keluaran:
[[" ", "#", " ", " ", " "],
[" ", "#", ">", "v", " "],
["v", "#", "^", "$", " "],
[">", ">", "^", " ", " "],
[" ", "#", " ", " ", " "],
[" ", "#", " ", " ", " "]]
Memasukkan:
[[" ", "#", " ", " ", " "],
[" ", "#", " ", " ", " "],
["@", "#", " ", "$", " "],
[" ", " ", " ", " ", " "],
[" ", "#", " ", " ", " "],
[" ", "#", " ", " ", " "]]
dan
17
Keluaran:
[[" ", "#", " ", "v", "<"],
[" ", "#", " ", "v", "^"],
["v", "#", " ", "$", "^"],
[">", ">", "v", ">", "^"],
[" ", "#", "v", "^", "<"],
[" ", "#", ">", ">", "^"]]
Aturan
- Celah standar berlaku
- Setiap ubin hanya boleh dipindahkan satu kali
- Jumlah waktu yang tepat harus dihabiskan di papan tulis
- Hanya satu jalur yang perlu ditampilkan dalam kasus beberapa jalur
- Ini adalah pertanyaan kode golf sehingga jawaban terpendek menang
- Sesuai pertanyaan user202729 dalam komentar, Anda dapat menerima input yang valid.
Tambahkan komentar jika diperlukan klarifikasi lebih lanjut
sumber
Jawaban:
JavaScript (ES6), 171 byte
Mengambil input dalam sintaks currying
(a)(n)
. Output dengan memodifikasi matriks input.Cobalah online!
Berkomentar
sumber
Python 2 ,
310256 byteTerima kasih @cairdcoinheringaahing untuk
except:0
-3 byteTerima kasih @Mnemonic untuk -8 byte
Terima kasih @Jonathan
Allan untuk -3 byte Terima kasih @ovs untuk -5 byte
Cobalah online!
Beberapa penjelasan:
try-except
digunakan untuk memastikan, bahwa keduanyax
dany
koordinat berada dalam batas. Pengecualian akan dimunculkan pada akses keG[y][x]
. Python terlalu baik dan indeks negatif dapat diterima, jadi centangx>-1<y
ditambahkan.T=[r[:]for r in G]
digunakan untuk membuat salinan dariG
nilai-nilai~-i/2
dan~-(i^2)/2
digunakan untuk menghasilkan pasangan(-1, 0), (0, 1), (0, -1), (1, 0)
, yang digunakan untuk bergerak dalam kotak (masih harus ada cara yang lebih pendek!)R+=[G]*(0==c<'$'==G[y][x])
periksa, yang'$'
tercapai dalam sejumlah langkah yang diperlukan.R
digunakan untuk mendapatkan hasil ini dari panggilan fungsi rekursif.for i,y in enumerate(G):"@"in y>S(y.index("@"),i,G,L,R)
Ditemukanx
dany
dari'@'
fungsi input dan panggilanS
.print R[0]
R
mungkin mengandung lebih dari satu solusi, jadi output pertama sajasumber
if G[y][x]=='$':
denganif'$'==G[y][x]:
.R+=(G[y][x]=='$')*(c==0)*[G]
byte lain.if(x>-1<y)*(G[y][x]in' @'):
y+cmp(i%2,i/2)
adalahy+~-(i^2)/2
; mungkin masih ada yang lebih pendek.Python 2 ,
264261251249 byteCobalah online!
sumber