aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWalt Mankowski <waltman@pobox.com>2020-07-20 21:11:23 -0400
committerWalt Mankowski <waltman@pobox.com>2020-07-20 21:11:23 -0400
commit5ab4a89123407a37fc8c78c8e6697d6c088b418a (patch)
tree5df7ea0fea7c447b5aa5212e3e11be4ce7862938
parent0461d18d6e324d7a53c2eca9af7c287b48dc23a5 (diff)
downloadperlweeklychallenge-club-5ab4a89123407a37fc8c78c8e6697d6c088b418a.tar.gz
perlweeklychallenge-club-5ab4a89123407a37fc8c78c8e6697d6c088b418a.tar.bz2
perlweeklychallenge-club-5ab4a89123407a37fc8c78c8e6697d6c088b418a.zip
perl code for challenge 70 task 2
-rw-r--r--challenge-070/walt-mankowski/perl/ch-2.pl60
1 files changed, 60 insertions, 0 deletions
diff --git a/challenge-070/walt-mankowski/perl/ch-2.pl b/challenge-070/walt-mankowski/perl/ch-2.pl
new file mode 100644
index 0000000000..c908d9b6b1
--- /dev/null
+++ b/challenge-070/walt-mankowski/perl/ch-2.pl
@@ -0,0 +1,60 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use feature qw(:5.32);
+use experimental qw(signatures);
+
+# TASK #2 › Gray Code Sequence
+# Submitted by: Mohammad S Anwar
+#
+# You are given an integer 2 <= $N <= 5.
+#
+# Write a script to generate $N-bit gray code sequence.
+#
+# 2-bit Gray Code Sequence
+#
+# [0, 1, 3, 2]
+#
+# To generate the 3-bit Gray code sequence from the 2-bit Gray code
+# sequence, follow the step below:
+#
+# 2-bit Gray Code sequence
+# [0, 1, 3, 2]
+#
+# Binary form of the sequence
+# a) S1 = [00, 01, 11, 10]
+#
+# Reverse of S1
+# b) S2 = [10, 11, 01, 00]
+#
+# Prefix all entries of S1 with '0'
+# c) S1 = [000, 001, 011, 010]
+#
+# Prefix all entries of S2 with '1'
+# d) S2 = [110, 111, 101, 100]
+#
+# Concatenate S1 and S2 gives 3-bit Gray Code sequence
+# e) [000, 001, 011, 010, 110, 111, 101, 100]
+#
+# 3-bit Gray Code sequence
+# [0, 1, 3, 2, 6, 7, 5, 4]
+#
+# Example
+#
+# Input: $N = 4
+#
+# Output: [0, 1, 3, 2, 6, 7, 5, 4, 12, 13, 15, 14, 10, 11, 9, 8]
+
+my $n = $ARGV[0];
+my @S = (0, 1, 3, 2);
+
+for my $i (3..$n) {
+ @S = gray_code($i, @S);
+}
+
+say "@S";
+
+sub gray_code($n, @S) {
+ my @S2 = map { "1$_" } reverse map { scalar sprintf "%.*b", $n-1, $_ } @S;
+ return @S, map { eval "0b$_" } @S2;
+}