Skip to content

Commit a046d5a

Browse files
committed
aoc_lib: parse arguments into a Arguments struct
This contains the input ifstream, the file name as a string, and the input type: EXAMPLE (for `*example*`), MAIN (for `input.txt`), or OTHER.
1 parent 587dc1a commit a046d5a

40 files changed

+68
-52
lines changed

2023/src/day01.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ int parse_digit(std::string match, const bool reverse = false) {
3232
}
3333

3434
int main(int argc, char **argv) {
35-
std::ifstream infile = aoc::parse_args(argc, argv);
35+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
3636

3737
// part 1
3838
const std::string digits{"123456789"};

2023/src/day02.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include <string> // for string, getline
1515

1616
int main(int argc, char **argv) {
17-
std::ifstream infile = aoc::parse_args(argc, argv);
17+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1818

1919
int part_1 = 0, part_2 = 0;
2020
std::string line;

2023/src/day03.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ std::istream &operator>>(std::istream &is, Grid &grid) {
118118
} // namespace aoc::day03
119119

120120
int main(int argc, char **argv) {
121-
std::ifstream infile = aoc::parse_args(argc, argv);
121+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
122122

123123
aoc::day03::Grid grid;
124124
infile >> grid;

2023/src/day04.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include <string> // for string, getline
1515

1616
int main(int argc, char **argv) {
17-
std::ifstream infile = aoc::parse_args(argc, argv);
17+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1818

1919
// read file line-by-line
2020
int part_1 = 0, part_2 = 0;

2023/src/day05.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ long part_2(const std::vector<long> &seeds,
6565
}
6666

6767
int main(int argc, char **argv) {
68-
std::ifstream infile = aoc::parse_args(argc, argv);
68+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
6969

7070
// read input
7171
auto seeds = aoc::day05::read_seeds(infile);

2023/src/day06.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ long part_2(const std::vector<int> &times, const std::vector<int> &records) {
8383
int main(int argc, char **argv) {
8484
std::vector<int> times, records;
8585
{
86-
std::ifstream infile = aoc::parse_args(argc, argv);
86+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
8787
aoc::day06::parse(infile, times, records);
8888
}
8989

2023/src/day07.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ int part_2(std::vector<aoc::day07::Hand> hands) {
3131
}
3232

3333
int main(int argc, char **argv) {
34-
std::ifstream infile = aoc::parse_args(argc, argv);
34+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
3535

3636
using namespace aoc::day07;
3737
auto hands = read_hands(infile);

2023/src/day08.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ long part_2(const std::string &directions, const aoc::day08::Network &network) {
9696
}
9797

9898
int main(int argc, char **argv) {
99-
std::ifstream infile = aoc::parse_args(argc, argv);
99+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
100100

101101
std::string directions;
102102
infile >> directions;

2023/src/day09.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
// IWYU pragma: no_include <functional> // for identity (ranges::any_of)
1717

1818
int main(int argc, char **argv) {
19-
std::ifstream infile = aoc::parse_args(argc, argv);
19+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
2020

2121
// read file line-by-line
2222
std::string line;

2023/src/day10.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#include <iostream> // for cout, cerr
1616

1717
int main(int argc, char **argv) {
18-
std::ifstream infile = aoc::parse_args(argc, argv);
18+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1919

2020
using namespace aoc::day10;
2121
using aoc::Pos;

2023/src/day11.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ long sum_paths(const std::vector<aoc::Pos> &galaxies) {
2222
}
2323

2424
int main(int argc, char **argv) {
25-
std::ifstream infile = aoc::parse_args(argc, argv);
25+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
2626

2727
std::vector<aoc::Pos> galaxies = aoc::day11::read_image(infile);
2828

2023/src/day12.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream> // for cout, cerr
1212

1313
int main(int argc, char **argv) {
14-
std::ifstream infile = aoc::parse_args(argc, argv);
14+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1515

1616
auto records = aoc::day12::read_records(infile);
1717

2023/src/day13.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ void print_grid(std::ostream &os, const aoc::day13::Grid &grid) {
1717
}
1818

1919
int main(int argc, char **argv) {
20-
std::ifstream infile = aoc::parse_args(argc, argv);
20+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
2121

2222
auto grids = aoc::day13::read_grids(infile);
2323

2023/src/day14.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
// IWYU pragma: no_include <functional> // for hash (unordered_map)
1414

1515
void solve(int argc, char **argv, bool print) {
16-
std::ifstream infile = aoc::parse_args(argc, argv);
16+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1717

1818
std::unordered_map<std::vector<bool>, long> states;
1919
auto platform = aoc::day14::read_platform(infile);

2023/src/day15.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ int part_2(const std::vector<std::string> &steps) {
3333
}
3434

3535
int main(int argc, char **argv) {
36-
std::ifstream infile = aoc::parse_args(argc, argv);
36+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
3737

3838
auto steps = aoc::day15::read_steps(infile);
3939

2023/src/day16.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream> // for cout, cerr
1212

1313
int main(int argc, char **argv) {
14-
std::ifstream infile = aoc::parse_args(argc, argv);
14+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1515

1616
auto laser_grid = aoc::day16::LaserGrid::read(infile);
1717

2023/src/day17.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream> // for cout
1212

1313
int main(int argc, char **argv) {
14-
std::ifstream infile = aoc::parse_args(argc, argv);
14+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1515

1616
auto city_map = aoc::day17::CityMap::read(infile);
1717

2023/src/day18.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ long calc_volume(const std::vector<aoc::day18::DigInstruction> &instructions) {
3333
}
3434

3535
int main(int argc, char **argv) {
36-
std::ifstream infile = aoc::parse_args(argc, argv);
36+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
3737

3838
const auto [instructions1, instructions2] =
3939
aoc::day18::read_instructions(infile);

2023/src/day19.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ int part_1(const aoc::day19::PartCategorizer &cat,
3838
}
3939

4040
int main(int argc, char **argv) {
41-
std::ifstream infile = aoc::parse_args(argc, argv);
41+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
4242

4343
const auto &[cat, parts] = aoc::day19::read_input(infile);
4444

2023/src/day20.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ long part_2(aoc::day20::MessageBus &bus) {
4646
}
4747

4848
int main(int argc, char **argv) {
49-
std::ifstream infile = aoc::parse_args(argc, argv);
49+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
5050

5151
auto bus = aoc::day20::MessageBus::read_modules(infile);
5252

2023/src/day21.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream> // for cout
1212

1313
int main(int argc, char **argv) {
14-
std::ifstream infile = aoc::parse_args(argc, argv);
14+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1515

1616
auto garden = aoc::day21::Garden::read(infile);
1717

2023/src/day22.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ int part_2(const aoc::day22::BrickStack &stack) {
7272
}
7373

7474
int main(int argc, char **argv) {
75-
std::ifstream infile = aoc::parse_args(argc, argv);
75+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
7676

7777
auto stack = aoc::day22::BrickStack::read(infile);
7878

2023/src/day23.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream> // for cout
1212

1313
void solve(int argc, char **argv, bool print) {
14-
std::ifstream infile = aoc::parse_args(argc, argv);
14+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1515

1616
auto trail_map = aoc::day23::TrailMap::read(infile);
1717

2023/src/day24.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ std::int64_t part_2(const std::vector<aoc::day24::Hailstone> &stones) {
8888
}
8989

9090
int main(int argc, char **argv) {
91-
std::ifstream infile = aoc::parse_args(argc, argv);
91+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
9292

9393
std::vector<aoc::day24::Hailstone> stones = aoc::day24::read_stones(infile);
9494

2023/src/day25.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#include <iostream> // for cout
1313

1414
int main(int argc, char **argv) {
15-
std::ifstream infile = aoc::parse_args(argc, argv);
15+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1616

1717
using namespace aoc::day25;
1818
Graph G = read_input(infile);

2024/src/day01.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
// IWYU pragma: no_include <functional> // for identity, less (ranges::sort)
1515

1616
int main(int argc, char **argv) {
17-
std::ifstream infile = aoc::parse_args(argc, argv);
17+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1818

1919
auto [left, right] = aoc::day01::read_input(infile);
2020
std::ranges::sort(left);

2024/src/day02.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
// IWYU pragma: no_include <functional> // for identity (ranges::count_if)
1414

1515
int main(int argc, char **argv) {
16-
std::ifstream infile = aoc::parse_args(argc, argv);
16+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1717

1818
auto reports = aoc::day02::read_input(infile);
1919

2024/src/day03.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#include <string> // for string, stoi
1313

1414
int main(int argc, char **argv) {
15-
std::ifstream infile = aoc::parse_args(argc, argv);
15+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1616

1717
std::string memory = aoc::read_whole_stream(infile);
1818

2024/src/day04.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream> // for cout
1212

1313
int main(int argc, char **argv) {
14-
std::ifstream infile = aoc::parse_args(argc, argv);
14+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1515

1616
auto grid = aoc::day04::read_input(infile);
1717

2024/src/day05.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ int main(int argc, char **argv) {
1414
#if DEBUG_MODE
1515
using pretty_print::repr;
1616
#endif
17-
std::ifstream infile = aoc::parse_args(argc, argv);
17+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1818

1919
auto [rules, orderings] = aoc::day05::Rules::read(infile);
2020

2024/src/day06.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream> // for cout
1212

1313
int main(int argc, char **argv) {
14-
std::ifstream infile = aoc::parse_args(argc, argv);
14+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1515

1616
aoc::day06::GuardSim guard_sim = aoc::day06::read_input(infile);
1717

2024/src/day07.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream> // for cout
1212

1313
int main(int argc, char **argv) {
14-
std::ifstream infile = aoc::parse_args(argc, argv);
14+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1515

1616
auto equations = aoc::day07::read_input(infile);
1717

2024/src/day08.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream> // for cout
1212

1313
int main(int argc, char **argv) {
14-
std::ifstream infile = aoc::parse_args(argc, argv);
14+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1515

1616
aoc::day08::AntennaMap antenna_map{};
1717
infile >> antenna_map;

2024/src/day09.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@
1313

1414
int main(int argc, char **argv) {
1515
using namespace aoc::day09;
16-
std::ifstream infile = aoc::parse_args(argc, argv);
17-
// NOLINTNEXTLINE(clang-analyzer-deadcode.DeadStores)
18-
const bool is_example =
19-
std::string{argv[1]}.find("example") != std::string::npos;
16+
auto args = aoc::parse_args(argc, argv);
17+
const bool is_example = args.input_type == aoc::InputType::EXAMPLE;
2018

21-
auto disk_layout = DiskLayout::read(infile);
19+
auto disk_layout = DiskLayout::read(args.infile);
2220
if constexpr (aoc::DEBUG) {
2321
if (is_example) {
2422
std::cerr << "initial: " << disk_layout << "\n";

2024/src/day10.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream> // for cout
1212

1313
int main(int argc, char **argv) {
14-
std::ifstream infile = aoc::parse_args(argc, argv);
14+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1515

1616
auto island = aoc::day10::IslandMap::read(infile);
1717

2024/src/day11.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream> // for cout
1212

1313
int main(int argc, char **argv) {
14-
std::ifstream infile = aoc::parse_args(argc, argv);
14+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1515

1616
auto stones = aoc::day11::Stones::read(infile);
1717
if constexpr (aoc::DEBUG) {

2024/src/day12.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream> // for cout
1212

1313
int main(int argc, char **argv) {
14-
std::ifstream infile = aoc::parse_args(argc, argv);
14+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1515

1616
auto garden = aoc::day12::Garden::read(infile);
1717
std::cout << garden.fence_price<aoc::PART_1>() << "\n";

2024/src/day13.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <iostream> // for cout
1212

1313
int main(int argc, char **argv) {
14-
std::ifstream infile = aoc::parse_args(argc, argv);
14+
std::ifstream infile = aoc::parse_args(argc, argv).infile;
1515

1616
auto claw_machines = aoc::day13::read_input(infile);
1717

2024/src/day14.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,13 @@
99
#include "lib.hpp"
1010
#include <fstream> // for ifstream
1111
#include <iostream> // for cout
12-
#include <string> // for string
1312

1413
int main(int argc, char **argv) {
15-
std::ifstream infile = aoc::parse_args(argc, argv);
16-
const bool is_example =
17-
std::string{argv[1]}.find("example") != std::string::npos;
14+
auto args = aoc::parse_args(argc, argv);
15+
const bool is_example = args.input_type == aoc::InputType::EXAMPLE;
1816
aoc::Pos bounds = is_example ? aoc::Pos{11, 7} : aoc::Pos{101, 103};
1917

20-
auto robots = aoc::day14::Robots::read(infile, bounds);
18+
auto robots = aoc::day14::Robots::read(args.infile, bounds);
2119

2220
for (int time = 0; time < 10000; ++time) {
2321
if (time == 100) {

0 commit comments

Comments
 (0)