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:
Il programma riceverà come input:
Il programma deve determinare:
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.
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.")
Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.