aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Cross <>2019-10-28 13:26:10 +0000
committerDave Cross <>2019-10-28 13:26:10 +0000
commit43029e2c6da54416fbb1ec97d804f1ed2308fb87 (patch)
tree91d72dee95c95299b0665f1c7e4152eec3ee4bae
parentfab17ae14261d679e7952889901b16a8b029f8aa (diff)
downloadperlweeklychallenge-club-43029e2c6da54416fbb1ec97d804f1ed2308fb87.tar.gz
perlweeklychallenge-club-43029e2c6da54416fbb1ec97d804f1ed2308fb87.tar.bz2
perlweeklychallenge-club-43029e2c6da54416fbb1ec97d804f1ed2308fb87.zip
Added Challenge #032 / Task #2
-rw-r--r--challenge-032/dave-cross/perl5/ch-2.pl46
1 files changed, 46 insertions, 0 deletions
diff --git a/challenge-032/dave-cross/perl5/ch-2.pl b/challenge-032/dave-cross/perl5/ch-2.pl
new file mode 100644
index 0000000000..37fbda8759
--- /dev/null
+++ b/challenge-032/dave-cross/perl5/ch-2.pl
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use feature 'say';
+
+use List::Util 'max';
+use Term::ReadKey;
+
+my $input = {
+ apple => 3,
+ cherry => 2,
+ banana => 1,
+};
+
+say "Sort by keys:";
+say text_bar($input);
+say "\nSort by values:";
+say text_bar($input, 'v');
+
+sub text_bar {
+ my ($data) = @_;
+
+ my $sort_by_keys = 1;
+ if (lc ($_[1] // '') eq 'v') {
+ $sort_by_keys = 0;
+ }
+
+ my ($width) = GetTerminalSize;
+ say $width;
+
+ my $keylen = max map { length } keys %$data;
+ my $maxval = max values %$data;
+
+ my $step = int($width - $keylen - 3) / $maxval;
+
+ if ($sort_by_keys) {
+ for (sort keys %$data) {
+ printf "%${keylen}s : %s\n", $_, '#' x ($data->{$_} * $step);
+ }
+ } else{
+ for (sort { $data->{$b} <=> $data->{$a} } keys %$data) {
+ printf "%${keylen}s : %s\n", $_, '#' x ($data->{$_} * $step);
+ }
+ }
+}