Shopping Cart Totals with Best-Offer Discounts and Aisle Ordering, Frozen Items Last

Read the full interview experience this question came from →

Quick Overview

A practical coding exercise that parses shopping-cart item records and reports the total item count and price, then adds percentage discounts and buy-N-get-M-free offers, applying the cheapest offer per product. A final part orders items by aisle with frozen items last, testing parsing, exact money arithmetic and extensible code.

Shopping Cart Totals with Best-Offer Discounts and Aisle Ordering, Frozen Items Last

Company: Instacart

Role: Software Engineer

Category: Software Engineering Fundamentals

Difficulty: medium

Interview Round: Technical Screen

Write a program for a grocery shopping cart. It reads a list of item records for the products in the cart and reports the total number of items and the total price. The task then adds promotions and an ordering requirement for the items. Reading the problem and processing the input took a large share of the time in this round, so settle the input format early. The record format was not reported; the illustration below is an assumption to make the parts concrete. ```text records (one line per product; illustrative format) milk,3.49,2,4,no name, unit price, quantity, aisle, frozen pizza,6.00,3,9,yes apples,0.50,6,1,no promotions (illustrative) milk 10% off pizza buy 2 get 1 free pizza 25% off ``` ### Clarifying Questions - What does one record look like, which fields can be missing or malformed, and can the same product appear in several records? - Are prices given in dollars and cents, and where is a percentage discount rounded: per unit, per product line, or on the total? - Which units count toward the total number of items: does a free unit count? - Within one aisle, and among the frozen items, in what order should items appear? ### Part 1 — Item count and total price Parse the records and compute the total number of items in the cart and the total price. ```hint Clean model first Separate turning raw records into typed values from the arithmetic, and choose a representation for money that stays exact when many prices are added together. ``` #### What This Part Should Cover - Parsing and validating records into a typed item model - An exact money representation and the two totals - Handling repeated products and malformed records ### Part 2 — Promotions Add two kinds of promotion: a percentage discount, and "buy N, get M free". When more than one promotion applies to the same product, apply only the one that gives that product the lowest price. ```hint Compare outcomes, not labels For one product, compute what the customer would pay under each applicable promotion, then compare those amounts rather than the promotions' headline numbers. ``` #### Clarifying Questions for this Part - For buy N get M free, how are units beyond the last complete group treated, for example 5 units under buy 2 get 1 free? - Does each promotion apply to one product, or can one promotion cover several products? #### What This Part Should Cover - The correct price under each promotion type, including quantities that are not a multiple of the group size and the rounding of percentages - Choosing the cheapest promotion per product, and reporting the discount - A structure in which a new promotion type can be added without changing the totals logic ### Part 3 — Order by aisle, frozen items last Return the cart's items ordered by aisle, with frozen items placed after all the other items. ```hint One key, two levels Decide which comparison settles the order first and which second, and how items that tie on both should be ordered so that the output is deterministic. ``` #### What This Part Should Cover - A single sort with a composite key that puts frozen items last and orders by aisle - A deterministic order for ties, and a place for items with a missing aisle - The complexity of the ordering step ### What a Strong Answer Covers - Settles the record format, money representation, rounding and promotion rules before coding - Robust parsing that rejects or reports malformed records instead of failing halfway through - Exact money arithmetic with an explicit rounding rule - Correct buy-N-get-M arithmetic and per-product selection of the cheapest promotion - Readable, extensible code with tests for each part ### Follow-up Questions - Add a promotion across products, such as any 3 items from a group for a fixed price. Why is choosing the cheapest offer per product no longer enough? - Allow a percentage discount to stack with buy N get M. In which order do you apply them, and can the order change the price? - Some records have no aisle. Where do those items go in the order, and how do you report them? - How would you test the promotion logic so that adding a new promotion type cannot silently change the price of an existing one?

Overview: A practical coding exercise that parses shopping-cart item records and reports the total item count and price, then adds percentage discounts and buy-N-get-M-free offers, applying the cheapest offer per product. A final part orders items by aisle with frozen items last, testing parsing, exact money arithmetic and extensible code.

Read the full Instacart Software Engineer interview experience this question came from

Instacart logo
Instacart
Oct 10, 2026
mediumSoftware EngineerTechnical ScreenSoftware Engineering Fundamentals
0
0

Write a program for a grocery shopping cart. It reads a list of item records for the products in the cart and reports the total number of items and the total price. The task then adds promotions and an ordering requirement for the items. Reading the problem and processing the input took a large share of the time in this round, so settle the input format early.

The record format was not reported; the illustration below is an assumption to make the parts concrete.

records (one line per product; illustrative format)
  milk,3.49,2,4,no          name, unit price, quantity, aisle, frozen
  pizza,6.00,3,9,yes
  apples,0.50,6,1,no

promotions (illustrative)
  milk   10% off
  pizza  buy 2 get 1 free
  pizza  25% off

Clarifying Questions Guidance

  • What does one record look like, which fields can be missing or malformed, and can the same product appear in several records?
  • Are prices given in dollars and cents, and where is a percentage discount rounded: per unit, per product line, or on the total?
  • Which units count toward the total number of items: does a free unit count?
  • Within one aisle, and among the frozen items, in what order should items appear?

Part 1 — Item count and total price

Parse the records and compute the total number of items in the cart and the total price.

What This Part Should Cover Guidance

  • Parsing and validating records into a typed item model
  • An exact money representation and the two totals
  • Handling repeated products and malformed records

Part 2 — Promotions

Add two kinds of promotion: a percentage discount, and "buy N, get M free". When more than one promotion applies to the same product, apply only the one that gives that product the lowest price.

Clarifying Questions for this Part Guidance

  • For buy N get M free, how are units beyond the last complete group treated, for example 5 units under buy 2 get 1 free?
  • Does each promotion apply to one product, or can one promotion cover several products?

What This Part Should Cover Guidance

  • The correct price under each promotion type, including quantities that are not a multiple of the group size and the rounding of percentages
  • Choosing the cheapest promotion per product, and reporting the discount
  • A structure in which a new promotion type can be added without changing the totals logic

Part 3 — Order by aisle, frozen items last

Return the cart's items ordered by aisle, with frozen items placed after all the other items.

What This Part Should Cover Guidance

  • A single sort with a composite key that puts frozen items last and orders by aisle
  • A deterministic order for ties, and a place for items with a missing aisle
  • The complexity of the ordering step

What a Strong Answer Covers Guidance

  • Settles the record format, money representation, rounding and promotion rules before coding
  • Robust parsing that rejects or reports malformed records instead of failing halfway through
  • Exact money arithmetic with an explicit rounding rule
  • Correct buy-N-get-M arithmetic and per-product selection of the cheapest promotion
  • Readable, extensible code with tests for each part

Follow-up Questions Guidance

  • Add a promotion across products, such as any 3 items from a group for a fixed price. Why is choosing the cheapest offer per product no longer enough?
  • Allow a percentage discount to stack with buy N get M. In which order do you apply them, and can the order change the price?
  • Some records have no aisle. Where do those items go in the order, and how do you report them?
  • How would you test the promotion logic so that adding a new promotion type cannot silently change the price of an existing one?