#include "solvefunction.h"
#include <QDebug>
int solveFunction(cubesstate state,int *i)
{
int n=0;
int c=state.cubeDirection(7);
int t=0;
//定义c=6为需要rot(2)
//cube 7
//qDebug() << "方向" << c;
bool success=false;
while(!success && n<200)
switch (c)
{
case 1:
while(state.cubePosition(7)!=19) i[n++]=state.rotateN(1,true); c=6; break;
case 4:
while(state.cubePosition(7)!=9) i[n++]=state.rotateN(4,true); c=6; break;
case 5:
while(state.cubePosition(7)!=11) i[n++]=state.rotateN(5,true); c=6; break;
case 6:
while(state.cubePosition(7)!=1) i[n++]=state.rotateN(2,true); c=0; break;
case 2:
while(state.cubePosition(7)!=9) i[n++]=state.rotateN(2,true); i[n++]=state.rotateN(4,false); c=0; break;
case 3:
while(state.cubePosition(7)!=15) i[n++]=state.rotateN(3,true); i[n++]=state.rotateN(4,true); c=0; break;
case 0:
while(state.cubePosition(7)!=7) i[n++]=state.rotateN(0,true); success=true; break;
default:
break;
}
//if (success==true) qDebug() << "cube7 success!";
//cube 17
success=false;
c=state.cubeDirection(17);
//qDebug() << "方向" << c;
while(!success && n<200)
{
t=0;
switch (c)
{
case 0:
while(state.cubePosition(17)!=1) {i[n++]=state.rotateN(0,true);t++;} i[n++]=state.rotateN(2,true);
while(t--) i[n++]=state.rotateN(0,false); c=5; break;
case 3:
while(state.cubePosition(17)!=25) {i[n++]=state.rotateN(3,true);t++;} i[n++]=state.rotateN(1,false);
while(t--) i[n++]=state.rotateN(3,false); c=5; break;
case 1:
while(state.cubePosition(17)!=19) i[n++]=state.rotateN(1,true); c=6; break;
case 4:
while(state.cubePosition(17)!=9) i[n++]=state.rotateN(4,true); c=6; break;
case 6:
while(state.cubePosition(17)!=11) i[n++]=state.rotateN(2,true); c=5; break;
case 2:
while(state.cubePosition(17)!=19) i[n++]=state.rotateN(2,true); i[n++]=state.rotateN(1,true); c=5; break;
case 5:
while(state.cubePosition(17)!=17) i[n++]=state.rotateN(5,true); success=true; break;
default:
break;
}
}
//if (success==true) qDebug() << "cube17 success!";
//cube 25
success=false;
c=state.cubeDirection(25);
//qDebug() << "方向" << c <<" 位置" << state.cubePosition(25);
while(!success && n<200)
{
t=0;
switch (c)
{
case 3:
while(state.cubePosition(25)!=15) {i[n++]=state.rotateN(3,true);t++;} i[n++]=state.rotateN(4,false);
while(t--) i[n++]=state.rotateN(3,false); c=1; break;
case 0:
while(state.cubePosition(25)!=1) {i[n++]=state.rotateN(0,true);t++;} i[n++]=state.rotateN(2,true);
while(t--) i[n++]=state.rotateN(0,false); c=6; break;
case 5:
while(state.cubePosition(25)!=11) {i[n++]=state.rotateN(5,true);t++;} i[n++]=state.rotateN(2,true);
while(t--) i[n++]=state.rotateN(5,false); c=1; break;
case 4:
while(state.cubePosition(25)!=9) i[n++]=state.rotateN(4,true); i[n++]=state.rotateN(2,false); c=1; break;
case 6:
while(state.cubePosition(25)!=19) i[n++]=state.rotateN(2,true); c=1; break;
case 2:
while(state.cubePosition(25)!=9) i[n++]=state.rotateN(2,true); i[n++]=state.rotateN(4,true); c=1; break;
case 1:
while(state.cubePosition(25)!=25) i[n++]=state.rotateN(1,true); success=true; break;
default:
break;
}
}
//if (success==true) qDebug() << "cube25 success!";
//cube 15
success=false;
c=state.cubeDirection(15);
while(!success && n<200)
{
t=0;
switch (c)
{
case 3:
i[n++]=state.rotateN(4,true); c=state.cubeDirection(15); break;
case 0:
while(state.cubePosition(15)!=1) {i[n++]=state.rotateN(0,true);t++;} i[n++]=state.rotateN(2,false);
while(t--) i[n++]=state.rotateN(0,false); c=4; break;
case 5:
while(state.cubePosition(15)!=11) {i[n++]=state.rotateN(5,true);t++;} i[n++]=state.rotateN(2,true);
while(t--) i[n++]=state.rotateN(5,false); c=6; break;
case 1:
while(state.cubePosition(15)!=19) {i[n++]=state.rotateN(1,true);t++;} i[n++]=state.rotateN(2,true);
while(t--) i[n++]=state.rotateN(1,false); c=4; break;
case 6:
while(state.cubePosition(15)!=19) i[n++]=state.rotateN(2,true); c=1; break;
case 4:
while(state.cubePosition(15)!=15) i[n++]=state.rotateN(4,true); success=true; break;
case 2:
while(state.cubePosition(15)!=1) i[n++]=state.rotateN(2,true);
i[n++]=state.rotateN(0,true); i[n++]=state.rotateN(4,false); i[n++]=state.rotateN(0,false); success=true; break;
default:
break;
}
}
//if (success==true) qDebug() << "cube15 success!";
//cube 8
success=false;
while(!success && n<200)
{
c=state.cubePosition(8);
t=0;
switch (c)
{
case 8:
if(state.cubeDirection(8)==0) {success=true; break;}
else { i[n++]=state.rotateN(5,false); i[n++]=state.rotateN(2,false); i[n++]=state.rotateN(5,true); break;}
case 26:
i[n++]=state.rotateN(5,true); i[n++]=state.rotateN(2,true); i[n++]=state.rotateN(5,false); break;
case 6:
i[n++]=state.rotateN(4,true); i[n++]=state.rotateN(2,true); i[n++]=state.rotateN(4,false); break;
case 24:
i[n++]=state.rotateN(4,false); i[n++]=state.rotateN(2,true); i[n++]=state.rotateN(4,true); break;
case 2:
if(state.cubeDirection(8)==0) { i[n++]=state.rotateN(2,true); i[n++]=state.rotateN(0,true); i[n++]=state.rotateN(2,false); i[n++]=state.rotateN(0,false); success=true; }
else if(state.cubeDirection(8)==2) { i[n++]=state.rotateN(5,true); i[n++]=state.rotateN(0,false); i[n++]=state.rotateN(5,false); i[n++]=state.rotateN(0,true); success=true; }
else { i[n++]=state.rotateN(5,false);i[n++]=state.rotateN(2,true); i[n++]=state.rotateN(5,true);}
break;
default:
while(state.cubePosition(8)!=2) i[n++]=state.rotateN(2,true); break;
}
}
//if (success==true) qDebug() << "cube8 success!";
//cube 26
success=false;
while(!success && n<200)
{
c=state.cubePosition(26);
t=0;
switch (c)
{
case 26:
if(state.cubeDirection(26)==5) {success=true; break;}
else { i[n++]=state.rotateN(5,true); i[n++]=state.rotateN(2,true); i[n++]=state.rotateN(5,false); break;}
case 24:
i[n++]=state.rotateN(4,false); i[n++]=state.rotateN(2,false); i[n++]=state.rotateN(4,true); break;
case 6:
i[n++]=state.rotateN(4,true); i[n++]=state.rotateN(2,true); i[n++]=state.rotateN(4,false); break;
case 20:
if(state.cubeDirection(26)==2) { i[n++]=state.rotateN(1,true); i[n++]=state.rotateN(5,false); i[n++]=state.rotateN(1,false); i[n++]=state.rotateN(5,true); success=true; }
else if(state.cubeDirection(26)==5) { i[n++]=state.rotateN(2,true); i[n++]=state.rotateN(5,true); i[n++]=state.rotateN(2,false); i[n++]=state.rotateN(5,false); success=true; }
else { i[n++]=state.rotateN(5,true);i[n++]=state.rotateN(2,false); i[n++]=state.rotateN(5,false);}
break;