aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2025-10-19 22:03:39 +0200
committerThomas Schmucker <ts@its1.de>2025-10-19 22:03:39 +0200
commit0450ecd6a67226ddbaeedde64ef45dfdd72cddd1 (patch)
tree40e496805b20eb2eb0586569e17c977e34dce28d
parent40db239347e4ca59c4dda24bed7177fdbf1b7ff7 (diff)
downloadadvent-of-code-0450ecd6a67226ddbaeedde64ef45dfdd72cddd1.tar.gz
advent-of-code-0450ecd6a67226ddbaeedde64ef45dfdd72cddd1.tar.bz2
advent-of-code-0450ecd6a67226ddbaeedde64ef45dfdd72cddd1.zip
day 18, aoc 2016
-rw-r--r--2016/src/day18.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/2016/src/day18.cpp b/2016/src/day18.cpp
new file mode 100644
index 0000000..66d1bf0
--- /dev/null
+++ b/2016/src/day18.cpp
@@ -0,0 +1,80 @@
1#include <algorithm>
2#include <filesystem>
3#include <fstream>
4#include <iostream>
5#include <string>
6
7using namespace std;
8
9namespace {
10
11string
12readFile(const filesystem::path& filename)
13{
14 ifstream file{ filename };
15 string line;
16 getline(file, line);
17 return line;
18}
19
20void
21solve(string line, size_t lines)
22{
23 long count = 0;
24 while ( lines-- > 0 ) {
25 string current_line = "." + line + ".";
26
27 string new_line;
28
29 for ( size_t i = 1; i < current_line.size() - 1; ++i ) {
30 auto next_chr = '.';
31
32 const auto left = current_line[i - 1];
33 const auto middle = current_line[i];
34 const auto right = current_line[i + 1];
35
36 if ( left == '^' && middle == '^' && right == '.' ) {
37 next_chr = '^';
38 }
39 else if ( left == '.' && middle == '^' && right == '^' ) {
40 next_chr = '^';
41 }
42 else if ( left == '^' && middle == '.' && right == '.' ) {
43 next_chr = '^';
44 }
45 else if ( left == '.' && middle == '.' && right == '^' ) {
46 next_chr = '^';
47 }
48
49 new_line += next_chr;
50 }
51
52 count += ranges::count(line, '.');
53
54 line = std::move(new_line);
55 }
56
57 cout << count << '\n';
58}
59
60void
61part1(const string& line)
62{
63 solve(line, 40);
64}
65
66void
67part2(const string& line)
68{
69 solve(line, 400000);
70}
71
72} // namespace
73
74int
75main()
76{
77 auto line = readFile("data/day18.txt");
78 part1(line);
79 part2(line);
80}