Advertisement
Fastrail08

Cryptarithmetic Puzzle

May 2nd, 2025
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. //Manual string to integer conversion
  5. // long long strToNum(const string &s) {
  6. //     long long result = 0;
  7. //     for (char c : s) {
  8. //         result = result * 10 + (c - '0');
  9. //     }
  10. //     return result;
  11. // }
  12.  
  13.  
  14. void solve(string &queryString, string &s1, string &s2, string &s3, vector<int> &mappings, vector<bool> &assigned, int index, int &count){
  15.     if(index >= queryString.size()){
  16.         string s1Mapping = "", s2Mapping = "", s3Mapping = "";
  17.         for(char c : s1){
  18.             s1Mapping += to_string(mappings[c - 'a']);
  19.         }
  20.         for(char c : s2){
  21.             s2Mapping += to_string(mappings[c - 'a']);
  22.         }
  23.         for(char c : s3){
  24.             s3Mapping += to_string(mappings[c - 'a']);
  25.         }
  26.        
  27.         long long s1s2MappingNumber = stoll(s1Mapping) + stoll(s2Mapping);
  28.        
  29.         if(s1s2MappingNumber == stoll(s3Mapping)){
  30.             count++;
  31.             for(int i = 0; i < mappings.size(); i++){
  32.                 if(mappings[i] != -1){
  33.                     cout << char('a' + i) << "-" << mappings[i] << " ";
  34.                 }
  35.             }
  36.             cout << '\n';
  37.         }
  38.         return;
  39.     }
  40.     char ch = queryString[index];
  41.     if(mappings[ch - 'a'] == -1){
  42.         for(int i = 0; i < 10; i++){
  43.             if(!assigned[i]){
  44.                 assigned[i] = true;
  45.                 mappings[ch - 'a'] = i;
  46.                 solve(queryString, s1, s2, s3, mappings, assigned, index + 1, count);
  47.                 assigned[i] = false;
  48.             }
  49.         }
  50.         mappings[ch - 'a'] = -1;
  51.     }
  52.     else{
  53.         solve(queryString, s1, s2, s3, mappings, assigned, index + 1, count);
  54.     }
  55.    
  56. }
  57.  
  58. void getCryptMapping(string &s1, string &s2, string &s3){
  59.     string queryString = s1 + s2 + s3;
  60.     vector<int> mappings(26, -1);
  61.     vector<bool> assigned(10, false);
  62.     int count = 0;
  63.     solve(queryString, s1, s2, s3, mappings, assigned, 0, count);
  64.     cout << "count: " << count << '\n';
  65. }
  66.  
  67. int main() {
  68.     // your code goes here
  69.     string s1, s2, s3;
  70.     cin >> s1 >> s2 >> s3;
  71.     getCryptMapping(s1, s2, s3);
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement