Ctrl K

Формы островов с учётом симметрий

Сложная
Дана карта chart из нулей и единиц: 1 — суша, 0 — вода. Островом называется группа клеток суши, связанных по сторонам (по горизонтали или вертикали; соседство по диагонали не считается). За пределами карты — вода. Два острова считаются одинаковой формы, если один можно совместить с другим сдвигом, поворотом на 90°, 180° или 270° и (или) зеркальным отражением. Верните количество различных форм среди всех островов на карте.
Пример 1
chart=[[1, 1, 1, 0], [0, 0, 1, 0], [0, 0, 0, 0], [1, 0, 0, 0], [1, 1, 1, 0]] → 1

Оба острова — «уголки» из четырёх клеток: нижний получается из верхнего поворотом на 180°. Форма одна.

Пример 2
chart=[[1, 1, 0, 1], [0, 1, 0, 1], [0, 0, 0, 1], [1, 0, 0, 0]] → 3

Уголок из трёх клеток, вертикальный отрезок из трёх клеток и одиночная клетка — три разные формы: ни поворотом, ни отражением их не совместить.

Пример 3
chart=[[1, 0, 1], [0, 0, 0], [1, 0, 1]] → 1
Ограничения
  • 1 ≤ len(chart), len(chart[0]) ≤ 50
  • Все строки одной длины
  • chart[i][j] равно 0 или 1
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСколько разных форм у островов СредняяСемейства слов на один обмен СложнаяКого вылечить первым СложнаяКого отключить от сети СложнаяСклеить карточки контактов Средняя
загружаем Python…
Вход
chart=[[1, 1, 1, 0], [0, 0, 1, 0], [0, 0, 0, 0], [1, 0, 0, 0], [1, 1, 1, 0]]
Ожидается
1

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 80 тестов на сервере, включая скрытые.