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: kernel locals math math.ranges math.parser sequences ;
 | 
						|
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
 | 
						|
 | 
						|
:: beust2-benchmark ( -- )
 | 
						|
    0 :> i!
 | 
						|
    5000000000 [ i 1 + i! ] count-numbers
 | 
						|
    i 7063290 assert= ;
 | 
						|
 | 
						|
MAIN: beust2-benchmark
 |