Buat ular mengisi labirin apa saja (sampai macet).
Ular
Ular mulai pada titik awal yang diberikan, menunjuk EAST . Bergerak dengan selalu memiliki dinding atau bagian dari tubuhnya segera ke KIRI kepalanya (" pengikut aturan dinding kiri "), sampai macet karena keempat arah di sekitar kepalanya ditempati. (Catatan: ular yang macet mungkin tidak dapat mengisi semua ruang yang bisa dijangkau, tapi itu bukan tujuannya!)
Tantangan
Tulis program atau fungsi yang menerima labirin sebagai input dalam bentuk teks 2D:
- Input dapat dalam format apa pun yang masuk akal: misalnya daftar string, string tunggal dengan baris baru, file.
- Labirin memiliki dinding ("
#"), ruang kosong ("") dan tepat satu titik awal ("o"). Anda dapat memilih untuk
- bisa berasumsi bahwa baris dan kolom pertama dan terakhir seluruhnya adalah tembok;
- atau berasumsi bahwa setiap input dianggap memiliki lapisan luar dinding implisit
Anda dapat mengasumsikan bahwa titik awal memiliki dinding (atau dinding implisit) langsung di atasnya (UTARA) dan bahwa ular dapat membuat langkah awal yang valid dalam arah TIMUR atau SELATAN.
- Anda dapat mengasumsikan bahwa tidak ada karakter lain yang ada dalam teks (kecuali baris baru jika input Anda membutuhkannya).
- Anda dapat mengasumsikan bahwa semua garis memiliki panjang yang sama.
dan mencetak / mengembalikan "labirin terisi" sebagai output, dengan snapshot ular saat macet :
- Tubuh ular diwakili oleh karakter yang
>v<^menunjukkan di mana segmen berikutnya - Titik awal ular adalah arahnya di awal ("
>" kecuali jika harus segera berbalik) atauokarakter (tidak perlu konsisten) - Titik akhir dari ular adalah sebuah
okarakter
Mencetak gol
Golf kode biasa: kode terpendek menang
Contoh
in:
#################################
# o #
# #
# ## ### ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ### ## #
# ## ##### ## #
# ## ##### ## #
# ## ### ## #
# ## ## #
# #
# #
#################################
out:
#################################
#>>>>>>>>>>>>>>>>>>>v>>>>>>>>>>v#
#^>>>>>>>>>>>>>>>>>v>>>>>>>>>>vv#
#^^ ##>>>>>>v###o>>>>>v## vv#
#^^ ##>^ ##>>>>^## >v## vv#
#^^ ##^ ## ## v## vv#
#^^ ##^ ## ## v## vv#
#^^ ##>^ ## ## >v## vv#
#^^ ##^< ### v<## vv#
#^^ ##^ ##### v## vv#
#^^ ##^ ##### v## vv#
#^^ ##^< ### v<## vv#
#^^ ##^<<<<<<<<<<<<<<<<## vv#
#^^<<<<<<<<<<<<<<<<<<<<<<<<<<<<v#
#^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<#
#################################
Animasi (untuk tujuan ilustrasi):
Sunting: perhatikan bahwa, jika ragu, ular itu harus "menjaga tangan kirinya" di dinding yang sudah ada, mengikuti sudut, tidak melompat ke dinding 1-blok jauhnya.
Terima kasih Jonathan Allan untuk membawanya, dan Draco18 untuk snapshot penjelasan di atas.
Contoh lainnya
in:
####################
# o# #
# ###
# #
# ## #
# ###
####################
out:
####################
#>>>>>>>>>>>>>>vv# #
#^>>>>>>>>>>>>vvv###
#^^ v<<<o<<<<v>>v#
#^^<<<<##^<<<<<<v<<#
#^<<<<<<<<<<<<<<<###
####################
in:
####################
# o #####
# #####
# #
# ##
####################
out:
####################
# >>>>v#####
# v#####
# >>>>o#
# ##
####################
in:
################
#o #
# ########## #
# # # #
# # # #
# # # #
# # # # #
# # # #
# # # #
# # # #
# ############ #
# #
################
out:
################
#>>>>>>>>>>>>>v#
#>>v##########v#
#^#>>>>>>>>>v#v#
#^#>>>>>>>>vv#v#
#^#^>>>>>>vvv#v#
#^#^^# vvv#v#
#^#^^o<<<<<vv#v#
#^#^^<<<<<<<v#v#
#^#^<<<<<<<<<#v#
#^############v#
#^<<<<<<<<<<<<<#
################

