Вы фермер, и ваше стадо овец сбежало! о нет!
Вокруг этих овец, строя заборы, чтобы содержать их. Как фермер с ограниченным бюджетом, вы хотите использовать как можно меньше забора. К счастью для вас, они не самые умные овцы в мире и не бегают после побега.
задача
Учитывая список координат, выведите наименьшее количество сегментов забора, необходимое для содержания овец.
правила
- Овцы содержатся, если они не могут бродить (нет дыр в заборе).
- Вам не нужно содержать всех овец в одном блоке забора - может быть несколько огороженных участков, независимых друг от друга.
- Сегменты ограждения ориентированы в кардинальных направлениях.
- Каждый координатный кортеж представляет одну овцу.
- Входные данные должны быть положительными целочисленными парами
x>0
&y>0
, но могут быть отформатированы в соответствии с вашим языком.- то есть:
{{1,1},{2,1},{3,7}, .. }
или[1,2],[2,1],[3,7], ..
- то есть:
- Пустые пространства внутри огороженной зоны в порядке.
- Вы не можете предполагать, что координаты вводятся в каком-либо определенном порядке.
Например, одна овца требует, чтобы 4
сегменты забора были полностью изолированы.
Контрольные примеры
[1,1]
4
[1,1],[1,2],[2,2]
8
[2,1],[3,1],[2,3],[1,1],[1,3],[3,2],[1,2],[3,3]
12
[1,1],[1,2],[2,2],[3,7],[4,9],[4,10],[4,11],[5,10]
22
[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9]
36
[1,1],[2,2],[3,3],[4,4],[6,6],[7,7],[8,8],[9,9]
32
[2,1],[8,3],[8,4]
10
Примечания
- Вы можете предположить, что входные координаты действительны.
- Ваш алгоритм теоретически должен работать для любой достаточно большой целочисленной координаты (до максимального поддерживаемого значения вашего языка).
- Либо полная программа или функциональные ответы в порядке.
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
{1,2,3,4},{5,6,7,8} -> {1,5},{2,6},{3,7},{4,8}
x,y
вход должен быть вместе. Хорошая мысль, хотя, я не думал об этом сам.Ответы:
JavaScript (ES6),
251244275 байтКак?
Мы используем рекурсивную функцию P () для создания списка всех возможных разделов входного списка. Эта функция в настоящее время является неоптимальной в том смысле, что она возвращает несколько дублированных разделов, что, однако, не меняет конечный результат.
Для каждого раздела мы вычисляем количество заборов, необходимое для окружения всех овец в каждой группе прямоугольником. Сумма этих заборов дает оценку раздела. В итоге мы возвращаем самый низкий балл.
Контрольные примеры
Показать фрагмент кода
источник
[ [1,1],[2,2] ] , [ [1,2] ]
?k ,
62 58 5755 байтовПопробуйте онлайн!
источник