#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>
#include <QElapsedTimer>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow){
    ui->setupUi(this);
}

MainWindow::~MainWindow(){
    delete ui;
}

void MainWindow::on_pushButton_clicked(){
    QElapsedTimer timer;
    int solutions = 0;
    qint64 before, after;
    timer.start();

    for(int u=1; u<=9 ;u++){
        for(int q=0; q<=9; q++){
            for(int a=1; a<=9; a++){
                for(int p=0; p<=9; p++){
                    if(u==q || u==a || u==p || q==a || q==p || a==p){
                       continue;
                    }
                    int uqq = u*100 + q*10 + q;
                    int aqqp = a*1000 + q*100 + q*10 + p;
                    if(4*uqq == aqqp){
                        solutions++;
                    }
                }
            }
        }
    }
    before = timer.nsecsElapsed();
    ui->stupidLabel->setText("Stupid Method : " + QString::number(before) + " ns, " + QString::number(solutions) + " solutions(s)");

    solutions = 0;
    timer.start();
    for(int u=1; u<=9 ;u++){
        if(u*4 < 10){
            continue;
        }
        for(int q=0; q<=9; q++){
            if(u==q || (u*4)%10 != (q*4)%10){
                continue;
            }
            for(int p=1; p<=9; p++){
                if((q*4)%10 != p || u==p || q==p || (q*4)/10 + (q*4)%10 != q){
                    continue;
                }
                for(int a=1; a<=3; a++){
                    if((u*4)/10 != a){
                        continue;
                    }
                    if(u==a || q==a|| p==a){
                       continue;
                    }
                    int uqq = u*100 + q*10 + q;
                    int aqqp = a*1000 + q*100 + q*10 + p;
                    if(4*uqq == aqqp){
                        solutions++;
                    }
                }
            }
        }
    }
    after = timer.nsecsElapsed();
    ui->improvedLabel->setText("Improved Method : " + QString::number(after) + " ns, " + QString::number(solutions) + " solutions(s)");
    ui->compLabel->setText("Efficiency Comparation : " + QString::number((double)after/before*100) + "%");
}