sub boost { my ($dist, $imp, $rad, $drop) = @_; if ($dist <= $rad) { return $imp; } else { return $imp / ($dist - $rad + 1) ** $drop; } } my $imp = 1000; my $rad = 125; my $drop = 0.5; for (map 2**$_, 4..13) { my $boost = boost($_, $imp, $rad, $drop); my $bar = "@" x ($boost/($imp*0.02)); printf "%6d %s %.1f\n", $_, $bar, $boost; } __END__ 16 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1000.0 32 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1000.0 64 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1000.0 128 @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 577.4 256 @@@@ 87.4 512 @@ 50.8 1024 @ 33.4 2048 @ 22.8 4096 15.9 8192 11.1