Dois baldes

Dois baldes

Médio

Instruções

Dados dois baldes de tamanhos diferentes e qual balde encher primeiro, determine quantas ações são necessárias para medir uma quantidade exata de litros, transferindo líquido entre os baldes de forma estratégica.

Existem algumas regras que sua solução precisa seguir:

  • Você só pode fazer uma ação por vez.
  • Existem apenas 3 ações possíveis:
    1. Despejar um balde no outro até que: a) o primeiro balde fique vazio b) o segundo balde fique cheio
    2. Esvaziar um balde sem mexer no outro.
    3. Encher um balde sem mexer no outro.
  • Depois de uma ação, você não pode chegar a um estado em que o balde inicial esteja vazio e o outro balde esteja cheio.

Seu programa vai receber como entrada:

  • o tamanho do balde um
  • o tamanho do balde dois
  • a quantidade desejada de litros a alcançar
  • qual balde encher primeiro, o balde um ou o balde dois

Seu programa deve determinar:

  • o número total de ações necessárias para alcançar a quantidade desejada de litros, incluindo o primeiro enchimento do balde inicial
  • qual balde deve terminar com a quantidade desejada de litros, o balde um ou o balde dois
  • quantos litros sobram no outro balde

Observação: qualquer mudança feita em um ou nos dois baldes conta como uma (1) ação.

Exemplo: O balde um comporta até 7 litros, e o balde dois comporta até 11 litros. Digamos que, em um determinado passo, o balde um esteja com 7 litros e o balde dois esteja com 8 litros (7,8). Se você esvaziar o balde um e não mexer no balde dois, ficando com 0 litros e 8 litros, respectivamente (0,8), isso conta como uma ação. Já se você tivesse despejado o balde um no balde dois até o balde dois ficar cheio, ficando com 4 litros no balde um e 11 litros no balde dois (4,11), isso também contaria como apenas uma ação.

Outro exemplo: O balde um comporta 3 litros, e o balde dois comporta até 5 litros. Dizem que você deve começar pelo balde um. Então sua primeira ação é encher o balde um. Para a segunda ação, você escolhe esvaziar o balde um. Na terceira ação, você não pode encher o balde dois, porque isso viola a terceira regra: você não pode terminar, depois de qualquer ação, em um estado em que o balde inicial esteja vazio e o outro balde esteja cheio.

Escrito com <3 na Fullstack Academy por Lindsay Levine.

Mensagens de exceção

Às vezes é necessário levantar uma exceção. Quando você fizer isso, inclua sempre uma mensagem de erro significativa que indique qual é a origem do erro. Isso deixa o seu código mais legível e ajuda muito na depuração. Em situações em que você sabe que a origem do erro será de um determinado tipo, você pode optar por levantar um dos tipos de erro embutidos, mas ainda assim deve incluir uma mensagem significativa.

Este exercício em particular exige que você use a instrução raise para "lançar" um ValueError. Os testes só vão passar se você usar raise na exception e incluir uma mensagem junto com ela.

Para levantar um ValueError com uma mensagem, escreva a mensagem como argumento do tipo exception:

raise ValueError("A meaningful error message here.")
Editar via GitHub O link abre em uma nova janela ou aba
Python Exercism

Tudo pronto para começar Dois baldes?

Crie sua conta no Exercism para aprender e dominar Python com 17 conceitos146 exercícios e mentoria humana de verdade, tudo de graça.