http://www.perlmonks.org?node_id=188405

$}=1|1<<pop;print($"x$},(map$_?$=:$"x2,@;), $/),@;=(1,map$;[$_]^$;[-$_],1..@;)while$}--
This little program draws the sierpinski triangle fractal. Specify the size on the command line (should be about 5 depending on your screen size)

--MrNobo1024
s]]HrLfbfe|EbBibmv]e|s}w}ciZx^RYhL}e^print

Replies are listed 'Best First'.
Re: Sierpinski Triangle
by Len (Friar) on Aug 08, 2002 at 08:15 UTC
    MrNobo1024++ for this math magic !

    If you feel inspired by this kind of geometric stuff, check out The Geometry Junkyard for a huge collection of geometrical and recreational math.

Re: Sierpinski Triangle
by hossman (Prior) on Aug 12, 2002 at 06:39 UTC
    Very cool... but i made two tweaks, one is a simplified version of Rudif's default suggestion, and the other changes the text to something more triangle-ish (i don't think it significantly reduces the obfuscation)

    $}=1|1<<(pop||3);print($"x$},(map$_?'/\\':$"x2, @;),$/),@;=(1,map$;[$_]^$;[-$_],1..@;)while$}--
Re: Sierpinski Triangle
by eyepopslikeamosquito (Archbishop) on Aug 17, 2002 at 06:38 UTC

    Nice one! I shaped your code like a triangle.

    #!/usr/bin/perl /\ /=~( '(?{'. ('`'|'%' ).('['^'-' ).('`'|'!'). ('`'|',').'"'. '\\$-=!\\$%|!\\' .'$%<<('.('['^'+') .('`'|'/').('['^'+') .'||'.('^'^('`'|'*')). ');'.('['^'+').('['^')') .('`'|')').('`'|'.').('['^ '/').'(\\$\\"'.('['^'#').''. '\\$-,('.('`'|'-').('`'|'!').( '['^'+').'\\$_?'."'".'/\\\\\\\\' ."'".':\\$\\".\\$\\",\\@;),\\$/),' .'\\@;=(!\\$%,'.('`'|'-').('`'|'!'). ('['^'+').'\\$;[\\$_]^\\$;[-\\$_],!\\' .'$%..\\@;)'.('['^',').('`'|'(').(('`')| ')').('`'|',').('`'|'%').'\\$---"})');'\+'
Re: Sierpinski Triangle
by Rudif (Hermit) on Aug 10, 2002 at 21:37 UTC
    Neat.
    And here is a default-supplying line, to prepend to it.
    @ARGV||push@ARGV,5;
    Rudif
Re: Sierpinski Triangle
by eyepopslikeamosquito (Archbishop) on Aug 21, 2002 at 12:36 UTC

    Still going! Though not shortest, I find this one amusing for some reason. Oh, and I have given it a name: "five substitutions".

    #!perl -l s--$"x$^F**pop-e,s-.-s,,,,s,$,/\\,,print,s,(?<=/.)..,$&^h9^gE,ge-ge

    Update: here is a more elaborate one - using a "ge" theme - mentioned in The Lighter Side of Perl Culture (Part III): Obfu (it takes a command line argument (1-9) indicating the triangle size):

    #!/usr/bin/perl -l s--@{[(gE^Ge)=~/[^g^e]/g]}[g^e]x((!!+~~g^e^g^e)<<pop).!gE-ge, s-[^ge^ge]-s,,,,s,@{[(g^';').(e^'?')]},(G^'/').(E^'|')^Ge,ge, print,s,(?<=/[^g^e])[^g^e][^g^e],$&^(G^'/').(E^'|')^gE,ge-ge

Re: Sierpinski Triangle
by eyepopslikeamosquito (Archbishop) on Aug 17, 2002 at 16:16 UTC

    Here is an alternative solution. This one is a little shorter and strict and warning safe. Also it does not emit an empty first line. I developed it from ideas in previous solutions posted to fwp@perl.org. See golf thread. If the alien golfers take up my challenge, it will be significantly shortened.

    $_=$"x((1|1<<(pop||4))-1)."/\\ ";print,s,(?<=\\)..,$&^"\017|",ge,s,$,/\\,while+s+^ ++

      Update: The golf dream team of Ton Hospel, Eugene van der Pijll, Mtv Europe and Keith C Ivey whittled 15 strokes from my initial offering:

      #!perl -l $_=$"x2**(pop||4);s'$'/\\',print,s/(?<=\\)../$&^aD^n8/egwhile+s\^ \\

      Here are some other solutions (without default argument) they concocted during their fidgeting:

      $_=$"x(1<<pop);print,s/(?<=\\)../$&^"\17|"/egwhile+s^\n?$^/\\\n^,s\^ \ +\ $_=$"x(1<<pop).$/;print,s/(?<=\\)../$&^"\17|"/egwhile+s^$^/\\^,s\^ \\ -lX $_=$"x2**pop;print,s/(?<=\\)../$&^"\17|"/egwhile+s*$*/\\**s+^ ++ -lX $_=$"x2**pop;print,s/(?<=\\)../$&^"\17|"/egwhile+s-^ (.*)-$+/\\- -l $_=$"x2**pop;s'$'/\\',print,s/(?<=\\)../$&^"\17|"/egwhile+s\^ \\ -l $_=$"x2**pop;s'$'/\\',print,s/(?<=\\)../$&^aD^n8/egwhile+s\^ \\