Crypt-Arithmetic problem in Artificial Intelligence

By | September 28, 2023

In Artificial Intelligence you will encounter this puzzle. Given below is a crypt-arithmetic problem solved.

Example :

    SEND
  + MORE
  -------
 = MONEY
  -------
      CP
+     IS
+    FUN
--------
=   TRUE
-------

All the different alphabets range from 0-9 and each and every alphabet should have a unique value. All the same letters have to be the same number. For deeper analysis, every step is broken down below. b3, b2, b1 are the respective borrowers ( b1,b2,b3=10/0 ) on their corresponding digits.

     b3 b2 b1
 C O  U  N  T
-  C  O  I  N
---------------
   S  N  U  B
---------------

Solution : This can be solved by understanding the following:

Equations:
b3=10                   -- [0]
b2 =10                  -- [1]
10-b1/10+N - I = U      -- [2]
b1+ T - N = B           -- [3]
N =U-1                  -- [4]

We can consider two cases, b1 = 10 and b1 = 0.
Case-1:

b1 =10
10 +T -N =B
which means T is less than N.
Since 10 -1 =9, S =9
From equation  [2] and[4] we see that 10-10/10 +(U-1)  -I =U
this implies I =8

Now we check by using various combinations of U ,N –>{(7,6)…..(3,2) } and check other values using hit and trial from remaining elements from 0-9.
We check for U =7,N =6 which means 10 -1 + 6 -8 must be 7, which satisfies and we proceed further 1076T – 1086 ——- 967B 10 +T-6=B T+4=B T,B has no value for remaining elements.

Solution
 10652
- 1085
--------
  9567
--------

Solution : Since b1 =10 , this means we subtract 1 from U 15 -1 -I =6 I =8 10 +T -5 =B T+5 =B, and T =2, B= 7.
All the values are unique, so this is correct solution

Case-2:

b1=0
T -N=B
b2 =10
10+N - I = U
N =U-1    --[4]
which implies I =9, which is invalid as S =9

Hence, b1=0 is invalid and there exists no solution for this case. Given below is the python code for same

import re

def solve(q):
    try:
        n = next(i for i in q if i.isalpha())  # Check if q has alphabetic characters
    except StopIteration:
        # Use eval to evaluate the parsed string
        # Use sub to replace strings with regular expressions
        # In the regular expression, ab+ will match 'a' followed by any non-zero number of 'b's
        # [abv] is a set of characters, which will match 'a', 'b', or 'v'
        # ^[0-9] means "any digit, at the start of the string"; [^0-9] means "anything except a digit"
        return q if eval(re.sub(r'(^|[^0-9])0+([1-9]+)', r'\1\2', q)) else False
    else:
        for i in (str(i) for i in range(10) if str(i) not in q):
            r = solve(q.replace(n, str(i)))  # Replace character with number
            if r:
                return r
        return False

# Driver code
if __name__ == "__main__":
    query = "COUNT - COIN == SNUB"
    r = solve(query)
    print(r) if r else print("No solution found.")

Output:

03185 - 0368 == 2817

Note:
1. We cannot solve this by

      C O  I  N
    + S N  U  B
  ---------------
      C O U N  T
  ---------------

2. All distinct alphabets should have unique value (0-9).

Author: Mithlesh Upadhyay

I hold an M.Tech degree in Artificial Intelligence (2023) from Delhi Technological University (DTU) and possess over 4 years of experience. I worked at GeeksforGeeks, leading teams and managing content, including GATE CS, Test Series, Placements, C, and C++. I've also contributed technical content to companies like MarsDev, Tutorialspoint, StudyTonight, TutorialCup, and Guru99. My skill set includes coding, Data Structures and Algorithms (DSA), and Object-Oriented Programming (OOPs). I'm proficient in C++, Python, JavaScript, HTML, CSS, Bootstrap, React.js, Node.js, MongoDB, Django, and Data Science.