changeset 1:a83e493cb7f4

Day 02
author Lewin Bormann <lbo@spheniscida.de>
date Fri, 02 Dec 2022 19:57:31 +0100
parents a6ad52859b77
children 5bf75b17187c
files 02/02.jl 02/input.txt
diffstat 2 files changed, 2562 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/02/02.jl	Fri Dec 02 19:57:31 2022 +0100
@@ -0,0 +1,62 @@
+const input = "02/input.txt"
+
+struct InputLine
+    opponent::Char
+    choice::Char
+end
+
+function parse(fh::IO)::Vector{InputLine}
+    v = Vector{InputLine}();
+    while true
+        l = readline(fh);
+        if isempty(l)
+            break;
+        end
+        a, b = split(chomp(l));
+        push!(v, InputLine(a[1], b[1]));
+    end
+    v
+end
+
+function score(il::InputLine)::Int
+    shapescore = Int(il.choice - 'W');
+    op, me = Int(il.opponent-'A'), Int(il.choice-'X')
+    @assert abs(me-op) <= 2
+    if abs(me-op) == 0
+        shapescore + 3
+    elseif abs(me-op) == 1
+        shapescore + (me > op ? 6 : 0)
+    else
+        shapescore + (me < op ? 6 : 0)
+    end
+end
+
+function score2(il::InputLine)::Int
+    winscore = 3 * Int(il.choice-'X');
+    winshape = (Int(il.opponent-'A')+1)%3;
+    loseshape = (Int(il.opponent-'A')-1);
+    if loseshape < 0
+        loseshape += 3
+    end
+    if il.choice == 'X'
+        (loseshape+1) + winscore
+    elseif il.choice == 'Y'
+        Int(il.opponent-'A')+1 + winscore
+    elseif il.choice == 'Z'
+        (winshape+1) + winscore
+    else
+        @assert false
+    end
+end
+
+function calc(v::Vector{InputLine})::Tuple{Int, Int}
+    sum(map(score, v)), sum(map(score2, v))
+end
+
+function run_02(file::String)::Tuple{Int,Int}
+    open(file; read=true) do fh
+        p = parse(fh);
+        calc(p)
+    end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/02/input.txt	Fri Dec 02 19:57:31 2022 +0100
@@ -0,0 +1,2500 @@
+A Z
+C X
+A Z
+A Z
+C Y
+C Y
+A Z
+A Y
+C Y
+A Y
+A Z
+A Z
+A Z
+A Y
+A Z
+A Y
+C Y
+C X
+A Y
+C Y
+C Y
+C X
+A Z
+C Y
+C X
+A X
+A Y
+A Z
+A Y
+A Y
+C X
+C X
+B Y
+C X
+C X
+A Y
+A Z
+A Z
+A X
+A Z
+A Z
+C Y
+A Z
+A Z
+A Y
+C X
+C Y
+C X
+B X
+C Z
+A Y
+A Z
+A Z
+A Z
+A Y
+A Y
+C X
+A Y
+A Z
+C Y
+A Y
+A Y
+A Z
+A Z
+C Y
+A Z
+C Y
+A Y
+A Z
+A Z
+C Y
+B Z
+A Z
+A Z
+A Z
+A Z
+C X
+C X
+A Y
+A X
+A Y
+A Z
+A Z
+C X
+A Z
+C X
+A Z
+C Y
+C X
+A Z
+A Z
+A Z
+A Z
+C X
+C Y
+A Z
+A Z
+C Y
+A Z
+B Z
+C X
+A Z
+A X
+C X
+A Z
+C Z
+A Z
+C X
+A Z
+A Y
+C X
+C Z
+A Z
+C X
+C Y
+A Z
+B Z
+B Y
+A X
+A X
+A X
+A Z
+A Z
+A X
+A Z
+A X
+A Z
+A Z
+C X
+C X
+B Z
+A Z
+A Y
+A Z
+A Z
+A Z
+A Z
+C X
+C X
+C X
+A Z
+A Z
+A Z
+A Z
+A X
+A Y
+A Y
+C X
+C X
+B Z
+C X
+A X
+A Z
+A Z
+C X
+C Z
+A Z
+A Z
+C Y
+A X
+A Z
+C Y
+A X
+A Y
+A Y
+A Y
+C Y
+A Z
+A Z
+C X
+C X
+C X
+C X
+B Z
+C Y
+C X
+C X
+A Y
+A Y
+A Z
+A Z
+A X
+C X
+A Z
+B Z
+A Z
+C X
+A Y
+A Z
+A Z
+A Y
+A Y
+A Z
+C X
+A Y
+C X
+C X
+A Z
+A Y
+C X
+A Z
+A Z
+A Y
+A Z
+A Z
+C Y
+C Z
+A Y
+A Z
+C X
+C X
+A Z
+A Z
+C Y
+A Y
+A Z
+A Y
+A Z
+C X
+A Z
+A Z
+C X
+A Y
+A Y
+C Y
+A Z
+C Y
+A Z
+A Z
+C Y
+A Y
+B Z
+C Y
+C X
+C X
+A Z
+C Y
+A X
+C Y
+A Z
+A Y
+A Z
+C X
+C X
+C Y
+C Y
+A Y
+A Z
+C X
+C X
+A Y
+A X
+A Y
+B Z
+A Y
+C Y
+C X
+C X
+A X
+C X
+B Z
+A X
+C Y
+C X
+C X
+A X
+A Z
+B Z
+A Z
+A Z
+A Y
+A X
+A Z
+C X
+A X
+C Y
+A Z
+A Z
+A X
+A Z
+A Z
+C X
+C X
+A Z
+A Z
+A Z
+A X
+A Z
+A X
+B Y
+A Z
+A Y
+C Y
+A Z
+C X
+A Z
+C X
+A Y
+A Z
+C X
+C Y
+A Y
+C Y
+A Z
+C X
+A Z
+A Z
+C X
+A Y
+A Z
+A X
+A Z
+A Z
+A Z
+B Y
+C X
+A X
+A Z
+A Z
+C Y
+C Y
+C X
+C X
+C X
+A X
+A X
+A Z
+A X
+A Y
+A Z
+A Y
+A Z
+C Y
+C Z
+A Y
+A Z
+A Z
+A X
+A Z
+A Z
+C X
+C Y
+A Y
+C X
+C X
+A Z
+C X
+C X
+C X
+A X
+A Z
+A Z
+A Z
+A Z
+B Y
+A Y
+A Y
+A Z
+C X
+A Y
+A Z
+C X
+A Z
+C Z
+A Y
+C X
+A Z
+B Z
+A Y
+A X
+A Z
+C X
+A Z
+A Z
+A Z
+A Z
+A Z
+B Z
+A Z
+C X
+A Y
+C X
+A Z
+A Z
+A Y
+A Z
+B Z
+C X
+A Y
+C Y
+A Z
+A Z
+C X
+C X
+A Y
+C X
+C Y
+B Z
+A Y
+C X
+A Y
+C X
+A X
+A Y
+A Z
+A Z
+A Y
+C X
+A X
+C X
+B Y
+A Z
+A Y
+B Y
+A Y
+C X
+A Z
+A Z
+C X
+C Y
+A Y
+C X
+C Y
+A Y
+A Z
+A X
+B Z
+C X
+A Z
+A Y
+A Z
+B Z
+A Z
+A X
+C Y
+A X
+A Z
+A Y
+C Y
+A Z
+C Y
+A Z
+C X
+C X
+A Y
+C X
+C X
+A Y
+A Z
+A Z
+A Y
+A X
+C Y
+A Z
+A Z
+C X
+A X
+A Z
+C Z
+A Z
+C Y
+A Z
+C X
+A Z
+A Z
+A X
+C X
+C X
+C Y
+B Z
+B Y
+C Y
+A Y
+A X
+A Z
+C X
+A Y
+A Y
+A Z
+A Z
+C Z
+C X
+C X
+C X
+A Z
+C X
+A Z
+A Z
+A Y
+C Y
+C X
+C X
+C X
+A Y
+C X
+B Z
+C X
+A Z
+C Y
+A Y
+C Y
+A Z
+A Z
+C X
+A X
+A Z
+A Y
+A Z
+B X
+C Z
+A Z
+C Z
+A X
+C X
+C X
+C X
+C X
+A Z
+A Y
+A Z
+A Z
+A Z
+A Z
+A Z
+C Z
+C Y
+C Y
+C X
+C Y
+A Z
+C X
+C X
+A Z
+A Z
+C X
+C Y
+C Y
+A Z
+A X
+C Y
+C Y
+C X
+A Y
+C X
+A Z
+A Z
+A Y
+C Y
+A Y
+C X
+C X
+A Z
+A Z
+C Y
+A Z
+C X
+A Y
+A Y
+A Z
+C Y
+A Z
+C X
+A Y
+A Z
+A Z
+A Z
+A Z
+C Y
+A Y
+C Y
+A Z
+A Z
+A X
+A Y
+A Y
+A Z
+C Y
+A Z
+A X
+A Z
+B Z
+C X
+C X
+C Y
+A Z
+A Z
+C X
+C Z
+A Z
+C X
+C Y
+A Z
+B Z
+A Z
+B Z
+A X
+A Y
+A Z
+A Z
+A Z
+A Z
+C Y
+A Z
+A Z
+A Z
+B Z
+A Z
+C X
+C X
+A Z
+C X
+A X
+A Z
+A Y
+A Y
+A X
+A Z
+A Z
+A Z
+A Z
+B Z
+A Z
+C Y
+C Y
+C X
+C X
+B Z
+C Y
+A Z
+C Y
+A Z
+A Y
+C Y
+A X
+A Y
+C X
+A Y
+C X
+A Z
+A Z
+B Z
+A Y
+C Y
+C X
+A Z
+A Z
+C X
+A Y
+A Z
+A Z
+A X
+A Y
+A Y
+A Y
+A Z
+A Y
+A Z
+C X
+A X
+A Z
+A Z
+C Y
+A Z
+C X
+A Z
+C Y
+A Y
+A Z
+A Z
+A Z
+A Z
+C Y
+A X
+A Z
+A Z
+A Y
+A Z
+B Z
+A X
+A Y
+C X
+C X
+A Y
+A Z
+C Y
+A Z
+A Y
+A Y
+A Z
+A Y
+A Y
+A Z
+A Z
+A Z
+C X
+A Z
+A Y
+A Z
+A Z
+C Y
+A Z
+C X
+A Y
+C X
+C Y
+A Z
+C Y
+A Z
+A Y
+C Y
+C Y
+A Z
+C X
+C X
+C X
+A Z
+A Z
+A Y
+C X
+A Z
+A X
+A Z
+A Z
+C X
+A Z
+C Y
+A Y
+A Z
+A Y
+A Z
+A Z
+C Y
+A Z
+C X
+A Z
+A X
+A Z
+A Z
+C X
+A Z
+A Z
+C Y
+C X
+A Z
+C Y
+C X
+C X
+A Z
+A Z
+A Z
+A X
+C X
+A Z
+A Z
+C Y
+A Y
+C X
+A Y
+C X
+C Y
+A Y
+A Z
+C X
+A Z
+B Y
+A X
+B Z
+A Y
+A X
+C Y
+A Z
+A X
+A Z
+A Z
+C Y
+A Z
+B Z
+C X
+C X
+B Y
+A Z
+A Z
+A Z
+C Y
+C X
+A Z
+A Y
+A Y
+A Y
+C Y
+C X
+A Z
+A X
+A X
+A X
+A Z
+A Z
+A Z
+A Z
+C X
+C X
+A Z
+C X
+A Y
+C X
+B Z
+A Z
+A Z
+C X
+A Z
+C X
+C X
+C X
+A Y
+C Y
+C X
+A Y
+C X
+C Y
+B Z
+A Z
+C X
+A Z
+A X
+B Z
+A Y
+B Y
+A Z
+A Z
+A X
+A Z
+A X
+A Z
+A Z
+C X
+C Y
+A X
+C Y
+C X
+A Z
+A Z
+A Z
+C Y
+A X
+A Y
+A Z
+A Y
+C X
+B Z
+A Z
+A Y
+C Z
+C X
+A Z
+A Z
+A Z
+B Z
+A X
+C X
+A Z
+A Z
+B Z
+A Z
+A Z
+B Z
+A Z
+C X
+A Z
+C X
+A Z
+C X
+A Z
+C Y
+A Z
+A X
+A Y
+A Y
+C X
+A Y
+C X
+B Z
+A Z
+A Z
+A Z
+A Z
+C X
+A Z
+C X
+A Z
+A Y
+A Z
+B Z
+A Y
+C Z
+A Y
+C X
+A Z
+A Z
+A Y
+B Z
+A X
+C Y
+A Z
+A Y
+A Z
+A Y
+A Y
+A Z
+A Z
+A Z
+A X
+A Z
+C Y
+A Y
+A X
+A Y
+C X
+A Y
+C X
+A X
+C X
+A Z
+C Y
+A Y
+A Z
+A Z
+A X
+A Y
+C X
+C X
+A Y
+A X
+A Z
+B Z
+A Y
+A Z
+A X
+A Z
+B Y
+A Y
+A Y
+A Z
+C X
+A Z
+A Z
+A Y
+A Z
+C Z
+A Z
+A Z
+A Z
+A Z
+C Y
+C Y
+A Y
+B Z
+C Y
+A Y
+C Y
+A Z
+A Z
+A Z
+A Z
+C Y
+A Z
+A Z
+C Y
+C X
+A Y
+A Y
+A Z
+C X
+C Z
+C X
+C X
+A Z
+A Z
+A Y
+A Z
+A X
+C Y
+A Z
+A Z
+C Y
+C X
+A X
+A Z
+A Z
+A X
+C X
+C X
+C X
+A Z
+A X
+C X
+C Y
+A X
+A Z
+C X
+A Z
+A Z
+C X
+A Y
+A Z
+A Z
+A Y
+A Z
+C X
+A Z
+A Z
+C X
+A Y
+A Z
+A Z
+C X
+A Z
+A Y
+A Z
+C Y
+A X
+A Z
+A Z
+C X
+A Z
+A Y
+C Y
+B Z
+A Z
+A Y
+C X
+A Z
+B Z
+A Z
+C Z
+A X
+A Z
+A Z
+C Y
+A Z
+A Y
+C X
+C Y
+A Z
+A Z
+A Y
+A X
+C Y
+A Y
+C X
+C Y
+A Z
+C Y
+A Z
+C X
+A Z
+A Z
+A X
+A Z
+A Z
+B X
+A X
+A Z
+C Y
+A Z
+A X
+C X
+A Z
+A Z
+C X
+C Y
+C Y
+A X
+A Y
+C Y
+A Y
+A Z
+A Z
+A Z
+A Z
+A Y
+C X
+C X
+C Y
+C X
+A Z
+A X
+B Z
+B Y
+C X
+C Y
+A Y
+A Z
+A Y
+C X
+C Z
+A Z
+A Y
+C Y
+C X
+A Z
+A Z
+A Y
+C X
+C Z
+C Y
+A Z
+C X
+C Y
+A X
+A X
+A Y
+A Z
+B Z
+A X
+A Y
+A Y
+C X
+C Y
+A Z
+A X
+A Z
+A X
+A Y
+A Z
+A Z
+A Z
+C X
+A Z
+A Z
+A Z
+C Z
+C Y
+C Y
+A Z
+C Y
+C Y
+C Y
+C X
+A Z
+C X
+C X
+A Z
+A Y
+A Z
+A Z
+A X
+A Y
+A Y
+C X
+C X
+A Z
+A Z
+A Z
+A Z
+A Y
+A Z
+A Z
+A Z
+A Z
+A X
+A X
+A Y
+A X
+C Y
+A Y
+A Z
+C X
+A Y
+A Y
+A Z
+A Z
+A Z
+C X
+A Z
+C X
+C X
+C Y
+A Y
+A Z
+A Y
+A Z
+C X
+C X
+A Z
+A Z
+A Z
+C X
+A X
+A Z
+A Z
+C Y
+C Y
+A Y
+A Y
+A Z
+A Z
+C Y
+C X
+C Y
+A X
+C Y
+C X
+C Y
+A Z
+A Z
+A X
+C Y
+C Y
+A Z
+A Y
+C X
+A X
+B Z
+A Z
+C X
+A Y
+A X
+A Z
+A Z
+A Z
+C Y
+C X
+A Z
+C X
+A Z
+A Z
+A Y
+A Z
+A Y
+A X
+A Z
+C Z
+A Z
+A Z
+A Z
+A X
+A Z
+A X
+C X
+A Z
+A Z
+C Y
+A X
+A Z
+C X
+C X
+A Y
+A Z
+A Z
+C X
+B X
+A Z
+C Y
+A Z
+C X
+A Y
+A Z
+C X
+A X
+A Z
+A X
+A Z
+C X
+A Z
+A X
+A Z
+C X
+C Y
+A Y
+A X
+A X
+A Z
+C Y
+C Y
+A Y
+A Y
+A Y
+A X
+A Z
+A Z
+A Z
+C Y
+C Y
+A Y
+B X
+B X
+A Z
+C X
+C X
+A Z
+C Y
+C X
+A Z
+A Z
+A Z
+A Z
+C X
+A Z
+A Z
+C Y
+A Y
+C Y
+A Z
+C Y
+C Y
+A Z
+C X
+A Z
+A X
+A Z
+C X
+C X
+A Y
+B Z
+A Y
+C Y
+A Z
+C Y
+A X
+C X
+A Y
+C X
+A Z
+C Z
+C Y
+A Z
+C X
+C Y
+A Z
+A X
+A Z
+A Z
+A Z
+C X
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Y
+A Z
+A X
+A Y
+C Y
+B Y
+C X
+B Z
+A Z
+A Z
+A Y
+B Z
+A Z
+A Z
+C X
+C Y
+C X
+A Y
+A X
+C X
+C Y
+A Y
+C X
+C Y
+A Z
+A Z
+A Z
+A Y
+C X
+A Y
+C X
+B Z
+A Z
+A Y
+A Z
+A Z
+A Y
+C X
+A Z
+C X
+C Y
+A Y
+A Z
+B Z
+C X
+A Y
+C X
+A Y
+A Z
+C X
+A X
+C X
+B Y
+C X
+A Z
+A Y
+A Z
+A Y
+A X
+C X
+C X
+A Y
+C X
+A Y
+A Y
+A X
+B Y
+A Y
+C X
+C X
+A Y
+B Z
+B X
+B Z
+A Y
+A Z
+C Y
+A Y
+B Y
+A Z
+C X
+A Z
+A Z
+A Z
+A Z
+B Z
+C X
+C Y
+A Z
+C Y
+C Y
+A X
+C X
+A Z
+A Z
+A Z
+C X
+C X
+C X
+A Y
+C Z
+C Z
+A Z
+C X
+A Y
+A Z
+A Z
+A Z
+C X
+A Z
+A X
+A Z
+A Z
+A Z
+A Z
+A Y
+C Y
+C X
+A X
+A Y
+C X
+A X
+A Z
+A Z
+C X
+A Z
+A X
+A Z
+A Z
+A X
+A Z
+A Z
+A X
+A Z
+A X
+B Y
+A Y
+A Y
+C Y
+A Z
+A Y
+C X
+A Z
+A Y
+A X
+C Y
+B X
+C Y
+A Z
+C X
+A Y
+A Z
+A Y
+A X
+C Y
+A Z
+A Z
+C Y
+C X
+A Z
+C X
+A Y
+C X
+A Z
+A Y
+A Z
+A Z
+A Z
+A Y
+A Z
+C X
+C X
+A X
+C X
+C X
+A Z
+C X
+A Z
+C Y
+C X
+A Z
+A Z
+A Z
+C X
+A X
+C Y
+A Z
+C Y
+A X
+A Z
+C X
+A Z
+A Z
+A X
+A Z
+C X
+B X
+A Z
+A Z
+A Z
+C X
+A Y
+A Y
+A X
+C Y
+C Y
+A Z
+A Y
+A Z
+A Z
+C X
+A X
+A Y
+A Z
+A Z
+A Z
+A Z
+B Z
+C X
+C X
+C X
+A Z
+C Z
+A X
+C X
+A Z
+C Y
+A Z
+A Z
+A Y
+A Y
+C X
+A Z
+A X
+A Z
+A Z
+A Z
+A Z
+C Y
+A Z
+A Y
+A X
+A X
+A Z
+C X
+A X
+A X
+A Z
+A Y
+C X
+A Z
+A Z
+A Y
+A Z
+B Z
+C X
+C X
+C Z
+C Y
+C X
+A Z
+C Y
+A Z
+C Z
+A Z
+A Y
+A Y
+A X
+A X
+A Z
+A Y
+A Y
+A Y
+A Y
+A Z
+C Y
+A Z
+A Z
+C X
+A Z
+A Z
+C Y
+A Y
+C X
+A Y
+C X
+A Z
+B Z
+A X
+B X
+A Y
+A X
+A Y
+B Z
+A Y
+A Z
+C Y
+C Y
+A Z
+A X
+A Z
+A Z
+C Z
+A Z
+A Y
+C X
+A Y
+C X
+A X
+A Y
+C Y
+A Y
+A Z
+A Z
+C X
+C X
+B Z
+A Z
+A Z
+A X
+C X
+C Y
+A Z
+A Z
+A X
+C X
+C Z
+A Z
+C Y
+A Y
+B Z
+C Y
+A Z
+C X
+A X
+A Z
+A Z
+A Z
+A Y
+C Y
+A Z
+C Y
+A Z
+A Z
+A Z
+A Z
+A Y
+C X
+A Y
+C Y
+B Z
+A Z
+C X
+C Y
+A Z
+C X
+A Z
+C X
+C Z
+A Z
+C X
+C X
+A Z
+A Z
+A Y
+A Y
+A Y
+C X
+A Y
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Y
+A Z
+A X
+C Y
+A Z
+A Z
+A Z
+A Y
+A Z
+A Z
+A Z
+A Z
+C X
+B Z
+A Z
+A Y
+A Y
+A X
+A Z
+A Z
+C Z
+A Z
+C X
+A Y
+A X
+B Z
+A Z
+A Z
+A Z
+C Y
+C Z
+C X
+A Z
+C Y
+C Y
+C Y
+C X
+B Z
+A Z
+A Z
+C Z
+A X
+A Z
+A Z
+A Z
+C X
+A Z
+A Z
+C Y
+C Y
+A Z
+A Z
+C X
+A Y
+C Y
+C Y
+A Z
+A Z
+A X
+A Z
+A Z
+A X
+A X
+C X
+A Z
+A X
+C X
+C X
+A Z
+A X
+A Z
+C X
+C X
+C X
+C Y
+A Z
+A Z
+A X
+A Z
+A Y
+A Z
+A Z
+C Y
+A Z
+A Z
+A Z
+A X
+A Z
+C X
+A X
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Y
+A X
+A Y
+A X
+C Y
+A Z
+A Z
+C X
+A Z
+A Z
+A Z
+A X
+A Z
+A Z
+A Y
+C X
+A Y
+A Z
+C X
+A X
+A Y
+A Z
+A Z
+A X
+A Z
+A Y
+C X
+A Y
+A Z
+A Z
+A Z
+A Z
+C X
+C Y
+A Z
+B Z
+C X
+A Z
+A Z
+C Y
+C Y
+C X
+A X
+C Y
+B Y
+A Z
+A Z
+A Z
+C Y
+A Z
+A X
+A Y
+A Z
+A Z
+A Z
+C Y
+A Z
+C Y
+C X
+A Z
+A Z
+A Z
+A Z
+A Z
+A X
+A Z
+A Z
+C X
+A Z
+A Y
+C Z
+A Z
+A Z
+A Z
+B X
+C X
+A Z
+A Z
+A Z
+A Z
+C X
+A Z
+A Z
+A Y
+A X
+C X
+C Y
+A X
+A Y
+C X
+A Z
+A Z
+C X
+C X
+A Z
+C X
+A Z
+A Y
+C X
+A Z
+B X
+B Y
+A X
+C Y
+A X
+A Y
+C Y
+A Z
+A Z
+A Z
+C X
+A Z
+A X
+A Z
+C Y
+A Z
+A Z
+C X
+A Z
+A Z
+A Y
+A Z
+A X
+A Y
+A Z
+C X
+C Y
+B X
+C Y
+A Y
+A Z
+C X
+A Z
+C X
+C Y
+A X
+A X
+A Z
+A Z
+C Y
+A Y
+A Y
+A Z
+A Z
+C X
+A X
+C X
+A X
+A Y
+C X
+A Z
+A Z
+B Y
+A Z
+A Z
+A Z
+A Z
+A Z
+A X
+A Y
+A X
+A Z
+A Z
+C X
+A Y
+A Z
+C Y
+C X
+C X
+C X
+C X
+C Y
+A X
+A X
+C Y
+A X
+A Y
+A Y
+B Z
+A Z
+B Y
+C Y
+A X
+A Y
+A Z
+A Z
+A Z
+A X
+C X
+A Z
+A Z
+A Z
+A Z
+A Z
+A Y
+A Z
+B Z
+A Z
+A Z
+A Y
+C Y
+C Y
+C X
+A Z
+A X
+C X
+A Y
+B Z
+C X
+A Z
+C X
+C Y
+C Y
+A X
+A X
+C X
+A Z
+A Z
+A Y
+A X
+A X
+A Z
+C Y
+B X
+A Z
+A Z
+A Z
+A Z
+A Y
+A Y
+A Z
+C Y
+C Y
+A X
+A Z
+A Z
+C Y
+A Y
+A Y
+A X
+A Y
+A X
+A X
+A X
+A Z
+A Z
+A Y
+A Z
+C X
+A Z
+A Y
+A Z
+A Z
+A Y
+A Z
+A Z
+C X
+A Z
+A Y
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Y
+C X
+B Z
+C Z
+A Z
+A Y
+A X
+A X
+C Y
+C Y
+A X
+C X
+B Z
+A Z
+C X
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Y
+A Z
+A Z
+A Y
+A Z
+A Y
+A Y
+A Z
+A Z
+A Y
+A Z
+C Y
+A Z
+A Z
+A Z
+C X
+C X
+A Z
+C Y
+A Z
+A Z
+C X
+A Z
+C X
+A Y
+A Z
+C Y
+A Z
+A Z
+C X
+C Y
+A Z
+C X
+C X
+A X
+A Y
+C Y
+A Y
+A Z
+C X
+A Z
+A Z
+A X
+A Z
+C Y
+A Z
+C X
+A Z
+C X
+A Z
+C X
+A Y
+C Y
+A X
+A Z
+A Z
+C Y
+A X
+A Z
+A Y
+B Z
+A Z
+A X
+A Z
+A Z
+A X
+C X
+A Z
+A Z
+C Y
+A Z
+A Y
+A Z
+C Y
+A Z
+A Y
+A Z
+C Z
+A Y
+A Z
+A Y
+C Y
+A Z
+C X
+A X
+B Z
+C X
+C X
+A Z
+A Z
+A Y
+A X
+A Z
+A Z
+B Z
+A Z
+C Z
+A X
+A Z
+A Z
+A Z
+A Z
+A X
+A X
+A Z
+A X
+A Z
+A Z
+A Z
+A X
+C X
+C Y
+A X
+C X
+C X
+A Z
+A X
+C Y
+B Z
+A Z
+A Z
+C X
+B X
+A Z
+A Z
+C X
+C X
+B Z
+C Y
+A Z
+A Z
+C X
+A X
+A Y
+C Y
+C Y
+B Z
+A Y
+C X
+A Z
+A Z
+A Y
+C X
+A Z
+A Z
+C X
+C Y
+A Z
+C X
+C Y
+C Y
+C X
+C Y
+A Z
+C Y
+A Z
+C X
+A Z
+C Y
+C Z
+A Z
+B Z
+A Z
+C X
+C X
+B Y
+B Z
+C Y
+C X
+C X
+A Y
+C X
+C X
+A Z
+A Y
+A Z
+C X
+A X
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+C X
+C X
+A Z
+C Y
+C X
+A Z
+B Z
+A Z
+A Z
+A X
+C X
+A Y
+A Z
+A Z
+A Y
+A X
+C Y
+B X
+A Z
+A X
+C Y
+C X
+C X
+C Y
+C Y
+A Z
+A Z
+C Y
+A Z
+A Y
+C Y
+A Y
+C X
+A Z
+C X
+C Y
+C Y
+A Z
+A Z
+A X
+A Y
+A Z
+A X
+A Z
+A Z
+A Z
+C Y
+A Z
+A Z
+C X
+C Y
+A Z
+A Z
+A Z
+C Y
+C X
+A Z
+C X
+A Z
+A Z
+A Z
+A X
+A Z
+A Z
+A Y
+B Z
+A Z
+A Z
+A Z
+C Y
+A Z
+B Z
+A Z
+C Z
+A Z
+A Y
+C X
+C Y
+C X
+C X
+A Z
+A Z
+A Y
+A Y
+A Z
+A Y
+B Z
+C Y
+A Y
+A Z
+C X
+A Z
+A Z
+C Y
+A Y
+A Z
+A Y
+C Y
+A Z
+A Z
+A X
+B Z
+A Z
+A X
+C X
+A Z
+C Y
+C Y
+A Z
+B Y
+A Y
+A Z
+A Z
+A Z
+A Z
+C X
+C X
+A Z
+C X
+A Y
+A Z
+A Z
+C Y
+A Z
+A Z
+C Y
+C X
+B Z
+A Y
+A Y
+C X
+C X
+A Z
+A X
+B Z
+A Z
+C Y
+A Z
+A Y
+A Z
+A Z
+A Y
+C Y
+C X
+A Z
+C X
+A Z
+C Y
+A Z
+C Y
+A Y
+A Z
+A Y
+A Z
+C X
+A Z
+A Z
+C X
+A Z
+B Y
+A Z
+A Z
+C Y
+C X
+C X
+A Z
+A Z
+C X
+B Z
+A Y
+A Z
+A Y
+A Z
+A Z
+A Y
+A X
+C X
+C X
+A X
+A Z
+A Y
+A Y
+A Z
+A Y
+A Z
+A Z
+C Y
+A X
+A Z
+A Z
+C X
+A Z
+A X
+B X
+C X
+A Z
+A Y
+B Z
+C X
+C Y
+A Z
+B Z
+C Y
+A Z
+A Z
+A X
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z
+A Z