sfondo
Ho costruito un semplice percorso ad ostacoli posizionando le scatole in una stanza rettangolare. Ora voglio contare il numero di modi essenzialmente diversi in cui può essere risolto. Ho bisogno che tu mi scriva un programma per quello.
Ingresso
Il tuo input è una matrice rettangolare non vuota dei caratteri .#
. I punti .
sono spazi vuoti e #
sono ostacoli.
Un percorso attraverso la corsa ad ostacoli inizia nell'angolo in alto a sinistra e termina nell'angolo in basso a destra, e va solo a destra o in basso. Inoltre, un percorso valido non può superare un ostacolo. Ecco alcuni esempi disegnati con +
-caratteri:
Valid path Invalid path Invalid path Invalid path
++........ ++........ +++++..... ..+.......
.++++++#.. .+.....#.. ....+++#++ ..++...#..
......+#.. .+.++++#.. .......#.+ ...+++.#..
....#.++++ .+++#.++++ ....#....+ ....#+....
Due percorsi sono essenzialmente simili 1 se uno può essere trasformato nell'altro spostandone uno +
alla volta. Anche i percorsi intermedi devono essere validi, quindi non è possibile piegare un percorso su un ostacolo. Ad esempio, i primi due percorsi qui sono essenzialmente simili, ma il terzo è sostanzialmente diverso da loro, poiché non può essere spostato sui due ostacoli:
++........ +......... +++++++++.
.+++++.#.. ++.....#.. .......#+.
.....+.#.. .++++++#.. .......#++
....#+++++ ....#.++++ ....#....+
Produzione
Il tuo output è il numero di percorsi sostanzialmente diversi attraverso la corsa ad ostacoli. In altre parole, se tutti i percorsi validi sono divisi in classi di percorsi essenzialmente simili, l'output è il numero di classi. Si noti che questo numero può essere 0, se non ci sono percorsi validi.
Regole e punteggio
È possibile scrivere un programma completo o una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard. Non ci sono limiti di tempo, tranne che è necessario valutare il programma su ogni caso di test prima di inviarlo.
Casi test
....
....
.... => 1
...#
....
...# => 0
#..#
..#.
.... => 0
......
......
..##..
......
...... => 2
......
...#..
......
..#...
#..... => 3
......
..#...
......
....#.
#..... => 4
.......
##.....
....###
...#...
..##.#.
#....#.
..#.... => 0
......#.
..##....
...#....
.......#
....#...
.##...#.
....#...
##...... => 7
.........
.#.#.#.#.
.........
#.#...#.#
.........
.#.#.#.#.
......... => 17
..........
.#........
..........
.....#....
#.........
........#.
......#...
.......... => 10
.........
.#.......
.........
...#.....
.........
.....#...
.........
.......#.
......... => 16
1 Il termine tecnico corretto è "omotopico" .
+
" intendo essenzialmente che un angolo del percorso viene invertito in un angolo della direzione opposta.
+
alla volta "? Ciò implica che percorsi sostanzialmente simili devono avere la stessa lunghezza?