- Описание
- Отправленные решения
15. Подземелье
В поисках сокровищ известный археолог попал в огромную сеть двумерных пещер. Он вспомнил, что в университете как раз делал дипломную работу по этой местности: руками подсчитывал количество сталактитов, сталагмитов и сталагнатов и записывал всё это в рабочую тетрадь. Да, ошибиться легко. Приходилось проверять себя несколько раз. Теперь же у него с собой есть портативный сканер местности, который переводит всё в матрицу из 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 МБ