ทำให้งูเต็มเขาวงกตใด ๆ (จนกว่าจะได้รับการติด)
งู
งูเริ่มต้นที่จุดที่กำหนดเริ่มต้นชี้EAST มันเคลื่อนที่โดยมีกำแพงหรือส่วนใดส่วนหนึ่งของร่างกายไปที่หัวซ้ายทันที(" ผู้ติดตามผนังกฎซ้ายมือ) ") จนกระทั่งมันติดอยู่เพราะทั้งสี่ทิศทางรอบหัวของมันถูกยึดครอง (หมายเหตุ: งูที่ติดอยู่อาจไม่สามารถเติมเต็มทุกพื้นที่ที่เข้าถึงได้ แต่นั่นไม่ใช่เป้าหมาย!)
ความท้าทาย
เขียนโปรแกรมหรือฟังก์ชั่นที่ยอมรับเขาวงกตเป็นอินพุตในรูปแบบของข้อความ 2D:
- อินพุตสามารถอยู่ในรูปแบบที่สมเหตุสมผล: เช่นรายการสตริงสตริงเดี่ยวที่มีบรรทัดใหม่ไฟล์
- เขาวงกตมีผนัง ("
#
") พื้นที่ว่าง ("") และจุดเริ่มต้นหนึ่งจุด ("
o
") คุณสามารถเลือกที่จะ
- อาจสมมติว่าแถวแรกและแถวสุดท้ายและคอลัมน์เป็นผนังทั้งหมด
- หรือสมมติว่าทุกอินพุตถือว่ามีผนังชั้นนอกโดยปริยาย
คุณสามารถสันนิษฐานได้ว่าจุดเริ่มต้นมีกำแพง (หรือผนังโดยปริยาย) ที่อยู่เหนือมันโดยตรง (NORTH) และงูสามารถเคลื่อนที่เริ่มต้นที่ถูกต้องในทิศทาง EAST หรือ SOUTH
- คุณสามารถสันนิษฐานได้ว่าไม่มีตัวอักษรอื่น ๆ อยู่ในข้อความ (ยกเว้นการขึ้นบรรทัดใหม่หากข้อมูลของคุณต้องการ)
- คุณสามารถสันนิษฐานได้ว่าทุกบรรทัดมีความยาวเท่ากัน
และพิมพ์ / ส่งคืน "เขาวงกตที่เต็มไป" เป็นเอาต์พุตด้วยสแนปชอตของงูในขณะที่มันติดอยู่ :
- ร่างกายของงูนั้นมีตัวละครที่
>v<^
ชี้ไปยังส่วนต่อไปของมัน - จุดเริ่มต้นของงูคือทิศทางของมันในช่วงเริ่มต้น ("
>
" เว้นแต่ว่ามันจะต้องเลี้ยวทันที) หรือo
ตัวอักษร (ไม่จำเป็นต้องสอดคล้องกัน) - จุดสิ้นสุดของงูคือ
o
ตัวละคร
เกณฑ์การให้คะแนน
กอล์ฟรหัสปกติ: รหัสที่สั้นที่สุดชนะ
ตัวอย่าง
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#
#^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<#
#################################
เคลื่อนไหว (เพื่อจุดประสงค์ภาพประกอบ):
แก้ไข: โปรดทราบว่าเมื่อมีข้อสงสัยงูควร "จับมือซ้าย" ไว้บนกำแพงมันติดอยู่แล้วตามมุมไม่กระโดดไปที่กำแพง 1 ช่วงตึก
ขอบคุณ Jonathan Allan ที่นำมันขึ้นมาและ Draco18s สำหรับภาพรวมที่อธิบายข้างต้น
ตัวอย่างอื่น ๆ
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#
#^<<<<<<<<<<<<<#
################