15 puzzle solver: Difference between revisions

Content added Content deleted
Line 25: Line 25:
int g = (11-std::get<1>(n)-std::get<0>(n)*4)*4;
int g = (11-std::get<1>(n)-std::get<0>(n)*4)*4;
unsigned long a = std::get<2>(n)&((unsigned long)15<<g);
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",(Nr[a>>g]<=std::get<0>(n))?std::get<4>(n):std::get<4>(n)+1);
bool l = Nr[a>>g]<=std::get<0>(n);
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){
const N fG(const N n){
int g = (19-std::get<1>(n)-std::get<0>(n)*4)*4;
int g = (19-std::get<1>(n)-std::get<0>(n)*4)*4;
unsigned long a = std::get<2>(n)&((unsigned long)15<<g);
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",(Nr[a>>g]>=std::get<0>(n))?std::get<4>(n):std::get<4>(n)+1);
bool l = Nr[a>>g]>=std::get<0>(n);
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){
const N fE(const N n){
int g = (14-std::get<1>(n)-std::get<0>(n)*4)*4;
int g = (14-std::get<1>(n)-std::get<0>(n)*4)*4;
unsigned long a = std::get<2>(n)&((unsigned long)15<<g);
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",(Nc[a>>g]<=std::get<1>(n))?std::get<4>(n):std::get<4>(n)+1);
bool l = Nc[a>>g]<=std::get<1>(n);
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){
const N fL(const N n){
int g = (16-std::get<1>(n)-std::get<0>(n)*4)*4;
int g = (16-std::get<1>(n)-std::get<0>(n)*4)*4;
unsigned long a = std::get<2>(n)&((unsigned long)15<<g);
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",(Nc[a>>g]>=std::get<1>(n))?std::get<4>(n):std::get<4>(n)+1);
bool l = Nc[a>>g]>=std::get<1>(n);
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){
void fZ(const N n, const int g){