これは、一連のアイランドゴルフチャレンジの最初のものです。次の挑戦
ASCII-artでアイランドを指定すると、それを迂回する最適なパスを出力します。
入力
入力は、土地と水を表す2つの文字で構成される長方形のグリッドになります。以下の例では、土地はで#
あり、水はです.
。ただし、任意の2つの異なる文字を使用できます。
...........
...##......
..#####....
..#######..
.#########.
...#######.
...#####.#.
....####...
...........
常に少なくとも1つの土地タイルがあります。土地のタイルはすべて連続しています(つまり、島は1つだけです)。水タイルも連続しています(つまり、湖はありません)。グリッドの外側の境界線はすべて水タイルになります。ランドタイルは斜めに接続されません。つまり、次のようなものは表示されません。
....
.#..
..#.
....
出力
コードは、最短のナビゲーションが描画された同じグリッドを出力する必要があります。以下の例では、周航経路はで描画されてo
いますが、陸地や水域のキャラクターと区別できる限り、任意のキャラクターに置き換えることができます。
周航は完全にグリッド上のすべての土地タイルを取り囲む水タイルの上に完全に描かれた単純閉曲線、、です。斜めの接続が許可されています。たとえば、これは上記の島の周航です(ただし、最短ではありません)。
.ooooo.....
o..##.oo...
o.#####.o..
o.#######o.
o#########o
ooo#######o
..o#####.#o
..oo####..o
....oooooo.
周回ナビゲーションの長さは次のように計算されます。パス上の隣接するタイルのペアごとに、水平または垂直に接続されている場合、1を追加します。斜めに接続されている場合は、√2を追加します。上記のパスの長さは22 +7√2(≈31.9)です。
最短一周は、最短長さの一周です。プログラムは、この条件を満たすパスを1つ出力する必要があります。ほとんどの島では、複数の可能な解決策があります。長さ10 +13√2(≈28.4)の上記の島に対する1つのソリューションを次に示します。
...oo......
..o##oo....
.o#####oo..
.o#######o.
o#########o
.o.#######o
..o#####.#o
...o####.o.
....ooooo..
詳細
あなたの解決策は、完全なプログラムまたは機能かもしれません。いずれかのデフォルトの入力と出力の方法が許容されています。
入力と出力は、複数行の文字列または文字列のリストです。言語に単一文字の文字列とは異なる文字タイプがある場合、前の文の「文字列」を「文字のリスト」に置き換えることができます。言語でグリッドの高さや幅を入力する必要がある場合は、入力してください。出力には、(オプションで)単一の末尾改行が含まれる場合があります。上記のように、代わりに3つの異なる文字#.o
を使用できます(使用する文字を提出時に指定してください)。
テストケース
A.固有の最短航路を持つ島:
...
.#.
...
.o.
o#o
.o.
......
.####.
......
.oooo.
o####o
.oooo.
......
......
..##..
...#..
......
......
......
..oo..
.o##o.
..o#o.
...o..
......
.......
.#####.
...#...
...#...
.#####.
.......
.ooooo.
o#####o
o..#..o
o..#..o
o#####o
.ooooo.
.......
...#...
...#...
.#####.
...#...
...#...
.......
...o...
..o#o..
.o.#.o.
o#####o
.o.#.o.
..o#o..
...o...
.......
.#####.
.##..#.
..#..#.
.......
.ooooo.
o#####o
o##..#o
.o#..#o
..oooo.
B.複数の可能な解決策がある島の例:
........
....##..
...####.
..###...
.#####..
.#####..
..##....
........
可能な出力:
....oo..
...o##o.
..o####o
.o###.o.
o#####o.
o#####o.
.o##oo..
..oo....
....oo..
...o##o.
..o####o
.o###.o.
o#####o.
o#####o.
.o##.o..
..ooo...
....oo..
...o##o.
..o####o
.o###..o
o#####.o
o#####o.
.o##oo..
..oo....
....oo..
...o##o.
..o####o
.o###..o
o#####.o
o#####o.
.o##.o..
..ooo...
これはcode-golfです。各言語で最も短いコードが優先されます。