diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-07-26 23:26:18 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-07-26 23:26:18 +0100 |
| commit | 603fbab829dc0d11fb5e38caccdaa1206a214b2d (patch) | |
| tree | abe8af2d788e781132c80cc82458753c6cadb045 /challenge-070 | |
| parent | 24e6f7b3ade3b679189518f3152a5e0a08fdd6d0 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-070/laurent-rosenfeld/perl/ch-1.pl | 13 | ||||
| -rw-r--r-- | challenge-070/laurent-rosenfeld/raku/ch-1.raku | 22 | ||||
| -rw-r--r-- | challenge-070/laurent-rosenfeld/raku/ch-2.raku | 19 |
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; +} |
