Giriş
Bakterilerin hareket kalıplarını inceleyen bir biyologsunuz. Araştırma ekibinizde bir avuç petri kabında bir sürü var ve onların aktivitesini kaydediyorsunuz. Ne yazık ki, ciddi bir şekilde finanse edilmiyorsunuz ve video kamera kullanamıyorsunuz, bu yüzden düzenli aralıklarla yemeğin bir resmini çekiyorsunuz. Senin görevin bu resimlerden mikropların hareketlerini izleyen bir program yapmak.
Giriş
Girdileriniz, herhangi bir makul formattaki iki 2D karakter dizisidir ve petri kabının ardışık resimlerini temsil eder. Her iki dizide de karakter .
boş alanı O
temsil eder ve bir mikropu temsil eder (eğer isterseniz iki ayrı karakter seçebilirsiniz). Ayrıca, "after" dizisi, "gerdan" dizisinden, bazı mikropları dört kardinal yönün birinde bir adım hareket ettirerek elde edilir; özellikle, diziler aynı şekle sahiptir. Mikroplar eşzamanlı olarak hareket eder, böylece bir tanesi, başka bir mikropu içeren bir alana, bu yoldan çıkarsa hareket edebilir. "Before" dizisinin sınırlarının sadece boş alanlar içerdiği ve en az bir mikrop olduğu garanti edilmektedir. Dolayısıyla, aşağıdakiler geçerli bir girdi çiftidir:
Before After
...... ......
.O..O. ....O.
.OO.O. .OO.O.
...... ..O...
Çıktı
Çıktınız, girişlerle aynı formatta tek bir 2B karakter dizisidir. >^<v
Hareket yönüne bağlı olarak, biriyle taşınan mikropları değiştirerek "önce" dizisinden elde edilir (burada 4 ayrı karakter de kullanabilirsiniz). Birkaç olası çıktı olabilir, ancak bunlardan yalnızca birini vermelisiniz. Yukarıdaki örnekte, olası bir doğru çıktı
......
.v..O.
.>v.O.
......
Çıktıda gereksiz harekete izin verilir ve mikroplar yer değiştirebilir, bu nedenle aşağıdakiler geçerlidir:
......
.v..v.
.>v.^.
......
Kurallar ve puanlama
Tam bir program veya bir fonksiyon yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklar izin verilmez.
Nispeten verimli algoritmalarla ilgileniyorum, fakat kaba zorlama işlemini tamamen yasaklamak istemiyorum. Bu nedenle, son test vakasını modern bir CPU'da 10 dakika içinde çözmek için % -75 bonus var (çoğu çözümü test edemiyorum, bu yüzden sadece size güveneceğim). Feragatname: Hızlı bir algoritma olduğunu biliyorum ("ayrık yollar sorununu araştırın"), ancak kendim uygulamadım.
Ek test durumları
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
biri, ilgili yönde tam olarak bir adım hareketine karşılık gelir.