Lavoro in una panetteria che serve pane di frumento, segale, orzo, grano e francese, ma il fornaio è un po 'strano: impila i pani in ordine casuale e a volte lascia vuoti alcuni scaffali alla fine.
Ogni giorno arriva lo stesso cliente e chiede uno di ogni pezzo di pane, ma la cosa difficile è che è un germofobo, quindi quando riempio la sua borsa, non posso prendere pagnotte da due scaffali adiacenti in selezioni consecutive.
Ci vuole un secondo per camminare tra gli scaffali adiacenti. È un negozio affollato; per qualsiasi configurazione casuale di pagnotte, vorrei ridurre al minimo il tempo necessario per ottenere una di ogni pagnotta unica. Posso iniziare e finire in qualsiasi scaffale.
Se l'ordinamento odierno è W B W G F R W, un possibile percorso è 0, 3, 5, 1, 4, per un totale di 12 secondi:abs(3-0) + abs(5-3) + abs(1-5) + abs(4-1) = 12
( 1, 2, 3, 4, 5non funziona, perché il pane viene raccolto consecutivamente dagli scaffali adiacenti.)
Se lo è B W B G B F B R B W B F, un possibile percorso è 1, 3, 5, 7, 10, per un totale di 9 secondi.
Il gestore si assicura sempre che ci sia una possibile soluzione, quindi non devo preoccuparmi di rilevare input errati. Di solito mi invia l'ordine in un file, ma se voglio, posso scriverlo su STDIN o leggerlo in un modo diverso. Vorrei che il programma stampasse gli indici del percorso migliore, così come il suo tempo, secondo le regole di I / O predefinite .
In breve:
- 5 tipi di pane.
- Gli ordini di pagnotta vengono visualizzati come stringhe di ordine casuale e lunghezza.
- Devi selezionare uno di ciascun pane unico.
- Impossibile effettuare selezioni consecutive adiacenti.
- Ridurre al minimo la distanza tra gli indici di selezione.
- Non è necessario preoccuparsi di input non validi.
- Si applicano le regole I / O predefinite .
Questo è code-golf , vince il conteggio dei byte più corto.
'WBWG FRW'un input valido?
0+3+5+1+4=13ma1+3+5+7+10=26no9.