Skip to content

Commit 69cc407

Browse files
committed
3
1 parent cc691ff commit 69cc407

File tree

3 files changed

+44
-4
lines changed

3 files changed

+44
-4
lines changed

cpp/3.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include "common.h"
2+
3+
namespace {
4+
long p1(const auto &input) {
5+
long p{0};
6+
for (auto l : input) {
7+
long m = static_cast<long>(l.length() / 2);
8+
auto c1 = l | std::ranges::views::take(m);
9+
std::ranges::sort(c1);
10+
auto c2 = l | std::ranges::views::drop(m);
11+
std::ranges::sort(c2);
12+
std::string s;
13+
std::ranges::set_intersection(c1, c2, std::back_inserter(s));
14+
p += (std::isupper(s[0])) ? (s[0] - '@') + 26 : (s[0] - '`');
15+
}
16+
return p;
17+
}
18+
19+
long p2(auto input) {
20+
long p{};
21+
constexpr size_t sz = 3;
22+
for (size_t d{}; d < input.size(); d += sz) {
23+
auto g = input | std::ranges::views::drop(d) | std::ranges::views::take(sz);
24+
std::ranges::for_each(g, [](auto &gi) { std::ranges::sort(gi); });
25+
std::string int1{}, int2{};
26+
std::ranges::set_intersection(g[0], g[1], std::back_inserter(int1));
27+
std::ranges::set_intersection(g[2], int1, std::back_inserter(int2));
28+
p += (std::isupper(int2[0])) ? (int2[0] - '@') + 26 : (int2[0] - '`');
29+
}
30+
return p;
31+
}
32+
} // namespace
33+
34+
int main() {
35+
const auto &input = gb::advent2021::readIn();
36+
gb::advent2021::writeOut(std::to_string(p1(input)));
37+
gb::advent2021::writeOut(std::to_string(p2(input)));
38+
}

cpp/common.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include <algorithm>
22
#include <bitset>
3+
#include <cctype>
34
#include <climits>
45
#include <cmath>
56
#include <cstdint>
@@ -11,6 +12,7 @@
1112
#include <map>
1213
#include <memory>
1314
#include <numeric>
15+
#include <ranges>
1416
#include <set>
1517
#include <sstream>
1618
#include <stack>

cpp/meson.build

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
project('advent2022', 'cpp',
22
version : '0.1',
3-
default_options : ['warning_level=3', 'cpp_std=c++2a'])
3+
default_options : ['warning_level=3', 'cpp_std=c++20'])
44

55
executable('1',
66
'1.cpp',
@@ -10,9 +10,9 @@ executable('2',
1010
'2.cpp',
1111
dependencies: [])
1212

13-
# executable('3',
14-
# '3.cpp',
15-
# dependencies: [])
13+
executable('3',
14+
'3.cpp',
15+
dependencies: [])
1616

1717
# executable('4',
1818
# '4.cpp',

0 commit comments

Comments
 (0)