Di dunia seni ASCII, ada air, dinding hash, dan mekanisme huruf.
Anda berada di sebuah ruangan yang terdiri dari dinding hash ( #
tanda):
#######
# #
# #
# #
# ### #
# #
#######
Anda memasang sumber air S ( S
tanda) dan tangki air E ( E
tanda) yang dapat menerima air dari segala arah, tetapi Anda hanya memiliki satu sumber S dan satu tangki E.
#######
# S #
# #
# #
# ### #
# E #
#######
Jadi, Anda harus memilih dengan bijak di mana menempatkan sumber. Di situlah Anda melakukan keterampilan kode-golf Anda .
Tugas
Anda mendapatkan input yang terdiri dari string yang mewakili ruangan dengan sumber dan tangki:
#######
# S #
# #
# #
# ### #
# E #
#######
Anda harus mencari tahu apakah air akhirnya mencapai tangki. Jika memungkinkan, air akan mengalir ke bawah, ke kiri dan ke kanan, jika mungkin. Airnya tidak menumpuk karena tidak naik.
Jadi, untuk input di atas, hasilnya adalah:
#######
# * #
# * #
#*****#
#*###*#
#**O**#
#######
Air dengan gembira mencapai tangki, jadi Anda harus menampilkan nilai yang benar.
Tetapi jika air tidak mencapai tangki:
#######
#S #
# #
# E #
# ### #
# #
#######
#######
#* #
#* #
#* X #
#*### #
#*****#
#######
Maka Anda harus menampilkan nilai palsu.
Tulis program untuk memutuskan apakah air pada akhirnya mencapai tangki. Kode Anda harus sesingkat mungkin.
Asumsi
Asumsikan bahwa input selalu valid (seluruh ruangan adalah wilayah persegi panjang tertutup dengan S dan E).
Asumsikan hanya ada satu kamar yang disediakan sebagai input.
Uji Kasus
Program Anda harus mengembalikan nilai kebenaran untuk kasus uji berikut:
#######
# S #
# #
# #
# ### #
# E #
#######
#######
# S #
# #
# E #
# #
# #
#######
#######
# #
# #
# SE #
# ### #
# #
#######
###############################################
# S #
# #
# #
# #
# ############### #
# #
# ################## ################## #
# #
# #
# ##### #
# E #
###############################################
#######
# S #
# #
# #
# ### #
# # #
### ###
## E ##
# #
#######
Tetapi nilai palsu untuk kasus uji berikut:
#######
#S #
# #
# E #
# ### #
# #
#######
#######
# #
# SE #
# #
# #
# #
#######
#######
# #
# E #
# #
# S #
# #
#######
####################################
# #
# #
# #
#S # E#
####################################
Kamar kedua hingga terakhir dalam kategori True dan kamar terakhir dalam kategori False dicuri tanpa dipinjam dari Koth: Jump and Run by Manu (yang menghapus posting sandbox).
Kamar terakhir dalam kategori True adalah dari jawaban Martin Buttner di Retina .
from
/to
/ benar-benar (yang memudahkan peserta untuk memproses semua tes kasus sekaligus).Jawaban:
Siput , 20 byte
Mencetak
0
untuk nilai falsey dan1
untuk nilai sebenarnya.Cobalah online!
\S
cocokS
di awald
mengatur arah ke bawah{...},
cocok dengan barang-barang di kawat gigi 0 atau lebih kali=\#
adalah penegasan yang berhasil jika ada#
arang di depan siput, tetapi tidak menggerakkannyan
ternyata 90 derajat di kedua arah(...)?
cocok dengan pola dalam tanda kurung 0 atau 1 kali\
mencocokkan ruang dan menggerakkan siput ke atasnya!(...
adalah pernyataan negatift
teleport ke sembarang kotak yang tak tertandingi di dalam kisi\E
cocokE
sumber
Tergelincir , 20 + 2 = 22 byte
Jadi Slip masih rusak seperti biasa, tetapi untuk sekali ini adalah tantangan yang sebenarnya bisa dilakukan. Itu tidak pernah benar-benar dirancang untuk menjadi golf, jadi itu tidak akan pernah mengalahkan Siput apa pun: P
Membutuhkan
r
tanda (tidak ada sel berulang) untuk mengakhiri.Cobalah online . Keluaran adalah jalan yang diambil untuk kebenaran, kosong untuk kepalsuan.
sumber
Retina , 87 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online!
Sebanyak pemrosesan string 2D dimungkinkan pada Retina (atau .NET regex secara umum), ini tidak sepenuhnya ringkas ...
Penjelasan
Ini adalah genangan-banjir yang menandai semua sel dengan air
S
. Ia melakukannya dengan mencocokkan karakter yang dapat dijangkau dan kemudian mentransliterasinya keS
denganT
-mode. Isi banjir ini melewati kedua ruang danE
. Di+
awal mengulangi ini sampai output berhenti berubah.Adapun regex yang sebenarnya berisi dua kasus terpisah:
Ini cocok dengan spasi atau
E
yang persis satu sel di bawahS
. Pencocokan vertikal dilakukan dengan menghitung awalan pada garis saat ini menggunakan kelompok penyeimbang sehingga kami dapat memastikan bahwa posisi horizontal sama. Yang ini merawat air yang jatuh.Ini sangat mirip: cocok dengan
S
dan jika tersedia karakter sebelum dan sesudahnya, asalkan karakter langsung di bawahS
adalah a#
. Ini menangani penyebaran air di sepanjang tanah.Ketika kita selesai, sangat mudah untuk menentukan apakah airnya mencapai
E
. Jika ya, makaE
telah dihapus dari string di banjir-fill, dan jika tidakE
masih ada. Jadi mari kita hitung jumlahE
s:Tapi sekarang itu
0
(yang saya anggap palsu) untuk kasus uji kebenaran dan1
(yang saya anggap benar) untuk kasus uji palsu. Kami dapat membalikkan ini dengan sangat mudah dengan menghitung jumlah0
s dalam hasil ini:Selesai
sumber