aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-021/ruben-westerberg/README10
-rwxr-xr-xchallenge-021/ruben-westerberg/perl5/ch-1.pl17
-rwxr-xr-xchallenge-021/ruben-westerberg/perl5/ch-2.pl23
-rwxr-xr-xchallenge-021/ruben-westerberg/perl6/ch-1.p611
-rwxr-xr-xchallenge-021/ruben-westerberg/perl6/ch-2.p620
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";