Pracuję w piekarni, która serwuje pszenicę, żyto, jęczmień, ziarno i francuski chleb, ale piekarz jest trochę dziwny - układa bochenki w przypadkowej kolejności, a czasami po prostu zostawia puste półki na końcu.
Każdego dnia ten sam klient przychodzi i prosi o jeden bochenek chleba, ale podstępem jest to, że jest on zarazkiem, więc kiedy napełniam jego torbę, nie mogę wziąć bochenków z dwóch sąsiednich półek w kolejnych selekcjach.
Przejście między sąsiednimi półkami zajmuje sekundę. To zatłoczony sklep; dla dowolnej losowej konfiguracji bochenków chciałbym zminimalizować czas potrzebny do uzyskania jednego z unikalnych bochenków. Mogę zaczynać i kończyć na dowolnej półce.
Jeśli dzisiejsze zamówienie jest W B W G F R W
możliwe, możliwa jest ścieżka trwająca 0, 3, 5, 1, 4
łącznie 12 sekund:abs(3-0) + abs(5-3) + abs(1-5) + abs(4-1) = 12
( 1, 2, 3, 4, 5
nie działa, ponieważ chleb jest zbierany kolejno z sąsiednich półek).
Jeśli tak B W B G B F B R B W B F
, możliwa jest ścieżka trwająca 1, 3, 5, 7, 10
łącznie 9 sekund.
Menedżer zawsze upewnia się, że istnieje możliwe rozwiązanie, więc nie muszę się martwić o złapanie złych danych wejściowych. Zazwyczaj wysyła mi zamówienie w pliku, ale jeśli chcę, mogę wpisać go w STDIN lub odczytać w inny sposób. Chciałbym, aby program wydrukował wskaźniki najlepszej ścieżki, a także jej czas, zgodnie z domyślnymi regułami We / Wy .
W skrócie:
- 5 rodzajów chleba.
- Zamówienia na bochenek pojawiają się jako ciągi losowej kolejności i długości.
- Musisz wybrać jeden z każdego unikalnego bochenka.
- Nie można dokonać sąsiadujących kolejnych wyborów.
- Zminimalizuj odległość między wskaźnikami wyboru.
- Nie musisz się martwić o nieprawidłowe dane wejściowe.
- Obowiązują domyślne reguły we / wy .
To jest golf golfowy , wygrywa najmniejsza liczba bajtów.
0+3+5+1+4=13
ale1+3+5+7+10=26
nie9
.'WBWG FRW'
też jest poprawny?Odpowiedzi:
JavaScript (ES6), 114 bajtów
Zapisano 1 bajt dzięki @Oliver
Pobiera dane wejściowe jako tablicę znaków. Zwraca ciąg rozdzielany przecinkami, gdzie pierwsza wartość to całkowity czas, a następne opisują ścieżkę.
Wypróbuj online!
Skomentował
źródło
Python 2 ,
212210 bajtówWypróbuj online!
2 bajki dzięki Jonathanowi Frechowi .
źródło
if len(...)==5and all(...)
możnaif(len(...)==5)&all(...)
zapisać dwa bajty.