Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us
Notesclub

day01

day01.livemd

day01

Setup

Mix.install([
  {:kino, "~> 0.5.0"}
])
sample_text = Kino.Input.textarea("sample")
input_text = Kino.Input.textarea("input")
sample = Kino.Input.read(sample_text)
input = Kino.Input.read(input_text)
defmodule Shared do
  def find_complement(value, list, target) do
    if (target - value) in list do
      value
    end
  end
end

part a

list =
  input
  |> String.split("\n", trim: true)
  |> Enum.map(&String.to_integer/1)
  |> Enum.sort()

for x <- list do
  Shared.find_complement(x, list, 2020)
end
|> Enum.reject(&amp;is_nil/1)
|> Enum.product()

part b

list =
  input
  |> String.split("\n", trim: true)
  |> Enum.map(&amp;String.to_integer/1)
  |> Enum.sort()

for x <- list do
  {x,
   Enum.map(list, fn
     value when value <= x -> nil
     value -> value
   end)
   |> Enum.reject(&amp;is_nil/1)}
end
|> Enum.map(fn {init, array} ->
  for x <- array do
    Shared.find_complement(x, array, 2020 - init)
  end
  |> Enum.reject(&amp;is_nil/1)
  |> then(fn
    a when a == [] -> nil
    a -> [init | a]
  end)
end)
|> Enum.reject(&amp;is_nil/1)
|> then(&amp;hd/1)
|> Enum.product()