2017-05-07 14:28:39 +02:00
|
|
|
import unittest
|
|
|
|
|
|
|
|
|
|
from alphametics import solve
|
|
|
|
|
|
|
|
|
|
|
2017-10-14 12:31:08 +01:00
|
|
|
# Tests adapted from `problem-specifications//canonical-data.json` @ v1.0.0
|
2017-05-07 14:28:39 +02:00
|
|
|
|
|
|
|
|
class TestAlphametics(unittest.TestCase):
|
2017-10-30 14:26:01 -05:00
|
|
|
def test_puzzle_with_03_letters(self):
|
2017-05-07 14:28:39 +02:00
|
|
|
self.assertEqual(solve("I + BB == ILL"), {"I": 1, "B": 9, "L": 0})
|
|
|
|
|
|
2017-10-01 01:46:50 -07:00
|
|
|
def test_invalid_solution_must_have_unique_value_for_each_letter(self):
|
2017-05-07 14:28:39 +02:00
|
|
|
self.assertEqual(solve("A == B"), {})
|
|
|
|
|
|
2017-10-01 01:46:50 -07:00
|
|
|
def test_invalid_leading_zero_solution(self):
|
2017-05-07 14:28:39 +02:00
|
|
|
self.assertEqual(solve("ACA + DD == BD"), {})
|
|
|
|
|
|
2017-10-30 14:26:01 -05:00
|
|
|
def test_puzzle_with_04_letters(self):
|
2017-05-07 14:28:39 +02:00
|
|
|
self.assertEqual(
|
|
|
|
|
solve("AS + A == MOM"), {"A": 9, "S": 2, "M": 1, "O": 0})
|
|
|
|
|
|
2017-10-30 14:26:01 -05:00
|
|
|
def test_puzzle_with_06_letters(self):
|
2017-05-07 14:28:39 +02:00
|
|
|
self.assertEqual(
|
|
|
|
|
solve("NO + NO + TOO == LATE"),
|
|
|
|
|
{"N": 7,
|
|
|
|
|
"O": 4,
|
|
|
|
|
"T": 9,
|
|
|
|
|
"L": 1,
|
|
|
|
|
"A": 0,
|
|
|
|
|
"E": 2})
|
|
|
|
|
|
2017-10-30 14:26:01 -05:00
|
|
|
def test_puzzle_with_07_letters(self):
|
2017-05-07 14:28:39 +02:00
|
|
|
self.assertEqual(
|
|
|
|
|
solve("HE + SEES + THE == LIGHT"),
|
|
|
|
|
{"E": 4,
|
|
|
|
|
"G": 2,
|
|
|
|
|
"H": 5,
|
|
|
|
|
"I": 0,
|
|
|
|
|
"L": 1,
|
|
|
|
|
"S": 9,
|
|
|
|
|
"T": 7})
|
|
|
|
|
|
2017-10-30 14:26:01 -05:00
|
|
|
def test_puzzle_with_08_letters(self):
|
2017-05-07 14:28:39 +02:00
|
|
|
self.assertEqual(
|
|
|
|
|
solve("SEND + MORE == MONEY"),
|
|
|
|
|
{"S": 9,
|
|
|
|
|
"E": 5,
|
|
|
|
|
"N": 6,
|
|
|
|
|
"D": 7,
|
|
|
|
|
"M": 1,
|
|
|
|
|
"O": 0,
|
|
|
|
|
"R": 8,
|
|
|
|
|
"Y": 2})
|
|
|
|
|
|
2017-10-30 14:26:01 -05:00
|
|
|
def test_puzzle_with_10_letters(self):
|
2017-05-07 14:28:39 +02:00
|
|
|
self.assertEqual(
|
|
|
|
|
solve("AND + A + STRONG + OFFENSE + AS + A + GOOD == DEFENSE"),
|
|
|
|
|
{"A": 5,
|
|
|
|
|
"D": 3,
|
|
|
|
|
"E": 4,
|
|
|
|
|
"F": 7,
|
|
|
|
|
"G": 8,
|
|
|
|
|
"N": 0,
|
|
|
|
|
"O": 2,
|
|
|
|
|
"R": 1,
|
|
|
|
|
"S": 6,
|
|
|
|
|
"T": 9})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
unittest.main()
|