diff options
author | Adam Spragg <adam@spra.gg> | 2023-01-15 10:36:48 +0000 |
---|---|---|
committer | Adam Spragg <adam@spra.gg> | 2023-01-15 10:36:48 +0000 |
commit | 8528013fb10ae7aedb6a40f5ece5ee08eb42e9df (patch) | |
tree | c34f91708adef795a29a092395c49717940b246b | |
parent | 3dd30be057332cd764ee79a26673a775336322eb (diff) |
Puzzle 4: Consolidate 4a/4b programs into `4` with `-p` option
Like the later puzzles
-rw-r--r-- | 4.c (renamed from 4a.c) | 42 | ||||
-rw-r--r-- | 4b.c | 51 | ||||
-rw-r--r-- | makefile | 2 |
3 files changed, 36 insertions, 59 deletions
@@ -1,6 +1,7 @@ #include <stdio.h> #include <stdlib.h> +#include <unistd.h> char * @@ -22,10 +23,21 @@ getsect(int * dest, char * pch, char expect) int -main() +main(int argc, char ** argv) { char buf[BUFSIZ]; - int overlaps = 0; + int part = 1, i, overlaps = 0; + + while ((i = getopt(argc, argv, "p:")) != -1) { + switch (i) { + case 'p': + part = atoi(optarg); + break; + + default: + return -1; + } + } while (fgets(buf, sizeof(buf), stdin)) { int n[4]; @@ -39,14 +51,30 @@ main() fprintf(stderr, "Unexpected line: %s\n", buf); return -1; } - if ((n[2] >= n[0] && n[3] <= n[1]) - || (n[0] >= n[2] && n[1] <= n[3])) - { - ++overlaps; + switch (part) { + case 1: + if ((n[2] >= n[0] && n[3] <= n[1]) + || (n[0] >= n[2] && n[1] <= n[3])) + { + ++overlaps; + } + break; + + case 2: + if (!(n[3] < n[0] || n[2] > n[1])) { + ++overlaps; + } + break; + + default: + fprintf(stderr, "Unexpected puzzle part %d\n", part); + return -1; } } - printf("Overlaps: %d\n", overlaps); + printf("%s overlaps: %d\n", + part == 1 ? "Full" : "Partial", + overlaps); return 0; } @@ -1,51 +0,0 @@ - -#include <stdio.h> -#include <stdlib.h> - - -char * -getsect(int * dest, char * pch, char expect) -{ - char * end; - - if (!pch) - return NULL; - *dest = strtol(pch, &end, 10); - if (*dest == 0 && end == pch) - return NULL; - if (*end != expect) - return NULL; - if (expect) - ++end; - return end; -} - - -int -main() -{ - char buf[BUFSIZ]; - int overlaps = 0; - - while (fgets(buf, sizeof(buf), stdin)) { - int n[4]; - char * pbuf; - - pbuf = getsect(&n[0], buf, '-'); - pbuf = getsect(&n[1], pbuf, ','); - pbuf = getsect(&n[2], pbuf, '-'); - pbuf = getsect(&n[3], pbuf, '\n'); - if (!pbuf) { - fprintf(stderr, "Unexpected line: %s\n", buf); - return -1; - } - if (!(n[3] < n[0] || n[2] > n[1])) { - ++overlaps; - } - } - - printf("Overlaps: %d\n", overlaps); - - return 0; -} - @@ -5,7 +5,7 @@ all: bin \ bin/1 \ bin/2 \ bin/3 \ - bin/4a bin/4b \ + bin/4 \ bin/5 \ bin/6 \ bin/7 \ |