From 4f8fa53dbf12f3fac278c4fd526814ed19ada609 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Mon, 12 Dec 2022 21:08:40 -0500 Subject: [PATCH] Day 2 complete --- 2022/2.c | 117 +++ 2022/2.txt | 2500 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2617 insertions(+) create mode 100644 2022/2.c create mode 100644 2022/2.txt diff --git a/2022/2.c b/2022/2.c new file mode 100644 index 0000000..8d4f706 --- /dev/null +++ b/2022/2.c @@ -0,0 +1,117 @@ +#include +#include + +struct RPS_Game { + // Part 1 Rock / Part 2 Lose + const int X; + // Part 1 Paper / Part 2 Draw + const int Y; + // Part 1 Scissors / Part 2 Win + const int Z; + // Outcomes + const int draw; + const int win; +}; + +// Part 1 - Calculate score +void process_round(struct RPS_Game *game, int *score, const char opponent_move, + const char my_move) { + + switch (my_move) { + case 'X': // Rock + *score += game->X; + if (opponent_move == 'A') { + *score += game->draw; + } else if (opponent_move == 'C') { + *score += game->win; + } + break; + case 'Y': // Paper + *score += game->Y; + if (opponent_move == 'A') { + *score += game->win; + } else if (opponent_move == 'B') { + *score += game->draw; + } + break; + case 'Z': // Scissors + *score += game->Z; + if (opponent_move == 'B') { + *score += game->win; + } else if (opponent_move == 'C') { + *score += game->draw; + } + break; + } +} + +// Part 2 - Find move given a desired result, then calculate score +void find_move(struct RPS_Game *game, int *score, const char opponent_move, + const char result) { + + char my_move = '\0'; + + switch (result) { + case 'X': // need to lose + if (opponent_move == 'A') { + my_move = 'Z'; + } else if (opponent_move == 'B') { + my_move = 'X'; + } else if (opponent_move == 'C') { + my_move = 'Y'; + } + break; + case 'Y': // need a draw + if (opponent_move == 'A') { + my_move = 'X'; + } else if (opponent_move == 'B') { + my_move = 'Y'; + } else if (opponent_move == 'C') { + my_move = 'Z'; + } + break; + case 'Z': // need to win + if (opponent_move == 'A') { + my_move = 'Y'; + } else if (opponent_move == 'B') { + my_move = 'Z'; + } else if (opponent_move == 'C') { + my_move = 'X'; + } + break; + } + process_round(game, score, opponent_move, my_move); +} + +int main(int argc, char *argv[]) { + + if (argc != 2) { + fprintf(stderr, "USAGE: %s input_file\n", argv[0]); + return 1; + } + + FILE *file = fopen(argv[1], "r"); + if (!file) { + fprintf(stderr, "Error opening file %s\n", argv[1]); + return 1; + } + + int part1_score = 0; + int part2_score = 0; + char round[5] = {0}; + struct RPS_Game game = {.X = 1, .Y = 2, .Z = 3, .draw = 3, .win = 6}; + + while (fgets(round, sizeof round / sizeof *round, file) != NULL) { + if (strlen(round) == 1) { + break; + } + process_round(&game, &part1_score, round[0], round[2]); + find_move(&game, &part2_score, round[0], round[2]); + } + + fclose(file); + printf("My part 1 score: %d\n", part1_score); + printf("My part 2 score: %d\n", part2_score); + + return 0; +} diff --git a/2022/2.txt b/2022/2.txt new file mode 100644 index 0000000..9d27e74 --- /dev/null +++ b/2022/2.txt @@ -0,0 +1,2500 @@ +B Y +A X +C Z +A Z +B Y +B Y +A X +C Z +B Y +B Y +C Z +C X +B Y +C Z +B Y +C Z +A Z +A Z +A X +B Y +A X +C Z +C Y +C Z +C Z +C Z +A X +A X +B Y +A Z +B Z +B Y +A X +A X +C Z +B Y +B Y +B Z +A Z +A X +C Z +B Z +A Z +C Z +C Z +C Z +C Z +C Z +C Z +B X +A Z +A Z +C Z +C Z +C Z +A Y +C Z +B Y +C Z +C Z +C Z +B Y +B Z +A X +A X +C Z +B Y +B Y +B Z +A X +A X +C Z +B Y +C Z +A X +C Z +A X +C X +A Y +A Y +B Y +A Y +C Z +B Y +C Z +C Z +A X +C Z +A Z +C Z +A X +C Z +B Y +B Y +C Z +B Z +C Y +C Z +B Y +C Z +C Z +B X +A X +C Z +C Z +B Y +C Z +B Y +A Z +B Y +B Z +A Z +C Z +C Z +C Z +A Z +C Z +A X +A X +A Z +C Z +A X +A Z +C Z +A Z +A Y +B Y +A Z +B X +A X +C Z +C Z +B Y +C Y +B Y +B Z +B Y +B Y +C Z +C Z +C Z +C Z +A Y +C Z +B Z +A X +B Y +A Y +C Z +C Z +C Z +C Z +C Z +B Y +C Z +B Y +C Z +B Y +C Z +C X +A Y +A X +C Y +B Y +A Z +C Z +C Z +B Y +B Y +A X +B Y +A Y +A X +A X +B Y +A X +A X +B Y +C Z +C Z +B Y +C Z +A Z +C Z +B Z +C Z +A Y +C Z +B Z +C Z +A Y +A Y +C Z +A X +B Y +C Z +A X +B Y +B Y +A X +A X +C Z +B Y +C Z +B Z +C Z +A X +C Z +B Y +B Y +A X +B Z +C Z +B Z +B Y +B Y +A Y +B Z +A Z +C Z +C Z +A X +A X +A X +C Z +B Y +A X +A Y +C Z +A X +B Y +A Y +A Y +C Z +C Z +C Z +A Z +B Z +C Z +B Y +C Z +C Z +A Y +A X +C Z +B Y +C Z +C Z +B Y +B Y +A Y +C Z +B Y +B Y +A Z +C Z +C Z +C Z +C Z +B Z +C Z +B Y +A X +C Z +B Z +A Z +A X +C Z +A X +A X +B Y +C Z +C Z +A X +C Z +A Y +C Z +C Z +A X +B Y +C Z +B Z +B Y +C Z +A Z +C Z +C Z +A Y +A Z +C Z +C Z +B Z +C Z +B Y +C Z +C Z +A X +C Z +C Z +B Z +C Z +B Z +A X +B Y +C Z +C Z +C Z +C Z +C Z +A Z +A Y +A X +A X +C Z +B X +A Z +A X +C Z +B Z +C Z +B Y +A Z +C Z +B Y +C Z +C Y +A Y +C Z +B Y +B Y +C Z +A X +C Z +A X +C X +A X +B X +A X +C Z +C Z +C Z +B Y +B Y +C Z +B Z +C Z +B Y +A X +C X +C Z +B Y +A Z +A X +B Y +B Y +C Z +C Z +C Z +B Y +A X +A X +B Y +A X +A Y +C Z +B Y +A X +A Y +B Y +A X +A X +C Z +C Z +C Z +C Z +C Z +A X +A X +B Z +A Y +C Z +A X +C Z +B Y +C Z +A Z +C Z +C Z +A Y +B Z +C Z +A X +B Y +B Y +C Z +A Y +C Z +C Z +C Z +C Z +C Z +B Y +A X +A X +B Y +C Z +C Z +A Z +C Z +C Z +C Z +A Y +B Z +B Y +B Y +C Z +A X +A Y +C Z +A X +A Y +A X +C Z +A Y +B Z +B Y +B Z +C Z +C Z +C Z +B Z +B Z +C Z +C Z +C Z +C Z +B Y +B Z +A Y +A Y +B Z +B X +A Z +A X +C Z +A X +A Y +A X +A X +A X +C Z +C Z +C Z +A X +C Z +C Z +B Y +A X +C Z +A X +A Y +A X +C Z +A Y +C Z +B Y +A X +A Y +A Z +C Z +B Y +B Y +B Z +A X +A X +B Y +C Z +A X +B Y +C Z +C Z +C Z +A X +A Y +A Z +C Z +B Y +C Z +A X +A Z +A Z +B Y +B Y +A X +B Y +C Z +B Z +C Z +B Y +A Z +C Z +A Y +A X +A Z +B Y +A X +A Z +C Z +A Z +C Z +C Z +A X +C Z +A X +C Z +A X +C Z +B Y +C Z +A X +B Y +A Y +C X +A Y +A Z +A X +A Z +B Y +A X +C Z +A Y +B Y +B Y +C Z +B Y +C Z +B Y +B Z +C Z +C Z +B Y +A X +C Z +B Y +C Z +C Z +C Z +C Z +C Z +A X +A X +A Z +A Z +C Z +A Y +B Y +A Y +A Y +B Y +C X +A Y +C Z +C Z +C Z +A Y +A Y +A Y +C Z +A X +B Y +A X +B X +A Y +A Y +A X +B Z +B Y +C Z +B Y +C Z +B Y +C Z +A Z +C Z +A X +B Y +A X +C Z +B Z +C Z +B Y +C Z +C Z +C Z +A X +A X +B Y +B Z +A Z +A X +A X +C Z +A X +A X +C X +C X +C Z +B Y +B Z +C Z +A X +B Y +B Y +A Z +C Z +C Y +A X +B Y +B Y +C Y +A X +A X +A X +A X +A Z +B Y +A Z +C Z +C Z +B Y +B Z +B Y +A Y +C Z +C Z +B Y +A Y +C Z +A X +C Z +C Z +A X +B Y +C Z +C Z +A X +A Z +C Z +A Z +C Z +B Z +A X +A Y +B Y +A X +A Y +A Z +A Y +A X +A Y +C Z +A X +C Z +C Z +A X +A Y +A X +C Z +A Z +C Z +C Z +C Z +A X +B Y +A X +C Z +C Z +C Z +C Z +A X +C Z +C Z +B Y +A Y +A X +A X +C Z +C Z +A X +C Z +C Z +B Y +C Z +A X +C Z +C Z +A Y +A X +C Z +A Y +C Z +A X +B Z +B Y +A X +B Y +C Z +A X +C Z +C Z +A X +C Z +B X +C Z +C Z +A Y +C Z +A Y +B X +C Z +B Y +C Z +A Z +C Z +A X +C Z +C Z +C Z +C Z +A X +B X +C Z +C Z +B Y +A Z +A Y +C Z +A X +A Z +A X +A X +B Y +A X +C Z +A X +A X +B Y +A X +B Z +C Z +A Z +A Y +A X +B Y +A X +A Z +A X +B Y +B Z +B Y +C Z +B Y +A X +A Y +C Z +A X +B Z +C Z +C Z +A X +A X +A Y +C Z +C Z +C Z +A Y +B Y +A X +C Z +B Y +B Y +A X +A X +B Y +C Z +B Y +A X +A Z +C Z +C Z +C Z +C Z +B Z +C Z +A Z +C Z +A Y +B Y +A Y +C X +C Z +C Z +A Y +A X +B Y +C Z +A X +C Z +A X +A Y +A Y +B Z +C Y +B Y +C Z +B Y +A X +C Z +C Z +C Z +C Z +B Y +A X +B Y +A Y +C Z +B Y +A Z +B Z +C Z +C Z +C Z +C Z +A Y +A X +C Z +A X +C Z +C Z +C Z +C Z +C Z +B X +C Z +B Z +A X +A X +A Y +A X +A Z +B Y +A Y +C Z +C Z +C Z +C Z +C X +A Y +C Z +C Z +B Y +A X +C Y +B Y +C Z +C Z +C Z +B X +A X +C Z +A X +C Z +C Z +C Z +C Y +A X +C Z +A Z +C Z +C Z +B Y +A X +A X +A Z +A Y +C Z +C Z +C Z +C Z +C Z +C Z +C Z +B Y +A Y +A X +C Z +C Z +A X +A X +C Z +C Z +B Y +A X +A X +C Z +C Z +C Z +B Y +A Y +B Z +A Y +C Z +A X +C Z +C Z +B Y +A Y +A X +B Z +A X +C Z +C Z +C Z +C Z +B Z +C Z +B Y +C Z +C Z +C Z +B Y +C Z +C Y +B Z +B Z +A Y +C Z +C Z +B Z +B Y +C Z +B Y +C Z +C Z +B Y +C Z +C Z +C Z +A Y +A X +B Y +C Z +C Z +C Z +B Y +C Z +A Y +A X +A Z +A Y +C Z +C Z +C Z +B Z +C Z +B Y +C Z +B Y +A Y +C Z +C Z +A Z +B Y +A X +A X +B Z +A X +C Z +C Z +C Z +A X +B Z +C Z +A X +C Z +C Z +C Z +C Z +C Z +C Z +A Y +C Z +A Z +A X +B Y +C Z +C Z +A X +A Y +C Z +B Y +A X +C Z +C Z +A X +A Y +A X +B Z +C Z +A X +C Z +A X +A Z +B Y +C Z +C Z +C X +B Z +B X +B Y +A Z +C Z +A X +B Z +A X +B Y +C Z +B Z +A Z +A Z +C Z +C Z +C Z +C Z +B Y +B Y +A Y +A X +A X +B Y +A Z +A X +C Z +B Z +A X +A X +B Y +A X +C Z +A X +C Z +C Z +C Z +C Z +A X +A X +A Z +C Z +A X +B Z +C Z +B Y +C Z +C Z +A Y +C Z +B Z +C Z +C Z +B Y +C Z +C Z +B Y +A X +A X +C Z +C Z +C Z +A X +C Z +C Z +B Y +C Z +B Z +C Z +A X +C Z +A X +C Z +A Y +C Z +C Z +A X +B Y +C Z +C Z +C Z +A X +B Y +C Z +A X +B Z +A X +B Z +C Z +A X +C Z +B Y +A Z +B X +A Y +C Z +C Z +B X +A Y +A X +C Z +A X +C Z +B X +A X +B Y +A Z +A X +C Z +A Y +C Z +A X +C Z +C Z +C Z +C Z +A Z +C Z +C Z +B Y +A X +B Y +C Z +B Y +A X +C Z +C Z +A X +A X +B Y +C Z +B Y +C Z +C Z +A Z +C Z +C Z +C Z +A Y +A Z +C Z +C Z +C Z +C Z +A X +C Z +A X +A X +B Z +C Z +C Z +C Z +B Z +A X +C Z +A Y +B Y +C Z +A Y +C Z +C Z +A X +A X +B Y +A Z +A Y +A X +B X +B Y +B Z +B Y +A X +C Z +C Z +B Z +B Z +B Z +C Z +C Z +B Y +B Y +B Y +C Z +B Y +A X +A Z +B Z +A X +B Z +A X +C Z +B Y +B X +A X +C Z +A X +C Z +C Z +C Z +B X +B Y +A Y +A X +A X +A Y +C Z +C Z +B Y +C Z +B Z +A X +C Z +C Z +C Z +A X +A Y +C Z +B Z +A X +A Y +A Z +C Z +B Y +B Z +A X +C Z +A X +A X +A Z +C Z +C Z +B Y +A X +C Z +A Y +A Z +A X +A X +C Z +A Y +B Y +C Z +A Z +C Z +B Y +A X +A X +A X +C Y +C Z +A Y +B Z +C X +A X +A X +A X +A X +B Z +B Y +C Z +B Y +A X +B Y +C Z +B Y +C Z +C Z +A X +B Y +A Y +B X +A X +B X +C Z +A Z +A X +B Y +B Y +C Z +A X +A X +B Y +C Z +A X +C Z +A X +A Z +A Z +C Z +A Z +C Z +C Z +C Z +C Z +A Z +C Y +C Z +C Z +A Z +A Y +A X +B Z +C Z +C Z +C Z +A Y +C Z +C Z +C Z +C Z +A Z +B Z +A X +C Z +C Z +A Y +B Y +A X +C Z +A X +B Y +A X +A X +A Z +B Y +C Z +B X +C X +A X +A X +A X +C Z +C Z +A X +B Y +A Z +B Y +A X +A Y +C Z +B Y +C Z +B Y +A Y +B Y +A Y +A X +C Z +C Z +A X +B Y +A X +C Z +C Z +A Y +B Y +B Y +A Z +B Y +C Z +C Z +C Z +B Y +A X +B Y +A X +C Z +C Z +C Z +A X +C Z +C Z +B Y +C Z +B Z +B Y +A X +B Y +A Z +B Y +A X +B X +C Z +A Z +B Y +C Z +B Y +C Z +C Z +C Z +C Z +B X +A X +B Y +B Y +A X +C Z +A X +B Z +B Z +B Z +A X +C X +A X +A X +A X +B Y +B Y +C Z +C Z +A X +C Z +B Y +A X +C Z +A X +C Z +A X +B Y +C Z +C Z +A Y +B Y +C Z +A Z +C Z +A X +C Z +C Z +A Z +A Y +C Z +A X +B Y +B Z +C Z +A Y +A Y +C Z +C Z +B Z +A Z +C Z +A X +C Z +A X +C Z +C Z +C Z +B Y +C Y +B Y +A Y +A X +C Z +B Y +C Z +C Z +C Z +A Z +C X +A Y +C Z +A Y +A Y +C Z +A Z +C Z +C Z +C Z +C Z +C Z +B Y +A Y +B Y +A Z +B Y +A X +A X +B Y +A Z +B Y +C Z +B Z +A X +C Z +A Y +A Y +C Z +A X +A X +C Z +C Z +C Z +B Y +A X +C Z +B Y +C Z +B X +C Z +A Y +C Z +A X +C Z +A X +C Z +C Z +B Y +C Z +B Z +C Z +A Y +A X +A Z +C Z +C Z +C Z +C Z +C Z +A Z +B Y +B Y +B Y +C Z +C Z +C X +C Z +A X +B Y +C Z +C Z +A X +B Y +C Z +C Z +C Z +C Z +C Z +C Z +A X +B Z +C Z +C Z +C Z +A X +B Z +C Z +A X +C Z +A Y +B Y +C Z +B Z +B Y +C Z +B X +C Z +B Y +B Y +B Y +A X +A X +C Z +A Z +C Z +B Y +B Z +C Z +C Z +B Z +B Y +A Z +B Y +A X +A X +C Z +C Z +C Z +B Y +A X +C Z +C Z +A Y +C Z +B Y +C Z +C Z +C Z +C Z +C Z +C Z +B Y +B Y +C Z +A Z +A X +B Y +C Z +B Y +A X +A Z +C Z +B Y +A Z +C Z +B Y +A Z +A X +B Z +A X +C Z +B Y +C Z +A Y +C Y +A X +A Y +C Z +C Z +B Y +C Z +B Y +A Z +C Z +C Z +A X +C Z +B Z +A Y +B Z +A Z +A X +B Y +A Z +A Y +C Z +C Z +B Y +A X +B Y +C Z +A X +B Y +B Y +C Z +A Z +A X +C Z +B X +C Z +C Z +C Z +C Y +A Z +A X +C Z +C Z +A X +B Y +C Z +B Y +C Z +B Z +A Z +C Z +B Y +A X +C Z +C Z +B Z +C Z +A Z +B Y +B Z +C Z +C Z +A X +C Y +B Y +C Z +A X +C Z +C Z +B Y +B Z +C Z +C Z +A Y +A X +C Z +A X +B Z +B Y +A Z +B Z +C X +A X +C Z +C Z +C Z +A X +B Z +C Z +C Z +C Z +B Y +C Z +A X +C Z +C Z +B Y +C Z +A X +C Z +C Z +C Z +A X +A X +B Y +C Z +C Z +B Y +B Z +B Y +C Z +A X +A X +B Y +A X +B Y +C Z +A X +C Z +C Z +B Z +A X +B Y +C Z +C Z +C Z +C Z +A Z +C Z +A X +B Y +A Y +A Y +C Z +C Z +C Z +B Y +A Z +A X +B Y +C Z +A X +C Z +A X +C Z +A X +C Z +C Z +B Y +A Y +C Z +B Y +B Y +A X +C Z +A Y +A Z +C Z +C Z +C Z +A Y +B Y +C Z +C Z +B Z +C Z +B Z +B Y +A X +A X +C Z +B Z +C Z +C Z +A X +A X +B Z +A X +C Z +C Z +B Y +A X +C Z +A X +B Y +C X +A Z +B Y +C Z +A X +B Y +C Z +A X +B Y +C Z +B X +C Z +A Y +C Z +A X +C X +B Z +C Z +B Y +B Y +B Y +A Y +A X +C Z +C Z +A Y +B Y +A X +C Z +A X +C Z +C Z +A X +C Z +A X +C Z +B Y +C Z +A X +A Z +C X +B Y +C Z +C Z +B Z +A X +A X +B Y +C Z +A Y +B Y +C Z +A X +A Z +A X +B Y +A X +B Y +C Z +C Z +B Y +A X +B Y +B Z +C Z +B Z +A X +C Z +C Z +A Y +C Z +A X +C Z +B Y +C Z +C Z +C Y +C Z +C Z +A Y +C Z +C Z +A Z +A X +B Z +C Z +A Y +A X +B Z +C Z +C Z +B Y +B Z +A X +A X +C Z +B Y +A Y +C Z +A Z +A X +C Z +A X +C Z +C Z +A Z +C Z +C Z +C Z +A Y +B Y +A X +B Z +B Y +C Z +C Z +C Z +C Z +C Z +C Z +C Z +A Z +B Z +B X +A X +A Z +A X +A X +B Y +C Z +C Z +A X +B Y +A Y +C Z +B Z +C Z +A X +B Y +C Z +B Y +A Z +C Z +A Y +C Z +A X +C Z +A Z +B Y +A Y +A X +A X +A Z +C Z +C Z +C Y +C Z +A Y +A X +B Y +A Z +B Z +B Z +C Z +C Z +C Z +C Z +A X +A Y +B Y +C Z +B Y +C Z +A X +B Y +C Z +C Z +A Z +A X +B Y +C Z +A Y +C Z +C Z +C Z +A X +B Y +A X +B Y +C Z +C Z +B Y +C Z +A X +A X +C Z +B Y +B Z +A X +A X +A X +C Z +C Z +B Y +A X +C Z +A X +A Z +C Z +C Z +C Z +C Z +A Z +A X +B X +B Z +A Y +C Z +C Y +B Y +C Z +A Y +A X +B Z +B Y +C Z +B Y +C Z +A X +A Z +A X +C Z +B Y +B Y +B Y +A Z +C Z +C Z +B Y +C Z +B Y +A X +B Y +A X +B Y +C Z +C Z +B Y +A X +A Y +B Z +C Z +C Z +A X +B Y +A X +A X +A Y +B X +A X +A X +C Z +B Z +A X +C Z +A Y +A Z +C Z +A Z +A X +B Y +A X +C X +C Z +B Y +C Z +A X +A X +C Z +A X +B Y +A X +C Z +B Z +C Z +A X +C X +C Z +C Z +A X +C Z +A Y +C Z +A X +B Y +B Y +B Y +B Y +B Y +B Y +B Y +B Y +A Y +A Z +B Y +C Z +C Z +B Y +A Z +A X +A Y +A X +C Z +A Y +A Z +A Y +B Y +C Z +C Z +A Y +C Z +A X +B Y +C Z +A X +C Z +A X +B Y +C Z +C Z +A Z +A X +C Z +B Y +A Z +C Z +A X +C Z +B Y +B Y +C Z +C Z +C Z +C Z +B Z +C Z +C Z +C Z +C Z +C Z +B Y +B Y +A X +C Z +C Z +A Z +C Z +A X +C Z +C Z +A X +B Y +A X +C Z +B Y +B Y +A Y +A Y +A X +A Y +A Y +C Z +C Z +A Y +C Z +A Y +B Y +C Z +C Z +C Z +B Y +B Y +B Y +A X +C Z +B Y +C Z +C Z +C Z +C Z +A X +B Y +A X +C Z +A X +C Y +A Y +B Y +C Z +C Z +C Z +C Z +B Y +C Z +C Z +B Y +C Z +A X +A X +B Y +B X +C Z +B Y +A X +B Z +A Z +C Z +C Z +C Z +C Z +B Y +A Z +C Z +C Z +C Z +C Z +A X +A X +B Y +A Z +C Z +C Z +C Z +C Z +A Z +B Y +A X +B Y +C Z +C Z +B Z +C Z +A Y +C Z +A Y +B Y +C Z +A X +C Z +A X +B Z +B Y +B Y +A X +B X +A X +C Z +B Y +A X +A Z +C Z +C Z +A Z +C Z +C Z +B Y +C Y +C Z +A Z +A Z +C Z +B X +C Z +C Z +B Y +C Z +B Y +B Y +A X +A Y +B Y +A X +B Z +C Z +A Z +A X +A X +A Z +A Z +B Z +A X +B Y +C Z +B Y +A X +C Z +B Z +A Y +B Z +C Z +A X +B Z +A X +A Y +C Z +C Z +C Z +C Z +C Z +A Y +A Y +A X +B Y +C Z +A X +B Y +A X +B Y +C Z +A Z +C Z +C Z +C Z +C Z +C Z +B Y +B Z +C Z +A X +A Z +A X +A X +C Z +C Z +C Z +C Z +B Y +C Z +A X +C Z +C Z +C Z +C Z +C Z +B Y +A Z +A X +A Z +C Z +C Z +C Z +C Z +B X +C Z +C Z +A X +C Z +A Z +B Z +B Y +B Z +A Y +B Y +B Y +C Z +A Y +A Y +A Y +C Z +C Z +B Z +A X +C Z +A X +A X +A X +C Z +C Z +A Z +A X +A Y +C Z +C Z +A X +B Z +C Z +A X +C Z +A Z +A X +C Z +C Z +A X +A Z +B Y +A X +B Y +C Z +C Z +A X +B Z +C Z +B Y +C Z +A Z +C Z +A X +B Y +C Z +C Z +A Y +C X +A Y +A Y +C Z +C Z +A X +A Z +B Y +C Z +B Y +C Z +A Y +C Z +C Z +C Z +A Z +C Z +C Z +B Y +A Y +C Z +C Z +B Y +A X +C Z +B Y +C Z +B Y +C Z +B Y +A X +A Y +B Y +C Z +B Z +A Y +C Z +A Y +A Z +C Z +B Y +C Z +C Z +B Y +A Y +A Y +C Z +C Z +A Y +C Z +C X +C Z +C Z +C Z +A X +C Z +B Y +B Y +C Z +C Y +B Z +C Z +B Y +A X +A X +B Y +C Z +A X +C Z +B Z +C Z +A X +B Y