add solutions for day 9 to 12
This commit is contained in:
parent
76514a78d5
commit
f8f82e80b2
138
data/day_10.txt
Normal file
138
data/day_10.txt
Normal file
@ -0,0 +1,138 @@
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx 29
|
||||
addx -28
|
||||
addx 5
|
||||
addx -1
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx 12
|
||||
addx -6
|
||||
noop
|
||||
addx 4
|
||||
addx -1
|
||||
addx 1
|
||||
addx 5
|
||||
addx -31
|
||||
addx 32
|
||||
addx 4
|
||||
addx 1
|
||||
noop
|
||||
addx -38
|
||||
addx 5
|
||||
addx 2
|
||||
addx 3
|
||||
addx -2
|
||||
addx 2
|
||||
noop
|
||||
addx 3
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx 3
|
||||
noop
|
||||
addx 2
|
||||
addx 3
|
||||
noop
|
||||
addx 2
|
||||
addx -32
|
||||
addx 33
|
||||
addx -20
|
||||
addx 27
|
||||
addx -39
|
||||
addx 1
|
||||
noop
|
||||
addx 5
|
||||
addx 3
|
||||
noop
|
||||
addx 2
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
addx -2
|
||||
addx 5
|
||||
addx 2
|
||||
addx -16
|
||||
addx 21
|
||||
addx -1
|
||||
addx 1
|
||||
noop
|
||||
addx 3
|
||||
addx 5
|
||||
addx -22
|
||||
addx 26
|
||||
addx -39
|
||||
noop
|
||||
addx 5
|
||||
addx -2
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx 23
|
||||
noop
|
||||
addx -18
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
addx 2
|
||||
noop
|
||||
noop
|
||||
addx 7
|
||||
addx 3
|
||||
noop
|
||||
addx 2
|
||||
addx -27
|
||||
addx 28
|
||||
addx 5
|
||||
addx -11
|
||||
addx -27
|
||||
noop
|
||||
noop
|
||||
addx 3
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx 27
|
||||
addx -26
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx 4
|
||||
addx -3
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx 3
|
||||
addx -2
|
||||
addx 2
|
||||
noop
|
||||
addx -33
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 31
|
||||
addx -26
|
||||
addx 6
|
||||
noop
|
||||
noop
|
||||
addx -1
|
||||
noop
|
||||
addx 3
|
||||
addx 5
|
||||
addx 3
|
||||
noop
|
||||
addx -1
|
||||
addx 5
|
||||
addx 1
|
||||
addx -12
|
||||
addx 17
|
||||
addx -1
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
addx 1
|
||||
noop
|
||||
noop
|
55
data/day_11.txt
Normal file
55
data/day_11.txt
Normal file
@ -0,0 +1,55 @@
|
||||
Monkey 0:
|
||||
Starting items: 71, 56, 50, 73
|
||||
Operation: new = old * 11
|
||||
Test: divisible by 13
|
||||
If true: throw to monkey 1
|
||||
If false: throw to monkey 7
|
||||
|
||||
Monkey 1:
|
||||
Starting items: 70, 89, 82
|
||||
Operation: new = old + 1
|
||||
Test: divisible by 7
|
||||
If true: throw to monkey 3
|
||||
If false: throw to monkey 6
|
||||
|
||||
Monkey 2:
|
||||
Starting items: 52, 95
|
||||
Operation: new = old * old
|
||||
Test: divisible by 3
|
||||
If true: throw to monkey 5
|
||||
If false: throw to monkey 4
|
||||
|
||||
Monkey 3:
|
||||
Starting items: 94, 64, 69, 87, 70
|
||||
Operation: new = old + 2
|
||||
Test: divisible by 19
|
||||
If true: throw to monkey 2
|
||||
If false: throw to monkey 6
|
||||
|
||||
Monkey 4:
|
||||
Starting items: 98, 72, 98, 53, 97, 51
|
||||
Operation: new = old + 6
|
||||
Test: divisible by 5
|
||||
If true: throw to monkey 0
|
||||
If false: throw to monkey 5
|
||||
|
||||
Monkey 5:
|
||||
Starting items: 79
|
||||
Operation: new = old + 7
|
||||
Test: divisible by 2
|
||||
If true: throw to monkey 7
|
||||
If false: throw to monkey 0
|
||||
|
||||
Monkey 6:
|
||||
Starting items: 77, 55, 63, 93, 66, 90, 88, 71
|
||||
Operation: new = old * 7
|
||||
Test: divisible by 11
|
||||
If true: throw to monkey 2
|
||||
If false: throw to monkey 4
|
||||
|
||||
Monkey 7:
|
||||
Starting items: 54, 97, 87, 70, 59, 82, 59
|
||||
Operation: new = old + 8
|
||||
Test: divisible by 17
|
||||
If true: throw to monkey 1
|
||||
If false: throw to monkey 3
|
41
data/day_12.txt
Normal file
41
data/day_12.txt
Normal file
@ -0,0 +1,41 @@
|
||||
abaaaaacccccccccccccccccccccccccccccccccccccccaaaaaaaccccaaaaaaaaaaaaaaaaacccccaaaaaacccccccccccccccccccccccaaaaaaaaccccccccccccccccccccccccccccccccaaaaaa
|
||||
abaaaaaacccaaaacccccccccccccccccccccccaccccccccaaaaaaaaccaaaaaaaaaaaaaaaaccccccaaaaaacccccccccccccccccccccccccaaaaccccccccccccccccccccccccccccccccccaaaaaa
|
||||
abaaaaaacccaaaacccccccccccccccccaaaaaaaacccccccaaaaaaaaacaaaaaaaaaaaaacccccccccaaaaacccccccccccccccccccccccccaaaaacccccccccccccccccccaaaccccccccccccaaaaaa
|
||||
abaaacaccccaaaaccccccccccccccccccaaaaaacccccccccaaaaaaaccccaaaaaaaaaaacccccccccaaaaacccccccccccccccccccccccccaacaaaccccccccccccccccccaaacccccccccccccccaaa
|
||||
abaaacccccccaaacccccccccccaacccccaaaaaaccccccccaaaaaaccccccaacaaaaaaaacccccccccccccccccccccccaaccccccccccccccacccaaaaacccccccccaaccccaaacccccccccccccccaaa
|
||||
abccccccccccccccccccccccccaaaaccaaaaaaaacccccccaaaaaaaccccccccaaaaaaaaaccccccccccaacccccccccaaaccccccccccccccccccacaaacccccccccaaaaccaaacccccccccccccccaac
|
||||
abccccccccccccccccccccccaaaaaacaaaaaaaaaaccccccaaccaaaaacccccaaaaccaaaaccccccccccaaacaacccccaaacaaacccaaccccccccaaaaaaaacccccccaaaaakkkkkkcccccccccccccccc
|
||||
abccccccccccccccccccccccaaaaaccaaaaaaaaaacccccccccccaaaaaaccccacccaaaaaccccccccccaaaaaaccaaaaaaaaaaaaaaaccccccccaaaaaaaaccccccccaaajkkkkkkkaccccccaacccccc
|
||||
abcccccccccccccccccccccccaaaaacacacaaaccccccccccccccaaaaaaccccccccaaaacccccccccaaaaaaacccaaaaaaaaaaaaaaaaaccccccccaaaaaccccccccccjjjkkkkkkkkccaaaaaacccccc
|
||||
abcccccccccccccccccccccccaacaacccccaaacccaccccccccccaaaaaaccccccccaaaacccccccccaaaaaaacccccaaaaaacaaaaaaaacccccccaaaaacccccccjjjjjjjooopppkkkcaaaaaaaccccc
|
||||
abcccccccccccccccccaacaacccccccccccaaaaaaacccccccccccaaaaacccccccccccccccccccccccaaaaaaccccaaaaaaccaaaaaaacccccccaaaaaacciijjjjjjjjoooopppkkkcaaaaaaaacccc
|
||||
abccccccccccaaaccccaaaaacccccccccccccaaaaacccccccccccaaaaccccccccccccccccccccccccaacaaaccccaaaaaaacaaaaacccccccccaccaaaciiiijjjjjjoooopppppkllcaaaaaaacccc
|
||||
abccaaccccccaaaaacaaaaacccccccccccccaaaaaacccccccccccccccccccccccccccccccccccccccaacccccccaaaacaaaaaaaaacccaaccccaaaaaciiiiinoooooooouuuupplllaaaaaacccccc
|
||||
abcaaacccccaaaaaacaaaaaacccccccccccaaaaaaaaccccccccaacaccccccccccccccccccccccccccccccccccccaccccccccccaaccaaaccccaaaaaciiinnnooooooouuuuuppplllaaacacccccc
|
||||
abaaaaaacccaaaaaacccaaaacccccccccccaaaaaaaaccccccccaaaaccccccccccccccccccccccccccccccccccccccccccccccccaaaaacaacaaaaaaiiinnnnntttoouuuuuupppllllcccccccccc
|
||||
abaaaaaaccccaaaaacccaaccccccccccacccccaaccccccccccaaaaaccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaacaaaaaaiiinnnnttttuuuuxxuuupppllllccccccccc
|
||||
abaaaaacccccaacaaccccccccccccccaaaccccaacccccaacccaaaaaacccccccccccccccccccccccccccccccccccccccccccccccccaaaaaccaaaaaaiiinnnttttxxuuxxyyuuppppllllcccccccc
|
||||
abaaaacccccccccccccccccccccaaacaaaccccccaaacaaaaccacaaaacccccccccccccccccccccccccccccccccccaacccccccccccaaaaaccccaaaccciinnntttxxxxxxxyyvvvqqqqqlllccccccc
|
||||
abaaaaaccccccccccccccccccccaaaaaaaaaacccaaaaaaacccccaaccccccccccccccccccccccccccccccccccccaaacccccccccccaacaaaccccccccciiinntttxxxxxxxyyvvvvvqqqqljjcccccc
|
||||
abccaaaccaccccccccaaacccccccaaaaaaaaaccccaaaaaacccccccccccccccccccccccccccccccaacccccccaaaaacaaccccccccccccaacccccccccchhinnnttxxxxxxyyyyyvvvvqqqjjjcccccc
|
||||
SbccccaaaacccccccaaaaaacccccccaaaaaccccccaaaaaaaaccccccccccccccccccccaaccccccaaaaccccccaaaaaaaacccccccccccccccccccccccchhhnnntttxxxxEzyyyyyvvvqqqjjjcccccc
|
||||
abccccaaaacccccccaaaaaaccccccaaaaaacccccaaaaaaaaaacccccccccccccccccccaaccccccaaaaccccccccaaaaacccccccccccccccccccccccccchhhnntttxxxyyyyyyyvvvvqqqjjjcccccc
|
||||
abcccaaaaaaccccccaaaaaacccccaaaaaaaccccaaaaaaaaaacccccccccccccccccaaaaaaaacccaaaacccccccaaaaaccccccccccccccccccccccccccchhmmmttxxxyyyyyyvvvvvqqqjjjdcccccc
|
||||
abcccaaaaaacccccccaaaaacccccaaacaaacaaaaaaaaaaccccccccccccaaacccccaaaaaaaaccccccccccccccaacaaacccccccaacaaacccccccccccchhhmmmtswwwyyyyyyvvvqqqqjjjjdddcccc
|
||||
abcccccaacccccccccaacaacccccccccccacaaaaaccaaaccccccccccaaaaacccccccaaaacccccccccccccccccccaaccccccccaaaaaacccccccccccchhhmmssswwwwwwyyywvrqqqjjjjdddccccc
|
||||
abcccccccccccccccccccccccccccccccccaaaaaccccaaccccccccacaaaaaacccccaaaaacccccccccccccccccccccccccccccaaaaaacccccccccccchhhmmssswwwwwwywywwrrqjjjjddddccccc
|
||||
abcccccccccccccccccccccccccccccccccaaaaaccccccccaaacaaacaaaaaacccccaaaaaaccccccccccccccccccccccccccccaaaaaaaccccccccccchhmmmsssswwsswwwwwwrrkkjjddddcccccc
|
||||
abccccccccccccccccccccccccccccccccccaaaaacccccccaaaaaaacaaaaaccccccaaccaacccccccccccaaccccccccccccccaaaaaaaacaacaaccccchhhmmmsssssssswwwwrrrkkjddddaaccccc
|
||||
abcccccccccccccccccccccccccaaaaaccccaacccccccccccaaaaaacaaaaacccccccccccccaacccccccaaaaaacccccccccccaaaaaaaacaaaaaccccchhgmmmmssssssrrwwwrrrkkddddaaaccccc
|
||||
abcccccccccccccccccccccccccaaaaacccccccccccccccccaaaaaaaacccccccccccccccaaaaaaccccccaaaaaccccaaccccccccaaacccaaaaaaccccgggmmmmmmllllrrrrrrrkkkeedaaaaccccc
|
||||
abcccccccccccaaccccccccccccaaaaaacccccccccccccccaaaaaaaaacccccccccccccccaaaaaaccccaaaaaaacccaaaacccccccaaccccaaaaaaccccggggmmmmllllllrrrrrkkkkeedaaaaacccc
|
||||
abcccccccccccaaacaacaaaccccaaaaaaccccccccccccccaaaaaaaaaacccccccccccccccaaaaaaccccaaaaaaaaccaaaacccccccccccccaaaaaccccccgggggglllllllllrrkkkkeeeaaaaaacccc
|
||||
abcccccccccccaaaaaacaaaacccaaaaaaccccccccccccccaaacaaaaaaccccccccccccccccaaaaaccccaaaaaaaaccaaaacccccccccccaaccaaaccccccgggggggggffflllkkkkkkeeeaaaaaacccc
|
||||
abaccccccccaaaaaaaccaaaacccccaaacccccccccccccccccccaaaaaacaccccccccaaccccaaaacccccccaaacacccccccccccccccaaaaaccccccccccccccgggggffffflllkkkkeeeccaaacccccc
|
||||
abaccccccccaaaaaaaccaaacccccccccccccccccaaaccccccccaaacaaaaaccccccaaacccccccccccccaaaacccccccccccccccccccaaaaaccccccccccccccccccaffffffkkkeeeeeccaaccccccc
|
||||
abaaaccccccccaaaaaaccccccccccccccccccccaaaaaacccccccaaaaaaaacaaaacaaacccccccccaaaaaacccccccccccccccccccccaaaaaccccccccccccccccccccaffffffeeeeecccccccccccc
|
||||
abaacccccccccaacaaaccccccccccccccccccccaaaaaaccccccccaaaaaccaaaaaaaaacccccccccaaaaaaaaccccccccccaaccccccaaaaacccccccccccccccccccccaaaffffeeeecccccccccccaa
|
||||
abaacccccccccaaccccccccccccccccaaccccccaaaaacaaccaacccaaaaacaaaaaaaaacccccccccaaaaaaaaccccccaaacaacccccccccaacccccccccccccccccccccaaaccceaecccccccccccccaa
|
||||
abaacccccccccccccccccccccccccccaaaaaacccaaaaaaaaaaaccaaacaaccaaaaaaaaaaaaacccccaaaaaaacccccccaaaaaccccccccccccccccccccccccccccccccaaacccccccccccccccaaacaa
|
||||
abcccccccccccccccccccccccccccccaaaaaccccaacaacaaaaacccaaccccccaaaaaaaaaaaacccccaaaaacccccccccaaaaaaaccccccccccccccccccccccccccccccaaacccccccccccccccaaaaaa
|
||||
abcccccccccccccccccccccccccccaaaaaaaccccccccaaaaaaaaccccccccccaaaaaaaaaaccccccaaaaaaccccccccaaaaaaaaccccccccccccccccccccccccccccccccccccccccccccccccaaaaaa
|
2000
data/day_9.txt
Normal file
2000
data/day_9.txt
Normal file
File diff suppressed because it is too large
Load Diff
53
src/day_10.jl
Normal file
53
src/day_10.jl
Normal file
@ -0,0 +1,53 @@
|
||||
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
|
||||
import .Aoc: @aoc
|
||||
|
||||
function p1(input::Vector{String})
|
||||
x = 1
|
||||
cycles = []
|
||||
for i in input
|
||||
if i == "noop"
|
||||
push!(cycles, x)
|
||||
else
|
||||
num = parse(Int, split(i)[2])
|
||||
push!(cycles, x)
|
||||
push!(cycles, x)
|
||||
x += num
|
||||
end
|
||||
end
|
||||
sum = 0
|
||||
for i in 20:40:220
|
||||
sum += cycles[i] * i
|
||||
end
|
||||
sum
|
||||
end
|
||||
|
||||
|
||||
function p2(input::Vector{String})
|
||||
x = 1
|
||||
cycles = []
|
||||
for i in input
|
||||
if i == "noop"
|
||||
push!(cycles, x)
|
||||
else
|
||||
num = parse(Int, split(i)[2])
|
||||
push!(cycles, x)
|
||||
push!(cycles, x)
|
||||
x += num
|
||||
end
|
||||
end
|
||||
cycle = 0
|
||||
while cycle < length(cycles)
|
||||
x = cycles[cycle+1]
|
||||
if abs(x - (cycle%40)) < 2
|
||||
print("#")
|
||||
else
|
||||
print(".")
|
||||
end
|
||||
cycle+=1
|
||||
if cycle % 40 == 0
|
||||
print("\n")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@aoc(2022, 10)
|
94
src/day_11.jl
Normal file
94
src/day_11.jl
Normal file
@ -0,0 +1,94 @@
|
||||
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
|
||||
import .Aoc: @aoc
|
||||
|
||||
function parse_monkeys(input::Vector{String})
|
||||
curr_monkey = -1
|
||||
monkeys = Dict()
|
||||
ops = Dict()
|
||||
tests = Dict()
|
||||
conditions = Dict()
|
||||
for i in input
|
||||
line = strip(i)
|
||||
if line == ""
|
||||
continue
|
||||
end
|
||||
if line[1:6] == "Monkey"
|
||||
curr_monkey += 1
|
||||
continue
|
||||
end
|
||||
if line[1:8] == "Starting"
|
||||
items = split(line, ':')[2]
|
||||
items = split(items, ',')
|
||||
items = map((x) -> parse(Int, strip(x)), items)
|
||||
monkeys[curr_monkey] = items
|
||||
continue
|
||||
end
|
||||
if line[1:9] == "Operation"
|
||||
op = strip(split(line, '=')[2])
|
||||
op = split(op)
|
||||
ops[curr_monkey] = op
|
||||
continue
|
||||
end
|
||||
if line[1:4] == "Test"
|
||||
div_by = parse(Int, split(line)[end])
|
||||
tests[curr_monkey] = [div_by]
|
||||
continue
|
||||
end
|
||||
if line[1:2] == "If"
|
||||
to = parse(Int, split(line)[end])
|
||||
push!(tests[curr_monkey], to)
|
||||
continue
|
||||
end
|
||||
end
|
||||
(monkeys, ops, tests, conditions)
|
||||
end
|
||||
|
||||
function run(turns, monkeys, ops, tests, conditions, worry_level_fn)
|
||||
inspects = Dict()
|
||||
|
||||
for turn in 1:turns
|
||||
for m in 0:length(keys(monkeys))-1
|
||||
while length(monkeys[m]) > 0
|
||||
if haskey(inspects, m)
|
||||
inspects[m] += 1
|
||||
else
|
||||
inspects[m] = 1
|
||||
end
|
||||
wl = popfirst!(monkeys[m])
|
||||
op = ops[m]
|
||||
operand1 = op[1] == "old" ? wl : parse(Int, op[1])
|
||||
operand2 = op[3] == "old" ? wl : parse(Int, op[3])
|
||||
operator = op[2]
|
||||
wl = eval(Meta.parse("$operand1 $operator $operand2"))
|
||||
wl = worry_level_fn(wl)
|
||||
if wl % tests[m][1] == 0
|
||||
push!(monkeys[tests[m][2]], wl)
|
||||
else
|
||||
push!(monkeys[tests[m][3]], wl)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
inspects
|
||||
end
|
||||
|
||||
function p1(input::Vector{String})
|
||||
monkeys, ops, tests, conditions = parse_monkeys(input)
|
||||
inspections = run(20, monkeys, ops, tests, conditions, x -> x % 3)
|
||||
res = sort(collect(values(inspections)))[end-1:end]
|
||||
res[1] * res[2]
|
||||
end
|
||||
|
||||
|
||||
function p2(input::Vector{String})
|
||||
monkeys, ops, tests, conditions = parse_monkeys(input)
|
||||
lcm = 1
|
||||
for i in values(tests)
|
||||
lcm *= i[1]
|
||||
end
|
||||
inspections = run(10000, monkeys, ops, tests, conditions, x -> x % lcm)
|
||||
res = sort(collect(values(inspections)))[end-1:end]
|
||||
res[1] * res[2]
|
||||
end
|
||||
|
||||
@aoc(2022, 11)
|
47
src/day_12.jl
Normal file
47
src/day_12.jl
Normal file
@ -0,0 +1,47 @@
|
||||
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
|
||||
import .Aoc: @aoc
|
||||
using Graphs
|
||||
|
||||
directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]
|
||||
|
||||
function build_graph(input::Vector{String})
|
||||
grid = hcat(collect.(input)...)
|
||||
|
||||
start = findfirst(==('S'), grid)
|
||||
dest = findfirst(==('E'), grid)
|
||||
grid[start] = 'a'
|
||||
grid[dest] = 'z'
|
||||
|
||||
grid = map(x -> x - 'a', grid)
|
||||
graph = SimpleDiGraph(length(grid))
|
||||
|
||||
for (i, h) in enumerate(grid)
|
||||
ic = CartesianIndices(grid)[i]
|
||||
|
||||
neighs = map(x -> ic + CartesianIndex(x), directions)
|
||||
for d in filter(x -> checkbounds(Bool, grid, x), neighs)
|
||||
if grid[d] <= h+1
|
||||
add_edge!(graph, i, LinearIndices(grid)[d])
|
||||
end
|
||||
end
|
||||
end
|
||||
(start, dest, grid, graph)
|
||||
end
|
||||
|
||||
function p1(input::Vector{String})
|
||||
start, dest, grid, graph = build_graph(input)
|
||||
|
||||
solution = dijkstra_shortest_paths(graph, LinearIndices(grid)[start])
|
||||
solution.dists[LinearIndices(grid)[dest]]
|
||||
end
|
||||
|
||||
|
||||
function p2(input::Vector{String})
|
||||
start, dest, grid, graph = build_graph(input)
|
||||
sources = findall(==(0), grid)
|
||||
|
||||
solution = dijkstra_shortest_paths(graph, map(x -> LinearIndices(grid)[x], sources))
|
||||
solution.dists[LinearIndices(grid)[dest]]
|
||||
end
|
||||
|
||||
@aoc(2022, 12)
|
58
src/day_9.jl
Normal file
58
src/day_9.jl
Normal file
@ -0,0 +1,58 @@
|
||||
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
|
||||
import .Aoc: @aoc
|
||||
|
||||
offsets = Dict('L' => (-1, 0), 'R' => (1, 0), 'U' => (0, 1), 'D' => (0, -1))
|
||||
|
||||
function p1(input::Vector{String})
|
||||
headx, heady = (0,0)
|
||||
tailx, taily = (0,0)
|
||||
map = Dict((0,0) => true)
|
||||
for i in input
|
||||
x, y = offsets[i[1]]
|
||||
for _ in 1:parse(Int, split(i)[2])
|
||||
headx += x
|
||||
heady += y
|
||||
while max(abs(tailx - headx), abs(taily - heady)) > 1
|
||||
if abs(tailx - headx) > 0
|
||||
tailx += headx > tailx ? 1 : -1
|
||||
end
|
||||
if abs(taily - heady) > 0
|
||||
taily += heady > taily ? 1 : -1
|
||||
end
|
||||
map[(tailx, taily)] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
length(keys(map))
|
||||
end
|
||||
|
||||
function p2(input::Vector{String})
|
||||
rope = [ [0, 0] for _ in 1:10 ]
|
||||
map = Dict((0,0) => true)
|
||||
for i in input
|
||||
x, y = offsets[i[1]]
|
||||
for _ in 1:parse(Int, split(i)[2])
|
||||
head = rope[1]
|
||||
rope[1] = [head[1] + x, head[2] + y]
|
||||
|
||||
for ri in 2:10
|
||||
prevx, prevy = rope[ri-1]
|
||||
currx, curry = rope[ri]
|
||||
while max(abs(currx - prevx), abs(curry - prevy)) > 1
|
||||
if abs(currx - prevx) > 0
|
||||
currx += prevx > currx ? 1 : -1
|
||||
end
|
||||
if abs(curry - prevy) > 0
|
||||
curry += prevy > curry ? 1 : -1
|
||||
end
|
||||
end
|
||||
rope[ri] = [currx, curry]
|
||||
end
|
||||
last = rope[end]
|
||||
map[(last[1], last[2])] = true
|
||||
end
|
||||
end
|
||||
length(keys(map))
|
||||
end
|
||||
|
||||
@aoc(2022, 9)
|
Loading…
x
Reference in New Issue
Block a user