diff options
| author | Jaldhar H. Vyas <jaldhar@braincells.com> | 2019-05-27 02:09:48 -0400 |
|---|---|---|
| committer | Jaldhar H. Vyas <jaldhar@braincells.com> | 2019-05-27 02:57:33 -0400 |
| commit | 315bbc80a049f04530698fd94f9baaa7e70a4f63 (patch) | |
| tree | 9542c1b72b04a8b4a3322cab74e3b1d4a01123ea /challenge-009 | |
| parent | b66c098fb9e27b40ee54b8f00a7df171242b7caf (diff) | |
| download | perlweeklychallenge-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-x | challenge-009/jaldhar-h-vyas/perl5/ch-1.pl | 16 | ||||
| -rwxr-xr-x | challenge-009/jaldhar-h-vyas/perl5/ch-2.pl | 110 | ||||
| -rwxr-xr-x | challenge-009/jaldhar-h-vyas/perl6/ch-1.p6 | 15 | ||||
| -rwxr-xr-x | challenge-009/jaldhar-h-vyas/perl6/ch-2.p6 | 81 |
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(); +} |
