バックグラウンド
長方形の部屋に箱を置いて、簡単な障害物コースを構築しました。今、私はそれが解決できる本質的に異なる方法の数を数えたいです。そのためのプログラムを書いてほしい。
入力
入力は、文字の空でない長方形の配列です.#
。ドット.
は空きスペースであり、#
障害物です。
パス障害物までは、もちろん右下隅にある左上隅と端で始まり、そして唯一の右またはダウンしました。また、有効なパスは障害物を通過できません。以下に、- +
文字を使用したいくつかの例を示します。
Valid path Invalid path Invalid path Invalid path
++........ ++........ +++++..... ..+.......
.++++++#.. .+.....#.. ....+++#++ ..++...#..
......+#.. .+.++++#.. .......#.+ ...+++.#..
....#.++++ .+++#.++++ ....#....+ ....#+....
2つのパスは、一度に1つずつ移動することで一方を他方に変換できる場合、基本的に1 +
中間のパスも有効でなければならないため、障害物の上でパスを曲げることはできません。たとえば、ここの最初の2つのパスは基本的に似ていますが、3番目のパスは2つの障害物の上をくねることができないため、基本的にそれらとは異なります。
++........ +......... +++++++++.
.+++++.#.. ++.....#.. .......#+.
.....+.#.. .++++++#.. .......#++
....#+++++ ....#.++++ ....#....+
出力
出力は、障害物コースを通る本質的に異なるパスの数です。つまり、すべての有効なパスが本質的に同様のパスのクラスに分割される場合、出力はクラスの数になります。有効なパスがない場合、この番号は0になる場合があります。
ルールとスコアリング
完全なプログラムまたは関数を作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。時間制限はありませんが、提出する前にすべてのテストケースでプログラムを評価する必要があります。
テストケース
....
....
.... => 1
...#
....
...# => 0
#..#
..#.
.... => 0
......
......
..##..
......
...... => 2
......
...#..
......
..#...
#..... => 3
......
..#...
......
....#.
#..... => 4
.......
##.....
....###
...#...
..##.#.
#....#.
..#.... => 0
......#.
..##....
...#....
.......#
....#...
.##...#.
....#...
##...... => 7
.........
.#.#.#.#.
.........
#.#...#.#
.........
.#.#.#.#.
......... => 17
..........
.#........
..........
.....#....
#.........
........#.
......#...
.......... => 10
.........
.#.......
.........
...#.....
.........
.....#...
.........
.......#.
......... => 16
1正しい技術用語は「ホモトピック」です。
+
」とは、基本的に、パスの1つのコーナーが反対方向のコーナーに反転することを意味します。
+
時に」?これは、本質的に同様のパスは同じ長さでなければならないことを意味しますか?