defmodule AdventOfCode.Y2020.Day8 do
@moduledoc """
Problem Link: https://adventofcode.com/2020/day/8
"""
use AdventOfCode.Helpers.InputReader, year: 2020, day: 8
def run_1, do: input!() |> process() |> exec() |> elem(1)
def run_2, do: input!() |> process() |> fix()
def run, do: {run_1(), run_2()}
def process(input), do: Enum.map(String.split(input, "\n"), &parse/1)
defp exec(prog), do: exec(prog, 0, 0, %{})
defp exec(_, cur, acc, hist) when is_map_key(hist, cur), do: {:cont, acc}
defp exec(prog, cur, acc, _) when cur >= length(prog), do: {:halt, acc}
defp exec(prog, cur, acc, hist) do
case Enum.at(prog, cur) do
{:acc, val} -> exec(prog, cur + 1, acc + val, Map.put(hist, cur, true))
{:nop, _} -> exec(prog, cur + 1, acc, Map.put(hist, cur, true))
This file has been truncated. show original