Fácil 0 resueltos 0% de aceptación

Fachada de pago

Oculta las comprobaciones de stock y los totales de precio detrás de una sola llamada de checkout.

Lo que aprenderás

  • Ocultar varios subsistemas detrás de una sola llamada
  • Comprobar el stock antes de cobrar
  • Combinar líneas repetidas del carrito por artículo

Problema

Ver original (inglés)

El patrón facade ofrece un punto de entrada simple a un subsistema complicado. La llamada checkout de una tienda oculta dos subsistemas: el inventario y la lista de precios.

Los artículos están numerados de 0 a n − 1. stock[i] es cuántas unidades del artículo i están disponibles y prices[i] es su precio. El carrito es una lista de líneas [item, quantity]; el mismo artículo puede aparecer en varias líneas.

checkout(stock, prices, cart) debe:

  1. Comprobar el inventario: si la cantidad total de cualquier artículo en el carrito es mayor que su stock, el pedido falla.
  2. En caso contrario, devolver el precio total del carrito.

Implementa checkout_facade(stock, prices, cart).

Entrada

stock, prices: n valores cada uno.

cart: líneas [item, quantity].

Salida

Devuelve el precio total, o -1 si algún artículo no tiene suficiente stock.

Restricciones

1 ≤ n ≤ 1,000

0 ≤ stock[i], prices[i] ≤ 100,000; 0 ≤ líneas del carrito ≤ 1,000; 1 ≤ quantity ≤ 1,000

Ejemplos

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

Salida 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};

Salida 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};

Salida esperada:
long expected = 10;

Explicación

Ambos artículos tienen stock. 2 × 3 + 4 × 1 = 10.

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

Salida 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};

Salida 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};

Salida esperada:
long expected = -1;

Explicación

El artículo 1 aparece dos veces con un total de 3 unidades, pero solo hay 2 en stock, así que el pedido falla: -1.

Cómo abordarlo

Inténtalo primero por tu cuenta y luego abre las pistas una a una.

Pista 1

Suma primero la cantidad de cada artículo en todas las líneas del carrito.

Pista 2

Compara esos totales con el stock antes de calcular ningún precio.

Pista 3

Si falta algún artículo, devuelve -1 de inmediato.

Complejidad esperada

tiempo O(n + líneas del carrito), espacio extra O(n)

Referencias

Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.