15 puzzle solver: Difference between revisions
→The Solver
m (→The Task) |
|||
Line 25:
int g = (11-std::get<1>(n)-std::get<0>(n)*4)*4;
unsigned long a = std::get<2>(n)&((unsigned long)15<<g);
return N (std::get<0>(n)+1,std::get<1>(n),std::get<2>(n)-a+(a<<16),std::get<3>(n)+"d",
▲ return N (std::get<0>(n)+1,std::get<1>(n),std::get<2>(n)-a+(a<<16),std::get<3>(n)+"d",l?std::get<4>(n):std::get<4>(n)+1);
}
const N fG(const N n){
int g = (19-std::get<1>(n)-std::get<0>(n)*4)*4;
unsigned long a = std::get<2>(n)&((unsigned long)15<<g);
return N (std::get<0>(n)-1,std::get<1>(n),std::get<2>(n)-a+(a>>16),std::get<3>(n)+"u",
▲ return N (std::get<0>(n)-1,std::get<1>(n),std::get<2>(n)-a+(a>>16),std::get<3>(n)+"u",l?std::get<4>(n):std::get<4>(n)+1);
}
const N fE(const N n){
int g = (14-std::get<1>(n)-std::get<0>(n)*4)*4;
unsigned long a = std::get<2>(n)&((unsigned long)15<<g);
return N (std::get<0>(n),std::get<1>(n)+1,std::get<2>(n)-a+(a<<4),std::get<3>(n)+"r",
▲ return N (std::get<0>(n),std::get<1>(n)+1,std::get<2>(n)-a+(a<<4),std::get<3>(n)+"r",l?std::get<4>(n):std::get<4>(n)+1);
}
const N fL(const N n){
int g = (16-std::get<1>(n)-std::get<0>(n)*4)*4;
unsigned long a = std::get<2>(n)&((unsigned long)15<<g);
return N (std::get<0>(n),std::get<1>(n)-1,std::get<2>(n)-a+(a>>4),std::get<3>(n)+"l",
▲ return N (std::get<0>(n),std::get<1>(n)-1,std::get<2>(n)-a+(a>>4),std::get<3>(n)+"l",l?std::get<4>(n):std::get<4>(n)+1);
}
void fZ(const N n, const int g){
|