Descripción del problema
Todos amamos un Twix (porque es el mejor dulce), pero este es el primer Halloween de los niños --- tenemos que agarrar al menos uno de cada tipo de dulce para ellos. Cada Halloween, todos los residentes de Numberline Avenue envían un correo electrónico diciendo qué tipos de dulces regalarán este año.
Oh! Y vivimos en un mundo 1D.
Siendo excepcionalmente perezosos en algunos aspectos y no en otros, hemos hecho un mapa de las casas dando sus posiciones a lo largo de la calle. También notamos los tipos de dulces que tienen. Aquí está el mapa que hicimos para este año:
[(-2, {"Kisses", "KitKats"}),
(1, {"KitKats", "Peanut Butter Cups"}),
(6, {"Kisses", "Twix"}),
(9, {"Skittles"}),
(10, {"Twix"})]
Por el bien de las patitas de los niños, necesitamos encontrar la caminata más corta que comience en cualquier casa del vecindario para recolectar al menos uno de cada tipo de dulce.
Ejemplos
A petición de un par de usuarios (incluido Shaggy), agregaré algunos ejemplos prácticos. Esperemos que esto aclare las cosas. :) Entrada:
[(-2, {"Kisses", "KitKats"}),
(1, {"KitKats", "Peanut Butter Cups"}),
(6, {"Kisses", "Twix"}),
(9, {"Skittles"}),
(10, {"Twix"})]
Salida:
[1, 2, 3]
Otro mapa y solución ...
Entrada:
[(-3, {"KitKats", "Twix"}),
(-1, {"Hundred Grands"}),
(3, {"Kisses"}),
(12, {"Hundred Grands", "Twix", "KitKats"})]
Salida :
[0, 1, 2]
Podríamos comenzar en la casa de coordenadas 9 recolectando dulces en las casas 6 y 1. Eso llena la cuota de dulces caminando 8 unidades, pero ¿es la solución más corta?
Reglas
Las entradas deben incluir un argumento único estructurado de manera similar al ejemplo y generar los índices de las casas para visitar en la solución más corta.
Se aplican las reglas típicas del código de golf: ¡la solución correcta más corta en bytes gana!
PD: Esta fue una pregunta de entrevista que me hizo una de las compañías tecnológicas más grandes del mundo. Si no le gusta el golf, intente encontrar una solución de tiempo O (k * n) donde k es el número de tipos de dulces yn es el número de casas.
Editar
Como señaló Jonathon Allan, existe cierta confusión sobre lo que significa "índices" en este caso. Queremos generar las posiciones de las casas en la lista de argumentos y no sus coordenadas en el carril.
Respuestas:
Jalea , 16 bytes
Un enlace monádico que acepta la entrada como se describe en una lista ordenada de las casas de Numberline Avenue más bajas a más altas (si necesitamos aceptar cualquier pedido podemos anteponer un
Ṣ
) que produce el camino más corto que comienza en la casa con el número más bajo y sube por la Avenida.Pruébalo en línea!
Si queremos encontrar todos esos caminos más cortos reemplazan los bytes finales,
ÞḢ
conÐṂ
; Esto también es de 16 bytes.¿Cómo?
fuente
Python 2 ,
133130127 bytesPruébalo en línea!
fuente
05AB1E , 22 bytes
Asume que los números en la lista de entrada están ordenados de menor a mayor.
Si se encuentra más de una solución, dará salida a todas ellas.
Pruébalo en línea.
Explicación:
fuente
Perl 6 , 70 bytes
Pruébalo en línea!
fuente
Haskell ,
343372 bytesGracias a @ ASCII-only por las mejoras, también hay una variante de 271 bytes que propuso en los comentarios :)
Pruébalo en línea!
Sin golf
Primer intento
fuente
Solución de tiempo O (k * n), con espacio O (k * n)
Por lo tanto, nuestro algoritmo es:
fuente