aboutsummaryrefslogtreecommitdiff
path: root/challenge-032
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2019-11-03 15:15:03 +0000
committerGitHub <noreply@github.com>2019-11-03 15:15:03 +0000
commit07365633c2fc337ede37920481b0b112136c17e1 (patch)
treed8147252025d5b902a3cf49121dd528bcc4dee52 /challenge-032
parent8665b160e4650a90c8aedfefaebdc8397afb447f (diff)
parentaf8b9dcaa303e9b4e48adb29dd4a095b44ac051e (diff)
downloadperlweeklychallenge-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/README2
-rwxr-xr-xchallenge-032/giuseppe-terlizzi/perl5/ch-1.pl73
-rw-r--r--challenge-032/giuseppe-terlizzi/perl5/ch-2.pl58
-rw-r--r--challenge-032/giuseppe-terlizzi/perl5/example.txt6
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