Skip Navigation

🌲 - 2024 DAY 1 SOLUTIONS -🌲

Day 1: Historian Hysteria

Megathread guidelines

  • Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
  • You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://blocks.programming.dev/ if you prefer sending it through a URL

FAQ

You're viewing a single thread.

39 comments
  • I'm late to the party, as usual. Damned timezones. This year I'm going to tackle with a small handful of languages, but primarily Elixir and Gleam. This is my first time trying this languages in earnest, so expect some terrible, inefficient and totally unidiomatic code!
    Here's day one:

    Elixir

     elixir
        
    part_one =
      File.read!("input.in")
      |> String.split("\n", trim: true)
      |> Enum.map(fn line ->
        line
        |> String.split()
        |> Enum.map(&String.to_integer/1)
      end)
      |> Enum.reduce({[], []}, fn [first, second], {list1, list2} ->
        {[first | list1], [second | list2]}
      end)
      |> then(fn {list1, list2} ->
        {Enum.sort(list1), Enum.sort(list2)}
      end)
      |> then(fn {list1, list2} ->
        Enum.zip(list1, list2)
        |> Enum.map(fn {x, y} -> abs(x - y) end)
      end)
      |> Enum.sum()
    
    part_two =
      File.read!("input.in")
      |> String.split("\n", trim: true)
      |> Enum.map(fn line ->
        line
        |> String.split()
        |> Enum.map(&String.to_integer/1)
      end)
      |> Enum.reduce({[], []}, fn [first, second], {list1, list2} ->
        {[first | list1], [second | list2]}
      end)
      |> then(fn {list1, list2} ->
        Enum.map(list1, fn line ->
          line * Enum.count(list2, fn x -> x === line end)
        end)
        |> Enum.sum()
      end)
    
    IO.inspect(part_one)
    IO.inspect(part_two)
    
      
39 comments