Retour aux défis
Facile 0 résolus 0 % de réussite

Façade de paiement

Masquer les vérifications de stock et les totaux de prix derrière un simple appel de caisse.

Ce que vous allez apprendre

  • Cacher plusieurs sous-systèmes derrière un seul appel
  • Vérifier le stock avant de facturer
  • Regrouper les lignes répétées du panier par article

Problème

Le motif facade fournit un point d'entrée simple vers un sous-système complexe. L'appel checkout d'une boutique masque deux sous-systèmes : l'inventaire et la liste des prix.

Les articles sont numérotés de 0 à n − 1. stock[i] est le nombre d'unités de l'article i disponibles et prices[i] est son prix. Le panier est une liste de lignes [item, quantity]; un même article peut apparaître sur plusieurs lignes.

checkout(stock, prices, cart) doit :

  1. Vérifier l'inventaire : si la quantité totale d'un article dans le panier est supérieure à son stock, la commande échoue.
  2. Sinon, retourner le prix total du panier.

Implémentez checkout_facade(stock, prices, cart).

Input

stock, prices : n valeurs chacun.

cart : lignes [item, quantity].

Output

Retournez le prix total, ou -1 si un article n'a pas assez de stock.

Contraintes

1 ≤ n ≤ 1,000

0 ≤ stock[i], prices[i] ≤ 100,000 ; 0 ≤ lignes du panier ≤ 1,000 ; 1 ≤ quantity ≤ 1,000

Exemples

Exemple 1
Entrée :
cart = [
    [0, 2],
    [2, 4]
]
stock = [5, 2, 10]
prices = [3, 20, 1]

Sortie attendue :
expected = 10
Entrée :
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};

Sortie attendue :
long long expected = 10;
Entrée :
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};

Sortie attendue :
long expected = 10;

Explication

Les deux articles sont en stock. 2 × 3 + 4 × 1 = 10.

Exemple 2
Entrée :
cart = [
    [1, 1],
    [1, 2]
]
stock = [5, 2]
prices = [3, 20]

Sortie attendue :
expected = -1
Entrée :
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};

Sortie attendue :
long long expected = -1;
Entrée :
long[][] cart = new long[][] {
    new long[] {1, 1},
    new long[] {1, 2}
};
long[] stock = new long[] {5, 2};
long[] prices = new long[] {3, 20};

Sortie attendue :
long expected = -1;

Explication

L'article 1 apparaît deux fois pour un total de 3 unités, mais seulement 2 sont en stock, donc la commande échoue : -1.

Comment l'aborder

Essayez d'abord seul, puis ouvrez les indices un par un.

Indice 1

Additionnez d'abord la quantité de chaque article sur toutes les lignes du panier.

Indice 2

Comparez ces totaux au stock avant de calculer le moindre prix.

Indice 3

Si un article manque, renvoyez -1 tout de suite.

Complexité attendue

temps O(n + lignes du panier), espace supplémentaire O(n)

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.