Trabajo en una panadería que sirve trigo, centeno, cebada, grano y pan francés, pero el panadero es un poco extraño: apila los panes en orden aleatorio y, a veces, deja algunos estantes vacíos al final.
Cada día, el mismo cliente entra y pide una de cada barra de pan, pero lo complicado es que es un germófobo, por lo que cuando lleno su bolsa, no puedo tomar barras de dos estantes adyacentes en selecciones consecutivas.
Se tarda un segundo en caminar entre los estantes adyacentes. Es una tienda ocupada; para cualquier configuración aleatoria de panes, me gustaría minimizar el tiempo que lleva obtener uno de cada pan único. Puedo comenzar y terminar en cualquier estante.
Si el pedido de hoy es W B W G F R W
, una posible ruta es 0, 3, 5, 1, 4
, por un total de 12 segundos:abs(3-0) + abs(5-3) + abs(1-5) + abs(4-1) = 12
( 1, 2, 3, 4, 5
no funciona, porque el pan se recoge consecutivamente de los estantes adyacentes).
Si es así B W B G B F B R B W B F
, una posible ruta es 1, 3, 5, 7, 10
, por un total de 9 segundos.
El gerente siempre se asegura de que haya una solución posible, por lo que no tengo que preocuparme por detectar entradas malas. Por lo general, me envía el pedido en un archivo, pero si lo deseo, puedo escribirlo en STDIN o leerlo de otra manera. Me gustaría que el programa imprima los índices de la mejor ruta, así como su tiempo, de acuerdo con las reglas de E / S predeterminadas .
En breve:
- 5 tipos de pan.
- Las órdenes de pan aparecen como cadenas de orden y longitud aleatorios.
- Debe seleccionar uno de cada pan único.
- No se pueden hacer selecciones consecutivas adyacentes.
- Minimice la distancia entre los índices de selección.
- No necesita preocuparse por entradas no válidas.
- Se aplican las reglas de E / S predeterminadas .
Este es el código de golf , el conteo de bytes más corto gana.
0+3+5+1+4=13
pero1+3+5+7+10=26
no9
.'WBWG FRW'
una entrada válida también?Respuestas:
JavaScript (ES6), 114 bytes
Guardado 1 byte gracias a @Oliver
Toma entrada como una matriz de caracteres. Emite una cadena separada por comas donde el primer valor es el tiempo total y los siguientes describen la ruta.
Pruébalo en línea!
Comentado
fuente
Python 2 ,
212210 bytesPruébalo en línea!
2 bytes gracias a Jonathan Frech .
fuente
if len(...)==5and all(...)
puede serif(len(...)==5)&all(...)
para guardar dos bytes.