This is the Day 3 puzzle for #AoC2022 with Rye. Rye has reduce and fold functions. The difference is, that reduce doesn't accept initial value, so it can be less verbose in some situations, but you need an initial value many times, like when you are adding things up.
Initial solution used fold to sum the priorities up, hence it needed initial zero and also an accumulator word (priority, priority1). You don't need to define a word for current value as usually with reduce/fold, because it's injected into code block.
I don't particularly like fold name, because it sounds like CS (computer science) "speak", not something that a person would intuitively name this functionality.
I'm not sure I will find any better name thou, but I thought today it would make sense to make a specialized function for summing/joining things up. That way I can get rid of the initial value (it can be inferred from the type of first returned value) and the accumulator word as I don't need that " + priority ".
It also better expresses intent than reduce or fold. I once philosophized (to myself mostly), that map, reduce and filter, (seek, purge, ...) are better than foreach, because they better define intent, while you can do anything inside foreach, like you could do everything with goto ("foreach is the new goto" - you can quote me on this 😎). Well add-up (or sum-up?) expresses intent even more precisely than fold would in such cases.
You can see a megathread with other solutions on reddit, there is also my solution.
I added split-every, and intersect functions to Rye for this one. You could say intersect comes from Rebol, which had intersect, union and difference functions that worked over blocks and strings. Same will be true for Rye.
At first I thought I will need a function, to elegantly deconstruct a block or set two words to the values returned from split-every (and I will add deconstruct function at some point) but it wouldn't make much difference here.
Follow rye's github for more ...
Komentarji
Objavite komentar