背景
我通过将盒子放在矩形房间中来构造一个简单的障碍物路线。现在,我想计算解决问题的本质上不同的方法。我需要你为此写一个程序。
输入项
您的输入是字符的非空矩形数组.#
。点.
是空白,#
是障碍。
一个路径通过障碍课程开始在AT右下角的左上角和结束,并进入只向右或向下。同样,有效路径不能穿过障碍物。以下是一些使用+
-characters 绘制的示例:
Valid path Invalid path Invalid path Invalid path
++........ ++........ +++++..... ..+.......
.++++++#.. .+.....#.. ....+++#++ ..++...#..
......+#.. .+.++++#.. .......#.+ ...+++.#..
....#.++++ .+++#.++++ ....#....+ ....#+....
两条路径是基本相似的1,如果可以通过移动一个被转化成其它+
在时间。中间路径也必须有效,因此您不能在障碍物上弯曲路径。例如,这里的前两个路径本质上是相似的,但是第三个路径与它们本质上是不同的,因为它不能绕过两个障碍:
++........ +......... +++++++++.
.+++++.#.. ++.....#.. .......#+.
.....+.#.. .++++++#.. .......#++
....#+++++ ....#.++++ ....#....+
输出量
您的输出是穿过障碍物路线的基本不同路径的数量。换句话说,如果将所有有效路径划分为本质上相似的路径类别,则输出为类别数。请注意,如果没有有效的路径,则此数字可能为0。
规则和计分
您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。没有时间限制,只是您应该在提交每个测试用例之前对程序进行评估。
测试用例
....
....
.... => 1
...#
....
...# => 0
#..#
..#.
.... => 0
......
......
..##..
......
...... => 2
......
...#..
......
..#...
#..... => 3
......
..#...
......
....#.
#..... => 4
.......
##.....
....###
...#...
..##.#.
#....#.
..#.... => 0
......#.
..##....
...#....
.......#
....#...
.##...#.
....#...
##...... => 7
.........
.#.#.#.#.
.........
#.#...#.#
.........
.#.#.#.#.
......... => 17
..........
.#........
..........
.....#....
#.........
........#.
......#...
.......... => 10
.........
.#.......
.........
...#.....
.........
.....#...
.........
.......#.
......... => 16
1正确的技术术语是“同位的”。
+
”实质上是指路径的一个角被倒置为相反方向的角。
+
在同一时间 ”?这是否意味着基本相似的路径必须具有相同的长度?