diff --git a/2015/.envrc b/2015/.envrc new file mode 100644 index 0000000..e24737b --- /dev/null +++ b/2015/.envrc @@ -0,0 +1 @@ +export ADVENT_OF_CODE_SESSION=53616c7465645f5f92dfbc249005a7e94ec3c6e62cd4e5e9ddf8e368a48c0c80440b6c5e37d836cc0b294e19a9e8a7f1 diff --git a/2015/.formatter.exs b/2015/.formatter.exs new file mode 100644 index 0000000..d2cda26 --- /dev/null +++ b/2015/.formatter.exs @@ -0,0 +1,4 @@ +# Used by "mix format" +[ + inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] +] diff --git a/2015/.gitignore b/2015/.gitignore new file mode 100644 index 0000000..c927e54 --- /dev/null +++ b/2015/.gitignore @@ -0,0 +1,26 @@ +# The directory Mix will write compiled artifacts to. +/_build/ + +# If you run "mix test --cover", coverage assets end up here. +/cover/ + +# The directory Mix downloads your dependencies sources to. +/deps/ + +# Where third-party dependencies like ExDoc output generated docs. +/doc/ + +# Ignore .fetch files in case you like to edit your project deps locally. +/.fetch + +# If the VM crashes, it generates a dump, let's ignore it too. +erl_crash.dump + +# Also ignore archive artifacts (built via "mix archive.build"). +*.ez + +# Ignore package tarball (built via "mix hex.build"). +advent_of_code_2015-*.tar + +# Temporary files, for example, from tests. +/tmp/ diff --git a/2015/.iex.exs b/2015/.iex.exs new file mode 100644 index 0000000..795d6b6 --- /dev/null +++ b/2015/.iex.exs @@ -0,0 +1 @@ +import AOC.IEx diff --git a/2015/.tool-versions b/2015/.tool-versions new file mode 100644 index 0000000..eda65d9 --- /dev/null +++ b/2015/.tool-versions @@ -0,0 +1,2 @@ +erlang 24.1.4 +elixir 1.12.3-otp-24 diff --git a/2015/README.md b/2015/README.md new file mode 100644 index 0000000..337eed7 --- /dev/null +++ b/2015/README.md @@ -0,0 +1,20 @@ +# Advent of Code 2015 + +
+ Setup + + Using [asdf](https://asdf-vm.com/#/): + + ```sh + asdf plugin add erlang + asdf plugin add elixir + asdf install + ``` +
+ +| S | M | T | W | T | F | S | +| :-: | :-: | :-: | :-: | :-: | :-: | :-: | +| | | 1 | 2 | 3 | 4 | 5 | +| 6 | 7 | 8 | 9 | 10 | 11 | 12 | +| 13 | 14 | 15 | 16 | 17 | 18 | 19 | +| 20 | 21 | 22 | 23 | 24 | 25 | | diff --git a/2015/config/config.exs b/2015/config/config.exs new file mode 100644 index 0000000..8a3be87 --- /dev/null +++ b/2015/config/config.exs @@ -0,0 +1,8 @@ +import Config + +config :nx, :default_defn_options, compiler: EXLA + +config :advent_of_code_utils, + year: 2015, + auto_reload?: true, + session: System.get_env("ADVENT_OF_CODE_SESSION") diff --git a/2015/input/2015_1.txt b/2015/input/2015_1.txt new file mode 100644 index 0000000..1855a96 --- /dev/null +++ b/2015/input/2015_1.txt @@ -0,0 +1 @@ +()()(()()()(()()((()((()))((()((((()()((((()))()((((())(((((((()(((((((((()(((())(()()(()((()()(()(())(()((((()((()()()((((())((((((()(()(((()())(()((((()))())(())(()(()()))))))))((((((((((((()())()())())(())))(((()()()((((()(((()(()(()()(()(()()(()(((((((())(())(())())))((()())()((((()()((()))(((()()()())))(())))((((())(((()())(())(()))(()((((()())))())((()(())(((()((((()((()(())())))((()))()()(()(()))))((((((((()())((((()()((((()(()())(((((()(()())()))())(((()))()(()(()(()((((()(())(()))(((((()()(()()()(()(((())())(((()()(()()))(((()()(((())())(()(())())()()(())()()()((()(((()(())((()()((())()))((()()))((()()())((((()(()()(()(((()))()(()))))((()(((()()()))(()(((())()(()((()())(()(()()(()())(())()(((()(()())()((((()((()))))())()))((()()()()(())()())()()()((((()))))(()(((()()(((((((())()))()((((()((())()(()())(())()))(()(()())(((((((())))(((()))())))))()))())((())(()()((())()())()))))()((()()())(())((())((((()())())()()()(((()))())))()()))())(()()()(()((((((()()))())()))()(((()(((())((((()()()(()))())()()))))())()))())((())()())(((((())())((())())))(((())(((())(((((()(((((())(()(()())())(()(())(()))(()((((()))())()))))())))((()(()))))())))(((((())()))())()))))()))))(((()))()))))((()))((()((()(()(())()())))(()()()(())()))()((((())))))))(())(()((()()))(()))(()))(()((()))))))()()((((()()))()())()))))))()()()))(()((())(()))((()()()())()(((()((((())())))()((((()(()))))))())))()()())()))(()))))(()())()))))))((())))))))())()))()((())())))(()((()))()))(())))))(()))()())()()))((()(()))()()()()))))())()()))())(())()()))()))((()))))()()(()())))))()()()))((((()))()))))(()(())))(()())))((())())(()))()))))()())))()())()())))))))))()()))))())))((())((()))))())))(((()())))))))(()))()()))(()))()))))()())))))())((((()())))))))())))()()))))))))()))()))))()))))))(())))))))))())))))))))))))))())())((())))))))))()))((())))()))))))))())()(()))))))())))))()()()())()(()()()(()())(()))()()()(()())))())())))()))))())))))))()()()()())(())())()())()))))(()()()()()))))()))())())))((()())()())))()))()))))(()())))()))))))))(((()))()()))))))))))))))))))))(()))(()((()))())))())(()))(()(()(())))))()(()))()))()()))))))))))))()((()())(())())()(())))))())()())((()()))))(()()))))())()(())()))))))))))))))))))))()))(()(()())))))))()()((()))()))))))((())))()))))))))((()))())()()))())()()))((()))())))))))))))(()())()))(())((()(()()))(()())(())))()())(()(())()()))))()))()(()))))))(()))))))))))(()))())))))))))())))))())))(())))))()))))(())())))))))))()(()))))()())))())(()))()())))))))))))))())()()))))()))))))())))))()))))(())(()()()()((())()))())(()))((())()))())())(())(()()))))()))(())()()((())(())))(())))()))())))))))))()(((((())())))(())()))))(())))((()))()(((((((()))))()()))(())))))()(()))))(()()))()))())))))))(()())()))))))))())))(()))())()))(())()((())())()())())(()(()))))()))))))((()())(())()()(()())))()()))(())(())(()))())))()))(()))()()))((((()))))()))((()()()))))()))()))())))(()))()))))(())))()))())()(()))()())))())))))))())))())))()()))))))(()))())())))()))()()())())))))))))))))())))()))(()()))))())))())()(())))())))))))))))))))))()()())())))))()()()((()(()))()()(())()())()))()))))()()()))))))((()))))))))()(()(()((((((()()((()())))))))))))()))())))))((())())(()))())))())))))())()()())(())))())))()())())(())))))))()()(())))()))())))())())())()))))))))()))(()()()())())())))(())())))))))()()())()))))())))())()(())())))))))()())()))(()()(())())))()(()((()()((()()(((((())(()())()))(())()))(())))(())))))))()))()))((()))()))()))))))))()))))))))((()()())(()))(((()))(())))()))((())(((())))()())))())))))((())))))(())())((((((())())()(()))()(()((()())))((())()(()(()))))(())(()()())(())))())((()(((())())))(((()())())))())()(())())((((()()))))())((()))()()()()(())(((((((()()()((()))())(()())))(())())((((()()(()))))()((())))((())()))()(((()))())))()))((()(()))(())(()((((())((((()()(()()))(((())(()))))((((()(()))(())))))((()))(()))((()(((()(()))(()(()((()(())(()(()(()(()()((()))())(((())(()(()))))(()))()()))(())))(())()(((())(()))()((((()()))))())(()))))((())()((((()(((()))())())(((()))()())((())(())())(())()(())()(()()((((((()()))))()()(((()()))))()())()(((()(()))(()(()())(()(()))))(((((()(((())())))))(((((()((()()((())())((((((()(())(()()((()()()()()()()(()()))()(((()))()))(((((((())(((()((()())()((((())(((()(())))()((()(()()()((())((()())()))()))())))())((((((()))(()(()()()))(()((()(()(()))()((()(((()()()((())(((((())()(()))())())((()(())))(()(()())(())((())())())(((()()()(())))))())(()))))))()))))))())((()()()))((()((((((()))(((()((((()()()(((()))())()(()()(((()((()()()()())()()))()()()(()(())((()))))(()))())))))))()(()()(((((())()(()(((((()((()(()()())(()((((((((()((((((())()((((()()()((()((()((((((()))((())))))))())()))((()(()))()(()()(()((())((()()((((((((((((()())(()()()))((((()((((((())(()))())(()()((()()))()(((((((()((()()((((((()(((())))((())))((((((((()()(((((((())(((((()())(((())((())()((((()(((((((()(()(((()((((((()(((()(((((((((((()()((()()(()))((()()(((()(((())))((((())()(()(((())()(()(((())(((((((((((()))())))((((((())((()()((((()())())((((()()))((())(((((()(()()(()()()((())(()((()()((((()(((((()((()(()((((()())((((((()(((((()()(()(()((((())))(())(())(())((((()(()()((((()((((()()((()((((((())))(((((()))))()))(()((((((((()(((())())(((())))(()(()((())(((()((()()(((((()((()()(((())()(()))(((((((())(()(((((()))((()((()((()))(())())((((()((((())()(()))(((()(((((((((((((((())(((((((((()))(((()(()()()()((((((()((())()((((((((()(())(((((((((((()(()((())()((()()(()(()()((((()()((())(()((()()(()()((((()(((((((())))((((())(())()(((()()((()()((((()((()(((()((())(((()()()((((()((((()()(()(()((((((((())(()(((((())(()())(((((((()())()(()((((()((())(()()())((((()()(((()((((())(())(()()(((((((((()()))()(((())(()(()((((((())(()()())(()))()()(((()(((()((())(()(((((((()(()(()((()(((((()(()((()(()((((((()((((()()((((()(((()((())(()(()((()()((((()()(())()(())(((())(()((((((((()())(((((((((()(())()((((())))()))()()(((((()()((((((())(()()(((()(()(((((((()(()(((((((())(())((((()((()(())))((((()()())(()))((()())((((()(((((()(()(())(()(()()())(((((()(((((()((((()()((((((((()()))(()((((((())((((())()(()(((()()()(((()(()(())(())(((((()(())())((((())(())(()(((()(((((())((((())())((()(((((((()(((())(()(()))(((((((((()((()((()()(()((((())(((()((())((((())(()(((()(((()(()((((()(((())(()(((()(()()(()(()((()()(()())(())())((()(()(((()(((()(((()()(((((((((()(((((((((()()(((()(((()())((((()(()(((()()()((())((((((((((())(()(((()((((()())((((()((()))(((()()()(((((()(((((((())((()())(()((((())((((((((())(()((()((((((((((()()((()((()()))(((()())()())()(((()())()()(()(()(((((((())()))(())()))())()()((())()((()((((()((()((())(((((()((((((()(())))(()))())(((()))((()()(()(((()))((((())()(((()))))()(()(())()(((((())(()(()(())(())()((()()()((((()(())((()())(()(()))(()(()(()()(())()()(()((())()((()))))()))((()(()()()()((()())(()))())()(()(((((((((())())((()((()((((((())()((((())(((())((()(()()()((())(()((())(((()((((()()((()(()(((((())()))()((((((()))((())(((()()))(((())(())()))(((((((())(())())()(())(((((()))()((()))()(()()((()()()()()())((((((( \ No newline at end of file diff --git a/2015/input/2015_2.txt b/2015/input/2015_2.txt new file mode 100644 index 0000000..5f3335f --- /dev/null +++ b/2015/input/2015_2.txt @@ -0,0 +1,1000 @@ +29x13x26 +11x11x14 +27x2x5 +6x10x13 +15x19x10 +26x29x15 +8x23x6 +17x8x26 +20x28x3 +23x12x24 +11x17x3 +19x23x28 +25x2x25 +1x15x3 +25x14x4 +23x10x23 +29x19x7 +17x10x13 +26x30x4 +16x7x16 +7x5x27 +8x23x6 +2x20x2 +18x4x24 +30x2x26 +6x14x23 +10x23x9 +29x29x22 +1x21x14 +22x10x13 +10x12x10 +20x13x11 +12x2x14 +2x16x29 +27x18x26 +6x12x20 +18x17x8 +14x25x1 +30x15x22 +17x18x7 +28x23x24 +15x12x25 +14x7x20 +29x23x8 +24x5x22 +6x22x8 +1x15x26 +14x5x1 +24x28x28 +17x23x23 +4x15x7 +23x8x11 +6x15x1 +23x18x13 +17x1x26 +23x13x17 +2x18x8 +22x22x1 +10x22x6 +28x29x20 +22x21x25 +14x8x23 +12x30x14 +8x7x5 +3x30x15 +4x3x29 +25x18x3 +16x7x16 +4x3x8 +9x16x30 +20x28x3 +28x24x6 +4x18x2 +23x18x5 +22x4x30 +15x30x9 +7x12x12 +3x22x29 +12x1x9 +9x2x25 +17x11x10 +25x24x7 +7x27x26 +26x4x12 +29x2x26 +19x24x12 +23x23x3 +26x28x16 +18x4x16 +25x30x18 +29x19x19 +16x3x27 +29x25x29 +18x19x5 +14x21x30 +19x13x26 +19x10x15 +9x4x7 +18x6x6 +24x25x29 +9x12x27 +15x3x22 +30x17x21 +18x19x28 +9x11x12 +8x28x22 +11x3x4 +28x17x20 +24x18x15 +11x12x13 +6x19x24 +28x4x5 +28x22x23 +13x29x2 +9x16x15 +29x28x1 +10x18x30 +19x11x12 +26x28x25 +23x17x13 +25x1x21 +17x1x27 +17x27x28 +28x13x15 +14x13x25 +11x29x7 +22x29x5 +13x6x14 +23x18x13 +25x7x17 +18x9x20 +21x11x2 +28x11x13 +13x25x1 +19x29x25 +16x29x4 +10x21x10 +7x25x17 +5x9x3 +1x15x6 +8x27x29 +23x6x30 +22x22x29 +6x20x30 +26x25x29 +10x19x19 +20x30x9 +5x30x24 +17x10x27 +30x14x30 +8x17x4 +7x18x6 +3x5x4 +24x17x15 +14x20x17 +22x27x15 +18x14x15 +23x9x11 +21x16x29 +7x18x21 +9x3x29 +10x13x4 +2x30x4 +23x20x4 +8x22x21 +29x28x4 +13x16x25 +21x9x11 +7x26x26 +13x23x30 +19x7x10 +9x23x21 +21x9x17 +9x21x15 +20x29x22 +23x13x15 +19x25x2 +12x11x30 +20x21x6 +21x6x17 +24x26x9 +29x21x29 +29x26x16 +6x16x1 +2x12x6 +6x7x20 +7x2x22 +6x22x4 +13x11x27 +25x27x14 +11x8x6 +26x11x14 +30x3x29 +27x21x20 +15x16x26 +6x22x10 +11x9x25 +23x13x6 +13x9x3 +30x22x13 +29x23x14 +25x19x6 +7x29x11 +19x18x5 +29x25x13 +25x24x27 +1x9x12 +22x9x17 +14x12x28 +19x21x17 +13x25x17 +14x25x12 +4x14x30 +7x15x28 +3x6x25 +6x2x16 +15x19x11 +17x30x20 +20x23x7 +26x21x6 +26x29x24 +2x4x30 +4x22x18 +13x3x28 +27x6x21 +5x3x27 +12x7x11 +28x11x9 +12x9x2 +1x22x20 +15x13x28 +14x19x16 +28x20x3 +20x4x9 +26x7x26 +18x19x25 +7x1x13 +20x23x29 +27x26x8 +11x15x15 +10x21x23 +29x2x11 +21x28x20 +3x18x23 +26x17x17 +14x26x17 +20x7x17 +18x12x8 +4x8x8 +8x15x23 +24x29x5 +1x25x8 +1x28x17 +16x18x13 +29x24x22 +13x16x10 +14x7x16 +15x11x29 +12x15x19 +17x6x28 +4x3x9 +15x16x8 +29x27x11 +2x24x20 +4x21x3 +29x24x27 +18x22x22 +7x8x18 +20x7x8 +19x9x2 +20x17x2 +2x29x10 +19x25x1 +28x9x3 +29x27x20 +7x21x7 +10x4x22 +26x8x5 +26x14x1 +5x27x9 +2x18x3 +3x27x17 +30x17x23 +30x11x20 +4x6x7 +6x29x27 +30x16x20 +24x30x28 +19x20x26 +18x1x25 +26x12x12 +19x15x29 +16x21x24 +23x13x26 +25x16x10 +8x9x18 +24x14x1 +24x15x21 +19x9x14 +8x23x11 +22x2x16 +29x9x26 +3x16x25 +15x20x30 +3x11x12 +15x2x3 +13x7x4 +2x7x27 +9x26x11 +30x24x19 +28x17x21 +10x8x2 +11x15x26 +10x12x20 +24x24x27 +25x26x16 +13x4x20 +25x13x11 +12x22x3 +20x7x1 +12x18x6 +26x8x20 +14x2x7 +23x12x1 +26x24x24 +27x26x23 +26x17x5 +17x24x2 +26x5x6 +23x5x1 +5x18x30 +24x21x19 +5x28x11 +21x20x14 +25x4x22 +26x24x11 +7x5x8 +13x1x30 +5x1x6 +14x5x2 +8x11x7 +13x20x1 +17x30x14 +29x22x10 +12x26x3 +27x17x3 +26x27x4 +5x26x17 +22x11x19 +8x26x3 +24x19x22 +7x1x4 +6x27x30 +4x28x14 +16x14x18 +4x5x20 +19x25x4 +15x15x1 +10x14x14 +16x18x24 +21x27x15 +5x5x10 +1x7x13 +16x2x8 +13x15x11 +3x25x10 +20x29x8 +12x3x2 +10x13x12 +25x27x1 +11x30x19 +7x19x13 +27x6x18 +16x21x19 +21x29x5 +16x23x12 +29x19x15 +5x5x10 +27x15x1 +13x16x22 +29x19x5 +8x12x9 +3x18x5 +13x25x3 +5x9x21 +10x20x16 +9x9x11 +23x21x1 +22x2x15 +27x8x13 +23x7x3 +26x30x15 +29x15x16 +16x27x13 +2x18x9 +10x27x8 +20x9x25 +10x2x17 +16x13x13 +21x26x1 +27x26x24 +9x30x16 +19x17x28 +25x15x1 +10x26x6 +10x11x11 +5x26x25 +30x4x15 +9x8x23 +14x25x7 +8x28x8 +28x18x24 +4x4x25 +16x25x11 +17x27x8 +15x16x9 +24x13x21 +17x3x27 +27x5x26 +8x27x12 +29x2x8 +24x23x30 +1x30x21 +6x18x20 +13x14x12 +25x30x23 +24x6x24 +12x7x21 +11x6x8 +8x30x30 +26x3x12 +28x6x5 +18x7x1 +7x6x20 +14x16x18 +11x22x15 +4x20x10 +19x24x19 +8x24x11 +4x9x10 +6x6x22 +10x9x29 +1x5x28 +19x25x29 +20x30x3 +15x13x13 +9x9x24 +20x14x29 +26x24x13 +2x25x8 +10x26x2 +12x19x12 +18x6x20 +4x5x14 +26x27x10 +16x26x20 +3x21x15 +2x26x18 +14x11x17 +26x26x25 +10x1x11 +17x19x19 +27x28x26 +9x2x10 +19x30x15 +23x30x14 +15x3x20 +2x14x22 +21x18x8 +22x4x29 +19x6x29 +9x26x29 +16x10x9 +22x12x22 +13x28x14 +25x14x28 +28x3x30 +10x17x1 +10x27x22 +10x23x19 +14x25x9 +11x24x8 +30x25x10 +22x13x28 +2x7x6 +11x20x8 +9x22x14 +19x16x9 +11x24x4 +11x17x2 +6x4x10 +26x10x10 +12x14x5 +27x10x3 +15x3x6 +11x7x19 +22x10x12 +21x26x10 +13x20x3 +27x8x8 +1x24x23 +24x9x22 +23x17x23 +3x28x19 +2x20x28 +23x17x24 +26x1x4 +4x1x12 +5x6x16 +13x22x13 +25x21x21 +20x21x12 +9x24x25 +17x16x12 +12x28x9 +18x16x27 +29x12x2 +30x12x15 +24x11x10 +4x9x22 +4x24x5 +19x11x5 +6x25x6 +1x20x17 +22x8x21 +11x26x4 +16x19x3 +8x12x8 +13x2x18 +10x5x11 +8x12x17 +21x2x5 +26x17x26 +23x18x17 +28x11x14 +1x4x27 +29x5x28 +5x9x10 +5x7x25 +20x15x27 +15x11x17 +12x14x1 +29x14x4 +18x14x18 +14x25x24 +26x14x18 +13x8x11 +30x1x23 +3x4x12 +12x24x9 +8x6x16 +14x15x30 +12x30x8 +22x11x18 +16x30x28 +17x18x4 +13x14x23 +2x28x8 +3x28x30 +29x30x8 +4x6x26 +6x30x17 +11x30x30 +19x4x3 +12x15x20 +22x28x4 +26x30x2 +6x12x7 +1x10x5 +25x29x7 +17x9x18 +16x21x29 +21x14x7 +15x16x11 +26x6x15 +8x24x7 +2x20x4 +2x9x3 +19x8x13 +18x7x22 +27x14x17 +2x13x8 +18x15x26 +15x27x27 +18x11x15 +1x29x20 +21x12x11 +20x2x15 +28x23x9 +1x1x17 +7x23x9 +30x9x27 +9x16x18 +15x24x28 +30x11x18 +29x26x10 +9x5x25 +2x1x19 +14x3x14 +6x3x6 +30x15x20 +20x17x27 +28x10x9 +14x24x28 +17x11x6 +12x3x6 +8x8x15 +23x14x21 +11x21x7 +5x13x30 +4x29x25 +30x28x24 +18x4x9 +3x15x6 +13x9x19 +30x14x7 +7x9x9 +17x11x26 +24x26x13 +16x21x16 +27x17x25 +2x21x11 +9x11x27 +3x3x7 +13x8x14 +20x20x26 +13x29x22 +30x11x1 +7x10x19 +27x5x9 +23x17x15 +21x6x13 +24x15x16 +18x4x14 +18x16x6 +22x11x18 +14x2x5 +15x3x7 +10x20x29 +16x1x10 +30x23x1 +10x15x11 +17x14x5 +22x8x13 +7x11x28 +26x17x3 +2x23x2 +28x13x19 +18x12x28 +22x23x16 +14x12x1 +20x8x19 +17x19x13 +29x2x12 +2x26x27 +29x16x4 +13x8x18 +16x15x30 +23x16x2 +28x8x27 +21x8x23 +13x20x26 +19x6x17 +17x30x15 +7x4x30 +2x13x30 +18x7x19 +4x13x27 +8x6x5 +18x20x25 +2x3x30 +23x27x13 +22x30x4 +23x25x25 +23x16x19 +25x3x1 +5x6x15 +11x29x12 +25x24x7 +16x7x20 +20x3x2 +12x27x15 +16x10x12 +1x3x14 +22x1x26 +2x24x18 +11x29x16 +15x2x9 +10x1x24 +21x8x11 +30x11x23 +6x30x21 +13x27x29 +14x6x5 +18x29x19 +12x4x28 +29x3x14 +10x30x28 +5x7x15 +14x1x10 +9x25x14 +7x24x18 +28x17x21 +18x13x25 +26x15x1 +21x1x19 +12x16x21 +4x6x13 +7x15x26 +17x19x5 +12x28x2 +1x20x19 +27x7x5 +17x26x8 +12x15x19 +5x23x10 +8x2x8 +16x13x12 +14x27x1 +26x29x3 +24x16x14 +14x13x13 +7x22x23 +2x9x30 +4x27x8 +26x27x15 +23x1x6 +25x29x18 +5x18x1 +20x8x20 +5x10x25 +30x25x15 +7x22x25 +28x26x17 +29x4x1 +21x11x27 +20x9x8 +25x22x12 +2x11x11 +23x2x16 +23x27x20 +2x13x28 +27x2x24 +11x1x17 +12x4x27 +16x20x22 +30x12x10 +5x15x4 +5x2x27 +12x4x25 +1x16x4 +27x4x4 +21x16x3 +27x26x3 +24x6x6 +24x12x12 +20x20x25 +8x29x2 +21x4x5 +2x4x8 +4x13x19 +3x20x10 +12x15x16 +6x5x4 +12x16x20 +22x19x17 +8x17x22 +25x16x15 +7x1x19 +10x1x7 +23x23x5 +28x6x12 +2x25x12 +10x27x12 +24x27x19 +14x14x20 +4x1x5 +16x27x29 +20x20x24 +28x24x30 +6x15x15 +9x15x30 +23x26x3 +17x24x21 +22x25x25 +18x29x10 +20x25x1 +24x11x16 +20x7x21 +20x7x9 +7x26x2 +5x18x1 +16x26x28 +4x10x18 +27x30x21 +26x9x9 +8x16x14 +6x27x8 +28x9x20 +13x13x4 +9x18x16 +18x15x18 +22x19x14 +14x10x17 +25x29x11 +1x18x19 +8x11x26 +18x6x14 +30x24x13 +27x1x27 +15x9x3 +2x29x17 +2x26x21 +22x9x9 +20x20x20 +22x28x2 +26x5x16 +11x3x14 +21x16x16 +18x26x7 +18x30x6 +7x11x12 +15x10x2 +27x2x16 +27x30x24 +28x14x24 +7x4x8 +6x28x15 +13x19x1 +22x26x30 +7x30x24 +2x17x21 +19x26x2 +19x24x15 +14x23x2 +21x27x15 +30x15x14 +21x29x5 +23x30x2 +4x1x2 +15x5x13 +21x2x30 +20x7x16 +1x21x25 +2x25x1 +12x29x5 +28x13x16 +26x3x12 +29x20x23 +28x12x20 +4x30x8 +16x15x16 +6x16x29 +2x28x13 +24x25x2 +26x15x22 +17x20x11 +18x12x7 +19x1x18 +8x27x13 +22x16x8 +19x26x17 +13x11x10 +22x12x3 +13x12x14 +29x17x9 +6x14x10 +14x20x10 +8x26x9 +25x13x22 +3x30x25 +14x28x1 +30x29x12 +3x17x15 +3x24x14 +28x24x22 +16x6x1 +20x25x14 +17x17x13 +6x19x27 +10x15x20 +8x23x20 +7x29x21 +18x9x25 +10x5x22 +2x27x27 +16x18x30 +15x5x12 +26x29x29 +28x11x10 +9x29x28 +24x15x23 +26x9x10 +5x1x25 +22x27x16 +7x29x3 +1x3x5 +8x7x29 +19x21x11 +28x13x30 +17x16x20 +5x10x25 +9x14x15 +15x14x23 +16x4x17 +21x8x2 +9x9x8 +22x22x4 +10x2x27 +12x19x10 +15x29x4 +22x14x7 +29x18x5 +1x7x27 +24x1x15 +23x23x26 +12x17x23 +26x10x24 +8x22x2 +8x1x10 +22x19x12 +2x23x13 +11x27x25 +26x15x27 +27x7x21 +18x9x6 +22x21x22 +7x12x26 +23x21x13 +14x3x8 +5x9x28 +29x29x15 +27x25x23 +12x2x24 +8x2x20 +29x19x4 +12x24x29 +2x27x28 +14x20x9 +28x6x25 +18x29x8 +19x11x30 +15x11x23 +18x7x7 +14x20x14 +26x18x22 +27x25x13 +12x10x30 +30x2x7 +28x10x1 +18x10x30 +22x11x5 +22x16x3 +25x15x9 +5x10x24 +4x28x8 +19x24x18 +3x4x25 +14x4x30 +11x26x3 +12x12x12 +26x7x24 +3x2x14 +1x27x7 +2x2x13 +3x26x26 +12x4x11 +12x17x20 +4x19x30 +5x18x10 +17x6x18 +19x30x20 +11x2x17 +30x13x19 +22x23x7 +17x28x2 +5x17x30 +7x11x4 +21x26x18 +15x28x4 +5x6x27 +12x6x16 +9x17x12 +27x20x5 +14x5x20 +27x14x6 +2x14x21 +4x28x30 +24x5x1 +19x29x29 +11x23x1 +8x16x21 +3x17x19 +10x13x5 +20x21x16 +23x3x6 +27x26x11 +3x2x22 +14x3x5 +10x9x8 diff --git a/2015/input/2015_3.txt b/2015/input/2015_3.txt new file mode 100644 index 0000000..783e28b --- /dev/null +++ b/2015/input/2015_3.txt @@ -0,0 +1 @@ +>^^v^<>v<<>v^^^^^><^<<^vv>>>^<<^>><>>><>v<><>^^<^^^<><>>vv>vv>v<<^>v<>^>vv>><>^v<<<v^>>>vv>v^^^<^^<>>v<^^v<>^<<>^>><^<>>><><>v<<<><><>v><<>^^^^v>>^>^^^v^^^^^v<><^v><<><^v^>v<<>^<>^^v^<>vv>^^<^<>^v<><^><><><<<<>^vv^>^vvvvv><><^v<<^<^^v^<>^>^^^v^>v<><^vv<<^<>v<>^^>^^>v^>^<<<v><^v>^>>v>>>>^v^^>v^>^vv^>vv^^v<<^<^^<>v>vv^v>><>>>v^>^>^^v<>^^vv>v^<v<<>^vvvv><<^<>>^v^>>^v<^<>>v^<>>v<>>v^^^><^>>vvvv>^v<^><<>>^<>^>vv>>^^>v^^^><^<<^^v>v<^<<>v>^^vvv^v^>v^<>^^<>v^v>v>vvv>^^v<>v>>^<>><>v>v^<^v<>>^>><>^vvv^>>vvv<>v>v>^>>v<<>^<>^<>>>^v<<<^<^v>vv^>><<>^v^^^v<>^^vv><>><>>^>v^v<>>^<<^v>^^^<>^v^><>v<vv^>vv<<>>><<^v^<>v>>^^<>^><<^>vv>>^<>>v><^>>^^<>>^<^v><>vv^^^v>vvv>^><<>^^>^<vvv<^<<>^>^vvvv>v>vv^<>>^vv<^^^vv><^vv<<^>^^>v^<>^v<<>v^>^>v<<^vvv<<^^>^<<<<>vv>>^<>^>>>v^^>>vv>^^v<<>>>^^v><<^^><><^<>>><^<><><^<>v>v^<><^^v^>^>^vv^>^^<vv<^vvv<>>^^<^>v^>^>^>>v<<<><^v<<><^v<^^vv>vvvvv<<>^v^v>vv>>>vvv^^<^<^<><>v><^v><^<<<>><<^>v<>^>^v>>^<>v^<^>><<>^^>^^^>^^>>><>^v^v><<<vv>v<>v^v><>>>v^<><^vvv>vv^<^<<^<^^v>^>>>v<^<^v^^<^<^>>>vv>^<<><>^>>v>^<<>><^<>v<>vv^^>^>vvv^v<<^<^^^vvv<^^v^vv^>>v<^>^^v<^<^vv>v<vv>^>vvv>>>^^>v<>^v>v^<^>>v>^^v>>>>v^v<^>v>^v<^^<^<>>^<>v<^v<>><^>vv>^^>>vv^<>>^vv<>vv<><<>>v>vv^><>>^^v^>>v^v^><<<>>^^<^v<<^<>>>>^<^>v^><<^>v<^v<^>>^^<<<<><^<^v^v<>>^v<^<<^^vv>^>>^>^vv^>^v<>>^v^^><>v>vv><^>>vvvvv^v^^<^<>v^^^^<><<>>>^v><^>^><^><<^vv<>>v^<v><>^>>v^<^^><>>><^>>>^^<^>vvvv<>^<<>^>>v<^v>^>v>>>vv>v>>v^^^<^^>^v>^>vv>vvv<>v<^>v>^^>>^v^^^^^v^vv><^<><>^>vv<^>>^vvvv^^^>^^v<<^><^^>^<>^^>^<>>^><<^^>v^v>>^>vvvv>^^v>>vv><<v>^^^v^vvv<^><<^>^<>^><<<<^<>v^>^>><>v^v<^vv^^>vv<vv^vvv<<<<>^vv<^^<>^vv^^>^>^v^vv^>>v^vv^^<v^v^^^^v<^<^>v>^>v>^vv^v^^^<^^^<^^<>^<>>>^<>>^^>v^^v^<<^v><^v>v<^><^>vv^^>v>^<><^^^>vv<<<<<^<>^v^v>^vv^<>v>v<^>vv<<^vv>vv<>>v>>><^<<><^^>^<^>>^>^^<^v>^vv><v<<>>^>v>>v>>v<^<<^<^>>>v>^^^v><^>^^>>v<<>^v>vvv^vv<<<>vvv<<>^>>>v^<^>v^^v<^^v<>>^^>^v^>v<<<<^<>v^><<>>><v>><>>^<<<^<^^>v<>>v<>vv<<^<<><<^>v^^^vv^>vvvv>>v>v^><vv^<<><^>>>^<<<^<^<^>v<>>v>>vv^^><<<<^^^v>><<^>>v<><><<>^><^><^v<>v^>>>v<^><^<>^v><^><^^^><^^v^<<><>>^>v^<^v^vv<><^>vv^>v^vvv^<>>^><^<^<>^<<>^v>^>>^v^vv>>^v<<>^><^>>>v<<^^v>>><><><v^^vv>vv^<^v<>^v>>v^v>v<^^vv><>^v<<>v^<>v^>>v>vvv<^><><^^>^vv^>>v^>^<^^<><>><<>^^^><^v^v><<<><<^v^vv>v>><^>>>v<>v^^>>v<<>v>v<>v^^<>>v<^vv<>^<<>v>vv^^<>>^^^<>^^>^v>v>>>^v^v>^^v^v<^<^^><^<>><<>^>>^>^^><>v<><>><<<>>>>vv>>>^>>^v<^>v^^^v<><<<^<<<>>>>>^>vv<^v^<>^^v>vvv<>>>^v^^^v<<<<>>^^^<>v<^<<<>><>>v<^<>^><><^^^>^^<^^v^>><<^vv>^v>>^v>^^>^v>^vvv<>v^v^^<>vv^>>><>v<^><<<>^v>^v<<<^>^>^>v^v<<>^>>>>>v^>vv<<^v^v<<><^v>>vv<>>>>^vv>v^<>vv>v^vvv<><<^<^^^vv^<>^^^^<^><^<>v^>^>>vvv<<>><^vvv^<<^^<<>>>^<>>>v^^><>><<>>>>>>><>>>v<>>v^<>vv<><^^^^v^<<^<<^^>v<^vvv^v>>v>^>>v>^^><v<>vv<^v^vv><>v^>>v<^^^>^><^><>v>>>vvv>^v^<^^^^^v><>v><>v^v^vvvvv<>vv<<^<^>^^v^<<>^<^><<>v^<<^<>v<<^v>>^v<>^>>^^><>v^<^^>^<<<<>vv>^v^v<^^^><>^^<>>v^v<<^^^^v^<><^^<^^^<^v>^>^vv><<<^vvv>v<>v^vv^>>>v^v<>^v<<>^vv>v>v>v^<^>v^^<^>^^^^vv>^^><^>vv^>>^^v>><<<<^><>v<>^^^><<^>v^>^^<^>>><>>>>>^>^><>v>v^v^^><<>vv^v>v^<^<>^^<^>v>^<><<^<^<^>^>^>^^v^<<^^v^^<^<>><^>v>>^^<>^^^<<<^v<^vv>^<<<vv>>>v><>>><>>v<<<>^v>v<^>><^><>^v^>^v>^v<<><<^<>>v>^><>^>><>><^<^^>^v^^<>v^^^^<^v><>^^<<<><<<<<^^>v^vvvv>v<>>vv<^>^v^>v<^vv^v<<><v^v>^^><><^v><>>><<>^vv<>v>>v<^v>>>vv>v>^vv<<>^^vvvv<>^<^<<>^>><^v>vv^^v<<^^><<>v^^<><>^>^>^>v<^^v^^>v<>vvv<^v<<<^^><^<v<>^>v><>^^<^^^>^v<<><<><>vv>v^<>v^><><v<>v>^<<<>vv>>vvv>^^vv^v^^<^^<>v^^<>v>>^^>^>^>v>><^>><>>^<<>><^>v<<<<<<<^v^v^<><v^>v^vv<<^^vv^>>>>^<>v<^v<>v>v^vv>vv>v>>>>vv^<<<v<<<<^^>^^v^><<^v^>^^vvv^>^<>vvvv^<><>v^^^>vv><><<<^^vvv<>><<^vv^>^<^>^^^<<vv^<^<<>^>^v><^>^^>>>vv^><^^vv><>^vv><<v^>v<^v^>>^^^^>vv>>vv^><^vv^vv<<^>vv>^v^^v^v>>>^vv<>v>^^^^<^>><>^v^^^>v<^^<<^^vvvv<^>><><^>>^><^<>v<><^>v><v<^vvv^^>v>^v^v^<>v>^>>vv>><^^^vv<><><<^vv<<>><^v>v^>vvv^v^<<^>^vv^>v^>v>^<<<<>v>^>^^>^<>^>^><<<^<<^<<^>^v>>>><<<>>>>>>^<^v<^>v<>vv<><>v>>^>>^>vv^^><<^>^^<<^>v<^>>vv>^<>v><^>v>>>>>^v<^<<>vv<<><<>v<^^^^v^^<^^^<^<<^>><>v<<>v>>><>v^vv>^>^>>vv^v<^v>vv^>v^v<^>vv<<^^v><^>>^^vv<^<>>v^^>>^v>>>^>>v>v<>v<^vv><>^<<^>vv>>><><>v^><>v^>v>v><^v<>^v<<^vv^><^^>><^^^<<<^>v>^v>>><^>><^>>>^^^<^>vv<><<^<^^>>^^^v^v^v>v>>><^>>>v>^vv<<^^^<^^vv>v<<>v>><<^>^<^>^v^>v><^<^vv>v>><>^<v^>^>><^^^v^v<><<>vvv<^^><>^>vvv>>>^><<>>>^vvv^v^>v<^<^>>^>v<^>^v<<><<<^>^<^^^>vv<^^^^vv<<>vv>>><^<^<>>>^>^>>^<<<<<^^v>^>^<>vvv^^<^><^>^^v>^vv^><^><^>>>v>^v>^>^v><^>v^>^<><<><>vvvv^>^>>v<>^><^>^>^^v^v>v<>^v^><^>>v>v^><<<^>>^<>^<>>v><>>v^>^>^^<>>v^>^>vv^^vv<>v<>^v>^^><^>vv^<^v^<<^<^<><>>>^v^<<^><^>vvv<^>vv^>v<<<>^<>v><^^<>^<^><>vvvv^v^^^>v<>>><<>vvv<<^^^>v>v>>v<^^v>^><^<><<>v^^^vv<>^>^^vv>^<<^v<^v>>>^>>><^<<>^v>>^>vv<<^v>v^^v^>><<^v<<<<>v>v>v^^<^><>^^<<vv<>>>^>>v<>^<>v>v^v>^>><<^^<^^v><<vvv^vv><>><<<^<<>^<^<>>vvv<>^<>v^v<><>>v^v><<>>>vvv>v<>^>>^><^>vv<<>>v<<^><>v>>^^^>^<<>><^<<>>>><^^>vv<>^<>vvvvv^vv<>>^<<><>^^vvv>>>vv<<^^><^v^^v<>^^>^><^>v^^^^v<^<vv^^>v^vv>v><>>vv>^<^>v^v^^v>^>vv^>v^v>^^v<<^>^^<<>^><^v>>>vv^>^^>vvvv>>v<^^>>>v^<><^<^^vv^^>v^<>^^^>>><^^v>v>^<<>^vvv^>^^^>>v>^v><<><<>v<^<<>^><>^>vv>^^^v<<^v^vvv^^>^vv^<^>^>^^v>v^>^<<><<^>v>>vv^vv>>^<<^<^^<^^>v^^^<^<>^<>>^v<^vvv^^v^<><^>>>>>v><><<<>vv<^v>><<>vvv<><v^^>>^>^v>><><^^v<>><>>v^>^<<<>><><^^<>>v<><^vv<^v>^<<<>^<><^>><<>^>v>^^^v>>^<^^v>^><<><>>^>>^<^v<>^>^>vv>^vvv<^>^<<^^<>^^^^vvv<>^vv^^<^>>><>v^<><^<<^>v^^v<>>^vv<>v^^<>>v^vvvvv<>>><^>vv>v^v^^^><^>^^^^v<><^v<<>v^>v>>vv<<>^vvv>^^vv^><>>^>>^>v><>>^^v>^>^>>>^>v<^v>v>^<^^^^^>>v>v<<^>^^^>><<^><>v<>^^^vv<>^^>><<^^>v>vv>vv>v^>^v>v^^<>>><>v><>vvv^^v>^^>^vvvv^>^<>^vvvv>>><>^<^vv<>^v<^v<>^vvv<<>>>^><^^^<^^v^>v<>v^v><>>>^vvv><^vv>v^<^<^v>>v^^>^vvv^v<^<>>^<>>>^^<><^^vv<>^vv^<>>>>^^<<^^<>vv^^><>^^^^v<><><>vvv>^v^>>vv<<^v<<>>^><^>>>^<^<^^>vv^<<^<>>^^><><^^>v<^v^vv>><^^<<^>>v>v<^^^<^><^^vv>^vv<^v><^<><^^^>>^<><^>>>v^>>>>v<><^^>v<^<^>>^>vv>^^v^v^<<<<^v^><<^<><<<><<<>v>>vv><<^<^<>^^^^<>v<<<vv<>vv^^^>><>vv^><>>^vv<<><^^vv<>v^>>^<<>^v< \ No newline at end of file diff --git a/2015/input/2015_4.txt b/2015/input/2015_4.txt new file mode 100644 index 0000000..861f68d --- /dev/null +++ b/2015/input/2015_4.txt @@ -0,0 +1 @@ +ckczppom diff --git a/2015/input/2015_5.txt b/2015/input/2015_5.txt new file mode 100644 index 0000000..f3b13a0 --- /dev/null +++ b/2015/input/2015_5.txt @@ -0,0 +1,1000 @@ +zgsnvdmlfuplrubt +vlhagaovgqjmgvwq +ffumlmqwfcsyqpss +zztdcqzqddaazdjp +eavfzjajkjesnlsb +urrvucyrzzzooxhx +xdwduffwgcptfwad +orbryxwrmvkrsxsr +jzfeybjlgqikjcow +mayoqiswqqryvqdi +iiyrkoujhgpgkcvx +egcgupjkqwfiwsjl +zbgtglaqqolttgng +eytquncjituzzhsx +dtfkgggvqadhqbwb +zettygjpcoedwyio +rwgwbwzebsnjmtln +esbplxhvzzgawctn +vnvshqgmbotvoine +wflxwmvbhflkqxvo +twdjikcgtpvlctte +minfkyocskvgubvm +sfxhhdhaopajbzof +sofkjdtalvhgwpql +uqfpeauqzumccnrc +tdflsbtiiepijanf +dhfespzrhecigzqb +xobfthcuuzhvhzpn +olgjglxaotocvrhw +jhkzpfcskutwlwge +zurkakkkpchzxjhq +hekxiofhalvmmkdl +azvxuwwfmjdpjskj +arsvmfznblsqngvb +ldhkzhejofreaucc +adrphwlkehqkrdmo +wmveqrezfkaivvaw +iyphmphgntinfezg +blomkvgslfnvspem +cgpaqjvzhbumckwo +ydhqjcuotkeyurpx +sbtzboxypnmdaefr +vxrkhvglynljgqrg +ttgrkjjrxnxherxd +hinyfrjdiwytetkw +sufltffwqbugmozk +tohmqlzxxqzinwxr +jbqkhxfokaljgrlg +fvjeprbxyjemyvuq +gmlondgqmlselwah +ubpwixgxdloqnvjp +lxjfhihcsajxtomj +qouairhvrgpjorgh +nloszcwcxgullvxb +myhsndsttanohnjn +zjvivcgtjwenyilz +qaqlyoyouotsmamm +tadsdceadifqthag +mafgrbmdhpnlbnks +aohjxahenxaermrq +ovvqestjhbuhrwlr +lnakerdnvequfnqb +agwpwsgjrtcjjikz +lhlysrshsmzryzes +xopwzoaqtlukwwdu +xsmfrfteyddrqufn +ohnxbykuvvlbbxpf +bbdlivmchvzfuhoc +vtacidimfcfyobhf +tinyzzddgcnmiabd +tcjzxftqcqrivqhn +vgnduqyfpokbmzim +revkvaxnsxospyow +ydpgwxxoxlywxcgi +wzuxupbzlpzmikel +nscghlafavnsycjh +xorwbquzmgmcapon +asmtiycegeobfxrn +eqjzvgkxgtlyuxok +mmjrskloposgjoqu +gceqosugbkvytfto +khivvoxkvhrgwzjl +qtmejuxbafroifjt +ttmukbmpoagthtfl +bxqkvuzdbehtduwv +gvblrpzjylanoggj +cltewhyjxdbmbtqj +fbkgedqvomdipklj +uxvuplhenqawfcjt +fkdjmayiawdkycva +gnloqfgbnibzyidh +kyzorvtopjiyyyqg +drckpekhpgrioblt +tvhrkmbnpmkkrtki +khaldwntissbijiz +aoojqakosnaxosom +xfptccznbgnpfyqw +moqdwobwhjxhtrow +chfwivedutskovri +gprkyalfnpljcrmi +pwyshpwjndasykst +xuejivogihttzimd +bugepxgpgahtsttl +zufmkmuujavcskpq +urybkdyvsrosrfro +isjxqmlxwtqmulbg +pxctldxgqjqhulgz +hclsekryiwhqqhir +hbuihpalwuidjpcq +ejyqcxmfczqfhbxa +xljdvbucuxnnaysv +irqceqtqwemostbb +anfziqtpqzqdttnz +cgfklbljeneeqfub +zudyqkuqqtdcpmuo +iuvhylvznmhbkbgg +mpgppmgfdzihulnd +argwmgcvqqkxkrdi +pdhrfvdldkfihlou +cbvqnjrvrsnqzfob +lkvovtsqanohzcmm +vxoxjdyoylqcnyzt +kurdpaqiaagiwjle +gwklwnazaxfkuekn +rbaamufphjsjhbdl +tzbrvaqvizhsisbd +pbcqlbfjvlideiub +hiwoetbfywaeddtx +fjirczxtuupfywyf +omeoegeyyospreem +ozbbpupqpsskvrjh +pzvcxkvjdiyeyhxa +odclumkenabcsfzr +npdyqezqdjqaszvm +yodkwzmrhtexfrqa +rjcmmggjtactfrxz +mioxfingsfoimual +aqskaxjjborspfaa +wientdsttkevjtkf +tdaswkzckmxnfnct +voucjhzvkkhuwoqk +boaaruhalgaamqmh +iufzxutxymorltvb +pfbyvbayvnrpijpo +obztirulgyfthgcg +ntrenvhwxypgtjwy +ephlkipjfnjfjrns +pkjhurzbmobhszpx +gqbnjvienzqfbzvj +wjelolsrbginwnno +votanpqpccxqricj +bxyuyiglnmbtvehi +qyophcjfknbcbjrb +anoqkkbcdropskhj +tcnyqaczcfffkrtl +rsvqimuqbuddozrf +meppxdrenexxksdt +tyfhfiynzwadcord +wayrnykevdmywycf +mhowloqnppswyzbu +tserychksuwrgkxz +xycjvvsuaxsbrqal +fkrdsgaoqdcqwlpn +vrabcmlhuktigecp +xgxtdsvpaymzhurx +ciabcqymnchhsxkc +eqxadalcxzocsgtr +tsligrgsjtrnzrex +qeqgmwipbspkbbfq +vzkzsjujltnqwliw +ldrohvodgbxokjxz +jkoricsxhipcibrq +qzquxawqmupeujrr +mizpuwqyzkdbahvk +suupfxbtoojqvdca +ywfmuogvicpywpwm +uevmznxmsxozhobl +vjbyhsemwfwdxfxk +iyouatgejvecmtin +tcchwpuouypllcxe +lgnacnphdiobdsef +uoxjfzmdrmpojgbf +lqbxsxbqqhpjhfxj +knpwpcnnimyjlsyz +fezotpoicsrshfnh +dkiwkgpmhudghyhk +yzptxekgldksridv +pckmzqzyiyzdbcts +oqshafncvftvwvsi +yynihvdywxupqmbt +iwmbeunfiuhjaaic +pkpkrqjvgocvaxjs +ieqspassuvquvlyz +xshhahjaxjoqsjtl +fxrrnaxlqezdcdvd +pksrohfwlaqzpkdd +ravytrdnbxvnnoyy +atkwaifeobgztbgo +inkcabgfdobyeeom +ywpfwectajohqizp +amcgorhxjcybbisv +mbbwmnznhafsofvr +wofcubucymnhuhrv +mrsamnwvftzqcgta +tlfyqoxmsiyzyvgv +ydceguvgotylwtea +btyvcjqhsygunvle +usquiquspcdppqeq +kifnymikhhehgote +ybvkayvtdpgxfpyn +oulxagvbavzmewnx +tvvpekhnbhjskzpj +azzxtstaevxurboa +nfmwtfgrggmqyhdf +ynyzypdmysfwyxgr +iaobtgubrcyqrgmk +uyxcauvpyzabbzgv +fbasfnwiguasoedc +mgmjoalkbvtljilq +szgkxiqkufdvtksb +xgfzborpavdmhiuj +hmuiwnsonvfgcrva +zolcffdtobfntifb +mvzgcsortkugvqjr +pbbpgraaldqvzwhs +zvsxegchksgnhpuv +kdpdboaxsuxfswhx +jdfggigejfupabth +tpeddioybqemyvqz +mxsntwuesonybjby +tzltdsiojfvocige +ubtdrneozoejiqrv +fusyucnhncoxqzql +nlifgomoftdvkpby +pyikzbxoapffbqjw +hzballplvzcsgjug +ymjyigsfehmdsvgz +vpqgyxknniunksko +ffkmaqsjxgzclsnq +jcuxthbedplxhslk +ymlevgofmharicfs +nyhbejkndhqcoisy +rjntxasfjhnlizgm +oqlnuxtzhyiwzeto +tntthdowhewszitu +rmxyoceuwhsvfcua +qpgsjzwenzbxyfgw +sumguxpdkocyagpu +ymfrbxwrawejkduu +hetgrtmojolbmsuf +qzqizpiyfasgttex +qnmoemcpuckzsshx +ddyqiihagcmnxccu +oirwxyfxxyktgheo +phpaoozbdogbushy +uctjdavsimsrnvjn +aurbbphvjtzipnuh +hpbtrubopljmltep +pyyvkthqfsxqhrxg +jdxaiqzkepxbfejk +ukgnwbnysrzvqzlw +lfkatkvcssnlpthd +ucsyecgshklhqmsc +rwdcbdchuahkvmga +rxkgqakawgpwokum +hbuyxeylddfgorgu +tbllspqozaqzglkz +rqfwizjlbwngdvvi +xuxduyzscovachew +kouiuxckkvmetvdy +ycyejrpwxyrweppd +trctlytzwiisjamx +vtvpjceydunjdbez +gmtlejdsrbfofgqy +jgfbgtkzavcjlffj +tyudxlpgraxzchdk +gyecxacqitgozzgd +rxaocylfabmmjcvt +tornfzkzhjyofzqa +kocjcrqcsvagmfqv +zfrswnskuupivzxb +cunkuvhbepztpdug +pmpfnmklqhcmrtmf +tfebzovjwxzumxap +xpsxgaswavnzkzye +lmwijdothmxclqbr +upqxhmctbltxkarl +axspehytmyicthmq +xdwrhwtuooikehbk +tpggalqsytvmwerj +jodysbwnymloeqjf +rxbazvwuvudqlydn +ibizqysweiezhlqa +uexgmotsqjfauhzp +ldymyvumyhyamopg +vbxvlvthgzgnkxnf +pyvbrwlnatxigbrp +azxynqididtrwokb +lwafybyhpfvoawto +ogqoivurfcgspytw +cinrzzradwymqcgu +sgruxdvrewgpmypu +snfnsbywuczrshtd +xfzbyqtyxuxdutpw +fmpvjwbulmncykbo +ljnwoslktrrnffwo +ceaouqquvvienszn +yjomrunrxjyljyge +xpmjsapbnsdnbkdi +uetoytptktkmewre +eixsvzegkadkfbua +afaefrwhcosurprw +bwzmmvkuaxiymzwc +gejyqhhzqgsrybni +gjriqsfrhyguoiiw +gtfyomppzsruhuac +ogemfvmsdqqkfymr +jgzbipsygirsnydh +zghvlhpjnvqmocgr +ngvssuwrbtoxtrka +ietahyupkbuisekn +gqxqwjizescbufvl +eiprekzrygkncxzl +igxfnxtwpyaamkxf +soqjdkxcupevbren +fspypobyzdwstxak +qstcgawvqwtyyidf +gsccjacboqvezxvd +bfsblokjvrqzphmc +srezeptvjmncqkec +opmopgyabjjjoygt +msvbufqexfrtecbf +uiaqweyjiulplelu +pbkwhjsibtwjvswi +xwwzstmozqarurrq +nytptwddwivtbgyq +ejxvsufbzwhzpabr +jouozvzuwlfqzdgh +gfgugjihbklbenrk +lwmnnhiuxqsfvthv +bzvwbknfmaeahzhi +cgyqswikclozyvnu +udmkpvrljsjiagzi +zzuhqokgmisguyna +ekwcdnjzuctsdoua +eueqkdrnzqcaecyd +lnibwxmokbxhlris +fdrbftgjljpzwhea +iabvuhhjsxmqfwld +qgogzkynrgejakta +mfcqftytemgnpupp +klvhlhuqhosvjuqk +gdokmxcgoqvzvaup +juududyojcazzgvr +fyszciheodgmnotg +yfpngnofceqfvtfs +cahndkfehjumwavc +dxsvscqukljxcqyi +cqukcjtucxwrusji +vevmmqlehvgebmid +ahswsogfrumzdofy +ftasbklvdquaxhxb +tsdeumygukferuif +ybfgbwxaaitpwryg +djyaoycbymezglio +trzrgxdjqnmlnzpn +rumwchfihhihpqui +ffrvnsgrnzemksif +oizlksxineqknwzd +cirqcprftpjzrxhk +zrhemeqegmzrpufd +kqgatudhxgzlgkey +syjugymeajlzffhq +nlildhmgnwlopohp +flcszztfbesqhnyz +ohzicmqsajyqptrw +ebyszucgozsjbelq +enxbgvvcuqeloxud +ubwnvecbsmhkxwuk +noifliyxvlkqphbo +hazlqpetgugxxsiz +ihdzoerqwqhgajzb +ivrdwdquxzhdrzar +synwycdvrupablib +mqkdjkntblnmtvxj +qmmvoylxymyovrnq +pjtuxskkowutltlq +gchrqtloggkrjciz +namzqovvsdipazae +yfokqhkmakyjzmys +iapxlbuoiwqfnozm +fbcmlcekgfdurqxe +ednzgtczbplwxjlq +gdvsltzpywffelsp +oaitrrmpqdvduqej +gseupzwowmuuibjo +dfzsffsqpaqoixhh +tclhzqpcvbshxmgx +cfqkptjrulxiabgo +iraiysmwcpmtklhf +znwjlzodhktjqwlm +lcietjndlbgxzjht +gdkcluwjhtaaprfo +vbksxrfznjzwvmmt +vpfftxjfkeltcojl +thrmzmeplpdespnh +yafopikiqswafsit +xxbqgeblfruklnhs +qiufjijzbcpfdgig +ikksmllfyvhyydmi +sknufchjdvccccta +wpdcrramajdoisxr +grnqkjfxofpwjmji +lkffhxonjskyccoh +npnzshnoaqayhpmb +fqpvaamqbrnatjia +oljkoldhfggkfnfc +ihpralzpqfrijynm +gvaxadkuyzgbjpod +onchdguuhrhhspen +uefjmufwlioenaus +thifdypigyihgnzo +ugqblsonqaxycvkg +yevmbiyrqdqrmlbw +bvpvwrhoyneorcmm +gbyjqzcsheaxnyib +knhsmdjssycvuoqf +nizjxiwdakpfttyh +nwrkbhorhfqqoliz +ynsqwvwuwzqpzzwp +yitscrgexjfclwwh +dhajwxqdbtrfltzz +bmrfylxhthiaozpv +frvatcvgknjhcndw +xlvtdmpvkpcnmhya +pxpemuzuqzjlmtoc +dijdacfteteypkoq +knrcdkrvywagglnf +fviuajtspnvnptia +xvlqzukmwbcjgwho +bazlsjdsjoeuvgoz +nslzmlhosrjarndj +menvuwiuymknunwm +uavfnvyrjeiwqmuu +yrfowuvasupngckz +taevqhlrcohlnwye +skcudnogbncusorn +omtnmkqnqedsajfv +yqmgsqdgsuysqcts +odsnbtyimikkbmdd +vuryaohxdvjllieb +dhaxldeywwsfamlo +opobvtchezqnxpak +pzfnegouvsrfgvro +rzkcgpxdslzrdktu +ksztdtqzxvhuryam +ctnqnhkcooqipgkh +pyqbbvrzdittqbgm +koennvmolejeftij +rvzlreqikqlgyczj +xrnujfoyhonzkdgd +mmsmhkxaiqupfjil +ypjwoemqizddvyfd +qgugcxnbhvgahykj +cviodlsrtimbkgmy +xbfbbechhmrjxhnw +psuipaoucfczfxkp +hdhwcpeuptgqqvim +gsxlruhjeaareilr +vgyqonnljuznyrhk +eewezahlumervpyu +iiolebrxfadtnigy +tdadlrodykrdfscn +ocvdtzjxrhtjurpo +gidljbuvuovkhhrf +qwfcpilbjwzboohd +xzohxonlezuiupbg +vslpbkkqgvgbcbix +pivzqrzfxosbstzn +fyqcfboevcqmbhhs +yqsrneacnlxswojx +heicqpxxyrwcbsjz +yzynmnnoumkmlbeh +bncadbjdvvmczylw +hlnjskgfzbgmigfn +fphpszymugpcykka +zbifcktanxpmufvy +saklpkhoyfeqbguy +nqtqfcfxmpivnjyo +locygrwerxlsvzqm +qqflecydqvlogjme +njklmixvgkzpgppf +ugzkpjwjflaswyma +lriousvkbeftslcy +nsvsauxzfbbotgmh +tblcpuhjyybrlica +hqwshxcilwtmxrsf +xojwroydfeoqupup +tikuzsrogpnohpib +layenyqgxdfggloc +nqsvjvbrpuxkqvmq +ivchgxkdlfjdzxmk +uoghiuosiiwiwdws +twsgsfzyszsfinlc +waixcmadmhtqvcmd +zkgitozgrqehtjkw +xbkmyxkzqyktmpfi +qlyapfmlybmatwxn +ntawlvcpuaebuypf +clhebxqdkcyndyof +nrcxuceywiklpemc +lmurgiminxpapzmq +obalwqlkykzflxou +huvcudpiryefbcye +zlxbddpnyuyapach +gqfwzfislmwzyegy +jhynkjtxedmemlob +hmrnvjodnsfiukex +pstmikjykzyavfef +wuwpnscrwzsyalyt +hksvadripgdgwynm +tvpfthzjleqfxwkh +xpmrxxepkrosnrco +qjkqecsnevlhqsly +jjnrfsxzzwkhnwdm +pehmzrzsjngccale +bsnansnfxduritrr +ejzxkefwmzmbxhlb +pceatehnizeujfrs +jtidrtgxopyeslzl +sytaoidnamfwtqcr +iabjnikomkgmyirr +eitavndozoezojsi +wtsbhaftgrbqfsmm +vvusvrivsmhtfild +qifbtzszfyzsjzyx +ifhhjpaqatpbxzau +etjqdimpyjxiuhty +fvllmbdbsjozxrip +tjtgkadqkdtdlkpi +xnydmjleowezrecn +vhcbhxqalroaryfn +scgvfqsangfbhtay +lbufpduxwvdkwhmb +tshipehzspkhmdoi +gtszsebsulyajcfl +dlrzswhxajcivlgg +kgjruggcikrfrkrw +xxupctxtmryersbn +hljjqfjrubzozxts +giaxjhcwazrenjzs +tyffxtpufpxylpye +jfugdxxyfwkzqmgv +kbgufbosjghahacw +xpbhhssgegmthwxb +npefofiharjypyzk +velxsseyxuhrpycy +sglslryxsiwwqzfw +susohnlpelojhklv +lfnpqfvptqhogdmk +vtcrzetlekguqyle +jlyggqdtamcjiuxn +olxxqfgizjmvigvl +cyypypveppxxxfuq +hewmxtlzfqoqznwd +jzgxxybfeqfyzsmp +xzvvndrhuejnzesx +esiripjpvtqqwjkv +xnhrwhjtactofwrd +knuzpuogbzplofqx +tihycsdwqggxntqk +xkfywvvugkdalehs +cztwdivxagtqjjel +dsaslcagopsbfioy +gmowqtkgrlqjimbl +ctcomvdbiatdvbsd +gujyrnpsssxmqjhz +nygeovliqjfauhjf +mmgmcvnuppkbnonz +bhipnkoxhzcotwel +wkwpgedgxvpltqid +mliajvpdocyzcbot +kqjhsipuibyjuref +zqdczykothbgxwsy +koirtljkuqzxioaz +audpjvhmqzvhzqas +cxyhxlhntyidldfx +iasgocejboxjgtkx +abehujmqotwcufxp +fmlrzqmazajxeedl +knswpkekbacuxfby +yvyalnvrxgstqhxm +sjnrljfrfuyqfwuw +ssaqruwarlvxrqzm +iaxbpeqqzlcwfqjz +uwyxshjutkanvvsc +uxwrlwbblcianvnb +nodtifgrxdojhneh +mloxjfusriktxrms +lkfzrwulbctupggc +gcrjljatfhitcgfj +tkdfxeanwskaivqs +ypyjxqtmitwubbgt +ssxbygzbjsltedjj +zdrsnoorwqfalnha +xlgmissaiqmowppd +azhbwhiopwpguiuo +fydlahgxtekbweet +qtaveuqpifprdoiy +kpubqyepxqleucem +wlqrgqmnupwiuory +rwyocktuqkuhdwxz +abzjfsdevoygctqv +zsofhaqqghncmzuw +lqbjwjqxqbfgdckc +bkhyxjkrqbbunido +yepxfjnnhldidsjb +builayfduxbppafc +wedllowzeuswkuez +gverfowxwtnvgrmo +tpxycfumxdqgntwf +lqzokaoglwnfcolw +yqsksyheyspmcdqt +vufvchcjjcltwddl +saeatqmuvnoacddt +dxjngeydvsjbobjs +ucrcxoakevhsgcep +cajgwjsfxkasbayt +hknzmteafsfemwuv +xxwhxwiinchqqudr +usfenmavvuevevgr +kxcobcwhsgyizjok +vhqnydeboeunnvyk +bgxbwbxypnxvaacw +bwjzdypacwgervgk +rrioqjluawwwnjcr +fiaeyggmgijnasot +xizotjsoqmkvhbzm +uzphtrpxwfnaiidz +kihppzgvgyoncptg +hfbkfrxwejdeuwbz +zgqthtuaqyrxicdy +zitqdjnnwhznftze +jnzlplsrwovxlqsn +bmwrobuhwnwivpca +uuwsvcdnoyovxuhn +nmfvoqgoppoyosaj +hxjkcppaisezygpe +icvnysgixapvtoos +vbvzajjgrmjygkhu +jinptbqkyqredaos +dpmknzhkhleawfvz +ouwwkfhcedsgqqxe +owroouiyptrijzgv +bewnckpmnbrmhfyu +evdqxevdacsbfbjb +catppmrovqavxstn +dqsbjibugjkhgazg +mkcldhjochtnvvne +sblkmhtifwtfnmsx +lynnaujghehmpfpt +vrseaozoheawffoq +ytysdzbpbazorqes +sezawbudymfvziff +vrlfhledogbgxbau +bipdlplesdezbldn +ermaenjunjtbekeo +eyaedubkthdecxjq +gbzurepoojlwucuy +rsiaqiiipjlouecx +beqjhvroixhiemtw +buzlowghhqbcbdwv +ldexambveeosaimo +fpyjzachgrhxcvnx +komgvqejojpnykol +fxebehjoxdujwmfu +jnfgvheocgtvmvkx +qmcclxxgnclkuspx +rsbelzrfdblatmzu +vexzwqjqrsenlrhm +tnfbkclwetommqmh +lzoskleonvmprdri +nnahplxqscvtgfwi +ubqdsflhnmiayzrp +xtiyqxhfyqonqzrn +omdtmjeqhmlfojfr +cnimgkdbxkkcnmkb +tapyijgmxzbmqnks +byacsxavjboovukk +awugnhcrygaoppjq +yxcnwrvhojpuxehg +btjdudofhxmgqbao +nzqlfygiysfuilou +nubwfjdxavunrliq +vqxmmhsbmhlewceh +ygavmcybepzfevrp +kgflmrqsvxprkqgq +iaqyqmcaedscmakk +cvbojnbfmrawxzkh +jjjrprbnlijzatuw +lcsudrrfnnggbrmk +qzgxbiavunawfibc +gnnalgfvefdfdwwg +nokmiitzrigxavsc +etzoxwzxqkkhvais +urxxfacgjccieufi +lqrioqhuvgcotuec +dydbaeyoypsbftra +hhrotenctylggzaf +evctqvzjnozpdxzu +tbpvithmorujxlcp +pllbtcbrtkfpvxcw +fzyxdqilyvqreowv +xdleeddxwvqjfmmt +fcldzthqqpbswoin +sgomzrpjfmvgwlzi +axjyskmtdjbxpwoz +hcvaevqxsmabvswh +lfdlsfcwkwicizfk +isjbwpzdognhoxvm +oqnexibqxlyxpluh +zqfbgodsfzwgcwuf +kvmnwruwsjllbldz +kghazimdyiyhmokj +uiktgpsxpoahofxn +zkdwawxargcmidct +ftbixlyiprshrjup +nofhmbxififwroeg +mcdaqrhplffxrcdt +fbjxnwojcvlawmlb +rizoftvwfdhiwyac +eduogrtyhxfwyars +zoikunqxgjwfqqwr +zxwbbpmvctzezaqh +nghujwyeabwdqnop +vcxamijpoyyksogn +jnckdbuteoqlsdae +jurfqqawafmsiqwv +inepmztrzehfafie +tznzkyvzodbrtscf +xewbavjeppflwscl +ucndzsorexjlnplo +jpxbctscngxgusvu +mfmygcllauzuoaok +oibkuxhjmhxhhzby +zjkslwagmeoisunw +avnnxmopdgvmukuu +jmaargejcwboqhkt +yacmpeosarsrfkrv +iqhgupookcaovwgh +ebjkdnxwtikqzufc +imdhbarytcscbsvb +ifyibukeffkbqvcr +aloighmyvwybtxhx +yszqwrutbkiwkxjg +xyholyzlltjhsuhp +gykhmrwucneoxcrf +badkdgqrpjzbabet +sunaucaucykwtkjj +pumqkglgfdhneero +usgtyuestahlydxq +xmfhflphzeudjsjm +knywgmclisgpootg +mtojnyrnvxtweuzb +uuxufbwfegysabww +vobhwwocqttlbsik +yuydfezeqgqxqmnd +wbqgqkwbibiilhzc +sfdmgxsbuzsawush +ilhbxcfgordyxwvp +ahqoavuysblnqaeg +plwgtvpgotskmsey +ewjcmzkcnautrrmp +tyekgzbznlikcyqj +bqzctiuaxpriuiga +bimvbfjkiupyqiys +mpqtbcxfhwymxncw +htemlptvqhharjgb +mqbsmsruwzzxgcxc +zjyedjwhnvteuaid +pzoelkoidwglpttc +efydnsvlfimvwxhx +gfyhgoeiyjcgfyze +deqtomhwopmzvjlt +casafubtkoopuaju +yylsfarntbucfulg +mgjwsormkjsrrxan +lkkenpupgmjpnqqd +tegweszyohsoluot +lihsfdwxmxvwdxna +rrefrjjxerphejwb +guuazonjoebhymtm +ysofqzmfmyneziki +lmjgaliatcpduoal +qzthcpjwtgahbebr +wvakvephyukmpemm +simxacxxzfoaeddw +aetgqmiqzxbvbviz +jxlmhdmqggevrxes +mmuglnjmuddzgaik +svopsqhtrslgycgc +xnvcsiiqrcjkvecn +kkvumxtvashxcops +bduflsdyeectvcgl +vfrxbwmmytjvqnsj +eeqtdneiyiaiofxw +crtbgknfacjtwkfl +uuutuoxdsxolpbhd +lcrztwzreaswovtn +htorkvnvujmjdqzj +wttzuzvrzlyhfzyf +oraewznfwgdsnhuk +rctlkqqvkwbgrcgk +cfehrsrqhzyiwtmz +kbvxwcumjkhvjpui +xxlocexbmniiakfo +gtknkkzvykmlqghl +kcjuxvkuimhwqrtk +vohekwkuyuoacuww +vorctgughscysyfo +zmjevqplngzswxyq +qhswdrhrijnatkyo +joakcwpfggtitizs +juzlwjijcmtswdtq +icbyaqohpkemhkip +rpdxgpzxncedmvzh +rozkmimbqhbhcddv +wkkypomlvyglpfpf +jcaqyaqvsefwtaya +ghvmtecoxlebdwnf +lqrcyiykkkpkxvqt +eqlarfazchmzotev +vqwndafvmpguggef +dbfxzrdkkrusmdke +cmjpjjgndozcmefj +hbrdcwjuyxapyhlo +mmforetykbosdwce +zynfntqwblbnfqik +sodwujfwlasznaiz +yyvrivjiqnxzqkfp +uldbskmmjbqllpnm +fyhhrmrsukeptynl +hpfjekktvdkgdkzl +bozhkoekcxzeorob +uvpptyfrzkvmtoky +hkhfprmjdpjvfkcb +igxzwktwsqhsivqu +qceomwysgkcylipb +cglateoynluyeqgc +xcsdfkpeguxgvpfh +owjhxlcncdgkqyia +rpbmrpcesiakqpna +lueszxiourxsmezb +zelvsowimzkxliwc +vzxbttoobtvdtkca +pfxvzphzwscqkzsi +edsjorainowytbzu +ipsegdaluoiphmnz +mkhueokfpemywvuw +urxdnumhylpafdlc +ggluurzavsxkvwkl +ctclphidqgteakox +tfobosynxsktajuk +jzrmemhxqmzhllif +eemwekimdfvqslsx +yjkwpzrbanoaajgq +rlxghzanuyeimfhx +hozbgdoorhthlqpv +obkbmflhyanxilnx +xojrippyxjmpzmsz +ukykmbfheixuviue +qivlmdexwucqkres +rmyxxipqkarpjmox +fgaftctbvcvnrror +raawxozucfqvasru +dinpjbdfjfizexdh +gybxubwnnbuyvjcr +qrqitdvyoneqyxcg +jqzcfggayzyoqteo +cikqpvxizpdbmppm +stfpldgyhfmucjjv +slzbcuihmimpduri +aufajwfrsorqqsnl +iylmzraibygmgmqj +lcdyfpcqlktudfmu +pmomzzsdpvgkkliw +zpplirgtscfhbrkj +mvhyerxfiljlotjl +ofkvrorwwhusyxjx +xngzmvcgkqfltjpe +yxfxaqipmysahqqq +sdqafdzgfdjuabup +qcqajmerahcdgxfv +xqimrqtupbapawro +qfvkqwidzzrehsbl +himixxvueksiqfdf +vgtfqpuzxxmhrvvd +adiioqeiejguaost +jnzxuycjxvxehbvm +xedbpxdhphamoodk +jsrioscmwlsfuxrg +mtsynnfxunuohbnf +enamqzfzjunnnkpe +uwcvfecunobyhces +ciygixtgbsccpftq +ewjgcronizkcsfjy +wztjkoipxsikoimv +jrgalyvfelwxforw +imylyalawbqwkrwb +yflwqfnuuvgjsgcj +wkysyzusldlojoue +zopllxnidcffcuau +bscgwxuprxaerskj +zvnvprxxjkhnkkpq +nejwxbhjxxdbenid +chryiccsebdbcnkc +guoeefaeafhlgvxh +nzapxrfrrqhsingx +mkzvquzvqvwsejqs +kozmlmbchydtxeeo +keylygnoqhmfzrfp +srwzoxccndoxylxe +uqjzalppoorosxxo +potmkinyuqxsfdfw +qkkwrhpbhypxhiun +wgfvnogarjmdbxyh +gkidtvepcvxopzuf +atwhvmmdvmewhzty +pybxizvuiwwngqej +zfumwnazxwwxtiry +keboraqttctosemx +vtlzxaqdetbhclib +wjiecykptzexuayl +ejatfnyjjdawepyk +mpcrobansyssvmju +gqukndzganeueabm +ukzscvomorucdnqd +wfydhtbzehgwfazx +mtwqdzlephqvxqmx +dltmlfxbjopefibh +atcfrowdflluqtbi +vowawlophlxaqonw +vblgdjzvwnocdipw +uzerzksmkvnlvlhm +ytjwhpaylohorvxd +siprvfxvnxcdgofz +cbhjupewcyjhvtgs +apqtozaofusmfqli +tmssrtlxfouowqnr +ntutrvwnzzgmokes +zrsgpwdzokztdpis +nrobvmsxtfmrqdhv +kadkaftffaziqdze +yrovbgcyqtlsnoux +modheiwuhntdecqs +gzhjypwddizemnys +gaputpwpcsvzxjho +bgmouxwoajgaozau +oxuapfrjcpyakiwt +kntwbvhuaahdixzj +epqjdjbnkxdnaccx +dspltdvznhypykri +tdrgqmbnagrxdwtt +njfqawzjggmemtbg +chpemsgwpzjpdnkk +fpsrobmbqbmigmwk +flxptsrqaazmprnl +nzdunrxlcbfklshm +miuwljvtkgzdlbnn +xbhjakklmbhsdmdt +xwxhsbnrwnegwcov +pwosflhodjaiexwq +fhgepuluczttfvqh +tldxcacbvxyamvkt +gffxatrjglkcehim +tzotkdrpxkucsdps +wxheftdepysvmzbe +qfooyczdzoewrmku +rvlwikuqdbpjuvoo +bcbrnbtfrdgijtzt +vaxqmvuogsxonlgq +ibsolflngegravgo +txntccjmqakcoorp +vrrbmqaxfbarmlmc +dzspqmttgsuhczto +pikcscjunxlwqtiw +lwzyogwxqitqfqlv +gsgjsuaqejtzglym +feyeqguxbgmcmgpp +gmttebyebdwvprkn +mzuuwbhzdjfdryxu +fganrbnplymqbzjx +cvsrbdcvhtxxdmro +scmgkjlkqukoamyp +fkgrqbyqpqcworqc +hjsrvkdibdjarxxb +sztzziuqroeidcus +pxdfvcpvwaddrzwv +phdqqxleqdjfgfbg +cqfikbgxvjmnfncy diff --git a/2015/input/2015_6.txt b/2015/input/2015_6.txt new file mode 100644 index 0000000..df10465 --- /dev/null +++ b/2015/input/2015_6.txt @@ -0,0 +1,300 @@ +turn on 489,959 through 759,964 +turn off 820,516 through 871,914 +turn off 427,423 through 929,502 +turn on 774,14 through 977,877 +turn on 410,146 through 864,337 +turn on 931,331 through 939,812 +turn off 756,53 through 923,339 +turn off 313,787 through 545,979 +turn off 12,823 through 102,934 +toggle 756,965 through 812,992 +turn off 743,684 through 789,958 +toggle 120,314 through 745,489 +toggle 692,845 through 866,994 +turn off 587,176 through 850,273 +turn off 674,321 through 793,388 +toggle 749,672 through 973,965 +turn on 943,30 through 990,907 +turn on 296,50 through 729,664 +turn on 212,957 through 490,987 +toggle 171,31 through 688,88 +turn off 991,989 through 994,998 +turn off 913,943 through 958,953 +turn off 278,258 through 367,386 +toggle 275,796 through 493,971 +turn off 70,873 through 798,923 +toggle 258,985 through 663,998 +turn on 601,259 through 831,486 +turn off 914,94 through 941,102 +turn off 558,161 through 994,647 +turn on 119,662 through 760,838 +toggle 378,775 through 526,852 +turn off 384,670 through 674,972 +turn off 249,41 through 270,936 +turn on 614,742 through 769,780 +turn on 427,70 through 575,441 +turn on 410,478 through 985,753 +turn off 619,46 through 931,342 +turn on 284,55 through 768,922 +turn off 40,592 through 728,685 +turn on 825,291 through 956,950 +turn on 147,843 through 592,909 +turn off 218,675 through 972,911 +toggle 249,291 through 350,960 +turn off 556,80 through 967,675 +toggle 609,148 through 968,279 +toggle 217,605 through 961,862 +toggle 407,177 through 548,910 +toggle 400,936 through 599,938 +turn off 721,101 through 925,455 +turn on 268,631 through 735,814 +toggle 549,969 through 612,991 +toggle 553,268 through 689,432 +turn off 817,668 through 889,897 +toggle 801,544 through 858,556 +toggle 615,729 through 832,951 +turn off 427,477 through 958,948 +turn on 164,49 through 852,946 +turn on 542,449 through 774,776 +turn off 923,196 through 980,446 +toggle 90,310 through 718,846 +turn off 657,215 through 744,252 +turn off 800,239 through 811,712 +turn on 502,90 through 619,760 +toggle 649,512 through 862,844 +turn off 334,903 through 823,935 +turn off 630,233 through 839,445 +turn on 713,67 through 839,865 +turn on 932,50 through 982,411 +turn off 480,729 through 984,910 +turn on 100,219 through 796,395 +turn on 758,108 through 850,950 +turn off 427,276 through 439,938 +turn on 178,284 through 670,536 +toggle 540,27 through 625,102 +turn off 906,722 through 936,948 +toggle 345,418 through 859,627 +toggle 175,775 through 580,781 +toggle 863,28 through 929,735 +turn off 824,858 through 905,973 +toggle 752,312 through 863,425 +turn on 985,716 through 988,852 +turn off 68,504 through 763,745 +toggle 76,209 through 810,720 +turn off 657,607 through 676,664 +toggle 596,869 through 896,921 +turn off 915,411 through 968,945 +turn off 368,39 through 902,986 +turn on 11,549 through 393,597 +turn off 842,893 through 976,911 +toggle 274,106 through 581,329 +toggle 406,403 through 780,950 +toggle 408,988 through 500,994 +toggle 217,73 through 826,951 +turn on 917,872 through 961,911 +toggle 394,34 through 510,572 +toggle 424,603 through 583,626 +toggle 106,159 through 755,738 +turn off 244,610 through 472,709 +turn on 350,265 through 884,690 +turn on 688,184 through 928,280 +toggle 279,443 through 720,797 +turn off 615,493 through 888,610 +toggle 118,413 through 736,632 +turn on 798,782 through 829,813 +turn off 250,934 through 442,972 +turn on 68,503 through 400,949 +toggle 297,482 through 313,871 +toggle 710,3 through 839,859 +turn on 125,300 through 546,888 +toggle 482,39 through 584,159 +turn off 536,89 through 765,962 +turn on 530,518 through 843,676 +turn on 994,467 through 994,676 +turn on 623,628 through 744,927 +toggle 704,912 through 837,983 +turn on 154,364 through 517,412 +toggle 344,409 through 780,524 +turn off 578,740 through 725,879 +turn on 251,933 through 632,957 +turn on 827,705 through 971,789 +toggle 191,282 through 470,929 +toggle 324,525 through 446,867 +toggle 534,343 through 874,971 +toggle 550,650 through 633,980 +toggle 837,404 through 881,915 +toggle 338,881 through 845,905 +turn on 469,462 through 750,696 +turn on 741,703 through 892,870 +turn off 570,215 through 733,562 +turn on 445,576 through 870,775 +turn on 466,747 through 554,878 +turn off 820,453 through 868,712 +turn off 892,706 through 938,792 +turn off 300,238 through 894,746 +turn off 306,44 through 457,444 +turn off 912,569 through 967,963 +toggle 109,756 through 297,867 +turn on 37,546 through 41,951 +turn on 321,637 through 790,910 +toggle 66,50 through 579,301 +toggle 933,221 through 933,791 +turn on 486,676 through 878,797 +turn on 417,231 through 556,317 +toggle 904,468 through 981,873 +turn on 417,675 through 749,712 +turn on 692,371 through 821,842 +toggle 324,73 through 830,543 +turn on 912,490 through 977,757 +turn off 634,872 through 902,949 +toggle 266,779 through 870,798 +turn on 772,982 through 990,996 +turn off 607,46 through 798,559 +turn on 295,602 through 963,987 +turn on 657,86 through 944,742 +turn off 334,639 through 456,821 +turn off 997,667 through 997,670 +turn off 725,832 through 951,945 +turn off 30,120 through 952,984 +turn on 860,965 through 917,976 +toggle 471,997 through 840,998 +turn off 319,307 through 928,504 +toggle 823,631 through 940,908 +toggle 969,984 through 981,993 +turn off 691,319 through 865,954 +toggle 911,926 through 938,929 +turn on 953,937 through 968,991 +toggle 914,643 through 975,840 +turn on 266,982 through 436,996 +turn off 101,896 through 321,932 +turn off 193,852 through 751,885 +turn off 576,532 through 863,684 +turn on 761,456 through 940,783 +turn on 20,290 through 398,933 +turn off 435,335 through 644,652 +turn on 830,569 through 905,770 +turn off 630,517 through 905,654 +turn on 664,53 through 886,976 +toggle 275,416 through 408,719 +turn on 370,621 through 515,793 +turn on 483,373 through 654,749 +turn on 656,786 through 847,928 +turn off 532,752 through 945,974 +toggle 301,150 through 880,792 +turn off 951,488 through 958,952 +turn on 207,729 through 882,828 +toggle 694,532 through 973,961 +toggle 676,639 through 891,802 +turn off 653,6 through 905,519 +toggle 391,109 through 418,312 +turn on 877,423 through 957,932 +turn on 340,145 through 563,522 +turn off 978,467 through 988,895 +turn off 396,418 through 420,885 +turn off 31,308 through 816,316 +turn on 107,675 through 758,824 +turn on 61,82 through 789,876 +turn on 750,743 through 754,760 +toggle 88,733 through 736,968 +turn off 754,349 through 849,897 +toggle 157,50 through 975,781 +turn off 230,231 through 865,842 +turn off 516,317 through 630,329 +turn off 697,820 through 829,903 +turn on 218,250 through 271,732 +toggle 56,167 through 404,431 +toggle 626,891 through 680,927 +toggle 370,207 through 791,514 +toggle 860,74 through 949,888 +turn on 416,527 through 616,541 +turn off 745,449 through 786,908 +turn on 485,554 through 689,689 +turn on 586,62 through 693,141 +toggle 506,759 through 768,829 +turn on 473,109 through 929,166 +turn on 760,617 through 773,789 +toggle 595,683 through 618,789 +turn off 210,775 through 825,972 +toggle 12,426 through 179,982 +turn on 774,539 through 778,786 +turn on 102,498 through 121,807 +turn off 706,897 through 834,965 +turn off 678,529 through 824,627 +turn on 7,765 through 615,870 +turn off 730,872 through 974,943 +turn off 595,626 through 836,711 +turn off 215,424 through 841,959 +toggle 341,780 through 861,813 +toggle 507,503 through 568,822 +turn on 252,603 through 349,655 +toggle 93,521 through 154,834 +turn on 565,682 through 951,954 +turn on 544,318 through 703,418 +toggle 756,953 through 891,964 +turn on 531,123 through 856,991 +turn on 148,315 through 776,559 +turn off 925,835 through 963,971 +turn on 895,944 through 967,964 +turn off 102,527 through 650,747 +toggle 626,105 through 738,720 +turn off 160,75 through 384,922 +toggle 813,724 through 903,941 +turn on 207,107 through 982,849 +toggle 750,505 through 961,697 +toggle 105,410 through 885,819 +turn on 226,104 through 298,283 +turn off 224,604 through 508,762 +turn on 477,368 through 523,506 +turn off 477,901 through 627,936 +turn off 887,131 through 889,670 +turn on 896,994 through 938,999 +toggle 401,580 through 493,728 +toggle 987,184 through 991,205 +turn on 821,643 through 882,674 +toggle 784,940 through 968,959 +turn off 251,293 through 274,632 +turn off 339,840 through 341,844 +turn off 675,351 through 675,836 +toggle 918,857 through 944,886 +toggle 70,253 through 918,736 +turn off 612,604 through 772,680 +turn off 277,40 through 828,348 +toggle 692,139 through 698,880 +toggle 124,446 through 883,453 +toggle 969,932 through 990,945 +toggle 855,692 through 993,693 +toggle 722,472 through 887,899 +toggle 978,149 through 985,442 +toggle 837,540 through 916,889 +turn off 612,2 through 835,82 +toggle 560,767 through 878,856 +turn on 461,734 through 524,991 +toggle 206,824 through 976,912 +turn on 826,610 through 879,892 +turn on 577,699 through 956,933 +turn off 9,250 through 50,529 +turn off 77,657 through 817,677 +turn on 68,419 through 86,426 +turn on 991,720 through 992,784 +turn on 668,20 through 935,470 +turn off 133,418 through 613,458 +turn off 487,286 through 540,328 +toggle 247,874 through 840,955 +toggle 301,808 through 754,970 +turn off 34,194 through 578,203 +turn off 451,49 through 492,921 +turn on 907,256 through 912,737 +turn off 479,305 through 702,587 +turn on 545,583 through 732,749 +toggle 11,16 through 725,868 +turn on 965,343 through 986,908 +turn on 674,953 through 820,965 +toggle 398,147 through 504,583 +turn off 778,194 through 898,298 +turn on 179,140 through 350,852 +turn off 241,118 through 530,832 +turn off 41,447 through 932,737 +turn off 820,663 through 832,982 +turn on 550,460 through 964,782 +turn on 31,760 through 655,892 +toggle 628,958 through 811,992 diff --git a/2015/input/2015_7.txt b/2015/input/2015_7.txt new file mode 100644 index 0000000..56cae92 --- /dev/null +++ b/2015/input/2015_7.txt @@ -0,0 +1,339 @@ +af AND ah -> ai +NOT lk -> ll +hz RSHIFT 1 -> is +NOT go -> gp +du OR dt -> dv +x RSHIFT 5 -> aa +at OR az -> ba +eo LSHIFT 15 -> es +ci OR ct -> cu +b RSHIFT 5 -> f +fm OR fn -> fo +NOT ag -> ah +v OR w -> x +g AND i -> j +an LSHIFT 15 -> ar +1 AND cx -> cy +jq AND jw -> jy +iu RSHIFT 5 -> ix +gl AND gm -> go +NOT bw -> bx +jp RSHIFT 3 -> jr +hg AND hh -> hj +bv AND bx -> by +er OR es -> et +kl OR kr -> ks +et RSHIFT 1 -> fm +e AND f -> h +u LSHIFT 1 -> ao +he RSHIFT 1 -> hx +eg AND ei -> ej +bo AND bu -> bw +dz OR ef -> eg +dy RSHIFT 3 -> ea +gl OR gm -> gn +da LSHIFT 1 -> du +au OR av -> aw +gj OR gu -> gv +eu OR fa -> fb +lg OR lm -> ln +e OR f -> g +NOT dm -> dn +NOT l -> m +aq OR ar -> as +gj RSHIFT 5 -> gm +hm AND ho -> hp +ge LSHIFT 15 -> gi +jp RSHIFT 1 -> ki +hg OR hh -> hi +lc LSHIFT 1 -> lw +km OR kn -> ko +eq LSHIFT 1 -> fk +1 AND am -> an +gj RSHIFT 1 -> hc +aj AND al -> am +gj AND gu -> gw +ko AND kq -> kr +ha OR gz -> hb +bn OR by -> bz +iv OR jb -> jc +NOT ac -> ad +bo OR bu -> bv +d AND j -> l +bk LSHIFT 1 -> ce +de OR dk -> dl +dd RSHIFT 1 -> dw +hz AND ik -> im +NOT jd -> je +fo RSHIFT 2 -> fp +hb LSHIFT 1 -> hv +lf RSHIFT 2 -> lg +gj RSHIFT 3 -> gl +ki OR kj -> kk +NOT ak -> al +ld OR le -> lf +ci RSHIFT 3 -> ck +1 AND cc -> cd +NOT kx -> ky +fp OR fv -> fw +ev AND ew -> ey +dt LSHIFT 15 -> dx +NOT ax -> ay +bp AND bq -> bs +NOT ii -> ij +ci AND ct -> cv +iq OR ip -> ir +x RSHIFT 2 -> y +fq OR fr -> fs +bn RSHIFT 5 -> bq +0 -> c +14146 -> b +d OR j -> k +z OR aa -> ab +gf OR ge -> gg +df OR dg -> dh +NOT hj -> hk +NOT di -> dj +fj LSHIFT 15 -> fn +lf RSHIFT 1 -> ly +b AND n -> p +jq OR jw -> jx +gn AND gp -> gq +x RSHIFT 1 -> aq +ex AND ez -> fa +NOT fc -> fd +bj OR bi -> bk +as RSHIFT 5 -> av +hu LSHIFT 15 -> hy +NOT gs -> gt +fs AND fu -> fv +dh AND dj -> dk +bz AND cb -> cc +dy RSHIFT 1 -> er +hc OR hd -> he +fo OR fz -> ga +t OR s -> u +b RSHIFT 2 -> d +NOT jy -> jz +hz RSHIFT 2 -> ia +kk AND kv -> kx +ga AND gc -> gd +fl LSHIFT 1 -> gf +bn AND by -> ca +NOT hr -> hs +NOT bs -> bt +lf RSHIFT 3 -> lh +au AND av -> ax +1 AND gd -> ge +jr OR js -> jt +fw AND fy -> fz +NOT iz -> ja +c LSHIFT 1 -> t +dy RSHIFT 5 -> eb +bp OR bq -> br +NOT h -> i +1 AND ds -> dt +ab AND ad -> ae +ap LSHIFT 1 -> bj +br AND bt -> bu +NOT ca -> cb +NOT el -> em +s LSHIFT 15 -> w +gk OR gq -> gr +ff AND fh -> fi +kf LSHIFT 15 -> kj +fp AND fv -> fx +lh OR li -> lj +bn RSHIFT 3 -> bp +jp OR ka -> kb +lw OR lv -> lx +iy AND ja -> jb +dy OR ej -> ek +1 AND bh -> bi +NOT kt -> ku +ao OR an -> ap +ia AND ig -> ii +NOT ey -> ez +bn RSHIFT 1 -> cg +fk OR fj -> fl +ce OR cd -> cf +eu AND fa -> fc +kg OR kf -> kh +jr AND js -> ju +iu RSHIFT 3 -> iw +df AND dg -> di +dl AND dn -> do +la LSHIFT 15 -> le +fo RSHIFT 1 -> gh +NOT gw -> gx +NOT gb -> gc +ir LSHIFT 1 -> jl +x AND ai -> ak +he RSHIFT 5 -> hh +1 AND lu -> lv +NOT ft -> fu +gh OR gi -> gj +lf RSHIFT 5 -> li +x RSHIFT 3 -> z +b RSHIFT 3 -> e +he RSHIFT 2 -> hf +NOT fx -> fy +jt AND jv -> jw +hx OR hy -> hz +jp AND ka -> kc +fb AND fd -> fe +hz OR ik -> il +ci RSHIFT 1 -> db +fo AND fz -> gb +fq AND fr -> ft +gj RSHIFT 2 -> gk +cg OR ch -> ci +cd LSHIFT 15 -> ch +jm LSHIFT 1 -> kg +ih AND ij -> ik +fo RSHIFT 3 -> fq +fo RSHIFT 5 -> fr +1 AND fi -> fj +1 AND kz -> la +iu AND jf -> jh +cq AND cs -> ct +dv LSHIFT 1 -> ep +hf OR hl -> hm +km AND kn -> kp +de AND dk -> dm +dd RSHIFT 5 -> dg +NOT lo -> lp +NOT ju -> jv +NOT fg -> fh +cm AND co -> cp +ea AND eb -> ed +dd RSHIFT 3 -> df +gr AND gt -> gu +ep OR eo -> eq +cj AND cp -> cr +lf OR lq -> lr +gg LSHIFT 1 -> ha +et RSHIFT 2 -> eu +NOT jh -> ji +ek AND em -> en +jk LSHIFT 15 -> jo +ia OR ig -> ih +gv AND gx -> gy +et AND fe -> fg +lh AND li -> lk +1 AND io -> ip +kb AND kd -> ke +kk RSHIFT 5 -> kn +id AND if -> ig +NOT ls -> lt +dw OR dx -> dy +dd AND do -> dq +lf AND lq -> ls +NOT kc -> kd +dy AND ej -> el +1 AND ke -> kf +et OR fe -> ff +hz RSHIFT 5 -> ic +dd OR do -> dp +cj OR cp -> cq +NOT dq -> dr +kk RSHIFT 1 -> ld +jg AND ji -> jj +he OR hp -> hq +hi AND hk -> hl +dp AND dr -> ds +dz AND ef -> eh +hz RSHIFT 3 -> ib +db OR dc -> dd +hw LSHIFT 1 -> iq +he AND hp -> hr +NOT cr -> cs +lg AND lm -> lo +hv OR hu -> hw +il AND in -> io +NOT eh -> ei +gz LSHIFT 15 -> hd +gk AND gq -> gs +1 AND en -> eo +NOT kp -> kq +et RSHIFT 5 -> ew +lj AND ll -> lm +he RSHIFT 3 -> hg +et RSHIFT 3 -> ev +as AND bd -> bf +cu AND cw -> cx +jx AND jz -> ka +b OR n -> o +be AND bg -> bh +1 AND ht -> hu +1 AND gy -> gz +NOT hn -> ho +ck OR cl -> cm +ec AND ee -> ef +lv LSHIFT 15 -> lz +ks AND ku -> kv +NOT ie -> if +hf AND hl -> hn +1 AND r -> s +ib AND ic -> ie +hq AND hs -> ht +y AND ae -> ag +NOT ed -> ee +bi LSHIFT 15 -> bm +dy RSHIFT 2 -> dz +ci RSHIFT 2 -> cj +NOT bf -> bg +NOT im -> in +ev OR ew -> ex +ib OR ic -> id +bn RSHIFT 2 -> bo +dd RSHIFT 2 -> de +bl OR bm -> bn +as RSHIFT 1 -> bl +ea OR eb -> ec +ln AND lp -> lq +kk RSHIFT 3 -> km +is OR it -> iu +iu RSHIFT 2 -> iv +as OR bd -> be +ip LSHIFT 15 -> it +iw OR ix -> iy +kk RSHIFT 2 -> kl +NOT bb -> bc +ci RSHIFT 5 -> cl +ly OR lz -> ma +z AND aa -> ac +iu RSHIFT 1 -> jn +cy LSHIFT 15 -> dc +cf LSHIFT 1 -> cz +as RSHIFT 3 -> au +cz OR cy -> da +kw AND ky -> kz +lx -> a +iw AND ix -> iz +lr AND lt -> lu +jp RSHIFT 5 -> js +aw AND ay -> az +jc AND je -> jf +lb OR la -> lc +NOT cn -> co +kh LSHIFT 1 -> lb +1 AND jj -> jk +y OR ae -> af +ck AND cl -> cn +kk OR kv -> kw +NOT cv -> cw +kl AND kr -> kt +iu OR jf -> jg +at AND az -> bb +jp RSHIFT 2 -> jq +iv AND jb -> jd +jn OR jo -> jp +x OR ai -> aj +ba AND bc -> bd +jl OR jk -> jm +b RSHIFT 1 -> v +o AND q -> r +NOT p -> q +k AND m -> n +as RSHIFT 2 -> at diff --git a/2015/lib/2015/1.ex b/2015/lib/2015/1.ex new file mode 100644 index 0000000..2cc6e16 --- /dev/null +++ b/2015/lib/2015/1.ex @@ -0,0 +1,26 @@ +import AOC + +aoc 2015, 1 do + def input_chars(), do: input_string() |> String.split("", trim: true) + + def p1 do + input_chars() + |> Enum.reduce(0, fn + "(", floor -> floor + 1 + ")", floor -> floor - 1 + end) + end + + def p2 do + input_string() + |> find_step_entering_basement(0, 0) + end + + defp find_step_entering_basement(")" <> _, 0, step), do: step + 1 + + defp find_step_entering_basement("(" <> rest, floor, step), + do: find_step_entering_basement(rest, floor + 1, step + 1) + + defp find_step_entering_basement(")" <> rest, floor, step), + do: find_step_entering_basement(rest, floor - 1, step + 1) +end diff --git a/2015/lib/2015/2.ex b/2015/lib/2015/2.ex new file mode 100644 index 0000000..8b6ca3b --- /dev/null +++ b/2015/lib/2015/2.ex @@ -0,0 +1,32 @@ +import AOC + +aoc 2015, 2 do + def dimensions_stream(), + do: + input_stream() + |> Stream.map(fn line -> + [l, w, h] = String.split(line, "x") |> Enum.map(&String.to_integer/1) + {l, w, h} + end) + + def p1 do + dimensions_stream() + |> Stream.map(fn {l, w, h} -> + a = l * w + b = w * h + c = h * l + 2 * a + 2 * b + 2 * c + Enum.min([a, b, c]) + end) + |> Enum.sum() + end + + def p2 do + dimensions_stream() + |> Stream.map(fn {l, w, h} -> + [x, y | _] = Enum.sort([l, w, h]) + + 2 * x + 2 * y + l * w * h + end) + |> Enum.sum() + end +end diff --git a/2015/lib/2015/3.ex b/2015/lib/2015/3.ex new file mode 100644 index 0000000..4c3f602 --- /dev/null +++ b/2015/lib/2015/3.ex @@ -0,0 +1,46 @@ +import AOC + +aoc 2015, 3 do + def input_chars(), do: input_string() |> String.split("", trim: true) + + def p1 do + input_chars() + |> run() + |> then(fn {visited, _} -> MapSet.size(visited) end) + end + + def p2 do + {santa, robo_santa} = + input_chars() + |> Enum.with_index() + |> Enum.split_with(fn {_, i} -> Integer.mod(i, 2) == 0 end) + |> then(fn {santa, robo_santa} -> + {without_index(santa), without_index(robo_santa)} + end) + + {visited, _} = run(santa) + {visited, _} = run(robo_santa, visited) + + MapSet.size(visited) + end + + defp op("^"), do: {1, 0} + defp op(">"), do: {0, 1} + defp op("v"), do: {-1, 0} + defp op("<"), do: {0, -1} + + defp add({x, y}, {a, b}), do: {x + a, y + b} + + defp run(inst, visited \\ MapSet.new()) do + starting_position = {0, 0} + visited = MapSet.put(visited, starting_position) + + Enum.reduce(inst, {visited, starting_position}, fn command, {visited, current_position} -> + current_position = add(current_position, op(command)) + visited = MapSet.put(visited, current_position) + {visited, current_position} + end) + end + + defp without_index(enum), do: Enum.map(enum, &elem(&1, 0)) +end diff --git a/2015/lib/2015/4.ex b/2015/lib/2015/4.ex new file mode 100644 index 0000000..f1e4bed --- /dev/null +++ b/2015/lib/2015/4.ex @@ -0,0 +1,31 @@ +import AOC + +aoc 2015, 4 do + def p1 do + input_string() + |> String.trim() + |> mine_advent_coin(5) + end + + defp mine_advent_coin(key, difficulty, nonce \\ 0) + + defp mine_advent_coin(key, 5, nonce) do + case :erlang.md5(key <> Integer.to_string(nonce)) do + <<0::20, _::108>> -> nonce + _ -> mine_advent_coin(key, 5, nonce + 1) + end + end + + defp mine_advent_coin(key, 6, nonce) do + case :erlang.md5(key <> Integer.to_string(nonce)) do + <<0::24, _::104>> -> nonce + _ -> mine_advent_coin(key, 6, nonce + 1) + end + end + + def p2 do + input_string() + |> String.trim() + |> mine_advent_coin(6) + end +end diff --git a/2015/lib/2015/5.ex b/2015/lib/2015/5.ex new file mode 100644 index 0000000..f941cdf --- /dev/null +++ b/2015/lib/2015/5.ex @@ -0,0 +1,29 @@ +import AOC + +aoc 2015, 5 do + @deny_list ~w(ab cd pq xy) + + def p1 do + input_stream() + |> Stream.filter(&is_string_nice_p1?/1) + |> Enum.count() + end + + defp is_string_nice_p1?(str) do + contains_at_least_three_vowels = String.match?(str, ~r/(?:[aeiou].*){3}/) + contains_double_letter = String.match?(str, ~r/(\w)\1/) + does_not_contain_denylist = not Enum.any?(@deny_list, &String.contains?(str, &1)) + + contains_at_least_three_vowels and contains_double_letter and does_not_contain_denylist + end + + def p2 do + input_stream() + |> Stream.filter(&is_string_nice_p2?/1) + |> Enum.count() + end + + defp is_string_nice_p2?(str) do + String.match?(str, ~r/(\w)(\w).*\1\2/) and String.match?(str, ~r/(\w)\w\1/) + end +end diff --git a/2015/lib/2015/6.ex b/2015/lib/2015/6.ex new file mode 100644 index 0000000..f3b8f55 --- /dev/null +++ b/2015/lib/2015/6.ex @@ -0,0 +1,82 @@ +import AOC + +aoc 2015, 6 do + import NimbleParsec + + defparsec( + :coord, + integer(min: 1) + |> ignore(string(",")) + |> integer(min: 1) + |> label("coordinate pair") + ) + + defparsec( + :command, + choice([ + string("turn on"), + string("turn off"), + string("toggle") + ]) + |> ignore(string(" ")) + |> parsec(:coord) + |> ignore(string(" through ")) + |> parsec(:coord) + ) + + def parse_command(line) do + command(line) + |> then(fn {:ok, v, _, _, _, _} -> v end) + |> then(fn + ["turn on", x1, y1, x2, y2] -> {:turn_on, {x1, y1}, {x2, y2}} + ["turn off", x1, y1, x2, y2] -> {:turn_off, {x1, y1}, {x2, y2}} + ["toggle", x1, y1, x2, y2] -> {:toggle, {x1, y1}, {x2, y2}} + end) + end + + def command_stream(), do: input_stream() |> Stream.map(&parse_command/1) + + def p1 do + lights = for x <- 0..999, y <- 0..999, into: %{}, do: {{x, y}, 0} + + command_stream() + |> Enum.reduce(lights, fn + {:turn_on, from, to}, lights -> + set_range(lights, from, to, 1) + + {:turn_off, from, to}, lights -> + set_range(lights, from, to, 0) + + {:toggle, from, to}, lights -> + update_range(lights, from, to, fn + 0 -> 1 + 1 -> 0 + end) + end) + |> Map.values() + |> Enum.sum() + end + + def p2 do + lights = for x <- 0..999, y <- 0..999, into: %{}, do: {{x, y}, 0} + + command_stream() + |> Enum.reduce(lights, fn + {:turn_on, from, to}, lights -> update_range(lights, from, to, &(&1 + 1)) + {:turn_off, from, to}, lights -> update_range(lights, from, to, &max(0, &1 - 1)) + {:toggle, from, to}, lights -> update_range(lights, from, to, &(&1 + 2)) + end) + |> Map.values() + |> Enum.sum() + end + + def set_range(map, from, to, value), do: update_range(map, from, to, always(value)) + + def update_range(map, {x1, y1}, {x2, y2}, fun) do + for x <- x1..x2, y <- y1..y2, reduce: map do + map -> Map.update!(map, {x, y}, fun) + end + end + + def always(v), do: fn _ -> v end +end diff --git a/2015/lib/2015/7.ex b/2015/lib/2015/7.ex new file mode 100644 index 0000000..a166bc7 --- /dev/null +++ b/2015/lib/2015/7.ex @@ -0,0 +1,14 @@ +import AOC + +aoc 2015, 7 do + import NimbleParsec + + def parse_inst(line) do + end + + def p1 do + end + + def p2 do + end +end diff --git a/2015/lib/advent_of_code2015.ex b/2015/lib/advent_of_code2015.ex new file mode 100644 index 0000000..645ed7b --- /dev/null +++ b/2015/lib/advent_of_code2015.ex @@ -0,0 +1,18 @@ +defmodule AdventOfCode2015 do + @moduledoc """ + Documentation for `AdventOfCode2015`. + """ + + @doc """ + Hello world. + + ## Examples + + iex> AdventOfCode2015.hello() + :world + + """ + def hello do + :world + end +end diff --git a/2015/mix.exs b/2015/mix.exs new file mode 100644 index 0000000..02415aa --- /dev/null +++ b/2015/mix.exs @@ -0,0 +1,30 @@ +defmodule AdventOfCode2015.MixProject do + use Mix.Project + + def project do + [ + app: :advent_of_code_2015, + version: "0.1.0", + elixir: "~> 1.12", + start_permanent: Mix.env() == :prod, + deps: deps() + ] + end + + # Run "mix help compile.app" to learn about applications. + def application do + [ + extra_applications: [:logger] + ] + end + + # Run "mix help deps" to learn about dependencies. + defp deps do + [ + {:advent_of_code_utils, "~> 1.0"}, + {:exla, "~> 0.1.0-dev", github: "elixir-nx/nx", sparse: "exla"}, + {:nimble_parsec, "~> 1.0"}, + {:nx, "~> 0.1.0-dev", github: "elixir-nx/nx", sparse: "nx", override: true} + ] + end +end diff --git a/2015/mix.lock b/2015/mix.lock new file mode 100644 index 0000000..767627d --- /dev/null +++ b/2015/mix.lock @@ -0,0 +1,8 @@ +%{ + "advent_of_code_utils": {:hex, :advent_of_code_utils, "1.0.0", "e9ce8be22988e095991168e9d2dde802afc213aaae64491e9fde84dd877db41c", [:mix], [], "hexpm", "1fa5217ccb95a38ce2312dd7ea6057b0d0002a3eba7490feab704df4b8a94038"}, + "elixir_make": {:hex, :elixir_make, "0.6.3", "bc07d53221216838d79e03a8019d0839786703129599e9619f4ab74c8c096eac", [:mix], [], "hexpm", "f5cbd651c5678bcaabdbb7857658ee106b12509cd976c2c2fca99688e1daf716"}, + "exla": {:git, "https://github.com/elixir-nx/nx.git", "e23a678bf0ebcbbafe03f1b5ed78623f052ad486", [sparse: "exla"]}, + "nimble_parsec": {:hex, :nimble_parsec, "1.2.0", "b44d75e2a6542dcb6acf5d71c32c74ca88960421b6874777f79153bbbbd7dccc", [:mix], [], "hexpm", "52b2871a7515a5ac49b00f214e4165a40724cf99798d8e4a65e4fd64ebd002c1"}, + "nx": {:git, "https://github.com/elixir-nx/nx.git", "e23a678bf0ebcbbafe03f1b5ed78623f052ad486", [sparse: "nx"]}, + "xla": {:hex, :xla, "0.2.0", "689887888afb22587168d461f0e9ff83d7b06040273ea7082dbf9ff7eca33dcc", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "a2e7b81413db49a159eabfb12dbd784a7c04b5c68c7b4057238d5ec9b110f2ec"}, +} diff --git a/2015/test/advent_of_code2015_test.exs b/2015/test/advent_of_code2015_test.exs new file mode 100644 index 0000000..5c9ee79 --- /dev/null +++ b/2015/test/advent_of_code2015_test.exs @@ -0,0 +1,8 @@ +defmodule AdventOfCode2015Test do + use ExUnit.Case + doctest AdventOfCode2015 + + test "greets the world" do + assert AdventOfCode2015.hello() == :world + end +end diff --git a/2015/test/test_helper.exs b/2015/test/test_helper.exs new file mode 100644 index 0000000..869559e --- /dev/null +++ b/2015/test/test_helper.exs @@ -0,0 +1 @@ +ExUnit.start()