diff --git a/day-14/part-1/quick_silvestre.jl b/day-14/part-1/quick_silvestre.jl new file mode 100644 index 00000000..7fdf891b --- /dev/null +++ b/day-14/part-1/quick_silvestre.jl @@ -0,0 +1,43 @@ +function update_mask(line, one_mask, zero_mask) + one_mask = 0 + zero_mask = 0 + for idx in 1:36 + if line[7 + idx] == '1' + one_mask |= 1 << (36 - idx) + elseif line[7 + idx] == '0' + zero_mask |= 1 << (36 - idx) + end + end + return (zero_mask, one_mask) +end + +function run(s) + # Your code here + one_mask::Int = 0 + zero_mask::Int = 0 + memory = Dict{Int,Int}() + addr::Int = 0 + value::Int = 0 + for line in readlines(IOBuffer(s)) + if line[2] == 'a' + (zero_mask, one_mask) = update_mask(line, one_mask, zero_mask) + else + parts = split(line, " = ", limit=2) + addr = parse(Int, SubString(parts[1], 5, lastindex(parts[1]) - 1)) + value = parse(Int, parts[2]) + memory[addr] = (value | one_mask) & ~zero_mask + end + end + return sum(values(memory)) +end + +######################################### + +function main() + run(ARGS[1]) + res, time, memory = @timed run(ARGS[1]) + println("_duration:$(time * 1000)") + println(res) +end + +main() diff --git a/day-14/part-1/silvestre.jl b/day-14/part-1/silvestre.jl index 2c4efe8f..85f63080 100644 --- a/day-14/part-1/silvestre.jl +++ b/day-14/part-1/silvestre.jl @@ -19,7 +19,7 @@ function run(s) addr::Int = 0 value::Int = 0 for line in readlines(IOBuffer(s)) - if startswith(line, "mask") + if line[2] == 'a' (zero_mask, one_mask) = update_mask(line, one_mask, zero_mask) else parts = split(line, " = ", limit=2) diff --git a/day-14/part-1/silvestre_module.jl b/day-14/part-1/silvestre_module.jl new file mode 100644 index 00000000..0c7d097a --- /dev/null +++ b/day-14/part-1/silvestre_module.jl @@ -0,0 +1,49 @@ +module Test + +export run + +function update_mask(line, one_mask, zero_mask) + one_mask = 0 + zero_mask = 0 + for idx in 1:36 + if line[7 + idx] == '1' + one_mask |= 1 << (36 - idx) + elseif line[7 + idx] == '0' + zero_mask |= 1 << (36 - idx) + end + end + return (zero_mask, one_mask) +end + +function run(s) + # Your code here + one_mask::Int = 0 + zero_mask::Int = 0 + memory = Dict{Int,Int}() + addr::Int = 0 + value::Int = 0 + for line in readlines(IOBuffer(s)) + if line[2] == 'a' + (zero_mask, one_mask) = update_mask(line, one_mask, zero_mask) + else + parts = split(line, " = ", limit=2) + addr = parse(Int, SubString(parts[1], 5, lastindex(parts[1]) - 1)) + value = parse(Int, parts[2]) + memory[addr] = (value | one_mask) & ~zero_mask + end + end + return sum(values(memory)) +end + +end + +######################################### +using .Test: run + +function main() + res, time, memory = @timed run(ARGS[1]) + println("_duration:$(time * 1000)") + println(res) +end + +main() diff --git a/day-14/part-1/silvestre_module_compiled.jl b/day-14/part-1/silvestre_module_compiled.jl new file mode 100644 index 00000000..5133e5ec --- /dev/null +++ b/day-14/part-1/silvestre_module_compiled.jl @@ -0,0 +1,50 @@ +__precompile__() +module Test + +export run + +function update_mask(line, one_mask, zero_mask) + one_mask = 0 + zero_mask = 0 + for idx in 1:36 + if line[7 + idx] == '1' + one_mask |= 1 << (36 - idx) + elseif line[7 + idx] == '0' + zero_mask |= 1 << (36 - idx) + end + end + return (zero_mask, one_mask) +end + +function run(s) + # Your code here + one_mask::Int = 0 + zero_mask::Int = 0 + memory = Dict{Int,Int}() + addr::Int = 0 + value::Int = 0 + for line in readlines(IOBuffer(s)) + if line[2] == 'a' + (zero_mask, one_mask) = update_mask(line, one_mask, zero_mask) + else + parts = split(line, " = ", limit=2) + addr = parse(Int, SubString(parts[1], 5, lastindex(parts[1]) - 1)) + value = parse(Int, parts[2]) + memory[addr] = (value | one_mask) & ~zero_mask + end + end + return sum(values(memory)) +end + +end + +######################################### +using .Test: run + +function main() + res, time, memory = @timed run(ARGS[1]) + println("_duration:$(time * 1000)") + println(res) +end + +main()