In[]:=
cfCTQueueHalting=FunctionCompile[Function[{Typed[rules,"ListArray"["PackedArray"["MachineInteger",1]]],Typed[init,"PackedArray"["MachineInteger",1]],Typed[t,"MachineInteger"]},Module[{res=0,q=CreateDataStructure["Queue"]},Scan[q["Push",#]&,init];​​Do[If[q["Length"]<1,res=tt;Break[],If[q["Pop"]≠0,Scan[q["Push",#]&,rules[[tt-Length[rules]*Quotient[tt-1,Length[rules]]]]]]],{tt,t}];​​res]]];
In[]:=
cfCTQueueHalting[{{0,1},{0},{0,1,1}},IntegerDigits[15151,2,14],10^8]
Out[]=
0
In[]:=
cfCTQueueHalting[{{0,1},{0},{0,1,1}},IntegerDigits[15151,2,14],10^9]
Out[]=
0
In[]:=
cfCTQueueHalting[{{0,1},{0},{0,1,1}},IntegerDigits[15151,2,14],10^10]
Out[]=
0
In[]:=
cfCTQueuePrunedLengthList=FunctionCompile[Function[{Typed[rules,"ListArray"["PackedArray"["MachineInteger",1]]],Typed[init,"PackedArray"["MachineInteger",1]],Typed[t,"MachineInteger"],Typed[dt,"MachineInteger"]},Module[{q=CreateDataStructure["Queue"],qlen=CreateDataStructure["Queue"]},Scan[q["Push",#]&,init];​​Do[If[Mod[tt,dt]0,qlen["Push",q["Length"]]];If[q["Length"]≥1,If[q["Pop"]≠0,Scan[q["Push",#]&,rules[[tt-Length[rules]*Quotient[tt-1,Length[rules]]]]]]];​​q["Length"],{tt,t}];Normal[qlen]]]];
In[]:=
ListLinePlot[cfCTQueuePrunedLengthList[{{0,1},{0},{0,1,1}},IntegerDigits[15151,2,14],10^5,100]]
Out[]=
200
400
600
800
1000
100
200
300
400
In[]:=
ListLinePlot[cfCTQueuePrunedLengthList[{{0,1},{0},{0,1,1}},IntegerDigits[7655,2,13],10^5,100]]
Out[]=
200
400
600
800
1000
100
200
300
400
In[]:=
ListLinePlot[cfCTQueuePrunedLengthList[{{0,1},{0},{0,1,1}},IntegerDigits[15151,2,14],10^9,10^6]]
Out[]=
200
400
600
800
1000
10000
20000
30000
40000
50000
60000
In[]:=
cfCTQueuePrunedLengthList[{{0,1},{0},{0,1,1}},IntegerDigits[7655,2,13],10^10,10^6]
Out[]=
In[]:=
ListLinePlot[%]
Out[]=
2000
4000
6000
8000
10000
20000
40000
60000
80000
100000
120000
In[]:=
Now
Out[]=
Tue 2 Mar 2021 02:00:00GMT-5
In[]:=
NotebookSave[]
In[]:=
cfCTQueuePrunedLengthList[{{0,1},{0},{0,1,1}},IntegerDigits[7655,2,13],10^11,10^7]
Out[]=
In[]:=
ListLinePlot[%]
Out[]=
0
2000
4000
6000
8000
10000
20000
40000
60000
80000
100000
120000
In[]:=
Now
Out[]=
Tue 2 Mar 2021 02:20:12GMT-5
In[]:=
NotebookSave[]
In[]:=
cfCTQueuePrunedLengthList[{{0,1},{0},{0,1,1}},IntegerDigits[7655,2,13],10^12,10^8]
In[]:=
ListLinePlot[%]
Out[]=
0
2000
4000
6000
8000
10000
20000
40000
60000
80000
100000
120000
In[]:=
Now
Out[]=
Tue 2 Mar 2021 03:51:40GMT-5
In[]:=
NotebookSave[]
In[]:=
cfCTQueueHalting
Out[]=
CompiledCodeFunction
Signature: {TypeSpecifier[ListArray][TypeSpecifier[PackedArray][Integer64,1]],TypeSpecifier[PackedArray][Integer64,1],Integer64}Integer64

In[]:=
ParallelEvaluate[$MachineName]
Out[]=
{threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2,threadripper2}

[[[[ RUNNING .... ]]]]