diff options
| author | Orfeas <38209077+0xfea5@users.noreply.github.com> | 2023-12-03 07:14:20 +0200 |
|---|---|---|
| committer | Orfeas <38209077+0xfea5@users.noreply.github.com> | 2025-10-28 23:20:45 +0200 |
| commit | cf6612350766ab6fc196cfbc860853fb18dae4ec (patch) | |
| tree | d31dfaeb7d8776788b9f3b48fd1a3b808934fd6b | |
| parent | update init.sh (diff) | |
| download | aoc23-cf6612350766ab6fc196cfbc860853fb18dae4ec.tar.gz aoc23-cf6612350766ab6fc196cfbc860853fb18dae4ec.zip | |
day2 + example files
| -rw-r--r-- | day01/example1.txt | 4 | ||||
| -rw-r--r-- | day01/example2.txt | 7 | ||||
| -rw-r--r-- | day02/example.txt | 5 | ||||
| -rw-r--r-- | day02/input.txt | 100 | ||||
| -rw-r--r-- | day02/solution.zig | 161 | ||||
| -rwxr-xr-x | init.sh | 1 |
6 files changed, 278 insertions, 0 deletions
diff --git a/day01/example1.txt b/day01/example1.txt new file mode 100644 index 0000000..7bbc69a --- /dev/null +++ b/day01/example1.txt | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | 1abc2 | ||
| 2 | pqr3stu8vwx | ||
| 3 | a1b2c3d4e5f | ||
| 4 | treb7uchet | ||
diff --git a/day01/example2.txt b/day01/example2.txt new file mode 100644 index 0000000..41aa89c --- /dev/null +++ b/day01/example2.txt | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | two1nine | ||
| 2 | eightwothree | ||
| 3 | abcone2threexyz | ||
| 4 | xtwone3four | ||
| 5 | 4nineeightseven2 | ||
| 6 | zoneight234 | ||
| 7 | 7pqrstsixteen | ||
diff --git a/day02/example.txt b/day02/example.txt new file mode 100644 index 0000000..295c36d --- /dev/null +++ b/day02/example.txt | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green | ||
| 2 | Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue | ||
| 3 | Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red | ||
| 4 | Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red | ||
| 5 | Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green | ||
diff --git a/day02/input.txt b/day02/input.txt new file mode 100644 index 0000000..3cf08f7 --- /dev/null +++ b/day02/input.txt | |||
| @@ -0,0 +1,100 @@ | |||
| 1 | Game 1: 4 red, 5 blue, 9 green; 7 green, 7 blue, 3 red; 16 red, 7 blue, 3 green; 11 green, 11 blue, 6 red; 12 red, 14 blue | ||
| 2 | Game 2: 12 blue, 11 green, 3 red; 6 blue, 5 green, 7 red; 5 red, 11 blue; 2 blue, 8 green | ||
| 3 | Game 3: 8 blue, 5 green, 2 red; 5 blue, 5 green, 7 red; 7 blue, 1 green, 7 red; 8 green, 14 blue, 7 red; 8 green, 14 blue; 8 blue, 2 green, 8 red | ||
| 4 | Game 4: 3 red, 14 blue, 15 green; 1 red, 11 green, 14 blue; 14 green, 17 blue | ||
| 5 | Game 5: 11 green, 2 red, 10 blue; 16 green, 8 blue; 2 blue, 6 green, 1 red; 14 blue, 2 red, 16 green; 3 blue, 18 green; 1 red, 10 blue, 3 green | ||
| 6 | Game 6: 2 green, 5 red, 17 blue; 12 green, 13 blue, 6 red; 8 red, 9 blue, 7 green | ||
| 7 | Game 7: 2 blue, 18 green; 4 green, 1 red, 1 blue; 4 blue, 19 green | ||
| 8 | Game 8: 6 green, 7 blue; 9 green, 6 blue; 7 blue, 1 red, 3 green | ||
| 9 | Game 9: 4 blue, 12 green, 3 red; 4 green, 3 blue, 3 red; 3 green, 2 red, 3 blue; 1 green, 2 red, 3 blue; 15 red, 10 green, 4 blue; 3 blue, 1 red, 6 green | ||
| 10 | Game 10: 11 blue, 6 green, 6 red; 15 green, 1 blue; 1 red, 6 blue, 4 green | ||
| 11 | Game 11: 9 blue, 1 red, 6 green; 6 red, 1 green; 10 blue, 3 green, 6 red | ||
| 12 | Game 12: 1 blue, 10 red, 1 green; 4 blue, 4 red; 8 red, 3 blue, 1 green; 3 red, 2 green | ||
| 13 | Game 13: 3 red, 11 green, 18 blue; 11 green, 1 red, 3 blue; 12 blue, 5 red, 2 green; 16 blue, 8 red, 5 green; 8 red, 12 blue, 19 green; 17 blue, 4 green, 6 red | ||
| 14 | Game 14: 8 red, 4 blue; 1 green, 2 blue, 13 red; 1 green, 1 blue, 17 red; 1 green, 13 red | ||
| 15 | Game 15: 4 red, 3 blue, 6 green; 4 blue, 3 red, 3 green; 3 green, 6 red, 3 blue; 6 red, 5 blue, 2 green; 6 green, 1 blue; 4 green, 3 red, 2 blue | ||
| 16 | Game 16: 11 green; 3 green, 1 blue, 1 red; 12 green, 3 blue, 1 red; 1 red, 1 green; 1 red, 3 blue; 2 green, 1 blue, 1 red | ||
| 17 | Game 17: 12 red, 14 blue, 10 green; 2 red, 6 green, 6 blue; 10 blue, 2 green, 3 red; 1 red, 13 blue, 2 green; 9 green, 16 red, 9 blue | ||
| 18 | Game 18: 15 red, 8 blue; 16 red, 12 blue; 5 blue, 4 green, 6 red; 8 red, 4 green, 3 blue; 7 red, 5 blue, 2 green; 1 blue, 2 green, 14 red | ||
| 19 | Game 19: 3 red, 13 blue, 2 green; 8 red, 14 blue; 9 blue, 3 green; 9 blue, 1 green, 7 red; 8 red, 1 green; 8 red, 14 blue, 2 green | ||
| 20 | Game 20: 6 green, 10 blue, 5 red; 8 green, 9 blue, 7 red; 2 red, 2 green, 7 blue; 7 red, 16 green, 12 blue; 15 green, 3 red; 12 green, 3 red, 6 blue | ||
| 21 | Game 21: 2 green, 7 blue; 7 blue, 6 red; 6 blue, 2 red, 1 green; 11 blue, 1 red, 3 green | ||
| 22 | Game 22: 5 red, 1 blue; 1 green, 2 red; 1 blue, 1 green, 5 red; 1 green, 2 blue, 4 red; 1 green, 3 red, 1 blue; 5 red, 3 blue, 1 green | ||
| 23 | Game 23: 12 green, 7 red; 4 blue, 15 red, 2 green; 2 green, 16 red, 2 blue; 5 red, 10 green, 1 blue; 1 red, 4 green, 7 blue; 9 blue, 4 green, 12 red | ||
| 24 | Game 24: 7 blue, 11 red, 4 green; 6 blue, 3 green; 1 blue, 14 red, 1 green; 2 blue, 4 green, 15 red; 7 red, 4 blue; 7 red, 2 blue, 3 green | ||
| 25 | Game 25: 6 green, 10 red, 12 blue; 3 red, 16 blue; 10 blue, 10 red, 1 green; 3 red, 2 green, 13 blue; 2 green, 11 blue, 6 red | ||
| 26 | Game 26: 6 red, 4 blue, 10 green; 3 blue, 1 green, 4 red; 5 blue; 11 blue, 9 green, 7 red | ||
| 27 | Game 27: 1 red, 14 green, 9 blue; 13 green, 8 blue, 8 red; 7 red, 8 green, 6 blue; 7 blue, 3 red, 4 green; 18 green, 3 red | ||
| 28 | Game 28: 2 red, 1 blue, 1 green; 1 blue; 1 red, 6 green, 2 blue; 5 green, 1 blue; 6 green; 2 green, 5 blue, 2 red | ||
| 29 | Game 29: 2 blue, 2 green, 7 red; 3 red, 5 blue; 7 green, 14 blue, 3 red | ||
| 30 | Game 30: 5 red, 11 green, 8 blue; 1 blue, 1 red, 15 green; 18 green, 12 blue; 5 red, 6 blue, 16 green; 12 blue, 1 red, 5 green | ||
| 31 | Game 31: 1 blue, 7 red, 2 green; 8 green, 1 blue; 3 blue, 13 green, 2 red; 3 blue, 7 red | ||
| 32 | Game 32: 10 green, 7 blue, 4 red; 18 green, 4 blue, 7 red; 5 blue, 6 red; 5 red, 5 blue, 1 green; 12 blue, 5 green, 8 red; 1 red, 6 green, 13 blue | ||
| 33 | Game 33: 1 green, 2 red, 18 blue; 12 blue, 8 green; 8 green, 1 red, 16 blue; 10 green, 14 blue; 1 red, 3 blue, 8 green | ||
| 34 | Game 34: 4 red, 4 blue; 10 blue, 8 red; 2 green, 5 blue, 20 red | ||
| 35 | Game 35: 6 blue, 1 green, 4 red; 1 red, 2 blue, 2 green; 12 blue, 2 red; 11 blue, 1 green, 1 red; 2 blue; 2 red, 10 blue, 3 green | ||
| 36 | Game 36: 2 green, 9 blue, 11 red; 5 blue, 11 red; 1 green, 1 red, 9 blue; 8 blue, 2 green; 11 red, 4 blue, 1 green; 7 blue, 2 green, 5 red | ||
| 37 | Game 37: 10 blue, 5 green, 6 red; 5 red, 13 green, 10 blue; 1 green, 7 blue, 4 red; 10 green, 4 blue, 14 red; 13 green, 9 red, 1 blue | ||
| 38 | Game 38: 5 blue, 4 green, 4 red; 4 blue, 11 green; 4 green, 3 red; 6 green, 7 blue; 6 blue, 1 red, 2 green | ||
| 39 | Game 39: 8 blue, 1 green, 19 red; 15 red, 2 green, 7 blue; 1 green, 6 blue, 8 red; 16 red, 3 blue, 1 green | ||
| 40 | Game 40: 4 green, 1 blue; 1 red, 2 blue, 3 green; 4 green, 1 blue, 2 red; 2 green, 1 blue, 2 red; 2 green | ||
| 41 | Game 41: 3 red, 4 blue; 2 blue, 16 green; 2 red, 5 blue, 11 green; 13 green, 3 red, 6 blue; 3 blue, 19 green, 3 red; 5 green, 1 red, 3 blue | ||
| 42 | Game 42: 6 green; 13 green, 1 blue; 1 blue, 5 green, 1 red; 1 blue, 6 green, 1 red; 2 red, 2 green, 1 blue | ||
| 43 | Game 43: 8 green, 11 blue; 11 green, 12 blue; 1 blue, 5 red, 7 green; 1 blue, 11 green; 3 blue, 1 green | ||
| 44 | Game 44: 3 green, 18 red, 16 blue; 2 blue, 2 green, 14 red; 13 red, 4 green, 17 blue; 3 red, 9 blue, 8 green; 11 red, 1 blue; 5 blue, 3 red, 7 green | ||
| 45 | Game 45: 11 blue, 2 red; 8 green, 5 blue, 1 red; 14 blue, 5 green; 14 blue, 8 green; 10 blue, 11 green; 5 green, 1 red, 17 blue | ||
| 46 | Game 46: 3 red, 3 blue, 1 green; 2 green, 7 red, 4 blue; 2 red, 1 green, 2 blue; 9 red, 1 green | ||
| 47 | Game 47: 3 blue, 4 red, 2 green; 9 blue, 12 green, 11 red; 8 green, 19 red, 7 blue | ||
| 48 | Game 48: 1 green, 9 red; 7 green, 16 red, 1 blue; 2 blue, 2 red, 5 green; 19 red, 3 blue, 2 green | ||
| 49 | Game 49: 2 green, 17 blue, 18 red; 4 blue, 19 red, 11 green; 1 green, 5 blue, 15 red; 10 green, 6 red, 1 blue | ||
| 50 | Game 50: 4 green, 8 blue, 6 red; 1 red, 6 blue, 4 green; 6 red, 5 green, 10 blue; 7 blue, 6 red | ||
| 51 | Game 51: 2 green, 1 blue, 5 red; 13 blue, 10 green; 6 green, 1 red, 7 blue; 4 red, 3 green, 8 blue; 3 red, 9 blue, 4 green; 2 red, 12 blue, 8 green | ||
| 52 | Game 52: 1 blue, 4 green, 6 red; 6 green, 6 red, 10 blue; 4 green, 3 red, 5 blue; 3 blue, 2 green, 4 red; 6 green, 5 blue, 9 red; 9 red, 5 green, 8 blue | ||
| 53 | Game 53: 2 green, 6 blue, 6 red; 1 blue, 5 green, 13 red; 7 red, 5 blue, 1 green | ||
| 54 | Game 54: 5 green, 6 blue, 2 red; 1 blue, 3 green; 6 green; 1 red, 2 blue, 5 green; 5 blue, 5 green | ||
| 55 | Game 55: 9 blue, 15 green; 4 red, 1 green; 7 blue, 9 red, 11 green | ||
| 56 | Game 56: 7 red, 2 blue, 4 green; 2 blue, 6 red, 6 green; 8 red, 7 green; 6 green, 2 red; 3 blue, 2 green, 7 red | ||
| 57 | Game 57: 1 blue, 1 green, 1 red; 6 red, 2 green, 3 blue; 1 green; 3 blue, 8 red, 2 green | ||
| 58 | Game 58: 14 blue, 5 red, 14 green; 5 blue, 7 green, 7 red; 19 blue, 10 red, 14 green; 7 green, 5 blue, 10 red; 2 red, 12 green, 2 blue | ||
| 59 | Game 59: 1 red, 1 green, 1 blue; 10 blue; 3 blue, 1 green, 1 red | ||
| 60 | Game 60: 6 blue, 6 green; 5 blue; 4 blue, 3 green; 10 green, 1 red, 4 blue | ||
| 61 | Game 61: 2 green, 3 blue; 3 red, 3 blue; 2 red, 4 green | ||
| 62 | Game 62: 3 red, 6 green, 2 blue; 6 red, 5 blue, 2 green; 13 green, 9 blue | ||
| 63 | Game 63: 9 blue, 1 green; 14 blue, 12 red; 1 green, 6 red, 14 blue; 1 green, 2 red, 14 blue; 7 red, 18 blue, 1 green; 14 red, 2 blue | ||
| 64 | Game 64: 4 blue, 16 red, 4 green; 9 red, 4 green, 3 blue; 2 red, 2 blue, 6 green; 2 blue, 2 green, 12 red | ||
| 65 | Game 65: 2 red, 2 blue; 4 red, 9 green, 5 blue; 1 blue; 3 green, 1 red; 1 green, 2 blue, 8 red; 1 blue, 8 green, 3 red | ||
| 66 | Game 66: 1 red, 3 green, 4 blue; 3 green, 5 red, 14 blue; 1 blue, 3 red, 2 green; 4 blue, 1 green, 2 red; 8 red, 2 green, 13 blue | ||
| 67 | Game 67: 1 green, 1 red, 4 blue; 2 blue, 2 green, 1 red; 3 blue, 2 green, 1 red | ||
| 68 | Game 68: 1 red, 2 blue; 5 green, 2 red, 2 blue; 7 red, 7 green, 2 blue | ||
| 69 | Game 69: 15 red, 12 green, 1 blue; 3 green, 3 blue, 6 red; 9 blue, 16 green; 11 blue, 18 green, 7 red | ||
| 70 | Game 70: 4 blue, 1 green, 6 red; 11 red, 3 green, 4 blue; 3 blue, 1 red, 1 green; 1 green, 11 red; 3 red, 4 blue, 1 green; 3 red, 4 blue, 2 green | ||
| 71 | Game 71: 11 blue, 1 red; 10 blue, 10 green; 4 green, 11 blue; 5 green, 1 red, 6 blue; 6 green, 2 blue; 4 blue, 3 green | ||
| 72 | Game 72: 1 red, 7 blue; 3 red, 3 green, 7 blue; 3 red, 3 green, 10 blue; 5 green, 7 blue | ||
| 73 | Game 73: 2 blue, 1 red; 6 blue, 8 red, 18 green; 4 blue, 18 green, 1 red; 1 red, 5 blue, 2 green; 18 green, 8 red, 8 blue | ||
| 74 | Game 74: 19 green, 9 blue, 14 red; 11 green, 8 blue, 14 red; 2 green, 17 blue, 14 red; 12 green, 12 blue, 7 red; 6 red, 5 blue, 10 green; 4 blue, 19 green, 15 red | ||
| 75 | Game 75: 12 red, 3 green, 4 blue; 7 red, 6 green, 2 blue; 7 green, 3 red, 7 blue; 16 red, 3 green; 10 blue, 6 red, 3 green | ||
| 76 | Game 76: 1 red, 11 blue, 4 green; 11 green, 3 blue, 3 red; 2 red, 14 green, 7 blue; 3 red, 6 blue, 9 green; 9 blue, 14 green; 1 red, 9 green, 3 blue | ||
| 77 | Game 77: 10 blue, 2 red, 5 green; 5 green, 3 red, 12 blue; 3 green, 8 red, 4 blue; 5 blue, 12 red, 7 green; 18 blue, 7 red; 8 green, 8 blue, 13 red | ||
| 78 | Game 78: 9 red, 11 green, 4 blue; 4 blue, 14 green; 2 red, 11 green, 6 blue; 2 blue, 5 red, 13 green; 6 red, 2 green | ||
| 79 | Game 79: 2 green, 3 blue, 1 red; 6 green, 2 blue; 1 blue, 4 green | ||
| 80 | Game 80: 2 green, 4 red; 1 green, 6 blue, 2 red; 8 blue, 3 red; 6 blue, 1 green; 6 red, 2 blue; 2 green, 2 blue | ||
| 81 | Game 81: 5 red, 3 blue, 6 green; 3 blue, 17 green, 5 red; 3 red, 2 blue, 14 green; 1 blue, 2 red, 8 green | ||
| 82 | Game 82: 16 green, 10 blue; 6 blue, 4 green, 2 red; 3 blue, 1 red, 16 green; 1 red, 7 green, 11 blue | ||
| 83 | Game 83: 8 green, 7 blue; 1 blue, 6 green; 6 blue, 1 red, 3 green; 8 green, 1 red; 1 green, 5 blue | ||
| 84 | Game 84: 9 blue, 6 red; 5 red, 7 green, 3 blue; 4 blue, 13 green, 2 red; 10 red, 11 green, 6 blue | ||
| 85 | Game 85: 4 red, 10 blue; 8 green, 1 blue, 1 red; 9 blue, 6 green; 1 red, 4 green; 3 green, 8 blue | ||
| 86 | Game 86: 7 blue, 9 green; 7 blue, 1 red, 4 green; 4 green, 13 blue | ||
| 87 | Game 87: 12 red, 9 green, 2 blue; 8 green, 7 red; 11 red, 11 green; 4 blue, 8 green | ||
| 88 | Game 88: 8 blue, 7 green, 7 red; 5 blue, 9 green; 3 red, 7 green, 6 blue; 1 green, 7 blue, 7 red | ||
| 89 | Game 89: 7 green, 9 red, 7 blue; 1 green, 18 red; 3 red, 2 blue, 2 green; 15 red, 4 green, 6 blue | ||
| 90 | Game 90: 4 blue, 5 red, 4 green; 4 green, 6 blue, 3 red; 4 green, 6 blue, 2 red; 8 blue, 4 red, 4 green; 3 blue, 2 red | ||
| 91 | Game 91: 7 green, 5 red, 2 blue; 12 green, 2 blue, 6 red; 6 green, 1 blue; 1 green, 1 blue; 13 green, 1 red, 3 blue; 5 red, 1 blue, 4 green | ||
| 92 | Game 92: 2 green; 1 red, 2 blue, 2 green; 2 red, 2 green, 2 blue; 2 blue, 7 red | ||
| 93 | Game 93: 8 red, 5 blue; 10 red, 4 blue; 3 red, 2 blue; 7 blue, 10 red, 1 green; 6 blue; 10 blue | ||
| 94 | Game 94: 2 blue, 4 green; 8 green, 9 blue; 2 green, 3 blue; 3 blue, 5 green; 9 blue, 1 red, 3 green; 6 blue, 6 green, 1 red | ||
| 95 | Game 95: 3 blue, 13 red, 10 green; 4 green, 17 blue, 12 red; 12 red, 10 green, 16 blue; 15 red, 14 green, 2 blue; 12 red, 1 blue, 15 green; 10 green, 13 blue, 19 red | ||
| 96 | Game 96: 5 green, 9 blue, 16 red; 17 red, 11 green, 9 blue; 10 blue, 13 green, 9 red; 10 blue, 7 red, 13 green; 3 red, 4 blue, 5 green | ||
| 97 | Game 97: 6 blue, 4 green, 6 red; 4 red, 13 green, 2 blue; 15 green, 2 red; 2 green, 2 red | ||
| 98 | Game 98: 10 blue, 13 red; 10 blue, 16 red, 4 green; 6 blue, 4 green, 14 red; 4 green, 1 blue, 11 red; 4 red, 4 green | ||
| 99 | Game 99: 1 red, 4 blue; 5 red, 8 blue; 3 blue, 1 green; 2 red, 6 blue; 8 blue, 2 green, 3 red | ||
| 100 | Game 100: 5 green, 1 red; 4 blue, 8 red, 4 green; 1 blue, 3 red, 15 green; 1 blue, 15 green, 1 red; 2 red, 13 green | ||
diff --git a/day02/solution.zig b/day02/solution.zig new file mode 100644 index 0000000..5e8d6f6 --- /dev/null +++ b/day02/solution.zig | |||
| @@ -0,0 +1,161 @@ | |||
| 1 | const std = @import("std"); | ||
| 2 | const print = std.debug.print; | ||
| 3 | const assert = std.debug.assert; | ||
| 4 | const ArrayList = std.ArrayList; | ||
| 5 | const mem = std.mem; | ||
| 6 | |||
| 7 | const fin = mem.trim(u8, @embedFile("./input.txt"), &std.ascii.whitespace); | ||
| 8 | var gpa = std.heap.GeneralPurposeAllocator(.{}){}; | ||
| 9 | const allocator = gpa.allocator(); | ||
| 10 | |||
| 11 | const Color = enum { | ||
| 12 | red, | ||
| 13 | green, | ||
| 14 | blue, | ||
| 15 | }; | ||
| 16 | |||
| 17 | const Ball = struct { | ||
| 18 | color: Color, | ||
| 19 | num: u64, | ||
| 20 | }; | ||
| 21 | |||
| 22 | const Set = struct { | ||
| 23 | red: u64, | ||
| 24 | green: u64, | ||
| 25 | blue: u64, | ||
| 26 | }; | ||
| 27 | |||
| 28 | const Game = struct { | ||
| 29 | var curGameID: u64 = 1; | ||
| 30 | id: u64, | ||
| 31 | sets: ArrayList(Set), | ||
| 32 | |||
| 33 | fn init(self: *@This()) !void { | ||
| 34 | self.id = curGameID; | ||
| 35 | self.sets = ArrayList(Set).init(allocator); | ||
| 36 | curGameID += 1; | ||
| 37 | } | ||
| 38 | |||
| 39 | fn deinit(self: *@This()) void { | ||
| 40 | self.sets.deinit(); | ||
| 41 | } | ||
| 42 | }; | ||
| 43 | |||
| 44 | pub fn parseBall(text: []const u8) Ball { | ||
| 45 | const trimmed = mem.trim(u8, text, &std.ascii.whitespace); | ||
| 46 | var splitBalls = mem.splitScalar(u8, trimmed, ' '); | ||
| 47 | |||
| 48 | const nballs = std.fmt.parseInt(u64, splitBalls.next() orelse unreachable, 10) catch unreachable; | ||
| 49 | var color: Color = undefined; | ||
| 50 | color = blk: { | ||
| 51 | const s = splitBalls.next() orelse unreachable; | ||
| 52 | |||
| 53 | if (mem.eql(u8, s, "red")) { | ||
| 54 | break :blk .red; | ||
| 55 | } | ||
| 56 | |||
| 57 | if (mem.eql(u8, s, "green")) { | ||
| 58 | break :blk .green; | ||
| 59 | } | ||
| 60 | |||
| 61 | if (mem.eql(u8, s, "blue")) { | ||
| 62 | break :blk .blue; | ||
| 63 | } | ||
| 64 | |||
| 65 | unreachable; | ||
| 66 | }; | ||
| 67 | |||
| 68 | return Ball{ | ||
| 69 | .color = color, | ||
| 70 | .num = nballs, | ||
| 71 | }; | ||
| 72 | } | ||
| 73 | |||
| 74 | pub fn parseSet(text: []const u8) Set { | ||
| 75 | const trimmed = mem.trim(u8, text, &std.ascii.whitespace); | ||
| 76 | var splitBalls = mem.splitScalar(u8, trimmed, ','); | ||
| 77 | var r: u64 = 0; | ||
| 78 | var g: u64 = 0; | ||
| 79 | var b: u64 = 0; | ||
| 80 | |||
| 81 | while (splitBalls.next()) |ball| { | ||
| 82 | const parsed_ball = parseBall(ball); | ||
| 83 | switch (parsed_ball.color) { | ||
| 84 | .red => r += parsed_ball.num, | ||
| 85 | .green => g += parsed_ball.num, | ||
| 86 | .blue => b += parsed_ball.num, | ||
| 87 | } | ||
| 88 | } | ||
| 89 | |||
| 90 | return Set{ | ||
| 91 | .red = r, | ||
| 92 | .green = g, | ||
| 93 | .blue = b, | ||
| 94 | }; | ||
| 95 | } | ||
| 96 | |||
| 97 | pub fn parseGame(text: []const u8) !Game { | ||
| 98 | const trimmed = mem.trim(u8, text, &std.ascii.whitespace); | ||
| 99 | var splitSets = mem.splitScalar(u8, trimmed, ';'); | ||
| 100 | var game: Game = undefined; | ||
| 101 | try game.init(); | ||
| 102 | |||
| 103 | while (splitSets.next()) |set| { | ||
| 104 | try game.sets.append(parseSet(set)); | ||
| 105 | } | ||
| 106 | |||
| 107 | return game; | ||
| 108 | } | ||
| 109 | |||
| 110 | pub fn part1(input: ArrayList(Game)) void { | ||
| 111 | var ans: u64 = 0; | ||
| 112 | |||
| 113 | outer: for (input.items) |game| { | ||
| 114 | for (game.sets.items) |set| { | ||
| 115 | if (set.red > 12 or set.green > 13 or set.blue > 14) { | ||
| 116 | continue :outer; | ||
| 117 | } | ||
| 118 | } | ||
| 119 | ans += game.id; | ||
| 120 | } | ||
| 121 | |||
| 122 | print("{d}\n", .{ans}); | ||
| 123 | } | ||
| 124 | |||
| 125 | pub fn part2(input: ArrayList(Game)) void { | ||
| 126 | var ans: u64 = 0; | ||
| 127 | |||
| 128 | for (input.items) |game| { | ||
| 129 | var max = Set{ | ||
| 130 | .red = 0, | ||
| 131 | .blue = 0, | ||
| 132 | .green = 0, | ||
| 133 | }; | ||
| 134 | |||
| 135 | for (game.sets.items) |set| { | ||
| 136 | max.red = @max(max.red, set.red); | ||
| 137 | max.green = @max(max.green, set.green); | ||
| 138 | max.blue = @max(max.blue, set.blue); | ||
| 139 | } | ||
| 140 | ans += max.red * max.green * max.blue; | ||
| 141 | } | ||
| 142 | |||
| 143 | print("{d}\n", .{ans}); | ||
| 144 | } | ||
| 145 | |||
| 146 | pub fn main() !void { | ||
| 147 | var splitLines = mem.splitScalar(u8, fin, '\n'); | ||
| 148 | var games = ArrayList(Game).init(allocator); | ||
| 149 | defer games.deinit(); | ||
| 150 | |||
| 151 | while (splitLines.next()) |line| { | ||
| 152 | var splitGame = mem.splitScalar(u8, line, ':'); | ||
| 153 | _ = splitGame.next(); | ||
| 154 | |||
| 155 | const game = try parseGame(splitGame.next() orelse unreachable); | ||
| 156 | try games.append(game); | ||
| 157 | } | ||
| 158 | |||
| 159 | part1(games); | ||
| 160 | part2(games); | ||
| 161 | } | ||
| @@ -18,6 +18,7 @@ echo \ | |||
| 18 | 'const std = @import("std"); | 18 | 'const std = @import("std"); |
| 19 | const print = std.debug.print; | 19 | const print = std.debug.print; |
| 20 | const assert = std.debug.assert; | 20 | const assert = std.debug.assert; |
| 21 | const mem = std.mem; | ||
| 21 | const input = @embedFile("./input.txt"); | 22 | const input = @embedFile("./input.txt"); |
| 22 | 23 | ||
| 23 | pub fn main() !void { | 24 | pub fn main() !void { |
