factor/extra/benchmark/beust2/beust2.factor

40 lines
1.1 KiB
Factor

! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: math math.ranges math.parser sequences kernel io locals ;
IN: benchmark.beust2
! http://crazybob.org/BeustSequence.java.html
:: (count-numbers) ( remaining first value used max listener: ( -- ) -- ? )
10 first - iota [| i |
i first + :> digit
digit 2^ :> mask
i value + :> value'
used mask bitand zero? [
value max > [ t ] [
remaining 1 <= [
listener call f
] [
remaining 1 -
0
value' 10 *
used mask bitor
max
listener
(count-numbers)
] if
] if
] [ f ] if
] any? ; inline recursive
:: count-numbers ( max listener -- )
10 iota [ 1 + 1 1 0 max listener (count-numbers) ] any? drop ;
inline
:: beust ( -- )
0 :> i!
5000000000 [ i 1 + i! ] count-numbers
i number>string " unique numbers." append print ;
MAIN: beust