awesome

Finished
11def solve(puzzle: str) -> dict[str, int] | None:
2 pass
2 # Edge Case: Empty puzzle string
3 if not puzzle:
4 return None
5
6 # Parse the puzzle
7 parts = puzzle.replace('==', '=').replace(' ', '').split('=')
8
9 # Edge Case: Invalid puzzle format (no equals sign or too many parts)
10 if len(parts) != 2:
11 return None
12
13 right_side = parts[1]
14 left_sides = parts[0].replace('+', ' ').split()
15
16 # Edge Case: No addends on the left side
17 if not left_sides:
18 return None
19
20 # Get all unique letters
21 letters = set(''.join(left_sides) + right_side)
22
23 # Edge Case: More than 10 unique letters (impossible to assign unique digits)
24 if len(letters) > 10:
25 return None
26
27 # Get leading letters (first letter of each word)
28 leading_letters = {word[0] for word in left_sides + [right_side]}
29
30 # Edge Case: Leading letters cannot be zero
31 # This is handled in the permutation generation below
32
33 # Convert words to lists of characters for easier processing
34 left_words = [list(word) for word in left_sides]
35 right_word = list(right_side)
36
37 # Generate all possible digit assignments
38 from itertools import permutations
39
40 # Try all permutations of digits for the unique letters
41 for perm in permutations(range(10), len(letters)):
42 mapping = dict(zip(letters, perm))
43
44 # Edge Case: Leading digits cannot be zero
45 if any(mapping[letter] == 0 for letter in leading_letters):
46 continue
47
48 # Calculate the sum of left side numbers
49 left_sum = 0
50 valid = True
51
52 for word in left_words:
53 num = 0
54 for char in word:
55 num = num * 10 + mapping[char]
56 left_sum += num
57
58 # Calculate the right side number
59 right_num = 0
60 for char in right_word:
61 right_num = right_num * 10 + mapping[char]
62
63 # Check if the equation is satisfied
64 if left_sum == right_num:
65 return mapping
66
67 # Edge Case: No valid solution found
68 return None
69# Handled Edge Cases: Empty puzzle string, Invalid puzzle format, No addends on left side, More than 10 unique letters, Leading digits cannot be zero, No valid solution found
Test NameStatus
test_leading_zero_solution_is_invalid
Pass
test_puzzle_with_eight_letters
Pass
test_puzzle_with_four_letters
Pass
test_puzzle_with_seven_letters
Pass
test_puzzle_with_six_letters
Pass
test_puzzle_with_ten_letters
Pass
test_puzzle_with_ten_letters_and_199_addends
Pass
test_puzzle_with_three_letters
Pass
test_puzzle_with_two_digits_final_carry
Pass
test_solution_must_have_unique_value_for_each_letter
Pass

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