aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2020-06-01 13:50:28 +0100
committerRoger Bell_West <roger@firedrake.org>2020-06-01 13:50:28 +0100
commit47fef88a03653dec3ac6e522ba2c0265436e19c8 (patch)
tree49fa968b3e6cd4280b1eaf93d234fba28b387609
parent8154af13c7c23a57d03c30e5387288b3da0ba4a6 (diff)
downloadperlweeklychallenge-club-47fef88a03653dec3ac6e522ba2c0265436e19c8.tar.gz
perlweeklychallenge-club-47fef88a03653dec3ac6e522ba2c0265436e19c8.tar.bz2
perlweeklychallenge-club-47fef88a03653dec3ac6e522ba2c0265436e19c8.zip
Solutions for challenge #63.
-rwxr-xr-xchallenge-063/roger-bell-west/perl/ch-1.pl30
-rwxr-xr-xchallenge-063/roger-bell-west/perl/ch-2.pl24
-rwxr-xr-xchallenge-063/roger-bell-west/raku/ch-1.p626
-rwxr-xr-xchallenge-063/roger-bell-west/raku/ch-2.p620
4 files changed, 100 insertions, 0 deletions
diff --git a/challenge-063/roger-bell-west/perl/ch-1.pl b/challenge-063/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..210eb81cc2
--- /dev/null
+++ b/challenge-063/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,30 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+if (last_word(' hello world', qr/[ea]l/) ne 'hello') {
+ die 1;
+}
+if (last_word("Don't match too much, Chet!", qr/ch.t/i) ne 'Chet!') {
+ die 2;
+}
+if (defined(last_word("spaces in regexp won't match", qr/in re/))){
+ die 3;
+}
+if (last_word( join(' ', 1..1e6), qr/^(3.*?){3}/) ne '399933') {
+ die 4;
+}
+
+sub last_word {
+ my ($str,$re)=@_;
+ my @list=reverse grep /\S/,split /\s+/,$str;
+ my $r;
+ foreach (@list) {
+ if ($_ =~ $re) {
+ $r=$_;
+ last;
+ }
+ }
+ return $r;
+}
diff --git a/challenge-063/roger-bell-west/perl/ch-2.pl b/challenge-063/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..e246d02093
--- /dev/null
+++ b/challenge-063/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,24 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+if (rotate('xyxx') != 7) {
+ die "wrong answer";
+}
+
+sub rotate {
+ my $str=shift;
+ my @s=split '',$str;
+ my $k=scalar @s;
+ my $n=0;
+ while (1) {
+ $n++;
+ my @l=splice @s,0,($n % $k);
+ push @s,@l;
+ if (join('',@s) eq $str) {
+ last;
+ }
+ }
+ return $n;
+}
diff --git a/challenge-063/roger-bell-west/raku/ch-1.p6 b/challenge-063/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..730e39bbaa
--- /dev/null
+++ b/challenge-063/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,26 @@
+#! /usr/bin/perl6
+
+if (last_word(' hello world', rx/<[ea]>l/) ne 'hello') {
+ die 1;
+}
+if (last_word("Don't match too much, Chet!", rx/:i ch.t/) ne 'Chet!') {
+ die 2;
+}
+if (defined(last_word("spaces in regexp won't match", rx/:s in re/))) {
+ die 3;
+}
+if (last_word(join(' ', 1..1e6), rx/^(3.*?) ** 3/) ne '399933') {
+ die 4;
+}
+
+sub last_word ($str,$re) {
+ my @list=reverse grep /\S/,split /\s+/,$str;
+ my $r;
+ for @list {
+ if ($_ ~~ $re) {
+ $r=$_;
+ last;
+ }
+ }
+ return $r;
+}
diff --git a/challenge-063/roger-bell-west/raku/ch-2.p6 b/challenge-063/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..ae673e74db
--- /dev/null
+++ b/challenge-063/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,20 @@
+#! /usr/bin/perl6
+
+if (rotate('xyxx') != 7) {
+ die "wrong answer";
+}
+
+sub rotate ($str) {
+ my @s=$str.comb(/./);
+ my $k=@s.elems;
+ my $n=0;
+ while (1) {
+ $n++;
+ my @l=splice @s,0,($n % $k);
+ map {push @s,$_},@l.flat;
+ if (join('',@s) eq $str) {
+ last;
+ }
+ }
+ return $n;
+}