前書き
あなたは細菌の移動パターンを研究している生物学者です。あなたの研究チームはペトリ皿にそれらの束を持っており、あなたは彼らの活動を記録しています。残念ながら、あなたは深刻な資金不足で、ビデオカメラを買う余裕がないので、定期的に皿の写真を撮るだけです。あなたの仕事は、これらの写真から細菌の動きを追跡するプログラムを作成することです。
入力
入力は、適切な形式の2つの2Dキャラクター配列で、シャーレの連続写真を表します。両方の配列で、文字.
は空のスペースをO
表し、胚芽を表します(必要に応じて、任意の2つの異なる文字を選択できます)。また、 "after"配列は、 "before"配列から、いくつかの細菌を4つの基本方向の1つに1ステップ移動することによって取得されます。特に、配列の形状は同じです。細菌は同時に移動するため、邪魔にならない場合は、別の細菌が既に含まれているスペースに移動する可能性があります。"before"配列の境界には空のスペースのみが含まれ、少なくとも1つの胚芽があることが保証されています。したがって、次は有効な入力のペアです。
Before After
...... ......
.O..O. ....O.
.OO.O. .OO.O.
...... ..O...
出力
出力は、入力と同じ形式の文字の単一の2D配列です。これは>^<v
、移動の方向に応じて、移動した胚芽をのいずれかで置き換えることにより、「前の」配列から取得されます(ここでは4つの異なる文字を使用することもできます)。いくつかの出力が考えられますが、そのうちの1つだけを指定する必要があります。上記の例では、1つの可能な正しい出力は
......
.v..O.
.>v.O.
......
不必要な移動は出力で許可され、細菌は場所を入れ替えることができるため、以下も有効です。
......
.v..v.
.>v.^.
......
ルールとスコアリング
完全なプログラムまたは関数を作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。
比較的効率的なアルゴリズムに興味がありますが、ブルートフォースを完全に禁止したくありません。このため、最新のCPUで10分以内に最後のテストケースを解くと、-75%のボーナスがあります(ほとんどのソリューションをテストすることはできませんので、ここで信頼します)。免責事項:高速なアルゴリズムが存在することは知っていますが(「ディスジョイントパスの問題」を検索してください)、自分で実装していません。
追加のテストケース
Before
......
.O..O.
..OO..
......
After
......
..O...
...OO.
..O...
Possible output
......
.>..v.
..vO..
......
Before
.......
.OOOOO.
.O..OO.
.OO..O.
.OOOOO.
.......
After
.......
..OOOOO
.O...O.
.O...O.
.OOOOOO
....O..
Possible output
.......
.>>>>>.
.O..>v.
.Ov..v.
.O>>v>.
.......
Before
..........
.OOO..OOO.
.OOOOOOOO.
.OOO..OOO.
..........
After
..O.......
.OOO..O.O.
..OOOOOOOO
.O.O..OOO.
.......O..
Possible output
..........
.>^O..O>v.
.^O>>>vO>.
.O>^..>vO.
..........
Before
............
.OO..OOOOOO.
.OO......OO.
...OOOOOO...
.O.OOOOOO.O.
...OOOOOO...
.OOOOOOOOOO.
............
After
..........O.
.OO..OOOOO..
.O...O...O..
.O.OOOOOOO..
.O.OOOOOO..O
...OO..OO...
....OOOOOOOO
.OOO........
Possible output
............
.OO..v<<<<^.
.v<......^<.
...OOO>>>...
.O.OOO^OO.>.
...OOv^OO...
.vvvO>>>>>>.
............
Before
................
.OOOOOO.OOOOOOO.
..OO..OOOOOOOOO.
.OOO..OOOO..OOO.
..OOOOOOOO..OOO.
.OOOOOOOOOOOOOO.
................
After
................
..OOOOO.OOOOOOOO
..OO..OOOOOOOOO.
..OO..OOOO..OOOO
..OOOOOOOO..OOO.
..OOOOOOOOOOOOOO
................
Possible output
................
.>>>>>v.>>>>>>>.
..OO..>>^>>>>>v.
.>>v..OOO^..OO>.
..O>>>>>>^..OOO.
.>>>>>>>>>>>>>>.
................
Before
..............................
.OOO.O.O.....O.....O.O.O..O...
..OOO.O...O..OO..O..O.O.......
.....O......O..O.....O....O...
.O.OOOOO......O...O..O....O...
.OO..O..OO.O..OO..O..O....O...
..O.O.O......OO.OO..O..OO.....
..O....O..O.OO...OOO.OOO...O..
.....O..OO......O..O...OO.OO..
........O..O........OO.O.O....
..O.....OO.....OO.OO.......O..
.O.....O.O..OO.OO....O......O.
..O..OOOO..O....OO..........O.
.O..O...O.O....O..O....O...OO.
....O...OO..O.......O.O..OO...
........O.O....O.O....O.......
.OO.......O.OO..O.......O..O..
....O....O.O.O...OOO..O.O.OO..
.OO..OO...O.O.O.O.O...OO...O..
..............................
After
..............................
.OOOOO.......OO.....O..O......
...OO..O...O...O....OO....O...
....O.O......O..OO...OO...O...
.OO.OOOO......OO..O..O........
O.O.OO..O..O..O..OO...O...OO..
.OO.....O....OO.O..O.OO.O.....
......O.....O.....OOO.OO...O..
....O..OOOO..O..O..O.O.O.OO...
..O......O.O........O...O.O...
.O.....OOO.....OO.OO...O...O..
.......OOO..O.O.O...........O.
.O...O.....O...OOOO..O.O....O.
.O..O.O..O.....O......O....OO.
....O..O..O.O......O.....O....
........OOO....O......O..O....
.OO......O..OO..OOO.....O..O..
..O.O....OO..O...OO...O...OO..
.O..OO....O..O...O.O.O.OO.....
..............O............O..
Possible output
..............................
.OOO.O.v.....>.....>.v.O..v...
..>>^.v...>..^>..v..O.v.......
.....<......>..>.....O....O...
.O.<O><O......O...O..O....v...
.<O..O..v<.O..O^..O..>....>...
..<.^.v......OO.O^..>..<O.....
..^....v..v.Ov...>>^.<OO...O..
.....<..OO......O..O...Ov.v<..
........>..O........O^.v.^....
..^.....Ov.....OO.OO.......O..
.^.....^.^..O>.vO....v......O.
..<..Ov^^..O....><..........O.
.O..O...>.v....O..^....^...OO.
....O...<v..O.......<.^..v<...
........O.O....O.v....O.......
.OO.......<.Ov..O.......O..O..
....O....O.<.^...O^v..O.v.OO..
.O^..<<...O.>.v.>.^...<O...v..
..............................
>^<v
、それぞれの方向に正確に1ステップの動きに対応します。