Gracias a la comunidad PPCG, Santa ahora ha equilibrado sus carros de almacenamiento. Ahora, necesita moverlos a los muelles de transporte para que puedan enviarse a las bahías de carga. Desafortunadamente, las pistas para mover los carros son un desastre, ¡y él necesita descubrir cómo moverlas sin que se estrellen juntas!
Desafío
Se le darán las pistas para cada uno de los carros como listas de "etiquetas" (o estaciones). Los carros deben moverse de manera tal que en cualquier momento, no haya dos carros en la misma etiqueta / estación. Esencialmente, los carros se mueven entre posiciones que tienen una etiqueta única.
Tarea
Dadas las pistas para cada uno de los carros como una lista de listas de etiquetas (que son todos enteros positivos), determine cuándo se debe liberar cada carro para enviar todos los carros a sus destinos de manera segura en el menor tiempo posible.
Aquí hay una explicación de cómo funciona todo el sistema de seguimiento. Digamos que el carro i
se lanza en el momento t_i
en una pista con etiquetas T_i_1, T_i_2, ..., T_i_n
. Luego, durante t_1
a t_i-1
, el carrito i
no está en la cuadrícula y puede ignorarse.
En la trama de tiempo t_i
, el carro está en la etiqueta T_i_1
, y para cada marco de tiempo t_k
de t_i
a t_i+n
(medio-inclusive), el carro está en la etiqueta T_i_k+1
.
Para todos los plazos posteriores e inclusive t_i+n
, el carrito está en su destino y ya no está en la cuadrícula.
La cantidad total de tiempo que se t_T
tarda es el último período de tiempo con un carro todavía en una pista en el sistema.
Especificaciones
Dado un sistema de seguimiento, devuelva una lista de plazos [t_1, t_2, ..., t_n]
en los que el i
carro se inicia en el momento t_i
, de modo que ninguna otra disposición permita que los carros lleguen a sus destinos de manera segura con una cantidad de tiempo total menor.
En términos de "seguridad", si en cualquier marco de tiempo desde t_1
que t_T
existe más de una compra en cualquier etiqueta, entonces chocan y la disposición no era "seguro". Tenga en cuenta que dos carros pueden moverse de un lugar a, b
a otro b, a
y seguir siendo "seguros" porque las vías son bidireccionales.
Especificaciones de formato
La entrada se dará como una matriz de enteros positivos en cualquier formato razonable. La salida debe darse como una lista de enteros positivos en cualquier formato razonable. Puede dar salida en marcos de tiempo indexados a cero, por lo que la salida sería una lista de enteros no negativos en cualquier formato razonable.
Reglas
- Se aplican lagunas estándar
- Este es un código de golf, por lo que gana la respuesta más corta en bytes
- No se aceptarán respuestas.
Casos de prueba
Input -> Output
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] -> [1, 1, 1]
[[1, 2, 3], [1, 2, 3]] -> [1, 2]
[[1, 2, 3], [3, 2, 1]] -> [1, 2]
[[1, 2, 3, 4], [4, 3, 2, 1]] -> [1, 1]
[[1, 1, 1], [1, 1, 1]] -> [1, 4]
[[1, 2, 3, 4], [2, 4, 3, 1]] -> [2, 1]
[[1, 2, 3, 4, 5, 6, 7], [2, 3, 3, 4], [5, 4, 3]] -> [1, 3, 4]
[[1, 2, 3, 4, 4], [1, 2, 3, 5, 4], [1, 2, 3, 4, 5]] -> [2, 3, 1]
Nota: Me inspiré para esta serie de desafíos de Advent Of Code . No estoy afiliado a este sitio
Puede ver una lista de todos los desafíos de la serie mirando la sección 'Vinculados' del primer desafío aquí .
¡Feliz golf!
fuente
Respuestas:
JavaScript (ES7), 172 bytes
Devuelve una matriz de marcos de tiempo indexados a 0.
NB : Esto solo puede funcionar con etiquetas en [0-31]. Este es un límite JS, no un límite del algoritmo.
Casos de prueba
Mostrar fragmento de código
Comentado
fuente
<<
E|
) que se puede fijar mediante el uso de una gran variedad de bool lugar ...o[]
. (En realidad, podría hacerse de otra manera, pero elegí este método para obtener resultados de golf en primer lugar).