diff options
| author | Dave Cross <> | 2019-10-28 13:26:10 +0000 |
|---|---|---|
| committer | Dave Cross <> | 2019-10-28 13:26:10 +0000 |
| commit | 43029e2c6da54416fbb1ec97d804f1ed2308fb87 (patch) | |
| tree | 91d72dee95c95299b0665f1c7e4152eec3ee4bae | |
| parent | fab17ae14261d679e7952889901b16a8b029f8aa (diff) | |
| download | perlweeklychallenge-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.pl | 46 |
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); + } + } +} |
