Fondo
He construido una carrera de obstáculos simple colocando cajas en una habitación rectangular. Ahora quiero contar la cantidad de formas esencialmente diferentes en las que se puede resolver. Necesito que me escribas un programa para eso.
Entrada
Su entrada es una matriz rectangular no vacía de los caracteres .#
. Los puntos .
son espacios vacíos, y #
son obstáculos.
Un camino a través de la carrera de obstáculos comienza en la esquina superior izquierda y termina en la esquina inferior derecha, y va solo hacia la derecha o hacia abajo. Además, una ruta válida no puede pasar por un obstáculo. Aquí hay algunos ejemplos dibujados con +
caracteres:
Valid path Invalid path Invalid path Invalid path
++........ ++........ +++++..... ..+.......
.++++++#.. .+.....#.. ....+++#++ ..++...#..
......+#.. .+.++++#.. .......#.+ ...+++.#..
....#.++++ .+++#.++++ ....#....+ ....#+....
Dos caminos son esencialmente similares 1 si uno puede transformarse en el otro moviendo uno +
a la vez. Las rutas intermedias también deben ser válidas, por lo que no puede doblar una ruta sobre un obstáculo. Por ejemplo, los primeros dos caminos aquí son esencialmente similares, pero el tercero es esencialmente diferente de ellos, ya que no se puede mover sobre los dos obstáculos:
++........ +......... +++++++++.
.+++++.#.. ++.....#.. .......#+.
.....+.#.. .++++++#.. .......#++
....#+++++ ....#.++++ ....#....+
Salida
Su salida es el número de caminos esencialmente diferentes a través de la carrera de obstáculos. En otras palabras, si todas las rutas válidas se dividen en clases de rutas esencialmente similares, la salida es el número de clases. Tenga en cuenta que este número puede ser 0, si no hay rutas válidas.
Reglas y puntaje
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten. No hay límites de tiempo, excepto que debe evaluar su programa en cada caso de prueba antes de enviarlo.
Casos de prueba
....
....
.... => 1
...#
....
...# => 0
#..#
..#.
.... => 0
......
......
..##..
......
...... => 2
......
...#..
......
..#...
#..... => 3
......
..#...
......
....#.
#..... => 4
.......
##.....
....###
...#...
..##.#.
#....#.
..#.... => 0
......#.
..##....
...#....
.......#
....#...
.##...#.
....#...
##...... => 7
.........
.#.#.#.#.
.........
#.#...#.#
.........
.#.#.#.#.
......... => 17
..........
.#........
..........
.....#....
#.........
........#.
......#...
.......... => 10
.........
.#.......
.........
...#.....
.........
.....#...
.........
.......#.
......... => 16
1 El término técnico correcto es "homotópico" .
+
" me refiero esencialmente a que una esquina del camino se invierte en una esquina en la dirección opuesta.
+
a la vez "? ¿Esto implica que las rutas esencialmente similares deben tener la misma longitud?