aboutsummaryrefslogtreecommitdiff
path: root/challenge-070
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-07-26 23:58:29 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-07-26 23:58:29 +0100
commit3fdf43a6fb35869c3359512a2d0bfc6cddf607be (patch)
treefda577ec52950fe1b5992ed4e83b8304def19c00 /challenge-070
parent5d4d7a45fdc2d90192542ce9deb3d184c11895d6 (diff)
downloadperlweeklychallenge-club-3fdf43a6fb35869c3359512a2d0bfc6cddf607be.tar.gz
perlweeklychallenge-club-3fdf43a6fb35869c3359512a2d0bfc6cddf607be.tar.bz2
perlweeklychallenge-club-3fdf43a6fb35869c3359512a2d0bfc6cddf607be.zip
- Added solutions by Colin Crain.
Diffstat (limited to 'challenge-070')
-rw-r--r--challenge-070/colin-crain/blog.txt1
-rw-r--r--challenge-070/colin-crain/perl/ch-1.pl33
-rw-r--r--challenge-070/colin-crain/perl/ch-2.pl22
-rw-r--r--challenge-070/colin-crain/raku/ch-1.raku26
-rw-r--r--challenge-070/colin-crain/raku/ch-2.raku15
5 files changed, 97 insertions, 0 deletions
diff --git a/challenge-070/colin-crain/blog.txt b/challenge-070/colin-crain/blog.txt
new file mode 100644
index 0000000000..0494fe274f
--- /dev/null
+++ b/challenge-070/colin-crain/blog.txt
@@ -0,0 +1 @@
+https://colincrain.wordpress.com/2020/07/27/exhibiting-gray-areas-in-character/
diff --git a/challenge-070/colin-crain/perl/ch-1.pl b/challenge-070/colin-crain/perl/ch-1.pl
new file mode 100644
index 0000000000..3138b36e74
--- /dev/null
+++ b/challenge-070/colin-crain/perl/ch-1.pl
@@ -0,0 +1,33 @@
+use warnings;
+use strict;
+use feature ":5.26";
+
+## ## ## ## ## MAIN:
+
+
+my ($str, $C, $O) = @ARGV;
+
+$str //= 'perlandraku';
+$C //= 3;
+$O //= 4;
+
+say "Count $C";
+say "Offset $O";
+say "Start ", $str =~ s/\B/ /gr; ## easier to see if we spread things out a bit
+
+$str = swap( $str, $C, $O );
+say "Result ", $str =~ s/\B/ /gr;
+
+## ## ## ## ## SUBS:
+
+sub swap {
+ my ($str, $C, $O ) = @_;
+ my $N = length $str;
+
+ for my $i (1..$C) {
+ substr( $str, ($i+$O) % $N, 1) =
+ substr( $str, $i % $N, 1,
+ substr( $str, ($i+$O) % $N, 1));
+ }
+ return $str;
+}
diff --git a/challenge-070/colin-crain/perl/ch-2.pl b/challenge-070/colin-crain/perl/ch-2.pl
new file mode 100644
index 0000000000..1c1de658b4
--- /dev/null
+++ b/challenge-070/colin-crain/perl/ch-2.pl
@@ -0,0 +1,22 @@
+use warnings;
+use strict;
+use feature ":5.26";
+
+## ## ## ## ## MAIN:
+
+my $bits = shift @ARGV // 3;
+
+say "[ ", (join ', ', grey_code($bits)->@*), " ]";
+
+## ## ## ## ## SUBS:
+
+sub grey_code {
+ my $s = shift;
+ return [0, 1] if $s == 1; ## edge case
+ return [ map { oct("0b".$_) } map {
+ my $n = $_;
+ my $fmt = '%0' . ($s-1) . "b";
+ my @gc = map {sprintf $fmt, $_} grey_code($s-1)->@*;
+ map { $n . $_ } $_ ? reverse @gc : @gc;
+ } (0,1) ];
+}
diff --git a/challenge-070/colin-crain/raku/ch-1.raku b/challenge-070/colin-crain/raku/ch-1.raku
new file mode 100644
index 0000000000..a70e23676e
--- /dev/null
+++ b/challenge-070/colin-crain/raku/ch-1.raku
@@ -0,0 +1,26 @@
+sub MAIN ( Str $str is copy = 'abcdefgh', Int $C = 1, Int $O = 7) {
+
+
+ ## easier to see the results if we spread things out a bit
+ say "Count $C";
+ say "Offset $O";
+ say "Start ", $str.comb.join: ' ';
+
+ swap( $str, $C, $O );
+
+ say "Result ", $str.comb.join: ' ';
+
+}
+
+
+## ## ## ## ## SUBS:
+
+sub swap ($str is rw, $C, $O) {
+ my $n = $str.chars;
+ for 1..$C -> $i {
+ my $tmp = $str.substr(($i+$O) % $n, 1);
+ $str.substr-rw(($i+$O) % $n, 1) = $str.substr-rw( $i % $n, 1 );
+ $str.substr-rw( $i % $n, 1 ) = $tmp;
+ }
+ return $str;
+}
diff --git a/challenge-070/colin-crain/raku/ch-2.raku b/challenge-070/colin-crain/raku/ch-2.raku
new file mode 100644
index 0000000000..87d381f973
--- /dev/null
+++ b/challenge-070/colin-crain/raku/ch-2.raku
@@ -0,0 +1,15 @@
+sub MAIN ( Int $bits where {$bits > 1} = 8) {
+
+ grey_code( $bits ).put;
+
+}
+
+sub grey_code ( $bits ) {
+ return (0,1) when $bits == 1;
+
+ return (0,1).map({
+ my $n = $_;
+ my @gc = grey_code($bits-1).map: {$_.fmt('%0' ~ ($bits-1) ~ 'b')};
+ ($_ ?? reverse @gc !! @gc).map:{ $n ~ $_ };
+ }).flat.map:{ :2($_ )}
+}