fundo
Eu construí uma pista de obstáculos simples colocando caixas em uma sala retangular. Agora, quero contar o número de maneiras essencialmente diferentes pelas quais ele pode ser resolvido. Eu preciso que você me escreva um programa para isso.
Entrada
Sua entrada é uma matriz retangular não vazia dos caracteres .#
. Os pontos .
são espaços vazios e os #
obstáculos.
Um caminho através da pista de obstáculos começa no canto superior esquerdo e termina no canto inferior direito, e vai apenas para a direita ou para baixo. Além disso, um caminho válido não pode passar por um obstáculo. Aqui estão alguns exemplos desenhados com +
-characters:
Valid path Invalid path Invalid path Invalid path
++........ ++........ +++++..... ..+.......
.++++++#.. .+.....#.. ....+++#++ ..++...#..
......+#.. .+.++++#.. .......#.+ ...+++.#..
....#.++++ .+++#.++++ ....#....+ ....#+....
Dois caminhos são essencialmente similares 1 se um pode ser transformado no outro movendo um de +
cada vez. Os caminhos intermediários também devem ser válidos, para que você não possa dobrar um caminho sobre um obstáculo. Por exemplo, os dois primeiros caminhos aqui são essencialmente semelhantes, mas o terceiro é essencialmente diferente deles, pois não pode ser contornado pelos dois obstáculos:
++........ +......... +++++++++.
.+++++.#.. ++.....#.. .......#+.
.....+.#.. .++++++#.. .......#++
....#+++++ ....#.++++ ....#....+
Saída
Sua saída é o número de caminhos essencialmente diferentes através da pista de obstáculos. Em outras palavras, se todos os caminhos válidos forem divididos em classes de caminhos essencialmente similares, a saída será o número de classes. Observe que esse número pode ser 0, se não houver caminhos válidos.
Regras e pontuação
Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence e as brechas padrão não são permitidas. Não há limites de tempo, exceto que você deve avaliar seu programa em todos os casos de teste antes de enviá-lo.
Casos de teste
....
....
.... => 1
...#
....
...# => 0
#..#
..#.
.... => 0
......
......
..##..
......
...... => 2
......
...#..
......
..#...
#..... => 3
......
..#...
......
....#.
#..... => 4
.......
##.....
....###
...#...
..##.#.
#....#.
..#.... => 0
......#.
..##....
...#....
.......#
....#...
.##...#.
....#...
##...... => 7
.........
.#.#.#.#.
.........
#.#...#.#
.........
.#.#.#.#.
......... => 17
..........
.#........
..........
.....#....
#.........
........#.
......#...
.......... => 10
.........
.#.......
.........
...#.....
.........
.....#...
.........
.......#.
......... => 16
1 O termo técnico correto é "homotópico" .
+
", quero dizer essencialmente que um canto do caminho é invertido para um canto na direção oposta.
+
cada vez "? Isso implica que caminhos essencialmente semelhantes devem ter o mesmo comprimento?