diff options
| author | Lars Balker <Lars.Balker@teliacompany.com> | 2019-10-28 15:52:17 +0100 |
|---|---|---|
| committer | Lars Balker <Lars.Balker@teliacompany.com> | 2019-10-28 15:52:17 +0100 |
| commit | 5a03747a853f7828a1ea451822cd74cf9985e267 (patch) | |
| tree | 302c24078d81f1aca7064c0598a9bdae205d490c | |
| parent | 1d714bf7a33bb75cce5538be8e50a22a8dcb2595 (diff) | |
| download | perlweeklychallenge-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.pl | 22 | ||||
| -rw-r--r-- | challenge-032/lars-balker/perl5/ch-2.pl | 28 |
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); + } +} |
