Completed day 10
This commit is contained in:
parent
de0da386ae
commit
571bfdb12f
5 changed files with 1261 additions and 1 deletions
76
2020/day10.cpp
Normal file
76
2020/day10.cpp
Normal file
|
@ -0,0 +1,76 @@
|
|||
/*******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2020 Gnarwhal
|
||||
*
|
||||
* -----------------------------------------------------------------------------
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files(the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
#include "types.hpp"
|
||||
|
||||
struct Pair {
|
||||
u64 jolt;
|
||||
u64 count;
|
||||
};
|
||||
|
||||
auto operator<(const Pair & left, const Pair & right) -> bool {
|
||||
return left.jolt < right.jolt;
|
||||
}
|
||||
|
||||
auto main(i32 argc, char * argv[]) -> i32 {
|
||||
auto jolts = std::vector<Pair>{{ 0, 1 }};
|
||||
{
|
||||
auto line = std::string();
|
||||
auto file = std::ifstream("day10.input");
|
||||
while (getline(file, line)) {
|
||||
jolts.push_back({ (u64) std::stoll(line), 0 });
|
||||
}
|
||||
}
|
||||
std::sort(jolts.begin(), jolts.end());
|
||||
jolts.push_back({ jolts[jolts.size() - 1].jolt + 3, 0 });
|
||||
|
||||
auto dif1 = usize(0);
|
||||
auto dif3 = usize(0);
|
||||
for (auto i = usize(0); i < jolts.size() - 1; ++i) {
|
||||
if (jolts[i + 1].jolt - jolts[i].jolt == 1) ++dif1;
|
||||
else if (jolts[i + 1].jolt - jolts[i].jolt == 3) ++dif3;
|
||||
}
|
||||
|
||||
std::cout << (dif1 * dif3) << std::endl;
|
||||
|
||||
for (auto i = i32(0); i < jolts.size() - 1; ++i) {
|
||||
for (auto j = i + 1; j < jolts.size(); ++j) {
|
||||
if (jolts[j].jolt <= jolts[i].jolt + 3) {
|
||||
jolts[j].count += jolts[i].count;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
std::cout << jolts[jolts.size() - 1].count << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
96
2020/day10.input
Normal file
96
2020/day10.input
Normal file
|
@ -0,0 +1,96 @@
|
|||
133
|
||||
157
|
||||
39
|
||||
74
|
||||
108
|
||||
136
|
||||
92
|
||||
55
|
||||
86
|
||||
46
|
||||
111
|
||||
58
|
||||
80
|
||||
115
|
||||
84
|
||||
67
|
||||
98
|
||||
30
|
||||
40
|
||||
61
|
||||
71
|
||||
114
|
||||
17
|
||||
9
|
||||
123
|
||||
142
|
||||
49
|
||||
158
|
||||
107
|
||||
139
|
||||
104
|
||||
132
|
||||
155
|
||||
96
|
||||
91
|
||||
15
|
||||
11
|
||||
23
|
||||
54
|
||||
6
|
||||
63
|
||||
126
|
||||
3
|
||||
10
|
||||
116
|
||||
87
|
||||
68
|
||||
72
|
||||
109
|
||||
62
|
||||
134
|
||||
103
|
||||
1
|
||||
16
|
||||
101
|
||||
117
|
||||
35
|
||||
120
|
||||
151
|
||||
102
|
||||
85
|
||||
145
|
||||
135
|
||||
79
|
||||
2
|
||||
147
|
||||
33
|
||||
41
|
||||
93
|
||||
52
|
||||
48
|
||||
64
|
||||
81
|
||||
29
|
||||
20
|
||||
110
|
||||
129
|
||||
43
|
||||
148
|
||||
36
|
||||
53
|
||||
26
|
||||
42
|
||||
156
|
||||
154
|
||||
77
|
||||
88
|
||||
73
|
||||
27
|
||||
34
|
||||
12
|
||||
146
|
||||
78
|
||||
47
|
||||
28
|
||||
97
|
88
2020/day9.cpp
Normal file
88
2020/day9.cpp
Normal file
|
@ -0,0 +1,88 @@
|
|||
/*******************************************************************************
|
||||
*
|
||||
* Copyright (c) 2020 Gnarwhal
|
||||
*
|
||||
* -----------------------------------------------------------------------------
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files(the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
#include "types.hpp"
|
||||
|
||||
auto find_sum(usize index, std::vector<u64> xmas) {
|
||||
for (auto i = index - 25; i < index - 1; ++i) {
|
||||
for (auto j = i + 1; j < index; ++j) {
|
||||
if (xmas[i] + xmas[j] == xmas[index]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
auto main(i32 argc, char * argv[]) -> i32 {
|
||||
auto xmas = std::vector<u64>();
|
||||
auto line = std::string();
|
||||
auto file = std::ifstream("day9.input");
|
||||
while (getline(file, line)) {
|
||||
xmas.push_back(std::stoll(line));
|
||||
}
|
||||
|
||||
auto invalid = u64(0);
|
||||
for (auto i = usize(25); i < xmas.size(); ++i) {
|
||||
if (!find_sum(i, xmas)) {
|
||||
std::cout << (invalid = xmas[i]) << std::endl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
auto head_index = 0;
|
||||
auto tail_index = 1;
|
||||
auto sum = xmas[0] + xmas[1];
|
||||
while (sum != invalid) {
|
||||
if (sum < invalid) {
|
||||
sum += xmas[++tail_index];
|
||||
} else if (head_index + 1 < tail_index) {
|
||||
sum -= xmas[head_index];
|
||||
++head_index;
|
||||
} else {
|
||||
head_index = tail_index + 1;
|
||||
tail_index = head_index + 1;
|
||||
sum = xmas[head_index] + xmas[tail_index];
|
||||
}
|
||||
}
|
||||
auto min = xmas[tail_index];
|
||||
auto max = xmas[tail_index];
|
||||
for (auto i = head_index; i < tail_index; ++i) {
|
||||
if (xmas[i] < min) {
|
||||
min = xmas[i];
|
||||
} else if (xmas[i] > max) {
|
||||
max = xmas[i];
|
||||
}
|
||||
}
|
||||
std::cout << (min + max) << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
1000
2020/day9.input
Normal file
1000
2020/day9.input
Normal file
File diff suppressed because it is too large
Load diff
|
@ -34,7 +34,7 @@
|
|||
auto main(i32 argc, char * argv[]) -> i32 {
|
||||
{
|
||||
auto line = std::string();
|
||||
auto file = std::ifstream("day$NUM.input");
|
||||
auto file = std::ifstream("dayNUM.input");
|
||||
while (getline(file, line)) {
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue