#include <iostream>
#include <stdlib.h>
#include <time.h>

#define rootPass 29886 //mât khâu gô'c
char arrRootPass[10];//mang chua cac con so cua mat khau gô'c
char lenRootPass;//do dai mat khau gô'c

int enterPass; //mât khâu user nhâp vào
char arrEnterPass[10];//mang chua các con so cua mat khau nhap vào
char lenEnterPass;//do dai mat khau nhap vao

char NUM[10];//mang chua các sô cua NUM
using namespace std;
//in ra ma`n hinh PIN&NUM va` khoi tao NUM
void out()
{
    cout<<"\n PIN: 0 1 2 3 4 5 6 7 8 9\n";
    cout<<" NUM: ";
    for(char i=0;i<10;i++) // i=PIN
    {
        NUM[i]=rand()%3+1; //random 1-3
        cout<<NUM[i]+0<<" ";
    }
    cout<<"\n ------------------------\n";
    cout<<" Type your password:";
}
//tách mat khau ra thanh cac con so, gán vào mang arrPass, len=dô dài pass
// ví du: 29886 -> {2,9,8,8,6}
void splitPass(int num,char *arrPass, char &len)
{
    len=0;
    while(num>0) //thuc hien tach so
    {
        *arrPass=num%10;
        arrPass++;
        len++;
        num=num/10;
    }
}
//kiem tra xem mat khau user nhap vao dung hay sai
char process()
{
    cin>>enterPass; //nhâp mât khâu
    /* tiên hành tách */
    splitPass(rootPass,arrRootPass,lenRootPass);
    splitPass(enterPass,arrEnterPass,lenEnterPass);

    if(lenRootPass!=lenEnterPass) return 0;//do dai 2 mat khau khac nhau =>SAI

    char i,test=0;

    while(lenEnterPass--) //kiem tra tung con so
    {
         for(i=0;i<10;i++)
                //kiem tra tung con sô' cua pass
                //nê'u con sô' tru`ng
                if(arrEnterPass[lenEnterPass]==NUM[i] //pass nhap trung voi NUM
                   &&
                   i==arrRootPass[lenEnterPass]) //pass gô'c trùng voi PIN
                        test++;//kiem tra sô' con sô' pass trùng
    }
    //nê'u trùng hoàn toàn
    if(test==lenRootPass) return 1;// CORRECT PASSWORD;
    return 0; //WRONG PASSWORD;
}
main()
{
    srand(time(NULL));
    out();
    if(process()) cout<<"\n CORRECT PASSWORD!";
    else cout<<"\n WRONG PASSWORD!";
}