From b8af8aa8a126b5b966b7d9f50ffec626e8aa1045 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 17 Jan 2025 14:33:00 +0100 Subject: aoc 2016, day 9 --- 2016/src/day09.cpp | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 2016/src/day09.cpp (limited to '2016/src/day09.cpp') 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 @@ +#include +#include + +using namespace std; + +string +read_file(string_view filename) +{ + fstream input{ filename }; + string line; + getline(input, line); + return line; +} + +void +part1(string_view line) +{ + size_t len = 0; + for ( size_t i = 0; i != line.length(); ) { + size_t lhs = 0; + size_t rhs = 0; + + if ( sscanf(&line[i], "(%zux%zu)", &lhs, &rhs) == 2 ) { + i = line.find(')', i) + 1 + lhs; + len += lhs * rhs; + } + else { + ++i; + ++len; + } + } + cout << len << endl; +} + +void +part2(string_view line) +{ + function part2_rec = [&](string_view line) { + size_t len = 0; + for ( size_t i = 0; i != line.length(); ) { + size_t lhs = 0; + size_t rhs = 0; + + if ( sscanf(&line[i], "(%zux%zu)", &lhs, &rhs) == 2 ) { + i = line.find(')', i) + 1; + len += part2_rec({ &line[i], lhs }) * rhs; + i += lhs; + } + else { + ++i; + ++len; + } + } + return len; + }; + + cout << part2_rec(line) << endl; +} + +int +main() +{ + auto line = read_file("data/day09.txt"); + // part1("ADVENT"); + // part1("A(1x5)BC"); + // part1("(3x3)XYZ"); + // part1("A(2x2)BCD(2x2)EFG"); + // part1("(6x1)(1x3)A"); + // part1("X(8x2)(3x3)ABCY"); + part1(line); + part2(line); +} -- cgit v1.3