aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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-2.pl3
-rw-r--r--challenge-070/walt-mankowski/python/ch-2.py4
5 files changed, 73 insertions, 5 deletions
diff --git a/challenge-070/walt-mankowski/c/Makefile b/challenge-070/walt-mankowski/c/Makefile
new file mode 100644
index 0000000000..5de1bf4d65
--- /dev/null
+++ b/challenge-070/walt-mankowski/c/Makefile
@@ -0,0 +1,23 @@
+C = /usr/bin/cc
+INCLDIRS =
+LIBDIRS =
+LIBS =
+CFLAGS = -std=gnu99 -Wall -O3 $(INCLDIRS)
+OBJECTS1 = ch-1.o
+OBJECTS2 = ch-2.o
+
+all: ch-1 ch-2
+
+%.o: %.c
+ $(C) $(CFLAGS) -c $<
+
+ch-1: $(OBJECTS1)
+ $(C) -o $@ $(OBJECTS1) $(LIBDIRS) $(LIBS)
+
+ch-2: $(OBJECTS2)
+ $(C) -o $@ $(OBJECTS2) $(LIBDIRS) $(LIBS)
+
+clean:
+ rm -f *~
+ rm -f *.o
+ rm -f ch-1 ch-2
diff --git a/challenge-070/walt-mankowski/c/ch-1.c b/challenge-070/walt-mankowski/c/ch-1.c
new file mode 100644
index 0000000000..f59eafed0a
--- /dev/null
+++ b/challenge-070/walt-mankowski/c/ch-1.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+int main(int argc, char *argv[]) {
+ const char *s = argv[1];
+ int c = atoi(argv[2]);
+ int o = atoi(argv[3]);
+ int n = strlen(s);
+
+ char *t = strdup(s);
+ for (int i = 1; i <= c; i++) {
+ char tmp = t[i % n];
+ t[i % n] = t[(i+o) % n];
+ t[(i+o) % n] = tmp;
+ }
+
+ puts(t);
+}
diff --git a/challenge-070/walt-mankowski/c/ch-2.c b/challenge-070/walt-mankowski/c/ch-2.c
new file mode 100644
index 0000000000..c7b4a59ab7
--- /dev/null
+++ b/challenge-070/walt-mankowski/c/ch-2.c
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+void init(int *S) {
+ S[0] = 0;
+ S[1] = 1;
+ S[2] = 3;
+ S[3] = 2;
+}
+
+void gray_code(int n, int *S) {
+ int offset = 1 << (n-1);
+ for (int i = 0; i < offset; i++)
+ S[i + offset] = S[offset-i-1] + offset;
+}
+
+int main(int argc, char *argv[]) {
+ int n = atoi(argv[1]);
+ size_t len = 1 << n;
+ int *S = calloc(len, sizeof(int));
+ init(S);
+
+ for (int i = 3; i <= n; i++)
+ gray_code(i, S);
+
+ for (int i = 0; i < len; i++)
+ printf("%d ", S[i]);
+ printf("\n");
+}
diff --git a/challenge-070/walt-mankowski/perl/ch-2.pl b/challenge-070/walt-mankowski/perl/ch-2.pl
index 98d26781f5..3d261acfc4 100644
--- a/challenge-070/walt-mankowski/perl/ch-2.pl
+++ b/challenge-070/walt-mankowski/perl/ch-2.pl
@@ -55,6 +55,5 @@ for my $i (3..$n) {
say "@S";
sub gray_code($n, @S) {
- my @S2 = map { "1$_" } reverse map { sprintf "%.*b", $n-1, $_ } @S;
- return @S, map { eval "0b$_" } @S2;
+ return @S, reverse map { 2**($n-1) + $_ } @S;
}
diff --git a/challenge-070/walt-mankowski/python/ch-2.py b/challenge-070/walt-mankowski/python/ch-2.py
index be0f8ac2d3..bb052aa981 100644
--- a/challenge-070/walt-mankowski/python/ch-2.py
+++ b/challenge-070/walt-mankowski/python/ch-2.py
@@ -4,9 +4,7 @@ n = int(argv[1])
S = [0, 1, 3, 2]
def gray_code(n, S):
- fmt = f"0{n-1}b"
- S2 = [eval(f"0b1{x}") for x in [f"{x:{fmt}}" for x in S][::-1]]
- return S + S2
+ return S + [2**(n-1) + x for x in S][::-1]
for i in range(3, n+1):
S = gray_code(i, S)