Возьмите двухмерную область пространства, разделенную на выровненные по оси единичные квадратные элементы с центрами, выровненными через целые интервалы. Ребро называется внутренним, если оно совместно используется двумя элементами, в противном случае это внешнее ребро.
Ваша цель - найти минимальное количество соседних элементов, которые необходимо пройти, чтобы достичь внешнего ребра, начиная с центра каждого элемента, известного как traversal distance
, или distance
для краткости. Вы можете проходить только через край (то есть без углового резания / диагонального перемещения). Обратите внимание, что «внешние элементы» (элементы, которые имеют по крайней мере один внешний край), как полагают, должны пройти через 0
соседние элементы, чтобы достичь внешнего края.
вход
Входные данные представляют собой список неотрицательных целочисленных парных координат, обозначающих (x, y) центра всех элементов. Предполагается, что нет перекрывающихся элементов (т. Е. Пара x / y однозначно идентифицирует элемент). Вы не можете предполагать что-либо о порядке ввода элементов.
Вы можете преобразовать источник ввода в любое место (например, 0,0 или 1,1 и т. Д.).
Вы можете предположить, что все входные элементы связаны, или, другими словами, возможно перейти от любого одного элемента к любому другому элементу, используя правила выше. Обратите внимание, что это не означает, что 2D-область просто связана; в нем могут быть отверстия.
Пример: ниже приведен неверный ввод.
0,0
2,0
проверка ошибок не требуется.
Ввод может быть из любого источника (файл, stdio, параметр функции и т. Д.)
Выход
Выходными данными должен быть список координат, идентифицирующих каждый элемент, и соответствующее целочисленное расстояние, пройденное для достижения края. Вывод может быть в любом порядке элементов (например, вам не нужно выводить элементы в том же порядке, что и входные данные).
Вывод может быть любым источником (файл, stdio, возвращаемое значение функции и т. Д.)
Любые выходные данные, которые соответствуют координате элемента с его внешним расстоянием, хороши, например, все это хорошо:
x,y: distance
...
[((x,y), distance), ...]
[(x,y,distance), ...]
Примеры
Текстовые примеры ввода находятся в форме x,y
, с одним элементом на строку; Вы можете изменить это в удобный формат ввода (см. правила формата ввода).
Текстовые примеры выводятся в формате x,y: distance
с одним элементом на строку; опять же, вы можете изменить это в удобный формат вывода (см. правила формата вывода).
Графические фигуры имеют нижнюю левую границу как (0,0), а числа внутри представляют ожидаемое минимальное расстояние, пройденное для достижения внешнего края. Обратите внимание, что эти цифры предназначены только для демонстрационных целей; ваша программа не должна выводить их.
Пример 1
вход:
1,0
3,0
0,1
1,2
1,1
2,1
4,3
3,1
2,2
2,3
3,2
3,3
Выход:
1,0: 0
3,0: 0
0,1: 0
1,2: 0
1,1: 1
2,1: 0
4,3: 0
3,1: 0
2,2: 1
2,3: 0
3,2: 0
3,3: 0
графическое представление:
Пример 2
вход:
4,0
1,1
3,1
4,1
5,1
6,1
0,2
1,2
2,2
3,2
4,2
5,2
6,2
7,2
1,3
2,3
3,3
4,3
5,3
6,3
7,3
8,3
2,4
3,4
4,4
5,4
6,4
3,5
4,5
5,5
выход:
4,0: 0
1,1: 0
3,1: 0
4,1: 1
5,1: 0
6,1: 0
0,2: 0
1,2: 1
2,2: 0
3,2: 1
4,2: 2
5,2: 1
6,2: 1
7,2: 0
1,3: 0
2,3: 1
3,3: 2
4,3: 2
5,3: 2
6,3: 1
7,3: 0
8,3: 0
2,4: 0
3,4: 1
4,4: 1
5,4: 1
6,4: 0
3,5: 0
4,5: 0
5,5: 0
графическое представление:
Пример 3
вход:
4,0
4,1
1,2
3,2
4,2
5,2
6,2
8,2
0,3
1,3
2,3
3,3
4,3
5,3
6,3
7,3
8,3
9,3
1,4
2,4
3,4
4,4
5,4
6,4
7,4
8,4
9,4
2,5
3,5
4,5
5,5
6,5
9,5
10,5
11,5
3,6
4,6
5,6
9,6
10,6
11,6
6,7
7,7
8,7
9,7
10,7
11,7
выход:
4,0: 0
4,1: 0
1,2: 0
3,2: 0
4,2: 1
5,2: 0
6,2: 0
8,2: 0
0,3: 0
1,3: 1
2,3: 0
3,3: 1
4,3: 2
5,3: 1
6,3: 1
7,3: 0
8,3: 1
9,3: 0
1,4: 0
2,4: 1
3,4: 2
4,4: 2
5,4: 2
6,4: 1
7,4: 0
8,4: 0
9,4: 0
2,5: 0
3,5: 1
4,5: 1
5,5: 1
6,5: 0
9,5: 0
10,5: 0
11,5: 0
3,6: 0
4,6: 0
5,6: 0
9,6: 0
10,6: 1
11,6: 0
6,7: 0
7,7: 0
8,7: 0
9,7: 0
10,7: 0
11,7: 0
графическое представление:
счет
Это код гольф. Самый короткий код в байтах побеждает. Применяются стандартные лазейки. Разрешены любые встроенные модули, кроме специально разработанных для решения этой проблемы.