43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Factor
		
	
	
! Copyright (c) 2012 Anonymous
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: io kernel math sequences ;
 | 
						|
IN: rosetta-code.sierpinski-triangle
 | 
						|
 | 
						|
! http://rosettacode.org/wiki/Sierpinski_triangle
 | 
						|
 | 
						|
! Produce an ASCII representation of a Sierpinski triangle of
 | 
						|
! order N. For example, the Sierpinski triangle of order 4 should
 | 
						|
! look like this:
 | 
						|
 | 
						|
!                       *
 | 
						|
!                      * *
 | 
						|
!                     *   *
 | 
						|
!                    * * * *
 | 
						|
!                   *       *
 | 
						|
!                  * *     * *
 | 
						|
!                 *   *   *   *
 | 
						|
!                * * * * * * * *
 | 
						|
!               *               *
 | 
						|
!              * *             * *
 | 
						|
!             *   *           *   *
 | 
						|
!            * * * *         * * * *
 | 
						|
!           *       *       *       *
 | 
						|
!          * *     * *     * *     * *
 | 
						|
!         *   *   *   *   *   *   *   *
 | 
						|
!        * * * * * * * * * * * * * * * *
 | 
						|
 | 
						|
: iterate-triangle ( triange spaces -- triangle' )
 | 
						|
    [ [ dup surround ] curry map ]
 | 
						|
    [ drop [ dup " " glue ] map ] 2bi append ;
 | 
						|
 | 
						|
: (sierpinski) ( triangle spaces n -- triangle' )
 | 
						|
    dup 0 = [ 2drop "\n" join ] [
 | 
						|
        [
 | 
						|
            [ iterate-triangle ]
 | 
						|
            [ nip dup append ] 2bi
 | 
						|
        ] dip 1 - (sierpinski)
 | 
						|
    ] if ;
 | 
						|
 | 
						|
: sierpinski ( n -- )
 | 
						|
    [ { "*" } " " ] dip (sierpinski) print ;
 |