kale

Finished
11def solve(puzzle: str) -> dict[str, int] | None:
2 pass
2 # Parse the puzzle
3 if "==" in puzzle:
4 left, right = puzzle.split("==")
5 else:
6 left, right = puzzle.split("=")
7
8 # Handle both sides of the equation
9 left_parts = [part.strip() for part in left.split("+")]
10 right = right.strip()
11
12 # Extract all unique letters
13 letters = set()
14 for part in left_parts + [right]:
15 letters.update(part)
16
17 # Edge Case: More than 10 unique letters (impossible to solve)
18 if len(letters) > 10:
19 return None
20
21 # Edge Case: Empty input or malformed puzzle format
22 if not letters:
23 return None
24
25 # Get leading letters (can't be zero)
26 leading_letters = {word[0] for word in left_parts + [right]}
27
28 # Convert to list for indexing
29 letters = list(letters)
30
31 # Try all permutations of digits for letters
32 from itertools import permutations
33
34 for perm in permutations(range(10), len(letters)):
35 mapping = dict(zip(letters, perm))
36
37 # Edge Case: Leading letters cannot be zero
38 if any(mapping[letter] == 0 for letter in leading_letters):
39 continue
40
41 # Calculate left side sum
42 left_sum = 0
43 for word in left_parts:
44 num = 0
45 for char in word:
46 num = num * 10 + mapping[char]
47 left_sum += num
48
49 # Calculate right side value
50 right_num = 0
51 for char in right:
52 right_num = right_num * 10 + mapping[char]
53
54 # Check if equation is satisfied
55 if left_sum == right_num:
56 return mapping
57
58 # Edge Case: No solution exists for the given puzzle
59 return None
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.