optimize day 3

This commit is contained in:
Patrick Michl 2021-12-03 09:26:46 +01:00
parent 7d2923a6bc
commit 40682f6cb6

View File

@ -3,44 +3,36 @@ import .Aoc: @aoc
function p1(input::Vector{String}) function p1(input::Vector{String})
o = [[],[],[],[],[],[],[],[],[],[],[],[]]
for l in input
c = match(r"(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)", l).captures
for i in 1:12
push!(o[i], c[i])
end
end
γ = "" γ = ""
ϵ = "" ϵ = ""
for n in o for n in 1:length(input[1])
γ *= count(==("1"), n) > count(==("0"), n) ? "1" : "0" bits = map(x -> parse(Int, x[n]), input)
ϵ *= count(==("1"), n) > count(==("0"), n) ? "0" : "1" more_ones = sum(bits) > length(bits) / 2
γ *= more_ones ? "1" : "0"
ϵ *= more_ones ? "0" : "1"
end end
parse(Int, γ; base=2) * parse(Int, ϵ; base=2) parse(Int, γ; base=2) * parse(Int, ϵ; base=2)
end end
function p2(input::Vector{String}) function p2(input::Vector{String})
i1 = deepcopy(input) i1 = copy(input)
i2 = deepcopy(input) i2 = copy(input)
ox = "" ox = ""
co = "" co = ""
for i in 1:length(input[1]) for i in 1:length(input[1])
oxbits = map(x -> x[i], i1) oxbits = map(x -> parse(Int, x[i]), i1)
oxmc = count(==('1'), oxbits) >= count(==('0'), oxbits) ? '1' : '0' cobits = map(x -> parse(Int, x[i]), i2)
filter!(x -> x[i] == oxmc, i1)
oxmc = sum(oxbits) >= length(oxbits) / 2 ? '1' : '0'
comc = sum(cobits) >= length(cobits) / 2 ? '0' : '1'
cobits = map(x -> x[i], i2) filter!(x -> x[i] == oxmc, i1)
comc = count(==('1'), cobits) >= count(==('0'), cobits) ? '0' : '1'
filter!(x -> x[i] == comc, i2) filter!(x -> x[i] == comc, i2)
if length(i1) == 1 && ox == "" length(i1) == 1 && ox == "" ? (ox = i1[1]) : nothing
ox = i1[begin] length(i2) == 1 && co == "" ? (co = i2[1]) : nothing
end ox != "" && co != "" ? break : continue
if length(i2) == 1 && co == ""
co = i2[begin]
end
end end
parse(Int, ox; base=2) * parse(Int, co; base=2) parse(Int, ox; base=2) * parse(Int, co; base=2)
end end