diff options
| author | Abigail <abigail@abigail.be> | 2021-04-22 20:02:42 +0200 |
|---|---|---|
| committer | Abigail <abigail@abigail.be> | 2021-04-22 20:02:42 +0200 |
| commit | 105b08ecd006e8f7e5e6b23c2d4b15ab0e449725 (patch) | |
| tree | dca43df39e7da27fdea6104ff04922bbc8c6e991 | |
| parent | afa7e43f4969e15ad2b07540e4fadf8e72b691dc (diff) | |
| download | perlweeklychallenge-club-105b08ecd006e8f7e5e6b23c2d4b15ab0e449725.tar.gz perlweeklychallenge-club-105b08ecd006e8f7e5e6b23c2d4b15ab0e449725.tar.bz2 perlweeklychallenge-club-105b08ecd006e8f7e5e6b23c2d4b15ab0e449725.zip | |
C solution for week 109, part 2
| -rw-r--r-- | challenge-109/abigail/README.md | 2 | ||||
| -rw-r--r-- | challenge-109/abigail/c/ch-2.c | 87 |
2 files changed, 89 insertions, 0 deletions
diff --git a/challenge-109/abigail/README.md b/challenge-109/abigail/README.md index 3928e7302c..815fe7fd8e 100644 --- a/challenge-109/abigail/README.md +++ b/challenge-109/abigail/README.md @@ -92,6 +92,8 @@ Output: ### Solutions * [AWK](awk/ch-2.awk) +* [Bash](bash/ch-2.sh) +* [C](c/ch-2.c) * [Perl](perl/ch-2.pl) ### Blog diff --git a/challenge-109/abigail/c/ch-2.c b/challenge-109/abigail/c/ch-2.c new file mode 100644 index 0000000000..19d95ad9f5 --- /dev/null +++ b/challenge-109/abigail/c/ch-2.c @@ -0,0 +1,87 @@ +# include <stdlib.h> +# include <stdio.h> +# include <string.h> + +/* + * See ../README.md + */ + +/* + * Run as: cc -o ch-2.o ch-2.c; ./ch-2.o < input-file + */ + +# define SIZE 7 +typedef int number; + +int main (void) { + number * numbers; + char * line = NULL; + size_t len = 0; + + if ((numbers = (number *) malloc (SIZE * sizeof (number))) == NULL) { + perror ("Malloc numbers failed"); + exit (1); + } + + while (getline (&line, &len, stdin) != -1) { + if (sscanf (line, "%d %d %d %d %d %d %d", &numbers [0], + &numbers [1], &numbers [2], &numbers [3], + &numbers [4], &numbers [5], &numbers [6]) != SIZE) { + continue; + } + + for (size_t a_i = 0; a_i < SIZE; a_i ++) { + for (size_t b_i = 0; b_i < SIZE; b_i ++) { + if (a_i == b_i) { + continue; + } + number target = numbers [a_i] + numbers [b_i]; + for (size_t c_i = 0; c_i < SIZE; c_i ++) { + if (a_i == c_i || b_i == c_i) { + continue; + } + for (size_t d_i = 0; d_i < SIZE; d_i ++) { + if (a_i == d_i || b_i == d_i || c_i == d_i || + target != numbers [b_i] + numbers [c_i] + + numbers [d_i]) { + continue; + } + for (size_t e_i = 0; e_i < SIZE; e_i ++) { + if (a_i == e_i || b_i == e_i || + c_i == e_i || d_i == e_i) { + continue; + } + for (size_t f_i = 0; f_i < SIZE; f_i ++) { + if (a_i == f_i || b_i == f_i || + c_i == f_i || d_i == f_i || + e_i == f_i || + target != numbers [d_i] + numbers [e_i] + + numbers [f_i]) { + continue; + } + for (size_t g_i = 0; g_i < SIZE; g_i ++) { + if (a_i == g_i || b_i == g_i || + c_i == g_i || d_i == g_i || + e_i == g_i || f_i == g_i || + target != numbers [f_i] + + numbers [g_i]) { + continue; + } + printf ("%d %d %d %d %d %d %d\n", + numbers [a_i], numbers [b_i], + numbers [c_i], numbers [d_i], + numbers [e_i], numbers [f_i], + numbers [g_i]); + } + } + } + } + } + } + } + } + + free (line); + + return (0); +} |
