aboutsummaryrefslogtreecommitdiff
path: root/challenge-070
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-07-20 11:22:51 +0100
committerGitHub <noreply@github.com>2020-07-20 11:22:51 +0100
commit14a427ae472fd30fe0cdb3956e48392b10644dec (patch)
tree32ce8926e32ee8abba7bf4cbde24ee2f5ef4f19e /challenge-070
parentd035988beee0e4a0ce4d8a944ff3c43ac0a06e88 (diff)
parent5a4a0ff95b49a2365b4a08776172907efc840357 (diff)
downloadperlweeklychallenge-club-14a427ae472fd30fe0cdb3956e48392b10644dec.tar.gz
perlweeklychallenge-club-14a427ae472fd30fe0cdb3956e48392b10644dec.tar.bz2
perlweeklychallenge-club-14a427ae472fd30fe0cdb3956e48392b10644dec.zip
Merge pull request #1963 from Firedrake/rogerbw-challenge-070
Solutions for challenge #70 in Perl and Raku.
Diffstat (limited to 'challenge-070')
-rw-r--r--challenge-070/roger-bell-west/perl/ch-1.pl23
-rwxr-xr-xchallenge-070/roger-bell-west/perl/ch-2.pl26
-rw-r--r--challenge-070/roger-bell-west/raku/ch-1.p619
-rwxr-xr-xchallenge-070/roger-bell-west/raku/ch-2.p624
4 files changed, 92 insertions, 0 deletions
diff --git a/challenge-070/roger-bell-west/perl/ch-1.pl b/challenge-070/roger-bell-west/perl/ch-1.pl
new file mode 100644
index 0000000000..f295850558
--- /dev/null
+++ b/challenge-070/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,23 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+is(swap('perlandraku',3,4),
+ 'pndraerlaku',
+ 'example 1',
+ );
+
+sub swap {
+ my $s=shift;
+ my $c=shift;
+ my $o=shift;
+ my $n=length($s);
+ my @s=split '',$s;
+ foreach my $ci (1..$c) {
+ ($s[$ci % $n],$s[($ci+$o) % $n]) = ($s[($ci+$o) % $n],$s[$ci % $n]);
+ }
+ return join('',@s);
+}
diff --git a/challenge-070/roger-bell-west/perl/ch-2.pl b/challenge-070/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..fe60ec3be4
--- /dev/null
+++ b/challenge-070/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,26 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+is_deeply(gray(4),
+ [0, 1, 3, 2, 6, 7, 5, 4, 12, 13, 15, 14, 10, 11, 9, 8],
+ 'example 1',
+ );
+
+sub gray {
+ my $depth=shift;
+ my @s=(0,1);
+ if ($depth>1) {
+ my $k=1;
+ foreach (2..$depth) {
+ $k*=2;
+ my @o=@s;
+ push @o,map {$_ | $k} reverse @s;
+ @s=@o;
+ }
+ }
+ return \@s;
+}
diff --git a/challenge-070/roger-bell-west/raku/ch-1.p6 b/challenge-070/roger-bell-west/raku/ch-1.p6
new file mode 100644
index 0000000000..bb14f48040
--- /dev/null
+++ b/challenge-070/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,19 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 1;
+
+is(swap('perlandraku',3,4),
+ 'pndraerlaku',
+ 'example 1',
+ );
+
+sub swap($s,$c,$o) {
+ my $n=$s.chars;
+ my @s=$s.comb;
+ for (1..$c) -> $ci {
+ (@s[$ci % $n],@s[($ci+$o) % $n]) = (@s[($ci+$o) % $n],@s[$ci % $n]);
+ }
+ return join('',@s);
+}
diff --git a/challenge-070/roger-bell-west/raku/ch-2.p6 b/challenge-070/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..e8daa93e79
--- /dev/null
+++ b/challenge-070/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,24 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 1;
+
+is-deeply(gray(4),
+ [0, 1, 3, 2, 6, 7, 5, 4, 12, 13, 15, 14, 10, 11, 9, 8],
+ 'example 1',
+ );
+
+sub gray ($depth) {
+ my @s=(0,1);
+ if ($depth>1) {
+ my $k=1;
+ for (2..$depth) {
+ $k*=2;
+ my @o=@s;
+ map {push @o, $_ +| $k}, reverse @s.flat;
+ @s=@o;
+ }
+ }
+ return @s;
+}