Skip to content

Instantly share code, notes, and snippets.

@bossek
Created December 8, 2019 10:52
Show Gist options
  • Select an option

  • Save bossek/38460c75b203a606e2af854ce459ad10 to your computer and use it in GitHub Desktop.

Select an option

Save bossek/38460c75b203a606e2af854ce459ad10 to your computer and use it in GitHub Desktop.
Advent of Code 2019 Day08
defmodule Day08 do
@x 25
@y 6
def part1 do
read_layers()
|> Enum.min_by(fn layer -> length(Enum.filter(layer, &(&1 == ?0))) end)
|> Enum.group_by(& &1)
|> Map.take([?1, ?2])
|> Map.values()
|> (fn [a, b] -> length(a) * length(b) end).()
end
def part2 do
read_layers()
|> Enum.reduce(&merge/2)
|> Enum.map(fn c -> if c == ?1, do: 0x2588, else: ' ' end)
|> Enum.chunk_every(@x)
|> Enum.intersperse("\n")
end
defp merge(down, top) do
top
|> Enum.zip(down)
|> Enum.map(fn {top, down} -> if top != ?2, do: top, else: down end)
end
defp read_layers do
"data/day08.txt"
|> File.read!()
|> String.trim()
|> String.to_charlist()
|> Enum.chunk_every(@x * @y)
end
end
IO.puts("part 1: #{Day08.part1()}")
IO.puts("part 2:\n#{Day08.part2()}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment