Mercurial > lbo > hg > aoc22
changeset 5:dc901991442c
Intermittent solution for day 05
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Tue, 06 Dec 2022 23:08:24 +0100 |
parents | 086b318fa4fe |
children | dea8d8f60e25 |
files | 05/05.jl 05/input.txt Manifest.toml Project.toml |
diffstat | 4 files changed, 603 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/05/05.jl Tue Dec 06 23:08:24 2022 +0100 @@ -0,0 +1,79 @@ +const input = "05/input.txt"; + +mutable struct Crates + stacks::Vector{Vector{Char}} +end + +using ParserCombinator + +crate = ( + ( + (E"[" + p"[A-Z]" + E"]") |> s -> s[1][1]) + | (E" " |> _ -> nothing)) + (E" " | Eos()) +crate_row = Repeat(crate) + Eos() + +crate_base = Repeat(P"\s*"+ p"\d" + P"\s*", 1, 100) + Eos() + +function parse_stacks(lines::Vector{String})::Crates + stacks = nothing + # start is the line on which instructions start. + start = 3 + for l in lines + try + cs = parse_one(chomp(l), crate_row); + if isnothing(stacks) + stacks = Crates([Vector{Char}() for i in 1:length(cs)]) + end + for (i, e) in enumerate(cs) + # inefficient but saves reversing + if !isnothing(e) + pushfirst!(stacks.stacks[i], e); + end + end + start += 1 + catch e + @assert typeof(e) == ParserException + break + end + end + println(stacks) + stacks +end + +struct Instr + n::Int + from::Int + to::Int +end + +instruction = E"move " + PInt() + E" from " + PInt() + E" to " + PInt() + Eos() + +function parse_instructions(lines::Vector{String})::Vector{Instr} + v = Vector{Instr}(); + for l in lines + try + i = parse_one(chomp(l), instruction); + push!(v, Instr(i[1], i[2], i[3])); + catch e + @assert typeof(e) == ParserException + end + end + @show v + v +end + +function act(init::Crates, instr::Vector{Instr})::Crates + for i in instr + + end +end + +function run_05(f::String) + open(f; read=true) do fh + ls = collect(eachline(fh)); + crates = parse_stacks(ls); + instrs = parse_instructions(ls); + end +end + +run_05(input);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/05/input.txt Tue Dec 06 23:08:24 2022 +0100 @@ -0,0 +1,511 @@ + [G] [P] [M] + [V] [M] [W] [S] [Q] + [N] [N] [G] [H] [T] [F] + [J] [W] [V] [Q] [W] [F] [P] +[C] [H] [T] [T] [G] [B] [Z] [B] +[S] [W] [S] [L] [F] [B] [P] [C] [H] +[G] [M] [Q] [S] [Z] [T] [J] [D] [S] +[B] [T] [M] [B] [J] [C] [T] [G] [N] + 1 2 3 4 5 6 7 8 9 + +move 2 from 4 to 2 +move 6 from 9 to 7 +move 4 from 7 to 2 +move 2 from 4 to 1 +move 2 from 6 to 7 +move 1 from 3 to 8 +move 4 from 7 to 1 +move 2 from 3 to 2 +move 3 from 8 to 5 +move 3 from 1 to 4 +move 12 from 2 to 5 +move 2 from 6 to 8 +move 12 from 5 to 8 +move 3 from 7 to 9 +move 18 from 8 to 9 +move 2 from 8 to 6 +move 3 from 2 to 3 +move 14 from 9 to 4 +move 1 from 1 to 3 +move 7 from 9 to 3 +move 1 from 2 to 1 +move 8 from 4 to 5 +move 5 from 6 to 3 +move 2 from 7 to 9 +move 3 from 4 to 9 +move 4 from 9 to 6 +move 4 from 6 to 1 +move 8 from 4 to 6 +move 10 from 1 to 2 +move 13 from 3 to 2 +move 17 from 5 to 9 +move 2 from 5 to 1 +move 9 from 9 to 7 +move 1 from 3 to 6 +move 2 from 1 to 8 +move 11 from 2 to 4 +move 5 from 6 to 8 +move 1 from 6 to 3 +move 1 from 1 to 4 +move 3 from 8 to 6 +move 3 from 2 to 8 +move 9 from 7 to 9 +move 4 from 4 to 7 +move 1 from 9 to 5 +move 15 from 9 to 7 +move 7 from 8 to 3 +move 1 from 5 to 6 +move 2 from 6 to 9 +move 8 from 2 to 6 +move 3 from 4 to 3 +move 1 from 2 to 5 +move 4 from 9 to 3 +move 1 from 3 to 4 +move 13 from 6 to 2 +move 1 from 5 to 1 +move 4 from 4 to 9 +move 6 from 3 to 2 +move 11 from 2 to 7 +move 6 from 3 to 4 +move 3 from 3 to 2 +move 1 from 3 to 4 +move 1 from 1 to 3 +move 3 from 9 to 2 +move 1 from 3 to 1 +move 4 from 7 to 1 +move 1 from 9 to 5 +move 5 from 1 to 4 +move 11 from 2 to 4 +move 1 from 5 to 3 +move 1 from 2 to 3 +move 12 from 4 to 2 +move 2 from 7 to 2 +move 7 from 4 to 3 +move 5 from 4 to 1 +move 7 from 7 to 6 +move 4 from 1 to 8 +move 1 from 8 to 5 +move 8 from 3 to 2 +move 4 from 7 to 4 +move 13 from 7 to 1 +move 2 from 8 to 6 +move 5 from 4 to 9 +move 1 from 3 to 6 +move 1 from 5 to 8 +move 1 from 2 to 9 +move 4 from 2 to 6 +move 2 from 8 to 6 +move 10 from 1 to 3 +move 4 from 9 to 4 +move 2 from 1 to 3 +move 5 from 2 to 9 +move 4 from 9 to 2 +move 1 from 1 to 2 +move 13 from 2 to 4 +move 15 from 4 to 5 +move 3 from 6 to 8 +move 8 from 3 to 8 +move 1 from 4 to 2 +move 14 from 5 to 1 +move 1 from 5 to 4 +move 1 from 4 to 2 +move 8 from 6 to 7 +move 3 from 6 to 2 +move 2 from 9 to 1 +move 8 from 8 to 7 +move 9 from 1 to 5 +move 7 from 5 to 3 +move 14 from 7 to 9 +move 2 from 2 to 3 +move 7 from 2 to 1 +move 1 from 6 to 1 +move 4 from 9 to 2 +move 8 from 3 to 6 +move 2 from 4 to 3 +move 4 from 3 to 5 +move 5 from 5 to 7 +move 2 from 6 to 9 +move 6 from 6 to 2 +move 4 from 2 to 3 +move 1 from 6 to 2 +move 2 from 7 to 8 +move 13 from 9 to 5 +move 2 from 7 to 1 +move 14 from 1 to 5 +move 15 from 5 to 7 +move 3 from 8 to 7 +move 5 from 3 to 5 +move 6 from 5 to 7 +move 4 from 1 to 7 +move 1 from 2 to 5 +move 3 from 2 to 8 +move 11 from 5 to 2 +move 10 from 7 to 1 +move 1 from 3 to 4 +move 10 from 2 to 9 +move 1 from 5 to 8 +move 6 from 7 to 3 +move 1 from 4 to 6 +move 2 from 3 to 8 +move 1 from 2 to 1 +move 4 from 3 to 9 +move 3 from 1 to 6 +move 2 from 7 to 1 +move 1 from 5 to 6 +move 1 from 3 to 8 +move 4 from 1 to 4 +move 5 from 2 to 9 +move 3 from 1 to 4 +move 18 from 9 to 7 +move 4 from 8 to 4 +move 3 from 1 to 2 +move 1 from 9 to 7 +move 1 from 4 to 7 +move 1 from 6 to 2 +move 1 from 2 to 5 +move 25 from 7 to 3 +move 7 from 4 to 2 +move 8 from 7 to 9 +move 4 from 8 to 6 +move 1 from 8 to 5 +move 4 from 6 to 5 +move 2 from 9 to 5 +move 3 from 5 to 8 +move 4 from 6 to 4 +move 12 from 3 to 5 +move 11 from 3 to 2 +move 13 from 5 to 8 +move 4 from 9 to 6 +move 7 from 4 to 9 +move 2 from 6 to 2 +move 12 from 2 to 7 +move 1 from 6 to 3 +move 1 from 5 to 6 +move 2 from 5 to 3 +move 15 from 8 to 6 +move 4 from 6 to 7 +move 1 from 5 to 1 +move 10 from 2 to 8 +move 8 from 8 to 3 +move 8 from 6 to 8 +move 2 from 7 to 6 +move 9 from 9 to 7 +move 8 from 8 to 9 +move 1 from 1 to 3 +move 1 from 2 to 7 +move 7 from 3 to 1 +move 3 from 8 to 5 +move 3 from 1 to 6 +move 7 from 9 to 2 +move 2 from 3 to 7 +move 5 from 7 to 9 +move 17 from 7 to 5 +move 2 from 7 to 6 +move 10 from 6 to 3 +move 1 from 1 to 3 +move 6 from 9 to 3 +move 1 from 2 to 9 +move 2 from 7 to 9 +move 2 from 9 to 7 +move 1 from 5 to 8 +move 1 from 8 to 5 +move 6 from 2 to 5 +move 1 from 6 to 1 +move 5 from 3 to 5 +move 1 from 6 to 8 +move 1 from 7 to 9 +move 2 from 9 to 3 +move 15 from 5 to 2 +move 2 from 1 to 8 +move 2 from 3 to 7 +move 2 from 8 to 3 +move 3 from 5 to 9 +move 1 from 8 to 6 +move 1 from 9 to 6 +move 3 from 7 to 6 +move 17 from 3 to 4 +move 1 from 1 to 2 +move 6 from 2 to 9 +move 16 from 4 to 1 +move 4 from 6 to 8 +move 9 from 5 to 6 +move 8 from 6 to 2 +move 2 from 9 to 5 +move 2 from 3 to 5 +move 1 from 6 to 2 +move 1 from 4 to 8 +move 14 from 1 to 3 +move 8 from 5 to 3 +move 20 from 3 to 1 +move 1 from 8 to 2 +move 1 from 9 to 6 +move 1 from 6 to 7 +move 1 from 7 to 3 +move 22 from 1 to 2 +move 3 from 3 to 6 +move 27 from 2 to 8 +move 2 from 2 to 8 +move 2 from 6 to 9 +move 2 from 9 to 4 +move 2 from 4 to 8 +move 1 from 1 to 3 +move 14 from 8 to 5 +move 1 from 3 to 9 +move 3 from 9 to 2 +move 5 from 2 to 8 +move 10 from 2 to 9 +move 1 from 6 to 7 +move 1 from 7 to 5 +move 7 from 5 to 2 +move 2 from 9 to 2 +move 1 from 6 to 2 +move 2 from 9 to 5 +move 3 from 5 to 6 +move 6 from 5 to 3 +move 1 from 5 to 6 +move 4 from 3 to 9 +move 2 from 9 to 8 +move 3 from 9 to 5 +move 23 from 8 to 1 +move 2 from 6 to 1 +move 1 from 5 to 7 +move 2 from 3 to 5 +move 2 from 9 to 5 +move 4 from 9 to 7 +move 2 from 9 to 4 +move 1 from 5 to 4 +move 5 from 8 to 5 +move 2 from 6 to 2 +move 3 from 7 to 3 +move 1 from 3 to 4 +move 3 from 2 to 8 +move 4 from 1 to 6 +move 2 from 6 to 3 +move 4 from 1 to 2 +move 3 from 8 to 1 +move 13 from 2 to 5 +move 4 from 3 to 2 +move 14 from 5 to 7 +move 5 from 2 to 7 +move 18 from 7 to 9 +move 4 from 4 to 7 +move 2 from 5 to 4 +move 17 from 9 to 5 +move 1 from 9 to 1 +move 1 from 7 to 2 +move 5 from 7 to 2 +move 18 from 1 to 4 +move 1 from 7 to 3 +move 1 from 3 to 6 +move 2 from 1 to 3 +move 1 from 6 to 5 +move 2 from 6 to 8 +move 1 from 8 to 9 +move 1 from 8 to 3 +move 13 from 4 to 5 +move 1 from 1 to 6 +move 3 from 2 to 4 +move 1 from 6 to 1 +move 3 from 2 to 9 +move 3 from 3 to 1 +move 5 from 4 to 5 +move 30 from 5 to 3 +move 1 from 4 to 6 +move 1 from 9 to 8 +move 1 from 9 to 6 +move 21 from 3 to 7 +move 3 from 1 to 6 +move 1 from 1 to 4 +move 1 from 9 to 6 +move 1 from 8 to 2 +move 1 from 3 to 6 +move 1 from 9 to 3 +move 5 from 4 to 8 +move 1 from 2 to 4 +move 9 from 5 to 7 +move 2 from 5 to 9 +move 2 from 8 to 2 +move 2 from 6 to 3 +move 1 from 4 to 1 +move 4 from 3 to 8 +move 2 from 9 to 2 +move 4 from 2 to 6 +move 1 from 1 to 4 +move 2 from 6 to 9 +move 2 from 5 to 4 +move 1 from 3 to 1 +move 1 from 1 to 3 +move 2 from 9 to 1 +move 5 from 3 to 5 +move 1 from 1 to 8 +move 4 from 6 to 4 +move 5 from 5 to 6 +move 18 from 7 to 5 +move 1 from 3 to 4 +move 12 from 7 to 5 +move 15 from 5 to 6 +move 1 from 5 to 8 +move 1 from 3 to 7 +move 1 from 1 to 2 +move 1 from 2 to 4 +move 1 from 7 to 9 +move 2 from 8 to 2 +move 1 from 2 to 4 +move 4 from 4 to 2 +move 1 from 2 to 1 +move 1 from 9 to 8 +move 4 from 6 to 4 +move 3 from 2 to 6 +move 1 from 2 to 6 +move 8 from 4 to 3 +move 1 from 1 to 3 +move 6 from 6 to 1 +move 1 from 3 to 6 +move 5 from 1 to 7 +move 10 from 5 to 9 +move 3 from 9 to 8 +move 7 from 6 to 2 +move 1 from 7 to 8 +move 3 from 5 to 8 +move 3 from 6 to 2 +move 6 from 8 to 9 +move 1 from 5 to 3 +move 2 from 3 to 1 +move 2 from 4 to 8 +move 6 from 6 to 9 +move 1 from 1 to 4 +move 17 from 9 to 2 +move 1 from 4 to 1 +move 2 from 7 to 8 +move 1 from 9 to 8 +move 3 from 8 to 4 +move 3 from 1 to 4 +move 9 from 8 to 2 +move 1 from 8 to 4 +move 12 from 2 to 7 +move 4 from 7 to 4 +move 1 from 8 to 1 +move 10 from 4 to 2 +move 3 from 3 to 2 +move 1 from 9 to 7 +move 11 from 7 to 3 +move 1 from 3 to 1 +move 2 from 3 to 9 +move 1 from 3 to 7 +move 2 from 1 to 9 +move 1 from 6 to 5 +move 7 from 3 to 6 +move 1 from 7 to 3 +move 3 from 3 to 4 +move 1 from 5 to 7 +move 2 from 4 to 3 +move 2 from 4 to 8 +move 1 from 7 to 6 +move 2 from 6 to 8 +move 1 from 9 to 2 +move 1 from 9 to 5 +move 1 from 5 to 1 +move 1 from 8 to 6 +move 1 from 3 to 2 +move 4 from 6 to 1 +move 5 from 1 to 4 +move 11 from 2 to 4 +move 2 from 8 to 2 +move 1 from 8 to 9 +move 27 from 2 to 5 +move 4 from 6 to 3 +move 3 from 2 to 4 +move 2 from 5 to 9 +move 1 from 5 to 7 +move 2 from 9 to 5 +move 14 from 4 to 7 +move 2 from 4 to 7 +move 3 from 4 to 8 +move 4 from 3 to 1 +move 4 from 1 to 8 +move 2 from 3 to 9 +move 2 from 9 to 3 +move 7 from 8 to 9 +move 1 from 3 to 8 +move 2 from 3 to 2 +move 25 from 5 to 9 +move 1 from 5 to 8 +move 1 from 8 to 7 +move 26 from 9 to 1 +move 23 from 1 to 5 +move 7 from 9 to 7 +move 1 from 9 to 8 +move 1 from 9 to 2 +move 5 from 7 to 1 +move 20 from 5 to 6 +move 1 from 7 to 6 +move 2 from 5 to 3 +move 1 from 8 to 6 +move 21 from 6 to 8 +move 1 from 6 to 4 +move 1 from 1 to 7 +move 2 from 1 to 6 +move 1 from 1 to 3 +move 1 from 2 to 5 +move 1 from 2 to 6 +move 2 from 7 to 6 +move 6 from 7 to 9 +move 3 from 1 to 2 +move 17 from 8 to 1 +move 1 from 4 to 1 +move 2 from 6 to 9 +move 3 from 8 to 9 +move 2 from 3 to 7 +move 2 from 9 to 8 +move 4 from 7 to 3 +move 4 from 3 to 4 +move 2 from 5 to 8 +move 4 from 8 to 4 +move 3 from 6 to 8 +move 18 from 1 to 5 +move 1 from 3 to 4 +move 3 from 2 to 4 +move 5 from 9 to 1 +move 10 from 7 to 5 +move 5 from 1 to 3 +move 5 from 3 to 5 +move 5 from 4 to 3 +move 2 from 4 to 2 +move 5 from 8 to 3 +move 25 from 5 to 2 +move 3 from 3 to 6 +move 1 from 1 to 3 +move 3 from 6 to 7 +move 1 from 4 to 2 +move 1 from 5 to 8 +move 2 from 4 to 9 +move 1 from 8 to 1 +move 20 from 2 to 7 +move 10 from 7 to 1 +move 1 from 1 to 7 +move 4 from 7 to 8 +move 5 from 5 to 4 +move 4 from 8 to 6 +move 1 from 1 to 3 +move 5 from 7 to 4 +move 2 from 1 to 5 +move 4 from 9 to 1 +move 3 from 2 to 5 +move 5 from 5 to 1 +move 1 from 9 to 1 +move 11 from 1 to 3 +move 1 from 6 to 2 +move 7 from 3 to 5 +move 11 from 3 to 7 +move 1 from 2 to 6 +move 7 from 7 to 8 +move 1 from 9 to 1 +move 2 from 3 to 1 +move 1 from 5 to 3 +move 4 from 1 to 6 +move 4 from 6 to 3 +move 9 from 4 to 5 +move 2 from 8 to 2 +move 4 from 6 to 9 +move 3 from 2 to 4 +move 1 from 8 to 6
--- a/Manifest.toml Sun Dec 04 09:46:39 2022 +0100 +++ b/Manifest.toml Tue Dec 06 23:08:24 2022 +0100 @@ -2,7 +2,7 @@ julia_version = "1.8.0" manifest_format = "2.0" -project_hash = "ebd486ffca429f1a119bbe040a700cd6734dcaee" +project_hash = "3f88d5b42b2d6582663e96fe337b4c1e0f59d4fd" [[deps.Adapt]] deps = ["LinearAlgebra"] @@ -18,6 +18,11 @@ [[deps.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +[[deps.AutoHashEquals]] +git-tree-sha1 = "45bb6705d93be619b81451bb2006b7ee5d4e4453" +uuid = "15f4f7f2-30c1-5605-9d31-71845cf9641f" +version = "0.2.0" + [[deps.BangBang]] deps = ["Compat", "ConstructionBase", "Future", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables", "ZygoteRules"] git-tree-sha1 = "7fe6d92c4f281cf4ca6f2fba0ce7b299742da7ca" @@ -146,6 +151,12 @@ uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" version = "1.4.1" +[[deps.ParserCombinator]] +deps = ["AutoHashEquals", "Printf"] +git-tree-sha1 = "3a0e65d9a73e3bb6ed28017760a1664423d7e37c" +uuid = "fae87a5f-d1ad-5cf0-8f61-c941e1580b46" +version = "2.1.1" + [[deps.Parsers]] deps = ["Dates", "SnoopPrecompile"] git-tree-sha1 = "b64719e8b4504983c7fca6cc9db3ebc8acc2a4d6"