Заполнение коня - это заполнение при помощи соединения шахматной фигуры коня. В частности:
1 1
1 1
0
1 1
1 1
(0 - начальная точка, 1 - подключенные ячейки)
Вызов
Учитывая двумерную сетку пространств и стен и начальное местоположение, выполните заполнение рыцаря на сетке. Самый короткий код выигрывает.
правила
Вы можете принимать и выводить данные в любом формате, который вам нравится (изображение, строка, массив, что угодно). Вы можете взять начальное местоположение как часть входной сетки или как отдельную координату. Для целей этого объяснения будет использоваться следующий формат:
######## # = wall ######## x = initial location ## x ## ## ## ######## ## ## ######## ########
Выход - копия входной сетки с добавленным результатом заполнения рыцаря
Ваша заливка не должна быть того же «цвета», что и пространство или стены, но может совпадать с маркером исходного местоположения. Например, учитывая изображение выше, допустимый вывод будет:
######## # = wall ######## @ = fill (could also have been x) ## @ @## ## @ @## ######## ##@ @ ## ######## ########
Вы можете предположить, что входная сетка всегда будет содержать двухэлементную стенку со всех сторон
- Вы можете предположить, что первоначальное местоположение никогда не будет внутри стены
- Вы можете предположить, что сетка никогда не будет больше 1000x1000
- Встроенные в порядке
- Самый короткий код (в байтах) выигрывает
Тестовые случаи
Во всех тестовых случаях #
обозначает стенку, обозначает пустое пространство и
x
обозначает начальное местоположение заливки. @
обозначает заполнение вывода.
Input 1:
########
########
## x ##
## ##
########
## ##
########
########
Output 1:
########
########
## @ @##
## @ @##
########
##@ @ ##
########
########
Input 2:
############
############
## ## x##
## ## ##
##### ##
## ##
############
############
Output 2:
############
############
## ##@@@@@##
##@##@@@@@##
#####@@@@@##
## @@@@@@@##
############
############
Input 3:
####################
####################
## ## ##
## ## ##
## ## ######## ##
## ## ######## ##
## ## ## ## ##
## ## ## ## ##
## ## ## ## ##
## ## ## ## ##
## ## ######## ##
## ## ######## ##
## ## ## ##
## ## x## ##
## ############ ##
## ############ ##
## ##
## ##
####################
####################
Output 3:
####################
####################
##@@##@@@@@@@@@@@@##
##@@##@@@@@@@@@@@@##
##@@##@@########@@##
##@@##@@########@@##
##@@##@@## ##@@##
##@@##@@## ##@@##
##@@##@@## ##@@##
##@@##@@## ##@@##
##@@##@@########@@##
##@@##@@########@@##
##@@##@@@@@@@@##@@##
##@@##@@@@@@@@##@@##
##@@############@@##
##@@############@@##
##@@@@@@@@@@@@@@@@##
##@@@@@@@@@@@@@@@@##
####################
####################
Input 4:
################
################
## ###
## x ###
## ####### ###
## ####### ###
## ## ## ###
## ## ## ###
## ## ## ###
## ######## ##
## ######## ##
## ## ##
## ## ##
################
################
Output 4:
################
################
## @ @ ###
## @ @ @ ###
## ####### ###
##@ ####### @###
## ## ## ###
## @## ##@ ###
## ## ## ###
##@ ########@ ##
## ######## ##
## @ @ ## @##
## @ @## ##
################
################
Input 5:
##############
##############
## ###
## ###
## ###
## ### ###
## #x# ###
## ### ###
## ###
## ###
## ###
##############
##############
Output 5:
##############
##############
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@###@@@###
##@@@#@#@@@###
##@@@###@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##############
##############
Ответы:
Октава, 73 байта
Демо онлайн!
* Некоторые изменения применяются для запуска в rextester.
Функция, которая принимает 2d массив 0 & 2 в качестве стены и массив 0 & 1 в качестве исходного местоположения и выводит массив 0 & 1 & 2.
источник
pkg load ...
при запуске вне тестовой среды? Еслиimdilate
&de2bi
доступны без явного импорта, это нормально.-auto
удаленную, это не проблема, и я предполагаю, что этот ответ не использует никаких новых функций.JavaScript (ES6), 116 байт
Основано на моем ответе « Обнаружить провальные замки» . Заполняет с помощью
x
s.источник
Python 3 ,
394 387 381 356 352 347 319 313 154139 байтexcept:0
try: except
блока и нескольких других гольфовg[(a,b)]
как разg[a,b]
Попробуйте онлайн!
источник
except:pass
вместо этого?except:0
Mathematica, 117 байт
Обычная история: мощные встроенные модули, но длинные имена ...
Попробуйте в песочнице Wolfram!
Требуется два входа: сначала входная сетка в виде массива
0
s (для стен) и1
s (для пробелов), затем одно целое число для начальной позиции, найденное путем нумерации сетки вдоль строк сверху вниз, напримерВы можете вызвать функцию, как
HighlightGraph[...~Prepend~h]&[{{0,0,...,0}, {0,0,...,0}, ..., {0,0,...,0}}, 20]
.KnightTourGraph
Функция строит граф с вершинами , соответствующие позиции в сетке и ребра , соответствующие действительные движения рыцарских, то мы беремSubgraph
из вершин, которые не являются стенами, и найтиConnectedComponents
в исходной вершине. Выходные данные представляют собой график (показанный повернутым на 90 ° против часовой стрелки) с непустыми вершинами, выделенными красным, а заполненные вершины, выделенными желтым. Например, для первого тестового примера вывод выглядит так:источник
f=...
f[{0,...,0;0,...,0}, 19]
и тому подобное с треском провалились.HighlightGraph[g,ConnectedComponents[h=Subgraph[g=KnightTourGraph@@Dimensions@#,Flatten@#~Position~1],#2]~Prepend~h]&[{{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,1,1,1,1,0,0},{0,0,1,1,1,1,0,0},{0,0,0,0,0,0,0,0},{0,0,1,1,1,1,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}},20]
(для первого теста). Я отредактировал это в вопросе - извините, этого не было с самого начала!