1,105,208 Community Members

cryptarithmetic puzzle

Member Avatar
notmasteryet
Newbie Poster
16 posts since Apr 2010
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

I'm trying to solve a cryptarithmetic puzzle TOO + TOO + TOO + TOO = GOOD using a program.

My solution to this, is to use a nested loop for each unique letter (in this case T, O, G, D). The loops would systematically assign the digits from 0-9 to each letter. For example, it might first try T = 0, O = 0, G = 0, D = 0, then T = 0, O = 0, G =0, D = 1, then T = 0, O = 0, G = 0, D = 2, etc. up to T = 9, O = 9, G = 9, D = 9.

. #include<iostream>

using namespace std;

int main()
{
 int o=0;
 int d=0;
 int t=0;
 int g=0;
 {
  for(o=0;o<10;o++)
  {
   (4*o)%10 = d;
   carryFirstCol = (4*o)/10;

   if (d!=o)
   {
    if (((4*o)+carryFirstCol)==o)
    {
     carrySecondCol = ((4*o)+carryFirstCol)%10;

     for (t

   
 }
 return 0;
}

I have that much done.. Now i dont kno how to write the if statment to add up the ts to get the o and then finally the g

Member Avatar
daviddoria
Posting Virtuoso
1,968 posts since Feb 2008
Reputation Points: 334 [?]
Q&As Helped to Solve: 204 [?]
Skill Endorsements: 8 [?]
Featured
 
0
 

Naming the variables the letter names doesn't really help anything. I would create a vector of pairs: std::vector<std::pair<char, int> > or something like that to keep the letters attached to their current value. I don't know what you're doing with all of the multiplying by 4 and modding by 10 business? (Comment, comment, comment!) You also haven't showed how the input is provided? It it that string? (TOO + ... )? If so, you'll first have to parse and figure out where the + symbols are. Then you can convert the individual "words" to numbers by doing string "find and replace" (http://www.java2s.com/Code/Cpp/Data-Type/StringFindandreplace.htm) then you can convert to an int using a stringstream: http://programmingexamples.net/index.php?title=CPP/StringStream

Phew, looks like you've got a lot of work to do! Good luck!

David

Member Avatar
notmasteryet
Newbie Poster
16 posts since Apr 2010
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

I didnt even learn vectors yet

Member Avatar
Lerner
Nearly a Posting Maven
2,416 posts since Jul 2005
Reputation Points: 579 [?]
Q&As Helped to Solve: 407 [?]
Skill Endorsements: 16 [?]
 
0
 

Assume each letter (ie, char) in TOO and GOOD is a digit. The value of the digit is stable for each occurrence of the letter in the equation. Since there are 4 TOOs on the right hand side of the = operator the original equation is the same as 4 * TOO = GOOD. This statement has only 4 unique char so you can use 4 loops, one to represent each unique char in the statement. Each loop will range from 0-9, so rather than using type char you can use the char representation as the variable name for an int. Once you have a digit value for a given char you can change TOO and GOOD into a numeric value and test out the equation. If the equation is true for other than the trivial value of zero for T, O, G, and D, then you have found something interesting. Who knows, there may be more than one non-trivial solution or there may not be any values of T, O, G and D that satisfy the equation as given.

//use A for O so you don't get confused between capital oh and zero 
int TAA = 0;
int GAAD = 0;
for int A = 0; A < 10; ++A
 for int T = 0; T < 10; ++T
   //do dah
     //do dah
       //calculate value of TAA
       TAA = (1 * A) + (10 * A) + (100 * T);
       //calculate value of GAAD

       //check if equation is correct
         //print something cute if it is
You
This article has been dead for over three months: Start a new discussion instead
Post:
Start New Discussion
Tags Related to this Article