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