48 lines
1.1 KiB
Text
48 lines
1.1 KiB
Text
[ stack 0 ] is seennumbers ( --> s )
|
|
|
|
[ bit seennumbers take
|
|
| seennumbers put ] is seen ( n --> )
|
|
|
|
[ dup 0 < iff
|
|
[ drop true ] done
|
|
bit seennumbers share
|
|
& 0 != ] is seen? ( n --> b )
|
|
|
|
[ 1+ bit 1 -
|
|
seennumbers share
|
|
over & = ] is allseen? ( n --> b )
|
|
|
|
[ stack [ ] ] is repeats ( --> s )
|
|
|
|
[ 1 seennumbers replace
|
|
[] repeats replace
|
|
' [ 0 ] 1 ] is startseq ( --> [ n )
|
|
|
|
[ over -1 peek
|
|
over - dup seen? if
|
|
[ over 2 * +
|
|
dup seen? if
|
|
[ repeats take
|
|
over join
|
|
repeats put ] ]
|
|
dup seen
|
|
swap dip join
|
|
1+ ] is nextterm ( [ n --> [ n )
|
|
|
|
say "first 15 terms: "
|
|
startseq
|
|
14 times nextterm
|
|
drop echo cr
|
|
|
|
say "first duplicated term: "
|
|
startseq
|
|
[ repeats share [] = while
|
|
nextterm
|
|
again ]
|
|
drop -1 peek echo cr
|
|
|
|
say "terms needed to generate 0 to 1000: "
|
|
startseq
|
|
[ nextterm
|
|
1000 allseen? until ]
|
|
nip 1 - echo cr
|