aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2019-10-28 15:11:26 +0000
committerGitHub <noreply@github.com>2019-10-28 15:11:26 +0000
commitc3b4cd164a78d6ccbce96184db373897769e9f00 (patch)
tree86de0cbdd5ea452d447e431db09d2b47a9ab017d
parent26576d679fe1b04d039543a2427f2cc66a045083 (diff)
parent5a03747a853f7828a1ea451822cd74cf9985e267 (diff)
downloadperlweeklychallenge-club-c3b4cd164a78d6ccbce96184db373897769e9f00.tar.gz
perlweeklychallenge-club-c3b4cd164a78d6ccbce96184db373897769e9f00.tar.bz2
perlweeklychallenge-club-c3b4cd164a78d6ccbce96184db373897769e9f00.zip
Merge pull request #859 from lbalker/master
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);
+ }
+}