aboutsummaryrefslogtreecommitdiff
path: root/challenge-006
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2019-05-05 22:06:04 +0100
committerGitHub <noreply@github.com>2019-05-05 22:06:04 +0100
commitf795f25e46326e43397f4d092db594bee479ac48 (patch)
treeb7c28b85f8e63346876f43480d5390e088a71177 /challenge-006
parentf2ce4cf620fb7cb33aa8259a5ec83a333a0c6ffb (diff)
parentbc446c7f2b926163f13a6c85af2ff38249799a89 (diff)
downloadperlweeklychallenge-club-f795f25e46326e43397f4d092db594bee479ac48.tar.gz
perlweeklychallenge-club-f795f25e46326e43397f4d092db594bee479ac48.tar.bz2
perlweeklychallenge-club-f795f25e46326e43397f4d092db594bee479ac48.zip
Merge pull request #123 from jaldhar/challenge-006
Challenge 6 by Jaldhar H. Vyas
Diffstat (limited to 'challenge-006')
-rwxr-xr-xchallenge-006/jaldhar-h-vyas/perl5/ch-1.pl47
-rwxr-xr-xchallenge-006/jaldhar-h-vyas/perl5/ch-2.pl8
-rwxr-xr-xchallenge-006/jaldhar-h-vyas/perl6/ch-1.p630
-rwxr-xr-xchallenge-006/jaldhar-h-vyas/perl6/ch-2.p613
4 files changed, 98 insertions, 0 deletions
diff --git a/challenge-006/jaldhar-h-vyas/perl5/ch-1.pl b/challenge-006/jaldhar-h-vyas/perl5/ch-1.pl
new file mode 100755
index 0000000000..f241612e26
--- /dev/null
+++ b/challenge-006/jaldhar-h-vyas/perl5/ch-1.pl
@@ -0,0 +1,47 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use 5.010;
+use English qw/ -no_match_vars /;
+
+sub usage {
+ print <<"-USAGE-";
+Usage:
+ $PROGRAM_NAME <numberlist>
+
+ <numberlist> comma-separated list of numbers to display compacted.
+-USAGE-
+
+ exit(1);
+}
+
+if (scalar @ARGV < 1) {
+ usage();
+}
+
+my @numbers = sort { $a <=> $b } split /,/, $ARGV[0];
+my $lastelem = scalar @numbers - 1;
+my @ranges;
+my $start;
+my $current = 0;
+
+while ($current <= $lastelem) {
+ $start = $current;
+
+ while ($current < $lastelem &&
+ $numbers[$current] + 1 == $numbers[$current + 1]) {
+ $current++;
+ }
+
+ if ($numbers[$current] == $numbers[$start]) {
+ push @ranges, $numbers[$start];
+ } elsif ($numbers[$current] == $numbers[$start] + 1) {
+ push @ranges, $numbers[$start], $numbers[$current];
+ } else {
+ push @ranges, "$numbers[$start]-$numbers[$current]";
+ }
+
+ $current++;
+}
+
+say join q{,}, @ranges;
diff --git a/challenge-006/jaldhar-h-vyas/perl5/ch-2.pl b/challenge-006/jaldhar-h-vyas/perl5/ch-2.pl
new file mode 100755
index 0000000000..568fa66cf4
--- /dev/null
+++ b/challenge-006/jaldhar-h-vyas/perl5/ch-2.pl
@@ -0,0 +1,8 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use 5.010;
+use Math::BigFloat;
+
+printf "%.33s\n",Math::BigFloat->new(1)->bexp **
+ (Math::BigFloat->bpi * Math::BigFloat->new(163)->bsqrt);
diff --git a/challenge-006/jaldhar-h-vyas/perl6/ch-1.p6 b/challenge-006/jaldhar-h-vyas/perl6/ch-1.p6
new file mode 100755
index 0000000000..f033c642b6
--- /dev/null
+++ b/challenge-006/jaldhar-h-vyas/perl6/ch-1.p6
@@ -0,0 +1,30 @@
+#!/usr/bin/perl6
+
+multi sub MAIN (
+ Str $numberlist where /^ [ \d+ \,? ]+ $/ #= comma-separated list of numbers to display compacted.
+) {
+ my @numbers = $numberlist.split(',').sort({ $^a <=> $^b });
+ my $lastelem = @numbers.elems - 1;
+ my @ranges;
+ my $start;
+ my $current = 0;
+
+ while ($current <= $lastelem) {
+ $start = $current;
+
+ while ($current < $lastelem &&
+ @numbers[$current] + 1 == @numbers[$current + 1]) {
+ $current++;
+ }
+
+ @ranges.push(do given (@numbers[$start], @numbers[$current]) {
+ when $_[1] == $_[0] { $_[0]; }
+ when $_[1] == $_[0] + 1 { ($_[0], $_[1]); }
+ default { "$_[0]-$_[1]"; }
+ });
+
+ $current++;
+ }
+
+ @ranges.join(',').say;
+}
diff --git a/challenge-006/jaldhar-h-vyas/perl6/ch-2.p6 b/challenge-006/jaldhar-h-vyas/perl6/ch-2.p6
new file mode 100755
index 0000000000..0a2d98bc9c
--- /dev/null
+++ b/challenge-006/jaldhar-h-vyas/perl6/ch-2.p6
@@ -0,0 +1,13 @@
+#!/usr/bin/perl6
+
+# In theory this should work:
+# constant RAMANUJAN = 𝑒 ** (π * sqrt(163));
+# RAMANUJAN.say;
+# ...but it doesn't.
+
+# There is a way to do this properly in Perl6 explained at
+# http://rosettacode.org/wiki/Ramanujan%27s_constant#Perl_6
+# but I didn't want to copy someone elses code and I couldn't figure it out my
+# self so I cheated. :-)
+
+shell('../perl5/ch-2.pl'); \ No newline at end of file