From dc7fcb44042ec7f1c12f7482b9b8e59649c181c9 Mon Sep 17 00:00:00 2001 From: Duy Truong Date: Sat, 2 Dec 2023 09:24:51 -0800 Subject: [PATCH] simplified d2 and add python --- 02/part1.c | 15 +-------------- 02/part1.py | 7 +++++++ 02/part2.c | 24 ++++++------------------ 02/part2.py | 4 ++++ 4 files changed, 18 insertions(+), 32 deletions(-) create mode 100644 02/part1.py create mode 100644 02/part2.py diff --git a/02/part1.c b/02/part1.c index 87b895d..d0de944 100644 --- a/02/part1.c +++ b/02/part1.c @@ -2,19 +2,6 @@ #include #define MAX_LENGTH 165 -char* skip_color(char* c) { - switch (*c) { - case 'r': - return c + 3; - case 'g': - return c + 5; - case 'b': - return c + 4; - } - abort(); -} - - int main(void) { char buf[MAX_LENGTH]; int game_num, cubes, sum; @@ -32,7 +19,7 @@ int main(void) { (*c == 'b' && cubes > 14)) { game_num = 0; } - c = skip_color(c); + for (; *c >= 'a' && *c <= 'z'; c++); } sum += game_num; } diff --git a/02/part1.py b/02/part1.py new file mode 100644 index 0000000..204af81 --- /dev/null +++ b/02/part1.py @@ -0,0 +1,7 @@ +import re, sys +print(sum( + int(re.search("[0-9]+", line).group()) + for line in sys.stdin.readlines() + if all(int(r) <= 12 for r in re.findall(r"[0-9]+(?= red)", line)) + and all(int(g) <= 13 for g in re.findall(r"[0-9]+(?= green)", line)) + and all(int(b) <= 14 for b in re.findall(r"[0-9]+(?= blue)", line)))) diff --git a/02/part2.c b/02/part2.c index 2c32b18..eab104b 100644 --- a/02/part2.c +++ b/02/part2.c @@ -2,35 +2,23 @@ #include #define MAX_LENGTH 165 -char* skip_color(char* c) { - switch (*c) { - case 'r': - return c + 3; - case 'g': - return c + 5; - case 'b': - return c + 4; - } - abort(); -} - int main(void) { char buf[MAX_LENGTH]; - int game_num, color_num, sum, max_r, max_g, max_b; + int color_num, sum, max_r, max_g, max_b; sum = 0; while (fgets(buf, MAX_LENGTH, stdin)) { - char* c = buf; - game_num = strtol(c + 5, &c, 10); // +5 skips the "Game " - max_r = max_g = max_b = 0; + char* c = buf + 5; // +5 skips the "Game " + for (; *c != ':'; c++); + max_r = max_g = max_b = 0; while (*c != '\n') { - color_num = strtol(c + 2, &c, 10); // +2 skips ": ", ", ", or "; " + color_num = strtol(c + 2, &c, 10); // +2 skips ": ", ", " or "; " c++; // +1 skips the space max_r = (*c == 'r' && color_num > max_r) ? color_num : max_r; max_g = (*c == 'g' && color_num > max_g) ? color_num : max_g; max_b = (*c == 'b' && color_num > max_b) ? color_num : max_b; - c = skip_color(c); + for (; *c >= 'a' && *c <= 'z'; c++); } sum += max_r * max_g * max_b; } diff --git a/02/part2.py b/02/part2.py new file mode 100644 index 0000000..7214df3 --- /dev/null +++ b/02/part2.py @@ -0,0 +1,4 @@ +import math, re, sys +print(sum(math.prod(max(int(n) for n in re.findall(f"[0-9]+(?= {color})", line)) + for color in ("red", "green", "blue")) + for line in open("input.txt", "rt").readlines()))