This one-liner draws a patchy pattern using a simple game-of-life-like cellular automaton. You can see the pattern evolving.

If you use a larger terminal window, the pattern is larger as well, but the program gets slower. In general, this program isn't written with speed in mind, it could be made much faster.

perl -we '($H,$W)=`stty size`=~/^(\d+) (\d+)/?($1-1,$2):(24,80);$w=$W+ +20;@a = map { rand() < 1/3 } 0 .. ($H+20)*$w; print "\e[H\e[J"; for ( +0 .. 30) { print "\e[H"; for (0 .. 1) { @a = map { $c = $_; $s = 0; $ +s += $a[($c + $_) % @a] for -$w-1, -$w, -$w+1, -1, 1, $w-1, $w, $w+1; + $s < 3 } 0 .. @a - 1; } for $y (10 .. $H + 9) { for $x (10 .. $W + 9 +) { print $a[$y*$w + $x] ? "#" : " "; } print "\n"; } }'

Update: you can try changing the parameter 1/3.

Replies are listed 'Best First'.
Re: Patchy pattern using a cellular automaton
by wazoox (Prior) on May 23, 2006 at 09:31 UTC
    Nice game, kudos and ++!
Re: Patchy pattern using a cellular automaton
by ambrus (Abbot) on Oct 06, 2006 at 18:53 UTC

    Here's a translation to lua. It runs about the same speed as the perl one.

    stty size | lua -e 'math.randomseed(os.time()); r, p = io.read, io.wri +te; H = r"*n" or 24; W = r"*n" or 80; w = 20 + W; a = {}; for k = 1, +w * (20 + H) do a[k] = math.random() < 1/3; end; p"\27[H\27[J"; for S + = 1, 31 do for P = 1, 2 do b = {}; for c = 1, #a do s = 0; for K, h +in ipairs{-w-1, -w, -w+1, -1, 1, w-1, w, w+1} do if a[(c + h) % #a] t +hen s = s + 1; end; end; b[c] = s < 3; end; a = b; end; p"\27[H"; for + y = 10, H + 8 do for x = 10, W + 8 do if a[w * y + x] then p"#" else + p" " end; end; p"\n"; end; end;'