From ce9792b1d9f6ede2038cd535de88a1514a45505c Mon Sep 17 00:00:00 2001 From: silvestre_perret_craft Date: Tue, 15 Dec 2020 10:18:16 +0100 Subject: [PATCH 1/2] test --- day-14/part-1/quick_silvestre.jl | 43 ++++++++++++++++++++++++++++++++ day-14/part-1/silvestre.jl | 2 +- 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 day-14/part-1/quick_silvestre.jl 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) From 541da9a9bd7e7f7e7a942724f7b5043ab005e0e6 Mon Sep 17 00:00:00 2001 From: silvestre_perret_craft Date: Tue, 15 Dec 2020 10:35:03 +0100 Subject: [PATCH 2/2] more test --- day-14/part-1/silvestre_module.jl | 49 +++++++++++++++++++++ day-14/part-1/silvestre_module_compiled.jl | 50 ++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 day-14/part-1/silvestre_module.jl create mode 100644 day-14/part-1/silvestre_module_compiled.jl 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()