aboutsummaryrefslogtreecommitdiff
path: root/aoc2022/day-02
diff options
context:
space:
mode:
authorH.J <thechairman@thechairman.info>2024-10-09 11:36:55 -0400
committerH.J <thechairman@thechairman.info>2024-10-09 11:36:55 -0400
commit8777ff071f7bb37631baa7b6717ad29961e50911 (patch)
tree6d59c4ed58e454b960339c3d1151f0a879e8d7cb /aoc2022/day-02
parent6156a9ef7be4012063a042aafb4e9b0d7eadde8e (diff)
downloadgleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.tar.gz
gleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.zip
sorting by language
Diffstat (limited to 'aoc2022/day-02')
-rw-r--r--aoc2022/day-02/day-02.ipynb193
-rw-r--r--aoc2022/day-02/day-02.pl72
-rw-r--r--aoc2022/day-02/prolog-input.txt2500
3 files changed, 0 insertions, 2765 deletions
diff --git a/aoc2022/day-02/day-02.ipynb b/aoc2022/day-02/day-02.ipynb
deleted file mode 100644
index 13b9986..0000000
--- a/aoc2022/day-02/day-02.ipynb
+++ /dev/null
@@ -1,193 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Advent of Code 2022\n",
- "#### Day 2: Rock Paper Scissors\n",
- "\n",
- "You've given a strategy guide for how to win at a Rock Paper Scissors tournament. The first column is what your opponent will throw. Your score is determined by the result (win, lose, draw) of each round and what you played (rock, paper, scissors).\n",
- "\n",
- "**Part 1.** What's your tournament score if the second column represents what you should play in each round?\n",
- "\n",
- "**Part 2.** What's your tournament score if the second column represents the result of each round?\n",
- "\n",
- "For this solution, I'm using `rackjure` since I'm planning on using a bunch of dictionaries, and `rackjure`'s shorthand makes them easier to work with."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "vscode": {
- "languageId": "racket"
- }
- },
- "outputs": [],
- "source": [
- "#lang iracket/lang #:require rackjure\n",
- "(require advent-of-code)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The input for this problem is a list with two columns; the first column is one of the characters `A`, `B` or `C` (corresponding to the opponent's throw of rock, paper or scissors) and the second column is `X`, `Y` or `Z`, whose meaning is currently unknown."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "vscode": {
- "languageId": "racket"
- }
- },
- "outputs": [],
- "source": [
- "(define strategy-guide (~> (fetch-aoc-input (find-session) 2022 2) (string-split \"\\n\")))\n",
- "(define opponent-throw {\"A\" 'rock \"B\" 'paper \"C\" 'scissors})"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "We're also given the score for a round result and the bonus for the selected throw, and we write a function that determines the result for a given round."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "vscode": {
- "languageId": "racket"
- }
- },
- "outputs": [],
- "source": [
- "(define score-bonus {'rock 1 'paper 2 'scissors 3 'win 6 'draw 3 'lose 0})\n",
- "\n",
- "(define winning-rounds {'rock 'paper 'paper 'scissors 'scissors 'rock})\n",
- "(define losing-rounds {'rock 'scissors 'paper 'rock 'scissors 'paper})\n",
- "\n",
- "(define (outcome them me)\n",
- " (match* (them me)\n",
- " [(x x) 'draw]\n",
- " [(x y) #:when (eq? y (winning-rounds x)) 'win]\n",
- " [(_ _) 'lose]))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "##### Part 1\n",
- "\n",
- "In part 1, we assume that the second column refers to the throw we should select in each round. We add that to our existing dictionary and write a `for` comprehension to calculate each round result."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "vscode": {
- "languageId": "racket"
- }
- },
- "outputs": [
- {
- "data": {
- "text/html": [
- "<code>13809</code>"
- ],
- "text/plain": [
- "13809"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "(define assume-throw (dict-merge opponent-throw {\"X\" 'rock \"Y\" 'paper \"Z\" 'scissors}))\n",
- "\n",
- "(for/sum ([play (in-list strategy-guide)])\n",
- " (match-define (list them me) (string-split play))\n",
- " (+ (score-bonus (outcome (assume-throw them) (assume-throw me)))\n",
- " (score-bonus (assume-throw me))))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "##### Part 2\n",
- "Now we're told that the second column actually represents the round result: `X` is lose, `Y` is draw, `Z` is win. We can look up what we should throw in response for each round, and then calculate the score from that."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "vscode": {
- "languageId": "racket"
- }
- },
- "outputs": [
- {
- "data": {
- "text/html": [
- "<code>12316</code>"
- ],
- "text/plain": [
- "12316"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "(define assume-result (dict-merge opponent-throw {\"X\" 'lose \"Y\" 'draw \"Z\" 'win}))\n",
- "(define (pick-throw them result)\n",
- " (match* (them result)\n",
- " [(x 'draw) x]\n",
- " [(x 'win) (winning-rounds x)]\n",
- " [(x 'lose) (losing-rounds x)]))\n",
- "\n",
- "(for/sum ([play (in-list strategy-guide)])\n",
- " (match-define (list them result) (string-split play))\n",
- " (+ (score-bonus (assume-result result))\n",
- " (score-bonus (pick-throw (assume-result them) (assume-result result)))))"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Racket (trusted)",
- "language": "racket",
- "name": "racket-trusted"
- },
- "language_info": {
- "codemirror_mode": "scheme",
- "file_extension": ".rkt",
- "mimetype": "text/x-racket",
- "name": "Racket",
- "pygments_lexer": "racket",
- "version": "8.7"
- },
- "orig_nbformat": 4,
- "vscode": {
- "interpreter": {
- "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1"
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/aoc2022/day-02/day-02.pl b/aoc2022/day-02/day-02.pl
deleted file mode 100644
index 707da41..0000000
--- a/aoc2022/day-02/day-02.pl
+++ /dev/null
@@ -1,72 +0,0 @@
-:- use_module(library(yall)).
-:- use_module(library(apply)).
-
-output_solutions :-
- get_data(Games),
- part1_total(Games, Part1),
- write(Part1), nl, !,
- part2_total(Games, Part2),
- write(Part2), nl.
-
-% Facts
-
-game(X, X, draw).
-game(rock, scissors, win).
-game(scissors, paper, win).
-game(paper, rock, win).
-game(rock, paper, lose).
-game(scissors, rock, lose).
-game(paper, scissors, lose).
-
-opponent_move("A", rock).
-opponent_move("B", paper).
-opponent_move("C", scissors).
-
-assume_move("X", rock).
-assume_move("Y", paper).
-assume_move("Z", scissors).
-
-assume_outcome("X", lose).
-assume_outcome("Y", draw).
-assume_outcome("Z", win).
-
-bonus(rock, 1).
-bonus(paper, 2).
-bonus(scissors, 3).
-bonus(lose, 0).
-bonus(draw, 3).
-bonus(win, 6).
-
-% Rules
-
-get_data(Result) :-
- setup_call_cleanup(open("2022/day-02/prolog-input.txt", read, In),
- (read_string(In, _, Str),
- split_string(Str, "\n", "\s\t\n", Lines),
- maplist([In, Out] >> split_string(In, "\s", "", Out), Lines, Result)),
- close(In)).
-
-score_game(MyMove, Result, Score) :-
- bonus(Result, X),
- bonus(MyMove, Y),
- Score is X + Y.
-
-part1_score([Them, Me], Score) :-
- opponent_move(Them, TheirMove),
- assume_move(Me, MyMove),
- game(MyMove, TheirMove, Result),
- score_game(MyMove, Result, Score).
-
-part1_total(Games, Total) :-
- maplist(part1_score, Games, Scores),
- sum_list(Scores, Total).
-
-part2_score([Them, Outcome], Score) :-
- opponent_move(Them, TheirMove),
- assume_outcome(Outcome, Result),
- game(MyMove, TheirMove, Result),
- score_game(MyMove, Result, Score).
-
-part2_total(Games, Total) :-
- maplist(part2_score, Games, Scores),
- sum_list(Scores, Total). \ No newline at end of file
diff --git a/aoc2022/day-02/prolog-input.txt b/aoc2022/day-02/prolog-input.txt
deleted file mode 100644
index 95a2b2a..0000000
--- a/aoc2022/day-02/prolog-input.txt
+++ /dev/null
@@ -1,2500 +0,0 @@
-C X
-C X
-A Y
-C X
-B Y
-A X
-A Z
-B Y
-C Z
-C Z
-B X
-C Z
-B Y
-C Z
-B Y
-A Z
-B Y
-C X
-C X
-C X
-B X
-C Z
-C X
-C Z
-C X
-A Y
-B Y
-B Z
-A X
-C X
-C Z
-C Z
-A Z
-B Y
-C Z
-C X
-C X
-C Z
-B Y
-C Z
-C Z
-C X
-B X
-B X
-A Y
-C Z
-C Z
-B Y
-B Y
-C Z
-C X
-A Z
-C X
-C Z
-C Z
-B X
-C Z
-C Z
-B Y
-A Y
-B X
-C X
-C X
-C Z
-C X
-A Y
-C X
-C Z
-A Z
-B Y
-C Z
-C X
-C X
-C Z
-C Z
-C Z
-A Z
-C Z
-A Z
-A Z
-C X
-B Y
-C X
-C X
-A Z
-C X
-A Y
-C Z
-C Z
-A Y
-A Z
-C Z
-C Z
-A Y
-C Z
-C Y
-B Y
-B Y
-A Z
-A Y
-C Z
-C Z
-A Z
-C Z
-A Y
-B Z
-C X
-C Z
-C X
-B Y
-C Z
-C X
-B Y
-B X
-A Y
-C Z
-C Z
-C Z
-B Z
-A Y
-C Z
-C Z
-C X
-C Z
-C X
-A Y
-C Z
-C Z
-C X
-B Y
-B X
-B Y
-C Z
-C X
-B X
-C Z
-C Z
-A Y
-C Z
-A Z
-A Y
-C Z
-A Y
-C X
-A Y
-C Y
-A Z
-C X
-C X
-B Y
-B Y
-A Y
-A Z
-C Z
-C X
-C Z
-A Y
-B Y
-A Y
-B X
-C Z
-C Z
-A Z
-A Y
-C X
-C X
-C X
-A Z
-B Y
-C Z
-C Z
-C Z
-C X
-B Z
-C Z
-C Z
-B Z
-C Z
-A Z
-B Y
-A Y
-C Z
-B Y
-B X
-B X
-C X
-C Z
-A X
-C Z
-C X
-C X
-C X
-C X
-C X
-B Y
-C X
-C X
-A Y
-A Y
-C Z
-C Z
-B X
-C Z
-C Z
-C Z
-C Z
-A Z
-C Z
-A Z
-B Y
-B Y
-C Z
-B Y
-C Z
-C Z
-C Z
-C X
-B Y
-B Y
-C Z
-A Z
-C Z
-C X
-B Y
-C Z
-A Z
-C Z
-C X
-C Z
-C Z
-C X
-C X
-B Z
-A Y
-B X
-C Z
-B Y
-C X
-C X
-C Z
-C Z
-B X
-B X
-B Y
-A X
-C X
-A Z
-A Z
-C Z
-B Y
-C Z
-A Z
-B X
-C X
-B Y
-A Z
-C X
-A X
-A Z
-B Y
-B X
-B Y
-A Y
-C Z
-C Z
-B X
-C Z
-C X
-B Y
-C Z
-C Z
-A Y
-B Y
-A Z
-A Y
-C X
-C X
-C Z
-A Z
-C Z
-B Z
-A Z
-A Y
-C X
-C Z
-C X
-B Z
-C Z
-B Y
-A Y
-B X
-A Y
-C Z
-A Y
-C Z
-C X
-B Y
-C X
-A Y
-A Z
-C Z
-B Y
-C X
-A Y
-C X
-C Z
-C X
-B Y
-C X
-C Z
-C Z
-A Z
-B Y
-C X
-B X
-A Z
-C X
-C X
-A Y
-B X
-C X
-A Z
-C Z
-C Z
-C Z
-B Y
-A Y
-C X
-C Z
-C Z
-A Z
-C Z
-A Y
-C X
-C X
-C X
-A Z
-B Y
-C Z
-A Y
-C Z
-C Z
-C X
-C Z
-A Z
-C Z
-B Y
-C X
-C X
-C Z
-B Z
-B Y
-C X
-C X
-A Y
-A Z
-A Z
-A X
-C X
-A Y
-B Y
-A Y
-A Z
-B Y
-B Y
-A Y
-B Y
-C X
-A Z
-B X
-C Z
-A Z
-B X
-A Y
-B X
-B Y
-A Y
-A X
-C Z
-B Z
-B X
-B Z
-C Z
-C X
-B X
-B Y
-A Y
-B Y
-B Y
-B Y
-A Z
-A Y
-B X
-A Y
-C X
-B Y
-B X
-B Y
-C X
-A Y
-C X
-A Y
-C Z
-C Z
-A Z
-C Z
-C X
-C X
-A Z
-C X
-C X
-C X
-A Y
-A Z
-A Z
-C Z
-B X
-C X
-C X
-C Z
-A Y
-C X
-C X
-B X
-C Z
-C Z
-C X
-B Z
-C X
-C X
-C Z
-A Y
-C X
-A Z
-C Z
-C X
-B X
-B Y
-C X
-C Z
-C X
-C Z
-A Z
-C Z
-C X
-C Z
-C Z
-A Z
-B X
-C X
-C Z
-C X
-C X
-C Z
-C X
-C Z
-A Z
-A Z
-A Z
-C Z
-C X
-A Z
-C Z
-C Z
-C Z
-A Z
-B Y
-C X
-B Y
-C X
-C Z
-B Y
-C X
-C X
-A Z
-A Z
-C X
-C Z
-C X
-C Z
-A Z
-A Y
-C Z
-C Z
-A Y
-B Y
-B Y
-C Z
-B Y
-B X
-B Z
-A Y
-A Z
-C X
-B Y
-B Z
-B Y
-B Z
-C Z
-B Y
-C Z
-C Z
-B Y
-B X
-B Z
-C X
-A Z
-C X
-C X
-C X
-A Z
-C Z
-A Z
-C Z
-A Y
-C Y
-B Y
-A Z
-B Y
-C Z
-A Z
-A Y
-B X
-C X
-C X
-C X
-C Z
-C X
-B X
-C Z
-A Y
-C Z
-A X
-B Y
-B Z
-C Z
-B Y
-C Z
-B X
-B Y
-C Z
-B X
-A Z
-B X
-B Y
-A Y
-B Z
-C X
-C Z
-A Z
-A Y
-A Z
-C X
-C Z
-B Z
-A Z
-A Z
-C X
-C Z
-C X
-C X
-A Z
-C X
-C X
-C X
-B X
-A Y
-B Y
-B X
-B Y
-C Z
-B Y
-B Z
-C Z
-C X
-B Y
-C Z
-C Z
-C Z
-C Z
-C Z
-C Z
-A Z
-A Z
-A Z
-C X
-C Z
-B Y
-C Z
-C Z
-C Z
-C Z
-C X
-C X
-A Z
-B Y
-A Z
-B Z
-C X
-C X
-C Z
-C Z
-C X
-A Y
-C X
-A Y
-C Z
-A Z
-C Z
-B X
-C Z
-C Z
-C X
-C X
-C Z
-B Z
-A Y
-B X
-A Y
-B Y
-A Y
-A Z
-A Z
-C Z
-B X
-C Z
-C X
-C Z
-C Z
-A Z
-C X
-A Y
-C X
-A Z
-C Z
-C X
-C Z
-A Z
-C X
-C X
-C X
-C X
-B X
-B Y
-C X
-C Z
-C Z
-C Z
-C Z
-A Z
-A Z
-A Y
-C Z
-C X
-C Z
-C Z
-C Z
-A Y
-C X
-A Z
-C Y
-A Z
-C Z
-C X
-A Y
-C Z
-C X
-C X
-A Z
-B Y
-C Z
-A Z
-C Z
-C Z
-C Z
-B Y
-C X
-C X
-A X
-A Y
-C Z
-A Z
-C Z
-B Y
-C X
-B X
-C X
-C X
-A Y
-C Z
-C Z
-C Z
-C X
-A Z
-B Y
-A Y
-B Z
-B Z
-B X
-A Z
-B X
-B X
-A Z
-A Z
-C Y
-B Y
-C Z
-A X
-C Z
-B X
-C Z
-A Y
-A Y
-C Z
-C Z
-A Z
-B Y
-C Z
-C Z
-C Z
-C X
-A Y
-C X
-B Y
-B Y
-C X
-C Z
-C X
-B X
-A Y
-A Y
-C Z
-C Z
-C Z
-C Z
-C Z
-B X
-C Z
-A Y
-B X
-A Y
-A Z
-C Z
-C X
-B Y
-B Y
-C Z
-C Z
-C Z
-B Y
-C X
-B Y
-A Y
-B X
-C Z
-C Z
-A Y
-C X
-C Z
-A Y
-C X
-C X
-A Z
-C Z
-B X
-A Z
-B Y
-C Z
-A Z
-B X
-C Z
-B Y
-C Z
-B Y
-C X
-C Z
-B X
-C X
-B Y
-C X
-A Y
-C Z
-C Z
-C X
-B Y
-C X
-C Z
-C X
-C Z
-A Z
-A Y
-C X
-C Z
-C Z
-A Z
-C X
-B Z
-A Z
-B Y
-C X
-A Z
-C Z
-B Y
-C X
-C X
-C Z
-C Z
-B Y
-A Z
-C Z
-C X
-C Z
-A Z
-C X
-A Z
-C Z
-C X
-C X
-C Z
-B X
-C Z
-C Z
-C Z
-B Y
-A X
-B Y
-C X
-A Z
-B X
-A Z
-C Z
-C X
-C Z
-C Z
-B Y
-B X
-C Z
-B Z
-B Y
-B X
-C X
-C X
-C X
-C Z
-B Y
-C Z
-C Z
-C Z
-C Z
-C Z
-C Z
-C X
-C Z
-A Y
-C X
-B X
-A Y
-C X
-C X
-C Z
-C Z
-C X
-B X
-B Y
-B Y
-C Z
-B X
-C X
-C X
-C Z
-C Z
-A Y
-C Z
-A Y
-C Z
-C Z
-B Y
-A Z
-B X
-B X
-C Z
-C Z
-A Y
-A Y
-C Z
-C Z
-C X
-A Y
-A Y
-C Z
-A Z
-C X
-B Z
-A Y
-C X
-B Z
-A Y
-C X
-B Y
-C X
-C X
-C Z
-A X
-C Y
-A Y
-B Z
-B Y
-A X
-B Y
-A Z
-C Z
-C X
-C X
-C X
-C Y
-B Y
-C Z
-A Z
-C X
-C X
-C Z
-C Z
-C X
-C Z
-B Y
-C Z
-C X
-B Y
-A Z
-C X
-B Y
-C Z
-C X
-B Y
-A Z
-B X
-C Z
-B X
-B X
-C Z
-C Z
-C X
-B Y
-A Y
-B X
-B X
-A Y
-B Y
-B Y
-B X
-A Z
-A Y
-C Z
-B Y
-C Z
-A Z
-C Z
-C X
-A Z
-C X
-C Z
-C X
-B Y
-C X
-A Z
-B X
-C Z
-C X
-C X
-B Y
-A Y
-C Z
-C X
-A Y
-A X
-C Z
-B Y
-B X
-C X
-C X
-C X
-C Z
-A Z
-B Y
-A Y
-B Y
-B X
-B Y
-B Y
-A Z
-B Y
-B Y
-B Y
-C Z
-C X
-A Z
-A X
-B Z
-C X
-C X
-C X
-C X
-C Z
-A Z
-B Y
-A Z
-B Y
-C X
-A Z
-A Y
-C Z
-C X
-B X
-A Z
-B Y
-C Z
-A Z
-C X
-A Z
-A Y
-B Y
-C Z
-B Y
-C X
-A Z
-A Z
-A X
-C Z
-C X
-A Y
-B Y
-B X
-C Z
-A Z
-C X
-B X
-B Y
-A Z
-C X
-B Y
-C X
-C Z
-C Z
-B Y
-A Z
-A Y
-C X
-B Y
-C X
-C X
-C Z
-C Z
-C X
-A X
-C X
-A Z
-C Z
-B X
-B X
-C X
-B X
-B Y
-C X
-C X
-A Y
-B Y
-C Z
-C Z
-C Z
-C Z
-C Z
-C Z
-A Z
-B X
-C X
-B Y
-B Y
-C X
-C Z
-A Z
-C X
-C Z
-C Z
-C X
-A Z
-C Z
-A Z
-C Z
-A Y
-C X
-C X
-B Y
-C X
-C Z
-B X
-A Y
-C Z
-C X
-B Y
-B X
-A Y
-C X
-A Z
-C Z
-C X
-C X
-A Y
-B Y
-C Z
-B Z
-C Z
-C X
-B Y
-C Z
-C X
-A Y
-C X
-C Z
-C X
-C X
-B X
-C X
-B Y
-C X
-C Z
-C X
-B X
-B X
-C Z
-A Y
-C Z
-C Y
-B X
-A Z
-C X
-A Z
-B Z
-A Y
-C Z
-C Z
-A Z
-B Z
-A Z
-C X
-C Z
-C Z
-A Z
-A Y
-C Z
-C X
-A Y
-B Y
-B X
-A Z
-A Y
-C X
-B X
-A Y
-C Z
-B Y
-C X
-C X
-C X
-B X
-A Z
-B Y
-B Y
-A Z
-C X
-B X
-B X
-A Y
-C Z
-C X
-C X
-A Y
-C X
-C X
-C Z
-C X
-A Y
-B Y
-C Z
-A Z
-C Z
-A Z
-A Z
-A Y
-C X
-C X
-C X
-A Y
-A Y
-B Y
-B Z
-A Z
-C X
-C Z
-C X
-C Z
-B X
-C X
-C X
-B X
-C Z
-C X
-B Y
-B X
-C Z
-A Z
-C Z
-B Y
-C Z
-C Z
-B X
-A Y
-B Y
-A Z
-B Y
-C X
-C X
-A Z
-C Z
-C X
-C Z
-C X
-A Z
-C X
-A Z
-C X
-A Y
-A Z
-C X
-C Z
-B Y
-C Z
-A Z
-C Y
-B Z
-B Y
-A Z
-C Z
-A X
-A Z
-C Z
-C X
-C X
-A Y
-C Z
-C X
-C Z
-C Z
-C Z
-B Y
-C Z
-C X
-C Z
-B Y
-C Z
-B Y
-C Z
-C Z
-C Z
-C Z
-C Z
-B Y
-C Z
-B Y
-A Y
-C X
-B Y
-A Y
-C X
-A Z
-A Y
-C Z
-B Y
-C Z
-C X
-A Y
-B Y
-C X
-C X
-C X
-A Y
-A Z
-B X
-B X
-B X
-B Y
-C Z
-B Y
-C Z
-C Z
-B Y
-A X
-C X
-A Y
-C Z
-B Y
-B Y
-C Z
-C Z
-C X
-C Z
-C Z
-B Y
-C Z
-C X
-A Y
-A Z
-C X
-B Z
-C X
-B Y
-C Z
-C X
-A Y
-A Z
-C Z
-C X
-C Z
-C X
-C X
-C X
-C X
-C Z
-C X
-B Y
-A Y
-C X
-C Z
-A Z
-B Y
-C Z
-C X
-C Z
-B Y
-A Z
-A Y
-A Y
-B Y
-B Y
-A Z
-B X
-A Y
-C X
-C X
-A Y
-C X
-A Y
-B Y
-C Z
-A X
-B X
-A Y
-A Z
-C Z
-B X
-C Z
-B Y
-C X
-B Y
-C Z
-A Z
-A Y
-C X
-C Z
-B X
-B Y
-C Z
-C Z
-A Z
-C Z
-B Z
-C X
-C X
-C Z
-C Z
-C Z
-C X
-C X
-C Z
-B Y
-C Z
-B Z
-C X
-A Y
-C Z
-B Y
-C X
-A Y
-C Z
-B X
-C Z
-A Z
-C Z
-C X
-A Y
-A Y
-A Y
-C Z
-C Z
-A Y
-A X
-C Z
-C Z
-C X
-C Z
-A Z
-A Z
-C Z
-C X
-C Z
-B Y
-A Y
-B Z
-B Y
-C X
-C Z
-C X
-B X
-B Y
-C X
-C X
-C X
-A Z
-A Y
-C X
-C Z
-C X
-B Y
-C Z
-B X
-C Z
-B Y
-A Z
-C X
-B Y
-C X
-B X
-A Z
-C X
-B Y
-A Y
-C Z
-C X
-A Y
-C X
-B Y
-B X
-C Z
-C X
-C X
-C Z
-C X
-C X
-A Y
-A X
-C Z
-C Z
-C Z
-B Y
-C Z
-A Z
-B X
-C Z
-C X
-C X
-A Y
-A Z
-B Y
-B Y
-C Z
-C Z
-A Y
-A Z
-A Z
-C Z
-B Y
-B Y
-C Z
-B Y
-C X
-C X
-C Z
-A Z
-C X
-C X
-B Y
-B Y
-C Z
-B Y
-C Z
-C Z
-C Z
-C Z
-C X
-C Z
-B Y
-C Z
-C Z
-B X
-C Z
-C Z
-C X
-B Y
-C Z
-A Z
-A Z
-A Z
-C X
-B Y
-C Z
-A Y
-B X
-C X
-C X
-A X
-A Y
-B X
-C Z
-C X
-C Z
-C Z
-B Y
-C Z
-C Z
-B Z
-C Z
-C Z
-B X
-A Y
-C X
-A Z
-B Y
-A Z
-C X
-B X
-B X
-C Z
-A X
-B Z
-A Z
-B Y
-C X
-C Z
-B Z
-C X
-B X
-C Z
-A Z
-B X
-C Z
-C Z
-A Z
-A Y
-C Z
-C Z
-B X
-A Z
-C Z
-B Y
-B Y
-C Z
-B Y
-C Z
-C Z
-C Z
-C Z
-C Z
-C Z
-C Z
-C X
-A Y
-C Z
-C Z
-C X
-C Z
-B Y
-B X
-B Y
-A Z
-C Z
-B Y
-B X
-C Z
-B X
-C Y
-C X
-B Y
-C Z
-B Y
-A Z
-B Y
-C X
-C Z
-B X
-C Z
-A Y
-C Z
-B X
-A Z
-A Y
-B Y
-C Z
-A Y
-B Y
-C X
-A Z
-A Y
-C Z
-C Z
-A Y
-B X
-C X
-B Y
-A Y
-C X
-B X
-C X
-C Z
-C Z
-B Y
-A Z
-B Y
-A Z
-A Y
-A Z
-B X
-A Y
-C X
-B Y
-C Z
-C Z
-A Z
-C Z
-C Z
-C X
-C Z
-C Z
-B Y
-A Z
-C X
-A Y
-C Z
-A X
-A Z
-C Z
-B Y
-C X
-C Y
-A Y
-B X
-B Y
-C Z
-C Z
-B X
-B X
-C Y
-B Y
-B X
-C X
-C Z
-A Z
-C Z
-A Z
-C Z
-C Z
-A Z
-B X
-C Z
-C X
-C Z
-B Y
-B X
-A Z
-C Z
-B X
-C Z
-B Z
-C Z
-B Y
-B Y
-C Z
-B Y
-A Y
-A Z
-A Z
-C X
-A X
-C X
-C Z
-C Z
-A Y
-C Z
-C Z
-C Z
-A Y
-B X
-C Z
-C X
-B X
-C X
-C X
-B Y
-C Z
-B X
-C X
-B Y
-A Y
-C Z
-C X
-C X
-A Z
-B Y
-C Z
-B Y
-C Z
-B Z
-B Y
-B Y
-A Y
-B Y
-B Y
-A X
-A Y
-C Z
-C X
-B X
-C Z
-C X
-C X
-B Y
-C Z
-C Z
-B Y
-A Y
-B Y
-C Z
-C X
-C Z
-C Z
-C X
-A Y
-A Y
-C Z
-A Y
-C X
-C Z
-A Z
-A Z
-C Z
-B Y
-A X
-A X
-B X
-A Z
-C X
-C X
-C X
-C X
-A Z
-A Z
-C X
-B X
-B Y
-C X
-B Y
-B Z
-A Z
-A Y
-C X
-B Y
-B Y
-C Z
-B X
-B X
-C Z
-B Y
-C Z
-C Z
-B Y
-C Z
-C X
-C Z
-B Y
-C X
-C Z
-C Z
-C X
-B X
-C Z
-C X
-C X
-C Y
-C Z
-B Y
-C X
-C X
-A Y
-C X
-C X
-C Z
-C X
-C Z
-C Z
-C Z
-A X
-C Z
-C Y
-C Z
-C Z
-C Z
-C Z
-A X
-C Z
-B X
-C Z
-C X
-B Y
-C X
-A Z
-C Z
-C X
-B Y
-B Y
-A Z
-A Y
-C X
-A Z
-C Z
-C Z
-A Y
-A Z
-A X
-C Z
-A Z
-C Z
-C Z
-C Z
-A Z
-A Y
-A Z
-A Z
-A Y
-A Y
-C X
-A Y
-A Y
-C Z
-C Z
-C Z
-B X
-C X
-C Z
-B X
-C Z
-C Z
-C Z
-C Z
-C Z
-B Y
-C Z
-B Y
-C Z
-C X
-A Z
-C Z
-B X
-B Y
-C X
-B Y
-C X
-C X
-A Y
-C Z
-C X
-C X
-C Z
-C X
-C X
-C Z
-B Y
-B X
-C X
-B X
-B Y
-C X
-A Z
-B Y
-A Z
-B Y
-A Z
-A Y
-C Z
-C Z
-C X
-B Y
-A Y
-A Y
-C X
-B Y
-C X
-A Z
-A Z
-C X
-A X
-C X
-A Z
-C X
-C Z
-C X
-A Y
-C X
-B Y
-B Y
-C X
-A Z
-C Z
-C Z
-B X
-C Z
-C Z
-A Y
-C Z
-B Y
-A Z
-A X
-C Z
-C X
-B Y
-A Z
-C X
-B X
-A Z
-A Z
-C Z
-A Z
-C Z
-C Z
-A X
-C X
-A Z
-C X
-A Y
-B Y
-C Z
-B Y
-B X
-C Z
-A X
-B Z
-A Z
-A Z
-C Z
-A Z
-C Z
-A Z
-C X
-C X
-C X
-C X
-A Z
-C Z
-C X
-B Y
-A Z
-B Y
-A Y
-C Z
-A Z
-C X
-C Z
-B Y
-C X
-A Y
-B X
-A Y
-B X
-B Y
-C Z
-A Y
-B Y
-A Y
-B Y
-C Z
-C X
-C X
-C X
-C Z
-B Y
-C Z
-B X
-C X
-A Y
-A X
-B Y
-A Z
-C Z
-A Y
-A Z
-C X
-B Y
-A Z
-C Z
-C X
-C Y
-C X
-A Z
-A Y
-C X
-A Y
-C X
-C X
-A Z
-B Y
-C Z
-C X
-B X
-B Y
-A Z
-A Z
-B X
-B Y
-C X
-B Y
-C Z
-B Y
-C Y
-B Y
-B X
-B Y
-A Y
-B Y
-C Z
-B X
-B Y
-C Z
-A Z
-C Z
-B X
-A Y
-B X
-C Z
-B Y
-A Y
-C Z
-C Z
-C Y
-C Z
-A Y
-C X
-A Y
-C Z
-C Z
-C Z
-C Z
-C Z
-C X
-C Z
-C Z
-B Y
-C X
-C Z
-B X
-C X
-C Z
-C X
-A Z
-C X
-C X
-C Z
-C X
-C X
-C Z
-A Z
-B X
-B Y
-C Z
-A Z
-C X
-B X
-B Y
-C Z
-C Z
-A Y
-C X
-C Z
-C X
-C Z
-B Y
-C X
-C Z
-C X
-C X
-C Z
-C X
-B X
-C X
-C Z
-A Y
-A Y
-A Y
-C Z
-C Z
-B X
-C X
-A Z
-C Z
-C X
-C Z
-B X
-C Z
-B Z
-C X
-A Y
-C Z
-A Y
-C X
-B Y
-B Y
-A Z
-C Z
-C Z
-C Z
-A Z
-C X
-A Y
-C Z
-A Y
-C Z
-A Z
-A Z
-B Y
-C Z
-A Z
-C X
-A Y
-C Z
-C Z
-C X
-C X
-C X
-A X
-B Z
-C Z
-C X
-A Y
-A Z
-C Z
-B X
-B Y
-C X
-C Z
-B X
-B Y
-C X
-B X
-C Z
-C X
-C X
-C X
-C X
-A Y
-A Z
-A Y
-B Y
-C Z
-B Y
-B Y
-C Z
-A X
-C Z
-B X
-C Z
-C Z
-A Z
-B Y
-C Z
-C Z
-A Y
-A Z
-A Z
-A Z
-B X
-C X
-C X
-B Y
-C Z
-C X
-B Y
-A Y
-C X
-C Z
-C Z
-C X
-C Y
-A Y
-A Z
-C X
-C X
-A Z
-B X
-C Z
-A X
-C Z
-C X
-C Z
-A X
-A Z
-C X
-B Y
-C Z
-C Z
-B X
-A Y
-B Y
-C Z
-C Z
-A Z
-A Y
-C Z
-C Z
-A X
-B Y
-C Z
-C Z
-B Y
-C X
-C Z
-B X
-B Y
-A Z
-C Z
-C X
-C X
-C Z
-B Z
-B Y
-C Z
-C X
-A Y
-C X
-A Y
-A Z
-B Y
-B X
-C Z
-A Z
-C Z
-C Z
-C Z
-A Y
-B Y
-A Z
-B Y
-C Z
-C X
-B Y
-C Z
-A Y
-C Z
-A Z
-C Z
-C Z
-C Z
-A Z
-C X
-B Y
-C Z
-A Z
-C Z
-C Z
-A Z
-C Z
-C X
-B Z
-C Z
-C Z
-A Z
-C Z
-C Z
-B Y
-B X
-C Z
-C Z
-B Y
-A Y
-C Z
-A Z
-A Z
-C Z
-C X
-C X
-B X
-C X
-A Y
-B X
-A Y
-C Z
-C X
-B Y
-C Z
-C X
-C X
-C X
-B X
-B Z
-C Z
-B Y
-C X
-A Z
-C Z
-C Z
-A Z
-A Z
-C Z
-C Z
-A Z
-A Z
-A Z
-C Z
-A Z
-C Y
-A Z
-C Z
-C Z
-C X
-C X
-C Z
-C Z
-A Z
-C Z
-A Z
-C X
-C X
-C X
-A Y
-A Z
-A Z
-A Y
-B X
-C Z
-C Z
-B X
-C Z
-C X
-B Y
-C Z
-C X
-C X
-B Y
-B Y
-A Y
-A Z
-B X
-C X
-B Y
-B Y
-B Y
-C Z
-C X
-C X
-A Y
-B Z
-A Z
-A Z
-B X
-C X
-A Y
-C X
-C Z
-C X
-A Y
-A Z
-C Z
-A Z
-C Z
-C X
-C X
-A Z
-B X
-B X
-B Y
-C Z
-C Z
-C X
-C X
-C X
-B Y
-C Z
-C X
-B X
-C Z
-C X
-B X
-A Y
-B Y
-C Z
-A Z
-A Y
-C Z
-A Y
-A Y
-C Z
-B Y
-C Z
-B Z
-C Z
-A Z
-C X
-C X
-C Z
-B X
-C X
-B Y
-C Z
-B X
-C Z
-C X
-B X
-B Y
-B Z
-B X
-A Y
-C X
-C Z
-C Z
-A Y
-B X
-A Y
-C X
-C Z
-B Y
-C Z
-C Z
-C Z
-A Z
-A Z
-A Y
-C Z
-B Y
-C Z
-C X
-B Y
-C Z
-C Z
-A X
-C X
-B Y
-A Z
-C Z
-C X
-A Z
-A Y
-C Z
-C Z
-B X
-C Z
-A Z
-A Y
-C X
-A Y
-C Z
-C X
-C X
-C X
-B Y
-C X
-A Y
-C X
-B Y
-B X
-A Y
-B X
-A Y
-B Z
-C Z
-A Z
-B Y
-B X
-C Z
-C Z
-C X
-B Y
-A Z
-A Z
-A Y
-A Y
-C Z
-A Z
-A Z
-B Y
-C X
-C Z
-C Z
-C Z
-A Y
-A Z