mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 12:50:32 +01:00
75 lines
1.1 KiB
Julia
Executable File
75 lines
1.1 KiB
Julia
Executable File
#!/usr/bin/env julia
|
|
worldSize = 0
|
|
|
|
infected = Set()
|
|
|
|
for line in eachline(STDIN)
|
|
for (index, c) in enumerate(line)
|
|
coord = index - 1 + worldSize * 1im
|
|
if c == '#'
|
|
push!(infected, coord)
|
|
end
|
|
end
|
|
|
|
worldSize += 1
|
|
end
|
|
|
|
function part1(initial, virusPos)
|
|
infected = union(Set(), initial)
|
|
virusDir = -1im
|
|
infections = 0
|
|
|
|
for i = 1:10000
|
|
if in(virusPos, infected)
|
|
virusDir *= 1im
|
|
delete!(infected, virusPos)
|
|
else
|
|
push!(infected, virusPos)
|
|
virusDir *= -1im
|
|
infections += 1
|
|
end
|
|
|
|
virusPos += virusDir
|
|
end
|
|
|
|
println(infections)
|
|
end
|
|
|
|
function part2(initial, virusPos)
|
|
state = Dict()
|
|
virusDir = -1im
|
|
|
|
for node in initial
|
|
state[node] = 'I'
|
|
end
|
|
|
|
infections = 0
|
|
|
|
for i = 1:10000000
|
|
s = get(state, virusPos, 'C')
|
|
|
|
if s == 'C'
|
|
state[virusPos] = 'W'
|
|
virusDir *= -1im
|
|
elseif s == 'W'
|
|
state[virusPos] = 'I'
|
|
infections += 1
|
|
elseif s == 'I'
|
|
state[virusPos] = 'F'
|
|
virusDir *= 1im
|
|
else
|
|
state[virusPos] = 'C'
|
|
virusDir *= -1
|
|
end
|
|
|
|
virusPos += virusDir
|
|
end
|
|
|
|
println(infections)
|
|
end
|
|
|
|
virusPos = (1 + 1im) * trunc(Int, worldSize / 2)
|
|
|
|
part1(infected, virusPos)
|
|
part2(infected, virusPos)
|