Advent of Code - Day 2

coding-challenge
2018
advent-of-code

#1

Note by the Moderators: This topic is to talk about the Day 2 of the Advent of Code.

For general discussion about the Advent of Code 2018 and links to topics of the other days, see this topic.


This is my todays code:

I’m not quite happy with it though, but it runs in ~4ms/~8ms, so I leave it as is for now.


Advent Of Code 2018
#2

I’m doing my problems in Elixir this year as well: http://github.com/sorentwo/aoc_2018

My solution today seems a little different from the others I’ve seen. I made use of String.myers_difference/2 for the second part:

  def common(addresses) do
    pairings = for add_a <- addresses, add_b <- addresses, add_a != add_b, do: {add_a, add_b}

    Enum.reduce_while(pairings, nil, fn {add_a, add_b}, _ ->
      case String.myers_difference(add_a, add_b) do
        [eq: _, del: << char :: size(8) >>, ins: _, eq: _] ->
          {:halt, String.replace(add_a, IO.chardata_to_string([char]), "")}

        _ -> {:cont, nil}
      end
    end)
  end

There are two other possible edit scripts that could have matched (first character or last character being the difference), but this worked for my inputs.


#3

I’m pretty happy with my solutions so far, especially for Day 2 Part 2 I felt I was able to take advantage of a few things, especially a comprehension to structure it nicely:


Did I cheat at Advent of Code?
#4

I had a lot of fun doing Day 2 Part 2.


I like how this one turned out — reasonably small and clean.

I’ve learned that finding the right functional operation (Enum.find_value in this case) really helps keep the code small (and easy to reason about). (String.myers_difference helped, of course. I wrote my first version with MapSet (and set difference and intersections), which interestingly worked for the example case, but did not work with the large input file, so I ended up using String.myers_difference)