mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-10-26 11:27:39 +00:00
rogueviz:: CLI option -collatz-go
This commit is contained in:
@@ -16,47 +16,9 @@ void rvvideo(const string &fname) {
|
|||||||
genrange_bonus = 3;
|
genrange_bonus = 3;
|
||||||
dronemode = true; vid.camera_angle = -45; rog3 = true; patterns::whichShape = '8';
|
dronemode = true; vid.camera_angle = -45; rog3 = true; patterns::whichShape = '8';
|
||||||
vid.aurastr = 512;
|
vid.aurastr = 512;
|
||||||
long long reached = 763ll;
|
|
||||||
while(reached < (1ll<<60)) {
|
|
||||||
if(reached%3 == 2 && (2*reached-1) % 9 && hrand(100) < 50)
|
|
||||||
reached = (2*reached-1) / 3;
|
|
||||||
else reached *= 2;
|
|
||||||
}
|
|
||||||
printf("reached = %lld\n", reached);
|
|
||||||
vector<string> seq;
|
|
||||||
while(reached>1) {
|
|
||||||
seq.push_back(llts(reached));
|
|
||||||
if(reached&1) reached += (reached>>1)+1;
|
|
||||||
else reached >>= 1;
|
|
||||||
}
|
|
||||||
// seq.push_back("1");
|
|
||||||
reverse(seq.begin(), seq.end());
|
|
||||||
|
|
||||||
int id = 0;
|
collatz::lookup(763, 60);
|
||||||
int next = 0;
|
|
||||||
|
|
||||||
int steps = 0;
|
|
||||||
while(true) {
|
|
||||||
steps++;
|
|
||||||
if(std::isnan(View[0][0])) exit(1);
|
|
||||||
shmup::turn(100);
|
|
||||||
drawthemap();
|
|
||||||
centerpc(100); optimizeview();
|
|
||||||
fixmatrix(View);
|
|
||||||
bfs(); setdist(cwt.at, 7 - getDistLimit() - genrange_bonus, NULL);
|
|
||||||
vertexdata& vd = vdata[id];
|
|
||||||
for(int e=0; e<isize(vd.edges); e++) {
|
|
||||||
int id2 = vd.edges[e].first;
|
|
||||||
if(vdata[id2].name == seq[next]) {
|
|
||||||
id = id2; next++;
|
|
||||||
cwt.at = shmup::pc[0]->base = vdata[id2].m->base;
|
|
||||||
if(next == isize(seq)) goto found;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
found:
|
|
||||||
printf("steps = %d\n", steps);
|
|
||||||
conformal::create_playerpath(), conformal::rotation = 1;
|
conformal::create_playerpath(), conformal::rotation = 1;
|
||||||
// pmodel = mdBand;
|
// pmodel = mdBand;
|
||||||
|
|
||||||
|
|||||||
52
rogueviz.cpp
52
rogueviz.cpp
@@ -310,6 +310,50 @@ namespace collatz {
|
|||||||
T2 = spin(collatz::s2) * xpush(collatz::p2);
|
T2 = spin(collatz::s2) * xpush(collatz::p2);
|
||||||
T3 = spin(collatz::s3) * xpush(collatz::p3);
|
T3 = spin(collatz::s3) * xpush(collatz::p3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lookup(long long reached, int bits) {
|
||||||
|
while(reached < (1ll<<bits)) {
|
||||||
|
if(reached%3 == 2 && (2*reached-1) % 9 && hrand(100) < 50)
|
||||||
|
reached = (2*reached-1) / 3;
|
||||||
|
else reached *= 2;
|
||||||
|
}
|
||||||
|
printf("reached = %lld\n", reached);
|
||||||
|
vector<string> seq;
|
||||||
|
while(reached>1) {
|
||||||
|
seq.push_back(llts(reached));
|
||||||
|
if(reached&1) reached += (reached>>1)+1;
|
||||||
|
else reached >>= 1;
|
||||||
|
}
|
||||||
|
// seq.push_back("1");
|
||||||
|
reverse(seq.begin(), seq.end());
|
||||||
|
|
||||||
|
int id = 0;
|
||||||
|
int next = 0;
|
||||||
|
|
||||||
|
int steps = 0;
|
||||||
|
while(true) {
|
||||||
|
steps++;
|
||||||
|
if(std::isnan(View[0][0])) exit(1);
|
||||||
|
shmup::turn(100);
|
||||||
|
drawthemap();
|
||||||
|
centerpc(100); optimizeview();
|
||||||
|
fixmatrix(View);
|
||||||
|
bfs(); setdist(cwt.at, 7 - getDistLimit() - genrange_bonus, NULL);
|
||||||
|
vertexdata& vd = vdata[id];
|
||||||
|
for(int e=0; e<isize(vd.edges); e++) {
|
||||||
|
int id2 = vd.edges[e].first;
|
||||||
|
if(vdata[id2].name == seq[next]) {
|
||||||
|
id = id2; next++;
|
||||||
|
cwt.at = vdata[id2].m->base;
|
||||||
|
if(shmup::on) shmup::pc[0]->base = cwt.at;
|
||||||
|
if(next == isize(seq)) goto found;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
found:
|
||||||
|
printf("steps = %d\n", steps);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
string readLabel_s(FILE *f) {
|
string readLabel_s(FILE *f) {
|
||||||
@@ -1752,6 +1796,14 @@ int readArgs() {
|
|||||||
start();
|
start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if(argis("-collatz-go")) {
|
||||||
|
if(kind != kCollatz) { printf("not in Collatz\n"); throw hr_exception(); }
|
||||||
|
shift(); int i = argi(); shift(); int j = argi();
|
||||||
|
if(i <= 0) i = 763;
|
||||||
|
if(j < 0 || j > 61) j = 61;
|
||||||
|
collatz::lookup(i, j);
|
||||||
|
}
|
||||||
|
|
||||||
else if(argis("-collatz3")) {
|
else if(argis("-collatz3")) {
|
||||||
PHASE(3);
|
PHASE(3);
|
||||||
using namespace collatz;
|
using namespace collatz;
|
||||||
|
|||||||
Reference in New Issue
Block a user