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 :
- Vérifier l'inventaire : si la quantité totale d'un article dans le panier est supérieure à son stock, la commande échoue.
- 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
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.
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.