aboutsummaryrefslogtreecommitdiff
path: root/2016/src/day09.cpp
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2025-01-17 14:33:00 +0100
committerThomas Schmucker <ts@its1.de>2025-01-17 14:33:00 +0100
commitb8af8aa8a126b5b966b7d9f50ffec626e8aa1045 (patch)
tree730b57121a1c8d7f44f73e729445f0bad600d3c2 /2016/src/day09.cpp
parentda5d346f8703f3d6676f940968d2569a1d14b4b5 (diff)
downloadadvent-of-code-b8af8aa8a126b5b966b7d9f50ffec626e8aa1045.tar.gz
advent-of-code-b8af8aa8a126b5b966b7d9f50ffec626e8aa1045.tar.bz2
advent-of-code-b8af8aa8a126b5b966b7d9f50ffec626e8aa1045.zip
aoc 2016, day 9
Diffstat (limited to '2016/src/day09.cpp')
-rw-r--r--2016/src/day09.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/2016/src/day09.cpp b/2016/src/day09.cpp
new file mode 100644
index 0000000..e0b0468
--- /dev/null
+++ b/2016/src/day09.cpp
@@ -0,0 +1,72 @@
1#include <fstream>
2#include <iostream>
3
4using namespace std;
5
6string
7read_file(string_view filename)
8{
9 fstream input{ filename };
10 string line;
11 getline(input, line);
12 return line;
13}
14
15void
16part1(string_view line)
17{
18 size_t len = 0;
19 for ( size_t i = 0; i != line.length(); ) {
20 size_t lhs = 0;
21 size_t rhs = 0;
22
23 if ( sscanf(&line[i], "(%zux%zu)", &lhs, &rhs) == 2 ) {
24 i = line.find(')', i) + 1 + lhs;
25 len += lhs * rhs;
26 }
27 else {
28 ++i;
29 ++len;
30 }
31 }
32 cout << len << endl;
33}
34
35void
36part2(string_view line)
37{
38 function<size_t(string_view)> part2_rec = [&](string_view line) {
39 size_t len = 0;
40 for ( size_t i = 0; i != line.length(); ) {
41 size_t lhs = 0;
42 size_t rhs = 0;
43
44 if ( sscanf(&line[i], "(%zux%zu)", &lhs, &rhs) == 2 ) {
45 i = line.find(')', i) + 1;
46 len += part2_rec({ &line[i], lhs }) * rhs;
47 i += lhs;
48 }
49 else {
50 ++i;
51 ++len;
52 }
53 }
54 return len;
55 };
56
57 cout << part2_rec(line) << endl;
58}
59
60int
61main()
62{
63 auto line = read_file("data/day09.txt");
64 // part1("ADVENT");
65 // part1("A(1x5)BC");
66 // part1("(3x3)XYZ");
67 // part1("A(2x2)BCD(2x2)EFG");
68 // part1("(6x1)(1x3)A");
69 // part1("X(8x2)(3x3)ABCY");
70 part1(line);
71 part2(line);
72}