File tree Expand file tree Collapse file tree 2 files changed +20
-19
lines changed Expand file tree Collapse file tree 2 files changed +20
-19
lines changed Original file line number Diff line number Diff line change 4
4
#include < string>
5
5
6
6
auto parse_input (const std::string &instructions) {
7
- // clang-format off
8
- auto rng = instructions
9
- | std::views::transform ([i = 0 ](auto &c) mutable {
10
- i += c == ' )' ? -1 : 1 ;
11
- return i;
12
- })
13
- | std::views::common;
14
- // clang-format on
7
+ int i = 0 ;
8
+ auto rng = instructions //
9
+ | std::views::transform ([&](auto &c) mutable {
10
+ if (c == ' (' ) {
11
+ i += 1 ;
12
+ } else {
13
+ i -= 1 ;
14
+ }
15
+ return i;
16
+ }) //
17
+ | std::views::common;
15
18
return std::vector<int >(rng.begin (), rng.end ());
16
19
}
17
20
@@ -20,19 +23,17 @@ auto solve_part_1(const std::vector<int> &instructions) -> int {
20
23
}
21
24
22
25
auto solve_part_2 (const std::vector<int > &instructions) -> int {
23
- // clang-format off
24
26
#ifdef __cpp_lib_ranges_enumerate
25
- auto rng = instructions | std::views::enumerate
27
+ auto enumerated_rng = instructions | std::views::enumerate;
26
28
#else
27
- auto rng = std::views::zip (std::views::iota (0 ), instructions)
29
+ auto enumerated_rng = std::views::zip (std::views::iota (0 ), instructions);
28
30
#endif
29
- | std::views::filter ([](const auto &kv) {
30
- auto &[k, v] = kv;
31
- return v < 0 ;
32
- })
33
- | std::views::take (1 )
34
- | std::views::keys;
35
- // clang-format on
31
+ auto rng = enumerated_rng //
32
+ | std::views::filter ([](const auto &kv) {
33
+ auto &[k, v] = kv;
34
+ return v < 0 ;
35
+ }) //
36
+ | std::views::take (1 ) | std::views::keys;
36
37
auto index = rng.front ();
37
38
return int (index + 1 );
38
39
}
Original file line number Diff line number Diff line change 9
9
10
10
template <>
11
11
struct std ::hash<std::pair<int , int >> {
12
- inline auto operator ()(const pair<int , int > &v) const -> size_t {
12
+ auto operator ()(const pair<int , int > &v) const -> size_t {
13
13
return std::size_t (v.first ) << 32 | v.second ;
14
14
}
15
15
};
You can’t perform that action at this time.
0 commit comments