Sierpinski triangle: Difference between revisions
Content added Content deleted
(Sierpinski triangle task, J example) |
(add Common Lisp example) |
||
Line 21: | Line 21: | ||
* * * * * * * * * * * * * * * * |
* * * * * * * * * * * * * * * * |
||
</pre> |
</pre> |
||
=={{header|Common Lisp}}== |
|||
(defun print-sierpinski (order) |
|||
(loop with size = (expt 2 order) |
|||
repeat size |
|||
for v = (expt 2 (1- size)) then (logxor (ash v -1) (ash v 1)) |
|||
do (fresh-line) |
|||
(loop for i below (integer-length v) |
|||
do (princ (if (logbitp i v) "*" " "))))) |
|||
Printing each row could also be done by printing the integer in base 2 and replacing zeroes with spaces: <code>(princ (substitute #\Space #\0 (format nil "~%~2,vR" (1- (* 2 size)) v)))</code> |
|||
Replacing the iteration with <code>for v = 1 then (logxor v (ash v 1))</code> produces a "right" triangle instead of an "equilateral" one. |
|||
=={{header|J}}== |
=={{header|J}}== |
Revision as of 04:42, 14 March 2008
Sierpinski triangle
You are encouraged to solve this task according to the task description, using any language you may know.
You are encouraged to solve this task according to the task description, using any language you may know.
Produce an ASCII representation of a Sierpinski triangle of order N. For example, the Sierpinski triangle of order 4 should look like this:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Common Lisp
(defun print-sierpinski (order) (loop with size = (expt 2 order) repeat size for v = (expt 2 (1- size)) then (logxor (ash v -1) (ash v 1)) do (fresh-line) (loop for i below (integer-length v) do (princ (if (logbitp i v) "*" " ")))))
Printing each row could also be done by printing the integer in base 2 and replacing zeroes with spaces: (princ (substitute #\Space #\0 (format nil "~%~2,vR" (1- (* 2 size)) v)))
Replacing the iteration with for v = 1 then (logxor v (ash v 1))
produces a "right" triangle instead of an "equilateral" one.
J
There are any number of succinct ways to produce this in J. Here's one that exploits self-similarity:
|._31]\,(,.~,])^:4,:'* '
Here's one that leverages the relationship between Sierpinski's and Pascal's triangles:
' *'{~'1'=(-|."_1[:":2|!/~)i.-16