aoc

My solutions for the Advent of Code
git clone https://git.tronto.net/aoc
Download | Log | Files | Refs | README

commit 104f717c4e86bb537db84a8e9e4fc4c2272dece3
parent 00b869790ebbc4afff31bc6ccc72d99b102cd2a5
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date:   Mon,  9 Dec 2024 14:06:37 +0100

Day 9 with views::reverse

Diffstat:
M2024/09/day09a.cpp | 7++++---
M2024/09/day09b.cpp | 17+++++++++--------
M2024/learned.txt | 1+
M2024/template.cpp | 1+
4 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/2024/09/day09a.cpp b/2024/09/day09a.cpp @@ -1,6 +1,7 @@ #include <algorithm> #include <iostream> #include <map> +#include <ranges> #include <set> #include <sstream> #include <string> @@ -16,11 +17,11 @@ int main() { a.push_back(id % 2 == 0 ? id/2 : -1); // -1 = space int j = 0; - for (int i = a.size()-1; i >= 0; i--) { + for (auto& x : a | views::reverse) { while (a[j] >= 0) j++; if (a[j] == -2) break; - a[j] = a[i]; - a[i] = -2; // -2 = freed up + a[j] = x; + x = -2; // -2 = freed up } long long checksum = 0; diff --git a/2024/09/day09b.cpp b/2024/09/day09b.cpp @@ -1,6 +1,7 @@ #include <algorithm> #include <iostream> #include <map> +#include <ranges> #include <set> #include <sstream> #include <string> @@ -21,16 +22,16 @@ int main() { a.push_back(id % 2 == 0 ? id/2 : -1); // -1 = space } - for (int i = file.size()-1; i >= 0; i--) { + for (auto& p : file | views::reverse) { for (auto& f : freesp) { - if (f.first >= file[i].first) break; - if (f.second >= file[i].second) { - for (int k = 0; k < file[i].second; k++) { - a[f.first+k] = a[file[i].first+k]; - a[file[i].first+k] = -2; + if (f.first >= p.first) break; + if (f.second >= p.second) { + for (int k = 0; k < p.second; k++) { + a[f.first+k] = a[p.first+k]; + a[p.first+k] = -2; } - f.first += file[i].second; - f.second -= file[i].second; + f.first += p.second; + f.second -= p.second; break; } } diff --git a/2024/learned.txt b/2024/learned.txt @@ -7,3 +7,4 @@ List of things I learned (or refreshed) with this year's AoC. to assign two variables at once with a pair of references pair<int&, int&> * Day 5: std::find and std::replace * Day 8: set::insert_range(), but it is from C++23 only +* Day 9: std::views diff --git a/2024/template.cpp b/2024/template.cpp @@ -1,6 +1,7 @@ #include <algorithm> #include <iostream> #include <map> +#include <ranges> #include <set> #include <sstream> #include <string>