40 lines
1.1 KiB
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
|