aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2019-10-30 08:59:21 +0000
committerRoger Bell_West <roger@firedrake.org>2019-10-30 08:59:21 +0000
commit0649b7cf88bc5ee2dca687ad984cdb5dd59528ae (patch)
treeeb199d283af8abe2d60e47875b973cea8b207164
parent8b8f31ae1cd3bafe336df787e5a79b3a34730647 (diff)
downloadperlweeklychallenge-club-0649b7cf88bc5ee2dca687ad984cdb5dd59528ae.tar.gz
perlweeklychallenge-club-0649b7cf88bc5ee2dca687ad984cdb5dd59528ae.tar.bz2
perlweeklychallenge-club-0649b7cf88bc5ee2dca687ad984cdb5dd59528ae.zip
Solutions for challenge #32
-rwxr-xr-xchallenge-032/roger-bell-west/perl5/ch-1.pl27
-rwxr-xr-xchallenge-032/roger-bell-west/perl5/ch-2.pl28
2 files changed, 55 insertions, 0 deletions
diff --git a/challenge-032/roger-bell-west/perl5/ch-1.pl b/challenge-032/roger-bell-west/perl5/ch-1.pl
new file mode 100755
index 0000000000..364358e37f
--- /dev/null
+++ b/challenge-032/roger-bell-west/perl5/ch-1.pl
@@ -0,0 +1,27 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Getopt::Std;
+use Text::CSV_XS;
+
+my %o;
+getopts('c',\%o);
+
+my %s;
+while (<>) {
+ chomp;
+ $s{$_}++;
+}
+
+my $csv = Text::CSV_XS->new;
+
+foreach my $k (sort {$s{$b} <=> $s{$a} ||
+ $a cmp $b} keys %s) {
+ if ($o{c}) {
+ $csv->say(*STDOUT,[$k,$s{$k}]);
+ } else {
+ print "$k $s{$k}\n";
+ }
+}
diff --git a/challenge-032/roger-bell-west/perl5/ch-2.pl b/challenge-032/roger-bell-west/perl5/ch-2.pl
new file mode 100755
index 0000000000..78402d2954
--- /dev/null
+++ b/challenge-032/roger-bell-west/perl5/ch-2.pl
@@ -0,0 +1,28 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use List::Util qw(max);
+
+my $data = { apple => 3, cherry => 2, banana => 1 };
+generate_bar_graph($data);
+
+sub generate_bar_graph {
+ my $data=shift;
+ my $width=shift || $ENV{COLUMNS} || 80;
+ my $labelordering=shift or 0;
+ my @k=keys %{$data};
+ if ($labelordering) {
+ @k=sort @k;
+ } else {
+ @k=sort {$data->{$b} <=> $data->{$a}} @k;
+ }
+ my $kl=max(map {length($_)} @k);
+ my $bw=$width-$kl-3;
+ my $scale=$bw/max(values %{$data});
+ my $format='%-'.$kl.'s | %-'.$bw."s\n";
+ foreach my $k (@k) {
+ printf($format,$k,'#' x ($scale*$data->{$k}));
+ }
+}