Sundar Pichai says Google Search will ‘enshittify profoundly’ in 2025 [paraphrasing]
swlabr
as the edgy commie teens say, praxis
code for day 5, written in dart to be short:
spoiler
void d5(bool isPart2) {
Map<int, Set<int>> ordering = {};
int comp(int a, int b) => ordering[a]?.contains(b) ?? false ? -1 : 1;
List<String> lines = getLines();
int rulesEnd = lines.indexWhere((line) => line.isEmpty);
lines
.sublist(0, rulesEnd)
.map((line) => line.split('|').map((e) => int.parse(e)).toList())
.forEach((rule) => ordering.putIfAbsent(rule[0], Set.new).add(rule[1]));
print(lines
.sublist(rulesEnd + 1)
.map((line) => line.split(",").map((s) => int.parse(s)).toList())
.fold<int>(
0,
(p, e) =>
p +
(e.isSorted(comp) != isPart2
? e.sorted(comp)[e.length >> 1]
: 0)));
}
days 5 and 6.
5:
p1, p2:
Initially, I was thrown for a loop. It wasn't apparent to me what data structure to use or the problem's properties. My first (and correct) instinct was to interpret the data as a directed graph, but then what? Try to find some total ordering, if such a thing was possible?
As it turns out, that instinct was also correct. By drawing the sample data (or counting or printing it out), I noticed that every page number had a defined relation with every other page number. This meant that a total ordering (rather than a lattice) existed, meaning it was possible to construct a comparison function.
So, the algorithm for part 1 was to check if a list was sorted, and part 2 was to sort the list. There's probably a 1-3 line solution for both parts a and b, but that's for Mr. The Reader.
6:
p1, p2
as discussed in a different part of the thread, I consider the input size for square inputs to be N, the "side length" of the square.
Context: I participated (and completed!) in AoC last year and pragmatically wrote my code as a set of utility modules for solving these pathological problems. So, I had about 80% of the boilerplate for this problem written, waiting for me to read and relearn.
Anyway, the analysis: P1. was pretty straightforward. Just walk along the map, turn right if you hit an obstacle, and stop when you leave the map. I guessed that there may be a case where one needs to turn in place more than once to escape an obstacle, but I never checked if that was true. Either way, I got the answer out. This is a worst-case O(n^2^) solution, which was fast for n = 130.
P2. I chose to brute force this, and it was fine. I iterated through the grid, placing a wall if possible, and checked if this produced a loop using an explored set. This is worst case O(n^4^), which, for n=130, takes a few seconds to spit out the answer. It's parallelisable, though, so there's that. If a faster solution existed, I'd love to know.
i am a simple man
I see square input, i say n^2^
it's almost as if international trade of weapons creates perverse incentives
Or a secret, third option:
4:
4-1
I tried something clever and was punished for my hubris, but it turned out ok.
I treated the input as a list of strings and searched for "XMAS" and "SAMX", rotating and transposing the list to scan for vertical and diagonal words.
In my arrogance, I thought I could do the diagonal rotation easily, but I was very wrong. I got it out in the end, though.
4-2
this was easier than 4-1. An O(n^2^) solution just scanning for X-MAS was good enough. Maybe there was a more clever solution that used, i dunno, string hashing or something but whatever.
Martial law and free speech restrictions are only bad if the bad guys do it, also we get to decide who the bad guys are
Ah, yes. In case you were wondering about said Swiss businessman and whether or not his actions in the DPRK were morally sound, once again, Wikipedia has something to say.
Normal person: you should not be attracted to the mind or body of anyone under the age of consent, nor should you invent thought experiments to find loopholes.
Yud: i live to groom
I have heard that egg nog and orange soda is a surprisingly good drink.