diff options
| -rw-r--r-- | challenge-070/walt-mankowski/c/Makefile | 23 | ||||
| -rw-r--r-- | challenge-070/walt-mankowski/c/ch-1.c | 19 | ||||
| -rw-r--r-- | challenge-070/walt-mankowski/c/ch-2.c | 29 | ||||
| -rw-r--r-- | challenge-070/walt-mankowski/perl/ch-2.pl | 3 | ||||
| -rw-r--r-- | challenge-070/walt-mankowski/python/ch-2.py | 4 |
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) |
