Я работаю в пекарне, где подают пшеничный, ржаной, ячменный, зерновой и французский хлеб, но пекарь немного странный - он складывает буханки в случайном порядке, а иногда просто оставляет некоторые полки в конце пустыми.
Каждый день приходит один и тот же покупатель и просит по одной буханке хлеба, но хитрость в том, что он гермофоб, поэтому, когда я наполняю его сумку, я не могу брать буханки с двух соседних полок подряд.
Требуется одна секунда, чтобы идти между смежными полками. Это занятой магазин; для любой случайной конфигурации хлебов я бы хотел минимизировать время, необходимое для получения одного из каждого уникального хлеба. Я могу начать и закончить на любой полке.
Если сегодняшнее упорядочение W B W G F R W
, возможный путь 0, 3, 5, 1, 4
, в общей сложности 12 секунд:abs(3-0) + abs(5-3) + abs(1-5) + abs(4-1) = 12
( 1, 2, 3, 4, 5
не работает, потому что хлеб собирают последовательно с соседних полок.)
Если это так B W B G B F B R B W B F
, возможный путь - 1, 3, 5, 7, 10
всего 9 секунд.
Менеджер всегда следит за тем, чтобы было возможное решение, поэтому мне не нужно беспокоиться об обнаружении неверных входных данных. Обычно он отправляет мне заказ в файле, но если я хочу, я могу напечатать его в STDIN или прочитать его другим способом. Я бы хотел, чтобы программа выводила индексы наилучшего пути, а также его время в соответствии с правилами ввода-вывода по умолчанию .
Вкратце:
- 5 видов хлеба.
- Хлебные заказы отображаются в виде строк случайного порядка и длины.
- Необходимо выбрать один из каждого уникального хлеба.
- Невозможно сделать соседние последовательные выборы.
- Минимизируйте расстояние между индексами выбора.
- Не нужно беспокоиться о неверных вводах.
- Применяются правила ввода / вывода по умолчанию .
Это код-гольф , выигрывает самый короткий счетчик байтов.
'WBWG FRW'
это тоже допустимый ввод?
0+3+5+1+4=13
но1+3+5+7+10=26
нет9
.