Eu trabalho em uma padaria que serve pão de trigo, centeio, cevada, grãos e francês, mas o padeiro é um pouco estranho - ele empilha os pães em ordem aleatória e, às vezes, deixa algumas prateleiras vazias no final.
Todos os dias, o mesmo cliente entra e pede um pedaço de pão, mas o mais complicado é que ele é um germofóbico; portanto, quando encho sua bolsa, não posso pegar pães de duas prateleiras adjacentes em seleções consecutivas.
Leva um segundo para caminhar entre as prateleiras adjacentes. É uma loja movimentada; para qualquer configuração aleatória de pães, eu gostaria de minimizar o tempo necessário para obter um de cada pão único. Eu posso começar e terminar em qualquer prateleira.
Se a ordem de hoje for W B W G F R W
, um caminho possível é 0, 3, 5, 1, 4
, por um total de 12 segundos:abs(3-0) + abs(5-3) + abs(1-5) + abs(4-1) = 12
( 1, 2, 3, 4, 5
não funciona, porque o pão é colhido consecutivamente das prateleiras adjacentes.)
Se for B W B G B F B R B W B F
, um caminho possível é 1, 3, 5, 7, 10
, por um total de 9 segundos.
O gerente sempre se assegura de que haja uma solução possível, então não preciso me preocupar em capturar informações incorretas. Ele geralmente me envia o pedido em um arquivo, mas se eu quiser, posso digitá-lo em STDIN ou lê-lo de uma maneira diferente. Eu gostaria que o programa imprimisse os índices do melhor caminho, bem como seu tempo, de acordo com as regras de E / S padrão .
Em resumo:
- 5 tipos de pão.
- Os pedidos de pão aparecem como cadeias de ordem e comprimento aleatórios.
- É necessário selecionar um de cada pão exclusivo.
- Não é possível fazer seleções consecutivas adjacentes.
- Minimize a distância entre os índices de seleção.
- Não precisa se preocupar com entradas inválidas.
- Aplicam- se as regras de E / S padrão .
Isso é código-golfe , a menor contagem de bytes vence.
'WBWG FRW'
uma entrada válida também?
0+3+5+1+4=13
mas1+3+5+7+10=26
, não9
.