Week 6: Advent of code. Send help.
I'm attempting Advent of Code in Rust this year. I usually don't make it far in a language I know well so this will be a challenge. My solutions live here.
Day 1: The functional parts of Rust are helpful. Itertools has loads of additional functionality for them, such as
tuple_windows
.Day 2: Another opportunity for iterators.
fold()
ing an iterator is very similar toArray.prototype.reduce()
in JavaScript.Day 3: An opportunity to use bitwise operators that flew so far over my head it was barely visible. Time to read more about bit shifting and bitwise operators. The borrow checker made things difficult today.
Day 3: I saw a solution that used
partition()
to turn an iterable into two vectors based upon a function producting a boolean.Day 3: BitXor (
^
in Rust) is a fun opertor is you want to invert a bit based on a boolean. I went straight in with&
which was the wrong thing.Day 4: Vectors have a
retain
method which takes a boolean returning closure and removed entries in place. Really handy.I went back to doing a bit of JavaScript. This is the first time I've come back and been frustrated by some aspects of the language. Do you want a
for..of
loop or afor..in
loop? No idea, time to open DuckDuckGo again. It's a right pain.Day 5: The borrow checker realised I had got it wrong before I did. I'm really enjoying using Rust and can see why it's so popular in developer surveys.
Day 5: If you want to iterate over a range in Rust you type something like this:
2..=4
which will give you an iterator with the values2, 3, 4
. If you want to go backwards you can't give it this:4..=2
. It won't iterate at all and you won't know why your Advent of Code solution isn't working. You need to use2..=4.rev()
. This is slightly annoying.Advent of code has encouraged me to start LeetCode again. Send help.