HINT:
Code: Select all
x = 39, y = 5, rule = B3/S23
2o2b3ob3obobob3ob3ob3ob3ob3ob3o$bo4bo3bobobobo3bo5bobobobobobobo$bo2b
3ob3ob3ob3ob3o3bob3ob3obobo$bo2bo5bo3bo3bobobo3bobobo3bobobo$3ob3ob3o
3bob3ob3o3bob3ob3ob3o!
Code: Select all
x = 39, y = 5, rule = B3/S23
2o2b3ob3obobob3ob3ob3ob3ob3ob3o$bo4bo3bobobobo3bo5bobobobobobobo$bo2b
3ob3ob3ob3ob3o3bob3ob3obobo$bo2bo5bo3bo3bobobo3bobobo3bobobo$3ob3ob3o
3bob3ob3o3bob3ob3ob3o!
Code: Select all
x = 5, y = 9, rule = B3-jqr/S01c2-in3
3bo$4bo$o2bo$2o2$2o$o2bo$4bo$3bo!
Code: Select all
x = 7, y = 5, rule = B3/S2-i3-y4i
4b3o$6bo$o3b3o$2o$bo!
Code: Select all
x = 5, y = 9, rule = B3-jqr/S01c2-in3
3bo$4bo$o2bo$2o2$2o$o2bo$4bo$3bo!
Code: Select all
x = 7, y = 5, rule = B3/S2-i3-y4i
4b3o$6bo$o3b3o$2o$bo!
Cool. Why not 3?77topaz wrote:155 -> 217 -> 341 -> 22 -> 30, and we have a loop.
Of course, we can also do this starting at other numbers:
2 -> 3 -> 50 -> 16, and we've entered the same loop/attractor.
4 -> 36 -> 66 -> 112 -> 11 -> 14 -> 11, and we have a new, period-2 loop (the other one has period 7).
Code: Select all
x = 5, y = 9, rule = B3-jqr/S01c2-in3
3bo$4bo$o2bo$2o2$2o$o2bo$4bo$3bo!
Code: Select all
x = 7, y = 5, rule = B3/S2-i3-y4i
4b3o$6bo$o3b3o$2o$bo!
Code: Select all
x = 7, y = 5, rule = B3/S23
2o2b3o$bo2bobo$bo2b3o$bo2bobo$3ob3o!
Code: Select all
x = 5, y = 9, rule = B3-jqr/S01c2-in3
3bo$4bo$o2bo$2o2$2o$o2bo$4bo$3bo!
Code: Select all
x = 7, y = 5, rule = B3/S2-i3-y4i
4b3o$6bo$o3b3o$2o$bo!
Code: Select all
x = 25, y = 710, rule = B3/S23
14b3ob3ob3o$16bobobobo$16bobobob3o$16bobobo3bo$16bob3ob3o75$17b3ob3o$
17bo3bo$17b3ob3o$19bo3bo$17b3ob3o77$7b3ob3o$9bobobo$7b3obobo$9bobobo$
7b3ob3o40$10b3obobo$10bo3bobo$10b3ob3o$12bo3bo$10b3o3bo103$14b3ob3o$
16bo3bo$16bob3o$16bobo$16bob3o55$14b2o2b3o$15bo4bo$15bo2b3o$15bo4bo$
14b3ob3o33$7b3ob3ob3o$7bo3bobo3bo$7b3obobo3bo$7bobobobo3bo$7b3ob3o3bo
150$3b3ob3ob3ob3o$5bobobobo5bo$3b3obobob3ob3o$3bo3bobobobo3bo$3b3ob3ob
3ob3o35$4b3ob3ob3o$6bobo3bobo$4b3ob3obobo$4bo3bobobobo$4b3ob3ob3o33$2o
2b3ob3obobo$bo2bobobobobobo$bo2b3ob3ob3o$bo2bobobobo3bo$3ob3ob3o3bo64$
7b3ob3o$7bo5bo$7b3ob3o$9bo3bo$7b3ob3o!
You're right. Hdjensofjfnen incorrectly said in the OP that 30 leads to 20, which we all assumed was true:Moosey wrote:Hold on, wait:
there is no (16)7-loop ( ), 16 evolves into this (13)11-loop! (705->55->30->54->72->13->607->2063->260->1884->53->705)Code: Select all
x = 25, y = 710, rule = B3/S23 14b3ob3ob3o$16bobobobo$16bobobob3o$16bobobo3bo$16bob3ob3o75$17b3ob3o$ 17bo3bo$17b3ob3o$19bo3bo$17b3ob3o77$7b3ob3o$9bobobo$7b3obobo$9bobobo$ 7b3ob3o40$10b3obobo$10bo3bobo$10b3ob3o$12bo3bo$10b3o3bo103$14b3ob3o$ 16bo3bo$16bob3o$16bobo$16bob3o55$14b2o2b3o$15bo4bo$15bo2b3o$15bo4bo$ 14b3ob3o33$7b3ob3ob3o$7bo3bobo3bo$7b3obobo3bo$7bobobobo3bo$7b3ob3o3bo 150$3b3ob3ob3ob3o$5bobobobo5bo$3b3obobob3ob3o$3bo3bobobobo3bo$3b3ob3ob 3ob3o35$4b3ob3ob3o$6bobo3bobo$4b3ob3obobo$4bo3bobobobo$4b3ob3ob3o33$2o 2b3ob3obobo$bo2bobobobobobo$bo2b3ob3ob3o$bo2bobobobo3bo$3ob3ob3o3bo64$ 7b3ob3o$7bo5bo$7b3ob3o$9bo3bo$7b3ob3o!
Code: Select all
x = 7, y = 5, rule = B3/S23
3ob3o$2bobobo$3obobo$2bobobo$3ob3o!
I cannot believe I confused this sequence with aliquot sequences.77topaz wrote: You're right. Hdjensofjfnen incorrectly said in the OP that 30 leads to 20, which we all assumed was true:30 -> 54 is the correct link.Code: Select all
x = 7, y = 5, rule = B3/S23 3ob3o$2bobobo$3obobo$2bobobo$3ob3o!
Code: Select all
x = 7, y = 5, rule = B3/S23
3ob3o$2bobobo$b2obobo$2bobobo$3ob3o!
Code: Select all
x = 5, y = 9, rule = B3-jqr/S01c2-in3
3bo$4bo$o2bo$2o2$2o$o2bo$4bo$3bo!
Code: Select all
x = 7, y = 5, rule = B3/S2-i3-y4i
4b3o$6bo$o3b3o$2o$bo!
You can say that again! Tracking this stuff by hand must get old after a while.Moosey wrote:someone needs to make a script to enumerate these.
Code: Select all
# makedigits.py
import golly as g
g.setrule("Life")
digits = ["3o$obo$obo$obo$3o!","2o$bo$bo$bo$3o!",
"3o$2bo$3o$o$3o!","3o$2bo$3o$2bo$3o!",
"obo$obo$3o$2bo$2bo!","3o$o$3o$2bo$3o!",
"3o$o$3o$obo$3o!","3o$2bo$2bo$2bo$2bo!",
"3o$obo$3o$obo$3o!","3o$obo$3o$2bo$3o!"]
digitcells = [g.parse(d) for d in digits]
def makedigits(i):
cells, offset = [],0
for char in str(int(i)):
cells+=g.transform(digitcells[int(char)],offset,0)
offset+=4
return cells
pat = makedigits(1234567890)
g.addlayer()
g.putcells(pat)
Code: Select all
# makedigits.py
import golly as g
from glife import validint
g.setrule("Life")
digits = ["3o$obo$obo$obo$3o!","2o$bo$bo$bo$3o!",
"3o$2bo$3o$o$3o!","3o$2bo$3o$2bo$3o!",
"obo$obo$3o$2bo$2bo!","3o$o$3o$2bo$3o!",
"3o$o$3o$obo$3o!","3o$2bo$2bo$2bo$2bo!",
"3o$obo$3o$obo$3o!","3o$obo$3o$2bo$3o!"]
digitcells = [g.parse(d) for d in digits]
def makedigits(i):
cells, offset = [],0
for char in str(int(i)):
cells+=g.transform(digitcells[int(char)],offset,0)
offset+=4
return cells
s = g.getstring('Enter the number:', '', 'Number placer')
if not validint(s):
g.exit('Bad number: %s' % s)
stringvalue = int(s)
if stringvalue < 0:
g.exit('Negative numbers not included.')
pat = makedigits(s)
g.addlayer()
g.putcells(pat)
The second paragraph seems likely to be true, but I bet the first paragraph is just a version of the hasty induction fallacy. Eric Angelini's EAlvetica font is basically identical to these numbers except for the "1" which is a minimal vertical line instead of a fixed-width 3x5 character:77topaz wrote:With all of these lasting for far shorter than the numbers they encode, I strongly suspect the Testitem Conjecture is indeed correct - there may be some many-digit number that manages to lead to a higher number via trickery involving switch engines or some such, but then the next number would just lead to something lower again.
In fact, I suspect a number's lifetime is, on average, proportional to its number of digits and thus log(itself), rather than itself.
Code: Select all
x = 71, y = 95, rule = B3/S23
3ob3o$obobobo$3obobo$2bobobo$3ob3o26$3ob3ob3ob3o$2bo3bobobo3bo$3ob3obo
bo3bo$2bobo3bobo3bo$3ob3ob3o3bo26$3obobobob3obobo$obobobobo3bobobo$3ob
3obo3bob3o$2bo3bobo3bo3bo$3o3bobo3bo3bo26$ob3ob3ob3ob3ob3obob3ob3ob3ob
3ob3ob3obobob3obobob3obobobobo$obobobo3bo3bobobobobobobobobo3bobobo3bo
3bobobobobobobo3bobobobobo$ob3ob3ob3ob3ob3obobobobobob3ob3o3bob3obobob
obob3ob3obobob3o$obobo3bo3bo3bobobobobobobobobo5bo3bo3bobobobobo3bo3bo
bobo3bo$ob3ob3ob3ob3ob3obob3ob3ob3ob3o3bob3obobob3o3bob3obobo3bo!
Code: Select all
x = 123, y = 5, rule = B3/S23
3ob3obobobobobobobobobobobobobobobobobobobobobobobobobobobobobobob3obo
bob3ob3ob3obobobobobobobobobobobobobobobobobobo$obobobobobobobobobobob
obobobobobobobobobobobobobobobobobobobobobobobo3bobo3bo3bobo3bobobobob
obobobobobobobobobobobobobo$3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob
3ob3ob3ob3ob3o3bob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3o$obobobo3bo3bo3bo3bo
3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bobobo3bo3bo3bo3bo3bo3bo3bo
3bo3bo$3ob3o3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bob3o3bo3bob3ob
3o3bo3bo3bo3bo3bo3bo3bo3bo3bo!
The trickery I was referring to is much simpler.Moosey wrote:Of course, that’s a lot of if’s; the [testitem] conjecture is still quite possibly true.
Code: Select all
x = 99, y = 5, rule = B3/S23:T100,0
3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob
3ob3o$2bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo
3bo3bo3bo3bo$2bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo
3bo3bo3bo3bo3bo3bo$2bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo
3bo3bo3bo3bo3bo3bo3bo3bo$2bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo
3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo!
Here again, the way that small numbers tend to behave -- with lifespans that on average are much smaller than the numbers they represent -- really doesn't give any information at all about the way certain absolutely ridiculously large numbers might turn out to behave.77topaz wrote:With a particular amount of patience, you could even design such a number so that the number of generations the number lasts also forms a UC mechanism. Perhaps you could even string an arbitrary number of them together. But that arbitrary number would still be finite...
Code: Select all
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#define COMMAND "rm -f lspan.txt && cat RLE.out | ./apgluxe -L 0 -n 1 -t 1 > /dev/null 2> lspan.txt"
using namespace std;
string HEADER = "x = 0, y = 0, rule = B3/S23\n";
string LETTERS[10][5] = {
{"ooo","obo","obo","obo","ooo"},
{"oob","bob","bob","bob","ooo"},
{"ooo","bbo","ooo","obb","ooo"},
{"ooo","bbo","ooo","bbo","ooo"},
{"obo","obo","ooo","bbo","bbo"},
{"ooo","obb","ooo","bbo","ooo"},
{"ooo","obb","ooo","obo","ooo"},
{"ooo","bbo","bbo","bbo","bbo"},
{"ooo","obo","ooo","obo","ooo"},
{"ooo","obo","ooo","bbo","ooo"}};
string assembleRLE(string num)
{
// first row
string answer = HEADER;
for(int i=0; i<5; i++)
{
for(char x:num)
answer += (LETTERS[x-'0'][i]+'b');
if(i == 4)
answer += "!\n";
else
answer += "$\n";
}
return answer;
}
string runApgerator(string RLE)
{
ofstream outf("RLE.out");
outf << RLE << endl;
outf.close();
int EXITSIG = system(COMMAND);
if(EXITSIG != 0)
{
cerr << "Oopsie woopsie apgluxie did a fucksie wucksie" << endl;
exit(-1);
}
ifstream inf("lspan.txt");
string output;
getline(inf, output);
getline(inf, output);
return output;
}
uint64_t s2l(string n)
{
std::istringstream ss(n);
uint64_t ans;
ss >> ans;
return ans;
}
bool tested[1000000];
int main()
{
string n; cin >> n;
while(!tested[s2l(n)])
{
cout << n << " ";
uint64_t decimal = s2l(n);
if(decimal >= 1000000)
{
cerr << endl;
cerr << "Last sequence element grew greater than 1 million!" << endl;
exit(-1);
}
tested[decimal] = true;
n = runApgerator(assembleRLE(n));
}
cout << n;
}