aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2020-07-26 16:26:27 -0400
committerJaldhar H. Vyas <jaldhar@braincells.com>2020-07-26 16:26:27 -0400
commit1fb124a6c45dc8959576fc7308d94f19f8a1f24e (patch)
tree18b7ac19d721ec91ac3c6dbfaec4f40d6a4994ad
parent46de8b27214b11afc633a1707f8349bf664cfc4b (diff)
downloadperlweeklychallenge-club-1fb124a6c45dc8959576fc7308d94f19f8a1f24e.tar.gz
perlweeklychallenge-club-1fb124a6c45dc8959576fc7308d94f19f8a1f24e.tar.bz2
perlweeklychallenge-club-1fb124a6c45dc8959576fc7308d94f19f8a1f24e.zip
Challenge 70 by Jaldhar H. Vyas
-rw-r--r--challenge-070/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-070/jaldhar-h-vyas/perl/ch-1.pl40
-rwxr-xr-xchallenge-070/jaldhar-h-vyas/perl/ch-2.pl36
-rwxr-xr-xchallenge-070/jaldhar-h-vyas/raku/ch-1.p621
-rwxr-xr-xchallenge-070/jaldhar-h-vyas/raku/ch-2.p621
5 files changed, 119 insertions, 0 deletions
diff --git a/challenge-070/jaldhar-h-vyas/blog.txt b/challenge-070/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..a9121e0061
--- /dev/null
+++ b/challenge-070/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2020/07/perl_weekly_challenge_week_70.html
diff --git a/challenge-070/jaldhar-h-vyas/perl/ch-1.pl b/challenge-070/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..7781460d53
--- /dev/null
+++ b/challenge-070/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+use 5.020;
+use warnings;
+use English qw/ -no_match_vars- /;
+
+sub usage {
+ print<<"-USAGE-";
+Usage:
+ $PROGRAM_NAME <C> <O> <S>
+
+ <C> swap count
+ <O> offset
+ <S> string (length <= count + offset)
+-USAGE-
+
+ exit(0);
+}
+
+
+if (scalar @ARGV < 3) {
+ usage();
+}
+
+my ($C, $O, $S) = @ARGV;
+my $N = length $S;
+
+if ($C < 1 || $O < 1 || $C > $O || $C + $O > $N) {
+ usage();
+}
+
+my @chars = split //, $S;
+for my $i (1 .. $C) {
+ my $a = $i % $N;
+ my $b = ($i + $O) % $N;
+ my $temp = $chars[$a];
+ $chars[$a] = $chars[$b];
+ $chars[$b] = $temp;
+}
+
+say join q{}, @chars;
diff --git a/challenge-070/jaldhar-h-vyas/perl/ch-2.pl b/challenge-070/jaldhar-h-vyas/perl/ch-2.pl
new file mode 100755
index 0000000000..b70c504ed1
--- /dev/null
+++ b/challenge-070/jaldhar-h-vyas/perl/ch-2.pl
@@ -0,0 +1,36 @@
+#!/usr/bin/perl
+use 5.020;
+use warnings;
+use English qw/ -no_match_vars- /;
+
+sub usage {
+ print<<"-USAGE-";
+Usage:
+ $PROGRAM_NAME <N>
+
+ <N> bit length (2 - 5)
+-USAGE-
+
+ exit(0);
+}
+
+
+my $N = shift // usage();
+
+if ($N < 2 || $N > 5) {
+ usage();
+}
+
+my @code = (0, 1, 3, 2);
+
+if ($N > 2) {
+ for my $i (3 .. $N) {
+ my @s1 = map { sprintf('%0*b', $i - 1, $_); } @code;
+ my @s2 = reverse @s1;
+ @s1 = map { "0b0$_"; } @s1;
+ @s2 = map { "0b1$_"; } @s2;
+ @code = map { oct $_; } @s1, @s2;
+ }
+}
+
+say q{[}, (join q{, }, @code), q{]};
diff --git a/challenge-070/jaldhar-h-vyas/raku/ch-1.p6 b/challenge-070/jaldhar-h-vyas/raku/ch-1.p6
new file mode 100755
index 0000000000..64815b468a
--- /dev/null
+++ b/challenge-070/jaldhar-h-vyas/raku/ch-1.p6
@@ -0,0 +1,21 @@
+#!/usr/bin/perl6
+
+multi sub MAIN(
+ Int $C, #= swap count
+ Int $O, #= offset
+ Str $S #= string (length <= count + offset)
+ where { $C >= 1 && $O >= 1 && $C <= $O && ($C + $O) <= $S.chars}
+) {
+ my $N = $S.chars;
+ my @chars = $S.comb;
+
+ for 1 .. $C -> $i {
+ my $a = $i % $N;
+ my $b = ($i + $O) % $N;
+ my $temp = @chars[$a];
+ @chars[$a] = @chars[$b];
+ @chars[$b] = $temp;
+ }
+
+ @chars.join(q{}).say;
+} \ No newline at end of file
diff --git a/challenge-070/jaldhar-h-vyas/raku/ch-2.p6 b/challenge-070/jaldhar-h-vyas/raku/ch-2.p6
new file mode 100755
index 0000000000..7899125048
--- /dev/null
+++ b/challenge-070/jaldhar-h-vyas/raku/ch-2.p6
@@ -0,0 +1,21 @@
+#!/usr/bin/perl6
+
+multi sub MAIN(
+ Int $N #= bit length (2 - 5)
+ where { $N >= 2 && $N <= 5 }
+) {
+
+ my @code = (0, 1, 3, 2);
+
+ if $N >2 {
+ for 3 .. $N -> $i {
+ my @s1 = @code.map({ sprintf('%0*b', $i - 1, $_); });
+ my @s2 = @s1.reverse;
+ @s1 = @s1.map({ "0b0$_"; });
+ @s2 = @s2.map({ "0b1$_"; });
+ @code = @s1.push(| @s2).map({ +$_; });
+ }
+ }
+
+ say q{[}, @code.join(q{, }), q{]};
+} \ No newline at end of file