Reaction time game in Raspberry Pi - Time & Space Complexity
We want to understand how the time it takes for the reaction time game code to run changes as the game runs longer or with more players.
Specifically, we ask: how does the number of steps the program does grow when the game runs?
Analyze the time complexity of the following code snippet.
import time
import random
for i in range(5):
wait = random.uniform(1, 3)
time.sleep(wait) # wait for random time
start = time.time()
input('Press Enter as fast as you can!')
reaction = time.time() - start
print(f'Reaction time: {reaction:.3f} seconds')
This code runs a simple reaction time game 5 times, waiting a random time before asking the player to press Enter and measuring how fast they respond.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The for-loop that repeats the reaction test 5 times.
- How many times: Exactly 5 times, fixed and does not change with input size.
Since the loop runs a fixed 5 times, the number of operations stays the same no matter what.
| Input Size (n) | Approx. Operations |
|---|---|
| 5 | 5 reaction tests |
| 10 | Still 5 reaction tests (fixed) |
| 100 | Still 5 reaction tests (fixed) |
Pattern observation: The number of steps does not grow with input size because the loop count is fixed.
Time Complexity: O(1)
This means the program runs in constant time, doing the same amount of work no matter how big the input or game length might be.
[X] Wrong: "The time grows with the number of seconds the player waits before pressing Enter."
[OK] Correct: Waiting time is a pause, not extra steps the program does. The program only counts how many times it runs the loop, not how long the player takes to respond.
Understanding how loops and fixed repetitions affect time helps you explain how programs behave as they run longer or handle more data. This skill is useful when designing games or interactive programs on devices like Raspberry Pi.
"What if we changed the loop to run for a variable number of rounds based on user input? How would the time complexity change?"
Practice
Solution
Step 1: Understand the game goal
The reaction time game tests how fast a player reacts to a signal, usually an LED lighting up.Step 2: Identify the key action
The player must press a button as soon as the LED lights up to measure reaction speed.Final Answer:
To measure how quickly a player presses a button after an LED lights up -> Option AQuick Check:
Reaction time = button press speed after LED [OK]
- Confusing reaction time with counting presses
- Thinking the game controls LED brightness
- Assuming it displays colors randomly
Solution
Step 1: Recall GPIO setup syntax
To set a pin as input, use GPIO.setup(pin_number, GPIO.IN).Step 2: Match the correct option
GPIO.setup(17, GPIO.IN) uses GPIO.setup(17, GPIO.IN), which is correct for input pin setup.Final Answer:
GPIO.setup(17, GPIO.IN) -> Option BQuick Check:
GPIO.setup(pin, GPIO.IN) sets input pin [OK]
- Using GPIO.OUT instead of GPIO.IN for input
- Confusing GPIO.input() with GPIO.setup()
- Trying to use GPIO.output() on input pins
import time
start = time.time()
# LED lights up here
input('Press Enter as fast as you can!')
end = time.time()
print(f'Reaction time: {end - start:.2f} seconds')Solution
Step 1: Understand timing with time.time()
The code records time before and after waiting for user input.Step 2: Calculate reaction time
The difference end - start measures how long the user took to press Enter after the prompt.Final Answer:
Reaction time: time taken between prompt and Enter press -> Option DQuick Check:
Reaction time = end - start after input [OK]
- Assuming reaction time is always zero
- Confusing syntax errors with correct code
- Thinking input() is not called
GPIO.setup(18, GPIO.OUT) GPIO.setup(23, GPIO.IN) GPIO.output(23, GPIO.HIGH) # Wait for button press on pin 23
Solution
Step 1: Check pin setup
Pin 23 is set as input with GPIO.setup(23, GPIO.IN).Step 2: Identify incorrect usage
GPIO.output() cannot be used on input pins; it is only for output pins.Final Answer:
GPIO.output() used on input pin 23, which is incorrect -> Option CQuick Check:
GPIO.output() only for output pins [OK]
- Trying to write output on input pins
- Forgetting to setup pins before use
- Assuming no error when pin modes mismatch
Solution
Step 1: Use random.randint for integer delay
random.randint(1, 5) returns an integer between 1 and 5 seconds.Step 2: Sleep before turning LED on
time.sleep(wait) pauses the program before GPIO.output(18, GPIO.HIGH) lights the LED.Final Answer:
import random import time wait = random.randint(1, 5) time.sleep(wait) GPIO.output(18, GPIO.HIGH) -> Option AQuick Check:
random.randint + sleep before LED ON [OK]
- Using random.random with arguments (invalid)
- Sleeping after turning LED on
- Not importing random module
Ready to prove it?
Pass the test and this pattern moves unknown
