Rompecabezas de jarras de agua

Dado un conjunto de 3 jarras de agua con capacidades de a, b y c litros, encuentra el número mínimo de operaciones realizadas antes de que cada jarra tenga x, y y z litros. Solo la jarra C comenzará completamente llena.

Una operación es cualquiera de las siguientes: vaciar una jarra, llenar una jarra o verter agua de una jarra a otra hasta que una de las jarras esté vacía o llena.

Por ejemplo, las jarras "A", "B" y "C" con capacidades de 3, 5 y 8, donde las jarras "A" y "B" comienzan vacías y "C" tiene los 8 litros completos, requieren 2 operaciones para alcanzar el estado de 0, 3 y 5 litros en las jarras.

Crea una función que, dado un arreglo de capacidades de jarras [A, B, C] y un arreglo de estado objetivo [x, y, z], devuelva el número mínimo de operaciones necesarias para alcanzar el estado objetivo. Si las entradas no son válidas o no existe una solución, devuelve "No solution."

Ejemplos

waterjug([3, 5, 8], [0, 3, 5]) ➞ 2

waterjug([1, 3, 4],  [0, 2, 2]) ➞ 3

waterjug([8, 17, 20], [0, 10, 10]) ➞ 9

waterjug([4, 17, 22], [2, 5, 15]) ➞ "No solution."

waterjug([3, 5, 8], [0, 0, 9]) ➞ "No solution."

Notas

  • La cantidad de agua en una jarra nunca puede superar la capacidad de esa jarra.
  • El total de litros en el estado objetivo debe ser igual a la capacidad de la jarra "C".