RosettaCodeData/Task/Recamans-sequence/Quackery/recamans-sequence.quackery
2023-07-01 13:44:08 -04:00

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