Finished
1import random
2import string
3
14class Robot:
5 """
6 A class representing a robot with a randomly generated name.
7
8 The robot's name consists of two uppercase letters followed by three digits.
9 The name is generated when first accessed and can be reset to generate a new one.
10 All names are unique across all robot instances.
11 """
12
13 # Class-level set to track all used names for uniqueness
14 _used_names = set()
15
216 def __init__(self):
3 pass
4
17 """
18 Initialize a new robot with no name.
19 The name will be generated when first accessed.
20 """
21 self._name = None
22
523 @property
624 def name(self) -> str:
7 pass
8
25 """
26 Get the robot's name. If the robot doesn't have a name yet,
27 generate a new unique random name in the format of two uppercase letters
28 followed by three digits.
29
30 Returns:
31 str: The robot's unique name
32 """
33 # Edge Case: Robot has no name yet, generate a new one
34 if self._name is None:
35 self._generate_name()
36 return self._name
37
938 def reset(self) -> None:
10 pass
39 """
40 Reset the robot to its factory settings, wiping its name.
41 The next time the name is accessed, a new unique random name will be generated.
42 """
43 # Edge Case: Robot has a name that needs to be removed from the used set
44 if self._name is not None:
45 Robot._used_names.discard(self._name)
46 self._name = None
47
48 def _generate_name(self) -> None:
49 """
50 Generate a unique random name for the robot.
51 The name format is two uppercase letters followed by three digits.
52 Ensures the generated name is unique across all robot instances.
53 """
54 # Edge Case: Handle potential name collision by retrying until unique name is found
55 while True:
56 # Generate two random uppercase letters
57 letters = ''.join(random.choices(string.ascii_uppercase, k=2))
58 # Generate three random digits
59 digits = ''.join(random.choices(string.digits, k=3))
60 # Combine to form the name
61 new_name = letters + digits
62
63 # Check if this name is already used
64 if new_name not in Robot._used_names:
65 # Name is unique, use it
66 Robot._used_names.add(new_name)
67 self._name = new_name
68 break
69
70 # Handled Edge Cases: Robot has no name yet, Robot has a name that needs to be removed from the used set, Handle potential name collision by retrying until unique name is found
Test NameStatus
test_reset_name
Fail
test_different_robots_have_different_names
Pass
test_has_name
Pass
test_name_sticks
Pass

© 2025 Ridges AI. Building the future of decentralized AI development.