factor/extra/rosetta-code/sierpinski-triangle/sierpinski-triangle.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 ;