diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-11-03 15:15:03 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-11-03 15:15:03 +0000 |
| commit | 07365633c2fc337ede37920481b0b112136c17e1 (patch) | |
| tree | d8147252025d5b902a3cf49121dd528bcc4dee52 /challenge-032 | |
| parent | 8665b160e4650a90c8aedfefaebdc8397afb447f (diff) | |
| parent | af8b9dcaa303e9b4e48adb29dd4a095b44ac051e (diff) | |
| download | perlweeklychallenge-club-07365633c2fc337ede37920481b0b112136c17e1.tar.gz perlweeklychallenge-club-07365633c2fc337ede37920481b0b112136c17e1.tar.bz2 perlweeklychallenge-club-07365633c2fc337ede37920481b0b112136c17e1.zip | |
Merge pull request #880 from giterlizzi/master
Solutions to challenge 32
Diffstat (limited to 'challenge-032')
| -rw-r--r-- | challenge-032/giuseppe-terlizzi/README | 2 | ||||
| -rwxr-xr-x | challenge-032/giuseppe-terlizzi/perl5/ch-1.pl | 73 | ||||
| -rw-r--r-- | challenge-032/giuseppe-terlizzi/perl5/ch-2.pl | 58 | ||||
| -rw-r--r-- | challenge-032/giuseppe-terlizzi/perl5/example.txt | 6 |
4 files changed, 138 insertions, 1 deletions
diff --git a/challenge-032/giuseppe-terlizzi/README b/challenge-032/giuseppe-terlizzi/README index ad405ddc36..0bff2a945c 100644 --- a/challenge-032/giuseppe-terlizzi/README +++ b/challenge-032/giuseppe-terlizzi/README @@ -1 +1 @@ -Solutions by Giuseppe Terlizzi. +Solutions by Giuseppe Di Terlizzi. diff --git a/challenge-032/giuseppe-terlizzi/perl5/ch-1.pl b/challenge-032/giuseppe-terlizzi/perl5/ch-1.pl new file mode 100755 index 0000000000..6b362ff6bc --- /dev/null +++ b/challenge-032/giuseppe-terlizzi/perl5/ch-1.pl @@ -0,0 +1,73 @@ +#!/usr/bin/perl + +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-032/ + +# Task #1 - Count instances + +# Create a script that either reads standard input or one or more files +# specified on the command-line. Count the number of times and then print a +# summary, sorted by the count of each entry. + +# So with the following input in file example.txt + +# apple +# banana +# apple +# cherry +# cherry +# apple + +# the script would display something like: + +# apple 3 +# cherry 2 +# banana 1 + +# For extra credit, add a -csv option to your script, which would generate: + +# apple,3 +# cherry,2 +# banana,1 + +use strict; +use warnings; + +use v5.10; +use Getopt::Long; + +my $fh = *STDIN; +my $csv = 0; +my %data; + +GetOptions("csv" => \$csv); + +sub collect { + + while (<$fh>) { + + my $line = $_; + chomp($line); + + $data{$line}++; + + } + + close $fh; + +} + +if (@ARGV) { + + foreach (@ARGV) { + die "Input file not found ($_)\n" unless (-f $_); + open $fh, '<', $_ or die ("$?\n"); + collect $fh + } + +} else { + collect $fh; +} + +foreach my $item (sort { $data{$b} <=> $data{$a} } keys %data) { + printf "%s%s%s\n", $item, ($csv ? "," : "\t"), $data{$item}; +} diff --git a/challenge-032/giuseppe-terlizzi/perl5/ch-2.pl b/challenge-032/giuseppe-terlizzi/perl5/ch-2.pl new file mode 100644 index 0000000000..638b3ccd73 --- /dev/null +++ b/challenge-032/giuseppe-terlizzi/perl5/ch-2.pl @@ -0,0 +1,58 @@ +#!/usr/bin/perl + +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-032/ + +# Task #2 - ASCII bar chart + +# Write a function that takes a hashref where the keys are labels and the values +# are integer or floating point values. Generate a bar graph of the data and +# display it to stdout. + +# The input could be something like: + +# $data = { apple => 3, cherry => 2, banana => 1 }; +# generate_bar_graph($data); + +# And would then generate something like this: + +# apple | ############ +# cherry | ######## +# banana | #### + +# If you fancy then please try this as well: (a) the function could let you +# specify whether the chart should be ordered by (1) the labels, or (2) the +# values. + +use strict; +use warnings; + +use v5.10; +use Getopt::Long; + + +sub generate_bar_graph { + + my ($data, $sort_by_label) = @_; + + my $sort = ($sort_by_label) + ? sub { $a cmp $b } + : sub { $data->{$a} <=> $data->{$b} }; + + foreach my $item (sort $sort keys %{$data}) { + my $size = $data->{$item} * 4; + printf "%10s | %s\n", $item, '#' x $size; + } + +} + +my $data = { apple => 3, cherry => 2, banana => 1, foo => 2.5, bar => 3.6 => baz => 0.4 }; + + +say "Sort by value:"; +generate_bar_graph($data); + +say "\n"; + +say "Sort by label:"; +generate_bar_graph($data, 1); + diff --git a/challenge-032/giuseppe-terlizzi/perl5/example.txt b/challenge-032/giuseppe-terlizzi/perl5/example.txt new file mode 100644 index 0000000000..00fe021a08 --- /dev/null +++ b/challenge-032/giuseppe-terlizzi/perl5/example.txt @@ -0,0 +1,6 @@ +apple +banana +apple +cherry +cherry +apple |
