mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-01-18 13:13:04 +00:00
2d3d:: fixed Field Pattern
This commit is contained in:
parent
f491e3ce99
commit
f2b0f33496
@ -9,6 +9,8 @@ namespace fieldpattern {
|
|||||||
extern int subpathid;
|
extern int subpathid;
|
||||||
extern int subpathorder;
|
extern int subpathorder;
|
||||||
|
|
||||||
|
#define MWDIM (WDIM+1)
|
||||||
|
|
||||||
bool isprime(int n) {
|
bool isprime(int n) {
|
||||||
for(int k=2; k<n; k++) if(n%k == 0) return false;
|
for(int k=2; k<n; k++) if(n%k == 0) return false;
|
||||||
return true;
|
return true;
|
||||||
@ -21,19 +23,19 @@ struct matrix {
|
|||||||
};
|
};
|
||||||
|
|
||||||
bool operator == (const matrix& A, const matrix& B) {
|
bool operator == (const matrix& A, const matrix& B) {
|
||||||
for(int i=0; i<MDIM; i++) for(int j=0; j<MDIM; j++)
|
for(int i=0; i<MWDIM; i++) for(int j=0; j<MWDIM; j++)
|
||||||
if(A[i][j] != B[i][j]) return false;
|
if(A[i][j] != B[i][j]) return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator != (const matrix& A, const matrix& B) {
|
bool operator != (const matrix& A, const matrix& B) {
|
||||||
for(int i=0; i<MDIM; i++) for(int j=0; j<MDIM; j++)
|
for(int i=0; i<MWDIM; i++) for(int j=0; j<MWDIM; j++)
|
||||||
if(A[i][j] != B[i][j]) return true;
|
if(A[i][j] != B[i][j]) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator < (const matrix& A, const matrix& B) {
|
bool operator < (const matrix& A, const matrix& B) {
|
||||||
for(int i=0; i<MDIM; i++) for(int j=0; j<MDIM; j++)
|
for(int i=0; i<MWDIM; i++) for(int j=0; j<MWDIM; j++)
|
||||||
if(A[i][j] != B[i][j]) return A[i][j] < B[i][j];
|
if(A[i][j] != B[i][j]) return A[i][j] < B[i][j];
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -101,13 +103,13 @@ struct fpattern {
|
|||||||
|
|
||||||
matrix mmul(const matrix& A, const matrix& B) {
|
matrix mmul(const matrix& A, const matrix& B) {
|
||||||
matrix res;
|
matrix res;
|
||||||
for(int i=0; i<MDIM; i++) for(int k=0; k<MDIM; k++) {
|
for(int i=0; i<MWDIM; i++) for(int k=0; k<MWDIM; k++) {
|
||||||
int t = 0;
|
int t = 0;
|
||||||
#ifdef EASY
|
#ifdef EASY
|
||||||
for(int j=0; j<MDIM; j++) t += mul(A[i][j], B[j][k]);
|
for(int j=0; j<MWDIM; j++) t += mul(A[i][j], B[j][k]);
|
||||||
t %= Prime;
|
t %= Prime;
|
||||||
#else
|
#else
|
||||||
for(int j=0; j<MDIM; j++) t = add(t, mul(A[i][j], B[j][k]));
|
for(int j=0; j<MWDIM; j++) t = add(t, mul(A[i][j], B[j][k]));
|
||||||
#endif
|
#endif
|
||||||
res[i][k] = t;
|
res[i][k] = t;
|
||||||
}
|
}
|
||||||
@ -215,7 +217,7 @@ struct fpattern {
|
|||||||
|
|
||||||
int solve() {
|
int solve() {
|
||||||
|
|
||||||
for(int a=0; a<MDIM; a++) for(int b=0; b<MDIM; b++) Id[a][b] = a==b?1:0;
|
for(int a=0; a<MWDIM; a++) for(int b=0; b<MWDIM; b++) Id[a][b] = a==b?1:0;
|
||||||
|
|
||||||
if(!isprime(Prime)) {
|
if(!isprime(Prime)) {
|
||||||
return 1;
|
return 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user