changeset 15:6fd4445cbd22

Day 10
author Lewin Bormann <lbo@spheniscida.de>
date Sun, 11 Dec 2022 17:56:27 +0100
parents 4bad3ee77ef2
children a255c0d4996b
files 10/10.jl 10/input.txt 10/test_input.txt
diffstat 3 files changed, 414 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/10/10.jl	Sun Dec 11 17:56:27 2022 +0100
@@ -0,0 +1,122 @@
+
+const test_input = "10/test_input.txt";
+const input = "10/input.txt";
+
+@enum OpType begin
+    Noop
+    Addx
+end
+
+struct Op
+    type::OpType
+    arg::Int
+end
+
+function parse_line(s::S)::Op where {S<:AbstractString}
+    p = split(s, ' ');
+    if length(p) == 1
+        Op(Noop, 0)
+    else
+        Op(Addx, parse(Int, p[2]))
+    end
+end
+
+function parse_input(io::Iter)::Vector{Op} where {Iter}
+    map(parse_line, eachline(io))
+end
+
+function check_register(interest::Vector{Int}, cycle::Int, reg::Int)::Int
+    if length(interest) == 0
+        return 0;
+    end
+    if cycle == interest[begin]
+        popfirst!(interest);
+        cycle * reg
+    else
+        0
+    end
+end
+
+function evaluate(v::Vector{Op})::Int
+    interest = [20, 60, 100, 140, 180, 220];
+    reg = 1;
+    i = 1;
+    cc = 0;
+    acc = 0;
+    L = length(v);
+    for i = 1:L
+        op = v[i];
+        cc += 1;
+        acc += check_register(interest, cc, reg);
+        if op.type == Noop
+            # pass
+        elseif op.type == Addx
+            # first cycle;
+
+            # second cycle;
+            cc += 1;
+            acc += check_register(interest, cc, reg);
+            # done.
+            reg += op.arg;
+        end
+    end
+    acc
+end
+
+function draw_pixel(crt::Matrix{Bool}, cycle::Int, reg::Int)
+    row, col = (div(cycle, 40)), ((cycle)%40);
+    reg_ = (reg)%40;
+    if abs((col)-reg_) < 2
+        crt[row+1, col+1] = true;
+    end
+end
+
+function draw_crt(v::Vector{Op})::Matrix{Bool}
+    crt = zeros(Bool, 6, 40);
+    cc = 0;
+    reg = 1;
+    L = length(v);
+    for i = 1:L
+        op = v[i];
+        cc += 1;
+        draw_pixel(crt, cc, reg);
+        if op.type == Noop
+            continue
+        elseif op.type == Addx
+            # first cycle;
+
+            # second cycle;
+            cc += 1;
+            # done.
+            reg += op.arg;
+            draw_pixel(crt, cc, reg);
+        end
+    end
+    crt
+end
+
+println("part 1:");
+println("test:");
+open(test_input; read=true) do fh
+    println(evaluate(parse_input(fh)))
+end
+println("input:");
+open(input; read=true) do fh
+    println(evaluate(parse_input(fh)))
+end
+
+println("part 2:");
+println("test:");
+open(test_input; read=true) do fh
+    m = (draw_crt(parse_input(fh)));
+    for r in eachrow(m)
+        println(r);
+    end
+end
+println("input:");
+open(input; read=true) do fh
+    m = (draw_crt(parse_input(fh)));
+    for r in eachrow(m)
+        println(r);
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/10/input.txt	Sun Dec 11 17:56:27 2022 +0100
@@ -0,0 +1,146 @@
+noop
+addx 5
+addx -2
+noop
+noop
+addx 7
+addx 15
+addx -14
+addx 2
+addx 7
+noop
+addx -2
+noop
+addx 3
+addx 4
+noop
+noop
+addx 5
+noop
+noop
+addx 1
+addx 2
+addx 5
+addx -40
+noop
+addx 5
+addx 2
+addx 15
+noop
+addx -10
+addx 3
+noop
+addx 2
+addx -15
+addx 20
+addx -2
+addx 2
+addx 5
+addx 3
+addx -2
+noop
+noop
+noop
+addx 5
+addx 2
+addx 5
+addx -38
+addx 3
+noop
+addx 2
+addx 5
+noop
+noop
+addx -2
+addx 5
+addx 2
+addx -2
+noop
+addx 7
+noop
+addx 10
+addx -5
+noop
+noop
+noop
+addx -15
+addx 22
+addx 3
+noop
+noop
+addx 2
+addx -37
+noop
+noop
+addx 13
+addx -10
+noop
+addx -5
+addx 10
+addx 5
+addx 2
+addx -6
+addx 11
+addx -2
+addx 2
+addx 5
+addx 3
+noop
+addx 3
+addx -2
+noop
+addx 6
+addx -22
+addx 23
+addx -38
+noop
+addx 7
+noop
+addx 5
+noop
+noop
+noop
+addx 9
+addx -8
+addx 2
+addx 7
+noop
+noop
+addx 2
+addx -4
+addx 5
+addx 5
+addx 2
+addx -26
+addx 31
+noop
+addx 3
+noop
+addx -40
+addx 7
+noop
+noop
+noop
+noop
+addx 2
+addx 4
+noop
+addx -1
+addx 5
+noop
+addx 1
+noop
+addx 2
+addx 5
+addx 2
+noop
+noop
+noop
+addx 5
+addx 1
+noop
+addx 4
+addx 3
+noop
+addx -24
+noop
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/10/test_input.txt	Sun Dec 11 17:56:27 2022 +0100
@@ -0,0 +1,146 @@
+addx 15
+addx -11
+addx 6
+addx -3
+addx 5
+addx -1
+addx -8
+addx 13
+addx 4
+noop
+addx -1
+addx 5
+addx -1
+addx 5
+addx -1
+addx 5
+addx -1
+addx 5
+addx -1
+addx -35
+addx 1
+addx 24
+addx -19
+addx 1
+addx 16
+addx -11
+noop
+noop
+addx 21
+addx -15
+noop
+noop
+addx -3
+addx 9
+addx 1
+addx -3
+addx 8
+addx 1
+addx 5
+noop
+noop
+noop
+noop
+noop
+addx -36
+noop
+addx 1
+addx 7
+noop
+noop
+noop
+addx 2
+addx 6
+noop
+noop
+noop
+noop
+noop
+addx 1
+noop
+noop
+addx 7
+addx 1
+noop
+addx -13
+addx 13
+addx 7
+noop
+addx 1
+addx -33
+noop
+noop
+noop
+addx 2
+noop
+noop
+noop
+addx 8
+noop
+addx -1
+addx 2
+addx 1
+noop
+addx 17
+addx -9
+addx 1
+addx 1
+addx -3
+addx 11
+noop
+noop
+addx 1
+noop
+addx 1
+noop
+noop
+addx -13
+addx -19
+addx 1
+addx 3
+addx 26
+addx -30
+addx 12
+addx -1
+addx 3
+addx 1
+noop
+noop
+noop
+addx -9
+addx 18
+addx 1
+addx 2
+noop
+noop
+addx 9
+noop
+noop
+noop
+addx -1
+addx 2
+addx -37
+addx 1
+addx 3
+noop
+addx 15
+addx -21
+addx 22
+addx -6
+addx 1
+noop
+addx 2
+addx 1
+noop
+addx -10
+noop
+noop
+addx 20
+addx 1
+addx 2
+addx 2
+addx -6
+addx -11
+noop
+noop
+noop