diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-07-26 23:58:29 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-07-26 23:58:29 +0100 |
| commit | 3fdf43a6fb35869c3359512a2d0bfc6cddf607be (patch) | |
| tree | fda577ec52950fe1b5992ed4e83b8304def19c00 /challenge-070 | |
| parent | 5d4d7a45fdc2d90192542ce9deb3d184c11895d6 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-070/colin-crain/perl/ch-1.pl | 33 | ||||
| -rw-r--r-- | challenge-070/colin-crain/perl/ch-2.pl | 22 | ||||
| -rw-r--r-- | challenge-070/colin-crain/raku/ch-1.raku | 26 | ||||
| -rw-r--r-- | challenge-070/colin-crain/raku/ch-2.raku | 15 |
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($_ )} +} |
