285. Подземелье

Не решаласьСредняя

В поисках сокровищ известный археолог попал в огромную сеть двумерных пещер. Он вспомнил, что в университете как раз делал дипломную работу по этой местности: руками подсчитывал количество сталактитов, сталагмитов и сталагнатов и записывал всё это в рабочую тетрадь. Да, ошибиться легко. Приходилось проверять себя несколько раз. Теперь же у него с собой есть портативный сканер местности, который переводит всё в матрицу из 0 и 1. Только вот незадача, там нет возможности узнать количество объектов на карте. Для знаменитого археолога нет непреодолимых препятствий, а проверить свои студенческие расчеты очень хочется.

Формат ввода

Нужно реализовать метод scan, который принимает на вход карту – матрицу NxM, состоящую только из 1 (каменная порода) и 0 (пустое пространство). Матрица – это 2D карта пещеры, вид сбоку, аля платформер.

Пример карты:

[
  [1, 1, 0, 0, 0, 1, 0, 1, 1],
  [1, 1, 0, 1, 0, 1, 0, 0, 0],
  [0, 1, 0, 1, 0, 0, 0, 1, 1]
]

Части одного образования помечены одинаковыми цифрами.

[
  [1, 1, 0, 0, 0, 3, 0, 4, 4],
  [1, 1, 0, 2, 0, 3, 0, 0, 0],
  [0, 1, 0, 2, 0, 0, 0, 5, 5]
]

Метод экспортировать таким образом:

module.exports = { scan };

Проверяться будет результат вывода:

scan([...массив с картой...]);

Формат вывода

Метод scan возвращает объект с количеством каждого типа образования {ceil: 0, floor: 0, both: 0}

  • Если образование свисает с потолка и не касается пола – ceil
  • Если образование растет от пола и не касается потолка – floor
  • Если образование свисает с потолка и при этом еще и касается пола – both

Результат вывода на примере карты выше: {ceil: 2, floor: 2, both: 1}

Примечание

У одного образования может быть несколько точек касания.

​1. Пример:

[
  [1, 0, 1],
  [1, 1, 1],
  [0, 0, 0],
]
[
  [1, 0, 1],
  [1, 1, 1],
  [0, 0, 0],
]

Результат: {ceil: 1, floor: 0, both: 0}

​2. Пример:

[
  [1, 0, 1],
  [1, 1, 1],
  [0, 0, 1],
]
[
  [1, 0, 1],
  [1, 1, 1],
  [0, 0, 1],
]

Результат: {ceil: 0, floor: 0, both: 1}

Считаем, что по диагонали образования не пересекаются:

[
  [1, 0, 1],
  [0, 1, 0],
]
[
  [1, 0, 3],
  [0, 2, 0],
]

Результат: {ceil: 2, floor: 1, both: 0}

Ограничения

Ограничение времени

1 с

Ограничение памяти

64 МБ

Теги

JavaScript Node.js 12
Нужно войти, чтобы отправить решение.Войти