Finished
1import random
2import string
3
14class Robot:
5 # Class variable to hold the pool of names and track used names
6 _name_pool = []
7 _used_names = set()
8
29 def __init__(self):
3 pass
4
10 # Edge Case: Initialize the name pool if it's empty
11 if not Robot._name_pool:
12 self._generate_name_pool()
13 self._name = None
14 # Edge Case: Handle the case where all possible names are used
15 if len(Robot._used_names) >= len(Robot._name_pool):
16 raise RuntimeError("No more unique names available")
17 self._assign_name()
18
519 @property
620 def name(self) -> str:
7 pass
8
21 # Edge Case: Return the assigned name
22 return self._name
23
924 def reset(self) -> None:
10 pass
25 # Edge Case: Handle reset when all possible names are used
26 if len(Robot._used_names) >= len(Robot._name_pool):
27 raise RuntimeError("No more unique names available")
28 # Edge Case: Remove current name from used set if it exists
29 if self._name:
30 Robot._used_names.discard(self._name)
31 self._assign_name()
32
33 def _assign_name(self) -> None:
34 # Edge Case: Assign a new unique name from the pool
35 while True:
36 candidate = random.choice(Robot._name_pool)
37 if candidate not in Robot._used_names:
38 self._name = candidate
39 Robot._used_names.add(candidate)
40 break
41
42 @classmethod
43 def _generate_name_pool(cls) -> None:
44 # Edge Case: Generate all possible names exactly once
45 letters = string.ascii_uppercase
46 digits = string.digits
47 cls._name_pool = [
48 f"{l1}{l2}{d1}{d2}{d3}"
49 for l1 in letters
50 for l2 in letters
51 for d1 in digits
52 for d2 in digits
53 for d3 in digits
54 ]
55 random.shuffle(cls._name_pool)
56
57# Handled Edge Cases: Empty name pool initialization, all names used, name assignment, name reset, name removal from used set
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.