Fácil 0 resolvidos 0% de aceitação

Fachada de checkout

Esconda as verificações de estoque e os totais de preço atrás de uma única chamada de checkout.

O que você vai aprender

  • Esconder vários subsistemas atrás de uma chamada
  • Verificar o estoque antes de cobrar
  • Juntar linhas repetidas do carrinho por item

Problema

Ver original (inglês)

O padrão facade fornece um ponto de entrada simples para um subsistema complicado. A chamada checkout de uma loja esconde dois subsistemas: o estoque e a lista de preços.

Os itens são numerados de 0 até n − 1. stock[i] é quantas unidades do item i estão disponíveis e prices[i] é seu preço. O carrinho é uma lista de linhas [item, quantity]; o mesmo item pode aparecer em várias linhas.

checkout(stock, prices, cart) deve:

  1. Verificar o estoque: se a quantidade total de qualquer item no carrinho for maior do que seu estoque, o pedido falha.
  2. Caso contrário, retornar o preço total do carrinho.

Implemente checkout_facade(stock, prices, cart).

Input

stock, prices: n valores cada.

cart: linhas [item, quantity].

Output

Retorne o preço total, ou -1 se qualquer item não tiver estoque suficiente.

Restrições

1 ≤ n ≤ 1,000

0 ≤ stock[i], prices[i] ≤ 100,000; 0 ≤ linhas do carrinho ≤ 1,000; 1 ≤ quantity ≤ 1,000

Exemplos

Exemplo 1
Entrada:
cart = [
    [0, 2],
    [2, 4]
]
stock = [5, 2, 10]
prices = [3, 20, 1]

Saída esperada:
expected = 10
Entrada:
std::vector<std::vector<long long>> cart = {
    {0, 2},
    {2, 4}
};
std::vector<long long> stock = {5, 2, 10};
std::vector<long long> prices = {3, 20, 1};

Saída esperada:
long long expected = 10;
Entrada:
long[][] cart = new long[][] {
    new long[] {0, 2},
    new long[] {2, 4}
};
long[] stock = new long[] {5, 2, 10};
long[] prices = new long[] {3, 20, 1};

Saída esperada:
long expected = 10;

Explicação

Ambos os itens estão em estoque. 2 × 3 + 4 × 1 = 10.

Exemplo 2
Entrada:
cart = [
    [1, 1],
    [1, 2]
]
stock = [5, 2]
prices = [3, 20]

Saída esperada:
expected = -1
Entrada:
std::vector<std::vector<long long>> cart = {
    {1, 1},
    {1, 2}
};
std::vector<long long> stock = {5, 2};
std::vector<long long> prices = {3, 20};

Saída esperada:
long long expected = -1;
Entrada:
long[][] cart = new long[][] {
    new long[] {1, 1},
    new long[] {1, 2}
};
long[] stock = new long[] {5, 2};
long[] prices = new long[] {3, 20};

Saída esperada:
long expected = -1;

Explicação

O item 1 aparece duas vezes para um total de 3 unidades, mas apenas 2 estão em estoque, então o pedido falha: -1.

Como abordar

Tente sozinho primeiro e depois abra uma dica de cada vez.

Dica 1

Some primeiro a quantidade de cada item em todas as linhas do carrinho.

Dica 2

Compare esses totais com o estoque antes de calcular qualquer preço.

Dica 3

Se faltar algum item, retorne -1 na hora.

Complexidade esperada

tempo O(n + linhas do carrinho), espaço extra O(n)

Referências

Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.