Masalah gadai yang hilang
Setelah permainan catur berakhir, pion yang masih hidup tertinggal di belakang garis musuh. mari kita bantu dia menemukan jalan pulang terpendek.
Masalah aslinya menggambarkan papan "catur" nXn, dan fungsi f: {1,..,n-1}X{1,..,n}X{-1,0,1} => R+
bobot. tujuannya adalah untuk menemukan jalur terbaik dari beberapa kotak di garis buttom, ke kotak lainnya di baris atas, di mana langkah yang mungkin adalah: kiri-atas, atas, kanan-atas, dan Anda tidak boleh keluar dari papan.
Masalahnya relatif mudah diselesaikan di O (n ^ 2) menggunakan pemrograman dinamis, tapi ini codegolf, dan kami tidak peduli tentang hal-hal yang tidak berguna seperti menjalankan kompleksitas waktu ...
Masalah
input: array 3-dimensi (atau koleksi lain pilihan Anda, diterima melalui stdin, atau sebagai argumen fungsi), yang sesuai dengan papan catur biasa, persis dalam ukuran: 7X8X3 (#linePasses X #rowSize X #movesPerPass) yang berisi bilangan bulat non-negatif. biaya pergerakan dari beberapa posisi di (i,j)
mana i
indeks baris, dan j
indeks kolom, adalah:
a[i][j][0]
untuk biaya perjalanan up-kiri untuk persegi(i+1,j-1)
, atau grafis:\
.a[i][j][1]
untuk biaya untuk perjalanan hingga persegi(i+1,j)
, atau grafis:|
.a[i][j][2]
untuk biaya perjalanan up-kanan untuk persegi(i+1,j+1)
, atau grafis:/
.
Anda mungkin menganggap itu tidak akan berisi jalur yang jumlahnya lebih besar dari MAX_INT
.
output: output ascii 8X8 yang menunjukkan jalur terbaik (terpendek, yaitu jumlah bobot minimum) (jika ada lebih dari 1 hasil optimal, Anda dapat menunjukkan jalur sewenang-wenang pilihan Anda). jalan digambar dari bawah ke atas, di mana di setiap baris, karakter yang sesuai dengan posisi pion di jalan, adalah yang akan dibuatnya. mis. jika pion akan bergerak ke kiri dari kolom 3 (ke kolom 2), Anda harus menggambar:
#?######
##\#####
di mana ?
harus diganti dengan langkah selanjutnya. posisi akhir perlu diambil sebagai X
.
Contohnya
memasukkan:
[
[[1,1,1],[1,1,1],[0,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,0,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,0],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,1],[1,1,0],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,1],[1,1,1],[1,0,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,1],[1,1,1],[1,0,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,1],[1,1,1],[0,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]]
]
keluaran:
##X#####
###\####
###|####
###|####
##/#####
#/######
#|######
##\#####
memasukkan:
[
[[41,27,38],[12,83,32],[50,53,35],[46,32,26],[55,89,82],[75,30,87],[2,11,64],[8,55,22]],
[[56,21,0],[83,25,38],[43,75,63],[56,60,77],[68,55,89],[99,48,67],[94,30,9],[62,62,58]],
[[23,18,40],[24,47,61],[96,45,72],[71,6,48],[75,63,98],[93,56,51],[23,31,30],[49,34,99]],
[[20,47,42],[62,79,72],[32,28,44],[68,61,55],[62,39,57],[4,17,49],[97,85,6],[91,18,12]],
[[51,50,11],[32,39,56],[12,82,23],[33,88,87],[60,55,22],[29,78,14],[70,11,42],[63,94,67]],
[[75,64,60],[27,79,86],[70,72,56],[55,45,32],[95,67,12],[87,93,98],[81,36,53],[38,22,93]],
[[31,80,50],[77,71,22],[59,46,86],[64,71,53],[41,19,95],[62,71,22],[92,80,41],[26,74,29]]
]
keluaran:
######X#
#####/##
####/###
#####\##
#####|##
######\#
######|#
#######\
ini kode-golf , jadi kode terpendek menang.
bermain adil. tidak ada celah ...
EDIT:
Iv'e menulis solusi lurus ke depan yang tidak di-golf di scala yang bisa Anda lihat. Ada juga situs yang dapat Anda mainkan dengan kode scala on-line: scalakata (cukup salin & tempel inti ke scalakata, dan tekan tombol putar)