diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-11-03 22:43:36 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-11-03 22:43:36 +0000 |
| commit | 49bf6e735f5b79e2ba99f38d8a76ee718de05833 (patch) | |
| tree | 75b9baee62b0fcca1616ee0c79a0b75d95548ef7 /challenge-032 | |
| parent | 2a5fda623e02bf768bcda74478afeb0dc6d86829 (diff) | |
| download | perlweeklychallenge-club-49bf6e735f5b79e2ba99f38d8a76ee718de05833.tar.gz perlweeklychallenge-club-49bf6e735f5b79e2ba99f38d8a76ee718de05833.tar.bz2 perlweeklychallenge-club-49bf6e735f5b79e2ba99f38d8a76ee718de05833.zip | |
- Added solutions by Ruben Westerberg.
Diffstat (limited to 'challenge-032')
| -rwxr-xr-x | challenge-032/ruben-westerberg/perl5/ch-1.pl | 34 | ||||
| -rwxr-xr-x | challenge-032/ruben-westerberg/perl5/ch-2.pl | 34 | ||||
| -rwxr-xr-x | challenge-032/ruben-westerberg/perl6/ch-1.p6 | 27 | ||||
| -rwxr-xr-x | challenge-032/ruben-westerberg/perl6/ch-2.p6 | 27 |
4 files changed, 122 insertions, 0 deletions
diff --git a/challenge-032/ruben-westerberg/perl5/ch-1.pl b/challenge-032/ruben-westerberg/perl5/ch-1.pl new file mode 100755 index 0000000000..23c05b0ef9 --- /dev/null +++ b/challenge-032/ruben-westerberg/perl5/ch-1.pl @@ -0,0 +1,34 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Getopt::Std; +use List::Util; +my %options=(); +getopts("v", \%options); + +my %data; + +while (<>) { + chomp; + $data{$_}++; +} + +histogram(\%data,$options{v},0); +histogram(\%data,$options{v},1); + +sub histogram { + my $h=shift; + my $valueSort=shift; + my $chart=shift; + my @keys= sort keys %$h;# { length $b > length $a} keys %$h; + my $maxKeyLength=List::Util::max map { length $_} keys %$h; + print "\n"; + if ($valueSort) { + @keys=sort { $$h{$b} > $$h{$a} } keys %$h; + } + for (@keys) { + my $v=$$h{$_}; + $v= "#" x $$h{$_} if $chart; + printf("%".$maxKeyLength."s| %s\n", $_, $v); + } +} diff --git a/challenge-032/ruben-westerberg/perl5/ch-2.pl b/challenge-032/ruben-westerberg/perl5/ch-2.pl new file mode 100755 index 0000000000..23c05b0ef9 --- /dev/null +++ b/challenge-032/ruben-westerberg/perl5/ch-2.pl @@ -0,0 +1,34 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Getopt::Std; +use List::Util; +my %options=(); +getopts("v", \%options); + +my %data; + +while (<>) { + chomp; + $data{$_}++; +} + +histogram(\%data,$options{v},0); +histogram(\%data,$options{v},1); + +sub histogram { + my $h=shift; + my $valueSort=shift; + my $chart=shift; + my @keys= sort keys %$h;# { length $b > length $a} keys %$h; + my $maxKeyLength=List::Util::max map { length $_} keys %$h; + print "\n"; + if ($valueSort) { + @keys=sort { $$h{$b} > $$h{$a} } keys %$h; + } + for (@keys) { + my $v=$$h{$_}; + $v= "#" x $$h{$_} if $chart; + printf("%".$maxKeyLength."s| %s\n", $_, $v); + } +} diff --git a/challenge-032/ruben-westerberg/perl6/ch-1.p6 b/challenge-032/ruben-westerberg/perl6/ch-1.p6 new file mode 100755 index 0000000000..368563c978 --- /dev/null +++ b/challenge-032/ruben-westerberg/perl6/ch-1.p6 @@ -0,0 +1,27 @@ +#!/usr/bin/env perl6 + +sub MAIN(*@files,:$vsort=False) { + my %data; + + for @files { + for .IO.lines() { + %data{$_}++; + } + } + histogram(%data,$vsort,False); + histogram(%data,$vsort,True); +} + +sub histogram(%h,$valueSort,$chart) { + my @keys=%h.keys.sort;#(*.chars < *.chars); + my $maxKeyLength=@keys>>.chars.max; + put ""; + if ($valueSort) { + @keys=%h.keys.sort(-> $a,$b {%h{$a} < %h{$b}}); + } + for @keys { + my $v=%h{$_}.Str; + $v="#" x %h{$_} if $chart; + printf("%"~$maxKeyLength~"s| %s\n",$_,$v); + } +} diff --git a/challenge-032/ruben-westerberg/perl6/ch-2.p6 b/challenge-032/ruben-westerberg/perl6/ch-2.p6 new file mode 100755 index 0000000000..368563c978 --- /dev/null +++ b/challenge-032/ruben-westerberg/perl6/ch-2.p6 @@ -0,0 +1,27 @@ +#!/usr/bin/env perl6 + +sub MAIN(*@files,:$vsort=False) { + my %data; + + for @files { + for .IO.lines() { + %data{$_}++; + } + } + histogram(%data,$vsort,False); + histogram(%data,$vsort,True); +} + +sub histogram(%h,$valueSort,$chart) { + my @keys=%h.keys.sort;#(*.chars < *.chars); + my $maxKeyLength=@keys>>.chars.max; + put ""; + if ($valueSort) { + @keys=%h.keys.sort(-> $a,$b {%h{$a} < %h{$b}}); + } + for @keys { + my $v=%h{$_}.Str; + $v="#" x %h{$_} if $chart; + printf("%"~$maxKeyLength~"s| %s\n",$_,$v); + } +} |
