Number of Students Unable to Eat Lunch
Real-world version: Stranded at the Battery SwapThe statement here is our own: the same inputs, outputs and technique.
A scooter depot runs one battery swap station. Every scooter is fitted for exactly one of two pack formats, written as 0 or 1, and a scooter can only accept a charged pack of its own format.
The riders waiting to swap stand in a single line. riders[i] is the format the rider at position i needs, with riders[0] at the front of the line.
The charged packs sit in one vertical rack, and only the pack on top can be lifted off. rack lists the packs from the top downwards, so rack[0] is the pack currently on top and the last entry is the pack at the bottom. There are as many packs as riders.
The swap round runs like this, over and over:
- The rider at the front of the line looks at the pack on top of the rack.
- If that pack matches their format, they lift it off and leave the line. The next pack down becomes the top pack, and the next rider steps up to the front.
- Otherwise they take nothing and walk to the back of the line, and the rider behind them steps up to the front.
The round finishes when the line is empty, or when the pack on top matches none of the formats needed by the riders still in the line. In that second case those riders keep circling for ever and none of them will be served.
Return how many riders are still in the line when the round finishes.
Examples
Example 1
- Input
- riders = [0, 1, 1, 0, 1], rack = [1, 1, 0, 0, 0]
- Output
- 1
The rider at the front needs format 0 and the top pack is a 1, so that rider goes to the back and the next one takes the top pack. The following pack, another 1, goes to the rider who is then at the front. Two 0 packs are next and the two riders needing format 0 take them, leaving one rider needing format 1 in front of a 0 pack, which that rider cannot use.
Example 2
- Input
- riders = [1, 1, 1], rack = [0, 1, 1]
- Output
- 3
Every rider in the line needs format 1 and the pack on top is a 0, so each rider in turn declines it and walks to the back. Nothing is ever lifted off the rack and all three riders are still in the line.
Example 3
- Input
- riders = [1, 0], rack = [0, 1]
- Output
- 0
The first rider needs format 1 and declines the 0 on top, so the second rider steps up and takes it. The 1 underneath then goes to the rider who moved to the back, and the line empties.
Constraints
- 1 <= riders.length <= 100
- 1 <= rack.length <= 100
- riders.length == rack.length
- 0 <= riders[i] <= 1
- 0 <= rack[i] <= 1
The signature
The editor starts with this. It matches the parent problem's shape, so a solution that works here works on a standard judge unchanged.
def count_stranded_riders(riders: list[int], rack: list[int]) -> int:public int countStrandedRiders(int[] riders, int[] rack)Checking your plan…
How this problem was checked
- Passed: Reference solution run against 18 test cases: 18 passed
- Passed: 3 worked examples confirmed by running the code
- Passed: 0 eight-word sequences shared with the parent problem's text
- Passed: Agrees with an independent brute-force solution on random inputs
- Passed: Test set shown to catch deliberately broken solutions
- Passed: Reviewed by a separate quality pass
- Passed: Function arity matches the parent problem's
More on the same topics
- Baseball GameReal-world version: Tallying a Round With CorrectionsEasy
- Asteroid CollisionReal-world version: Single Rail Sled RunMedium
- Find the Winner of the Circular GameReal-world version: Last Apprentice at the KilnMedium
- Validate Stack SequencesReal-world version: Could the Tube Have Run That WayMedium