diff options
| author | Ysmael Ebreo <Ysmael.Ebreo@latticesemi.com> | 2019-10-28 23:28:18 +0800 |
|---|---|---|
| committer | Ysmael Ebreo <Ysmael.Ebreo@latticesemi.com> | 2019-10-28 23:28:18 +0800 |
| commit | 969523ec870cd60e49219eee455ec5bca22f60e5 (patch) | |
| tree | f0877671348c3a39f3475eeb62c5048d52c600bd /challenge-032 | |
| parent | 0b94465535c2e5d5bf31022cf583b021add9fd59 (diff) | |
| parent | 20f13bc3f77dcc532de961cbd0bb470fb8625d66 (diff) | |
| download | perlweeklychallenge-club-969523ec870cd60e49219eee455ec5bca22f60e5.tar.gz perlweeklychallenge-club-969523ec870cd60e49219eee455ec5bca22f60e5.tar.bz2 perlweeklychallenge-club-969523ec870cd60e49219eee455ec5bca22f60e5.zip | |
Merge branch 'master' of https://github.com/manwar/perlweeklychallenge-club
Diffstat (limited to 'challenge-032')
| -rw-r--r-- | challenge-032/lars-balker/perl5/ch-1.pl | 22 | ||||
| -rw-r--r-- | challenge-032/lars-balker/perl5/ch-2.pl | 28 | ||||
| -rw-r--r-- | challenge-032/simon-proctor/perl6/ch-2.p6 | 7 |
3 files changed, 56 insertions, 1 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); + } +} diff --git a/challenge-032/simon-proctor/perl6/ch-2.p6 b/challenge-032/simon-proctor/perl6/ch-2.p6 index 6e497adf27..0022fd7e2b 100644 --- a/challenge-032/simon-proctor/perl6/ch-2.p6 +++ b/challenge-032/simon-proctor/perl6/ch-2.p6 @@ -66,7 +66,12 @@ sub get-bar( Int $available, $max, $value ) { } sub get-screen-width() { - run("tput","cols",:out).out.slurp.chomp; + my $result; + try { + $result = run("tput","cols",:out).out.slurp.chomp; + } + # Fallback incase tput not available + return $result || 100; } sub parse-space-sep( Str $line ) { |
