Track
/
Python
Python
/
Esercizi
/
Due secchi
Due secchi

Due secchi

Medio

Istruzioni

Dati due secchi di dimensioni diverse, e sapendo quale secchio riempire per primo, determina quante azioni servono per misurare un numero esatto di litri trasferendo il liquido tra i secchi in modo strategico.

La soluzione deve rispettare alcune regole:

  • Puoi fare una sola azione alla volta.
  • Le azioni possibili sono solo 3:
    1. Versare il contenuto di un secchio nell'altro finché: a) il primo secchio è vuoto b) il secondo secchio è pieno
    2. Svuotare un secchio senza fare nulla all'altro.
    3. Riempire un secchio senza fare nulla all'altro.
  • Dopo un'azione, non puoi arrivare a uno stato in cui il secchio di partenza è vuoto e l'altro è pieno.

Il programma riceverà come input:

  • la dimensione del secchio one
  • la dimensione del secchio two
  • il numero desiderato di litri da raggiungere
  • quale secchio riempire per primo, il secchio one o il secchio two

Il programma deve determinare:

  • il numero totale di azioni necessarie per raggiungere il numero desiderato di litri, compreso il primo riempimento del secchio di partenza
  • quale secchio deve contenere il numero desiderato di litri, il secchio one o il secchio two
  • quanti litri restano nell'altro secchio

Nota: qualsiasi modifica apportata a uno dei due secchi o a entrambi conta come una (1) azione.

Esempio: Il secchio one può contenere fino a 7 litri, mentre il secchio two può contenerne fino a 11. Supponiamo che a un certo punto il secchio one contenga 7 litri e il secchio two ne contenga 8 (7,8). Se svuoti il secchio one senza modificare il secchio two, rimanendo con 0 litri e 8 litri rispettivamente (0,8), quello conta come una sola azione. Se invece avessi versato dal secchio one nel secchio two finché il secchio two non fosse pieno, ottenendo 4 litri nel secchio one e 11 litri nel secchio two (4,11), anche quello conterebbe come una sola azione.

Un altro esempio: Il secchio one può contenere 3 litri, mentre il secchio two può contenerne fino a 5. Devi iniziare con il secchio one. Quindi la prima azione è riempire il secchio one. Per la seconda azione scegli di svuotare il secchio one. Come terza azione non puoi riempire il secchio two, perché violerebbe la terza regola: dopo qualsiasi azione non puoi trovarti in uno stato in cui il secchio di partenza è vuoto e l'altro è pieno.

Scritto con <3 alla Fullstack Academy da Lindsay Levine.

Messaggi delle eccezioni

A volte è necessario sollevare un'eccezione. Quando lo fai, dovresti sempre includere un messaggio di errore significativo per indicare qual è l'origine dell'errore. Questo rende il codice più leggibile e facilita molto il debug. Quando sai che l'origine dell'errore sarà di un certo tipo, puoi scegliere di sollevare uno dei tipi di errore predefiniti, ma dovresti comunque includere un messaggio significativo.

Questo particolare esercizio richiede che tu usi l'istruzione raise per «lanciare» un ValueError. I test passeranno solo se usi raise sull'exception e aggiungi anche un messaggio.

Per sollevare un ValueError con un messaggio, scrivi il messaggio come argomento del tipo exception:

raise ValueError("A meaningful error message here.")
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Python Exercism

Vuoi iniziare Due secchi?

Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.