Для непустого двумерного массива, состоящего из 0
и 1
, найдите количество квадратов, у которых все 4 угла 1
. Квадраты не должны быть "вертикальными". Все строки гарантированно имеют одинаковую длину.
Разумные методы ввода / вывода допускаются.
Testcases:
0001000
1000000
0000000
0000100
0100000
Это возвращается 1
.
10101
00000
10100
00000
10001
Это возвращается 2
.
1111
1111
1111
1111
Это возвращается 20
.
Это код-гольф . Кратчайший ответ в байтах побеждает. Применяются стандартные лазейки .
1
с на квадрате, так что каждый1
равноотстоящий по периметру от своих двух соседей.Ответы:
JavaScript (ES6),
127124119 байтовСохранено 3 байта благодаря nderscore
Как?
Эта функция выполняет итерацию по всем парам ячеек (x, y) , (X, Y) входной матрицы m , так что:
Каждая подходящая пара описывает координаты потенциального ребра квадрата. Уравнения гарантируют, что каждое ребро тестируется только один раз.
Мы используем вектор [dx, dy] = [X - x, Y - y], повернутый на 90 ° по часовой стрелке, чтобы проверить ячейки, расположенные в [x - dy, y + dx] и [X - dy, Y + dx] . Если они оба содержат 1 , мы нашли правильный квадрат.
Контрольные примеры
Показать фрагмент кода
источник
g=(a,b)=>(m[b+X-x]||0)[a-Y+y]
-1 байт: использовать|n
вместо&&n
MATL , 20 байтов
Вход представляет собой матрицу.
Попробуйте онлайн!
Как это устроено
Он находит все координаты ненулевых элементов входной сетки и представляет их в виде комплексных чисел, так что индексы строк и столбцов соответствуют действительной и мнимой частям соответственно.
Затем код генерирует массив всех комбинаций (порядок не имеет значения) этих чисел, взятых по 4 за раз. Каждая комбинация представляет собой квадрат кандидата. Для каждой комбинации вычисляется матрица парных абсолютных разностей (т.е. расстояния в комплексной плоскости) 4 × 4. Это симметричная матрица с нулями вдоль ее главной диагонали. Текущая комбинация образует квадрат тогда и только тогда, когда матрица содержит ровно 3 различных значения (это будет сторона квадрата, квадратная диагональ и ноль):
С другой стороны, например, неквадратный прямоугольник даст 4 различных значения (две стороны, одно диагональное значение и ноль);
и общий четырехугольник может иметь до 7 значений (четыре стороны, две диагонали и ноль):
источник