aboutsummaryrefslogtreecommitdiff
path: root/2015/src
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2025-01-06 13:58:31 +0100
committerThomas Schmucker <ts@its1.de>2025-01-06 13:58:31 +0100
commit8f53e809e312021596be70317ea053e5bec6c816 (patch)
treea30b81f2b5dfa14d66dcc6957a745d6160536189 /2015/src
parent21afde1f9f9e5869775c7c0b0b9e6ceb2d889ef9 (diff)
downloadadvent-of-code-8f53e809e312021596be70317ea053e5bec6c816.tar.gz
advent-of-code-8f53e809e312021596be70317ea053e5bec6c816.tar.bz2
advent-of-code-8f53e809e312021596be70317ea053e5bec6c816.zip
aoc 2015, day 25
Diffstat (limited to '2015/src')
-rw-r--r--2015/src/day25.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/2015/src/day25.cpp b/2015/src/day25.cpp
new file mode 100644
index 0000000..ed02c9b
--- /dev/null
+++ b/2015/src/day25.cpp
@@ -0,0 +1,53 @@
1#include <fstream>
2#include <iostream>
3#include <sstream>
4#include <vector>
5using namespace std;
6
7tuple<long, long>
8read_file(string_view filename)
9{
10 fstream input{ filename };
11
12 vector<long> values;
13 for ( string word; input >> word; ) {
14 long value{};
15 if ( stringstream(word) >> value ) {
16 values.push_back(value);
17 }
18 }
19 return { values.at(0), values.at(1) };
20}
21
22long
23triangle_num(long row, long col)
24{
25 const auto side = row + col - 1;
26 return (side * (side + 1)) / 2 - row;
27}
28
29long
30powmod(long base, long pow, long mod)
31{
32 long result = 0;
33 for ( result = 1; pow != 0; pow /= 2 ) {
34 if ( pow % 2 == 1 ) {
35 result = (result * base) % mod;
36 }
37 base = (base * base) % mod;
38 }
39 return result;
40}
41
42void
43part1(long row, long col)
44{
45 cout << (powmod(252533, triangle_num(row, col), 33554393) * 20151125) % 33554393 << endl;
46}
47
48int
49main()
50{
51 const auto [row, col] = read_file("data/day25.txt");
52 part1(row, col);
53}