Track
/
JavaScript
JavaScript
/
Esercizi
/
Succhi misti
Succhi misti

Succhi misti

Esercizio di apprendimento

Introduzione

Cicli while

Con un ciclo while puoi eseguire del codice ripetutamente, finché una certa condizione è soddisfatta. Si scrive con la parola chiave while, seguita da una condizione racchiusa tra parentesi tonde (()) e da un blocco di codice che contiene il corpo del ciclo, racchiuso tra parentesi graffe ({}).

while (condition) {
  // code that is executed repeatedly as long as the condition is true
}

JavaScript ha anche il ciclo do-while. Qui la condizione viene controllata dopo che il corpo del ciclo è stato eseguito. È utile quando la condizione dipende da valutazioni eseguite nel corpo.

do {
  // The code here will always be executed once and then
  // repeatedly while the condition is true.
} while (condition);

All'interno del corpo di un ciclo puoi usare la parola chiave break per interrompere del tutto l'esecuzione del ciclo. Al contrario, la parola chiave continue interrompe solo l'esecuzione dell'iterazione corrente e passa alla successiva. Con continue puoi spesso evitare di racchiudere grandi parti del corpo del ciclo in un'istruzione if.

let i = 0;

while (i < 100) {
  i = i + 2;

  if (i % 3 === 0) {
    continue;
  }

  // The code here will only be executed when i was not divisible
  // by 3 in the check above.
}

Istruzioni switch

Oltre all'istruzione if, JavaScript ha anche l'istruzione switch per eseguire della logica in modo condizionale. Si usa quando una singola variabile deve essere confrontata con più varianti. Il confronto avviene verificando l'uguaglianza stretta (===), vedi il confronto. Per una variabile x, l'istruzione switch in JavaScript ha la seguente sintassi.

switch (x) {
  case option1:
    // code that is executed when "x === option1" is true
    break;
  case option2:
    // code that is executed when "x === option2" is true
    break;
  default:
    // code that is executed when x does not equal any of the options
}

Il caso default è opzionale e si usa quando vuoi eseguire del codice se nessuna delle altre opzioni corrisponde alla variabile.

Le istruzioni break qui sopra sono necessarie perché, per impostazione predefinita, in JavaScript tutti i casi sono «fallthrough». Ciò significa che, senza un'istruzione break, verrebbe eseguito tutto il codice dei casi successivi alla prima opzione corrispondente, anche se x non corrispondeva a quelle opzioni. Questo comportamento di «fallthrough» predefinito è una trappola comune quando si usa switch in JavaScript. All'interno di una funzione si può anche usare return al posto di break per evitare questo problema.

Istruzioni

La tua amica Li Mei gestisce un bar di succhi dove vende deliziosi succhi di frutta misti. Sei un cliente abituale del suo locale e hai capito che potresti rendere la vita più facile alla tua amica. Decidi di usare le tue competenze di programmazione per aiutare Li Mei nel suo lavoro.

1. Determina quanto tempo ci vuole per preparare un succo

Li Mei ama dire in anticipo ai suoi clienti quanto dovranno aspettare per un succo del menù che hanno ordinato. Fa fatica a ricordare i numeri esatti perché il tempo necessario per preparare i succhi varia. 'Pure Strawberry Joy' richiede 0,5 minuti, 'Energizer' e 'Green Garden' richiedono 1,5 minuti ciascuno, 'Tropical Island' richiede 3 minuti e 'All or Nothing' richiede 5 minuti. Per tutte le altre bevande (ad esempio le offerte speciali) puoi considerare un tempo di preparazione di 2,5 minuti.

Per aiutare la tua amica, scrivi una funzione timeToMixJuice che riceve come argomento un succo del menù e restituisce il numero di minuti necessari per preparare quella bevanda.

timeToMixJuice('Tropical Island');
// => 3

timeToMixJuice('Berries & Lime');
// => 2.5

2. Rifornisci la scorta di spicchi di lime

Molte delle creazioni di Li Mei includono spicchi di lime, come ingrediente o come parte della decorazione. Quando inizia il turno al mattino, deve quindi assicurarsi che il contenitore degli spicchi di lime sia pieno per la giornata che l'aspetta.

Implementa la funzione limesToCut che riceve il numero di spicchi di lime che Li Mei deve tagliare e un array che rappresenta la scorta di lime interi che ha a disposizione. Da un lime 'small' può ricavare 6 spicchi, da un lime 'medium' 8 spicchi e da uno 'large' 10. Taglia sempre i lime nell'ordine in cui appaiono nella lista, partendo dal primo elemento. Continua finché non raggiunge il numero di spicchi che le serve o finché non esaurisce i lime.

Li Mei vorrebbe sapere in anticipo quanti lime deve tagliare. La funzione limesToCut deve restituire il numero di lime da tagliare.

limesToCut(25, ['small', 'small', 'large', 'medium', 'small']);
// => 4

3. Concludi il turno

Li Mei lavora sempre fino alle 15. Poi il suo dipendente Dmitry prende il suo posto. Spesso ci sono bevande che sono state ordinate ma non ancora preparate quando il turno di Li Mei finisce. Dmitry preparerà quindi i succhi rimanenti.

Per rendere il passaggio di consegne più semplice, implementa una funzione remainingOrders che riceve il numero di minuti rimanenti del turno di Li Mei e un array di succhi che sono stati ordinati ma non ancora preparati. La funzione deve restituire gli ordini che Li Mei non riesce a iniziare a preparare prima della fine della sua giornata lavorativa.

Il tempo rimanente del turno sarà sempre maggiore di 0. L'array dei succhi da preparare non sarà mai vuoto. Inoltre, gli ordini vengono preparati nell'ordine in cui appaiono nell'array. Se Li Mei inizia a preparare un certo succo, lo finisce sempre, anche se deve lavorare un po' più a lungo. Se non ci sono ordini rimanenti di cui Dmitry debba occuparsi, deve essere restituito un array vuoto.

remainingOrders(5, ['Energizer', 'All or Nothing', 'Green Garden']);
// => ['Green Garden']
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
JavaScript Exercism

Vuoi iniziare Succhi misti?

Iscriviti a Exercism per imparare e padroneggiare JavaScript con 37 concetti159 esercizi e il mentoring di persone reali, tutto gratis.