impossible

Finished
11def solve(puzzle: str) -> dict[str, int] | None:
2 pass
2 """
3 Solve an alphametics puzzle.
4
5 Args:
6 puzzle: A string representing the alphametics puzzle (e.g., "SEND + MORE == MONEY")
7
8 Returns:
9 A dictionary mapping letters to digits if a solution exists, None otherwise
10 """
11 # Edge Case: Empty or None puzzle
12 if not puzzle:
13 return None
14
15 # Parse the puzzle
16 parts = puzzle.replace("==", "=").replace(" ", "").split("=")
17
18 # Edge Case: Invalid puzzle format (no equals sign or too many parts)
19 if len(parts) != 2:
20 return None
21
22 right_side = parts[1]
23 left_sides = parts[0].replace("+", " ").split()
24
25 # Edge Case: No terms on the left side
26 if not left_sides:
27 return None
28
29 # Extract all unique letters
30 letters = set()
31 for part in left_sides + [right_side]:
32 letters.update(part)
33
34 # Edge Case: No letters in puzzle
35 if not letters:
36 return None
37
38 # Extract first letters (can't be zero)
39 first_letters = {word[0] for word in left_sides + [right_side]}
40
41 # Edge Case: More than 10 unique letters (impossible to solve)
42 if len(letters) > 10:
43 return None
44
45 # Convert letters to a list for indexing
46 letters_list = list(letters)
47
48 # Try all possible digit assignments
49 from itertools import permutations
50
51 for perm in permutations(range(10), len(letters)):
52 mapping = dict(zip(letters_list, perm))
53
54 # Edge Case: Leading zero in any number
55 if any(mapping[first] == 0 for first in first_letters):
56 continue
57
58 # Calculate left side sum
59 left_sum = 0
60 for word in left_sides:
61 num = 0
62 for char in word:
63 num = num * 10 + mapping[char]
64 left_sum += num
65
66 # Calculate right side value
67 right_num = 0
68 for char in right_side:
69 right_num = right_num * 10 + mapping[char]
70
71 # Check if equation is satisfied
72 if left_sum == right_num:
73 return mapping
74
75 # Edge Case: No solution found
76 return None
77# Handled Edge Cases: Empty or None puzzle, Invalid puzzle format (no equals sign or too many parts), No terms on the left side, No letters in puzzle, More than 10 unique letters (impossible to solve), Leading zero in any number, No 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.