aboutsummaryrefslogtreecommitdiff
path: root/challenge-070
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-07-26 23:26:18 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-07-26 23:26:18 +0100
commit603fbab829dc0d11fb5e38caccdaa1206a214b2d (patch)
treeabe8af2d788e781132c80cc82458753c6cadb045 /challenge-070
parent24e6f7b3ade3b679189518f3152a5e0a08fdd6d0 (diff)
downloadperlweeklychallenge-club-603fbab829dc0d11fb5e38caccdaa1206a214b2d.tar.gz
perlweeklychallenge-club-603fbab829dc0d11fb5e38caccdaa1206a214b2d.tar.bz2
perlweeklychallenge-club-603fbab829dc0d11fb5e38caccdaa1206a214b2d.zip
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-070')
-rw-r--r--challenge-070/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-070/laurent-rosenfeld/perl/ch-1.pl13
-rw-r--r--challenge-070/laurent-rosenfeld/raku/ch-1.raku22
-rw-r--r--challenge-070/laurent-rosenfeld/raku/ch-2.raku19
4 files changed, 55 insertions, 0 deletions
diff --git a/challenge-070/laurent-rosenfeld/blog.txt b/challenge-070/laurent-rosenfeld/blog.txt
new file mode 100644
index 0000000000..a4864c251b
--- /dev/null
+++ b/challenge-070/laurent-rosenfeld/blog.txt
@@ -0,0 +1 @@
+http://blogs.perl.org/users/laurent_r/2020/07/perl-weekly-challenge-70-character-swapping-and-gray-code-sequence.html
diff --git a/challenge-070/laurent-rosenfeld/perl/ch-1.pl b/challenge-070/laurent-rosenfeld/perl/ch-1.pl
new file mode 100644
index 0000000000..8dfa539ac4
--- /dev/null
+++ b/challenge-070/laurent-rosenfeld/perl/ch-1.pl
@@ -0,0 +1,13 @@
+use strict;
+use warnings;
+use feature qw /say/;
+
+my ($s, $c, $o) = @ARGV;
+my $n = length $s;
+die "Invalid values" if $c < 1 or $o < 1 or $c + $o > $n;
+for my $i (1..$c) {
+ my $tmp = substr $s, $i % $n, 1;
+ substr($s, $i % $n, 1) = substr $s, ($i + $o) % $n, 1;
+ substr($s, ($i + $o) % $n, 1) = $tmp;
+}
+say $s;
diff --git a/challenge-070/laurent-rosenfeld/raku/ch-1.raku b/challenge-070/laurent-rosenfeld/raku/ch-1.raku
new file mode 100644
index 0000000000..fa26355368
--- /dev/null
+++ b/challenge-070/laurent-rosenfeld/raku/ch-1.raku
@@ -0,0 +1,22 @@
+use v6;
+subset Non0 of Int where * > 0;
+
+# For fun, indexing strings with subscripts
+multi sub postcircumfix:<[ ]> (Str $s, Int $n) {
+ substr-rw $s, $n, 1;
+}
+# Not used here, but more fun
+multi sub postcircumfix:<[ ]> (Str $s, Range $r) {
+ substr-rw $s, $r;
+}
+
+sub MAIN ($s is copy, Non0 $c = 3, Non0 $o = 4) {
+ my $n = $s.chars;
+ die "Invalid values" if $c + $o > $n;
+ for 1..$c -> $i {
+ my $tmp = $s[$i % $n];
+ substr-rw($s, $i % $n, 1) = $s[($i + $o) % $n];
+ substr-rw($s, ($i + $o) % $n, 1) = $tmp;
+ }
+ say $s
+}
diff --git a/challenge-070/laurent-rosenfeld/raku/ch-2.raku b/challenge-070/laurent-rosenfeld/raku/ch-2.raku
new file mode 100644
index 0000000000..33f8a50ba3
--- /dev/null
+++ b/challenge-070/laurent-rosenfeld/raku/ch-2.raku
@@ -0,0 +1,19 @@
+use v6;
+my @gray = [0], [0, 1]; # No need to have [1, 2, 4, 3] here
+
+sub next-gray (Int $in) {
+ my $fmt = "%0" ~ $in ~ "s"; # build the formatting string
+ my @s1 = map { .fmt('%b').fmt($fmt) }, | @gray[$in];
+ my @s2 = reverse map { '1' ~ $_ }, @s1;
+ @s1 = map { '0' ~ $_ }, @s1;
+ my @gray-seq = |@s1, |@s2;
+ my @result = map { .parse-base(2) }, @gray-seq;
+}
+
+sub MAIN ($n where 1 <= * <= 5) { # we can start at 1
+ for 1..^$n -> $i {
+ @gray[$i+1] = next-gray $i;
+ }
+ say @gray[$n];
+ say @gray;
+}