diff options
| -rw-r--r-- | challenge-021/ruben-westerberg/README | 10 | ||||
| -rwxr-xr-x | challenge-021/ruben-westerberg/perl5/ch-1.pl | 17 | ||||
| -rwxr-xr-x | challenge-021/ruben-westerberg/perl5/ch-2.pl | 23 | ||||
| -rwxr-xr-x | challenge-021/ruben-westerberg/perl6/ch-1.p6 | 11 | ||||
| -rwxr-xr-x | challenge-021/ruben-westerberg/perl6/ch-2.p6 | 20 |
5 files changed, 78 insertions, 3 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-1.pl b/challenge-021/ruben-westerberg/perl5/ch-1.pl new file mode 100755 index 0000000000..669f076aad --- /dev/null +++ b/challenge-021/ruben-westerberg/perl5/ch-1.pl @@ -0,0 +1,17 @@ +#!/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; 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..eda2228fa5 --- /dev/null +++ b/challenge-021/ruben-westerberg/perl5/ch-2.pl @@ -0,0 +1,23 @@ +#!/usr/bin/env perl +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\-\.\+]+)/{lc $1}/e; + +print "Normalized URI:\t$URI\n"; 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(""); 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..973fe06cb1 --- /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\-\.\+]>+)/{lc $0}/ given $URI; + +print "Normalized URI:\t$URI\n"; |
