##
our(@xlo, @xhi); my $t = my $t0 = $s[0] < 0; for my $x (0 .. @s - 1) { if ($t) { if ($s[$x] > 0.5) { $t = 0; push @xhi, $x; } } else { if ($s[$x] < -0.5) { $t = 1; push @xlo, $x; } } }
####
our(@xmi, @xma); for my $p (0 .. @xlo - 1) { my $xmi = $xlo[$p]; for my $x ($xlo[$p] .. ($xhi[$p + $t0] || @s) - 1) { $s[$x] < $s[$xmi] and $xmi = $x; } push @xmi, $xmi; } for my $p (0 .. @xhi - 1) { my $xma = $xhi[$p]; for my $x ($xhi[$p] .. ($xlo[$p + 1 - $t0] || @s) - 1) { $s[$xma] < $s[$x] and $xma = $x; } push @xma, $xma; }
####
for my $x (0 .. @s - 1) { my $l = " "x15 . ":" . " "x15; if (@xlo && $xlo[0] <= $x) { shift @xlo; substr $l, 0, 10, "v"x10; } elsif (@xhi && $xhi[0] <= $x) { shift @xhi; substr $l, 20, 10, "v"x10; } if (@xmi and $xmi[0] <= $x) { shift @xmi; substr $l, 0, 7, "minimum"; } elsif (@xma and $xma[0] <= $x) { shift @xma; substr $l, 23, 7, "maximum"; } substr $l, 15+int(10*$s[$x]), 1, "*"; print $l, "\n"; }
####
*
*:
: *
: v*vvvvvvvv
: *
: *
: *
: *
: *
: *
: *
: max*mum
: *
: *
: *
: *
: *
*
*:
*
vvvvvvvv*v :
* :
* :
* :
* :
min*mum :
* :
* :
* :
* :
* :
* :
* :
* :
* :
:*
: *
: *
: vv*vvvvvvv
: *
: *
: *
: *
: *
: max*mum
: *
: *
: *
: *
: *
: *
: *
*:
*
* :
* :
* :
vvvvvvvv*v :
* :
* :
min*mum :
* :
* :
* :
* :
* :
* :
* :
* :
*:
: *
:*
: v*vvvvvvvv
: *
: *
: *
: *
: *
: *
: *
: maxi*um
: *
: *
: *
: *
: *
: *
: *
*:
* :
vvvvvvvv*v :
* :
* :
* :
* :
* :
* :
minim*m :
* :
* :