EKG sequence convergence: Difference between revisions

m
m (displayed the stretch goal in the same manner and font as the other task's requirements.)
Line 478:
}.fp(Ref(N),List(),Walker.chain([2..N-1],[N+1..]))).push(1,N)
}</lang>
<lang zkl>foreach n in (T(2,5,7,9,10)){ println("EKG(%2d): %s".fmt(n,ekgW(n).walk(3010).concat(","))) }</lang>
{{out}}
<pre>
EKG( 2): 1,2,4,6,3,9,12,8,10,5,15,18,14,7,21,24,16,20,22,11,33,27,30,25,35,28,26,13,39,36
EKG( 5): 1,5,10,2,4,6,3,9,12,8,14,7,21,15,18,16,20,22,11,33,24,26,13,39,27,30,25,35,28,32
EKG( 7): 1,7,14,2,4,6,3,9,12,8,10,5,15,18,16,20,22,11,33,21,24,26,13,39,27,30,25,35,28,32
EKG( 9): 1,9,3,6,2,4,8,10,5,15,12,14,7,21,18,16,20,22,11,33,24,26,13,39,27,30,25,35,28,32
EKG(10): 1,10,2,4,6,3,9,12,8,14,7,21,15,5,20,16,18,22,11,33,24,26,13,39,27,30,25,35,28,32
</pre>
<lang zkl>fcn convergeAt(n1,n2,etc){ ns:=vm.arglist;
<lang zkl>ekg5,ekg7, ekg5W,ekg7W := List(),List(), ekgW(5),ekgW(7);
ekg5W ekgWs:=ns.nextapply(ekgW); ekg7WekgWs.nextapply2("next"); // pop initial 1
ekgNs:=List()*vm.numArgs; // ( (ekg(n1)), (ekg(n2)) ...)
foreach e5,e7 in (ekg5W.zip(ekg7W)){
do(10_0){ // find convergence in this many terms or bail
ekg5.merge(e5); ekg7.merge(e7); // keep terms sorted
ekgN:=ekgWs.apply("next"); // (ekg(n1)[n],ekg(n2)[n] ...)
if(e5==e7 and ekg5==ekg7){ // a(n) are ==, both sequences have same terms
ekg5 ekgNs.mergezipWith(e5fcn(ns,n);{ ekg7ns.merge(e7n) },ekgN); // keep terms sorted
println("EKG(5) and EKG(7) converge at term ",ekg7.len() + 1);
if(e5==e7 and ekg5==ekg7){ // a(are all ekg[n) are]s ==,? and both sequences have same terms?
break;
if(not ekgN.filter1('!=(ekgN[0])) and not ekgNs.filter1('!=(ekgNs[0])) ){
println("EKG(5)", and EKGns.concat(7","), ") converge at term ",ekg7ekgNs[0].len() + 1);
return();
break;}
}
println(ns.concat(",")," don't converge");
// should put limiter here
}
}</lang>
convergeAt(5,7);
convergeAt(2,5,7,9,10);</lang>
{{out}}
<pre>
EKG(5) and EKG(,7) converge at term 21
EKG(2,5,7,9,10) converge at term 45
</pre>
Anonymous user