Зробіть, щоб змія заповнювала будь-який лабіринт (поки він не застряг).
Змія
Змія починається з заданої початкової точки, вказуючи СХІД . Вона рухається, завжди маючи стіну або частину її тіла відразу до ЛІВОРУЧ його голови ( « ліва стіна правило повторювача »), поки він не застряє , тому що всі чотири сторони навколо його голови зайняті. (Примітка: застрягла змія, можливо, не може заповнити весь доступний простір, але це не мета!)
Змагання
Напишіть програму або функцію, яка приймає лабіринт як вхід у вигляді двовимірного тексту:
- Вхід може бути у будь-якому розумному форматі: наприклад, список рядків, одна рядок з новими рядками, файл.
- У лабіринті є стіни ("
#
"), порожні місця ("") і рівно одна відправна точка ("
o
"). Ви можете вибрати
- або припустити, що перший і останній ряд і стовпець повністю є стінами;
- або припустимо, що кожен вхід вважається неявним зовнішнім шаром стін
Ви можете припустити, що початковою точкою є стіна (або неявна стіна) безпосередньо над нею (Північ) і що змія може зробити дійсний вихідний хід у напрямку СХІД чи ПІВНЯ.
- Ви можете припустити, що в тексті немає інших символів (крім нових рядків, якщо вони потрібні для вашого введення).
- Можна припустити, що всі лінії однакової довжини.
і друкує / повертає "заповнений лабіринт" як вихід, із знімком змії в той момент, коли вона застрягла :
- Тіло змії представлено символами, які
>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 кварталі.
Дякуємо Джонатану Аллану за його підняття, а Драко18 за пояснювальний знімок вище.
Інші приклади
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#
#^<<<<<<<<<<<<<#
################