aboutsummaryrefslogtreecommitdiff
path: root/challenge-009
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2019-05-27 02:09:48 -0400
committerJaldhar H. Vyas <jaldhar@braincells.com>2019-05-27 02:57:33 -0400
commit315bbc80a049f04530698fd94f9baaa7e70a4f63 (patch)
tree9542c1b72b04a8b4a3322cab74e3b1d4a01123ea /challenge-009
parentb66c098fb9e27b40ee54b8f00a7df171242b7caf (diff)
downloadperlweeklychallenge-club-315bbc80a049f04530698fd94f9baaa7e70a4f63.tar.gz
perlweeklychallenge-club-315bbc80a049f04530698fd94f9baaa7e70a4f63.tar.bz2
perlweeklychallenge-club-315bbc80a049f04530698fd94f9baaa7e70a4f63.zip
Challenge 9 by Jaldhar H. Vyas
Diffstat (limited to 'challenge-009')
-rwxr-xr-xchallenge-009/jaldhar-h-vyas/perl5/ch-1.pl16
-rwxr-xr-xchallenge-009/jaldhar-h-vyas/perl5/ch-2.pl110
-rwxr-xr-xchallenge-009/jaldhar-h-vyas/perl6/ch-1.p615
-rwxr-xr-xchallenge-009/jaldhar-h-vyas/perl6/ch-2.p681
4 files changed, 222 insertions, 0 deletions
diff --git a/challenge-009/jaldhar-h-vyas/perl5/ch-1.pl b/challenge-009/jaldhar-h-vyas/perl5/ch-1.pl
new file mode 100755
index 0000000000..0140ac3e32
--- /dev/null
+++ b/challenge-009/jaldhar-h-vyas/perl5/ch-1.pl
@@ -0,0 +1,16 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use 5.010;
+
+my $n = 100; # first number with a 5-digit square
+while(1) {
+ my $nsquared = $n * $n;
+ my %digits;
+ map { $digits{$_} = 1; } (split //, $nsquared);
+ if (scalar keys %digits == 5) {
+ say "$nsquared ($n * $n)";
+ last;
+ }
+ $n++;
+};
diff --git a/challenge-009/jaldhar-h-vyas/perl5/ch-2.pl b/challenge-009/jaldhar-h-vyas/perl5/ch-2.pl
new file mode 100755
index 0000000000..5096c30444
--- /dev/null
+++ b/challenge-009/jaldhar-h-vyas/perl5/ch-2.pl
@@ -0,0 +1,110 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use 5.010;
+use experimental 'smartmatch';
+no warnings 'experimental::smartmatch';
+
+sub usage {
+ print <<"-USAGE-";
+ Usage:
+ $0 -d <items>
+ $0 -m <items>
+ $0 -s <items>
+
+ -d dense ranking
+ -m modified ranking
+ -s standard ranking
+ <numbers> a list of items to rank
+-USAGE-
+ exit(1);
+}
+
+sub group {
+ my ($items) = @_;
+ my %groups;
+ my $rank = 1;
+ my $current = $items->[0];
+
+ for my $item (@{$items}) {
+ if ($item !~ $current) {
+ $rank++;
+ $current = $item;
+ }
+ push @{$groups{$rank}}, $item;
+ }
+
+ return \%groups;
+}
+
+sub denseRank {
+ my ($groups) = @_;
+
+ my @results;
+ for my $rank (sort keys %{$groups}) {
+ for my $item (@{$groups->{$rank}}) {
+ push @results, [ $rank, $item];
+ }
+ }
+
+ return \@results;
+}
+
+sub modifiedRank {
+ my ($groups) = @_;
+
+ my @results;
+ my $total = 0;
+ for my $rank (sort keys %{$groups}) {
+ $total += scalar @{$groups->{$rank}};
+ for my $item (@{$groups->{$rank}}) {
+ push @results, [ $total, $item ];
+ }
+ }
+
+ return \@results;
+}
+
+sub standardRank {
+ my ($groups) = @_;
+
+ my @results;
+ my $total = 1;
+ for my $rank (sort keys %{$groups}) {
+ for my $item (@{$groups->{$rank}}) {
+ push @results, [ $total, $item ];
+ }
+ $total += scalar @{$groups->{$rank}};
+ }
+
+ return \@results;
+}
+
+sub display {
+ my ($results) = @_;
+
+ for my $result (@{$results}) {
+ say "$result->[0] -> $result->[1]";
+ }
+}
+
+if (scalar @ARGV < 2) {
+ usage();
+}
+
+my $opt = shift @ARGV;
+my @items = sort @ARGV;
+
+if ($opt eq '-d') {
+ display(denseRank(group(\@items)));
+
+} elsif ($opt eq '-m') {
+ display(modifiedRank(group(\@items)));
+
+} elsif ($opt eq '-s') {
+ display(standardRank(group(\@items)));
+
+} else {
+ usage();
+}
+
diff --git a/challenge-009/jaldhar-h-vyas/perl6/ch-1.p6 b/challenge-009/jaldhar-h-vyas/perl6/ch-1.p6
new file mode 100755
index 0000000000..13f2cdff34
--- /dev/null
+++ b/challenge-009/jaldhar-h-vyas/perl6/ch-1.p6
@@ -0,0 +1,15 @@
+#!/usr/bin/perl6
+
+sub MAIN() {
+ my $n = 100; # first number with a 5-digit square
+ loop {
+ my $nsquared = $n * $n;
+ my %digits;
+ $nsquared.comb.map({ %digits{$_} = True; });
+ if (%digits.elems == 5) {
+ say "$nsquared ($n * $n)";
+ last;
+ }
+ $n++;
+ }
+}
diff --git a/challenge-009/jaldhar-h-vyas/perl6/ch-2.p6 b/challenge-009/jaldhar-h-vyas/perl6/ch-2.p6
new file mode 100755
index 0000000000..6284659f20
--- /dev/null
+++ b/challenge-009/jaldhar-h-vyas/perl6/ch-2.p6
@@ -0,0 +1,81 @@
+#!/usr/bin/perl6
+
+sub group(@items) {
+ my %groups;
+ my $rank = 1;
+ my $current = @items[0];
+
+ for @items -> $item {
+ if $item !~~ $current {
+ $rank++;
+ $current = $item;
+ }
+ %groups{$rank}.push($item);
+ }
+
+ return %groups;
+}
+
+sub denseRank(%groups) {
+ my @results;
+ for %groups.keys.sort -> $rank {
+ for %groups{$rank}.list -> $item {
+ @results.push(Pair.new($rank, $item));
+ }
+ }
+
+ return @results;
+}
+
+sub modifiedRank(%groups) {
+ my @results;
+ my $total = 0;
+ for %groups.keys.sort -> $rank {
+ $total += %groups{$rank}.elems;
+ for %groups{$rank}.list -> $item {
+ @results.push(Pair.new($total, $item ));
+ }
+ }
+
+ return @results;
+}
+
+sub standardRank(%groups) {
+ my @results;
+ my $total = 1;
+ for %groups.keys.sort -> $rank {
+ for %groups{$rank}.list -> $item {
+ @results.push(Pair.new($total, $item ));
+ }
+ $total += %groups{$rank}.elems;
+ }
+
+ return @results;
+}
+
+sub display(@results) {
+ for @results -> Pair $result {
+ say $result.key, ' -> ', $result.value;
+ }
+}
+
+multi sub MAIN (
+ *@items, #= a list of items to rank
+ Bool :$d! where .so #= dense ranking
+) {
+ @items.sort ==> group() ==> denseRank() ==> display();
+}
+
+multi sub MAIN (
+ *@items,
+ Bool :$m! where .so #= modified ranking
+) {
+ @items.sort ==> group() ==> modifiedRank() ==> display();
+}
+
+multi sub MAIN (
+ *@items,
+ Bool :$s! where .so #= standard ranking
+) {
+ @items.sort ==> group() ==> standardRank() ==> display();
+}