Jadi, inilah peta, katakanlah, penjara bawah tanah ...
##########
# #####
# #####
##########
##########
##########
##########
#### ##
#### ##
##########
Katakanlah pahlawan di Kamar A (di kiri atas) dan tujuan mereka (seorang pangeran dalam kesusahan?) Ada di Kamar B (di kanan bawah). Peta kami tidak memungkinkan pahlawan untuk maju ke tujuan mereka.
Kita perlu menambahkan lorong ...
##########
# #####
# #####
####.#####
####.#####
####.#####
####.#####
#### ##
#### ##
##########
Di sana, jauh lebih baik!
Aturan
- Program atau fungsi yang menerima peta ruang bawah tanah (terdiri dari hash dan spasi, dengan baris yang dipisahkan oleh karakter baris baru).
- Ini akan menampilkan peta dengan titik-titik yang ditambahkan untuk menunjukkan bagian-bagian di semua ruang yang berada di jalur langsung antara karakter ruang.
- Itu tidak akan mengubah panjang garis, atau jumlah garis.
- Semua lorong ada dalam garis langsung dari spasi ke spasi.
- Lorong tidak bisa berbalik sudut
- Mereka tidak akan berada di antara spasi dan tepi peta.
- Gunakan bahasa apa pun.
- Coba lakukan konversi dalam byte paling sedikit.
- Jika tidak ada lorong yang bisa ditarik, kembalikan peta, tidak berubah.
- Peta harus selalu memiliki hash di sekitar semua tepi (Anda tidak perlu menangani spasi di tepi).
- Peta input selalu berbentuk persegi panjang, setiap baris harus memiliki lebar yang sama.
Uji kasus
#### ####
# # => # #
# # # #
#### ####
########## ##########
# ##### # #####
# ##### # #####
########## ####.#####
########## => ####.#####
########## ####.#####
########## ####.#####
#### ## #### ##
#### ## #### ##
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## ##########
########## => ##########
########## ##########
########## ##########
###### ## ###### ##
###### ## ###### ##
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## ####.#####
########## => ####.#####
#### ### #### ###
########## ######.###
###### ## ###### ##
###### ## ###### ##
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## ##..######
########## => ##..######
########## ##..######
########## ##..######
## ####### ## .######
## ###### ## ######
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## #.########
########## => #.########
########## #.########
####### # #.##### #
####### # #.##### #
# ##### # # ..... #
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## #.########
##### ### => #.### ###
##### ### #.### ###
####### # #.##### #
####### # #.##### #
# ##### # # ..... #
########## ##########
########## ##########
## # ## #
########## ##......##
########## ##......##
########## => ##......##
########## ##......##
########## ##......##
########## ##......##
# ## # ##
########## ##########
########## ##########
#### #### #### ####
####### ## ####..# ##
###### ### ####.. ###
# ### ## # => # ... .. #
# ## ### # # .. ... #
### ###### ### ..####
## ####### ## #..####
#### #### #### ####
########## ##########
#
dan.
?Jawaban:
Jelly , 17 byte
Cobalah online!
Tricky -1 terima kasih kepada pengguna202729 .
Penjelasan:
sumber
Perl 5
-p0
, 56 byteCobalah online!
sumber
APL + WIN, 87 byte
Anjuran untuk matriks karakter:
sumber
Haskell ,
209165162 byte.Cobalah online!
Saya yakin bukan cara yang paling efisien untuk melakukannya di Haskell.
Terlalu banyak tanda kurung untuk keinginan saya, tetapi saya tidak yakin cara menghapus lagi.sumber
$
((k(take 2 c))
menjadi(k$take 2 c)
). Anda juga dapat menggunakannya!!0
sebagai gantihead
dalam beberapa kasus.(k(take 2 c))
Anda hanya dapat menghapus tanda kurung luar, mereka tidak diperlukan. Tetapi dalam kasusdrop(length(head d))
Anda masih dapat menggunakan$
, menggantinya dengandrop(length$head d)
(dan bahkandrop(length$d!!0)
).k
bukannya++
Anda dapat sangat mengurangi baris terakhir.k[' '<$k(take 2 c),'.'<$d!!0,drop(length$d!!0)$f$k$d]
.f b|(e:g:d@(h:_:_))<-group b=k[' '<$e++g,'.'<$h,drop(length h)$f$k d]|1>0=' '<$b
, ini menggunakan pola yang cocok untuk melakukan banyak pengangkatan berat yang sedang dilakukan sebelumnya.Python 2 ,
173148 byteCobalah online!
sumber
Retina 0.8.2 , 95 byte
Cobalah online! Penjelasan:
Ini mencari
#
tanda yang berada di atas spasi atau.
s dan mengubahnya menjadi titik sampai tidak ada yang tersisa. Lookbehind menemukan kolom#
's dan kemudian lookahead melompat ke baris berikutnya dan secara atomis ke kolom yang sama di bawah sehingga ruang atau.
hanya bisa cocok jika itu persis di bawah#
.Ini mencari
.
s yang tidak di bawah spasi atau.
s dan mengubahnya kembali menjadi#
s sampai tidak ada yang tersisa. Lookahead menemukan kolom.
's dan kemudian tampilan di bawah melompat ke baris sebelumnya dan secara atomis ke kolom yang sama di atas dalam banyak cara yang sama sehingga ruang atau.
hanya bisa cocok jika tepat di atas#
. Tampilan negatif di belakang digunakan sehingga ini juga berfungsi untuk.
s di baris atas.(Catatan trailing space pada kedua baris) Ini hanya mencari semua run karakter non-spasi putih antara spasi dan memastikan bahwa semuanya adalah
.
s.sumber
Ruby , 104 byte
Cobalah online!
Memang tidak bagus, tapi setidaknya berbelit-belit. Saya yakin itu bisa diperbaiki.
sumber
Stax , 19 byte
Jalankan dan debug itu
sumber
JavaScript (Node.js) ,
205193190186181175172 byteCobalah online!
Berkomentar
sumber