배경
직사각형 방에 박스를 놓아 간단한 장애물 코스를 만들었습니다. 이제 해결할 수있는 근본적으로 다른 방법의 수를 세고 싶습니다. 그 프로그램을 작성해주세요.
입력
입력은 비어 있지 않은 직사각형 문자 배열입니다 .#
. 점 .
은 빈 공간이며 #
장애물입니다.
장애물 코스를 통과 하는 경로 는 왼쪽 상단에서 시작하여 오른쪽 하단에서 끝나며 오른쪽 또는 아래쪽으로 만 진행됩니다. 또한 유효한 경로는 장애물을 통과 할 수 없습니다. 다음은- +
문자로 그려진 몇 가지 예입니다 .
Valid path Invalid path Invalid path Invalid path
++........ ++........ +++++..... ..+.......
.++++++#.. .+.....#.. ....+++#++ ..++...#..
......+#.. .+.++++#.. .......#.+ ...+++.#..
....#.++++ .+++#.++++ ....#....+ ....#+....
한 번 에 하나씩 이동하여 하나 를 다른 것으로 바꿀 수있는 경우 두 경로는 본질적으로 1 과 유사+
합니다. 중간 경로도 유효해야하므로 장애물 위의 경로를 구부릴 수 없습니다. 예를 들어, 여기에서 처음 두 경로는 본질적으로 비슷하지만 세 번째 경로는 두 가지 장애물을 뒤흔들 수 없기 때문에 본질적으로 다릅니다.
++........ +......... +++++++++.
.+++++.#.. ++.....#.. .......#+.
.....+.#.. .++++++#.. .......#++
....#+++++ ....#.++++ ....#....+
산출
당신의 결과는 장애물 코스를 통해 본질적으로 다른 경로의 수입니다. 다시 말해, 모든 유효한 경로가 본질적으로 유사한 경로의 클래스로 나뉘어 진 경우 출력은 클래스 수입니다. 유효한 경로가 없으면이 숫자는 0 일 수 있습니다.
규칙과 득점
전체 프로그램이나 함수를 작성할 수 있습니다. 가장 낮은 바이트 수가 이기고 표준 허점은 허용되지 않습니다. 제출하기 전에 모든 테스트 케이스에서 프로그램을 평가해야한다는 점을 제외하고는 시간 제한이 없습니다.
테스트 사례
....
....
.... => 1
...#
....
...# => 0
#..#
..#.
.... => 0
......
......
..##..
......
...... => 2
......
...#..
......
..#...
#..... => 3
......
..#...
......
....#.
#..... => 4
.......
##.....
....###
...#...
..##.#.
#....#.
..#.... => 0
......#.
..##....
...#....
.......#
....#...
.##...#.
....#...
##...... => 7
.........
.#.#.#.#.
.........
#.#...#.#
.........
.#.#.#.#.
......... => 17
..........
.#........
..........
.....#....
#.........
........#.
......#...
.......... => 10
.........
.#.......
.........
...#.....
.........
.....#...
.........
.......#.
......... => 16
1 올바른 기술 용어는 "homotopic" 입니다.
+
"은 본질적으로 경로의 한쪽 모서리가 반대 방향의 모서리로 반전됨을 의미합니다.
+
에 하나씩 이동 "한다는 것은 무엇을 의미 합니까? 이것은 본질적으로 유사한 경로의 길이가 같아야 함을 의미합니까?