-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.cpp
40 lines (37 loc) · 1.21 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "file.h"
#include "utilities.h"
#include <iostream>
namespace aoc2020_day25 {
unsigned long long part_1(unsigned long long publicKeyCard,
unsigned long long publicKeyDoor,
unsigned long long modulo = 20201227) {
unsigned long long valueCard = 1;
const unsigned long long subject = 7;
int loopCard = 0;
while (valueCard != publicKeyCard) {
valueCard = valueCard * subject;
valueCard = valueCard % modulo;
loopCard++;
}
unsigned long long valueDoor = 1;
int loopDoor = 0;
while (valueDoor != publicKeyDoor) {
valueDoor = valueDoor * subject;
valueDoor = valueDoor % modulo;
loopDoor++;
}
unsigned long long encryptionKey = 1;
unsigned subjectNumber = publicKeyDoor;
for (int i = 0; i < loopCard; ++i) {
encryptionKey = encryptionKey * subjectNumber;
encryptionKey = encryptionKey % modulo;
}
return encryptionKey;
}
}
#ifndef TESTING
int main() {
std::cout << "Part 1: " << aoc2020_day25::part_1(9789649, 3647239) << std::endl;
return 0;
}
#endif