Recent discussion of Pascal's triangle reminded me
of a cool 1-D Cellular Automata and Wolfram's famous
Rule 30.
Try $rule = 18, 22, 30, 45, 54, 110, or 150 for some snazzy
Pascal's Triangle variations.
RuleFoo
update: Also rules 122, 126, 129, 146, 151
#!/usr/bin/perl
use strict;
my $rule = shift || 30;
my $wide = shift || 80;
my $high = shift || 60;
my $binary = reverse(substr(sprintf("%8.8b", $rule), -8, 8));
$binary =~ tr/01/ */;
#print "$binary\n";
my (%rules, $key, $i);
for ($i = 7; $i >= 0; $i--) {
$key = sprintf("%3.3b", $i);
$key =~ tr/01/ */;
$rules{$key} = substr($binary, $i, 1);
#print "$key $rules{$key}\n";
}
my ($str, @chs);
for (1..$wide) {
if (rand(2) < 1) { $str .= ' '; }
else { $str .= '*'; }
}
for (1..$high) {
@chs = split('', $str);
print "$str\n";
$str = '';
for ($i = 0; $i < $wide; $i++) {
$key = "$chs[$i-1]$chs[$i]$chs[($i+1)%@chs]";
$str .= $rules{$key};
}
}