changeset 23:3c02202f3b8e

Day 14 part 1
author Lewin Bormann <lbo@spheniscida.de>
date Fri, 16 Dec 2022 18:29:37 +0100
parents 1ed3228c05ed
children e7ce9cd36033
files 14/14.jl 14/input.txt 14/test_input.txt
diffstat 3 files changed, 275 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/14/14.jl	Fri Dec 16 18:29:37 2022 +0100
@@ -0,0 +1,122 @@
+
+mutable struct PS
+    s::String
+    pos::Int
+end
+
+function initialize(s::String)::PS
+    PS(s, 1)
+end
+
+function parse_coord(ps::PS)::Tuple{Int,Int}
+    e = findfirst((==)(','), ps.s[ps.pos:end])
+    x = parse(Int, ps.s[ps.pos:ps.pos+e-2]);
+    ps.pos = ps.pos + e;
+    e = something(findfirst((==)(' '), ps.s[ps.pos:end]), length(ps.s)-ps.pos+2);
+    y = parse(Int, ps.s[ps.pos:ps.pos+e-2]);
+    ps.pos = ps.pos + e - 1;
+    (x, y)
+end
+
+function parse_sep(ps::PS)::Bool
+    if ps.pos >= length(ps.s)
+        false
+    else
+        @assert ps.s[ps.pos:ps.pos+3] == " -> "
+        ps.pos += 4;
+        true
+    end
+end
+
+function parse_coords(ps::PS)::Vector{Tuple{Int,Int}}
+    poss = Vector{Tuple{Int,Int}}();
+    while true
+        push!(poss, parse_coord(ps));
+        if !parse_sep(ps)
+            break
+        end
+    end
+    poss
+end
+
+function parse_all_coords(fh::IOStream)::Vector{Vector{Tuple{Int,Int}}}
+    vs = Vector{Vector{Tuple{Int,Int}}}();
+    for l in eachline(fh)
+        push!(vs, parse_coords(initialize(l)));
+    end
+    vs
+end
+
+const EMPTY = 0;
+const ROCK = 1;
+const SAND = 2;
+
+function run_matrix(v::Vector{Vector{Tuple{Int,Int}}})
+    # Not very efficient...
+    SAND_POINT = (500,0)
+    minx = min(SAND_POINT[1], minimum(minimum(t[1] for t in vv) for vv in v));
+    maxx = max(SAND_POINT[1], maximum(maximum(t[1] for t in vv) for vv in v));
+    miny = min(SAND_POINT[2], minimum(minimum(t[2] for t in vv) for vv in v));
+    maxy = max(SAND_POINT[2], maximum(maximum(t[2] for t in vv) for vv in v));
+
+    m = zeros(Int8, maxx-minx+1, maxy-miny+1);
+
+    for line in v
+        last = line[1];
+        for p in @view line[2:end]
+            a, b = CartesianIndex(last .- (minx-1, miny-1)), CartesianIndex(p .- (minx-1, miny-1));
+            @assert abs(last[1]-p[1]) == 0 || abs(last[2]-p[2]) == 0
+            if a > b
+                a, b = b, a;
+            end
+            m[a:b] .= ROCK;
+            last = p;
+        end
+    end
+
+    down, left, right = (0,1), (-1,1), (1,1);
+    X, Y = size(m);
+    isvalid(pos) = 0 < pos[1] && pos[1] <= X && 0 < pos[2] && pos[2] <= Y
+
+    count = 0;
+    pos0 = SAND_POINT .- (minx-1, miny-1);
+    pos = pos0;
+    while true
+        if !isvalid(pos .+ down)
+            break;
+        elseif m[CartesianIndex(pos .+ down)] == EMPTY
+            pos = pos .+ down;
+            continue;
+        elseif !isvalid(pos .+ left)
+            break;
+        elseif m[CartesianIndex(pos .+ left)] == EMPTY
+            pos = pos .+ left;
+            continue
+        elseif !isvalid(pos .+ right)
+            break;
+        elseif m[CartesianIndex(pos .+ right)] == EMPTY
+            pos = pos .+ right;
+            continue;
+        else
+            count += 1;
+            m[CartesianIndex(pos)] = SAND;
+            println(" ==== $count ==== ");
+            pos = pos0;
+            continue;
+        end
+    end
+    show_cave(m);
+    @show count;
+
+end
+
+function show_cave(m::Matrix{Int8})
+    for r in eachrow(m')
+        println(r);
+    end
+end
+
+open("14/input.txt"; read=true) do fh
+    ac = (parse_all_coords(fh));
+    m = run_matrix(ac);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/14/input.txt	Fri Dec 16 18:29:37 2022 +0100
@@ -0,0 +1,151 @@
+506,104 -> 511,104
+504,96 -> 509,96
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+500,93 -> 500,83 -> 500,93 -> 502,93 -> 502,90 -> 502,93 -> 504,93 -> 504,85 -> 504,93 -> 506,93 -> 506,83 -> 506,93
+499,35 -> 504,35
+511,23 -> 516,23
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+503,38 -> 508,38
+520,104 -> 525,104
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+499,28 -> 499,29 -> 513,29 -> 513,28
+504,23 -> 509,23
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+485,45 -> 485,47 -> 483,47 -> 483,54 -> 492,54 -> 492,47 -> 489,47 -> 489,45
+500,93 -> 500,83 -> 500,93 -> 502,93 -> 502,90 -> 502,93 -> 504,93 -> 504,85 -> 504,93 -> 506,93 -> 506,83 -> 506,93
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+499,28 -> 499,29 -> 513,29 -> 513,28
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+508,98 -> 513,98
+500,93 -> 500,83 -> 500,93 -> 502,93 -> 502,90 -> 502,93 -> 504,93 -> 504,85 -> 504,93 -> 506,93 -> 506,83 -> 506,93
+524,107 -> 524,111 -> 522,111 -> 522,118 -> 534,118 -> 534,111 -> 528,111 -> 528,107
+507,20 -> 512,20
+489,67 -> 489,58 -> 489,67 -> 491,67 -> 491,61 -> 491,67 -> 493,67 -> 493,59 -> 493,67 -> 495,67 -> 495,64 -> 495,67
+506,130 -> 506,132 -> 502,132 -> 502,137 -> 516,137 -> 516,132 -> 511,132 -> 511,130
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+510,127 -> 514,127
+524,107 -> 524,111 -> 522,111 -> 522,118 -> 534,118 -> 534,111 -> 528,111 -> 528,107
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+492,104 -> 497,104
+492,35 -> 497,35
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+528,127 -> 532,127
+498,140 -> 498,142 -> 493,142 -> 493,150 -> 504,150 -> 504,142 -> 503,142 -> 503,140
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+500,93 -> 500,83 -> 500,93 -> 502,93 -> 502,90 -> 502,93 -> 504,93 -> 504,85 -> 504,93 -> 506,93 -> 506,83 -> 506,93
+485,45 -> 485,47 -> 483,47 -> 483,54 -> 492,54 -> 492,47 -> 489,47 -> 489,45
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+516,127 -> 520,127
+506,130 -> 506,132 -> 502,132 -> 502,137 -> 516,137 -> 516,132 -> 511,132 -> 511,130
+495,32 -> 500,32
+493,14 -> 505,14 -> 505,13
+522,127 -> 526,127
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+493,14 -> 505,14 -> 505,13
+489,67 -> 489,58 -> 489,67 -> 491,67 -> 491,61 -> 491,67 -> 493,67 -> 493,59 -> 493,67 -> 495,67 -> 495,64 -> 495,67
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+500,93 -> 500,83 -> 500,93 -> 502,93 -> 502,90 -> 502,93 -> 504,93 -> 504,85 -> 504,93 -> 506,93 -> 506,83 -> 506,93
+525,125 -> 529,125
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+489,67 -> 489,58 -> 489,67 -> 491,67 -> 491,61 -> 491,67 -> 493,67 -> 493,59 -> 493,67 -> 495,67 -> 495,64 -> 495,67
+500,93 -> 500,83 -> 500,93 -> 502,93 -> 502,90 -> 502,93 -> 504,93 -> 504,85 -> 504,93 -> 506,93 -> 506,83 -> 506,93
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+506,130 -> 506,132 -> 502,132 -> 502,137 -> 516,137 -> 516,132 -> 511,132 -> 511,130
+489,67 -> 489,58 -> 489,67 -> 491,67 -> 491,61 -> 491,67 -> 493,67 -> 493,59 -> 493,67 -> 495,67 -> 495,64 -> 495,67
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+500,93 -> 500,83 -> 500,93 -> 502,93 -> 502,90 -> 502,93 -> 504,93 -> 504,85 -> 504,93 -> 506,93 -> 506,83 -> 506,93
+513,104 -> 518,104
+506,130 -> 506,132 -> 502,132 -> 502,137 -> 516,137 -> 516,132 -> 511,132 -> 511,130
+485,45 -> 485,47 -> 483,47 -> 483,54 -> 492,54 -> 492,47 -> 489,47 -> 489,45
+519,121 -> 523,121
+498,140 -> 498,142 -> 493,142 -> 493,150 -> 504,150 -> 504,142 -> 503,142 -> 503,140
+495,102 -> 500,102
+500,20 -> 505,20
+490,42 -> 504,42 -> 504,41
+500,93 -> 500,83 -> 500,93 -> 502,93 -> 502,90 -> 502,93 -> 504,93 -> 504,85 -> 504,93 -> 506,93 -> 506,83 -> 506,93
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+500,93 -> 500,83 -> 500,93 -> 502,93 -> 502,90 -> 502,93 -> 504,93 -> 504,85 -> 504,93 -> 506,93 -> 506,83 -> 506,93
+498,140 -> 498,142 -> 493,142 -> 493,150 -> 504,150 -> 504,142 -> 503,142 -> 503,140
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+524,107 -> 524,111 -> 522,111 -> 522,118 -> 534,118 -> 534,111 -> 528,111 -> 528,107
+485,45 -> 485,47 -> 483,47 -> 483,54 -> 492,54 -> 492,47 -> 489,47 -> 489,45
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+489,67 -> 489,58 -> 489,67 -> 491,67 -> 491,61 -> 491,67 -> 493,67 -> 493,59 -> 493,67 -> 495,67 -> 495,64 -> 495,67
+509,102 -> 514,102
+513,125 -> 517,125
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+490,42 -> 504,42 -> 504,41
+498,100 -> 503,100
+500,93 -> 500,83 -> 500,93 -> 502,93 -> 502,90 -> 502,93 -> 504,93 -> 504,85 -> 504,93 -> 506,93 -> 506,83 -> 506,93
+489,67 -> 489,58 -> 489,67 -> 491,67 -> 491,61 -> 491,67 -> 493,67 -> 493,59 -> 493,67 -> 495,67 -> 495,64 -> 495,67
+498,140 -> 498,142 -> 493,142 -> 493,150 -> 504,150 -> 504,142 -> 503,142 -> 503,140
+489,38 -> 494,38
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+485,45 -> 485,47 -> 483,47 -> 483,54 -> 492,54 -> 492,47 -> 489,47 -> 489,45
+506,130 -> 506,132 -> 502,132 -> 502,137 -> 516,137 -> 516,132 -> 511,132 -> 511,130
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+524,107 -> 524,111 -> 522,111 -> 522,118 -> 534,118 -> 534,111 -> 528,111 -> 528,107
+498,140 -> 498,142 -> 493,142 -> 493,150 -> 504,150 -> 504,142 -> 503,142 -> 503,140
+506,130 -> 506,132 -> 502,132 -> 502,137 -> 516,137 -> 516,132 -> 511,132 -> 511,130
+496,38 -> 501,38
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+498,140 -> 498,142 -> 493,142 -> 493,150 -> 504,150 -> 504,142 -> 503,142 -> 503,140
+519,125 -> 523,125
+501,154 -> 501,155 -> 507,155
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+499,104 -> 504,104
+489,67 -> 489,58 -> 489,67 -> 491,67 -> 491,61 -> 491,67 -> 493,67 -> 493,59 -> 493,67 -> 495,67 -> 495,64 -> 495,67
+501,154 -> 501,155 -> 507,155
+503,17 -> 508,17
+516,123 -> 520,123
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+505,100 -> 510,100
+489,67 -> 489,58 -> 489,67 -> 491,67 -> 491,61 -> 491,67 -> 493,67 -> 493,59 -> 493,67 -> 495,67 -> 495,64 -> 495,67
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+524,107 -> 524,111 -> 522,111 -> 522,118 -> 534,118 -> 534,111 -> 528,111 -> 528,107
+500,93 -> 500,83 -> 500,93 -> 502,93 -> 502,90 -> 502,93 -> 504,93 -> 504,85 -> 504,93 -> 506,93 -> 506,83 -> 506,93
+489,67 -> 489,58 -> 489,67 -> 491,67 -> 491,61 -> 491,67 -> 493,67 -> 493,59 -> 493,67 -> 495,67 -> 495,64 -> 495,67
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+498,140 -> 498,142 -> 493,142 -> 493,150 -> 504,150 -> 504,142 -> 503,142 -> 503,140
+506,130 -> 506,132 -> 502,132 -> 502,137 -> 516,137 -> 516,132 -> 511,132 -> 511,130
+516,102 -> 521,102
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+485,45 -> 485,47 -> 483,47 -> 483,54 -> 492,54 -> 492,47 -> 489,47 -> 489,45
+522,123 -> 526,123
+485,45 -> 485,47 -> 483,47 -> 483,54 -> 492,54 -> 492,47 -> 489,47 -> 489,45
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+499,28 -> 499,29 -> 513,29 -> 513,28
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+512,100 -> 517,100
+524,107 -> 524,111 -> 522,111 -> 522,118 -> 534,118 -> 534,111 -> 528,111 -> 528,107
+489,67 -> 489,58 -> 489,67 -> 491,67 -> 491,61 -> 491,67 -> 493,67 -> 493,59 -> 493,67 -> 495,67 -> 495,64 -> 495,67
+497,23 -> 502,23
+524,107 -> 524,111 -> 522,111 -> 522,118 -> 534,118 -> 534,111 -> 528,111 -> 528,107
+489,67 -> 489,58 -> 489,67 -> 491,67 -> 491,61 -> 491,67 -> 493,67 -> 493,59 -> 493,67 -> 495,67 -> 495,64 -> 495,67
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+501,98 -> 506,98
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+498,168 -> 498,158 -> 498,168 -> 500,168 -> 500,162 -> 500,168 -> 502,168 -> 502,163 -> 502,168 -> 504,168 -> 504,160 -> 504,168 -> 506,168 -> 506,159 -> 506,168 -> 508,168 -> 508,163 -> 508,168 -> 510,168 -> 510,163 -> 510,168 -> 512,168 -> 512,167 -> 512,168 -> 514,168 -> 514,161 -> 514,168 -> 516,168 -> 516,167 -> 516,168
+502,102 -> 507,102
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
+487,80 -> 487,75 -> 487,80 -> 489,80 -> 489,72 -> 489,80 -> 491,80 -> 491,76 -> 491,80 -> 493,80 -> 493,71 -> 493,80 -> 495,80 -> 495,76 -> 495,80 -> 497,80 -> 497,75 -> 497,80 -> 499,80 -> 499,70 -> 499,80 -> 501,80 -> 501,78 -> 501,80 -> 503,80 -> 503,70 -> 503,80
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/14/test_input.txt	Fri Dec 16 18:29:37 2022 +0100
@@ -0,0 +1,2 @@
+498,4 -> 498,6 -> 496,6
+503,4 -> 502,4 -> 502,9 -> 494,9