Advertisement
Infernale

QT Cryptarithm

Oct 3rd, 2019
2,408
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3.  
  4. #include <QDebug>
  5. #include <QElapsedTimer>
  6.  
  7. MainWindow::MainWindow(QWidget *parent)
  8.     : QMainWindow(parent)
  9.     , ui(new Ui::MainWindow){
  10.     ui->setupUi(this);
  11. }
  12.  
  13. MainWindow::~MainWindow(){
  14.     delete ui;
  15. }
  16.  
  17. void MainWindow::on_pushButton_clicked(){
  18.     QElapsedTimer timer;
  19.     int solutions = 0;
  20.     qint64 before, after;
  21.     timer.start();
  22.  
  23.     for(int u=1; u<=9 ;u++){
  24.         for(int q=0; q<=9; q++){
  25.             for(int a=1; a<=9; a++){
  26.                 for(int p=0; p<=9; p++){
  27.                     if(u==q || u==a || u==p || q==a || q==p || a==p){
  28.                        continue;
  29.                     }
  30.                     int uqq = u*100 + q*10 + q;
  31.                     int aqqp = a*1000 + q*100 + q*10 + p;
  32.                     if(4*uqq == aqqp){
  33.                         solutions++;
  34.                     }
  35.                 }
  36.             }
  37.         }
  38.     }
  39.     before = timer.nsecsElapsed();
  40.     ui->stupidLabel->setText("Stupid Method : " + QString::number(before) + " ns, " + QString::number(solutions) + " solutions(s)");
  41.  
  42.     solutions = 0;
  43.     timer.start();
  44.     for(int u=1; u<=9 ;u++){
  45.         if(u*4 < 10){
  46.             continue;
  47.         }
  48.         for(int q=0; q<=9; q++){
  49.             if(u==q || (u*4)%10 != (q*4)%10){
  50.                 continue;
  51.             }
  52.             for(int p=1; p<=9; p++){
  53.                 if((q*4)%10 != p || u==p || q==p || (q*4)/10 + (q*4)%10 != q){
  54.                     continue;
  55.                 }
  56.                 for(int a=1; a<=3; a++){
  57.                     if((u*4)/10 != a){
  58.                         continue;
  59.                     }
  60.                     if(u==a || q==a|| p==a){
  61.                        continue;
  62.                     }
  63.                     int uqq = u*100 + q*10 + q;
  64.                     int aqqp = a*1000 + q*100 + q*10 + p;
  65.                     if(4*uqq == aqqp){
  66.                         solutions++;
  67.                     }
  68.                 }
  69.             }
  70.         }
  71.     }
  72.     after = timer.nsecsElapsed();
  73.     ui->improvedLabel->setText("Improved Method : " + QString::number(after) + " ns, " + QString::number(solutions) + " solutions(s)");
  74.     ui->compLabel->setText("Efficiency Comparation : " + QString::number((double)after/before*100) + "%");
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement