Mercurial > lbo > hg > aoc22
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