Я, здається, потрапив трохи на соління. Буквально. Я скинув на підлогу купу солінь і тепер вони всі розкидані! Мені потрібно, щоб ти допомогла мені зібрати їх усіх. О, я згадав, що у мене на купі є купа роботів? (Вони також усі розкидані по всьому місцю; мені дуже погано впорядковувати речі.)
Ви повинні взяти дані у вигляді:
P.......
..1..2..
.......P
........
P3PP...4
.......P
тобто, кілька рядків або .
, P
(розсіл), або цифра (ID робота). (Ви можете припустити, що кожен рядок має однакову довжину, закреслений .
.) Ви можете вводити ці рядки у вигляді масиву, або прив'язувати до STDIN, чи читати в окремому рядку, розділеному комами, чи читати файл, або робити все, що ви хочете як би взяти вклад.
Вихід повинен бути у вигляді n
рядків, де n
найвищий ідентифікатор робота. (Ідентифікатори роботів завжди будуть послідовними, починаючи з 1.) Кожен рядок буде містити шлях робота, сформований з літер L
(ліворуч), R
(праворуч), U
(вгору) та D
(вниз). Наприклад, ось приклад для цієї головоломки:
LLU
RDR
LRRR
D
Так само може бути
LLU RDR LRRR D
Або
["LLU","RDR","LRRR","D"]
Або будь-який формат, який ви хотіли б, поки ви зможете сказати, яке рішення має бути.
Ваша мета - знайти оптимальний вихід, який є найменшим кроком. Кількість кроків вважається найбільшою кількістю кроків від усіх роботів. Наприклад, вищевказаний приклад мав 4 етапи. Зауважте, що може бути кілька рішень, але вам потрібно вивести лише одне.
Оцінка:
- Ваша програма буде запускатися з кожного з 5 (випадково генерованих) тестових випадків.
- Ви повинні додати кроки з кожного запуску, і це буде ваш рахунок.
- Виграє найнижчий, сукупний бал.
- Ви не можете ввести жорсткий код для цих конкретних входів. Ваш код також повинен працювати для будь-якого іншого вводу.
- Роботи можуть проходити один через одного.
- Ваша програма повинна бути детермінованою, тобто однаковим результатом для кожного запуску. Ви можете використовувати генератор випадкових чисел до тих пір, поки він засіяний і послідовно створює однакові номери крос-платформи.
- Ваш код повинен працювати протягом 3 хвилин для кожного з входів. (Переважно набагато менше.)
- У разі нічиєї виграє більшість гравців.
Ось тестові випадки. Вони були генеровані випадковим чином за допомогою невеликого сценарію Ruby, який я написав.
P.......1.
..........
P.....P...
..P.......
....P2....
...P.P....
.PP..P....
....P....P
PPPP....3.
.P..P.P..P
....P.....
P....1....
.P.....PP.
.PP....PP.
.2.P.P....
..P....P..
.P........
.....P.P..
P.....P...
.3.P.P....
..P..P..P.
..1....P.P
..........
.......2P.
...P....P3
.P...PP..P
.......P.P
..P..P..PP
..P.4P..P.
.......P..
..P...P...
.....P....
PPPP...P..
..P.......
...P......
.......P.1
.P..P....P
P2PP......
.P..P.....
..........
......PP.P
.P1..P.P..
......PP..
P..P....2.
.P.P3.....
....4..P..
.......PP.
..P5......
P.....P...
....PPP..P
Удачі, і не дозволяйте соління сидіти там занадто довго, інакше вони зіпсуються!
О, а навіщо соління, запитаєте ви?
Чому ні?