aboutsummaryrefslogtreecommitdiff
path: root/challenge-070
diff options
context:
space:
mode:
authorMyoungjin JEON <jeongoon@gmail.com>2020-07-27 16:10:03 +1000
committerMyoungjin JEON <jeongoon@gmail.com>2020-07-27 16:10:03 +1000
commit9f5aee78a5569f7e0c8f742dd907663bd1e04642 (patch)
tree8f864d8438c06983ab9438e1e9839628cfe18520 /challenge-070
parentfde6b9fbc1e5fa1378acd6b1b5c6aed854f4f156 (diff)
parent450eab302dee5452d66be1f388cea4fafb0b5a31 (diff)
downloadperlweeklychallenge-club-9f5aee78a5569f7e0c8f742dd907663bd1e04642.tar.gz
perlweeklychallenge-club-9f5aee78a5569f7e0c8f742dd907663bd1e04642.tar.bz2
perlweeklychallenge-club-9f5aee78a5569f7e0c8f742dd907663bd1e04642.zip
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-070')
-rw-r--r--challenge-070/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-070/arne-sommer/node/ch-2.js62
-rwxr-xr-xchallenge-070/arne-sommer/node/gray-code-seq-node62
-rwxr-xr-xchallenge-070/arne-sommer/perl/ch-1.pl32
-rwxr-xr-xchallenge-070/arne-sommer/perl/ch-2.pl48
-rwxr-xr-xchallenge-070/arne-sommer/perl/charswap-perl32
-rwxr-xr-xchallenge-070/arne-sommer/perl/gray-code-seq-perl48
-rwxr-xr-xchallenge-070/arne-sommer/raku/ch-1.raku18
-rwxr-xr-xchallenge-070/arne-sommer/raku/ch-2.raku34
-rwxr-xr-xchallenge-070/arne-sommer/raku/charswap18
-rwxr-xr-xchallenge-070/arne-sommer/raku/charswap-mod25
-rwxr-xr-xchallenge-070/arne-sommer/raku/charswap-node38
-rwxr-xr-xchallenge-070/arne-sommer/raku/charswap-sans-mod24
-rwxr-xr-xchallenge-070/arne-sommer/raku/gray-code-seq34
-rw-r--r--challenge-070/athanasius/perl/ch-1.pl131
-rw-r--r--challenge-070/athanasius/perl/ch-2.pl125
-rw-r--r--challenge-070/athanasius/raku/ch-1.raku114
-rw-r--r--challenge-070/athanasius/raku/ch-2.raku113
-rw-r--r--challenge-070/bob-lied/README1
-rw-r--r--challenge-070/cheok-yin-fung/common-lisp/ch-2.lsp17
-rw-r--r--challenge-070/cheok-yin-fung/perl/ch-1.pl24
-rw-r--r--challenge-070/cheok-yin-fung/perl/ch-2.pl21
-rwxr-xr-xchallenge-070/dave-jacoby/perl/ch-1.pl65
-rwxr-xr-xchallenge-070/dave-jacoby/perl/ch-2.pl76
-rwxr-xr-xchallenge-070/e-choroba/perl/ch-1.pl77
-rwxr-xr-xchallenge-070/e-choroba/perl/ch-2.pl39
-rw-r--r--challenge-070/jo-37/perl/ch-1.pl26
-rwxr-xr-xchallenge-070/jo-37/perl/ch-2.pl62
-rw-r--r--challenge-070/luca-ferrari/blog-1.txt1
-rw-r--r--challenge-070/luca-ferrari/blog-2.txt1
-rw-r--r--challenge-070/luca-ferrari/raku/ch-1.p618
-rw-r--r--challenge-070/luca-ferrari/raku/ch-2.p623
-rw-r--r--challenge-070/mark-anderson/raku/ch-1.raku21
-rw-r--r--challenge-070/mark-anderson/raku/ch-2.raku15
-rw-r--r--challenge-070/mohammad-anwar/blog1.txt1
-rw-r--r--challenge-070/mohammad-anwar/blog2.txt1
-rw-r--r--challenge-070/mohammad-anwar/blog3.txt1
-rwxr-xr-xchallenge-070/mohammad-anwar/perl/ch-2a.pl4
-rwxr-xr-xchallenge-070/mohammad-anwar/raku/ch-1.raku28
-rwxr-xr-xchallenge-070/mohammad-anwar/raku/ch-1a.raku34
-rwxr-xr-xchallenge-070/mohammad-anwar/raku/ch-2.raku44
-rwxr-xr-xchallenge-070/mohammad-anwar/raku/ch-2a.raku49
-rwxr-xr-xchallenge-070/mohammad-anwar/swift/ch-1.swift63
-rw-r--r--challenge-070/noud/raku/ch-1.p644
-rw-r--r--challenge-070/noud/raku/ch-2.p651
-rwxr-xr-xchallenge-070/perlboy1967/perl/ch-1.pl61
-rwxr-xr-xchallenge-070/perlboy1967/perl/ch-2.pl38
-rw-r--r--challenge-070/pete-houston/perl/ch-1.pl46
-rw-r--r--challenge-070/pete-houston/perl/ch-2.pl34
-rw-r--r--challenge-070/roger-bell-west/blog.txt1
-rw-r--r--challenge-070/shahed-nooshmand/blog.txt1
-rw-r--r--challenge-070/shahed-nooshmand/raku/ch-1.raku3
-rw-r--r--challenge-070/shahed-nooshmand/raku/ch-2.raku1
-rw-r--r--challenge-070/simon-proctor/raku/ch-1.raku20
-rw-r--r--challenge-070/simon-proctor/raku/ch-2.raku18
-rw-r--r--challenge-070/ulrich-rieke/cpp/ch-1.cpp29
-rw-r--r--challenge-070/ulrich-rieke/perl/ch-1.pl23
-rw-r--r--challenge-070/ulrich-rieke/perl/ch-2.pl38
-rw-r--r--challenge-070/ulrich-rieke/raku/ch-1.raku16
-rw-r--r--challenge-070/ulrich-rieke/raku/ch-2.raku21
-rw-r--r--challenge-070/walt-mankowski/c/Makefile23
-rw-r--r--challenge-070/walt-mankowski/c/ch-1.c19
-rw-r--r--challenge-070/walt-mankowski/c/ch-2.c29
-rw-r--r--challenge-070/walt-mankowski/perl/ch-1.pl51
-rw-r--r--challenge-070/walt-mankowski/perl/ch-2.pl59
-rw-r--r--challenge-070/walt-mankowski/python/ch-1.py15
-rw-r--r--challenge-070/walt-mankowski/python/ch-2.py12
-rw-r--r--challenge-070/wanderdoc/perl/ch-1.pl63
-rw-r--r--challenge-070/wanderdoc/perl/ch-2.pl57
-rw-r--r--challenge-070/x1mandi/README1
-rw-r--r--challenge-070/x1mandi/perl/ch-1.pl44
71 files changed, 2487 insertions, 2 deletions
diff --git a/challenge-070/arne-sommer/blog.txt b/challenge-070/arne-sommer/blog.txt
new file mode 100644
index 0000000000..2058e9e780
--- /dev/null
+++ b/challenge-070/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/gray-swapping.html
diff --git a/challenge-070/arne-sommer/node/ch-2.js b/challenge-070/arne-sommer/node/ch-2.js
new file mode 100755
index 0000000000..c3e831c06f
--- /dev/null
+++ b/challenge-070/arne-sommer/node/ch-2.js
@@ -0,0 +1,62 @@
+#! /usr/bin/env node
+
+var N = process.argv[2] || 3;
+
+var verbose = false;
+
+if (N == '--verbose')
+{
+ verbose = true;
+ N = process.argv[3] || 3;
+}
+
+let die = (message) => {
+ console.log(message);
+ process.kill(process.pid);
+};
+
+var NN = parseInt(N);
+
+if (NN != N || NN < 2 || NN > 5)
+ die('N: Integer 2,3,4,5 only');
+
+var sequence = [0,1,3,2];
+
+let asBinary = (value, length) => {
+ var binary = value.toString(2);
+
+ while (binary.length < length)
+ binary = "0" + binary;
+
+ return binary;
+}
+
+let generate2bgcs = (array, level) => {
+ var S1a = array.map(x => asBinary(x,level-1) );
+ var S2a = S1a.slice(); S2a.reverse();
+ var S1 = S1a.map(x => '0' + x);
+ var S2 = S2a.map(x => '1' + x);
+ var S3 = S1; for (x of S2) { S3.push(x); }
+ var out = S3.map( x => parseInt(x, 2) );
+
+ if (verbose)
+ {
+ console.log(': in: ' + array);
+ console.log(': a) S1 = ' + S1a);
+ console.log(': b) S2 = ' + S2a);
+ console.log(': c) S1 = ' + S1);
+ console.log(': d) S2 = ' + S2);
+ console.log(': e) S3 = ' + S3);
+ console.log(': out: ' + out);
+ }
+
+ return out;
+}
+
+for (level = 3; level <= NN; level++)
+{
+ sequence = generate2bgcs(sequence, level);
+}
+
+console.log(sequence);
+
diff --git a/challenge-070/arne-sommer/node/gray-code-seq-node b/challenge-070/arne-sommer/node/gray-code-seq-node
new file mode 100755
index 0000000000..c3e831c06f
--- /dev/null
+++ b/challenge-070/arne-sommer/node/gray-code-seq-node
@@ -0,0 +1,62 @@
+#! /usr/bin/env node
+
+var N = process.argv[2] || 3;
+
+var verbose = false;
+
+if (N == '--verbose')
+{
+ verbose = true;
+ N = process.argv[3] || 3;
+}
+
+let die = (message) => {
+ console.log(message);
+ process.kill(process.pid);
+};
+
+var NN = parseInt(N);
+
+if (NN != N || NN < 2 || NN > 5)
+ die('N: Integer 2,3,4,5 only');
+
+var sequence = [0,1,3,2];
+
+let asBinary = (value, length) => {
+ var binary = value.toString(2);
+
+ while (binary.length < length)
+ binary = "0" + binary;
+
+ return binary;
+}
+
+let generate2bgcs = (array, level) => {
+ var S1a = array.map(x => asBinary(x,level-1) );
+ var S2a = S1a.slice(); S2a.reverse();
+ var S1 = S1a.map(x => '0' + x);
+ var S2 = S2a.map(x => '1' + x);
+ var S3 = S1; for (x of S2) { S3.push(x); }
+ var out = S3.map( x => parseInt(x, 2) );
+
+ if (verbose)
+ {
+ console.log(': in: ' + array);
+ console.log(': a) S1 = ' + S1a);
+ console.log(': b) S2 = ' + S2a);
+ console.log(': c) S1 = ' + S1);
+ console.log(': d) S2 = ' + S2);
+ console.log(': e) S3 = ' + S3);
+ console.log(': out: ' + out);
+ }
+
+ return out;
+}
+
+for (level = 3; level <= NN; level++)
+{
+ sequence = generate2bgcs(sequence, level);
+}
+
+console.log(sequence);
+
diff --git a/challenge-070/arne-sommer/perl/ch-1.pl b/challenge-070/arne-sommer/perl/ch-1.pl
new file mode 100755
index 0000000000..b28433a0d9
--- /dev/null
+++ b/challenge-070/arne-sommer/perl/ch-1.pl
@@ -0,0 +1,32 @@
+#! /usr/bin/env perl
+
+use strict;
+use feature 'say';
+
+my $verbose = 0;
+
+if (@ARGV && $ARGV[0] eq "--verbose")
+{
+ $verbose = 1;
+ shift(@ARGV);
+}
+
+my $S = shift(@ARGV) // 'perlandraku';
+my $N = length $S;
+my $O = shift(@ARGV) // 4;
+my $C = shift(@ARGV) // 3;
+
+die '$O: Integer >= 1 only' unless int $O == $O;
+die '$C: Integer >= 1 only' unless int $C == $C;
+die '$C: Must be < $O' unless $C < $O;
+die '$C + $O: Must be <= $N' unless $C + $O <= $N;
+
+for my $index (1 .. $C)
+{
+ say "swap $index: " . substr($S, $index, 1) . " <-> " . substr($S, $index + $O, 1) . " == $S" if $verbose;
+
+ (substr($S, $index,1), substr($S, $index + $O,1) ) =
+ (substr($S, $index + $O, 1), substr($S, $index, 1));
+}
+
+say $S;
diff --git a/challenge-070/arne-sommer/perl/ch-2.pl b/challenge-070/arne-sommer/perl/ch-2.pl
new file mode 100755
index 0000000000..62ed872faa
--- /dev/null
+++ b/challenge-070/arne-sommer/perl/ch-2.pl
@@ -0,0 +1,48 @@
+#! /usr/bin/env perl
+
+use strict;
+use feature 'say';
+use feature 'signatures';
+no warnings 'experimental::signatures';
+
+my $verbose = 0;
+
+if (@ARGV && $ARGV[0] eq "--verbose")
+{
+ $verbose = 1;
+ shift(@ARGV);
+}
+
+my $N = shift(@ARGV) // 3;
+
+die '$N out of range (2..5)' unless 2 <= $N && $N <=5;
+
+my @sequence = (0,1,3,2);
+
+for my $level (3 .. $N)
+{
+ @sequence = generate2bgcs($level, $verbose, @sequence);
+}
+
+say "[" . join(", ", @sequence) . "]";
+
+sub generate2bgcs ($level, $verbose, @in)
+{
+ my @S1a = map { sprintf('%0' . ($level-1) . 'b', $_) } @in;
+ my @S2a = reverse @S1a;
+ my @S1 = map { "0$_" } @S1a;
+ my @S2 = map { "1$_" } @S2a;
+ my @S3 = (@S1, @S2);
+ my @out = map { oct("0b$_") } @S3;
+
+ if ($verbose)
+ {
+ say ": a) S1 = [" . join(", ", @S1a) ."]";
+ say ": b) S2 = [" . join(", ", @S2a) ."]";
+ say ": c) S1 = [" . join(", ", @S1) ."]";
+ say ": b) S2 = [" . join(", ", @S2) ."]";
+ say ": e) S3 = [" . join(", ", @S3) ."]";
+ say ": \$N=$level = [" . join(", ", @out) . "]";
+ }
+ return @out;
+}
diff --git a/challenge-070/arne-sommer/perl/charswap-perl b/challenge-070/arne-sommer/perl/charswap-perl
new file mode 100755
index 0000000000..b28433a0d9
--- /dev/null
+++ b/challenge-070/arne-sommer/perl/charswap-perl
@@ -0,0 +1,32 @@
+#! /usr/bin/env perl
+
+use strict;
+use feature 'say';
+
+my $verbose = 0;
+
+if (@ARGV && $ARGV[0] eq "--verbose")
+{
+ $verbose = 1;
+ shift(@ARGV);
+}
+
+my $S = shift(@ARGV) // 'perlandraku';
+my $N = length $S;
+my $O = shift(@ARGV) // 4;
+my $C = shift(@ARGV) // 3;
+
+die '$O: Integer >= 1 only' unless int $O == $O;
+die '$C: Integer >= 1 only' unless int $C == $C;
+die '$C: Must be < $O' unless $C < $O;
+die '$C + $O: Must be <= $N' unless $C + $O <= $N;
+
+for my $index (1 .. $C)
+{
+ say "swap $index: " . substr($S, $index, 1) . " <-> " . substr($S, $index + $O, 1) . " == $S" if $verbose;
+
+ (substr($S, $index,1), substr($S, $index + $O,1) ) =
+ (substr($S, $index + $O, 1), substr($S, $index, 1));
+}
+
+say $S;
diff --git a/challenge-070/arne-sommer/perl/gray-code-seq-perl b/challenge-070/arne-sommer/perl/gray-code-seq-perl
new file mode 100755
index 0000000000..62ed872faa
--- /dev/null
+++ b/challenge-070/arne-sommer/perl/gray-code-seq-perl
@@ -0,0 +1,48 @@
+#! /usr/bin/env perl
+
+use strict;
+use feature 'say';
+use feature 'signatures';
+no warnings 'experimental::signatures';
+
+my $verbose = 0;
+
+if (@ARGV && $ARGV[0] eq "--verbose")
+{
+ $verbose = 1;
+ shift(@ARGV);
+}
+
+my $N = shift(@ARGV) // 3;
+
+die '$N out of range (2..5)' unless 2 <= $N && $N <=5;
+
+my @sequence = (0,1,3,2);
+
+for my $level (3 .. $N)
+{
+ @sequence = generate2bgcs($level, $verbose, @sequence);
+}
+
+say "[" . join(", ", @sequence) . "]";
+
+sub generate2bgcs ($level, $verbose, @in)
+{
+ my @S1a = map { sprintf('%0' . ($level-1) . 'b', $_) } @in;
+ my @S2a = reverse @S1a;
+ my @S1 = map { "0$_" } @S1a;
+ my @S2 = map { "1$_" } @S2a;
+ my @S3 = (@S1, @S2);
+ my @out = map { oct("0b$_") } @S3;
+
+ if ($verbose)
+ {
+ say ": a) S1 = [" . join(", ", @S1a) ."]";
+ say ": b) S2 = [" . join(", ", @S2a) ."]";
+ say ": c) S1 = [" . join(", ", @S1) ."]";
+ say ": b) S2 = [" . join(", ", @S2) ."]";
+ say ": e) S3 = [" . join(", ", @S3) ."]";
+ say ": \$N=$level = [" . join(", ", @out) . "]";
+ }
+ return @out;
+}
diff --git a/challenge-070/arne-sommer/raku/ch-1.raku b/challenge-070/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..459d0da9af
--- /dev/null
+++ b/challenge-070/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,18 @@
+#! /usr/bin/env raku
+
+subset PosInt of Int where * >= 1;
+
+unit sub MAIN (:$S is copy = 'perlandraku',
+ PosInt :$O = 4,
+ PosInt :$C where $C < $O && $C + $O <= $S.chars = 3,
+ :$v, :$verbose = $v);
+
+for 1 .. $C -> $index
+{
+ say "swap $index: { $S.substr($index, 1) } <-> { $S.substr($index + $O, 1) } == $S" if $verbose;
+
+ ($S.substr-rw($index,1), $S.substr-rw($index + $O,1) ) =
+ ($S.substr($index + $O, 1), $S.substr($index, 1));
+}
+
+say $S;
diff --git a/challenge-070/arne-sommer/raku/ch-2.raku b/challenge-070/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..24b72afae0
--- /dev/null
+++ b/challenge-070/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,34 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $N where 2 <= $N <=5 = 3,
+ :$v, :$verbose = $v);
+
+my @sequence = (0,1,3,2);
+
+for 3 .. $N -> $level
+{
+ @sequence = generate2bgcs(@sequence, $level, $verbose);
+}
+
+say "[{ @sequence.join(", ") }]";
+
+sub generate2bgcs (@in, $level, $verbose)
+{
+ my @S1a = @in.map({ .fmt('%0' ~ ($level-1) ~ 'b') });
+ my @S2a = @S1a.reverse;
+ my @S1 = @S1a.map({ "0$_" });
+ my @S2 = @S2a.map({ "1$_" });
+ my @S3 = (@S1, @S2).flat;
+ my @out = @S3.map( *.parse-base(2) );
+
+ if $verbose
+ {
+ say ": a) S1 = [{ @S1a.join(", ") }]";
+ say ": b) S2 = [{ @S2a.join(", ") }]";
+ say ": c) S1 = [{ @S1.join(", ") }]";
+ say ": b) S2 = [{ @S2.join(", ") }]";
+ say ": e) S3 = [{ @S3.join(", ") }]";
+ say ": \$N=$level = [{ @out.join(", ") }]";
+ }
+ return @out;
+}
diff --git a/challenge-070/arne-sommer/raku/charswap b/challenge-070/arne-sommer/raku/charswap
new file mode 100755
index 0000000000..459d0da9af
--- /dev/null
+++ b/challenge-070/arne-sommer/raku/charswap
@@ -0,0 +1,18 @@
+#! /usr/bin/env raku
+
+subset PosInt of Int where * >= 1;
+
+unit sub MAIN (:$S is copy = 'perlandraku',
+ PosInt :$O = 4,
+ PosInt :$C where $C < $O && $C + $O <= $S.chars = 3,
+ :$v, :$verbose = $v);
+
+for 1 .. $C -> $index
+{
+ say "swap $index: { $S.substr($index, 1) } <-> { $S.substr($index + $O, 1) } == $S" if $verbose;
+
+ ($S.substr-rw($index,1), $S.substr-rw($index + $O,1) ) =
+ ($S.substr($index + $O, 1), $S.substr($index, 1));
+}
+
+say $S;
diff --git a/challenge-070/arne-sommer/raku/charswap-mod b/challenge-070/arne-sommer/raku/charswap-mod
new file mode 100755
index 0000000000..05f090bcae
--- /dev/null
+++ b/challenge-070/arne-sommer/raku/charswap-mod
@@ -0,0 +1,25 @@
+#! /usr/bin/env raku
+
+subset PosInt of Int where * >= 1;
+
+unit sub MAIN (:$S = 'perlandraku',
+ PosInt :$O = 4,
+ PosInt :$C where $C < $O && $C + $O <= $S.chars = 3,
+ :$v, :$verbose = $v);
+
+my @S = $S.comb;
+my $N = $S.chars;
+
+for 1 .. $C -> $index
+{
+ say "swap $index: { @S[$index % $N] } <-> { @S[ ($index + $O) % $N ] } == { @S.join }" if $verbose;
+
+ swap(@S[$index % $N], @S[ ($index + $O) % $N ]);
+}
+
+say @S.join;
+
+sub swap ($a is rw, $b is rw)
+{
+ ($a, $b) = ($b, $a);
+}
diff --git a/challenge-070/arne-sommer/raku/charswap-node b/challenge-070/arne-sommer/raku/charswap-node
new file mode 100755
index 0000000000..f7768133fc
--- /dev/null
+++ b/challenge-070/arne-sommer/raku/charswap-node
@@ -0,0 +1,38 @@
+#! /usr/bin/env node
+
+var S = process.argv[2] || 'perlandraku';
+var N = S.length;
+var O = process.argv[3] || 4;
+var C = process.argv[4] || 3;
+
+let die = (message) => {
+ console.log(message);
+ process.kill(process.pid);
+};
+
+var OO = parseInt(O);
+
+if (OO != O || O < 1)
+ die('O: Integer >= 1 only');
+
+var CC = parseInt(C);
+
+if (CC != C || C < 1)
+ die('C: Integer >= 1 only');
+
+if (C >= O)
+ die('C: Must be < O');
+
+if (CC + OO > N)
+ die('C + O: Must be <= N');
+
+for (index = 1; index <= CC; index++)
+{
+ S = S.slice(0, index)
+ + S.charAt(index + OO)
+ + S.slice(index +1, index + OO)
+ + S.charAt(index)
+ + S.slice(index + OO +1);
+}
+
+console.log(S);
diff --git a/challenge-070/arne-sommer/raku/charswap-sans-mod b/challenge-070/arne-sommer/raku/charswap-sans-mod
new file mode 100755
index 0000000000..899fe610bc
--- /dev/null
+++ b/challenge-070/arne-sommer/raku/charswap-sans-mod
@@ -0,0 +1,24 @@
+#! /usr/bin/env raku
+
+subset PosInt of Int where * >= 1;
+
+unit sub MAIN (:$S = 'perlandraku',
+ PosInt :$O = 4,
+ PosInt :$C where $C < $O && $C + $O <= $S.chars = 3,
+ :$v, :$verbose = $v);
+
+my @S = $S.comb;
+
+for 1 .. $C