From 7daefe1cc3535fcad7dea280765850039c0cb8f5 Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Mon, 12 Aug 2019 17:41:59 +0100 Subject: Solutions for challenge 21 --- challenge-021/roger-bell-west/perl5/ch-1.pl | 17 +++++++ challenge-021/roger-bell-west/perl5/ch-2.pl | 73 +++++++++++++++++++++++++++++ challenge-021/roger-bell-west/perl6/ch-1.p6 | 12 +++++ 3 files changed, 102 insertions(+) create mode 100755 challenge-021/roger-bell-west/perl5/ch-1.pl create mode 100755 challenge-021/roger-bell-west/perl5/ch-2.pl create mode 100755 challenge-021/roger-bell-west/perl6/ch-1.p6 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!^(?.*?)://(?:(?:(?.*)@)?(?[-._a-z0-9]+)(?::(?[0-9]+))?)?(?.*)!i; + map {$match{$_}=$+{$_}} keys %+; + } else { # if no userinfo-host-port component, split on the last colon + $url =~ m!^(?.*):(?[^:]*)!; + map {$match{$_}=$+{$_}} keys %+; + } + $match{pqf} =~ m!(?[^?#]*)(?:\?(?[^#]*))?(?:\#(?.*))?$!; + 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"; +} -- cgit