From d851aa7a45e61e72d26abbfef7e167521b7ee50e Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Sat, 17 Aug 2019 09:46:14 +1000 Subject: Solutions to ch1 p5 and p6 --- challenge-021/ruben-westerberg/perl5/ch-1.pl | 18 ++++++++++++++++++ challenge-021/ruben-westerberg/perl6/ch-1.p6 | 11 +++++++++++ 2 files changed, 29 insertions(+) create mode 100755 challenge-021/ruben-westerberg/perl5/ch-1.pl create mode 100755 challenge-021/ruben-westerberg/perl6/ch-1.p6 diff --git a/challenge-021/ruben-westerberg/perl5/ch-1.pl b/challenge-021/ruben-westerberg/perl5/ch-1.pl new file mode 100755 index 0000000000..4af2eb221f --- /dev/null +++ b/challenge-021/ruben-westerberg/perl5/ch-1.pl @@ -0,0 +1,18 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use v5.26; +use bignum (a=>100); +#use Math::BigRat; +#compute Euler's number to the nth term +# +my $degree=$ARGV[0]//10; +my $i=1; +my $sum=1;#Math::BigRat->new(1/1); +while ($i <= $degree ) { + state $fac=1; + $sum+=1/($fac*=$i++); +} +#printf "Eulers constant to $degree terms:\n%s\n",$sum->as_float(100); +printf "Eulers constant to $degree terms:\n%s\n",$sum; diff --git a/challenge-021/ruben-westerberg/perl6/ch-1.p6 b/challenge-021/ruben-westerberg/perl6/ch-1.p6 new file mode 100755 index 0000000000..b4b3ff5950 --- /dev/null +++ b/challenge-021/ruben-westerberg/perl6/ch-1.p6 @@ -0,0 +1,11 @@ +#!/usr/bin/env perl6 +#Compute Eulers number to the nth term +# +my $degree=@*ARGS[0]//10; +my $i=1; +my $sum=FatRat.new(1); +while ($i <= $degree ) { + state $fac=FatRat.new(1); + $sum+=1/($fac*=$i++); +} +put "Eulers constant to $degree terms:\n%s\n", $sum.base-repeating(10).join(""); -- cgit From 5796c33fad4e1d36bf2aafe0ba452d0c51039a16 Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Sun, 18 Aug 2019 09:29:26 +1000 Subject: Added ch-2 p5 --- challenge-021/ruben-westerberg/perl5/ch-2.pl | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100755 challenge-021/ruben-westerberg/perl5/ch-2.pl diff --git a/challenge-021/ruben-westerberg/perl5/ch-2.pl b/challenge-021/ruben-westerberg/perl5/ch-2.pl new file mode 100755 index 0000000000..05b23a5fbe --- /dev/null +++ b/challenge-021/ruben-westerberg/perl5/ch-2.pl @@ -0,0 +1,28 @@ +#!/usr/bin/env perl + +my $uri=$ARGV[0]//"http://my.test.url/where/is/../it"; +#split +# +#Reuse code from week 17 +use strict; +use warnings; +use v5.26; + +my $URI=$ARGV[0]//'http://a.uri/with/strange%65characters{}?query=true#frag<>'; + +print "Original URI:\t$URI\n"; +#%Encode any character outside of restriced and unrestricted set except % +$URI=~s/([^0-9a-zA-Z-_.~%!*'();:@&=+\$,\/?#\[\]])/{sprintf("%%%2X",ord $1)}/ge; + +#Normalize decode any encoded unresreved characters. Normalize encoding to upper case +$URI=~s/\%([a-fA-F0-9]{2,2})/{decode($1)}/ge; +sub decode { + my $h=shift; + my $c=chr hex $h; + $c=~/[0-9a-zA-Z-_.~]/ ? $c:uc "%$h"; +} + +#Scheme to lower case +$URI=~s/^([a-zA-Z][a-zA-Z\-\.\+]+)/{uc $1}/e; + +print "Normalized URI:\t$URI\n"; -- cgit From 2cc2c414fdce3df9f748c3c408feb328b4d30b48 Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Sun, 18 Aug 2019 11:36:48 +1000 Subject: Added ch2 for p6 --- challenge-021/ruben-westerberg/perl5/ch-1.pl | 1 - challenge-021/ruben-westerberg/perl5/ch-2.pl | 5 ----- challenge-021/ruben-westerberg/perl6/ch-2.p6 | 20 ++++++++++++++++++++ 3 files changed, 20 insertions(+), 6 deletions(-) create mode 100755 challenge-021/ruben-westerberg/perl6/ch-2.p6 diff --git a/challenge-021/ruben-westerberg/perl5/ch-1.pl b/challenge-021/ruben-westerberg/perl5/ch-1.pl index 4af2eb221f..669f076aad 100755 --- a/challenge-021/ruben-westerberg/perl5/ch-1.pl +++ b/challenge-021/ruben-westerberg/perl5/ch-1.pl @@ -14,5 +14,4 @@ while ($i <= $degree ) { state $fac=1; $sum+=1/($fac*=$i++); } -#printf "Eulers constant to $degree terms:\n%s\n",$sum->as_float(100); printf "Eulers constant to $degree terms:\n%s\n",$sum; diff --git a/challenge-021/ruben-westerberg/perl5/ch-2.pl b/challenge-021/ruben-westerberg/perl5/ch-2.pl index 05b23a5fbe..e2cf7d0afa 100755 --- a/challenge-021/ruben-westerberg/perl5/ch-2.pl +++ b/challenge-021/ruben-westerberg/perl5/ch-2.pl @@ -1,9 +1,4 @@ #!/usr/bin/env perl - -my $uri=$ARGV[0]//"http://my.test.url/where/is/../it"; -#split -# -#Reuse code from week 17 use strict; use warnings; use v5.26; diff --git a/challenge-021/ruben-westerberg/perl6/ch-2.p6 b/challenge-021/ruben-westerberg/perl6/ch-2.p6 new file mode 100755 index 0000000000..204001f1f1 --- /dev/null +++ b/challenge-021/ruben-westerberg/perl6/ch-2.p6 @@ -0,0 +1,20 @@ +#!/usr/bin/env perl6 + +my $URI=@*ARGS[0]//'http://a.uri/with/strange%65characters{}?query=true#frag<>'; + +print "Original URI:\t$URI\n"; +#%Encode any character outside of restriced and unrestricted set except % +$URI=S:g/(<-[0..9a..zA..Z\-_.~\%\!\*\'\(\)\;\:\@\&\=\+\$\,\/\?\#\[\]]>)/{sprintf("%%%2X",ord $0.Str)}/ given $URI; + +#Normalize decode any encoded unresreved characters. Normalize encoding to upper case +$URI=S:g/\%(<[a..fA..F0..9]>**2)/{decode($0)}/ given $URI; +sub decode ($h){ + my $c=chr :16($h.Str); + /<[0..9a..zA..Z\-_.~]>/ ?? $c!!uc "%$h" given $c; + #"AAA"; +} + +#Scheme to lower case +$URI=S/^(<[a..zA..Z]><[a..zA..Z\-\.\+]>+)/{uc $0}/ given $URI; + +print "Normalized URI:\t$URI\n"; -- cgit From 349d1e2258b2d28b179e4fffe38185601400b0f2 Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Sun, 18 Aug 2019 12:16:12 +1000 Subject: Tidy up and README --- challenge-021/ruben-westerberg/README | 10 +++++++--- challenge-021/ruben-westerberg/perl5/ch-2.pl | 4 ++-- challenge-021/ruben-westerberg/perl6/ch-2.p6 | 4 ++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/challenge-021/ruben-westerberg/README b/challenge-021/ruben-westerberg/README index ac61aa2e27..1f319161be 100644 --- a/challenge-021/ruben-westerberg/README +++ b/challenge-021/ruben-westerberg/README @@ -2,9 +2,13 @@ Solution by Ruben Westerberg ch-1.pl and ch-1.p6 === -Run the program with a single command line argument to splt the argument on dissimilar character boundaries. -If no argument is provided a demo string is used. +Run with a single argument. Argument is the number of terms to add in calculating Eulers number. If no argument is given, a default of 10 terms are used. ch-2.pl and ch-2.p6 === -run the program to find the smallest Amicable numbers +Run with a single argument. Argument is a URI which is normalized (no semantic changes). If no argument is given a test URI is used. +- Normalizes scheme to lower case +- Normalize % codes to upper case +- decode unreserved % codes if present +- encode any characters outside of reserved or unreserved codes. + diff --git a/challenge-021/ruben-westerberg/perl5/ch-2.pl b/challenge-021/ruben-westerberg/perl5/ch-2.pl index e2cf7d0afa..eda2228fa5 100755 --- a/challenge-021/ruben-westerberg/perl5/ch-2.pl +++ b/challenge-021/ruben-westerberg/perl5/ch-2.pl @@ -3,7 +3,7 @@ use strict; use warnings; use v5.26; -my $URI=$ARGV[0]//'http://a.uri/with/strange%65characters{}?query=true#frag<>'; +my $URI=$ARGV[0]//'HTTP://a.uri/with/strange%65characters{}?query=true#frag<>'; print "Original URI:\t$URI\n"; #%Encode any character outside of restriced and unrestricted set except % @@ -18,6 +18,6 @@ sub decode { } #Scheme to lower case -$URI=~s/^([a-zA-Z][a-zA-Z\-\.\+]+)/{uc $1}/e; +$URI=~s/^([a-zA-Z][a-zA-Z\-\.\+]+)/{lc $1}/e; print "Normalized URI:\t$URI\n"; diff --git a/challenge-021/ruben-westerberg/perl6/ch-2.p6 b/challenge-021/ruben-westerberg/perl6/ch-2.p6 index 204001f1f1..973fe06cb1 100755 --- a/challenge-021/ruben-westerberg/perl6/ch-2.p6 +++ b/challenge-021/ruben-westerberg/perl6/ch-2.p6 @@ -1,6 +1,6 @@ #!/usr/bin/env perl6 -my $URI=@*ARGS[0]//'http://a.uri/with/strange%65characters{}?query=true#frag<>'; +my $URI=@*ARGS[0]//'HTTP://a.uri/with/strange%65characters{}?query=true#frag<>'; print "Original URI:\t$URI\n"; #%Encode any character outside of restriced and unrestricted set except % @@ -15,6 +15,6 @@ sub decode ($h){ } #Scheme to lower case -$URI=S/^(<[a..zA..Z]><[a..zA..Z\-\.\+]>+)/{uc $0}/ given $URI; +$URI=S/^(<[a..zA..Z]><[a..zA..Z\-\.\+]>+)/{lc $0}/ given $URI; print "Normalized URI:\t$URI\n"; -- cgit