summaryrefslogtreecommitdiff
path: root/02
diff options
context:
space:
mode:
authorAlex Pickering <alex@cogarr.net>2025-02-07 12:49:48 -0600
committerAlex Pickering <alex@cogarr.net>2025-02-07 12:49:48 -0600
commit3555be54c2abb8d5ece008a60dbdfbde0ffbddd7 (patch)
tree278876284d07118ecdea5c48cb6453f3122887f0 /02
downloadadvent_of_code_2022-3555be54c2abb8d5ece008a60dbdfbde0ffbddd7.tar.gz
advent_of_code_2022-3555be54c2abb8d5ece008a60dbdfbde0ffbddd7.tar.bz2
advent_of_code_2022-3555be54c2abb8d5ece008a60dbdfbde0ffbddd7.zip
inital commitHEADmaster
Diffstat (limited to '02')
-rw-r--r--02/1.lua21
-rw-r--r--02/2.lua21
-rw-r--r--02/example.txt3
-rwxr-xr-x02/ext.lua62
-rw-r--r--02/input.txt2500
5 files changed, 2607 insertions, 0 deletions
diff --git a/02/1.lua b/02/1.lua
new file mode 100644
index 0000000..534bbb7
--- /dev/null
+++ b/02/1.lua
@@ -0,0 +1,21 @@
+require("ext")
+
+local points = {
+ ["A X"] = 1 + 3,
+ ["A Y"] = 2 + 6,
+ ["A Z"] = 3 + 0,
+
+ ["B X"] = 1 + 0,
+ ["B Y"] = 2 + 3,
+ ["B Z"] = 3 + 6,
+
+ ["C X"] = 1 + 6,
+ ["C Y"] = 2 + 0,
+ ["C Z"] = 3 + 3,
+}
+
+local score = 0
+for line in io.lines() do
+ score = score + points[line]
+end
+print(score)
diff --git a/02/2.lua b/02/2.lua
new file mode 100644
index 0000000..40ed0d3
--- /dev/null
+++ b/02/2.lua
@@ -0,0 +1,21 @@
+require("ext")
+
+local points = {
+ ["A X"] = 3 + 0,
+ ["A Y"] = 1 + 3,
+ ["A Z"] = 2 + 6,
+
+ ["B X"] = 1 + 0,
+ ["B Y"] = 2 + 3,
+ ["B Z"] = 3 + 6,
+
+ ["C X"] = 2 + 0,
+ ["C Y"] = 3 + 3,
+ ["C Z"] = 1 + 6,
+}
+
+local score = 0
+for line in io.lines() do
+ score = score + points[line]
+end
+print(score)
diff --git a/02/example.txt b/02/example.txt
new file mode 100644
index 0000000..db60e36
--- /dev/null
+++ b/02/example.txt
@@ -0,0 +1,3 @@
+A Y
+B X
+C Z
diff --git a/02/ext.lua b/02/ext.lua
new file mode 100755
index 0000000..4a58a7e
--- /dev/null
+++ b/02/ext.lua
@@ -0,0 +1,62 @@
+-- Override tostring to display more info about the table
+local old_tostring = tostring
+local numtabs = 0
+local printed_tables = {}
+
+local function tostring_helper(el)
+ assert(type(el) == "table", "Tried to call helper with something that was not a table, it was a " .. type(el))
+ local mt = getmetatable(el)
+ if mt and mt.__tostring then
+ return mt.__tostring(el)
+ elseif printed_tables[el] == true then
+ return old_tostring(el)
+ else
+ printed_tables[el] = true
+ numtabs = numtabs + 1
+ local strbuilder = setmetatable({"{"},{__index = table})
+ for k,v in pairs(el) do
+ local key,value
+ if type(k) == "table" then
+ key = tostring_helper(k)
+ else
+ key = old_tostring(k)
+ end
+ if type(v) == "table" then
+ value = tostring_helper(v)
+ else
+ value = old_tostring(v)
+ end
+ strbuilder:append(string.format("%s%s : %s", string.rep("\t",numtabs), key, value))
+ end
+ strbuilder:append(string.rep("\t",numtabs - 1) .. "}")
+ numtabs = numtabs - 1
+ return strbuilder:concat("\n")
+ end
+
+end
+function tostring(el)
+ printed_tables = {}
+ if type(el) == "table" then
+ return tostring_helper(el)
+ end
+ return old_tostring(el)
+end
+
+-- Functions to save my hands
+function printf(fmt, ...)
+ print(string.format(fmt,...))
+end
+function errorf(fmt, ...)
+ --Our error isn't actually in this function, it's 1 above us (1) = 2
+ error(string.format(fmt,...),2)
+end
+function assertf(bool, fmt, ...)
+ assert(type(fmt) == "string", "Assertf arg #2 was \"" .. type(fmt) .. "\", expected string")
+ if not bool then
+ args = {fmt}
+ for k,v in ipairs({...}) do
+ table.insert(args,tostring(v))
+ end
+ error(string.format(unpack(args)),2)
+ end
+end
diff --git a/02/input.txt b/02/input.txt
new file mode 100644
index 0000000..a6dd261
--- /dev/null
+++ b/02/input.txt
@@ -0,0 +1,2500 @@
+B Y
+A Y
+B Z
+A Z
+A Y
+B Z
+C X
+C X
+C X
+C Y
+C Z
+B Y
+C Y
+C Z
+A Y
+B Y
+C Y
+B Y
+B Y
+B Y
+C X
+B Z
+A X
+A Z
+C Z
+C Y
+C Y
+B Y
+B X
+C Z
+B Y
+B Y
+C Y
+B Y
+B Z
+B Z
+B Y
+A Y
+A Y
+B Z
+B Y
+B Y
+B Y
+C Y
+A Y
+B Y
+C Z
+B Y
+B Y
+A Z
+B Y
+A Y
+B Y
+B Z
+C Y
+C Z
+A Z
+C Z
+B Y
+A X
+C Z
+A X
+A Z
+B Y
+B Y
+A Y
+C Z
+B Y
+B Z
+B Z
+B X
+C Y
+B Y
+A Y
+A Y
+B Y
+A Z
+B X
+B Y
+B Y
+C Y
+C Z
+A Z
+B Y
+A Y
+B Z
+B Y
+B Y
+B Y
+C X
+C Y
+B Y
+B Y
+B Z
+B Y
+C X
+B Y
+B Y
+C Z
+C Z
+A X
+A X
+A X
+A X
+B Y
+C Z
+B Z
+B Y
+C Z
+B Y
+B Z
+B Y
+C X
+B Y
+C X
+C Z
+B Z
+C Z
+C Y
+B Y
+B Y
+A Z
+C Z
+C Y
+C Y
+B Y
+B X
+C Y
+B Z
+C Z
+C Z
+A Z
+B Y
+B Y
+B Z
+B Y
+B Y
+C X
+A Z
+A Y
+B Y
+C Y
+B X
+C Y
+C X
+C Y
+A Y
+B Y
+A Y
+A Z
+C Z
+C Z
+A Z
+C Y
+B Y
+C Z
+C Y
+B Y
+B Y
+C X
+B Y
+B Y
+C Y
+C X
+B X
+C Y
+A Z
+B Y
+A Z
+C Y
+C Z
+B Y
+A Z
+C X
+C X
+B Y
+B Y
+C Z
+B Y
+A Y
+B Y
+A Z
+A X
+A Y
+B Y
+B Y
+A Y
+C Z
+B Z
+B Y
+B Y
+B Y
+B Y
+C X
+C Z
+C Y
+B Y
+A Y
+A Z
+C Y
+B Y
+B Y
+B Z
+B Z
+B Z
+A Y
+B Z
+B Y
+C Y
+B Y
+C X
+C Y
+C Y
+B Y
+A Y
+A Z
+B Y
+B Y
+A Y
+C X
+C X
+B Y
+A Z
+A X
+C Y
+C Y
+C Y
+C X
+C Y
+B Y
+B Z
+B Y
+B X
+A Z
+B Y
+B Z
+A X
+B Y
+C Z
+B Y
+B Z
+B Y
+B Y
+B Y
+B X
+C Z
+C Z
+A Y
+B Y
+C Y
+A Y
+C X
+C Z
+A Z
+C Y
+B Y
+B Y
+C Z
+A Z
+C Y
+C X
+C Z
+B X
+B Y
+C Y
+B Y
+C X
+B Y
+A X
+B Y
+B Y
+A Z
+B Y
+B Y
+C X
+B Y
+A X
+A Y
+B Y
+A Y
+C Y
+C X
+C X
+B Z
+B Y
+C Y
+C Y
+C Y
+B Y
+A Y
+C Y
+B Y
+B Y
+B Y
+B Y
+A Z
+B Y
+B Y
+A Z
+B Y
+C Z
+C Y
+B Y
+B Z
+A Y
+B Y
+A Z
+C Z
+B Y
+C Z
+B Z
+B Z
+A X
+A Z
+C Z
+B Y
+A Y
+C Z
+C Y
+B Y
+B X
+B Y
+C Y
+C Y
+C Y
+C X
+C Y
+B Y
+B Y
+C Y
+B Y
+C Z
+C Z
+B Y
+A Y
+C Y
+B Z
+C X
+C Y
+B Y
+B Y
+B Y
+C Z
+B Z
+B Y
+A Y
+B Y
+A Z
+B Y
+B Z
+B Y
+B Z
+B Y
+B Z
+C Z
+C Z
+A X
+A Y
+B Y
+C Z
+C Y
+B Z
+A Y
+A X
+B Y
+B Y
+B Y
+B Z
+B Y
+B Y
+C Y
+B Y
+B Y
+C Y
+B Y
+A Z
+C Z
+C Z
+C Z
+A Z
+B Y
+B Z
+B Y
+A Z
+B Y
+B Y
+B Y
+B Y
+B Y
+A X
+C Y
+B Y
+C Z
+B Y
+B Y
+B Y
+C Y
+A Z
+B Y
+B Z
+B Y
+B Y
+B Y
+B Y
+B Y
+C Y
+B Z
+A Z
+C Y
+C X
+C X
+B Y
+C Z
+B Z
+B Z
+B Y
+B Y
+B Y
+A Z
+B Z
+A Z
+B Z
+A Z
+B Y
+B X
+B Y
+C Z
+C Y
+B Y
+A Z
+A Z
+B Y
+B Y
+B Y
+B Y
+A Z
+B Z
+B Y
+B Y
+B Z
+B Y
+C Z
+B Y
+C Y
+B Y
+C Y
+B Y
+A Z
+B Y
+A Z
+C Z
+C Y
+A Z
+A Y
+A Y
+A X
+A Y
+B Y
+B Z
+A X
+C X
+C Z
+B Y
+A Z
+A X
+B Y
+B Y
+B Y
+B Z
+C Y
+C X
+B Z
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+A Z
+C Y
+B Z
+B Y
+B Y
+B Y
+A X
+B Z
+A Y
+C Z
+B Z
+B Y
+B Y
+C Y
+A Y
+C Y
+B Y
+B Y
+A X
+C X
+B Z
+C Y
+B Y
+B Z
+C Y
+B Y
+B Z
+B X
+B Y
+A Z
+B Y
+B Z
+B Y
+B Y
+A Z
+A X
+A Z
+B Z
+A X
+C Y
+B Z
+B Y
+B X
+A X
+C Y
+C X
+A Y
+B Z
+B Y
+A X
+A Z
+C X
+C Z
+B Z
+C X
+C X
+B Y
+A Y
+B Y
+B Y
+C Z
+A X
+C X
+B Y
+B Y
+B Y
+B Y
+C X
+B Z
+B Y
+B Y
+C X
+B X
+B Y
+C X
+A Z
+A Y
+B Y
+B Y
+B Y
+C Z
+B Y
+C X
+C X
+B Z
+B Z
+B Z
+B X
+B Y
+C Y
+B Z
+B Y
+B Y
+B Y
+B Z
+B Y
+C Y
+B Y
+B Y
+B Y
+B Y
+B Z
+C Z
+A Y
+C Y
+B Y
+B Y
+A Z
+C Z
+B Y
+B Y
+A Y
+B Y
+C Z
+C Z
+B Y
+A Y
+A Y
+C Y
+B Z
+B Z
+C X
+B Y
+C X
+B Z
+C Z
+A Z
+A Y
+B Z
+C X
+B Y
+A X
+A Z
+A Y
+B Y
+B X
+B Z
+A Z
+B Z
+A X
+A X
+A Y
+B Y
+C Y
+B Y
+B Y
+C Z
+B Y
+A X
+B Y
+C Y
+B Z
+C X
+B Y
+B Y
+B Z
+A Z
+B Y
+C Z
+B Y
+C Y
+B Y
+A Y
+B Y
+B Y
+A Z
+A Y
+C Y
+B Y
+B Z
+C Y
+B Y
+B Y
+C Z
+B Y
+C Z
+A X
+A Z
+B Y
+B Y
+C Z
+B Y
+B Y
+C Y
+A X
+C Z
+B Y
+A Y
+B Y
+A X
+A Z
+B Z
+B Z
+B Y
+B Y
+C Y
+A Y
+C X
+B Y
+A Z
+C Y
+C X
+A Y
+A Z
+C X
+C Z
+A Y
+B Y
+B Y
+C X
+B Y
+A Y
+B Z
+A X
+C Z
+A X
+B Z
+A Z
+A Z
+B Z
+B Y
+B Y
+B Y
+B Y
+C Y
+B Y
+A X
+A Y
+A Y
+B Y
+B Y
+C Z
+A Y
+B Z
+B Y
+C Y
+A X
+B Y
+A X
+A X
+A Z
+C Y
+A Z
+C Z
+B Y
+B Y
+B Y
+A X
+B Z
+C Z
+A X
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+C Y
+B Y
+B Y
+C Y
+C Y
+C Z
+A Y
+C Y
+B Z
+B Y
+C Y
+B Y
+C Y
+A Y
+B Y
+B Y
+B Y
+B Z
+B Z
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+C X
+A Z
+A X
+B Y
+B Z
+A Z
+A Z
+B Y
+B Y
+A Z
+A Y
+A Z
+A Z
+A Y
+B Y
+B Y
+B Y
+B Y
+C X
+B Y
+B Y
+B Y
+B Y
+B Z
+B Z
+B Y
+C Z
+A Z
+A Y
+B Y
+B X
+C Y
+C Y
+A Z
+A X
+B Y
+A X
+B Y
+C Z
+B Y
+C X
+B Y
+B Y
+B Y
+C X
+C Y
+B Y
+B Y
+B Y
+A Y
+B Y
+C X
+B Z
+B Y
+B Y
+C Z
+B Y
+B Y
+A Z
+B Z
+B Y
+B Z
+B X
+A Y
+B Y
+B Y
+B Y
+B Y
+C X
+C Y
+B Y
+A Z
+A Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B Z
+C Z
+A X
+B Y
+A Y
+B Y
+B Y
+B Y
+B Y
+B Y
+A Y
+B Z
+B Y
+B Y
+C Y
+A X
+A X
+B X
+C Y
+B Y
+A Y
+B Y
+B Z
+B Y
+C Y
+B Z
+B Z
+A Y
+A Y
+C Z
+B Y
+C Z
+C X
+A Y
+B Y
+A Y
+A X
+B Y
+C Y
+A Z
+B Y
+B Y
+B Y
+A Z
+B Y
+A X
+C X
+A X
+B Z
+C Y
+A X
+C Y
+A Z
+C Y
+B Y
+B Y
+B Y
+B Y
+C Y
+C Z
+A Z
+B Z
+B Z
+C Z
+B Y
+A Y
+B Z
+B Z
+A Y
+B Z
+C Z
+C Y
+C X
+C Z
+C X
+B Y
+A X
+B Z
+B Y
+A X
+B Y
+B Y
+B Z
+C Y
+C Z
+C Y
+B Y
+B Y
+B Z
+A X
+B Y
+A X
+B Z
+A Z
+A Z
+B Y
+C Y
+C Y
+C Y
+B Y
+A Z
+B Z
+B Z
+C Y
+A Y
+A Y
+A Z
+B Y
+A X
+B Z
+C X
+B Z
+B Y
+A Y
+A Y
+C Y
+A Z
+B X
+A X
+C Y
+B Y
+B Y
+C Y
+B Z
+C X
+C Y
+B Y
+C Y
+B Y
+B Y
+C Y
+B X
+A Z
+B Z
+B Y
+A Z
+B Z
+B Y
+A Z
+C Y
+C Y
+B Y
+C Y
+B Y
+B Y
+B Y
+B Y
+B Z
+B Y
+C Y
+C Z
+B Y
+B Y
+A Z
+B Y
+B Z
+A Y
+A Y
+C Y
+A Z
+C Y
+B Z
+B Y
+C Y
+B Z
+C Y
+A Z
+B Y
+B Y
+B Y
+B Y
+C Z
+A Y
+A X
+C X
+A Y
+C Y
+C X
+B Y
+C Y
+A Y
+B Y
+C Y
+B Y
+A X
+B Y
+B Y
+B Z
+C Y
+C Y
+A X
+B Z
+A Z
+B Y
+B Y
+B Y
+B X
+B Y
+B Y
+C Y
+B Y
+C X
+A Y
+B Y
+B Y
+A Z
+C X
+A X
+A X
+C X
+B Y
+C Z
+B Y
+A Z
+C Y
+B Y
+B Y
+C X
+B Z
+C Y
+A X
+A Y
+C Y
+A Z
+B Y
+B Z
+C Y
+A Z
+A Y
+A Y
+B Y
+A X
+B Z
+B X
+B Z
+B Y
+B Y
+A Y
+C Y
+B Y
+B Z
+B Y
+A Y
+C Y
+C Y
+A X
+B Y
+A X
+C X
+A Z
+A Y
+B Z
+B Y
+B Y
+B Y
+C Y
+A X
+B Z
+A X
+C Y
+C Z
+A X
+B Z
+C X
+B Y
+B Y
+A Y
+B Z
+B X
+B Y
+B Y
+A Z
+C Y
+B Y
+B Y
+C Y
+B Y
+A X
+B Y
+B Y
+B Z
+B Y
+A Y
+A Z
+B Y
+B Y
+A Y
+A Z
+A Z
+A Y
+B Y
+A Y
+B Z
+B Y
+B Y
+A Z
+B Y
+B Y
+B X
+A X
+B Y
+B Y
+C Z
+C X
+A Y
+B Z
+B Y
+C Y
+B Y
+B Y
+B Y
+A X
+A Y
+B Y
+C Z
+B Y
+B Y
+B Y
+C Z
+B Y
+B Z
+B Y
+B Y
+B Y
+C Y
+B Y
+B Y
+C Y
+C Y
+A X
+C Y
+A Y
+B Y
+B Y
+B Y
+B Y
+A Y
+A Y
+C X
+B Y
+C Z
+A X
+B X
+C Z
+C Y
+B Y
+B Y
+B X
+B Z
+C Y
+B Z
+B Y
+B Y
+B Y
+B Y
+C Z
+C Y
+C Y
+A Y
+B Y
+B Z
+B Y
+C Z
+B Y
+B Y
+C Y
+B Y
+B Z
+B Z
+B Y
+C Z
+B Y
+B Y
+B Y
+B Y
+B Y
+A Y
+C X
+A Z
+A Y
+B Y
+C X
+B Z
+B Y
+C Y
+B Y
+A Y
+B Y
+B Y
+B Y
+A Z
+A Z
+B Y
+B Y
+B Z
+A Z
+C Y
+C Y
+C Y
+C Z
+B Y
+C Y
+C X
+A Z
+B Z
+B X
+B X
+C Y
+B Y
+A Z
+B Z
+B Y
+B Y
+B Z
+B Y
+B Y
+B X
+B Y
+B Y
+A Z
+A Z
+A Y
+B Z
+B Y
+A Y
+B Y
+A Z
+B Y
+B Y
+A X
+B Z
+C Y
+A Z
+C Y
+C Y
+B Y
+C X
+C Y
+A X
+A Z
+C Z
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+C X
+C Y
+C Y
+C Y
+B Y
+B Y
+C Y
+C Y
+A X
+B X
+C X
+C Z
+B Y
+A Y
+A Z
+B Y
+C Y
+C Z
+B Y
+A Y
+C Y
+B Y
+A Y
+B Y
+A Y
+C Z
+C Y
+A Y
+A Z
+B Y
+C Y
+B Y
+B Y
+B Y
+B Y
+B Z
+C Z
+B Y
+B Y
+C Z
+A Y
+B Y
+C Y
+B Y
+A X
+B Y
+B Y
+A Y
+B Y
+B Y
+A X
+B Y
+B Z
+B Y
+B Y
+B Y
+C Z
+C Y
+A Z
+B Y
+C Y
+C Z
+B Y
+A Y
+B Y
+B Y
+B Y
+C X
+B Z
+C Y
+C X
+A X
+C Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B Z
+C Y
+B Y
+C X
+B Y
+B Y
+B Y
+B Z
+A Y
+A Y
+A Z
+B Y
+C Y
+A Y
+A X
+B Z
+C Y
+B Y
+B Y
+B Y
+B Y
+B Z
+A Y
+B Y
+C Y
+C Z
+B X
+B Z
+B Y
+B Y
+C Y
+B X
+A Y
+C Y
+B Y
+C Y
+C X
+A Y
+B Y
+B Z
+C Z
+B Y
+B Y
+C Z
+A Z
+A Y
+B Y
+B Y
+B Y
+C Y
+B Y
+B Y
+B Z
+B Z
+C Y
+B Y
+A Z
+C Y
+C Y
+B Y
+A Z
+B Y
+B Y
+B Y
+A Y
+A X
+C Y
+C Z
+C Y
+B Z
+B Y
+B Y
+B Y
+C Y
+B Y
+B Y
+B Y
+B Z
+B Y
+B Y
+C X
+C Y
+A Z
+C X
+B Y
+B Y
+B Z
+B Y
+A X
+A X
+C X
+B Y
+B Y
+B Y
+A Z
+B Z
+B Z
+B Y
+C Y
+B Y
+B Y
+C Y
+A Z
+C Y
+B Y
+B Z
+A Z
+A Y
+B Z
+A Z
+B Y
+B Y
+A Z
+B Y
+C Z
+B Y
+B Y
+B Z
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+A Z
+B Y
+B Y
+C Y
+B Y
+A Y
+B Y
+C Y
+B Y
+B Y
+B Y
+C Z
+C Y
+C X
+B Y
+A X
+C Y
+B Z
+C Y
+B Y
+C X
+A Y
+B Y
+A Z
+A X
+B Z
+C Y
+C Y
+A Z
+C Z
+B Z
+B Y
+B Y
+B Y
+B Y
+A Y
+A Z
+B Y
+B Y
+A Y
+C X
+B Y
+B Y
+C Y
+C X
+B X
+C Y
+B Y
+A Y
+B Y
+B Y
+B Y
+C Y
+B Y
+B Y
+A Z
+B Y
+A Z
+B Y
+B Y
+B Z
+B Y
+C Y
+B Y
+A Y
+B Y
+A Y
+B Y
+B Z
+B Y
+B Y
+C X
+B Y
+B Y
+C X
+C Z
+C Z
+B Y
+B Z
+B Y
+A Y
+B Y
+A Y
+B Y
+C Y
+A Y
+B Y
+C Y
+B Y
+B Y
+B Y
+A Y
+C Y
+C Z
+C X
+C Y
+C X
+C Y
+B Y
+C Z
+C Z
+B Y
+A Z
+B Z
+B X
+C Y
+A Y
+C Y
+C Y
+B Y
+B Y
+B Y
+B Y
+C X
+B Y
+C Y
+C X
+C Y
+C X
+B Y
+A Y
+A Y
+B Y
+C X
+C X
+C X
+C X
+C X
+B Y
+B Y
+B Y
+C Y
+C Z
+C Y
+B Y
+A Y
+C Z
+B Y
+B Y
+A Y
+B Y
+C Y
+A Z
+B Y
+A Z
+C X
+C Y
+C Y
+A X
+C Y
+C Z
+B Y
+B Y
+C Y
+B Z
+B Z
+B Y
+A Z
+A X
+B Y
+B Y
+A Z
+C Y
+C Z
+A Z
+C Z
+B Y
+C Y
+B Z
+C Z
+C Y
+A X
+A Y
+B Z
+C Z
+B Y
+B Y
+C Z
+C X
+B Y
+B Y
+B Z
+B Y
+A Y
+A Z
+B Y
+A Y
+B Y
+B Y
+A Z
+C X
+C Y
+B Y
+B Y
+A X
+B Y
+B Z
+C Y
+A Y
+C Y
+B Y
+C Y
+B Y
+B Y
+B Y
+C X
+B X
+B Y
+B Y
+B Y
+B Z
+B Z
+B Y
+B X
+B Y
+B X
+B Z
+A X
+C X
+B Y
+B Y
+A Z
+C X
+A Y
+B Y
+B Z
+C Z
+B Y
+B Z
+A Y
+A Z
+B Y
+C Z
+B Y
+A Z
+B Y
+A Z
+A Y
+C Y
+B Y
+B Y
+A X
+C Y
+B Y
+A X
+B Y
+C Z
+A Z
+B Y
+B X
+A Y
+C Y
+B Z
+C Y
+B Y
+B Z
+A Y
+A Z
+B Y
+B Y
+A Z
+A X
+C Y
+B Z
+B Z
+B Y
+C Z
+C Y
+C Z
+B Y
+B Y
+B Z
+B Y
+B Y
+A X
+B Y
+B Y
+C X
+C Z
+B Y
+B Y
+A X
+B Y
+B Z
+C Z
+B Z
+A Y
+B Y
+B Z
+B Y
+C Y
+C Y
+B Y
+B Y
+B Z
+A X
+B Z
+B Y
+C Y
+A X
+B Y
+A Y
+B Z
+A Y
+B Y
+B Y
+B Z
+C Y
+C Y
+B Z
+C Y
+B Y
+C Y
+B Y
+A Z
+A Z
+C Z
+B Y
+B Y
+A Z
+B Z
+B Z
+C Y
+B Y
+B Y
+B Z
+C Y
+A Z
+C Y
+C Z
+C Z
+A Y
+B Y
+C Y
+B Z
+B Y
+C Z
+B Y
+B Y
+A X
+B Y
+B Y
+B Y
+B Y
+A Z
+C Y
+A Y
+B Y
+B Y
+C Z
+B Y
+B Y
+B Y
+B Z
+B Y
+B X
+C Y
+B Y
+B Y
+A X
+C X
+A X
+B Z
+A Z
+B Y
+B Y
+C X
+B Z
+B Y
+B Z
+B Y
+C Z
+A X
+B Z
+B Y
+B Y
+B Z
+B Y
+B Y
+A Y
+B Y
+A X
+B Z
+C X
+B Y
+B Y
+B Y
+B Y
+B Y
+B Z
+B Y
+B Y
+C Z
+B Y
+A Y
+A X
+C Y
+B Z
+B Z
+B Y
+B Y
+A Y
+B Z
+B Y
+B Y
+B Y
+B Y
+B Z
+B X
+B Y
+B Y
+C Y
+B Y
+B Y
+B Y
+B Z
+B Z
+B Y
+B Y
+B Y
+C X
+C Z
+C Z
+A Z
+A Y
+C Y
+B Y
+C Z
+C Y
+C X
+B Y
+B Y
+A X
+A Y
+C X
+B Y
+B Y
+C Y
+B Y
+B Y
+B Y
+C Z
+B Y
+C Z
+C Y
+B Z
+B Y
+B Y
+A X
+C Z
+C Y
+B Y
+B Y
+C Y
+C Y
+B Z
+B Y
+B Z
+B Y
+C Y
+B Y
+C Y
+B Y
+C Y
+C X
+B Y
+C Y
+B Y
+A Z
+B Y
+A Y
+C Y
+C Y
+B Y
+B Y
+C X
+A Z
+A X
+B Z
+B Y
+B Z
+A Z
+C Y
+A Y
+A X
+C Y
+A Y
+A Y
+C Z
+B Y
+B Y
+B Y
+C X
+B Y
+A X
+B Y
+B Y
+B Y
+A Z
+A X
+B Y
+C Y
+B Y
+A X
+B Z
+A Y
+A X
+A Z
+C Z
+B Z
+C X
+B Y
+A X
+B Z
+A Z
+B Y
+A Z
+B Y
+A Z
+C Z
+A Y
+B Y
+B Y
+A X
+B Y
+A X
+B Y
+A Z
+C Z
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+A Y
+C X
+C Y
+C Z
+B Y
+B Y
+A X
+C Z
+A Y
+B Y
+B Y
+C Z
+B Z
+B Y
+B Z
+B Y
+B Y
+B Y
+C Y
+A Y
+C Z
+B Y
+A X
+B Y
+C Y
+B Y
+A X
+A X
+B Y
+C Y
+B Y
+B Y
+A Y
+C X
+C Y
+C X
+A Y
+B Y
+B Y
+A Y
+B Y
+C Y
+C Z
+B Z
+B Y
+B Y
+C Y
+B Z
+B Y
+B Y
+B Y
+C Y
+B Y
+C Y
+B Y
+C Z
+B Y
+B Z
+B Y
+B Y
+A Z
+B Y
+B Z
+B Y
+B Z
+A Y
+B Y
+B Y
+B Y
+A Y
+C X
+B Y
+C Y
+B Y
+B Y
+B Y
+C Y
+B Y
+B Y
+C Z
+B Y
+A Z
+C Y
+C Z
+B Y
+B Y
+C Y
+B Z
+B Y
+A Y
+A Y
+B Y
+B Y
+B Y
+B X
+B Z
+A X
+C Z
+B Z
+A Z
+B Y
+B Y
+A X
+A Y
+C Y
+B Y
+B Z
+B Y
+B Y
+B Y
+B Z
+A Y
+B Y
+B Y
+B Y
+C Z
+C Z
+B Y
+B Z
+B Y
+B Y
+B Y
+C Y
+A Z
+B Y
+B Y
+B Z
+B Y
+B Y
+B Y
+A X
+B Y
+B Y
+B Y
+C Y
+B Y
+B Y
+C Z
+B Z
+C Y
+B Y
+B Z
+C Y
+B Y
+B Z
+B Y
+B Y
+A Z
+C Z
+C Y
+B Y
+C X
+B Y
+B Y
+B Z
+B Y
+B Y
+A Y
+B Z
+C Y
+C Y
+A Y
+B Z
+C X
+C Y
+C X
+A Z
+A X
+B Y
+C X
+B Y
+B Y
+B Z
+A Z
+B Z
+B X
+B Y
+B Z
+B Y
+B X
+A Y
+B Y
+C X
+A Z
+A X
+B Y
+B Y
+B Y
+B Z
+B Y
+A X
+C Z
+B Z
+B Z
+B Z
+A Y
+B Y
+B Y
+C X
+B Y
+A Y
+A Z
+B Z
+B Z
+B Y
+B Y
+C Y
+C Y
+C X
+B Y
+C Z
+B Z
+B Y
+B Y
+B Y
+B Z
+C X
+C X
+B Y
+B Y
+B Z
+B Y
+A Y
+B Y
+B Y
+A X
+B Y
+B Y
+B Z
+A Y
+B Y
+A X
+B X
+A Y
+C Y
+B Y
+B X
+A X
+B Y
+B Z
+A Y
+B Z
+B Y
+B Y
+C Y
+B Y
+B Y
+B Y
+B Y
+B Y
+A Y
+B Y
+A Y
+B Y
+A Y
+B Y
+B Y
+B Y
+A X
+A Y
+A Y
+A X
+B Z
+A X
+C Y
+C Y
+B Y
+A X
+B Y
+A Y
+B Y
+B Y
+B Y
+C X
+C Y
+B Y
+C X
+C Y
+B Y
+B Y
+C Y
+B Y
+B Y
+B Y
+B Z
+A Z
+B Y
+B Z
+B Z
+A X
+C Z
+B Y
+C Z
+B Y
+C Z
+B Y
+A X
+C Y
+C Z
+A Z
+A Y
+B Y
+A Y
+B Y
+B Y
+B Y
+B Y
+B Y
+A Y
+C Y
+C Y
+B Z
+B Y
+B Y
+B Z
+A Z
+A X
+C Z
+B Y
+B Y
+A X
+C Y
+A Y
+B Y
+A Y
+B Y
+B Z
+C Y
+C Z
+B Y
+A Y
+B Y
+C Z
+C Z
+A X
+A X
+C Z
+A X
+A Z
+B Y
+B Y
+C Z
+C Y
+C Z
+A X
+A X
+B Z
+B Y
+B Y
+A X
+B Y
+B Z
+C Y
+C X
+B Y
+C Z
+B Y
+C Z
+B Y
+B Z
+B Y
+C Y
+A Z
+B Y
+B Y
+A X
+A Z
+A X
+C Y
+B Y
+B Y
+C Z
+B Z
+C X
+B Y
+C Y
+C Y
+A Z
+C Z
+B Z
+B Y
+B Z
+B Y
+A Z
+A Y
+A Y
+A X
+B Z
+C Z
+C X
+B Y
+A X
+C X
+A Y
+B Y
+B Y
+B Y
+A Z
+B Y
+C X
+B Y
+A Z
+B Z
+B Z
+C Y
+B Y
+C X
+C X
+C Y
+C Y
+C Z
+C X
+B Y
+C Y
+C Y
+B Z
+B Y
+A Y
+B Z
+A X
+B Y
+A Z
+C Y
+B Y
+C Z
+B Y
+A X
+C Z
+B Z
+B Y
+B Y
+B Y
+B Y
+B Y
+C Z
+A Z
+C Y
+A Z
+B Y
+C X
+C X
+A X
+A Y
+B Z
+C Y
+C X
+C X
+C Y
+C X
+B Y
+C X
+A Y
+C Z
+B Y
+B Z
+B Y
+A X
+B Y
+A Z
+A Y
+C X
+A X
+B X
+C X
+C Z
+C X
+A Y
+A Z
+B Y
+A Y