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"
--- a/Project.toml	Sun Dec 04 09:46:39 2022 +0100
+++ b/Project.toml	Tue Dec 06 23:08:24 2022 +0100
@@ -1,3 +1,4 @@
 [deps]
 BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
+ParserCombinator = "fae87a5f-d1ad-5cf0-8f61-c941e1580b46"
 Transducers = "28d57a85-8fef-5791-bfe6-a80928e7c999"