Problema dos jarros de água

Dado um conjunto de 3 jarros de água com capacidades de a, b e c litros, encontre o número mínimo de operações realizadas antes que cada jarro contenha x, y e z litros. Apenas o jarro C começará completamente cheio.

Uma operação é qualquer uma das seguintes: esvaziar um jarro, encher um jarro ou despejar água de um jarro para outro até que um dos jarros esteja vazio ou cheio.

Por exemplo, os jarros A, B e C têm capacidades de 3, 5 e 8, respectivamente. Os jarros A e B começam vazios e C contém os 8 litros completos, sendo necessárias 2 operações para alcançar o estado de 0, 3 e 5 litros nos jarros.

Crie uma função que, dado um array de capacidades dos jarros [A, B, C] e um array de estado objetivo [x, y, z], retorne o número mínimo de operações necessárias para alcançar o estado objetivo. Se as entradas forem inválidas ou não houver solução, retorne "No solution."

Exemplos

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

  • A quantidade de água em um jarro nunca pode exceder a capacidade desse jarro.
  • O total de litros no estado objetivo deve ser igual à capacidade do jarro C.