aboutsummaryrefslogtreecommitdiff
path: root/src/2019/day1/aoc.cpp
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-04-04 11:35:40 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-04-04 11:35:40 +0800
commitb6f02f841a26a5dc8c405416a57a4c8bee51b699 (patch)
treea9562bbd74978287d82b7391d9e134b5143ae7a4 /src/2019/day1/aoc.cpp
parentdb6c4680263981594cacd464e4abfea38586b9d5 (diff)
downloadadvent-of-code-b6f02f841a26a5dc8c405416a57a4c8bee51b699.tar.gz
advent-of-code-b6f02f841a26a5dc8c405416a57a4c8bee51b699.zip
2019 day1
Diffstat (limited to 'src/2019/day1/aoc.cpp')
-rw-r--r--src/2019/day1/aoc.cpp46
1 files changed, 45 insertions, 1 deletions
diff --git a/src/2019/day1/aoc.cpp b/src/2019/day1/aoc.cpp
index 26fed89..933228d 100644
--- a/src/2019/day1/aoc.cpp
+++ b/src/2019/day1/aoc.cpp
@@ -1,3 +1,47 @@
#include "aoc.h"
-namespace aoc2019 {}
+namespace aoc2019 {
+
+int parse_day1(line_view lv) {
+ int d{0};
+ const char* p = lv.line;
+ while (*p >= '0' && *p <= '9') {
+ d = d * 10 + *p - '0';
+ p++;
+ }
+ return d;
+}
+
+int day1(line_view file) {
+ int fuel{0};
+ auto cal = [](int m) -> int { return m / 3 - 2; };
+ per_line(file, [&fuel, &cal](line_view lv) {
+ fuel += cal(parse_day1(lv));
+ return true;
+ });
+
+ return fuel;
+}
+
+void add_fuel(int base, int* total) {
+ if (base > 0) {
+ // printf("%d\n", base);
+ *total += base;
+ add_fuel(base / 3 - 2, total);
+ }
+}
+
+int day1part2(line_view file) {
+ int fuel{0};
+ per_line(file, [&fuel](line_view lv) {
+ int total{0};
+ int base = parse_day1(lv);
+ add_fuel(base / 3 - 2, &total);
+ fuel += total;
+ return true;
+ });
+
+ return fuel;
+}
+
+} // namespace aoc2019