Easy 0 solved 0% acceptance

Checkout Facade

Hide stock checks and price totals behind one simple checkout call.

What you'll learn

  • Hide several subsystems behind one call
  • Check stock before charging
  • Combine repeated cart lines per item

Problem

The facade pattern gives a simple entry point to a complicated subsystem. A shop's checkout call hides two subsystems: the inventory and the price list.

Items are numbered 0 to n − 1. stock[i] is how many units of item i are available and prices[i] is its price. The cart is a list of [item, quantity] lines; the same item may appear on several lines.

checkout(stock, prices, cart) must:

  1. Check the inventory: if the total quantity of any item in the cart is greater than its stock, the order fails.
  2. Otherwise return the total price of the cart.

Implement checkout_facade(stock, prices, cart).

Input

stock, prices: n values each.

cart: [item, quantity] lines.

Output

Return the total price, or -1 if any item does not have enough stock.

Constraints

1 ≤ n ≤ 1,000

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

Examples

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

Expected output:
expected = 10
Input:
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};

Expected output:
long long expected = 10;
Input:
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};

Expected output:
long expected = 10;

Explanation

Both items are in stock. 2 × 3 + 4 × 1 = 10.

Example 2
Input:
cart = [
    [1, 1],
    [1, 2]
]
stock = [5, 2]
prices = [3, 20]

Expected output:
expected = -1
Input:
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};

Expected output:
long long expected = -1;
Input:
long[][] cart = new long[][] {
    new long[] {1, 1},
    new long[] {1, 2}
};
long[] stock = new long[] {5, 2};
long[] prices = new long[] {3, 20};

Expected output:
long expected = -1;

Explanation

Item 1 appears twice for a total of 3 units, but only 2 are in stock, so the order fails: -1.

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

Add up the quantity of each item over all cart lines first.

Hint 2

Compare those totals with the stock before computing any price.

Hint 3

If any item is short, return -1 straight away.

Expected complexity

O(n + cart lines) time, O(n) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.