diff options
-rw-r--r-- | 02.c | 165 | ||||
-rw-r--r-- | Makefile | 5 | ||||
-rw-r--r-- | input.h | 2 | ||||
-rw-r--r-- | input/02.txt | 2500 |
4 files changed, 2671 insertions, 1 deletions
@@ -0,0 +1,165 @@ +#include "input.h" + +#include <stddef.h> +#include <stdio.h> +#include <err.h> + +#define INPUT "input/02.txt" +#define EXPECTED1 13221L +#define EXPECTED2 13131L + +enum draw { + rock = 1, + paper = 2, + scissors = 3, +}; + +struct round_p1 { + enum draw opponent; + enum draw me; +}; + +int compute_round_score_p1(struct round_p1* round) { + int score = (int) round->me; + enum draw opponent = round->opponent; + enum draw me = round->me; + if((opponent == rock && me == paper) || (opponent == paper && me == scissors) || (opponent == scissors && me == rock)) + score += 6; // win + else if(opponent == me) + score += 3; // draw + // loss is 0 + return score; +} + +void parse_round_p1(struct round_p1* round, char* round_str) { + switch(round_str[0]) { + case 'A': + round->opponent = rock; + break; + case 'B': + round->opponent = paper; + break; + case 'C': + round->opponent = scissors; + break; + default: + err(2, "unknown opponent choice %c", round_str[0]); + } + switch(round_str[2]) { + case 'X': + round->me = rock; + break; + case 'Y': + round->me = paper; + break; + case 'Z': + round->me = scissors; + break; + default: + err(2, "unknown me choice %c", round_str[2]); + } +} + +void part1(struct input_str* input) { + // compute max calories + long score = 0; + struct round_p1 r; + for(size_t i = 0; i < input->line_count; i++) { + parse_round_p1(&r, input->lines[i]); + int round_score = compute_round_score_p1(&r); + score += round_score; + } + + CHECK(score, EXPECTED1) +} + +enum round_result { + loss = 0, + draw = 3, + win = 6, +}; + +struct round_p2 { + enum draw opponent; + enum round_result result; +}; + +int compute_round_score_p2(struct round_p2* round) { + enum draw opponent = round->opponent; + enum round_result result = round->result; + enum draw me; + switch(result) { + case loss: + if(opponent == rock) + me = scissors; + else + me = (enum draw) ((int) opponent - 1); + break; + case draw: + me = opponent; + break; + case win: + if(opponent == scissors) + me = rock; + else + me = (enum draw) ((int) opponent + 1); + break; + } + return (int) me + (int) result; +} + +void parse_round_p2(struct round_p2* round, char* round_str) { + switch(round_str[0]) { + case 'A': + round->opponent = rock; + break; + case 'B': + round->opponent = paper; + break; + case 'C': + round->opponent = scissors; + break; + default: + err(2, "unknown opponent choice %c", round_str[0]); + } + switch(round_str[2]) { + case 'X': + round->result = loss; + break; + case 'Y': + round->result = draw; + break; + case 'Z': + round->result = win; + break; + default: + err(2, "unknown expected result %c", round_str[2]); + } +} + +void part2(struct input_str* input) { + // compute max calories + long score = 0; + struct round_p2 r; + for(size_t i = 0; i < input->line_count; i++) { + parse_round_p2(&r, input->lines[i]); + int round_score = compute_round_score_p2(&r); + score += round_score; + } + + CHECK(score, EXPECTED2) +} + +int main() { + // read input + struct input_str input; + input_str_read(&input, INPUT); + + // do stuff + part1(&input); + part2(&input); + + // cleanup & exit + input_str_free(&input); + return 0; +} @@ -1,7 +1,7 @@ CC=cc CFLAGS=-std=c1x -W -Wall -g -D_GNU_SOURCE LDFLAGS= -EXEC=01 01bis +EXEC=01 01bis 02 all: $(EXEC) @@ -14,5 +14,8 @@ all: $(EXEC) 01bis: input.o 01bis.o $(CC) -o $@ $^ $(LDFLAGS) +02: input.o 02.o + $(CC) -o $@ $^ $(LDFLAGS) + clean: rm -rf *.o $(EXEC) @@ -1,6 +1,8 @@ #ifndef DEF_INPUTH #define DEF_INPUTH +#include <stddef.h> + /* simple macro to check a result against an expected value */ #define CHECK(actual, expected) {\ if(actual == expected)\ diff --git a/input/02.txt b/input/02.txt new file mode 100644 index 0000000..6db9d93 --- /dev/null +++ b/input/02.txt @@ -0,0 +1,2500 @@ +C X +B Y +C Z +C Z +B X +C Z +C Z +C Z +B X +B Y +B Z +B Z +B Z +C X +C Y +B Y +C Z +C Y +C X +B Y +C Y +C Z +A Y +B Y +C X +C X +C Y +B Y +B X +C Z +B Y +B Z +C Y +A X +B Y +B X +B Y +B X +C Z +B Y +C Y +A Z +B Y +C Z +A Z +B Y +B Y +B Y +C Y +B Y +A X +C Z +C X +C Z +A Y +C X +C Z +C Y +C Y +A Y +C Z +B Y +B Z +A X +C Z +B Y +C X +B X +C Z +C Z +B Y +C Z +A Z +C X +C Y +B X +C X +C Z +B Z +B Z +B Z +B Y +A X +B Y +C Y +B Z +B Y +C Y +C X +B Z +C X +B Y +A Y +B X +C Z +A Z +C Y +C Y +A Z +B Z +B Z +C Z +B X +B X +C Y +C Z +B X +B X +A Z +C X +C Z +A Y +B Z +B Y +B Y +C Z +C X +B Z +A X +B Y +B Z +B Z +A Z +A Y +B X +B Y +A X +C Y +B Y +B Y +B Y +B Y +B X +C Z +C Z +C Z +C Z +B Z +C Z +A X +C Z +C X +B Z +C X +A Z +A Y +B Z +A Y +A X +B Y +A Z +C Z +C Z +B X +C Z +A Y +C Z +B Y +C Z +C X +A Z +B Y +B Y +C X +A Z +C Z +B X +B Y +C X +B X +B X +B Z +B Y +A Z +C Z +B X +B Y +B Z +B Z +C Z +C Z +C Y +A Z +A Z +C Y +B Y +B Y +B Y +B Y +B Z +C X +B Y +A Y +C X +A Z +A Z +A Z +C X +B Y +B Z +B Z +C Z +B Z +C X +A X +A Z +B Z +C X +C Z +C Y +C Z +B Y +B X +C Z +A Y +B X +A X +B Z +C Y +B Y +B Y +B Y +B X +B Y +C X +C Z +B Y +C X +C Z +C X +C Z +B Z +B Z +B Z +A X +B Y +C Z +C Z +B Y +C X +A X +A Z +B Z +B X +C X +A X +B Y +B Y +C Y +B Z +B X +A Z +C Y +B Y +C X +B Y +C X +B Z +A X +A Y +C X +A X +C Y +B Y +B Y +A Y +C Z +B Y +C X +B Y +C X +C Z +C X +C Z +C Y +B Z +B Z +A Z +C X +B X +C Z +C Y +B Y +B Z +B Z +B Y +C Z +B Z +B X +C Z +C Z +C Z +B Y +C X +C Y +B Z +B Y +A Y +C X +B Z +A Z +B Y +B Y +C X +C Y +C Z +C X +C X +C X +C Z +A Z +A Z +C X +C Z +C Y +C Y +C Z +C Z +C Z +C X +B X +B Y +B X +C Y +C Y +B Y +C Z +C X +B Y +C X +B Z +B Y +B Z +B X +B X +C X +C Z +C X +C X +C Z +C Z +B Y +C X +B Y +C Y +C Z +B Z +B Y +C X +C X +A X +C Z +C Y +B Z +B Z +B Y +C Z +C Z +B Y +B Z +A Y +C X +A Z +C Y +C X +B Y +A X +A Z +C X +C Z +B Y +B Y +A Y +A Z +A Y +C Z +A Z +A Z +C Z +B Y +C X +C X +B Y +C X +B Z +B Y +C Y +B Y +B Y +B Y +A Y +C Z +B Y +C X +C Z +C X +B Y +B Y +C Z +B Y +C Z +C Z +B Y +B Y +C X +C Z +C X +A Y +A Y +B Z +C Z +B Y +C X +B Y +C X +C Y +C X +A Y +C Y +B Y +B Z +C Z +A Z +B X +C Z +B Z +B X +A Y +C Z +A Y +B Y +A Z +B Y +C X +B X +C Z +B Z +C Z +B Y +C X +B Z +B Y +A Z +B Y +C Z +C X +C Z +A Y +A Z +B X +A Z +B Y +B Y +B Y +C Z +C X +B Z +C Z +A X +C Z +C X +B X +A Z +C Y +A Z +B Y +C Y +A Y +C X +A Z +C Z +A Z +B Z +C Z +A Y +C Z +C Y +B Y +B Y +B Y +C X +B Z +B Y +C X +C Y +C Z +C Z +B X +C X +B Y +A Y +B Y +C Z +B X +A Z +B Z +C Z +C X +C Z +B X +B Y +C Y +B Z +B Y +C Z +C Z +B X +C Z +A Y +B Z +B Y +B Y +B Z +B Z +B Y +B Y +B X +B Y +A Z +B Y +C X +B Z +A Y +B Z +C Z +C Z +B Y +B Z +B Y +C X +C Y +C Y +C Y +C Z +C X +C X +C Z +A Z +C Z +B Y +B Y +A Z +C Z +B Y +B Y +C X +C Y +B Y +A Y +C Z +C X +C Z +B Y +C Z +C X +B X +B X +C X +C X +C X +B Z +A Z +B Y +C Z +B Y +B Z +B Y +C Y +A Z +B Z +B Y +C Y +C X +B Y +C Y +C Z +C Y +B Y +C Z +C Z +B Z +C X +C Y +C X +C X +C Z +C X +C Z +C Y +A Y +A Z +C Z +C X +B Y +B Y +C X +C Z +A Y +B Z +B Y +C Z +C X +B X +B Y +B Z +B Z +B Y +A Y +C X +C Z +C X +A Z +A Y +C X +A X +C Y +A X +B Y +C Z +A Y +C X +C Z +B Y +B Y +B Z +B Y +B X +B X +C X +A Z +B Z +A Z +A Z +A X +B Y +C X +C Z +C Z +B Y +C X +C X +A X +A Z +B X +C Z +C Z +B Y +C X +B Z +B Z +A Y +B Y +C X +B Y +B Y +B X +C Z +A Y +C X +B Y +C Z +B X +A Z +A Z +B X +B Y +C X +B Z +A Y +C Z +C Z +B Y +B X +A Z +B Z +B Y +A Y +A Z +B Y +B X +B Z +B Z +A Z +A X +A Y +A Y +B X +C X +C Y +B X +A X +B Z +B Y +C Z +B Y +C Z +C Y +C X +A Y +B Z +A Z +B X +B X +B Y +C X +B X +A Y +C X +C Y +B Y +B Z +C Z +A Y +A X +C Z +C Z +C X +A Z +C X +A Y +B Z +B Y +C X +B X +A Y +B Z +C X +B Y +C X +B X +A Z +B Y +C Y +C X +C X +C Z +A Z +C Y +B Y +C Z +C Z +B Y +C Z +C Y +B Y +C X +C X +B Y +B X +A Y +C Z +B Y +A Z +C X +C Y +B Y +B Y +B Y +A Z +A Y +B X +B Y +B Y +B Z +B X +C Z +B Y +C X +C Z +C X +C Y +B Y +C Y +A Z +B Y +C Y +B Y +B Y +A Y +C Z +C Y +C Y +A X +C Z +C Z +C Z +A Y +B Y +C Z +B Z +A Z +B Z +C X +C Z +C Z +A X +C Y +C Z +C Y +C Y +C X +C Y +C X +A Z +C X +C X +B X +C Z +B Y +C Z +B Y +B X +C Z +B Y +C Y +C Z +C X +A X +C Z +A Y +C Y +B Y +B Z +B Z +B Z +B Y +B X +B Y +C Z +B X +B X +B Y +C Y +C Z +A Z +C Y +B Y +B Z +C X +C X +B Z +B Y +C X +C Z +C Z +C X +C Y +B Y +C Y +C Z +C Z +B Z +C Z +B X +B Z +A Z +A Z +C Z +C Y +C Z +C X +B Y +B Y +C Z +B Y +B Y +A Z +A Y +B Z +C Z +C X +B Y +C X +C Z +B Z +C X +C Y +B X +C Z +C Y +A Z +C Z +C Z +C Z +C Z +C Z +A Z +B Y +A Z +A Z +A Z +C X +B Z +B Z +B Y +A Y +C Z +C X +B Z +A Y +B Y +C X +C Z +B Z +C Y +A Y +C Z +B Z +B Z +B Z +C Z +C Z +C Z +C Y +A Y +A Z +A Y +C X +C Y +C Z +C X +B Y +B Z +C Z +B Y +C X +A X +C X +B Y +B Y +B Y +C Z +C Z +A X +B Y +B Y +B Z +B X +C Z +B Y +C X +B X +C Z +C Z +B Y +C Z +C Y +C Z +C Y +C Y +A Z +C Z +B Y +A Y +A Y +B Y +C Y +B X +A Y +C X +C Y +B X +C X +C X +C Z +C X +C Z +B Y +C X +B X +C Y +C Z +C Z +B Z +C X +B Y +A Z +C Y +B X +B Y +B Y +B Y +C Z +C Y +A Z +C X +B Z +C Y +C Y +C X +C Z +A Z +B X +A Z +C Z +B Z +B Y +A Z +C Z +B Z +A X +B Y +B Y +C Z +C Y +C Z +C X +B Y +C X +B Y +A X +B X +C Y +B Y +A Y +B Y +C Z +C X +B Y +C Z +C Y +C X +C X +B X +B Y +C X +A X +B X +B Z +A Z +B Z +C Y +B Z +B Y +C Z +C Y +B Y +B Y +C X +B Y +C Z +B Y +C X +B X +C Z +C Z +B Y +C Z +B Y +B Y +A Y +B Y +B Y +C Z +B Z +C X +B X +C X +B Y +B Y +C Z +C Z +C Z +C X +C Z +A Z +C X +B Y +B X +B Y +B Z +C X +A Y +A Y +C Z +C X +C Y +C X +C X +C Z +A Y +C X +B Y +C Z +C X +B Y +A Z +B X +C Z +A Z +C X +B X +A Y +A Y +B Y +B X +B X +B X +C Y +A X +A Z +B Y +B Z +B Z +C Y +C X +A Z +C Z +B Z +C X +C Y +A Z +C Z +C X +C X +B Y +B Y +C Z +A Y +C Z +B Y +B Y +C Z +C Z +C Z +C Z +C Z +B Y +A Z +C X +B Y +C Z +B X +B Z +C Y +C Z +C Z +A X +C Z +A X +C X +C Z +A X +C Z +C Z +A Z +C X +C X +C Y +C Z +A X +C X +B Y +A Z +A Z +C X +B Y +A X +C Z +B Y +A Y +A Z +C X +B Y +B Z +C Y +B Y +B X +B X +B Y +B X +A X +B Y +C X +B Y +C Z +B X +C Y +B Z +B X +B Y +C X +B Z +B X +A X +C X +B Y +B Y +C Y +B Y +C X +C Z +C X +C X +B Z +C Z +C Y +A Z +C Z +C Y +C X +A Z +B Y +B Y +B Z +B X +A Y +B Y +C Z +B Y +B Z +A X +C X +C X +B X +A Z +B Z +B X +B Y +C Z +B Y +B Z +B Y +C Y +A Y +C Y +C Z +B Z +A Y +B Y +C Z +B Z +A Z +C X +C Z +B Y +C Z +A Z +C Z +C Y +C Z +A X +B Y +B Y +B Y +A Z +A Y +B Z +C Z +A Z +B Y +B Y +B Y +C X +A Z +A Z +A Z +C X +C Z +A Z +C Y +B Y +C Z +C X +B Y +A Y +C Z +C Z +C Z +A Z +A X +B Y +B X +C Y +B X +B Z +C X +A Z +B Z +B Y +A X +A Z +A Y +C X +C Z +C X +C Z +A Z +B Z +B Z +B Z +C Z +C Y +A Z +A Z +A Y +B Y +C Z +B Z +A Z +C Z +A X +B Y +B Y +C X +C Z +B Z +B Y +B X +C Z +B Z +A X +B Z +C Z +B Y +A X +C Y +C X +C X +B Y +C Z +B X +A Z +B Y +C Z +B Y +C Z +A Y +B Z +C X +C X +B Y +C Y +B X +C Z +C Z +B Y +B Y +A Z +A Y +C Y +A Z +C Z +A Y +A Z +C X +C Y +B Z +C X +B X +C X +C X +B X +B X +B Z +C X +C X +B Y +A Z +C X +B Y +B Y +C Y +B Y +C Z +C Y +A Z +A X +C Z +C X +B Z +B X +B Y +A X +C Y +B Y +B Z +B Y +C Z +C Z +A Y +C Y +C X +A X +C Y +C Z +B Z +B Y +C Z +C X +C Y +B Z +B Z +C X +C Z +C X +B Y +A Z +B Y +B Y +C Z +B X +C X +C Y +A Z +C Z +B Y +C Y +B Y +C Y +A X +C X +B X +C X +C Y +C Z +B Y +B X +B Y +C Z +C Y +B Z +C X +B Y +B Y +C Z +C Z +C Z +C X +B Y +C X +C Z +C X +C X +C Y +B Y +C Z +C Z +B Y +B Y +B Y +B Z +C Y +A Z +C X +C Z +A Y +C X +C Z +C Y +B Y +A X +C Z +B Y +B X +B Z +A Y +A Z +C X +C Z +C Y +B X +C Z +A Y +B X +A Z +B Y +A Z +C Z +B Y +C X +A Z +B Y +C Z +C Z +C Y +B Z +C X +C X +B Y +B Y +C Z +C Z +B X +C Z +A Y +B Y +C Z +B X +A Z +C Z +B X +C X +B X +C Y +C Y +A Z +B Y +C X +C Z +A Z +C Z +B X +B Z +C X +C Y +C Z +A Y +C Y +B Z +C X +B Z +C X +B Z +B Y +B Z +A Y +B Y +A Y +B Y +A Z +C Y +C Z +C Z +A X +C Z +B X +A Z +B Y +C Z +A Y +C Z +B Y +B X +C Z +C Z +B Y +C X +B X +A Z +C Y +C Z +B Y +B Y +C X +B Y +B Y +B Z +A Y +C X +B X +B Y +B Y +A Z +C X +C Y +A Y +B Y +C Z +B Y +C Z +B Y +C X +B Z +B Z +A X +A Z +B Y +B X +A X +B Y +B Y +C X +C Z +B Y +C X +C Y +C Z +B Y +A Z +B Y +A Z +B Z +C X +A Z +B Y +B Y +C Z +A Z +A Z +B Y +B Z +C Z +B X +C Z +C Z +B X +B Z +C X +B Z +C X +B Y +B Y +A Y +C Z +B Y +C Z +C Z +C Y +C X +A Z +B Y +C Z +C Z +B X +C X +C Z +B Z +A Z +C X +C Z +A Z +B Y +B Y +C Z +A X +A Z +C Z +C Z +B Y +C X +B Y +B Y +C Y +A Y +C Z +A Z +B Z +A Z +B Y +C X +C Z +B Y +C Z +B Y +C Z +C Z +B Z +B X +A Z +B Z +B Z +C X +C X +A Z +B X +B Z +B Y +C Z +C X +B Z +B Z +C Z +B Y +B Y +C X +B X +C X +C Z +B Y +A Z +B Z +B Y +B Z +B X +C Z +C Y +C Z +A X +C Z +A Y +C Y +A Z +C Z +B X +A X +B Y +A Z +A Y +B Z +B Y +B X +C Y +C Y +B Z +A X +C X +B Y +C Z +B Y +B Y +B X +A X +C Z +B Y +B Y +B Z +C X +C X +B Y +C Z +C X +C Z +C Y +B Y +A Z +C Y +A Y +C Z +C X +C Z +C Z +B Y +B Y +B Z +B X +A Z +B X +A Z +C Z +C Y +B X +B Y +C Z +A Y +B Y +B Z +A Y +B Z +B Z +A Y +A X +B Y +A Z +B Z +A Z +B Z +C X +C Y +B Y +B X +B Y +C Y +C Y +B X +B X +A Z +A Y +A X +A Z +B Y +B Y +C X +C Z +C X +C X +B Z +A Y +C Z +C X +A Y +A X +A Z +C Y +B X +A X +A Z +C Z +B Y +C X +C Z +B Z +B Y +C X +C X +C Z +A Y +C X +B Y +A X +A Y +C X +C X +A Z +C Y +B Y +A Y +C Y +A Z +B Y +B X +C Z +C X +B Y +A Y +C X +B Y +B X +C X +B Y +A Z +B Y +C X +C Z +A Y +C X +A X +C Y +C Z +C Z +C Z +B Z +B X +C Z +B Y +B Z +C Z +A X +C Z +B Y +B Y +C Y +A Z +A X +C X +B Z +C Z +A Y +C X +C Z +B X +A Z +C Y +A Y +C Z +A Z +B X +C X +C Z +C X +B Z +B Y +C X +B Y +C X +B Y +C X +B X +A Z +B Z +C Z +C X +C Y +A Z +C X +A Z +B Z +B Z +B X +B Y +B Z +C Z +C Y +C Z +B Z +B Y +C X +C Z +C Y +C Z +A Y +A Y +C Y +A Y +B Y +C Z +A Y +C X +B Z +A Y +B Y +C X +C X +B Y +C X +B Y +C Z +C X +A Y +C Z +A Z +B Y +B Z +C Z +C Z +C Y +B Y +C Y +C Z +B Y +C Z +B X +A Z +A X +B X +C Z +B Y +B Y +B Y +C Y +C Z +A Y +A Z +B Y +C Y +C Z +C Z +C X +C Z +C X +C Z +C Z +C Y +C X +B Z +C Z +C Z +C Z +C X +B Y +C Z +A Y +C Z +C X +C Y +C X +C Y +B Y +C Z +B X +A Z +C Y +C Z +B X +C Z +A X +B Y +A Y +C Z +B Y +C Z +C Z +B Z +C X +B Y +C Z +A Y +B Z +B X +C X +A Z +C Z +B Y +C Z +C Z +B X +B Y +C Y +C X +C Z +A X +B Z +C Y +C Y +B Y +B Y +B X +B Y +B Z +B Y +C Z +B Y +A Z +B X +B Z +B Y +B X +A X +C Z +B Z +A Z +A Z +A Z +A Z +B Y +C Y +C Y +A Y +C Z +B Y +B Y +B Y +C Z +C Z +C Y +C X +B Z +C Y +C X +C Z +B X +A Z +C X +A X +C X +C X +A X +C Z +B Y +C X +C Y +B X +B Y +C Z +C X +B Y +B Z +B Z +B Y +C X +C X +B Y +B X +C Z +A Z +C Z +B Z +B Y +B X +C Z +C Z +B X +B Y +C Z +B Y +B Y +A Y +C X +C Y +B Y +C Z +B X +B Y +C Z +C Y +C Y +B Y +B Y +A X +A Z +A Z +B Y +B Y +B Y +C X +B X +C Z +C Z +B Z +B Y +C Y +C Z +C X +C Z +C Y +A X +C Z +B Y +B Y +B Y +B X +C Z +B Y +B Y +A Y +C Z +A Z +B Y +B Y +A Z +A Z +A Y +C Z +A X +B X +B Z +C X +A Y +A Z +B Y +B Y +A Y +A Z +C Z +B Y +B Y +C Z +A X +A Z +A Z +C X +B Y +C X +B Z +B Y +C Y +B Y +C Z +B Y +C Z +B Y +C Y +C Z +A Y +A X +A X +C X +B Y +A X +C X +C Y +C Z +C Y +C Z +A Z +B Y +C X +C X +C Y +C Z +B Y +C Z +C Y +B Y +B Y +A X +C X +C X +B Z +A Z +C X +B Y +C X +A X +C Z +B Y +C Y +C Z +C X +A X +B Z +A Y +C Z +C Y +B X +B Y +C Z +B Z +C Z +C X +B Y +C X +B Z +B Y +A Z +A Y +C X +A Y +C Z +C Z +A Z +C Y +C X +A Z +B Y +C X +A Y +A Z +B Y +C Z +A Y +C X +C X +C Z +C Z +C Z +B Z +B Y +A Y +B Y +C Z +C X +B X +A Z +C Z +C Z +C Z +C X +A Y +A Z +A Z +B Z +B X +C X +B Y +C X +C Y +C Z +A Z +C X +C Y +B Y +B X +C X +B Y +C Y +B Y +B Y +C Z +C Y +C Y +B Y +A Y +B X +A Y +B X +C Z +B X +C Z +C Y +B Y +A Z +C X +B Z +C X +C X +C X +C Z +A Z +A Z +B Y +A Z +C Z +C Y +B Z +A X +A Z +C X +B Y +C X +C Z +C Z +A Z +C Z +C Y +B Z +B Z +C Y +B Y +C X +B Y +B Z +C Z +B X +C Z +B Z +B Y +B Y +C Y +C Z +C X +B Y +C X +C X +B Z +B X +C X +B X +C Z +C Z +B Y +A Y +C X +B Z +C X +C Y +C Z +C X +A Z +C X +B Y +B Y +A Y +C Z +B Z +B Y +C Y +C Y +A Y +B Y +B Y +B Y +C Z +C Z +A Z +B Y +C X +C Y +B Y +B Z +B Y +B Y +C X +C Z +C Z +A X +B Y +C Z +C Z +C Z +B Y +C Y +B Z +C Z +C X +C X +C Y +B X +C Z +B Y +C Y +B Z +A Y +B Y +B Z +A Z +C Z +C X +C Z +B Y +C Y +B Y +B Y +A Z +B Y +B Y +B Y +C X +C X +B Y +C Z +C Z +B Y +C X +C Z +C X +A Y +C Z +C Z +B Y +A X +C X +B X +A Y +C X +A X +B Y +A Z +C Y +C Y +C Z +C X +B Y +C X +C Z +B Y +C Z +C X +C Z +C Z +A Z +A Z +C Z +A X +C Z +C Z +B X +C Z +B Y +C X +A Z +C Z +C X +B Z +C Z +B Y +A Z +C Y +B X +B Z +A Y +B Y +C X +C Y +C Z +C Y +A X +C Z +C Z +C X +B Y +C Z +B Z +B Y +C X +C Z +C Y +B Y +C Y +B Y +A Y +B X +C Z +C Z +C Z +C X +B Z +C X +A Z +C Y +C Z +C X +C Z +A Z +A Y +B X +C X +C Z +B Z +B X +C Y +B Y +B Z +C X +C Z +C X +B Y +B Y +C X +B X +C X +C X +B Y +B Y +A Y +B Z +C Z +A Z +B Z +A Z +B Y +C Z +C Z +A Z +B Y +B Y +B X +C X +A Z +C Y +C Z +A Y +C Z +C Z +B Z +B Z +A X +A X +C Y +B X |