Giới thiệu
Bạn là một nhà sinh vật học nghiên cứu các mô hình di chuyển của vi khuẩn. Nhóm nghiên cứu của bạn có một loạt chúng trong đĩa petri và bạn đang ghi lại hoạt động của chúng. Thật không may, bạn đang bị thiếu hụt nghiêm trọng và không thể mua được máy quay video, vì vậy bạn chỉ cần chụp ảnh món ăn đều đặn. Nhiệm vụ của bạn là tạo ra một chương trình theo dõi chuyển động của vi trùng từ những bức ảnh này.
Đầu vào
Đầu vào của bạn là hai mảng ký tự 2D ở bất kỳ định dạng hợp lý nào, thể hiện các hình ảnh liên tiếp của đĩa petri. Trong cả hai mảng, ký tự .
đại diện cho không gian trống và O
đại diện cho một mầm (bạn có thể chọn bất kỳ hai ký tự riêng biệt nào nếu muốn). Ngoài ra, mảng "sau" được lấy từ mảng "trước" bằng cách di chuyển một số vi trùng một bước theo một trong bốn hướng chính; đặc biệt, các mảng có hình dạng giống nhau. Các vi trùng di chuyển đồng thời, vì vậy một trong số chúng có thể di chuyển đến một không gian đã chứa vi trùng khác, nếu nó di chuyển ra khỏi đường đi. Nó được đảm bảo rằng các đường viền của mảng "trước" chỉ chứa các khoảng trống và có ít nhất một mầm. Do đó, sau đây là một cặp đầu vào hợp lệ:
Before After
...... ......
.O..O. ....O.
.OO.O. .OO.O.
...... ..O...
Đầu ra
Đầu ra của bạn là một mảng các ký tự 2D có cùng định dạng với các đầu vào. Nó được lấy từ mảng "trước" bằng cách thay thế những vi trùng đã di chuyển bằng một trong số đó >^<v
, tùy thuộc vào hướng di chuyển (bạn cũng có thể sử dụng bất kỳ 4 ký tự riêng biệt nào ở đây). Có thể có một số đầu ra có thể, nhưng bạn sẽ chỉ cung cấp một trong số chúng. Trong ví dụ trên, một đầu ra đúng có thể là
......
.v..O.
.>v.O.
......
Di chuyển không cần thiết được cho phép trong đầu ra và vi trùng có thể trao đổi địa điểm, do đó, sau đây cũng hợp lệ:
......
.v..v.
.>v.^.
......
Quy tắc và tính điểm
Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép.
Tôi quan tâm đến các thuật toán tương đối hiệu quả, nhưng tôi không muốn cấm hoàn toàn vũ phu. Vì lý do này, có phần thưởng -75% cho việc giải quyết trường hợp thử nghiệm cuối cùng trong vòng 10 phút trên CPU hiện đại (Tôi không thể kiểm tra hầu hết các giải pháp, vì vậy tôi sẽ chỉ tin tưởng bạn ở đây). Tuyên bố miễn trừ trách nhiệm: Tôi biết rằng có một thuật toán nhanh tồn tại (tìm kiếm "vấn đề đường dẫn rời rạc"), nhưng tôi đã không tự mình thực hiện nó.
Các trường hợp kiểm tra bổ sung
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
tương ứng với một chuyển động của chính xác một bước theo hướng tương ứng.