That's a very good background and should be more than enough to understand the rust book. But if you do eventually want to go more into the theoretical background, I recommend looking towards type theory, specifically Algebraic Data Types (ADT) which Rust uses a lot, and Polymorphism (Generics). But it's certainly not required to write good Rust code.
We need to collectively realize that both Celsius and Fahrenheit are mostly arbitrary and not more than practical conventions to assign numbers to temperatures. Kelvin makes more sense but is impractical for daily use. It's just US-Americans distracting from the fact that most of their units are objectively bad compared to Metric by pointing out that Celsius is only marginally better.
Right, which occurs in particular when dealing with graphs, which are basically matrices and usually sparse. Large graphs are what I used this format for, however I also needed edge weights, so the first column was still required for that.
Well played, this should also teach the Russians not to play such stupid games in the future.
I want to add for context that the RDK (Russian Voluntary Corps), whose leader's death was faked, is in fact a Russian neonazi formation that was formed to fight against the Russians and since 2022 actively take part in the war as a unit under Ukrainian command. The leader, Kapustin, was already widely known within the broader European far-right movement. All that is to say that the person this is about is far more than questionable, but at least right now he is fighting in the right side.
The CSR (compressed sparse row) format is a very simple but efficient way of storing sparse matrices, meaning matrices with a large amount of zero entries, which should not all occupy memory. It has three arrays: one holds all non-zero entries in order, read row by row, the next array contains the column indices of each non-zero element (and therefore has the same length as the first array), the third array indices into the first array for the first element of each row, so we can tell where a new row starts.
On sparse matrices it has optimal memory efficiency and fast lookups, the main downside is that adding or removing elements from the matrix requires shifting all three arrays, so it is mostly useful for immutable data.
The graph of Day 11, created with very little effort using the dot utility of graphviz. Because of a stupid parsing error I ended up with a cyclic graph, so this visualization helped in debugging.
The restrictions don't seem very limiting. Why would I ever do this?