From f613310b8a49a218078a7ab689f1a2c9ad478897 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Tue, 14 Jan 2025 17:00:14 +0100 Subject: aoc 2016, days 7 --- 2016/src/day07.cpp | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 2016/src/day07.cpp (limited to '2016/src/day07.cpp') diff --git a/2016/src/day07.cpp b/2016/src/day07.cpp new file mode 100644 index 0000000..faa306f --- /dev/null +++ b/2016/src/day07.cpp @@ -0,0 +1,99 @@ +#include +#include +#include +#include +#include +#include + +using namespace std; + +vector +read_file(string_view filename) +{ + fstream input{ filename }; + + vector lines; + + for ( string line; getline(input, line); ) { + lines.emplace_back(line); + } + + return lines; +} + +void +part1(const vector& lines) +{ + long sum = 0; + for ( const auto& line: lines ) { + long found_inner = 0; + long found_outer = 0; + + bool inner = false; + for ( size_t i = 0; i + 3 < line.length(); ++i ) { + if ( line[i] == '[' ) { + inner = true; + } + if ( line[i] == ']' ) { + inner = false; + } + + if ( line[i + 0] == line[i + 3] && line[i + 0] != line[i + 1] && line[i + 1] == line[i + 2] ) { + if ( inner ) { + ++found_inner; + } + else { + ++found_outer; + } + } + } + sum += (found_inner == 0 && found_outer != 0) ? 1 : 0; + } + cout << sum << endl; +} + +void +part2(const vector& lines) +{ + long sum = 0; + for ( const auto& line: lines ) { + set> inners; + set> outers; + + bool inner = false; + for ( size_t i = 0; i + 2 < line.length(); ++i ) { + if ( line[i] == '[' ) { + inner = true; + } + if ( line[i] == ']' ) { + inner = false; + } + + if ( line[i + 0] == line[i + 2] && line[i + 0] != line[i + 1] ) { + if ( inner ) { + inners.emplace(line[i + 0], line[i + 1]); + if ( outers.contains({ line[i + 1], line[i + 0] }) ) { + ++sum; + break; + } + } + else { + outers.emplace(line[i + 0], line[i + 1]); + if ( inners.contains({ line[i + 1], line[i + 0] }) ) { + ++sum; + break; + } + } + } + } + } + cout << sum << endl; +} + +int +main() +{ + auto lines = read_file("data/day07.txt"); + part1(lines); + part2(lines); +} -- cgit v1.3