File tree Expand file tree Collapse file tree 3 files changed +44
-4
lines changed Expand file tree Collapse file tree 3 files changed +44
-4
lines changed Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change 1
1
#include < algorithm>
2
2
#include < bitset>
3
+ #include < cctype>
3
4
#include < climits>
4
5
#include < cmath>
5
6
#include < cstdint>
11
12
#include < map>
12
13
#include < memory>
13
14
#include < numeric>
15
+ #include < ranges>
14
16
#include < set>
15
17
#include < sstream>
16
18
#include < stack>
Original file line number Diff line number Diff line change 1
1
project (' advent2022' , ' cpp' ,
2
2
version : ' 0.1' ,
3
- default_options : [' warning_level=3' , ' cpp_std=c++2a ' ])
3
+ default_options : [' warning_level=3' , ' cpp_std=c++20 ' ])
4
4
5
5
executable (' 1' ,
6
6
' 1.cpp' ,
@@ -10,9 +10,9 @@ executable('2',
10
10
' 2.cpp' ,
11
11
dependencies : [])
12
12
13
- # executable('3',
14
- # '3.cpp',
15
- # dependencies: [])
13
+ executable (' 3' ,
14
+ ' 3.cpp' ,
15
+ dependencies : [])
16
16
17
17
# executable('4',
18
18
# '4.cpp',
You can’t perform that action at this time.
0 commit comments