-
Notifications
You must be signed in to change notification settings - Fork 0
/
Day25.cs
43 lines (36 loc) · 1.17 KB
/
Day25.cs
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
41
42
43
namespace Aoc2020Net.Days
{
internal sealed class Day25 : Day
{
public override object SolvePart1()
{
var publicKeys = InputData.GetInputInt64NumbersFromLines();
var cardLoopSize = FindLoopSizeByPublicKey(7, publicKeys[0]);
return TransformSubjectNumber(publicKeys[1], cardLoopSize);
}
public override object SolvePart2()
{
return "MERRY CHRISTMAS";
}
private long TransformSubjectNumber(long subjectNumber, int loopSize)
{
var value = 1L;
for (var i = 0; i < loopSize; i++)
{
TransformValue(ref value, subjectNumber);
}
return value;
}
private int FindLoopSizeByPublicKey(long subjectNumber, long publicKey)
{
var value = 1L;
for (var i = 0; ; i++)
{
TransformValue(ref value, subjectNumber);
if (value == publicKey)
return i + 1;
}
}
private void TransformValue(ref long value, long subjectNumber) => value = (value * subjectNumber) % 20201227;
}
}