commit d21bdd13f2579276c34e70f187971edecda3d62a
parent 139a518977b7ab8394301ba008b29626bd3c06cd
Author: amin <dev@aminmesbah.com>
Date: Wed, 21 Dec 2022 07:16:29 +0000
Solve 2022 day 2
FossilOrigin-Name: 750bb9dcc1d1c167294f4740c0f93747d2dd202b47252714d5a4758dd2df7f12
Diffstat:
A | 2022/day02.c | | | 92 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | 2022/day02_input.txt | | | 2500 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2 files changed, 2592 insertions(+), 0 deletions(-)
diff --git a/2022/day02.c b/2022/day02.c
@@ -0,0 +1,92 @@
+#if 0
+# Self-building c file. Invoke like: `./file.c`
+outdir=out
+input=$(basename "$0")
+output="$outdir"/$(basename "$0" .c)
+mkdir --parents "$outdir" || exit
+echo "Building ${output}." || exit
+clang -std=c11 -O0 -g -Wall -Wextra -pedantic -Wno-unused-function "$input" -o "$output" || exit
+if [ "$1" = "-r" ];
+then
+ ./"$output" "$@"
+fi
+exit
+#endif
+
+#include <inttypes.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+_Noreturn void assert_fail(const char *expr, const char *file, int line, const char *func) {
+ fprintf(stderr, "%s:%d: %s: Assertion failed: '%s'\n", file, line, func, expr);
+ abort();
+}
+
+#define AM_ENABLE_ASSERT 1
+#define AM_ASSERT_FAIL(expr, file, line, func) assert_fail(expr, file, line, func)
+#include "am_base.h"
+#include "am_memory.h"
+#include "am_list.h"
+#include "am_string.h"
+
+Str open_file(MemArena *arena, char *path) {
+ FILE *f = fopen(path, "r");
+ assert(f);
+
+ int error = fseek(f, 0L, SEEK_END);
+ assert(!error);
+
+ s64 size = ftell(f);
+ assert(size >= 0);
+ rewind(f);
+
+ u8 *buf = am_mem_arena_push(arena, size);
+ assert(buf);
+
+ usz items_read = fread(buf, 1, size, f);
+ assert(items_read == (usz)size);
+
+ error = fclose(f);
+ assert(!error);
+
+ return am_str(buf, size);
+}
+
+int main(void) {
+ MemArena a = am_mem_arena_create(am_mem_base_allocator_malloc());
+ Str input = open_file(&a, "day02_input.txt");
+ StrList lines = am_str_split(&a, input, (u8 *)"\n", 1);
+
+ s64 strat_guide[][3] = {
+ // l t w
+ [0] = {2, 0, 1},
+ [1] = {0, 1, 2},
+ [2] = {1, 2, 0},
+ };
+
+ u64 total1 = 0;
+ u64 total2 = 0;
+ for (StrListNode *line = lines.first; line; line = line->next) {
+ {
+ s64 them = line->s.str[0] - 'A';
+ s64 me = line->s.str[2] - 'X';
+ s64 choice_score = me + 1;
+ s64 win_score = (3 * (me == them)) + (6 * ((me - them == 1) || (them - me == 2)));
+ total1 += choice_score + win_score;
+ }
+ {
+ s64 them = line->s.str[0] - 'A';
+ s64 strat = line->s.str[2] - 'X';
+ s64 me = strat_guide[them][strat];
+ s64 choice_score = me + 1;
+ s64 win_score = 3 * strat;
+ total2 += choice_score + win_score;
+ }
+ }
+
+ am_mem_arena_release(&a);
+
+ printf("Day 2.1: %" PRIu64 "\n", total1);
+ printf("Day 2.2: %" PRIu64 "\n", total2);
+ return 0;
+}
diff --git a/2022/day02_input.txt b/2022/day02_input.txt
@@ -0,0 +1,2500 @@
+B Y
+A Z
+A Z
+C Z
+B Y
+B Y
+B X
+B Z
+C Z
+B X
+B Y
+A Z
+B Y
+B Z
+B Y
+C Z
+B Z
+B Y
+B Z
+C Y
+B Y
+A Z
+B Y
+B Y
+B Y
+C Y
+A Z
+B Y
+B X
+A Z
+B X
+A Z
+A Z
+B Y
+B Y
+B X
+A Z
+B Y
+B Z
+C X
+C X
+B Y
+B Y
+B X
+B X
+C X
+B X
+A Z
+B Y
+B Y
+C X
+A Z
+B Y
+B Z
+B X
+B X
+A Z
+A X
+B Y
+B Y
+B Z
+C Z
+B Z
+B Z
+B Z
+A Z
+A Z
+B X
+B X
+B Y
+B X
+B X
+C Z
+C Z
+A Z
+A Y
+A Z
+B Z
+A Z
+B Y
+C X
+B X
+C X
+B Z
+B Z
+C Z
+B Z
+B X
+C X
+A Z
+C X
+B Z
+A Y
+C Z
+B Y
+C Y
+B X
+A X
+B Y
+B X
+B X
+B Z
+B Y
+A Z
+B Z
+B Y
+B Y
+A X
+A Z
+B X
+B X
+B X
+B X
+B Z
+B Z
+B Y
+C X
+A Z
+A Z
+B Y
+B Z
+B Y
+A Z
+B Z
+A Z
+A Z
+C X
+B Z
+A Z
+A Z
+B Y
+B Z
+A Z
+B Y
+B Y
+A Z
+B Y
+C X
+B Z
+B Y
+B X
+C X
+B X
+B X
+B X
+A Z
+A Z
+C Y
+A Z
+B Y
+A Z
+C X
+B Z
+B Z
+C X
+B Y
+C X
+B X
+B X
+C X
+A Z
+B Y
+C X
+B X
+B Y
+A Z
+B Y
+B Y
+C X
+B Y
+C X
+A Z
+A Z
+A Z
+B Y
+B Y
+A X
+A Z
+A Z
+B Y
+C X
+C Y
+B Y
+C X
+A Z
+B X
+A Z
+A Z
+C X
+B Y
+A Z
+B Y
+C X
+A Z
+B X
+B Y
+A Z
+B Y
+B X
+B X
+C X
+B Y
+C Y
+A Z
+B Y
+B Y
+C Y
+B Y
+C Y
+C X
+A Y
+A Y
+B Z
+B Y
+A Z
+B Z
+B X
+B X
+B Y
+A Z
+B Y
+B X
+B Y
+B Y
+C Z
+B Y
+B Y
+A Z
+A Z
+B Z
+A Y
+C X
+B Y
+B Y
+B Z
+B Z
+B Y
+C X
+B Y
+B X
+B Z
+B Y
+B X
+B Y
+C Z
+B Y
+B X
+A Z
+B Z
+B Z
+A Z
+C X
+B Y
+C Z
+A Z
+B Y
+C Z
+B Y
+B X
+B Y
+B X
+C Z
+B Z
+A Z
+A Z
+A Z
+A X
+B Z
+B Y
+B X
+B Y
+A Z
+B Z
+C Z
+B X
+B Z
+B Z
+A Z
+B Y
+B X
+A Z
+A Z
+B Y
+B X
+A Z
+A Z
+C Z
+A Z
+C Z
+B Y
+B Y
+B Z
+C X
+A Z
+B X
+B Y
+B X
+B Y
+B Y
+B X
+B Z
+B X
+C Z
+C X
+C X
+A Z
+A Z
+B X
+B X
+A Y
+C X
+B Y
+A Y
+B Z
+B X
+A Z
+B X
+B Y
+B Y
+B Y
+B Y
+A Z
+A Z
+B Y
+B X
+C Z
+B Z
+C X
+B Z
+B Y
+C X
+A Z
+B Y
+A Z
+A Z
+B Z
+B Y
+B X
+A Z
+B X
+B Y
+A Z
+B Z
+B X
+B X
+A Z
+C Y
+B X
+A Z
+B X
+B Y
+C X
+B Y
+C Z
+C X
+B Y
+B Y
+B Y
+B X
+B Y
+B X
+A Y
+A Z
+B Z
+B Y
+B X
+B Z
+B Y
+C Z
+B Y
+A Z
+B X
+A Z
+C X
+A X
+B Z
+B Z
+C X
+A Z
+B X
+A Z
+A Z
+B Z
+A Z
+B Y
+B Z
+C Z
+A Y
+A Z
+A Z
+A Z
+C X
+B Z
+B Z
+B Y
+B X
+B Y
+B Y
+B Y
+B Z
+B Y
+B Y
+A Z
+B Z
+A Z
+C X
+B Y
+B X
+B Y
+B X
+B Y
+B Y
+C X
+B Y
+B Y
+B Z
+B Y
+C X
+B Y
+B X
+B Y
+C X
+A X
+A Z
+C Z
+B Y
+C Z
+B X
+C Z
+C X
+C Z
+B Y
+B Y
+C X
+C X
+B Y
+C X
+A Y
+B Y
+B X
+B X
+B Z
+B Y
+C Y
+C X
+B X
+B Y
+B Z
+B X
+B Z
+B Z
+C X
+B X
+B Y
+B Z
+B X
+C Z
+A Y
+B Y
+B Y
+B Y
+A Y
+C Y
+B Y
+B Z
+B Z
+B Y
+B Y
+B Z
+B X
+B X
+B Y
+A Z
+C Y
+C Z
+B Y
+B X
+B Y
+B Y
+C X
+B Y
+C X
+A Z
+B X
+C X
+C Z
+A Z
+A Z
+B Y
+C X
+A Z
+A Z
+B Y
+A Y
+B Y
+A Z
+A Z
+B X
+C X
+A Z
+B X
+B Z
+A Z
+A Z
+B X
+B Y
+B X
+B Z
+B Y
+B Y
+B Z
+C X
+C X
+B Y
+A Z
+B X
+B X
+B Y
+B Z
+B Y
+B X
+B Z
+B X
+B Y
+C X
+B Y
+B Y
+C Y
+A Z
+B Y
+B X
+B Y
+A Z
+C X
+A Z
+A X
+B Z
+B X
+A Z
+B Y
+B X
+B X
+A Z
+B Y
+A Z
+B Z
+B Y
+A Z
+B Y
+B Y
+A Z
+B Z
+C Z
+B Y
+B Y
+C Y
+A Z
+B Y
+B Y
+B Y
+B Y
+B Z
+B Y
+B Y
+B Y
+C X
+B Z
+B X
+A Z
+B Z
+C X
+B Y
+B Y
+A Z
+B Y
+B X
+A Z
+A Z
+C Z
+B X
+B X
+B Y
+B Z
+B Z
+B Z
+B Y
+B Y
+B Y
+B Y
+B Z
+B Y
+A Z
+A Y
+A Z
+B Y
+B Y
+A Z
+B X
+B Y
+A Z
+C Z
+B Z
+B Z
+B Y
+A Z
+A Z
+B Y
+B X
+B Z
+B X
+B Y
+B Y
+B X
+C X
+B Z
+B X
+A Z
+B Y
+C Z
+B X
+A Z
+C Z
+C Z
+A Z
+B Y
+B Y
+A Y
+B Y
+C Z
+B X
+C X
+B Y
+B X
+B Z
+B Y
+B Z
+B Y
+B Y
+A Z
+B X
+B X
+A Y
+B Z
+B X
+B Z
+A Y
+B Z
+C X
+B X
+B X
+B Z
+B X
+C Y
+B Y
+C X
+C X
+B Z
+B X
+C Z
+B Z
+A Z
+C Y
+B Y
+B Y
+B X
+B Z
+B Y
+B Y
+B X
+C X
+B Y
+B Y
+C Y
+B Z
+C X
+A Z
+B X
+B X
+B Z
+B X
+B Y
+A Z
+B Z
+B X
+A Z
+B Y
+C X
+A Y
+A Z
+C X
+B X
+B Z
+B X
+C X
+A Z
+B X
+B Y
+B Y
+A Z
+B Z
+C X
+A Z
+B Z
+C X
+B X
+A Z
+C X
+C Z
+B Y
+B Z
+B Y
+B X
+C Z
+B Z
+B Z
+B Y
+A Z
+C Z
+A Y
+B Y
+C X
+B Y
+B Z
+A Z
+B Z
+A Z
+B X
+C X
+B Y
+A Z
+B Y
+B X
+C Z
+B Z
+C X
+B Y
+B X
+C Y
+B Y
+C X
+B Y
+B Y
+B Y
+B Z
+B Y
+B X
+B Y
+B Y
+A Z
+A Z
+C X
+B Z
+B Y
+A Z
+B X
+C X
+B Y
+B X
+A Z
+C Z
+A Z
+B Z
+B Y
+B X
+B Z
+B Y
+A Z
+C X
+C Z
+A Y
+A Z
+C X
+C Y
+C Z
+B Y
+B X
+B Z
+B Y
+B X
+B Y
+A Z
+B Y
+C X
+B X
+B Y
+C Z
+B Y
+B Y
+B Y
+B X
+B Y
+C Z
+B X
+B Y
+B Y
+B Z
+B X
+B X
+B Z
+B Z
+A Z
+A Z
+C X
+B Y
+B Y
+C X
+B Y
+B X
+A Y
+C Z
+B Y
+B Z
+B Y
+B Y
+A Z
+B Y
+B Z
+B Y
+B Z
+B X
+B Z
+B Y
+A Z
+B X
+B Z
+B Y
+B Y
+B Z
+B Y
+A Z
+B X
+B Y
+B Z
+B X
+B Y
+B X
+B X
+B Y
+B X
+C Y
+B Z
+B Y
+B Z
+C Y
+A Z
+B Y
+A Z
+B X
+A Z
+A Z
+C Z
+B X
+C Y
+A Z
+B Z
+B Z
+B X
+B Z
+B Y
+A Z
+B Z
+C Z
+A Z
+C Y
+A Z
+B Y
+A Z
+B Y
+A Z
+B X
+A Z
+B Z
+C X
+B Y
+B Y
+B Y
+C X
+B Z
+C X
+A Z
+A Z
+C X
+B Y
+B Z
+B X
+B Y
+B X
+A Z
+B Y
+B Y
+A Z
+B Y
+B Z
+B Z
+B X
+B Z
+B Y
+B X
+B Y
+B Y
+C X
+C Z
+B Y
+B Y
+B Y
+B Z
+B Y
+B Y
+B Y
+A Z
+B Y
+B X
+B Y
+B X
+B Z
+B Y
+B X
+B X
+A Y
+B Y
+B X
+B Y
+B Y
+B Y
+B Z
+B X
+A Z
+B Y
+B Y
+B Y
+A Z
+B X
+B X
+C Z
+B Y
+B Y
+A Z
+B Y
+B Z
+B X
+C X
+B Y
+B Y
+C X
+C Z
+B X
+A Z
+B Y
+B Y
+B X
+B X
+B X
+B Y
+B Y
+A Z
+A Z
+B Y
+B Y
+A Z
+B Z
+A Z
+C X
+C X
+B Y
+B Y
+A Z
+A Z
+C Z
+B Z
+B X
+A Z
+B X
+B Y
+B Y
+B X
+B Y
+B Y
+C Z
+B Y
+B X
+C Z
+C Z
+B X
+B Y
+B Y
+B Z
+A Z
+B Y
+B Y
+B Y
+B X
+B X
+A Z
+A Z
+B X
+B Y
+B Z
+B Y
+B Z
+B Y
+B Z
+C X
+B Y
+C X
+B Y
+B Y
+C Y
+A Z
+B X
+C Z
+B Y
+B Z
+B Y
+B Y
+B Y
+C X
+B X
+B Y
+A Z
+C Y
+B Y
+A Z
+B Y
+B Z
+B Z
+B Y
+B Y
+B Y
+C X
+B Y
+A Y
+C Y
+B X
+B X
+B X
+B X
+B Z
+B X
+B Z
+B Y
+B Y
+A Z
+B X
+B X
+A Z
+A Y
+B Y
+B Z
+B Y
+C X
+B Y
+B X
+B Z
+C X
+B Z
+B Y
+B X
+B X
+A Z
+B Y
+B Y
+B Y
+C X
+A X
+B X
+C X
+B X
+C X
+B X
+A X
+B Y
+B Y
+B Y
+B Y
+B Z
+C Y
+C X
+A Z
+B Z
+B Z
+B Y
+B Z
+B Y
+B Y
+B X
+B Z
+A Z
+A Z
+B Z
+B X
+B Z
+A Z
+B Y
+B Y
+B Y
+B Z
+A Y
+B X
+B Z
+B Y
+B Y
+B Y
+B Y
+C X
+B Z
+C X
+A Z
+A Z
+B Z
+A Y
+C X
+B X
+B X
+C X
+A Z
+A Z
+A Z
+B Y
+B Z
+A X
+A X
+B Y
+C X
+A Z
+B Z
+A Z
+B Y
+B Y
+B X
+B X
+B Y
+C X
+B Z
+B Y
+B X
+B X
+B Y
+B Z
+B Y
+B Y
+B X
+B X
+B X
+B Y
+C X
+B Y
+B Y
+B X
+B Y
+B Y
+B X
+B X
+A Z
+C X
+B X
+A Z
+B Y
+B Y
+B Z
+B Y
+B X
+A Z
+C Y
+B X
+B Z
+B Y
+C X
+A Z
+B X
+A Z
+A Z
+B Y
+B Z
+B Y
+A Z
+B Y
+B Z
+A Z
+C Z
+B Y
+B Y
+B X
+B Z
+B Y
+B X
+B X
+B Y
+B Z
+B X
+B Y
+C Z
+A X
+B Y
+C X
+A X
+B X
+B X
+B Z
+A X
+B X
+B Y
+B X
+A Z
+B Z
+C Z
+B X
+B X
+A Z
+B X
+B X
+B Z
+B Y
+B Y
+A Z
+B Y
+B Y
+B X
+B X
+B X
+B Y
+A Y
+C X
+B X
+A Z
+B X
+B Y
+C Z
+B Y
+B Y
+A Z
+B Y
+A Z
+B Y
+A Z
+B Y
+B Y
+A Z
+B X
+B X
+B Y
+B Y
+B Y
+A Z
+B Y
+B Y
+A Z
+B X
+A X
+A Z
+B Y
+B X
+B Z
+B Z
+B Y
+B Y
+C Y
+B Y
+B Y
+B X
+B Y
+A Z
+C X
+B Z
+B X
+B Z
+A Z
+B Y
+B Z
+B X
+A Z
+A Z
+C X
+B X
+A Y
+C X
+B Z
+B Z
+C Z
+B Z
+B Z
+C Y
+A Z
+C Z
+A Z
+C Z
+B Z
+B Y
+C X
+B Y
+B X
+A Z
+C Y
+B X
+B Y
+B Y
+B X
+B Y
+A Z
+A Z
+B Y
+B Z
+B Y
+C X
+B X
+B Y
+B X
+A Z
+C X
+B Y
+B Y
+B Y
+B Y
+C Z
+B Y
+C Z
+A X
+C Z
+B X
+B Y
+B Y
+B X
+B Y
+C X
+C X
+A Z
+B Y
+B Y
+C X
+B Z
+C Y
+B Z
+B Z
+B Z
+B X
+B X
+B X
+B Z
+B X
+C X
+B Y
+C X
+B X
+C Z
+B Y
+B X
+B Z
+B Y
+B Y
+B Y
+B Y
+B Y
+B X
+B X
+A Z
+B Y
+B X
+B Y
+B Y
+A Y
+B Y
+B Y
+A Z
+A Z
+C Z
+B X
+B Y
+B Y
+B Z
+C Z
+C X
+A Z
+C X
+A X
+B X
+B Z
+B Y
+A Z
+C Z
+B Y
+C Z
+B X
+A Z
+B X
+A Z
+B Y
+A Y
+B Y
+B Y
+A Z
+C X
+B X
+B Y
+A Z
+B Z
+B Y
+B X
+B X
+C Y
+B X
+A Z
+B Z
+A Z
+C X
+C Y
+B Z
+B Z
+A Z
+B X
+B Y
+B X
+C X
+B Y
+B Y
+B X
+C X
+B X
+B Y
+B X
+B Y
+B Z
+B Y
+B X
+B X
+A Z
+B Y
+B Y
+C X
+C Y
+C X
+A Z
+A Z
+B X
+B X
+B Z
+A Z
+A Z
+C Z
+B Z
+A X
+B X
+B Y
+B Y
+A Z
+B Y
+B X
+B X
+B X
+B Y
+B X
+B Y
+B Y
+B Y
+B Y
+B Y
+B Y
+B Z
+A Z
+B Y
+B X
+C X
+A Y
+B Y
+B Y
+B Z
+C Z
+B X
+C X
+B Z
+B Y
+B Y
+B X
+B X
+B X
+A Z
+B X
+A Y
+B Y
+B Y
+C X
+A Z
+B Y
+C X
+B Y
+B X
+B X
+B X
+C Z
+B X
+A Z
+B Y
+B Y
+B Y
+A Z
+A Z
+B X
+A Y
+B Y
+B Y
+B Y
+B X
+B X
+B Z
+B X
+B Z
+B X
+B Y
+A Y
+A Z
+C Y
+B Z
+C X
+B Z
+B Y
+B X
+A Y
+B Y
+B X
+B Y
+B X
+C Z
+B X
+C Z
+B Y
+B X
+B Z
+A Y
+A Y
+C Z
+B X
+B X
+B Y
+A Z
+B Y
+B Z
+A Z
+B X
+B X
+B X
+B X
+B X
+B Z
+A Z
+A Z
+C Y
+C X
+A Z
+A Z
+C X
+B X
+B X
+B Z
+B X
+A Z
+B Y
+B X
+B Y
+C X
+A Z
+B Z
+C X
+B Y
+B Y
+A Z
+B Y
+B Y
+B X
+B Y
+C Y
+B X
+B Z
+B Y
+A Z
+B Z
+A Y
+B Y
+A Z
+B X
+B Y
+A Z
+B Y
+C Z
+B Z
+B Y
+C X
+C X
+B X
+B Z
+B Y
+B Z
+B Z
+B Z
+B Z
+A Z
+B Y
+B X
+B Z
+B Y
+B X
+A Z
+A Z
+A Z
+B Y
+C Y
+C Z
+B Z
+B X
+B Y
+B Z
+B Y
+A Z
+A Z
+C Z
+B X
+B Y
+B Z
+B X
+A Y
+A Y
+B Y
+A Y
+B Z
+B Y
+A Z
+B Y
+B Y
+B Y
+C Z
+B X
+B Z
+B X
+B Y
+B Y
+B Y
+C X
+B X
+B Y
+B Z
+B X
+B Y
+B Y
+B Y
+B X
+B X
+B X
+A Z
+B Y
+B Y
+C X
+C X
+C X
+C X
+B Z
+A Z
+A Z
+B Z
+B Y
+B X
+A Z
+C Z
+B Y
+B X
+C Z
+C X
+B X
+B Y
+B Y
+B X
+B X
+B Y
+A Z
+B X
+B X
+B X
+B Y
+A Y
+B X
+A Z
+B Y
+B Y
+B Y
+C Y
+B Z
+B X
+B Z
+C X
+B Y
+B Z
+C X
+B X
+B X
+B Y
+B Y
+B Y
+A Z
+A Z
+A Z
+B Y
+B X
+C Z
+B Z
+B Y
+B Y
+B Y
+B Y
+B Z
+C X
+A Z
+C Z
+B Z
+B X
+B X
+A Z
+B X
+B Z
+A Z
+B Y
+B Y
+A Z
+B Y
+B Y
+C Y
+C Z
+B X
+A Z
+B Z
+B Y
+C Z
+C X
+B X
+A Z
+B Y
+B Z
+B X
+A Z
+A Z
+A Z
+B Y
+B X
+C X
+B Z
+B Z
+B X
+B X
+B Y
+A Z
+B X
+B X
+B Z
+A Z
+C X
+B X
+B Y
+B Z
+A Z
+B Y
+B Y
+B Y
+C X
+B Z
+A Y
+A Z
+B Z
+C X
+A Z
+A Z
+B Y
+C X
+B Y
+B Z
+C X
+B Y
+B Y
+A Z
+B Z
+A Z
+C Z
+A Z
+B X
+B Z
+A Z
+B X
+B Y
+C Z
+A Y
+B Y
+B Y
+B Y
+A Z
+B Z
+A Y
+A Z
+B Z
+B Y
+B Y
+A Y
+B Y
+C X
+B Z
+B Z
+A Z
+B X
+B X
+A Z
+B Z
+C Y
+A Z
+A Z
+B Y
+B Z
+B X
+C Y
+B Y
+B Y
+B Z
+B Y
+B Z
+B X
+B X
+B Y
+B Y
+C X
+C X
+B X
+B X
+C X
+A Z
+B Y
+C Z
+A Z
+B X
+B Y
+B Z
+A Z
+C Y
+A Z
+B Z
+A Z
+C X
+C X
+B X
+B X
+B Y
+B Y
+B Y
+B Y
+B Z
+B X
+B Z
+C Y
+B Y
+A Z
+B Y
+B X
+A Y
+B Y
+B Z
+C X
+B X
+A Z
+A Z
+B Y
+B Y
+A Z
+C X
+B X
+B Y
+B Y
+B Z
+A Z
+A Z
+C Z
+A Z
+B Y
+B Y
+B Y
+A Z
+B Z
+B Y
+A Z
+A Y
+B Y
+B Y
+B Z
+A X
+A Z
+B Z
+B X
+A Z
+B Z
+B Y
+B Y
+B X
+A Y
+C Y
+B Y
+B Y
+B X
+B Z
+A Z
+B X
+B X
+B Y
+B Y
+A Z
+B X
+C X
+B X
+B X
+A Z
+B Y
+C X
+A Z
+B X
+C Z
+A Z
+B Y
+B Y
+B X
+B X
+A Z
+C Z
+B X
+B X
+B Y
+A Z
+B Y
+B Y
+B X
+B Y
+B X
+A Z
+B Y
+B Z
+B X
+A Z
+B Y
+C Z
+C X
+A Z
+A Y
+B X
+B Z
+B Y
+B Y
+B Y
+B Z
+B Z
+A Y
+C X
+B X
+C X
+B Y
+B Y
+B Z
+B Y
+C Y
+C X
+B Z
+C X
+B Y
+B X
+B Y
+B Y
+A Z
+B Y
+A Z
+A Z
+A Z
+A Z
+B Y
+A Z
+B X
+B X
+B X
+C Z
+B Z
+C Y
+B Y
+A Z
+B Z
+B Y
+B Y
+B Y
+A Z
+B Z
+C Y
+C X
+B Y
+B Y
+B Y
+B X
+B Y
+B Z
+A Z
+B Y
+B Y
+C Y
+B Z
+B X
+B Y
+B X
+B Z
+B Y
+C Y
+C Y
+A Z
+B X
+B X
+A Y
+B Z
+A Z
+B Y
+B X
+B X
+B Z
+B X
+A Z
+B Y
+C X
+C X
+B Z
+A Z
+B Y
+B Y
+B Y
+B Y
+B Y
+B X
+B Y
+B Y
+B Z
+B Z
+A X
+A Z
+A Z
+A Z
+A Y
+C X
+B Y
+B Z
+B X
+A Z
+B Y
+B Y
+B X
+B Y
+B Y
+C Y
+C Y
+B X
+A Z
+B Y
+C X
+B Y
+A Y
+B X
+B X
+B Y
+C X
+A Z
+B Y
+B X
+C X
+C Z
+B Y
+B Y
+B Y
+A Z
+B X
+A Z
+C Z
+B Z
+B Y
+B Y
+B X
+B Y
+B Y
+B X
+A Z
+C X
+C Z
+B X
+B Y
+C Y
+B X
+A Z
+B Y
+A Z
+B Y
+A Y
+A Z
+A Z
+B Y
+B Y
+B Z
+C Z
+C X
+B Y
+B Z
+B Y
+A Z
+B Y
+B Z
+B Y
+B X
+B Y
+B Z
+B Y
+B Z
+C X
+B Y
+B Y
+C Z
+A Z
+B Y
+C X
+B X
+A Y
+B Y
+A Z
+B Y
+B X
+B Y
+B Y
+B X
+B X
+B X
+B Y
+B Y
+C Z
+B Z
+C X
+C Z
+B Y
+C X
+B X
+A Z
+B Y
+C Z
+A Y
+B Y
+B Y
+B Y
+C X
+B X
+B Y
+B Y
+B Z
+C X
+B X
+B Z
+A Z
+B X
+B Z
+B X
+A Z
+B Y
+B Z
+C X
+B X
+C X
+B X
+B Y
+B Z
+B Z
+B Z
+A Z
+B Y
+B X
+B Y
+B Y
+B X
+B Z
+B Y
+C X
+A Z
+B Z
+B X
+A Z
+B Y
+B Y
+B Y
+A Z
+A Z
+C X
+B X
+A Y
+B Y
+B Y
+B Y
+A Z
+A Z
+A Z
+C Y
+B Z
+A Y
+B Y
+B X
+B X
+B Y
+C X
+B Y
+C Z
+B Y
+A X
+B Y
+B X
+B Y
+B X
+C Z
+B Y
+B Z
+B X
+B Z
+A Z
+B Y
+B X
+B Y
+A Z
+B X
+C Y
+B X
+B Y
+B Y
+B Y
+C X
+B Y
+B Y
+B Y
+A Z
+B Z
+C X
+A Z
+B Y
+C Y
+B X
+A Z
+C Z
+B X
+B Y
+B X
+C Z
+B X
+B Z
+C Y
+B X
+B Y
+B X
+B Z
+B X
+B Z
+B Y
+B Z
+B X
+A Z
+B X
+A X
+B X
+B Y
+B Y
+B Y
+A Z
+B Y
+B Y
+B Z
+C X
+B Y
+B Y
+B Y
+B X
+B X
+B X
+C Z
+B Z
+B X
+A Z
+B Y
+B Z
+B Y
+B Y
+B Y
+B Y
+C X
+A Z
+B Z
+B Y
+B Y
+B Z
+A Z
+B Y
+B Z
+B Y
+B Y
+C Y
+A Z
+B Z
+C X
+B X
+C Z
+B X
+B X
+B Y
+B Y
+A X
+B Y
+C Z
+A Z
+B X
+C Z
+C Z
+B X
+A Z
+B X
+C Z
+B Z
+B Y
+B Y
+C X
+A Z
+B X
+B Y
+B X
+B X
+B X
+B Y
+C X
+B Z
+B Y
+B Y
+B Y
+B X
+A Z
+A Z
+B Y
+B Z
+B Y
+A Z
+B Y
+B X
+A Z
+B Z
+B Y
+B X
+B Y
+A Y
+B Y
+B Y
+B Y
+B Z
+B X
+B Y
+C Z
+C X
+B Y
+C Y
+B Z
+A Z
+A Z
+B Y
+B Y
+A Z
+B Z
+B Y
+B X
+A Z
+A Z
+C X
+A Z
+C X
+A Z
+B Y
+C X
+B X
+B X
+B Y
+A Y
+B Y
+B Z
+B X
+B Y
+B Y
+A Z
+B X
+B Y
+A Z
+A Y
+A Z
+C X
+A Z
+C X
+A X
+B Y
+B Y
+A Z
+B X
+B Z
+B Y
+B Y
+B Z
+B Y
+B Y
+B X
+B Y
+C X
+C X
+B Y
+B Y
+B X
+C Z
+C Z
+C Z
+C X
+B Y
+C Z
+A Z
+C Z
+B Y
+A Z
+B Z
+B X
+A Y
+B Y
+B Y
+B X
+B Y
+B Y
+C X
+B Y
+A Z
+B Y
+A Z
+C Z
+A Z
+B Y
+B Z
+A Z
+B X
+B X
+B Z
+B X
+B Y
+A Z
+B Y
+C X
+A Z
+C Z
+B X
+A Z
+B Y
+B Y
+C Z
+B Z
+A Z
+B Y
+B X
+B Y
+B Z
+C Z
+A Y
+A Z
+B X
+B X
+A Z
+C Y
+B Y
+A X
+A Z
+B X
+B Y
+B X
+A Z
+C X
+B Y
+B Y
+C X
+A X
+B Y
+A Z
+A Z
+B Y
+B Z
+B Y
+B Y
+B Y
+B X
+B Y
+B X
+B X
+B X
+B Y
+A Z
+C X
+A Z
+A Z
+A X
+A Z
+B X
+B Z
+B Y
+A Z