Tantangan Anda diberi masukan tata letak penjara untuk mengetahui apakah ada tahanan yang bisa melarikan diri.
Memasukkan
Input mungkin dalam format yang wajar seperti string, array, array array, dll. Input akan terdiri dari tiga karakter, dalam hal ini #
, P
dan spasi. Input tidak harus mengandung ketiga karakter.
#
: DindingP
: Seorang tahanan- ruang: Ruang kosong
Contoh input akan terlihat seperti:
#####
# #
# P #
# #
#####
Keluaran
Nilai kebenaran / kepalsuan dari apakah penjara itu aman atau tidak. Penjara hanya aman jika bisa menahan semua tahanan. Jika ada tahanan yang bisa melarikan diri, itu tidak aman.
Seorang tahanan dapat melarikan diri jika mereka tidak sepenuhnya tertutup oleh tembok. Sambungan diagonal tertutup sepenuhnya.
Uji kasus
############# Truthy
# P # P# #
# # # P #
#############
############# Truthy
# P P #
# # # P #
#############
############# Falsey
# P # P# #
# # # P #
########## ##
#### Truthy
# #
# #
# P ####
####
P Falsey
### Falsey
# #
# #
### P
code-golf
ascii-art
decision-problem
grid
path-finding
TheLethalCoder
sumber
sumber
Jawaban:
Siput , 13 byte
Cobalah online!
Cetakan
0
untuk penjara yang tidak aman dan ukuran kotak pembatas input untuk penjara yang aman.Idenya adalah untuk memastikan bahwa kita tidak dapat menemukan jalur dari
P
sel ke batas (~
) hanya bergerak secara ortogonal (o
) melalui ruang. Init
adalah teleport sehingga di mana pun kami mencoba pertandingan, ia mencoba semua posisi awal yang mungkin untuk menemukan aP
.sumber
C # (.NET Core) ,
485 480 474 470 421408 byteAlat dan pendekatan yang benar-benar salah, tapi tetap saja ...
' '
dengan32
perbandingan.Cobalah online!
Pada dasarnya saya memperluas posisi P setiap kali ada ruang putih di sekitar sampai mencapai (atau tidak) perbatasan tata letak.
Beberapa lisensi:
char[][]
input sebagai tata letak.0
sebagai tidak aman dan1
aman.sumber
1>0
dan1<0
lebih pendek daritrue
danfalse
.==0
menjadi<1
? Anda memiliki setidaknya 1 byte spasi kosong yang tidak relevan. Bisakah Anda menghapusnew[]
s? (Tidak selalu bekerja tetapi terkadang suka diint[] n = {1,2,3};
).{m[x][y]= p; c.Push(new[]
->{m[x][y]=p;c.Push(new[]
char
s denganint
s jadi saya percaya Anda dapat mengganti==' '
to==32
untuk menyimpan byte. Anda harus dapat melakukan ini pada perbandingan serupa juga.Perl 5 , 69 byte
-10 byte terima kasih kepada @Grimy .
-2 byte terima kasih kepada @Neil .
77 byte kode +
-p0
bendera.Cobalah online!
Beberapa penjelasan singkat :
Idenya adalah untuk menempatkan ke
P
mana-mana tahanan bisa pergi. Jika ada yangP
berada di baris pertama / terakhir, atau kolom pertama / terakhir, maka tahanan dapat pergi ke sana dan kemudian melarikan diri, yang berarti penjara tidak aman.s/(P| )(.{@{-}})?(?!\1)(?1)/P$2P/s
menggantikan spasi di sebelah kanan atau di bawah aP
denganP
, atau spasi di sebelah kiri atau di atas aP
.Terakhir,
/\A.*P|P.*\Z|^P|P$/m
periksa apakah sebuah baris dimulai atau diakhiri denganP
,, atau adaP
baris pertama atau terakhir.sumber
*
atau+
, pertandingan terlama yang bisa dilakukan adalah ukuran garis ... Sekarang tentu saja jika Anda membandingkan dengan pendekatan yang lebih manual, berdasarkan array misalnya , maka ya itu cukup tidak efisien!s/P(.{@{-}})? | (.{@{-}})?P/P$1$2P/s
.s/(P| )(.{@{-}})?(?!\1)(?1)/P$2P/s
.JavaScript (ES6),
134133 byteMengambil input sebagai array array karakter. Pengembalian
0
(tidak aman) atau1
(aman).Uji kasus
Tampilkan cuplikan kode
sumber
&&
terjadi&
?|
. Terima kasih!JavaScript (ES6), 121 byte
Mengambil input sebagai string persegi panjang terbatas-baris baru. Mengembalikan 0 untuk tidak aman dan 1 untuk aman. Berdasarkan jawaban saya untuk Detect Fail Castles , meskipun akan lebih efisien untuk menguji tahanan yang melarikan diri di setiap langkah, daripada setelah mereka selesai menjelajahi penjara.
sumber
Oktaf,
6455 byteCobalah online!
atau
Verifikasi semua kasus uji!
Penjelasan:
sumber
APL (Dyalog Classic) , 40 byte
Cobalah online!
'# '⍳⍵
mengkodekan'#'
,' '
,'P'
sebagai 0 1 2(⌽1,⍉)⍣4
dikelilingi dengan 1s(××{1⊃⌈/⍵,⍉⍵}⌺3 3)⍣≡
max-of-tetangga mengisi sel-sel yang bukan nol⊃2≠
apakah kita tidak memiliki angka 2 di kiri atas?sumber
Stax , 35 byte CP437
Cobalah online!
Tentunya bahasa golf tanpa internal untuk menangani pencarian jalan dapat melakukan ini juga!
Penjelasan
Menggunakan format yang tidak dibongkar untuk menjelaskan.
sumber
SmileBASIC,
154146 byteSaya berharap jawaban menggunakan mengisi banjir akan lebih pendek dari ini.
Ganti
31
dengan karakter ASCII yang sesuai.sumber