aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Balker <Lars.Balker@teliacompany.com>2019-10-28 15:52:17 +0100
committerLars Balker <Lars.Balker@teliacompany.com>2019-10-28 15:52:17 +0100
commit5a03747a853f7828a1ea451822cd74cf9985e267 (patch)
tree302c24078d81f1aca7064c0598a9bdae205d490c
parent1d714bf7a33bb75cce5538be8e50a22a8dcb2595 (diff)
downloadperlweeklychallenge-club-5a03747a853f7828a1ea451822cd74cf9985e267.tar.gz
perlweeklychallenge-club-5a03747a853f7828a1ea451822cd74cf9985e267.tar.bz2
perlweeklychallenge-club-5a03747a853f7828a1ea451822cd74cf9985e267.zip
quick'n'dirty challenge 32 perl5 solutions
-rw-r--r--challenge-032/lars-balker/perl5/ch-1.pl22
-rw-r--r--challenge-032/lars-balker/perl5/ch-2.pl28
2 files changed, 50 insertions, 0 deletions
diff --git a/challenge-032/lars-balker/perl5/ch-1.pl b/challenge-032/lars-balker/perl5/ch-1.pl
new file mode 100644
index 0000000000..32bc6524ec
--- /dev/null
+++ b/challenge-032/lars-balker/perl5/ch-1.pl
@@ -0,0 +1,22 @@
+use warnings;
+use strict;
+
+my $csv = @ARGV && $ARGV[0] eq '-csv';
+shift if $csv;
+
+my %words;
+my $maxlength = 0;
+while (<>) {
+ chomp;
+ ++$words{$_};
+ $maxlength = length if length > $maxlength;
+}
+
+for my $word (sort { $words{$b} <=> $words{$a} || $a cmp $b } keys %words) {
+ if ($csv) {
+ printf "%s,%d\n", $word, $words{$word};
+ }
+ else {
+ printf "%-*s %4d\n", $maxlength, $word, $words{$word};
+ }
+}
diff --git a/challenge-032/lars-balker/perl5/ch-2.pl b/challenge-032/lars-balker/perl5/ch-2.pl
new file mode 100644
index 0000000000..81e9b616f3
--- /dev/null
+++ b/challenge-032/lars-balker/perl5/ch-2.pl
@@ -0,0 +1,28 @@
+use strict;
+use warnings;
+my $hashes = 24;
+
+my $data = { apple => 3, cherry => 2, banana => 1 };
+generate_bar_graph($data);
+print "\n";
+generate_bar_graph($data,1);
+
+sub generate_bar_graph {
+ my $data = shift;
+ my $order_by_label = shift;
+
+ my ($sum, $maxlength) = (0, 0);
+ for my $word (keys %$data) {
+ $maxlength = length($word) if length($word) > $maxlength;
+ $sum += $data->{$word};
+ }
+
+ my $sort = $order_by_label
+ ? sub { $a cmp $b }
+ : sub { $data->{$b} <=> $data->{$a} || $a cmp $b };
+ for my $word (sort $sort keys %$data) {
+ my $pct = $data->{$word} / $sum;
+ printf "%*s | %s\n", $maxlength, $word,
+ "#" x int($hashes * $pct);
+ }
+}