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 ;
 |