Contexte
J'ai construit un parcours d'obstacles simple en plaçant des boîtes dans une pièce rectangulaire. Maintenant, je veux compter le nombre de façons essentiellement différentes de le résoudre. J'ai besoin que vous m'écriviez un programme pour ça.
Contribution
Votre entrée est un tableau rectangulaire non vide de caractères .#
. Les points .
sont des espaces vides et les #
obstacles sont.
Un chemin à travers la course d'obstacles commence dans le coin supérieur gauche et se termine dans le coin inférieur droit, et ne va que vers la droite ou vers le bas. De plus, un chemin valide ne peut pas traverser un obstacle. Voici quelques exemples dessinés avec des +
caractères:
Valid path Invalid path Invalid path Invalid path
++........ ++........ +++++..... ..+.......
.++++++#.. .+.....#.. ....+++#++ ..++...#..
......+#.. .+.++++#.. .......#.+ ...+++.#..
....#.++++ .+++#.++++ ....#....+ ....#+....
Deux chemins sont essentiellement similaires 1 si l'un peut être transformé en l'autre en se déplaçant un +
à la fois. Les chemins intermédiaires doivent également être valides, vous ne pouvez donc pas plier un chemin au-dessus d'un obstacle. Par exemple, les deux premiers chemins ici sont essentiellement similaires, mais le troisième est essentiellement différent d'eux, car il ne peut pas être déplacé sur les deux obstacles:
++........ +......... +++++++++.
.+++++.#.. ++.....#.. .......#+.
.....+.#.. .++++++#.. .......#++
....#+++++ ....#.++++ ....#....+
Production
Votre résultat est le nombre de chemins essentiellement différents à travers le parcours du combattant. En d'autres termes, si tous les chemins valides sont divisés en classes de chemins essentiellement similaires, la sortie est le nombre de classes. Notez que ce nombre peut être 0 s'il n'y a pas de chemins valides.
Règles et notation
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites. Il n'y a pas de limites de temps, sauf que vous devez évaluer votre programme sur chaque cas de test avant de le soumettre.
Cas de test
....
....
.... => 1
...#
....
...# => 0
#..#
..#.
.... => 0
......
......
..##..
......
...... => 2
......
...#..
......
..#...
#..... => 3
......
..#...
......
....#.
#..... => 4
.......
##.....
....###
...#...
..##.#.
#....#.
..#.... => 0
......#.
..##....
...#....
.......#
....#...
.##...#.
....#...
##...... => 7
.........
.#.#.#.#.
.........
#.#...#.#
.........
.#.#.#.#.
......... => 17
..........
.#........
..........
.....#....
#.........
........#.
......#...
.......... => 10
.........
.#.......
.........
...#.....
.........
.....#...
.........
.......#.
......... => 16
1 Le terme technique correct est "homotopique" .
+
», j'entends essentiellement qu'un coin du chemin est inversé dans un coin de la direction opposée.
+
à la fois »? Est-ce à dire que des chemins essentiellement similaires doivent avoir la même longueur?