EKG sequence convergence: Difference between revisions
Realıze ın F#-Defıne convergence not to depend on programmes ınternal state-Add extra credıt
(Realıze ın F#-Defıne convergence not to depend on programmes ınternal state-Add extra credıt) |
|||
Line 15:
;Convergence
<code>EKG(N1)</code> and <code>EKG(N2)</code> are said to to have converged at and after generation <code>a(c)</code>
Line 27:
# Calculate and show here at which term <code>EKG(5)</code> and <code>EKG(7)</code> converge ('''stretch goal''').
;Extra Credıt:
Fınd the position ın sequence <code>EKG(2)</code> of the 10000th prıme number 104729
;Related Tasks:
Line 125 ⟶ 127:
</pre>
=={{header|F_Sharp|F#}}==
===The Function===
<lang fsharp>
// Generate EKG Sequences. Nigel Galloway: October 6th., 2017
let EKG n=seq{
let fN,fG=let i=System.Collections.Generic.Dictionary<int,int>()
let fN g=(if not (i.ContainsKey g) then i.[g]<-g);(g,i.[g])
((fun e->i.[e]<-i.[e]+e), (fun l->l|>List.map fN))
let fU l= pCache|>Seq.takeWhile(fun n->n<=l)|>Seq.filter(fun n->l%n=0)|>List.ofSeq
let rec EKG l (α,β)=seq{let b=fU β in if (β=n||β<snd((fG b|>List.maxBy snd))) then fN α; yield! EKG l (fG l|>List.minBy snd)
else fN α;yield β;yield! EKG b (fG b|>List.minBy snd)}
yield! seq[1;n]; let g=fU n in yield! EKG g (fG g|>Seq.minBy snd)}
</lang>
===The Task===
<lang fsharp>
EKG 2 |> Seq.take 45 |> Seq.iter(printf "%2d, ")
let EKGconv n g=Seq.zip(EKG n)(EKG g)|>Seq.skip 2|>Seq.scan(fun(n,i,g,e)(l,β)->(Set.add l n,Set.add β i,l,β))(set[1;n],set[1;g],0,0)|>Seq.takeWhile(fun(n,i,g,e)->g<>e||n<>i)
printfn "%d" (let n,_,_,_=EKGconv 2 5|>Seq.last in ((Set.count n)+1)
</lang>
{{out}}
<pre>
45
</pre>
===Extra Credit===
<lang fsharp>
prıntfn "%d" (EKG 2|>Seq.takeWhile(fun n->n<>104729) ((Seq.length n)+1)
</lang>
{{out}}
<pre>
203786
</pre>
=={{header|Go}}==
<lang go>package main
|