diff options
| author | Alexander Pankoff <ccntrq@screenri.de> | 2020-10-05 15:25:58 +0200 |
|---|---|---|
| committer | Alexander Pankoff <ccntrq@screenri.de> | 2020-10-11 16:51:54 +0200 |
| commit | e09cb2388819499fb6b9e2db26823af6a8398674 (patch) | |
| tree | df4089ac161a8cff25fecfd681203fc9537ba556 | |
| parent | 550d5ddadd1379345c9e25e451f97f562a2d00d5 (diff) | |
| download | perlweeklychallenge-club-e09cb2388819499fb6b9e2db26823af6a8398674.tar.gz perlweeklychallenge-club-e09cb2388819499fb6b9e2db26823af6a8398674.tar.bz2 perlweeklychallenge-club-e09cb2388819499fb6b9e2db26823af6a8398674.zip | |
add perl solution for wk-081 ch-2
| -rw-r--r-- | challenge-081/alexander-pankoff/perl/ch-2.pl | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/challenge-081/alexander-pankoff/perl/ch-2.pl b/challenge-081/alexander-pankoff/perl/ch-2.pl new file mode 100644 index 0000000000..c560ba5cac --- /dev/null +++ b/challenge-081/alexander-pankoff/perl/ch-2.pl @@ -0,0 +1,53 @@ +#!/usr/bin/env perl +use v5.20; +use utf8; +use strict; +use warnings; +use autodie; +use feature qw(say signatures); +no warnings 'experimental::signatures'; + +use List::Util qw(reduce); + +run_challenge(); + +sub run_challenge() { + my ($input_file) = @ARGV; + my $frequencies_to_words = + frequency_sort( words( sanitize_input( read_file($input_file) ) ) ); + print_word_frequencies($frequencies_to_words); +} + +sub print_word_frequencies($frequencies) { + say join( ' ', $_, @{ $frequencies->{$_} } ) + for sort { $a <=> $b } keys %{$frequencies}; +} + +sub frequency_sort(@words) { + my %word_count; + $word_count{$_}++ for @words; + my %frequencies; + push @{ $frequencies{ $word_count{$_} } }, $_ for sort keys %word_count; + + return \%frequencies; +} + +# split the given string into words +sub words($str) { + return split( /\s+/, $str ); +} + +# replace illegal chars with whitespace +sub sanitize_input($input) { + return $input =~ s/[\."\(\),]|--|'s/ /rg; +} + +# read the whole file +sub read_file($filename) { + local $/ = undef; + open( my $fh, '<', $filename ); + my $out = <$fh>; + close($fh); + return $out; +} + |
