]> gitweb.factorcode.org Git - factor.git/blob - extra/rosetta-code/sierpinski-triangle/sierpinski-triangle.factor
core: Add words/unwords/unwords-as and use them.
[factor.git] / extra / rosetta-code / sierpinski-triangle / sierpinski-triangle.factor
1 ! Copyright (c) 2012 Anonymous
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: io kernel math sequences ;
4 IN: rosetta-code.sierpinski-triangle
5
6 ! http://rosettacode.org/wiki/Sierpinski_triangle
7
8 ! Produce an ASCII representation of a Sierpinski triangle of
9 ! order N. For example, the Sierpinski triangle of order 4 should
10 ! look like this:
11
12 !                       *
13 !                      * *
14 !                     *   *
15 !                    * * * *
16 !                   *       *
17 !                  * *     * *
18 !                 *   *   *   *
19 !                * * * * * * * *
20 !               *               *
21 !              * *             * *
22 !             *   *           *   *
23 !            * * * *         * * * *
24 !           *       *       *       *
25 !          * *     * *     * *     * *
26 !         *   *   *   *   *   *   *   *
27 !        * * * * * * * * * * * * * * * *
28
29 : iterate-triangle ( triange spaces -- triangle' )
30     [ [ dup surround ] curry map ]
31     [ drop [ dup " " glue ] map ] 2bi append ;
32
33 : (sierpinski) ( triangle spaces n -- triangle' )
34     dup 0 = [ 2drop unlines ] [
35         [
36             [ iterate-triangle ]
37             [ nip dup append ] 2bi
38         ] dip 1 - (sierpinski)
39     ] if ;
40
41 : sierpinski ( n -- )
42     [ { "*" } " " ] dip (sierpinski) print ;