From 9a5568d1cf4535a48a878518bc9bf5550f728158 Mon Sep 17 00:00:00 2001 From: Jeremy Kaplan Date: Mon, 7 Dec 2020 21:19:21 -0800 Subject: [PATCH] Day 8 Part 1 --- 2020/day8/day8.ex | 40 +++ 2020/day8/input | 638 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 678 insertions(+) create mode 100644 2020/day8/day8.ex create mode 100644 2020/day8/input diff --git a/2020/day8/day8.ex b/2020/day8/day8.ex new file mode 100644 index 0000000..ab9e701 --- /dev/null +++ b/2020/day8/day8.ex @@ -0,0 +1,40 @@ +defmodule Day8 do + defp read_input do + Path.expand('input', Path.dirname(__ENV__.file)) + |> File.read!() + end + + defp parse_program(text) do + String.split(String.trim(text), "\n") + |> Enum.map(fn line -> + [op, val] = String.split(line) + {op, String.to_integer(val)} + end) + end + + defp tick(program, pc, acc) do + case Enum.at(program, pc) do + {"nop", _} -> {pc + 1, acc} + {"acc", int} -> {pc + 1, acc + int} + {"jmp", int} -> {pc + int, acc} + end + end + + defp find_loop(program, pc, acc, history) do + {next_pc, next_acc} = tick(program, pc, acc) + count = Map.get(history, next_pc, 0) + + if count > 0 do + acc + else + find_loop(program, next_pc, next_acc, Map.put(history, next_pc, count + 1)) + end + end + + def part1 do + program = parse_program(read_input()) + find_loop(program, 0, 0, %{}) + end +end + +Day8.part1() |> IO.inspect() diff --git a/2020/day8/input b/2020/day8/input new file mode 100644 index 0000000..63b0ff3 --- /dev/null +++ b/2020/day8/input @@ -0,0 +1,638 @@ +acc +48 +acc -15 +jmp +510 +acc -16 +acc -9 +acc +10 +acc +45 +jmp +76 +acc +43 +acc -5 +acc +1 +jmp +306 +jmp +265 +jmp +506 +nop +48 +nop +596 +jmp +212 +acc +30 +jmp +311 +jmp +592 +acc +10 +jmp +1 +jmp +153 +acc +13 +nop +282 +jmp +482 +acc -12 +acc +22 +jmp +294 +acc -14 +acc +13 +nop +471 +acc +26 +jmp -13 +acc +11 +acc +23 +acc +9 +jmp +1 +jmp +158 +acc +20 +acc -3 +jmp +69 +jmp +546 +acc +14 +acc +25 +nop +488 +jmp +502 +acc +14 +acc -11 +acc +25 +acc +0 +jmp +527 +acc +45 +acc +35 +acc +2 +acc +33 +jmp +522 +acc +44 +acc +18 +acc +30 +jmp +429 +jmp +290 +jmp +36 +acc +36 +jmp +366 +acc +0 +acc +39 +acc -16 +jmp +160 +jmp -27 +acc -4 +acc -3 +acc +24 +acc +11 +jmp +321 +jmp +86 +acc +24 +jmp +113 +acc +28 +nop +73 +jmp +47 +jmp +165 +jmp +198 +acc -19 +acc -13 +jmp +297 +nop +175 +nop +328 +jmp +16 +acc -16 +acc -17 +acc -7 +acc +38 +jmp +409 +acc +27 +acc +38 +acc +2 +jmp -63 +jmp +145 +acc +18 +nop -74 +acc +39 +acc -13 +jmp -69 +acc +40 +acc +47 +jmp +16 +acc +9 +acc +13 +jmp +494 +acc +34 +acc +7 +jmp +303 +acc +0 +jmp +474 +acc +33 +acc +41 +acc +25 +acc +31 +jmp -49 +acc -17 +jmp +54 +jmp +172 +acc +30 +acc -13 +acc +13 +jmp +236 +acc +19 +jmp +15 +acc +24 +acc -17 +jmp +7 +acc +40 +acc -7 +acc -13 +jmp -59 +acc -2 +jmp +118 +acc +50 +acc +10 +acc +43 +jmp +41 +jmp +406 +nop +163 +acc +26 +acc +34 +jmp +426 +acc +0 +acc +18 +acc +0 +acc +1 +jmp -117 +acc +42 +jmp +51 +acc +21 +jmp +378 +jmp -73 +jmp +437 +jmp +475 +acc -10 +jmp +418 +jmp +211 +acc +15 +acc +27 +acc +32 +acc +9 +jmp +151 +acc -15 +acc +6 +jmp -88 +acc +14 +acc +15 +jmp +1 +acc +47 +jmp -36 +acc +42 +acc +34 +nop -39 +jmp +329 +acc +24 +acc +3 +jmp +418 +acc +10 +acc -19 +acc +23 +jmp +1 +jmp +326 +nop -49 +acc +19 +jmp +323 +jmp -182 +acc +14 +nop +164 +acc +47 +acc -8 +jmp +111 +acc +10 +nop +240 +acc +21 +jmp +100 +acc +19 +acc +32 +acc -5 +jmp +396 +acc -14 +acc -13 +jmp +18 +nop -11 +acc +40 +acc +27 +jmp +1 +jmp -7 +acc -8 +acc +14 +acc +29 +acc +22 +jmp +146 +nop +355 +jmp +322 +acc +3 +acc +17 +jmp +1 +jmp +258 +jmp +404 +acc -3 +acc +36 +jmp +204 +jmp -3 +acc -11 +acc +11 +jmp +310 +jmp +1 +jmp +308 +acc +11 +jmp +1 +acc +47 +acc -14 +jmp -81 +acc -16 +jmp +1 +acc +28 +acc +32 +jmp +157 +acc -13 +jmp +21 +jmp +312 +jmp +121 +jmp +135 +nop -5 +nop +6 +acc +23 +jmp -136 +acc +10 +acc +7 +jmp +63 +acc +25 +nop -214 +jmp +42 +acc +12 +acc +2 +jmp +1 +acc +16 +acc +47 +jmp -246 +jmp +42 +acc +10 +acc +11 +nop +344 +nop +197 +jmp +190 +jmp +201 +jmp -167 +acc +38 +nop -45 +acc +37 +acc +12 +jmp +1 +jmp -235 +acc +9 +jmp +254 +acc +33 +acc +11 +nop -11 +jmp -131 +nop +22 +acc +29 +jmp +1 +jmp +30 +jmp -121 +acc -8 +nop -115 +acc -16 +acc +15 +jmp +98 +acc +39 +jmp +53 +acc +0 +acc +5 +jmp +139 +acc -12 +acc -13 +jmp +50 +acc +47 +acc -18 +acc +8 +jmp -243 +acc +22 +jmp +188 +acc +5 +acc +46 +acc +25 +jmp +277 +acc -12 +jmp +250 +nop +116 +acc -19 +jmp -178 +acc -3 +acc +21 +nop -163 +jmp -77 +jmp -15 +acc -8 +acc -11 +jmp +129 +acc +32 +acc +46 +nop +88 +jmp -51 +jmp +27 +acc -11 +nop +116 +acc +31 +jmp -4 +acc +41 +jmp -315 +acc +10 +nop -76 +acc +25 +nop -127 +jmp -298 +acc +20 +acc +1 +acc -19 +jmp -125 +acc +9 +acc +40 +jmp +133 +nop -250 +jmp -116 +jmp -189 +acc +50 +jmp +78 +acc -3 +acc +37 +jmp -131 +nop -336 +acc +22 +acc +37 +jmp +94 +acc +43 +jmp -319 +jmp -328 +acc -18 +acc +0 +acc +33 +jmp -4 +acc +16 +jmp +213 +acc -12 +acc +23 +jmp -175 +acc -17 +acc -12 +nop -141 +nop +228 +jmp -244 +acc +11 +acc +12 +nop +220 +nop -184 +jmp +236 +acc +42 +acc +0 +acc +45 +acc +34 +jmp +213 +acc -18 +acc +18 +nop +26 +jmp +150 +nop -293 +nop -277 +jmp -380 +jmp -133 +acc -13 +jmp -108 +acc +39 +jmp +223 +acc +47 +acc +14 +acc +10 +jmp -90 +acc -19 +nop -387 +acc +24 +acc -19 +jmp -203 +acc +4 +jmp -132 +acc +31 +nop -255 +nop +187 +nop +40 +jmp +126 +acc -19 +acc -1 +acc -13 +jmp -147 +acc +0 +jmp -363 +acc -5 +acc -11 +acc +31 +acc +44 +jmp -177 +nop -406 +acc +29 +acc +34 +jmp -174 +acc +8 +acc -6 +nop -367 +acc -8 +jmp +183 +nop -147 +jmp +104 +acc -8 +nop +69 +acc -10 +acc -8 +jmp -384 +acc +20 +acc +39 +acc -16 +acc +2 +jmp -303 +acc -13 +jmp +100 +acc +14 +acc +22 +acc +27 +jmp -354 +acc +1 +acc +39 +acc -7 +jmp -346 +acc -10 +jmp -450 +nop -188 +jmp +5 +jmp +1 +nop -381 +acc +42 +jmp -102 +acc +13 +acc +11 +nop -224 +jmp -213 +acc +46 +jmp +57 +nop +140 +jmp +131 +acc +30 +acc +25 +acc -10 +acc -13 +jmp -78 +jmp -144 +jmp -185 +acc -17 +acc +36 +acc +38 +jmp +144 +nop -4 +acc +9 +acc +17 +acc +19 +jmp +90 +acc +11 +nop -380 +acc +17 +jmp -403 +acc -2 +jmp +94 +acc +32 +acc +45 +nop -249 +jmp -27 +acc +13 +nop -5 +jmp -439 +acc +32 +acc +5 +jmp -478 +acc +43 +jmp -98 +acc -18 +jmp -100 +acc +14 +acc -14 +jmp -329 +acc +46 +acc +5 +jmp -353 +acc -3 +acc +29 +acc +44 +jmp -88 +acc -11 +acc -14 +jmp -100 +nop -441 +acc +2 +acc +25 +acc +4 +jmp +7 +acc -17 +jmp +1 +nop -296 +acc +4 +jmp -132 +jmp -417 +nop -287 +acc +48 +nop -40 +acc -4 +jmp -146 +nop -521 +jmp -183 +acc -13 +acc +22 +jmp +15 +acc +21 +acc +22 +acc +27 +acc +34 +jmp -35 +acc -13 +nop -417 +acc +40 +jmp -114 +acc +4 +acc +20 +acc -1 +acc -9 +jmp -514 +acc +8 +acc -17 +acc +19 +jmp -130 +acc +11 +jmp -250 +nop +58 +acc +36 +acc -3 +acc -5 +jmp -120 +acc +11 +acc +50 +acc -18 +jmp -419 +jmp +1 +nop -446 +acc +22 +acc +28 +jmp -43 +jmp -289 +acc +1 +jmp -421 +jmp +14 +nop -62 +jmp -55 +jmp +1 +acc +5 +acc +26 +acc +0 +jmp -477 +acc +35 +acc -17 +acc +21 +jmp -200 +acc -2 +jmp -128 +jmp -253 +acc +28 +acc +47 +acc +27 +jmp -118 +acc +33 +jmp -228 +acc +41 +jmp -45 +acc +11 +acc -14 +jmp +1 +acc +35 +jmp -118 +acc +13 +acc +37 +jmp -108 +acc +44 +nop -523 +acc +45 +acc +39 +jmp +6 +jmp -582 +jmp -139 +acc -3 +jmp +1 +jmp -9 +acc +36 +acc +3 +acc +49 +jmp -562 +acc +14 +jmp -422 +acc +41 +acc +35 +jmp -582 +acc -11 +acc +0 +jmp -291 +acc -5 +acc -6 +acc +31 +acc -11 +jmp +1