From 49bf6e735f5b79e2ba99f38d8a76ee718de05833 Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Sun, 3 Nov 2019 22:43:36 +0000 Subject: - Added solutions by Ruben Westerberg. --- challenge-032/ruben-westerberg/perl5/ch-1.pl | 34 ++++++++++++++++++++++++++++ challenge-032/ruben-westerberg/perl5/ch-2.pl | 34 ++++++++++++++++++++++++++++ challenge-032/ruben-westerberg/perl6/ch-1.p6 | 27 ++++++++++++++++++++++ challenge-032/ruben-westerberg/perl6/ch-2.p6 | 27 ++++++++++++++++++++++ 4 files changed, 122 insertions(+) create mode 100755 challenge-032/ruben-westerberg/perl5/ch-1.pl create mode 100755 challenge-032/ruben-westerberg/perl5/ch-2.pl create mode 100755 challenge-032/ruben-westerberg/perl6/ch-1.p6 create mode 100755 challenge-032/ruben-westerberg/perl6/ch-2.p6 (limited to 'challenge-032') 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); + } +} -- cgit