Arborally удовлетворены заданное значение является 2D множества точек, что для любой оси выровнено прямоугольника , который может быть образован с использованием двух точек в наборе как противоположные углы, что прямоугольник содержит или штрихи , по меньшей мере , один другую точку. Вот эквивалентное определение из Википедии:
Множество точек называется выполненным в произвольном порядке, если выполняется следующее свойство: для любой пары точек, которые не лежат на одной горизонтальной или вертикальной линии, существует третья точка, которая лежит в прямоугольнике, натянутом на первые две точки ( либо внутри, либо на границе).
На следующем рисунке показано, как формируются прямоугольники. Этот набор точек НЕ выполняется произвольно, потому что этот прямоугольник должен содержать хотя бы еще одну точку.
В искусстве ASCII этот набор точек может быть представлен как:
......
....O.
......
.O....
......
Небольшая модификация может сделать это в целом удовлетворительным:
......
....O.
......
.O..O.
......
Выше вы можете видеть, что все прямоугольники (из которых только один) содержат как минимум три точки.
Вот еще один пример более сложного набора точек, который в целом выполняется:
Для любого прямоугольника, который можно нарисовать, охватывающий две точки, этот прямоугольник содержит хотя бы одну другую точку.
Соревнование
Учитывая прямоугольную сетку точек (которую я представляю O
) и пустое пространство (которое я представляю .
), выведите истинное значение, если оно выполнено произвольно, или значение false, если это не так. Это код-гольф.
Дополнительные правила:
- Вы можете выбрать символы
O
и.
заменить их любой другой парой печатных символов ASCII. Просто укажите, какое отображение символов использует ваша программа. - Сетка всегда будет прямоугольной. Завершающий перевод строки разрешен.
Больше примеров
Дословно доволен:
.OOO.
OO...
.O.OO
.O..O
....O
..O..
OOOO.
...O.
.O.O.
...OO
O.O.
..O.
OOOO
.O.O
OO..
...
...
...
...
..O
...
O.....
O.O..O
.....O
OOO.OO
Не полностью удовлетворены
..O..
O....
...O.
.O...
....O
..O..
O.OO.
...O.
.O.O.
...OO
O.....
..O...
.....O
Ответы:
Улитки , 29
30 39байтОн работает, отрисовывая 2 стороны прямоугольника, а затем проверяя, есть ли какой-нибудь квадрат, содержащий O, такой, что перемещение по прямой линии от квадрата в 2 из кардинальных направлений приведет к попаданию на сторону прямоугольника.
Печатает максимум 1 и площадь сетки, если вход «арборально удовлетворен»; в противном случае 0.
источник
Oracle SQL 11.2,
364344 байта: g - сетка в виде строки
: w - ширина сетки
Не возвращает ни одной строки как верной, возвращает прямоугольники, которые не соответствуют критериям, как ложные
Un-golfed
Представление v вычисляет координаты каждой точки O.
Первая часть минуса возвращает все прямоугольники, предложение where гарантирует, что точка не может быть соединена с самой собой.
Вторая часть ищет третью точку в каждом прямоугольнике. Эта точка должна иметь одну координату, x или y, равную этой координате для одной из двух точек, определяющих прямоугольник. Другая координата этой третьей точки должна находиться в диапазоне, ограниченном этой координатой для каждой из точек, определяющих прямоугольник.
Последняя часть предложения where гарантирует, что третья точка не является одной из двух точек, определяющих прямоугольник.
Если все прямоугольники имеют хотя бы третью точку, то первая часть минуса равна второй части, и запрос ничего не возвращает.
источник
MATL , 38 байт
В качестве входных данных используется двумерный массив символов, разделенные строками
;
. Итак, первый примерОстальные тестовые случаи в этом формате выглядят следующим образом.
Дословно доволен:
Не полностью удовлетворен
Попробуйте онлайн! Вы также можете проверить все тестовые случаи одновременно .
объяснение
Код сначала получает координаты символов
O
на входе. Затем он использует два вложенных цикла. Внешний цикл выбирает каждую точку P (два набора ее координат), сравнивает со всеми точками и сохраняет точки, которые отличаются от P в двух координатах. Это те точки, которые могут образовывать прямоугольник с помощью P. Назовите их набором R.Внутренний цикл выбирает каждую точку T из R и проверяет, содержит ли прямоугольник, определенный P и T, хотя бы 3 точки. Для этого он вычитает P из всех точек; то есть перемещает начало координат в P. Точка находится в прямоугольнике, если каждая из ее координат, разделенная на соответствующую координату T, находится в замкнутом интервале [0, 1].
источник
PHP,
1123 байта,851 байт, 657 байт(новичок php)
объяснение (закомментированный код):
источник
C, 289 байтов
Требуется завершающий перевод строки, что разрешено (без перевода строки код был бы на два байта больше). Выходы 0 (не удовлетворены в целом) или 1 (выполнены в целом).
источник