Trilhas
/
JavaScript
JavaScript
/
Exercícios
/
Mistura de sucos
Mistura de sucos

Mistura de sucos

Exercício de aprendizagem

Introdução

Laços while

Com um laço while, você pode executar código repetidamente enquanto uma determinada condição for satisfeita. Ele é escrito com a palavra-chave while, seguida de uma condição entre parênteses redondos e de um bloco de código que contém o corpo do laço, entre chaves.

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

O JavaScript também tem o laço do-while. Aqui, a condição é verificada depois que o corpo do laço é executado. Isso é útil quando a condição depende de avaliações feitas dentro do corpo.

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

Dentro do corpo de um laço, você pode usar a palavra-chave break para encerrar por completo a execução do laço. Já a palavra-chave continue interrompe apenas a execução da iteração atual e passa para a próxima. Com continue, muitas vezes você consegue evitar envolver grandes partes do corpo do laço em uma condicional.

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.
}

Condicionais switch

Além da condicional if, o JavaScript também tem a condicional switch para executar lógica de forma condicional. Ela é usada quando uma única variável precisa ser comparada com várias alternativas. A comparação é feita verificando a igualdade estrita (===), veja conceito de comparação. Para uma variável x, a condicional switch em JavaScript tem a seguinte sintaxe.

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
}

O caso default é opcional e serve para quando você quer executar algum código se nenhuma das outras opções corresponder à variável.

As instruções break acima são necessárias porque, por padrão, todos os casos são "fallthrough" no JavaScript. Isso significa que, sem nenhuma instrução break, todo o código dos casos abaixo da primeira opção correspondente seria executado, mesmo que x não correspondesse a essas opções. Esse comportamento de "fallthrough por padrão" é uma armadilha comum ao usar switch em JavaScript. Dentro de uma função, return também pode ser usado no lugar de break para evitar esse problema.

Instruções

Sua amiga Li Mei tem um bar de sucos, onde ela vende deliciosos sucos mistos de frutas. Você é um cliente frequente na loja dela e percebeu que poderia facilitar a vida da sua amiga. Você decide usar suas habilidades de programação para ajudar Li Mei no trabalho dela.

1. Determine quanto tempo leva para misturar um suco

Li Mei gosta de avisar os clientes com antecedência quanto tempo eles vão esperar pelo suco do cardápio que pediram. Ela tem dificuldade para lembrar os números exatos, porque o tempo de preparo dos sucos varia. 'Pure Strawberry Joy' leva 0,5 minutos, 'Energizer' e 'Green Garden' levam 1,5 minutos cada um, 'Tropical Island' leva 3 minutos e 'All or Nothing' leva 5 minutos. Para todas as outras bebidas (por exemplo, ofertas especiais), você pode considerar um tempo de preparo de 2,5 minutos.

Para ajudar sua amiga, escreva uma função timeToMixJuice que recebe um suco do cardápio como argumento e retorna o número de minutos necessários para misturar essa bebida.

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

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

2. Reponha o estoque de gomos de limão

Muitas das criações de Li Mei levam gomos de limão, seja como ingrediente, seja como parte da decoração. Então, quando ela começa o turno pela manhã, precisa garantir que o pote de gomos de limão esteja cheio para o resto do dia.

Implemente a função limesToCut, que recebe o número de gomos de limão que Li Mei precisa cortar e um array que representa o estoque de limões inteiros que ela tem à mão. Ela consegue 6 gomos de um limão 'small', 8 gomos de um limão 'medium' e 10 de um limão 'large'. Ela sempre corta os limões na ordem em que aparecem na lista, começando pelo primeiro item. Ela continua até atingir o número de gomos de que precisa ou até acabarem os limões.

Li Mei gostaria de saber com antecedência quantos limões ela precisa cortar. A função limesToCut deve retornar o número de limões a cortar.

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

3. Termine o turno

Li Mei sempre trabalha até as 15h. Depois, seu funcionário Dmitry assume. Muitas vezes há bebidas que foram pedidas, mas ainda não foram preparadas quando o turno de Li Mei termina. Dmitry então prepara os sucos que faltam.

Para facilitar a passagem de turno, implemente uma função remainingOrders, que recebe o número de minutos restantes no turno de Li Mei e um array de sucos que foram pedidos mas ainda não foram preparados. A função deve retornar os pedidos que Li Mei não consegue começar a preparar antes do fim do seu dia de trabalho.

O tempo restante no turno será sempre maior que 0. O array de sucos a preparar nunca estará vazio. Além disso, os pedidos são preparados na ordem em que aparecem no array. Se Li Mei começa a misturar um suco, ela sempre o termina, mesmo que precise trabalhar um pouco mais. Se não sobrar nenhum pedido para Dmitry cuidar, deve-se retornar um array vazio.

remainingOrders(5, ['Energizer', 'All or Nothing', 'Green Garden']);
// => ['Green Garden']
Editar via GitHub O link abre em uma nova janela ou aba
JavaScript Exercism

Tudo pronto para começar Mistura de sucos?

Crie sua conta no Exercism para aprender e dominar JavaScript com 37 conceitos159 exercícios e mentoria humana de verdade, tudo de graça.