Einfach 0 gelöst 0% Erfolgsquote

Checkout-Fassade

Verberge Lagerprüfungen und Preissummen hinter einem einzigen Checkout-Aufruf.

Das lernst du

  • Mehrere Subsysteme hinter einem Aufruf verbergen
  • Den Bestand vor dem Bezahlen prüfen
  • Wiederholte Warenkorbzeilen pro Artikel zusammenfassen

Problem

Das Facade-Pattern gibt einen einfachen Einstiegspunkt in ein komplexes Subsystem. Der checkout-Aufruf eines Shops verbirgt zwei Subsysteme: den Bestand und die Preisliste.

Die Artikel sind von 0 bis n − 1 nummeriert. stock[i] ist die Anzahl der verfügbaren Einheiten von Artikel i, und prices[i] ist sein Preis. Der Warenkorb ist eine Liste von [item, quantity]-Zeilen; derselbe Artikel kann in mehreren Zeilen vorkommen.

checkout(stock, prices, cart) muss:

  1. Den Bestand prüfen: Wenn die Gesamtmenge eines Artikels im Warenkorb größer ist als sein Bestand, schlägt die Bestellung fehl.
  2. Andernfalls die Gesamtsumme des Warenkorbs zurückgeben.

Implementiere checkout_facade(stock, prices, cart).

Input

stock, prices: jeweils n Werte.

cart: [item, quantity]-Zeilen.

Output

Gib den Gesamtpreis zurück, oder -1, wenn für irgendeinen Artikel nicht genug Bestand vorhanden ist.

Einschränkungen

1 ≤ n ≤ 1,000

0 ≤ stock[i], prices[i] ≤ 100,000; 0 ≤ Warenkorbzeilen ≤ 1,000; 1 ≤ quantity ≤ 1,000

Beispiele

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

Erwartete Ausgabe:
expected = 10
Eingabe:
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};

Erwartete Ausgabe:
long long expected = 10;
Eingabe:
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};

Erwartete Ausgabe:
long expected = 10;

Erläuterung

Beide Artikel sind auf Lager. 2 × 3 + 4 × 1 = 10.

Beispiel 2
Eingabe:
cart = [
    [1, 1],
    [1, 2]
]
stock = [5, 2]
prices = [3, 20]

Erwartete Ausgabe:
expected = -1
Eingabe:
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};

Erwartete Ausgabe:
long long expected = -1;
Eingabe:
long[][] cart = new long[][] {
    new long[] {1, 1},
    new long[] {1, 2}
};
long[] stock = new long[] {5, 2};
long[] prices = new long[] {3, 20};

Erwartete Ausgabe:
long expected = -1;

Erläuterung

Artikel 1 erscheint zweimal mit insgesamt 3 Einheiten, aber nur 2 sind auf Lager, daher schlägt die Bestellung fehl: -1.

So gehst du vor

Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.

Hinweis 1

Summiere zuerst die Menge jedes Artikels über alle Warenkorbzeilen.

Hinweis 2

Vergleiche diese Summen mit dem Bestand, bevor du einen Preis berechnest.

Hinweis 3

Fehlt bei einem Artikel etwas, gib sofort -1 zurück.

Erwartete Komplexität

Zeit O(n + Warenkorbzeilen), zusätzlicher Speicher O(n)

Referenzen

Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.