EKG sequence convergence: Difference between revisions
Content added Content deleted
(Add Factor) |
|||
Line 165: | Line 165: | ||
203786 |
203786 |
||
Real: 00:10:21.967, CPU: 00:10:25.300, GC gen0: 65296, gen1: 1 |
Real: 00:10:21.967, CPU: 00:10:25.300, GC gen0: 65296, gen1: 1 |
||
</pre> |
|||
=={{header|Factor}}== |
|||
{{works with|Factor|0.99 2019-10-06}} |
|||
<lang factor>USING: combinators.short-circuit formatting fry io kernel lists |
|||
lists.lazy math math.statistics prettyprint sequences |
|||
sequences.generalizations ; |
|||
: ekg? ( n seq -- ? ) |
|||
{ [ member? not ] [ last gcd nip 1 > ] } 2&& ; |
|||
: (ekg) ( seq -- seq' ) |
|||
2 lfrom over [ ekg? ] curry lfilter car suffix! ; |
|||
: ekg ( n limit -- seq ) |
|||
[ 1 ] [ V{ } 2sequence ] [ 2 - [ (ekg) ] times ] tri* ; |
|||
: show-ekgs ( seq n -- ) |
|||
'[ dup _ ekg "EKG(%d) = %[%d, %]\n" printf ] each ; |
|||
: converge-at ( n m max -- o ) |
|||
tuck [ ekg [ cum-sum ] [ rest-slice ] bi ] 2bi@ |
|||
[ swapd [ = ] 2bi@ and ] 4 nfind 4drop dup [ 2 + ] when ; |
|||
{ 2 5 7 9 10 } 20 show-ekgs nl |
|||
"EKG(5) and EKG(7) converge at term " write |
|||
5 7 100 converge-at .</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 } |
|||
EKG(5) = { 1, 5, 10, 2, 4, 6, 3, 9, 12, 8, 14, 7, 21, 15, 18, 16, 20, 22, 11, 33 } |
|||
EKG(7) = { 1, 7, 14, 2, 4, 6, 3, 9, 12, 8, 10, 5, 15, 18, 16, 20, 22, 11, 33, 21 } |
|||
EKG(9) = { 1, 9, 3, 6, 2, 4, 8, 10, 5, 15, 12, 14, 7, 21, 18, 16, 20, 22, 11, 33 } |
|||
EKG(10) = { 1, 10, 2, 4, 6, 3, 9, 12, 8, 14, 7, 21, 15, 5, 20, 16, 18, 22, 11, 33 } |
|||
EKG(5) and EKG(7) converge at term 21 |
|||
</pre> |
</pre> |
||