mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-01-11 09:50:34 +00:00
added the Janko group
This commit is contained in:
parent
85c45ccf8c
commit
5ae5395ce1
144
rogueviz/janko.cpp
Normal file
144
rogueviz/janko.cpp
Normal file
@ -0,0 +1,144 @@
|
||||
/* explore the Janko group J1: https://en.wikipedia.org/wiki/Janko_group_J1 */
|
||||
|
||||
#include "../hyper.h"
|
||||
|
||||
namespace hr {
|
||||
|
||||
eGeometry gJanko1(eGeometry(-1));
|
||||
|
||||
struct jmatrix : array<array<int, 7>, 7> {
|
||||
jmatrix operator * (const jmatrix other) {
|
||||
jmatrix res;
|
||||
for(int a=0; a<7; a++)
|
||||
for(int b=0; b<7; b++)
|
||||
res[a][b] = 0;
|
||||
|
||||
for(int a=0; a<7; a++)
|
||||
for(int b=0; b<7; b++)
|
||||
for(int c=0; c<7; c++)
|
||||
res[a][c] += self[a][b] * other[b][c];
|
||||
|
||||
for(int a=0; a<7; a++)
|
||||
for(int b=0; b<7; b++)
|
||||
res[a][b] %= 11;
|
||||
|
||||
return res;
|
||||
}
|
||||
};
|
||||
|
||||
vector<jmatrix> jms;
|
||||
unordered_map<jmatrix, int> ids;
|
||||
|
||||
jmatrix J, Z, id;
|
||||
|
||||
int get_id(const jmatrix& m) {
|
||||
if(ids.count(m)) return ids[m];
|
||||
ids[m] = isize(jms);
|
||||
jms.push_back(m);
|
||||
return isize(jms)-1;
|
||||
}
|
||||
|
||||
void build_group(const jmatrix& m) {
|
||||
if(ids.count(m)) return;
|
||||
jmatrix m2 = m;
|
||||
for(int a=0; a<7; a++) { get_id(m2); m2 = m2 * J; }
|
||||
}
|
||||
|
||||
void build() {
|
||||
for(int a=0; a<7; a++)
|
||||
for(int b=0; b<7; b++) J[a][b] = ((a+1-b)%7 == 0) ? 1 : 0;
|
||||
|
||||
int v[49] = {
|
||||
0, 4, 0, 3, 9, 2, 1,
|
||||
4, 0, 4, 3, 7, 1, 3,
|
||||
0, 4, 10, 6, 9, 8, 1,
|
||||
3, 3, 6, 1, 7, 6, 9,
|
||||
9, 7, 9, 7, 0, 9, 10,
|
||||
2, 1, 8, 6, 9, 2, 3,
|
||||
1, 3, 1, 9, 10, 3, 8,
|
||||
/* -3,+2,-1,-1,-3,-1,-3,
|
||||
-2,+1,+1,+3,+1,+3,+3,
|
||||
-1,-1,-3,-1,-3,-3,+2,
|
||||
-1,-3,-1,-3,-3,+2,-1,
|
||||
-3,-1,-3,-3,+2,-1,-1,
|
||||
+1,+3,+3,-2,+1,+1,+3,
|
||||
+3,+3,-2,+1,+1,+3,+1*/
|
||||
};
|
||||
|
||||
int a = 0;
|
||||
|
||||
for(auto& row: Z) for(auto& i: row) { i = v[a++]; if(i < 0) i += 11; }
|
||||
|
||||
for(int a=0; a<7; a++) for(int b=0; b<7; b++) id[a][b] = a==b ? 1 : 0;
|
||||
|
||||
build_group(id);
|
||||
for(int k=0; k<isize(jms); k++) {
|
||||
build_group(jms[k] * Z);
|
||||
}
|
||||
|
||||
/*
|
||||
B = Z
|
||||
J = A * B
|
||||
A = J * B * B
|
||||
*/
|
||||
|
||||
println(hlog, "order = ", isize(jms));
|
||||
}
|
||||
|
||||
void experiment() {
|
||||
for(int ia=1; ia<isize(jms); ia++) if(jms[ia] * jms[ia] == id)
|
||||
for(int ib=1; ib<isize(jms); ib++) if(jms[ib] * jms[ib] * jms[ib] == id) {
|
||||
jmatrix u = jms[ia] * jms[ib];
|
||||
if(u != J) continue;
|
||||
if(u == id) continue;
|
||||
jmatrix up = u, ubp = u;
|
||||
ubp = ubp * ubp; up = up * ubp;
|
||||
ubp = ubp * ubp; up = up * ubp;
|
||||
if(up != id) continue;
|
||||
println(hlog, "found: ", tie(ia, ib));
|
||||
|
||||
for(auto& row: jms[ia]) {
|
||||
for(auto& i: row) print(hlog, format("%2d, ", i));
|
||||
println(hlog);
|
||||
}
|
||||
}
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
auto h = addHook(hooks_newmap, 0, [] {
|
||||
if(geometry == gJanko1) {
|
||||
build();
|
||||
vector<int> connections;
|
||||
connections.clear();
|
||||
for(int i=0; i<isize(jms); i++) connections.push_back(get_id(jms[i] * Z));
|
||||
println(hlog, connections);
|
||||
return (hrmap*) new quotientspace::hrmap_quotient(connections);
|
||||
}
|
||||
return (hrmap*) nullptr;
|
||||
});
|
||||
|
||||
void create_janko() {
|
||||
if(gJanko1 != eGeometry(-1)) return;
|
||||
ginf.push_back(ginf[gNormal]);
|
||||
gJanko1 = eGeometry(isize(ginf) - 1);
|
||||
variation = eVariation::pure;
|
||||
auto& gi = ginf.back();
|
||||
gi.flags = qANYQ | qBOUNDED | qEXPERIMENTAL;
|
||||
gi.quotient_name = "Janko";
|
||||
gi.shortname = "Janko";
|
||||
gi.xcode = 0x31400;
|
||||
gi.menu_displayed_name = "Janko group J1";
|
||||
}
|
||||
|
||||
auto shot_hooks = addHook(hooks_args, 100, [] {
|
||||
if(arg::argis("-janko1x")) {
|
||||
build();
|
||||
experiment();
|
||||
}
|
||||
else return true;
|
||||
return false;
|
||||
}) + addHook(hooks_initialize, 100, create_janko);
|
||||
|
||||
}
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "cvl.cpp"
|
||||
#include "newconf.cpp"
|
||||
#include "grigorchuk.cpp"
|
||||
#include "janko.cpp"
|
||||
#include "qtm.cpp"
|
||||
#include "rewriting.cpp"
|
||||
#include "sag.cpp"
|
||||
|
Loading…
Reference in New Issue
Block a user