aboutsummaryrefslogtreecommitdiff
path: root/2017/src/day15.cpp
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2025-11-02 21:41:58 +0100
committerThomas Schmucker <ts@its1.de>2025-11-02 21:41:58 +0100
commit756f22d58bb198b8f34589c112e1003614ccdcd6 (patch)
tree4cdeba335f1ea67f7ead9e9f763ba1c3c206fc4d /2017/src/day15.cpp
parentfcbb722bd4c5ca2bd34a7cf9c0ba48f2f955da13 (diff)
downloadadvent-of-code-756f22d58bb198b8f34589c112e1003614ccdcd6.tar.gz
advent-of-code-756f22d58bb198b8f34589c112e1003614ccdcd6.tar.bz2
advent-of-code-756f22d58bb198b8f34589c112e1003614ccdcd6.zip
aoc 2017, days 1-20
Diffstat (limited to '2017/src/day15.cpp')
-rw-r--r--2017/src/day15.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/2017/src/day15.cpp b/2017/src/day15.cpp
new file mode 100644
index 0000000..270528b
--- /dev/null
+++ b/2017/src/day15.cpp
@@ -0,0 +1,73 @@
1#include <iostream>
2
3using namespace std;
4
5namespace {
6
7struct Generator {
8 Generator(unsigned long factor, unsigned long prev)
9 : factor{ factor }
10 , prev{ prev }
11 {
12 }
13
14 unsigned long next()
15 {
16 prev *= factor;
17 prev %= 2147483647;
18 return prev;
19 }
20
21 unsigned long factor;
22 unsigned long prev;
23};
24
25void
26part1(unsigned long start_a, unsigned long start_b)
27{
28 Generator GenA(16807, start_a);
29 Generator GenB(48271, start_b);
30
31 int count = 0;
32 for ( int i = 0; i != 40000000; ++i ) {
33 if ( (GenA.next() & 0xFFFF) == (GenB.next() & 0xFFFF) ) {
34 ++count;
35 }
36 }
37 cout << "Part1: " << count << '\n';
38}
39
40void
41part2(unsigned long start_a, unsigned long start_b)
42{
43 Generator GenA(16807, start_a);
44 Generator GenB(48271, start_b);
45
46 int count = 0;
47 for ( int i = 0; i != 5000000; ++i ) {
48 auto value_a = GenA.next();
49 while ( value_a % 4 != 0 ) {
50 value_a = GenA.next();
51 }
52 auto value_b = GenB.next();
53 while ( value_b % 8 != 0 ) {
54 value_b = GenB.next();
55 }
56 if ( (value_a & 0xFFFF) == (value_b & 0xFFFF) ) {
57 ++count;
58 }
59 }
60 cout << "Part2: " << count << '\n';
61}
62
63} // namespace
64
65int
66main()
67{
68 static const unsigned long start_a = 618;
69 static const unsigned long start_b = 814;
70
71 part1(start_a, start_b);
72 part2(start_a, start_b);
73}