|
|
- #!/usr/bin/env perl
-
- use warnings;
- use strict;
- use 5.10.0;
-
- use utf8;
- use open ':encoding(UTF-8)';
- use open qw(:std :utf8);
-
- use Time::Piece;
- use Time::Seconds;
-
- # We're simulating Unix timestamps here:
- my $end = localtime->epoch;
- my $start = $end - (3600);
-
- say "Starting at: $start";
-
- my @bars = qw(_ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █);
- my $bin_count = 12;
-
- my $range = $end - $start;
- my $bin_width = $range / $bin_count;
-
- my %bins;
- for (0..($bin_count - 1)) {
- my $bin_start = $start + ($_ * $bin_width);
- $bins{$bin_start} = 0;
- }
-
- # Fake some events:
- for (1..200) {
- my $event = $start + int(rand($range));
- for my $bin (keys %bins) {
- if (($event > $bin) && ($event < ($bin + $bin_width))) {
- $bins{$bin}++;
- }
- }
- }
-
- # Figure out what the tallest bin is, and map to a unit size.
- my $biggest_bin = 0;
- foreach my $bin_height (values %bins) {
- if ($bin_height > $biggest_bin) {
- $biggest_bin = $bin_height;
- }
- }
-
- # Just some debugging - print bin starts and counts:
- foreach my $bin (sort keys %bins) {
- say $bin . " " . $bins{$bin};
- }
-
- # Display a bar for each bin:
- foreach my $bin (sort keys %bins) {
- my $bar_level = int(($bins{$bin} / $biggest_bin) * (scalar @bars));
- my $bar = ' ';
- if ($bar_level) {
- $bar = $bars[$bar_level - 1];
- }
- print $bar;
- }
-
- print "\n";
- say "Ending at: $end";
|