Задний план
Я построил простую полосу препятствий, поместив коробки в прямоугольную комнату. Теперь я хочу подсчитать количество принципиально разных способов, которыми это можно решить. Мне нужно, чтобы ты написал мне программу для этого.
вход
Ваш ввод представляет собой непустой прямоугольный массив символов .#
. Точки .
- это пустое пространство, и они #
являются препятствиями.
Путь через препятствие курс начинается в верхнем левом углу и заканчивается в правом нижнем углу, и идет только вправо или вниз. Кроме того, действительный путь не может пройти через препятствие. Вот несколько примеров, нарисованных с помощью +
символов -characters:
Valid path Invalid path Invalid path Invalid path
++........ ++........ +++++..... ..+.......
.++++++#.. .+.....#.. ....+++#++ ..++...#..
......+#.. .+.++++#.. .......#.+ ...+++.#..
....#.++++ .+++#.++++ ....#....+ ....#+....
Два пути по существу похожи 1, если один может быть преобразован в другой, перемещаясь по одному +
за раз. Промежуточные пути также должны быть действительными, чтобы вы не могли согнуть путь над препятствием. Например, первые два пути здесь, по сути, похожи, но третий существенно отличается от них, поскольку он не может шевелиться по двум препятствиям:
++........ +......... +++++++++.
.+++++.#.. ++.....#.. .......#+.
.....+.#.. .++++++#.. .......#++
....#+++++ ....#.++++ ....#....+
Выход
Ваш вывод - это количество принципиально разных путей через полосу препятствий. Другими словами, если все действительные пути делятся на классы по существу одинаковых путей, на выходе получается количество классов. Обратите внимание, что это число может быть 0, если нет действительных путей.
Правила и оценки
Вы можете написать полную программу или функцию. Побеждает меньшее количество байтов, и стандартные лазейки запрещены. Нет ограничений по времени, за исключением того, что вы должны оценивать свою программу в каждом тестовом примере перед ее отправкой.
Контрольные примеры
....
....
.... => 1
...#
....
...# => 0
#..#
..#.
.... => 0
......
......
..##..
......
...... => 2
......
...#..
......
..#...
#..... => 3
......
..#...
......
....#.
#..... => 4
.......
##.....
....###
...#...
..##.#.
#....#.
..#.... => 0
......#.
..##....
...#....
.......#
....#...
.##...#.
....#...
##...... => 7
.........
.#.#.#.#.
.........
#.#...#.#
.........
.#.#.#.#.
......... => 17
..........
.#........
..........
.....#....
#.........
........#.
......#...
.......... => 10
.........
.#.......
.........
...#.....
.........
.....#...
.........
.......#.
......... => 16
1 Правильный технический термин - «гомотопный» .
+
» я, по сути, имею в виду, что один угол пути инвертирован в угол противоположного направления.
+
в то время »? Означает ли это, что по существу одинаковые пути должны быть одинаковой длины?