diff options
| author | Roger Bell_West <roger@firedrake.org> | 2020-06-01 13:50:28 +0100 |
|---|---|---|
| committer | Roger Bell_West <roger@firedrake.org> | 2020-06-01 13:50:28 +0100 |
| commit | 47fef88a03653dec3ac6e522ba2c0265436e19c8 (patch) | |
| tree | 49fa968b3e6cd4280b1eaf93d234fba28b387609 | |
| parent | 8154af13c7c23a57d03c30e5387288b3da0ba4a6 (diff) | |
| download | perlweeklychallenge-club-47fef88a03653dec3ac6e522ba2c0265436e19c8.tar.gz perlweeklychallenge-club-47fef88a03653dec3ac6e522ba2c0265436e19c8.tar.bz2 perlweeklychallenge-club-47fef88a03653dec3ac6e522ba2c0265436e19c8.zip | |
Solutions for challenge #63.
| -rwxr-xr-x | challenge-063/roger-bell-west/perl/ch-1.pl | 30 | ||||
| -rwxr-xr-x | challenge-063/roger-bell-west/perl/ch-2.pl | 24 | ||||
| -rwxr-xr-x | challenge-063/roger-bell-west/raku/ch-1.p6 | 26 | ||||
| -rwxr-xr-x | challenge-063/roger-bell-west/raku/ch-2.p6 | 20 |
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; +} |
