AdventOfCode/2020/elixir/day6
Adam Millerchip 39c28b5897 Move 2020 elixir solutions to 2020/elixir in prep for zig 2022-08-11 16:22:22 +09:00
..
README Move 2020 elixir solutions to 2020/elixir in prep for zig 2022-08-11 16:22:22 +09:00
day6part1.exs Move 2020 elixir solutions to 2020/elixir in prep for zig 2022-08-11 16:22:22 +09:00
day6part2.exs Move 2020 elixir solutions to 2020/elixir in prep for zig 2022-08-11 16:22:22 +09:00
input Move 2020 elixir solutions to 2020/elixir in prep for zig 2022-08-11 16:22:22 +09:00

README

Day 6 Notes

+--------+
| Part 1 |
+--------+

$ elixir day6part1.exs
6585

Thoughts:

So far I've read the whole file into memory. I initially did that here to get the answer 
quickly to preserve my leaderboard position 🌟, but then refactored to use File.stream!
to parse the file line-by-line.

This meant using Stream.chunk_by to sort into groups.
Join all the answers together, and use Enum.frequencies/1 to count all the answers (discarding
newlines).

+--------+
| Part 2 |
+--------+

$ elixir day6part2.exs
3276

Thoughts:

Not stripping the newlines came in handy here, because I could use them to count how
many people are in each group. Then I could just count the frequencies that were answered
by the whole group, and finally sum those results.


+------------------+
| Overall Thoughts |
+------------------+

I didn't get an accurate time for this one due to having lunch between parts 1 and 2 🍝.
Got the answer under an hour including lunch, but more like two hours including streaming
the file and tidying up.

Using Map.pop/2 to remove an element and return its value at the same time is probably the
most notable thing here?

I wonder if there's a more effective way to parse the stream dynamically and also strip off
the new lines?

** Update **

From other people's answers, taking the intersection of all the replies was the best way
to implement this. Makes sense.

I think I'm succumbing to pressure to complete quickly due to the leaderboard, and just
going with whatever works rather than reading the question properly and working out
what it's *really* asking.