Calkin-Wilf sequence: Difference between revisions
Content added Content deleted
(Added solution for Little Man Computer) |
(Added Forth entry) |
||
Line 673: | Line 673: | ||
83116/51639 is at index 123456789. |
83116/51639 is at index 123456789. |
||
</pre> |
</pre> |
||
=={{header|Forth}}== |
|||
{{works with|gforth|0.7.3}} |
|||
<lang forth>\ Calkin-Wilf sequence |
|||
: frac. swap . ." / " . ; |
|||
: cw-next ( num den -- num den ) 2dup / over * 2* over + rot - ; |
|||
: cw-seq ( n -- ) |
|||
1 1 rot |
|||
0 do |
|||
cr 2dup frac. cw-next |
|||
loop 2drop ; |
|||
variable index |
|||
variable bit-state |
|||
variable bit-position |
|||
: r2cf-next ( num1 den1 -- num2 den2 u ) swap over >r s>d r> sm/rem ; |
|||
: n2bitlength ( n -- ) |
|||
bit-state @ if |
|||
1 swap lshift 1- bit-position @ lshift index +! |
|||
else drop then ; |
|||
: index-init true bit-state ! 0 bit-position ! 0 index ! ; |
|||
: index-build ( n -- ) |
|||
dup n2bitlength bit-position +! bit-state @ invert bit-state ! ; |
|||
: index-finish ( n 0 -- ) 2drop -1 bit-position +! 1 index-build ; |
|||
: cw-index ( num den -- ) |
|||
index-init |
|||
begin r2cf-next index-build dup 0<> while repeat |
|||
index-finish ; |
|||
: cw-demo |
|||
20 cw-seq |
|||
cr 83116 51639 2dup frac. cw-index index @ . ; |
|||
cw-demo</lang> |
|||
{{out}} |
|||
<pre>1 / 1 |
|||
1 / 2 |
|||
2 / 1 |
|||
1 / 3 |
|||
3 / 2 |
|||
2 / 3 |
|||
3 / 1 |
|||
1 / 4 |
|||
4 / 3 |
|||
3 / 5 |
|||
5 / 2 |
|||
2 / 5 |
|||
5 / 3 |
|||
3 / 4 |
|||
4 / 1 |
|||
1 / 5 |
|||
5 / 4 |
|||
4 / 7 |
|||
7 / 3 |
|||
3 / 8 |
|||
83116 / 51639 123456789 ok</pre> |
|||
=={{header|FreeBASIC}}== |
=={{header|FreeBASIC}}== |