mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2026-01-19 01:20:23 +00:00
fieldpattern:: load found solutions from shstreams
This commit is contained in:
@@ -307,7 +307,8 @@ struct fpattern {
|
||||
vector<matrix> generate_isometries3();
|
||||
int solve3();
|
||||
bool generate_all3();
|
||||
|
||||
|
||||
void set_field(int p, int sq);
|
||||
// transmatrix full_R, full_P, full_X;
|
||||
|
||||
#if CAP_THREAD
|
||||
@@ -468,6 +469,9 @@ unsigned fpattern::compute_hash() {
|
||||
}
|
||||
|
||||
bool fpattern::generate_all3() {
|
||||
|
||||
reg3::generate_fulls();
|
||||
|
||||
matrices.clear();
|
||||
matcode.clear();
|
||||
add1(Id);
|
||||
@@ -489,7 +493,6 @@ bool fpattern::generate_all3() {
|
||||
}
|
||||
|
||||
int fpattern::solve3() {
|
||||
reg3::generate_cellrotations();
|
||||
reg3::construct_relations();
|
||||
|
||||
DEBB(DF_FIELD, ("generating isometries for ", Field));
|
||||
@@ -551,6 +554,13 @@ int fpattern::solve3() {
|
||||
return cmb;
|
||||
}
|
||||
|
||||
void fpattern::set_field(int p, int sq) {
|
||||
Prime = p;
|
||||
Field = sq ? Prime*Prime : Prime;
|
||||
wsquare = sq;
|
||||
for(int a=0; a<MWDIM; a++) for(int b=0; b<MWDIM; b++) Id[a][b] = a==b?1:0;
|
||||
}
|
||||
|
||||
int fpattern::solve() {
|
||||
|
||||
for(int a=0; a<MWDIM; a++) for(int b=0; b<MWDIM; b++) Id[a][b] = a==b?1:0;
|
||||
@@ -1063,6 +1073,9 @@ EX fpattern current_quotient_field = fpattern(0);
|
||||
EX fpattern fp_invalid = fpattern(0);
|
||||
EX bool quotient_field_changed;
|
||||
|
||||
// these strings contain \x00
|
||||
#define STR(x) string(x, sizeof(x))
|
||||
|
||||
EX struct fpattern& getcurrfp() {
|
||||
if(geometry == gFieldQuotient && quotient_field_changed)
|
||||
return current_quotient_field;
|
||||
@@ -1075,17 +1088,21 @@ EX struct fpattern& getcurrfp() {
|
||||
// 260 cells, hash = 72414D0C (not 0C62E214)
|
||||
static fpattern fp(0);
|
||||
if(fp.Prime) return fp;
|
||||
fp.Prime = 5; fp.force_hash = 0x72414D0C; fp.solve();
|
||||
// fp.Prime = 11; fp.force_hash = 0x5FC4CFF0; fp.solve();
|
||||
// fp.Prime = 5; fp.force_hash = 0x72414D0C; fp.solve();
|
||||
// fp.Prime = 11; fp.force_hash = 0x5FC4CFF0; fp.solve();
|
||||
shstream ins(STR("\x05\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\xfc\xff\xff\xff\x01\x00\x00\x00\x04\x00\x00\x00\xfc\xff\xff\xff\x04\x00\x00\x00\xfe\xff\xff\xff\x00\x00\x00\x00\x01\x00\x00\x00\xfe\xff\xff\xff\x04\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\x02\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\x01\x00\x00\x00\xfd\xff\xff\xff\x00\x00\x00\x00\x02\x00\x00\x00\xfd\xff\xff\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"));
|
||||
hread_fpattern(ins, fp);
|
||||
return fp;
|
||||
}
|
||||
if(geometry == gSpace435) {
|
||||
// 650 cells, hash = EB201050
|
||||
static fpattern fp(0);
|
||||
if(fp.Prime) return fp;
|
||||
fp.Prime = 5; fp.force_hash = 0x72414D0C; fp.solve();
|
||||
// fp.Prime = 5; fp.force_hash = 0xEB201050; fp.solve();
|
||||
// what is 0x72414D0C??
|
||||
// fp.Prime = 11; fp.force_hash = 0x65CE0C00; fp.solve();
|
||||
|
||||
shstream ins(STR("\x05\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff\xfc\xff\xff\xff\x04\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\x02\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\xfd\xff\xff\xff\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xfd\xff\xff\xff\xfd\xff\xff\xff\x00\x00\x00\x00\xfd\xff\xff\xff\x02\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xfd\xff\xff\xff\x03\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"));
|
||||
hread_fpattern(ins, fp);
|
||||
return fp;
|
||||
}
|
||||
if(geometry == gSpace336) {
|
||||
@@ -1094,7 +1111,9 @@ EX struct fpattern& getcurrfp() {
|
||||
// 9408 cells in C4089F34
|
||||
static fpattern fp(0);
|
||||
if(fp.Prime) return fp;
|
||||
fp.Prime = 7; fp.force_hash = 0xE3F6B7BCu; fp.solve();
|
||||
// fp.Prime = 7; fp.force_hash = 0xE3F6B7BCu; fp.solve();
|
||||
shstream ins(STR("\x07\x00\x00\x00\x03\x00\x00\x00\xfa\xff\xff\xff\x02\x00\x00\x00\x03\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\xfe\xff\xff\xff\xfb\xff\xff\xff\xfc\xff\xff\xff\x03\x00\x00\x00\xfb\xff\xff\xff\xfd\xff\xff\xff\xfb\xff\xff\xff\x01\x00\x00\x00\xfd\xff\xff\xff\xfe\xff\xff\xff\xfd\xff\xff\xff\x03\x00\x00\x00\x00\x00\x00\x00\xfd\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xfa\xff\xff\xff\xfb\xff\xff\xff\x00\x00\x00\x00\xfa\xff\xff\xff\x02\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\xfb\xff\xff\xff\x06\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"));
|
||||
hread_fpattern(ins, fp);
|
||||
return fp;
|
||||
}
|
||||
if(geometry == gSpace344) {
|
||||
@@ -1145,6 +1164,8 @@ EX struct fpattern& getcurrfp() {
|
||||
return fp_invalid;
|
||||
}
|
||||
|
||||
#undef STR
|
||||
|
||||
// todo undefined behavior
|
||||
EX int subpathid = currfp.matcode[currfp.strtomatrix("RRRPRRRRRPRRRP")];
|
||||
EX int subpathorder = currfp.order(currfp.matrices[subpathid]);
|
||||
@@ -1289,5 +1310,23 @@ EX int currfp_get_R() { return currfp.matcode[currfp.R]; }
|
||||
EX int currfp_get_P() { return currfp.matcode[currfp.P]; }
|
||||
EX int currfp_get_X() { return currfp.matcode[currfp.X]; }
|
||||
|
||||
EX void hread_fpattern(hstream& hs, fieldpattern::fpattern& fp) {
|
||||
hread(hs, fp.Prime);
|
||||
hread(hs, fp.wsquare);
|
||||
hread(hs, fp.P);
|
||||
hread(hs, fp.R);
|
||||
hread(hs, fp.X);
|
||||
fp.set_field(fp.Prime, fp.wsquare);
|
||||
fp.generate_all3();
|
||||
}
|
||||
|
||||
EX void hwrite_fpattern(hstream& hs, fieldpattern::fpattern& fp) {
|
||||
hwrite(hs, fp.Prime);
|
||||
hwrite(hs, fp.wsquare);
|
||||
hwrite(hs, fp.P);
|
||||
hwrite(hs, fp.R);
|
||||
hwrite(hs, fp.X);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user