Skip to content

JebinRaj12/Cryptarithmetic-Problem

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

ExpNo 8 : Solve Cryptarithmetic Problem,a CSP(Constraint Satisfaction Problem) using Python

Name: Jebin Raj J

Register Number/Staff Id: 212224030012

Aim:

To solve Cryptarithmetic Problem,a CSP(Constraint Satisfaction Problem) using Python

Procedure:

Input and Output
Input: This algorithm will take three words.
B A S E
B A L L
----------
G A M E S

Output: It will show which letter holds which number from 0 – 9. For this case it is like this.

          B A S E                         2 4 6 1
          B A L L                         2 4 5 5
         ---------                       ---------
        G A M E S                       0 4 9 1 6

Algorithm For this problem, we will define a node, which contains a letter and its corresponding values.

isValid(nodeList, count, word1, word2, word3)

Input − A list of nodes, the number of elements in the node list and three words.

Output − True if the sum of the value for word1 and word2 is same as word3 value.

Begin
m := 1
for each letter i from right to left of word1, do
ch := word1[i]
for all elements j in the nodeList, do
if nodeList[j].letter = ch, then
break
done
val1 := val1 + (m * nodeList[j].value)
m := m * 10
done

m := 1
for each letter i from right to left of word2, do
ch := word2[i]
for all elements j in the nodeList, do
if nodeList[j].letter = ch, then
break
done

  val2 := val2 + (m * nodeList[j].value)
  m := m * 10

done

m := 1
for each letter i from right to left of word3, do
ch := word3[i]
for all elements j in the nodeList, do
if nodeList[j].letter = ch, then
break
done

  val3 := val3 + (m * nodeList[j].value)
  m := m * 10

done

if val3 = (val1 + val2), then
return true
return false
End


Sample Input and Output:

SEND = 9567
MORE = 1085
# Exp No 8: Solve Cryptarithmetic Problem using Python

from itertools import permutations

Function to solve the cryptarithmetic problem

def solve_cryptarithmetic(word1, word2, result): # Get unique letters letters = set(word1 + word2 + result) if len(letters) > 10: print("Too many unique letters, solution impossible!") return

letters = list(letters)

# Generate all possible digit assignments
for perm in permutations(range(10), len(letters)):
    mapping = dict(zip(letters, perm))
    
    # Skip if any word starts with 0
    if mapping[word1[0]] == 0 or mapping[word2[0]] == 0 or mapping[result[0]] == 0:
        continue
    
    # Convert words to numbers using the mapping
    num1 = sum(mapping[ch] * (10 ** i) for i, ch in enumerate(word1[::-1]))
    num2 = sum(mapping[ch] * (10 ** i) for i, ch in enumerate(word2[::-1]))
    num3 = sum(mapping[ch] * (10 ** i) for i, ch in enumerate(result[::-1]))
    
    if num1 + num2 == num3:
        print(f"{word1} = {num1}")
        print(f"{word2} = {num2}")
        print(f"{result} = {num3}")
        print(f"Letter mapping: {mapping}")
        return mapping

print("No solution found")
return None

Example: SEND + MORE = MONEY

solve_cryptarithmetic("SEND", "MORE", "MONEY")


MONEY = 10652

Result:

Thus a Cryptarithmetic Problem was solved using Python successfully

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%