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