From 47fef88a03653dec3ac6e522ba2c0265436e19c8 Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Mon, 1 Jun 2020 13:50:28 +0100 Subject: Solutions for challenge #63. --- challenge-063/roger-bell-west/perl/ch-1.pl | 30 ++++++++++++++++++++++++++++++ challenge-063/roger-bell-west/perl/ch-2.pl | 24 ++++++++++++++++++++++++ challenge-063/roger-bell-west/raku/ch-1.p6 | 26 ++++++++++++++++++++++++++ challenge-063/roger-bell-west/raku/ch-2.p6 | 20 ++++++++++++++++++++ 4 files changed, 100 insertions(+) create mode 100755 challenge-063/roger-bell-west/perl/ch-1.pl create mode 100755 challenge-063/roger-bell-west/perl/ch-2.pl create mode 100755 challenge-063/roger-bell-west/raku/ch-1.p6 create mode 100755 challenge-063/roger-bell-west/raku/ch-2.p6 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; +} -- cgit