aboutsummaryrefslogtreecommitdiff
path: root/challenge-021
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2019-08-13 11:57:58 +0100
committerGitHub <noreply@github.com>2019-08-13 11:57:58 +0100
commitb3cc4839ded2367f79a02253498f25e20fcb23c0 (patch)
tree254d4b136a811d3ac36bc8070997e0204ee07039 /challenge-021
parent8fdf05ee4238f651c9629d8ffadbe05cd64fe87d (diff)
parent7daefe1cc3535fcad7dea280765850039c0cb8f5 (diff)
downloadperlweeklychallenge-club-b3cc4839ded2367f79a02253498f25e20fcb23c0.tar.gz
perlweeklychallenge-club-b3cc4839ded2367f79a02253498f25e20fcb23c0.tar.bz2
perlweeklychallenge-club-b3cc4839ded2367f79a02253498f25e20fcb23c0.zip
Merge pull request #511 from Firedrake/rogerbw-challenge-021
Solutions for challenge 21
Diffstat (limited to 'challenge-021')
-rwxr-xr-xchallenge-021/roger-bell-west/perl5/ch-1.pl17
-rwxr-xr-xchallenge-021/roger-bell-west/perl5/ch-2.pl73
-rwxr-xr-xchallenge-021/roger-bell-west/perl6/ch-1.p612
3 files changed, 102 insertions, 0 deletions
diff --git a/challenge-021/roger-bell-west/perl5/ch-1.pl b/challenge-021/roger-bell-west/perl5/ch-1.pl
new file mode 100755
index 0000000000..e0e7824b71
--- /dev/null
+++ b/challenge-021/roger-bell-west/perl5/ch-1.pl
@@ -0,0 +1,17 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Math::BigFloat try => 'GMP';
+
+my $a=0;
+my $b=Math::BigFloat->new(1);
+my $e=Math::BigFloat->new(1);
+
+while (1) {
+ $a++;
+ $b/=$a;
+ $e+=$b;
+ print "$e\n";
+}
diff --git a/challenge-021/roger-bell-west/perl5/ch-2.pl b/challenge-021/roger-bell-west/perl5/ch-2.pl
new file mode 100755
index 0000000000..a0d8e8524a
--- /dev/null
+++ b/challenge-021/roger-bell-west/perl5/ch-2.pl
@@ -0,0 +1,73 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use URI::Escape;
+
+foreach my $url (@ARGV) {
+ my $u=urlparse($url);
+ foreach my $mode (keys %{$u}) {
+ if (exists $u->{$mode}) {
+ $u->{$mode}=uri_unescape($u->{$mode});
+ }
+ }
+ foreach my $mode (qw(scheme host)) {
+ if (exists $u->{$mode}) {
+ $u->{$mode}=lc($u->{$mode});
+ }
+ }
+ if (exists $u->{port} && exists $u->{scheme}) {
+ if (my $dp={http => 80,
+ https => 443,
+ ftp => 21,
+ smtp => 25,
+ telnet => 22,
+ ldap => 389,
+ ldaps => 686,
+ }->{$u->{scheme}}) {
+ if ($dp==$u->{port}) {
+ delete $u->{port};
+ }
+ }
+ }
+ print urlassemble($u),"\n";
+}
+
+sub urlparse {
+ my ($url)=@_;
+ my %match;
+ if ($url =~ m!//!) {
+ $url =~ m!^(?<scheme>.*?)://(?:(?:(?<userinfo>.*)@)?(?<host>[-._a-z0-9]+)(?::(?<port>[0-9]+))?)?(?<pqf>.*)!i;
+ map {$match{$_}=$+{$_}} keys %+;
+ } else { # if no userinfo-host-port component, split on the last colon
+ $url =~ m!^(?<scheme>.*):(?<pqf>[^:]*)!;
+ map {$match{$_}=$+{$_}} keys %+;
+ }
+ $match{pqf} =~ m!(?<path>[^?#]*)(?:\?(?<query>[^#]*))?(?:\#(?<fragment>.*))?$!;
+ map {$match{$_}=$+{$_}} keys %+;
+ delete $match{pqf};
+ return \%match;
+}
+
+sub urlassemble {
+ my $u=shift;
+ my $out=$u->{scheme}.':';
+ if (exists $u->{host}) {
+ $out.='//';
+ if (exists $u->{userinfo}) {
+ $out.=$u->{userinfo}.'@';
+ }
+ $out.=$u->{host};
+ if (exists $u->{port}) {
+ $out.=':'.$u->{port};
+ }
+ }
+ $out.=$u->{path};
+ if (exists $u->{query}) {
+ $out.='?'.$u->{query};
+ }
+ if (exists $u->{fragment}) {
+ $out.='#'.$u->{fragment};
+ }
+ return $out;
+}
diff --git a/challenge-021/roger-bell-west/perl6/ch-1.p6 b/challenge-021/roger-bell-west/perl6/ch-1.p6
new file mode 100755
index 0000000000..ef249e7c3b
--- /dev/null
+++ b/challenge-021/roger-bell-west/perl6/ch-1.p6
@@ -0,0 +1,12 @@
+#! /usr/bin/perl6
+
+my $a=0;
+my $b=FatRat.new(1,1);
+my $e=Rat.new(1);
+
+while (1) {
+ $a++;
+ $b/=$a;
+ $e+=$b;
+ print "$e\n";
+}