diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-08-13 11:57:58 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-08-13 11:57:58 +0100 |
| commit | b3cc4839ded2367f79a02253498f25e20fcb23c0 (patch) | |
| tree | 254d4b136a811d3ac36bc8070997e0204ee07039 /challenge-021 | |
| parent | 8fdf05ee4238f651c9629d8ffadbe05cd64fe87d (diff) | |
| parent | 7daefe1cc3535fcad7dea280765850039c0cb8f5 (diff) | |
| download | perlweeklychallenge-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-x | challenge-021/roger-bell-west/perl5/ch-1.pl | 17 | ||||
| -rwxr-xr-x | challenge-021/roger-bell-west/perl5/ch-2.pl | 73 | ||||
| -rwxr-xr-x | challenge-021/roger-bell-west/perl6/ch-1.p6 | 12 |
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"; +} |
