Track
/
Go
Go
/
Esercizi
/
Due secchi
Due secchi

Due secchi

Difficile

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.

Implementazione

Nel package twobucket, implementa una func Go, Solve, con la seguente firma:

func Solve(sizeBucketOne,
	sizeBucketTwo, goalAmount int, startBucket string,
) (goalBucket string, numSteps, otherBucketLevel int, e error)

Solve restituisce quattro valori: il secchio obiettivo risultante ("one" o "two"), il numero di mosse/passi per raggiungere la quantità obiettivo, i litri rimasti nell'altro secchio e un valore di errore. Restituisci un errore se un parametro non è valido o se non è possibile trovare una soluzione.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Go Exercism

Vuoi iniziare Due secchi?

Iscriviti a Exercism per imparare e padroneggiare Go con 34 concetti165 esercizi e il mentoring di persone reali, tutto gratis.