From 38e03b15878bf6f2f524fb81824f6750e42128a1 Mon Sep 17 00:00:00 2001 From: Daniel Flanagan Date: Sun, 1 Dec 2019 14:55:48 -0600 Subject: [PATCH] Add 2018 files --- 2018/elixir/.formatter.exs | 4 + 2018/elixir/.gitignore | 26 + 2018/elixir/README.md | 14 + 2018/elixir/config/config.exs | 30 + 2018/elixir/inputs/one.txt | 1017 +++++++++++++ 2018/elixir/inputs/three.txt | 1341 +++++++++++++++++ 2018/elixir/inputs/two.txt | 250 +++ 2018/elixir/lib/advent_of_code_2018.ex | 18 + 2018/elixir/lib/one.ex | 16 + 2018/elixir/lib/three.ex | 73 + 2018/elixir/lib/two.ex | 40 + 2018/elixir/mix.exs | 28 + 2018/elixir/test/advent_of_code_2018_test.exs | 41 + 2018/elixir/test/test_helper.exs | 1 + 2019/1.moon | 1 + 2019/common.moon | 4 +- 16 files changed, 2902 insertions(+), 2 deletions(-) create mode 100644 2018/elixir/.formatter.exs create mode 100644 2018/elixir/.gitignore create mode 100644 2018/elixir/README.md create mode 100644 2018/elixir/config/config.exs create mode 100644 2018/elixir/inputs/one.txt create mode 100644 2018/elixir/inputs/three.txt create mode 100644 2018/elixir/inputs/two.txt create mode 100644 2018/elixir/lib/advent_of_code_2018.ex create mode 100644 2018/elixir/lib/one.ex create mode 100644 2018/elixir/lib/three.ex create mode 100644 2018/elixir/lib/two.ex create mode 100644 2018/elixir/mix.exs create mode 100644 2018/elixir/test/advent_of_code_2018_test.exs create mode 100644 2018/elixir/test/test_helper.exs diff --git a/2018/elixir/.formatter.exs b/2018/elixir/.formatter.exs new file mode 100644 index 0000000..d2cda26 --- /dev/null +++ b/2018/elixir/.formatter.exs @@ -0,0 +1,4 @@ +# Used by "mix format" +[ + inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] +] diff --git a/2018/elixir/.gitignore b/2018/elixir/.gitignore new file mode 100644 index 0000000..1144eae --- /dev/null +++ b/2018/elixir/.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 3rd-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_2018-*.tar + +# Ignore language server files +/.elixir_ls diff --git a/2018/elixir/README.md b/2018/elixir/README.md new file mode 100644 index 0000000..35fc641 --- /dev/null +++ b/2018/elixir/README.md @@ -0,0 +1,14 @@ +# Advent of Code 2018 + +Herein lies my Elixir solutions for the Advent of Code 2018 puzzles. + +## Approach + +My approach to each problem involves the following procedure: + +1. Write an initial solution for each puzzle with no help beyond code + documentation. +2. Rewrite initial solutions to improve the code's readability and performance. +3. Watch José Valim (the author of Elixir) solve the solutions. +4. Refactor again, keeping the core of my solution intact (unless truly awful), + but applying anything interesting learned from his solution. diff --git a/2018/elixir/config/config.exs b/2018/elixir/config/config.exs new file mode 100644 index 0000000..db5cebb --- /dev/null +++ b/2018/elixir/config/config.exs @@ -0,0 +1,30 @@ +# This file is responsible for configuring your application +# and its dependencies with the aid of the Mix.Config module. +use Mix.Config + +# This configuration is loaded before any dependency and is restricted +# to this project. If another project depends on this project, this +# file won't be loaded nor affect the parent project. For this reason, +# if you want to provide default values for your application for +# 3rd-party users, it should be done in your "mix.exs" file. + +# You can configure your application as: +# +# config :advent_of_code_2018, key: :value +# +# and access this configuration in your application as: +# +# Application.get_env(:advent_of_code_2018, :key) +# +# You can also configure a 3rd-party app: +# +# config :logger, level: :info +# + +# It is also possible to import configuration files, relative to this +# directory. For example, you can emulate configuration per environment +# by uncommenting the line below and defining dev.exs, test.exs and such. +# Configuration from the imported file will override the ones defined +# here (which is why it is important to import them last). +# +# import_config "#{Mix.env()}.exs" diff --git a/2018/elixir/inputs/one.txt b/2018/elixir/inputs/one.txt new file mode 100644 index 0000000..fdbf689 --- /dev/null +++ b/2018/elixir/inputs/one.txt @@ -0,0 +1,1017 @@ +-16 ++12 +-6 +-16 ++4 ++19 +-10 ++20 +-16 +-6 ++3 +-12 +-7 ++6 +-12 +-7 +-15 +-2 ++11 ++5 ++5 +-9 +-14 +-3 +-4 ++16 ++11 ++7 ++17 +-4 ++17 ++1 +-9 +-6 +-14 +-8 ++3 +-13 ++14 +-8 +-5 ++16 ++18 +-4 ++10 ++16 +-4 ++9 ++14 ++8 +-19 +-11 ++19 +-13 ++8 +-4 +-6 +-7 ++4 ++6 ++6 ++7 ++6 +-3 ++10 ++13 +-19 ++5 ++8 ++16 ++3 ++11 ++7 ++2 ++8 ++5 +-8 ++10 ++6 +-2 +-16 +-9 +-1 +-11 +-12 +-8 ++17 +-16 +-5 ++16 +-9 ++13 ++3 ++6 +-16 ++4 +-6 +-19 ++5 +-6 ++7 ++8 ++20 +-1 ++6 +-3 ++16 +-17 ++10 ++1 ++20 +-15 ++13 ++10 ++15 +-9 ++6 ++11 ++14 ++8 +-3 ++5 +-14 ++2 +-14 +-19 ++1 +-5 ++1 ++18 ++1 +-13 ++11 ++10 +-19 +-13 ++7 +-16 +-5 ++13 ++16 ++18 +-2 ++6 +-11 ++9 ++11 ++6 +-7 +-17 +-18 ++6 ++3 ++19 ++20 ++4 ++15 ++11 +-13 ++12 +-7 ++10 +-5 +-14 +-16 ++11 ++10 ++2 ++13 ++7 ++9 +-18 +-5 +-17 ++14 ++16 +-3 ++9 ++6 +-17 ++16 ++6 ++14 ++12 ++11 ++7 ++17 ++11 +-15 ++8 ++17 ++17 ++2 +-15 +-16 ++15 ++15 +-2 ++16 +-10 ++2 ++5 +-16 ++8 +-19 ++5 +-2 ++7 +-16 ++10 +-9 +-11 ++13 ++11 ++4 +-3 ++15 +-1 ++10 ++18 +-4 +-1 +-12 ++6 ++15 +-3 +-17 ++3 ++21 ++2 +-18 +-15 +-21 +-16 ++5 +-20 ++7 +-5 +-16 ++18 +-19 ++14 ++10 +-19 +-15 +-14 ++13 +-15 ++6 +-13 ++17 ++4 ++15 +-7 +-13 ++21 ++17 +-8 +-4 ++9 +-11 ++4 +-1 +-15 +-20 +-14 +-9 +-11 +-17 +-11 +-12 +-4 ++3 +-10 +-13 ++18 +-14 ++10 ++18 ++6 +-13 ++9 +-1 +-4 ++8 ++6 ++25 +-11 +-11 ++19 ++15 ++15 +-2 +-16 ++11 ++8 +-13 +-4 +-5 ++2 ++5 ++20 +-14 +-18 ++17 +-4 ++12 ++8 +-11 ++17 ++13 ++8 +-19 +-1 ++11 ++29 ++5 ++26 ++14 +-1 ++10 +-16 ++11 ++12 +-4 +-15 +-16 ++32 +-8 ++5 ++12 +-4 ++21 +-7 +-7 +-31 +-5 +-15 +-16 ++9 +-36 +-11 +-25 ++16 ++12 ++14 +-72 ++7 ++4 ++15 ++15 ++16 ++39 ++73 ++20 +-14 ++6 ++13 +-2 ++1 +-28 ++75 +-14 ++15 ++8 +-10 +-3 +-16 +-6 +-19 +-5 +-24 +-24 ++106 ++14 +-2 ++19 +-8 +-16 +-13 ++33 ++20 +-2 +-2 ++24 +-2 +-11 ++8 ++4 ++9 ++32 +-9 ++19 +-2 +-22 +-6 ++50 +-17 ++10 ++6 ++23 ++10 ++3 ++88 ++112 ++11 ++18 ++12 ++55 ++9 ++29 ++13 +-88 ++6 ++423 ++55676 ++1 +-8 +-16 +-16 ++19 ++7 +-5 ++4 +-3 +-16 ++9 ++3 +-7 +-10 +-8 +-3 +-4 ++8 +-7 +-15 ++2 +-1 ++8 ++3 ++4 +-3 ++13 +-19 +-15 +-11 ++10 ++3 +-9 +-19 +-1 +-4 ++19 ++13 +-10 ++14 ++9 ++14 ++15 +-8 +-24 +-15 ++11 +-1 +-16 +-15 +-4 +-18 +-5 ++10 +-8 +-3 ++2 ++13 ++14 ++7 ++12 +-9 ++17 +-9 +-9 +-21 ++6 ++17 +-24 +-6 ++10 ++13 +-20 +-15 +-14 +-11 +-3 +-8 +-1 ++15 ++9 +-17 +-18 ++4 ++6 +-11 +-19 +-7 ++18 +-4 +-12 +-5 +-18 +-3 ++10 +-4 +-10 +-11 ++6 ++11 ++6 ++8 ++12 ++8 +-1 ++19 ++14 +-1 +-3 ++19 +-5 ++15 ++3 ++1 ++22 +-19 +-8 +-2 +-9 ++13 ++1 +-7 ++18 ++16 ++4 ++6 ++19 +-18 ++2 ++3 ++34 +-14 ++8 ++7 ++12 ++9 +-15 ++24 ++7 ++11 +-4 +-13 ++16 ++7 +-13 +-15 +-12 ++20 ++21 +-4 ++21 ++19 ++19 ++10 +-7 +-9 ++11 +-6 ++5 ++5 +-13 +-17 ++8 ++4 +-13 +-8 ++14 ++11 ++7 +-9 +-17 +-3 +-5 +-16 ++9 +-2 +-8 +-3 ++10 ++16 ++18 ++5 ++15 ++14 ++2 ++15 +-8 ++1 ++15 ++11 ++18 +-5 ++3 +-13 +-9 +-19 ++15 +-7 +-14 +-18 ++12 +-1 ++16 +-8 ++9 ++16 ++20 +-16 ++11 ++1 ++14 +-16 +-4 ++3 ++14 ++10 ++12 +-16 +-4 ++14 +-19 +-12 +-20 ++17 +-16 +-6 ++15 +-20 +-16 +-17 ++10 ++13 +-14 ++18 +-6 ++3 +-10 +-3 ++4 ++13 +-16 +-7 ++31 ++11 ++1 ++1 ++13 +-5 +-5 ++21 ++18 ++20 +-9 +-3 +-9 +-11 ++8 +-1 +-4 ++14 ++14 +-15 +-6 ++14 ++1 ++2 ++14 ++21 ++8 +-15 ++20 +-10 +-20 +-5 +-10 +-17 +-15 ++16 +-8 ++16 ++15 ++12 ++11 +-3 ++21 +-17 ++6 +-15 ++1 +-19 ++8 ++21 +-16 +-19 ++8 ++7 +-8 ++3 +-20 +-39 +-18 ++14 +-12 +-29 ++3 +-14 +-10 +-9 +-3 +-22 +-8 ++1 ++3 +-5 +-1 +-19 +-25 ++9 +-7 +-14 ++19 ++19 +-27 +-6 ++27 ++10 ++29 ++19 +-23 ++17 +-10 ++5 ++13 +-15 +-25 ++13 ++3 ++14 +-37 ++6 ++18 ++18 ++89 ++57 +-17 ++39 +-2 ++27 ++13 +-18 +-17 ++9 ++1 ++14 +-4 ++10 +-19 ++18 ++7 ++13 ++8 ++7 ++11 +-7 +-9 +-3 +-4 ++9 ++24 +-3 +-16 +-23 ++7 +-16 +-1 +-15 +-12 ++19 +-2 ++14 +-21 +-2 +-12 +-14 +-62 ++22 ++7 ++66 ++26 +-21 ++61 ++5 +-6 ++11 +-7 ++18 ++67 ++38 ++18 ++30 +-18 +-120 ++24 +-18 +-16 ++31 +-102 ++11 ++149 ++96 ++9 +-40 ++69 ++13 ++757 ++55505 ++6 ++11 ++13 +-16 ++14 +-13 +-2 +-14 +-19 ++18 +-14 +-18 ++1 ++11 ++19 +-6 +-2 +-13 ++3 +-14 +-2 ++6 ++4 ++4 +-18 ++16 +-13 +-16 ++8 ++10 +-9 ++1 +-19 ++14 +-15 +-10 ++8 +-10 +-18 +-3 +-7 ++3 ++2 ++10 +-18 +-2 +-18 ++17 +-13 +-9 ++16 +-3 +-19 +-7 +-6 +-10 ++6 +-12 ++17 +-18 ++11 ++5 +-2 +-4 +-15 +-2 +-19 +-9 ++15 +-4 +-17 ++16 ++17 ++13 +-7 +-9 ++10 +-5 +-11 ++4 +-16 +-19 +-13 +-8 +-8 ++18 +-6 ++19 ++2 ++16 +-11 ++18 ++3 +-14 ++2 ++7 ++19 +-8 ++24 +-9 ++17 ++9 ++10 +-8 +-4 +-8 ++24 ++19 +-6 ++4 ++13 ++4 ++18 +-8 ++12 +-17 +-17 +-2 +-17 +-11 +-2 ++5 +-6 ++2 ++8 +-5 +-16 +-17 ++5 +-1 +-6 +-12 +-9 +-14 +-17 ++5 +-2 +-17 +-11 ++9 +-12 ++4 +-8 ++2 ++9 ++18 ++19 ++20 +-23 +-5 ++6 ++21 ++12 ++28 ++23 +-4 ++10 ++16 ++15 ++6 ++9 +-10 +-1 ++18 +-21 +-10 ++20 +-15 +-9 ++21 ++5 +-15 +-15 ++12 ++29 +-12 ++21 +-2 +-8 ++4 ++5 +-11 ++19 +-14 +-113326 diff --git a/2018/elixir/inputs/three.txt b/2018/elixir/inputs/three.txt new file mode 100644 index 0000000..b065622 --- /dev/null +++ b/2018/elixir/inputs/three.txt @@ -0,0 +1,1341 @@ +#1 @ 604,100: 17x27 +#2 @ 861,26: 23x24 +#3 @ 875,844: 29x20 +#4 @ 524,114: 24x24 +#5 @ 696,820: 26x19 +#6 @ 746,795: 19x14 +#7 @ 48,965: 24x29 +#8 @ 798,18: 27x18 +#9 @ 296,182: 17x13 +#10 @ 189,299: 27x16 +#11 @ 416,282: 13x16 +#12 @ 428,975: 13x15 +#13 @ 16,803: 20x25 +#14 @ 432,825: 12x18 +#15 @ 974,894: 22x12 +#16 @ 312,37: 27x12 +#17 @ 117,474: 17x24 +#18 @ 319,163: 25x18 +#19 @ 593,759: 15x21 +#20 @ 725,551: 22x18 +#21 @ 278,959: 18x20 +#22 @ 178,871: 24x29 +#23 @ 143,688: 25x24 +#24 @ 803,5: 17x16 +#25 @ 67,101: 12x12 +#26 @ 447,582: 10x29 +#27 @ 272,338: 18x27 +#28 @ 186,424: 12x12 +#29 @ 978,202: 11x11 +#30 @ 421,583: 18x19 +#31 @ 181,11: 21x20 +#32 @ 832,872: 25x23 +#33 @ 907,285: 22x17 +#34 @ 439,398: 13x25 +#35 @ 81,266: 26x10 +#36 @ 229,594: 18x20 +#37 @ 628,101: 11x11 +#38 @ 973,947: 25x16 +#39 @ 701,114: 13x11 +#40 @ 367,290: 19x29 +#41 @ 165,239: 28x26 +#42 @ 498,773: 7x14 +#43 @ 539,54: 11x16 +#44 @ 119,477: 9x3 +#45 @ 401,630: 24x17 +#46 @ 511,866: 22x14 +#47 @ 469,329: 11x24 +#48 @ 293,33: 11x14 +#49 @ 5,782: 24x16 +#50 @ 868,769: 21x21 +#51 @ 655,420: 22x25 +#52 @ 871,498: 4x3 +#53 @ 479,329: 21x26 +#54 @ 640,354: 26x16 +#55 @ 604,742: 27x28 +#56 @ 258,423: 12x25 +#57 @ 874,211: 23x20 +#58 @ 788,123: 23x18 +#59 @ 822,438: 13x12 +#60 @ 944,792: 21x18 +#61 @ 48,512: 22x20 +#62 @ 689,639: 26x10 +#63 @ 838,270: 21x15 +#64 @ 273,359: 25x26 +#65 @ 857,606: 18x22 +#66 @ 847,939: 15x26 +#67 @ 740,924: 23x26 +#68 @ 2,498: 11x18 +#69 @ 255,698: 15x28 +#70 @ 354,97: 24x28 +#71 @ 586,516: 16x26 +#72 @ 26,157: 24x25 +#73 @ 204,435: 24x23 +#74 @ 734,715: 28x28 +#75 @ 211,228: 17x14 +#76 @ 161,903: 21x15 +#77 @ 343,675: 17x26 +#78 @ 686,600: 29x27 +#79 @ 209,583: 27x22 +#80 @ 573,925: 29x15 +#81 @ 254,257: 27x18 +#82 @ 204,93: 15x18 +#83 @ 238,607: 12x13 +#84 @ 938,256: 29x13 +#85 @ 575,927: 17x9 +#86 @ 102,381: 21x21 +#87 @ 319,854: 20x17 +#88 @ 672,457: 26x10 +#89 @ 617,526: 26x28 +#90 @ 661,865: 18x23 +#91 @ 390,123: 20x13 +#92 @ 651,46: 17x15 +#93 @ 670,798: 20x19 +#94 @ 459,711: 13x10 +#95 @ 149,107: 16x18 +#96 @ 454,640: 22x24 +#97 @ 35,202: 14x28 +#98 @ 477,537: 23x28 +#99 @ 27,242: 13x20 +#100 @ 689,111: 26x28 +#101 @ 827,949: 18x20 +#102 @ 220,413: 19x18 +#103 @ 708,858: 18x17 +#104 @ 108,903: 18x19 +#105 @ 716,51: 10x19 +#106 @ 162,31: 13x24 +#107 @ 159,893: 27x10 +#108 @ 590,199: 11x5 +#109 @ 599,452: 29x27 +#110 @ 596,453: 16x28 +#111 @ 211,184: 19x13 +#112 @ 952,350: 26x16 +#113 @ 300,92: 11x20 +#114 @ 488,611: 21x13 +#115 @ 4,421: 11x26 +#116 @ 475,454: 29x13 +#117 @ 656,330: 20x17 +#118 @ 937,351: 27x27 +#119 @ 17,526: 28x27 +#120 @ 222,633: 12x17 +#121 @ 132,820: 28x19 +#122 @ 184,278: 14x18 +#123 @ 781,75: 23x15 +#124 @ 787,64: 16x22 +#125 @ 617,193: 14x15 +#126 @ 478,17: 20x27 +#127 @ 339,325: 27x22 +#128 @ 305,686: 29x18 +#129 @ 496,810: 25x25 +#130 @ 745,790: 24x23 +#131 @ 258,651: 20x24 +#132 @ 334,34: 17x11 +#133 @ 173,316: 22x19 +#134 @ 113,816: 28x15 +#135 @ 907,809: 20x14 +#136 @ 38,102: 25x27 +#137 @ 207,212: 12x22 +#138 @ 705,871: 21x15 +#139 @ 722,819: 23x25 +#140 @ 56,466: 24x26 +#141 @ 60,126: 25x13 +#142 @ 161,22: 15x18 +#143 @ 3,857: 21x17 +#144 @ 438,62: 9x9 +#145 @ 246,831: 24x11 +#146 @ 190,569: 27x21 +#147 @ 384,143: 19x27 +#148 @ 293,864: 13x26 +#149 @ 737,480: 18x15 +#150 @ 962,808: 24x24 +#151 @ 646,932: 26x24 +#152 @ 259,151: 16x22 +#153 @ 584,56: 3x14 +#154 @ 929,181: 10x18 +#155 @ 795,846: 15x26 +#156 @ 699,242: 27x24 +#157 @ 520,969: 27x18 +#158 @ 870,195: 10x29 +#159 @ 645,783: 27x14 +#160 @ 393,742: 23x20 +#161 @ 17,475: 28x22 +#162 @ 797,834: 18x10 +#163 @ 526,446: 19x16 +#164 @ 434,729: 20x17 +#165 @ 169,509: 20x18 +#166 @ 97,519: 24x22 +#167 @ 901,191: 17x22 +#168 @ 858,49: 13x26 +#169 @ 815,516: 18x18 +#170 @ 732,354: 12x22 +#171 @ 165,407: 20x19 +#172 @ 651,826: 22x26 +#173 @ 811,585: 14x23 +#174 @ 297,211: 28x17 +#175 @ 878,721: 24x18 +#176 @ 328,774: 17x23 +#177 @ 972,62: 20x20 +#178 @ 367,972: 28x16 +#179 @ 534,847: 11x21 +#180 @ 390,848: 26x15 +#181 @ 459,655: 18x23 +#182 @ 297,410: 29x14 +#183 @ 147,324: 12x17 +#184 @ 655,775: 17x23 +#185 @ 807,943: 28x18 +#186 @ 632,512: 18x23 +#187 @ 593,634: 15x13 +#188 @ 397,394: 20x26 +#189 @ 694,218: 29x12 +#190 @ 272,873: 21x22 +#191 @ 148,437: 20x24 +#192 @ 542,878: 22x25 +#193 @ 867,480: 16x24 +#194 @ 565,127: 17x24 +#195 @ 306,69: 23x25 +#196 @ 856,488: 23x27 +#197 @ 905,883: 13x29 +#198 @ 116,237: 25x29 +#199 @ 798,129: 20x23 +#200 @ 422,562: 16x22 +#201 @ 274,656: 17x12 +#202 @ 449,369: 25x11 +#203 @ 394,596: 25x14 +#204 @ 888,108: 22x27 +#205 @ 783,867: 29x16 +#206 @ 571,831: 21x17 +#207 @ 672,478: 27x17 +#208 @ 461,461: 26x17 +#209 @ 252,217: 10x14 +#210 @ 519,54: 27x26 +#211 @ 288,340: 13x13 +#212 @ 833,619: 17x24 +#213 @ 339,740: 15x17 +#214 @ 379,85: 26x23 +#215 @ 849,892: 25x22 +#216 @ 758,223: 23x26 +#217 @ 601,785: 27x15 +#218 @ 668,243: 14x26 +#219 @ 426,162: 16x13 +#220 @ 506,862: 23x17 +#221 @ 632,809: 22x23 +#222 @ 868,88: 11x25 +#223 @ 151,579: 10x26 +#224 @ 352,72: 28x21 +#225 @ 58,648: 19x18 +#226 @ 36,903: 18x25 +#227 @ 816,151: 10x29 +#228 @ 554,964: 14x16 +#229 @ 607,673: 20x13 +#230 @ 193,975: 26x18 +#231 @ 551,618: 15x14 +#232 @ 969,232: 17x14 +#233 @ 721,392: 29x29 +#234 @ 281,768: 23x25 +#235 @ 269,346: 29x20 +#236 @ 204,488: 11x24 +#237 @ 591,718: 10x23 +#238 @ 556,793: 25x16 +#239 @ 381,143: 19x28 +#240 @ 400,311: 24x24 +#241 @ 125,44: 25x29 +#242 @ 258,630: 13x16 +#243 @ 220,868: 28x14 +#244 @ 447,344: 18x25 +#245 @ 365,658: 16x16 +#246 @ 200,60: 15x19 +#247 @ 790,17: 13x18 +#248 @ 858,40: 10x22 +#249 @ 547,66: 22x10 +#250 @ 123,692: 15x16 +#251 @ 286,46: 25x27 +#252 @ 653,560: 29x14 +#253 @ 74,567: 16x11 +#254 @ 591,621: 14x26 +#255 @ 41,345: 11x25 +#256 @ 83,795: 10x23 +#257 @ 545,703: 16x18 +#258 @ 696,261: 23x21 +#259 @ 321,195: 10x10 +#260 @ 612,688: 11x19 +#261 @ 681,432: 7x14 +#262 @ 271,893: 27x23 +#263 @ 430,538: 12x23 +#264 @ 139,127: 12x20 +#265 @ 392,581: 29x18 +#266 @ 436,67: 12x14 +#267 @ 832,261: 15x28 +#268 @ 605,96: 28x10 +#269 @ 934,645: 26x16 +#270 @ 260,614: 14x29 +#271 @ 784,15: 13x16 +#272 @ 183,102: 26x17 +#273 @ 836,697: 15x23 +#274 @ 622,913: 15x20 +#275 @ 59,576: 19x16 +#276 @ 374,973: 26x17 +#277 @ 808,413: 19x29 +#278 @ 432,734: 15x14 +#279 @ 467,281: 25x28 +#280 @ 516,393: 20x10 +#281 @ 304,156: 10x27 +#282 @ 843,654: 20x19 +#283 @ 832,76: 15x17 +#284 @ 85,43: 22x24 +#285 @ 620,215: 23x17 +#286 @ 913,453: 20x23 +#287 @ 120,290: 15x14 +#288 @ 89,272: 11x26 +#289 @ 255,183: 25x17 +#290 @ 877,430: 28x26 +#291 @ 3,396: 20x27 +#292 @ 900,466: 27x29 +#293 @ 416,68: 23x16 +#294 @ 127,55: 19x13 +#295 @ 377,231: 28x12 +#296 @ 294,109: 10x21 +#297 @ 218,262: 17x23 +#298 @ 915,89: 28x21 +#299 @ 226,77: 19x29 +#300 @ 679,249: 17x26 +#301 @ 842,863: 27x21 +#302 @ 280,160: 28x10 +#303 @ 603,919: 15x10 +#304 @ 972,454: 21x12 +#305 @ 221,439: 17x14 +#306 @ 426,327: 26x19 +#307 @ 925,734: 19x28 +#308 @ 339,422: 22x14 +#309 @ 0,163: 29x22 +#310 @ 942,719: 13x17 +#311 @ 207,43: 15x18 +#312 @ 616,609: 20x29 +#313 @ 822,79: 12x18 +#314 @ 411,339: 28x18 +#315 @ 699,794: 24x13 +#316 @ 909,266: 12x25 +#317 @ 16,211: 27x27 +#318 @ 953,441: 22x16 +#319 @ 585,593: 12x21 +#320 @ 49,74: 21x23 +#321 @ 366,661: 15x14 +#322 @ 725,272: 28x26 +#323 @ 745,88: 29x11 +#324 @ 253,743: 15x26 +#325 @ 925,674: 20x20 +#326 @ 265,531: 18x15 +#327 @ 157,861: 13x8 +#328 @ 591,585: 18x23 +#329 @ 775,907: 19x22 +#330 @ 741,920: 11x24 +#331 @ 617,238: 24x15 +#332 @ 842,260: 19x16 +#333 @ 823,44: 28x26 +#334 @ 185,30: 22x13 +#335 @ 192,382: 24x16 +#336 @ 751,960: 17x23 +#337 @ 59,358: 23x28 +#338 @ 591,354: 19x20 +#339 @ 419,53: 28x10 +#340 @ 279,958: 29x29 +#341 @ 748,341: 24x20 +#342 @ 49,362: 12x29 +#343 @ 334,739: 25x10 +#344 @ 806,47: 20x15 +#345 @ 816,659: 26x19 +#346 @ 593,89: 17x13 +#347 @ 293,353: 24x19 +#348 @ 301,197: 27x23 +#349 @ 315,523: 29x16 +#350 @ 943,242: 27x16 +#351 @ 903,343: 15x16 +#352 @ 204,251: 15x15 +#353 @ 937,747: 15x17 +#354 @ 574,632: 20x25 +#355 @ 481,481: 17x17 +#356 @ 74,870: 16x21 +#357 @ 638,555: 11x18 +#358 @ 864,667: 23x12 +#359 @ 368,95: 23x20 +#360 @ 190,492: 28x22 +#361 @ 207,6: 21x21 +#362 @ 335,294: 17x29 +#363 @ 713,234: 15x17 +#364 @ 362,814: 28x29 +#365 @ 474,621: 23x21 +#366 @ 49,405: 20x12 +#367 @ 818,970: 28x15 +#368 @ 291,642: 27x12 +#369 @ 814,138: 23x22 +#370 @ 868,913: 25x13 +#371 @ 388,235: 18x13 +#372 @ 75,577: 21x19 +#373 @ 188,854: 23x22 +#374 @ 822,43: 21x18 +#375 @ 635,888: 28x10 +#376 @ 24,401: 26x19 +#377 @ 385,250: 25x18 +#378 @ 816,901: 20x11 +#379 @ 55,640: 18x18 +#380 @ 372,586: 12x25 +#381 @ 718,914: 29x28 +#382 @ 475,263: 12x19 +#383 @ 324,305: 15x29 +#384 @ 718,220: 27x17 +#385 @ 119,970: 25x21 +#386 @ 91,421: 27x15 +#387 @ 678,73: 10x26 +#388 @ 627,521: 24x15 +#389 @ 578,530: 23x13 +#390 @ 609,699: 29x19 +#391 @ 547,708: 8x4 +#392 @ 20,394: 28x14 +#393 @ 776,404: 10x11 +#394 @ 716,897: 14x27 +#395 @ 398,70: 22x22 +#396 @ 690,902: 14x22 +#397 @ 245,914: 17x15 +#398 @ 129,251: 17x17 +#399 @ 570,95: 12x20 +#400 @ 334,521: 17x28 +#401 @ 677,425: 15x27 +#402 @ 504,263: 20x20 +#403 @ 526,319: 16x21 +#404 @ 307,358: 26x11 +#405 @ 811,564: 28x20 +#406 @ 501,424: 24x26 +#407 @ 577,776: 24x24 +#408 @ 561,166: 17x22 +#409 @ 407,127: 28x20 +#410 @ 825,533: 28x22 +#411 @ 835,946: 18x14 +#412 @ 126,522: 15x17 +#413 @ 969,746: 24x29 +#414 @ 170,417: 25x23 +#415 @ 968,518: 19x21 +#416 @ 353,283: 19x17 +#417 @ 816,251: 27x25 +#418 @ 747,422: 28x11 +#419 @ 823,120: 13x15 +#420 @ 302,583: 8x4 +#421 @ 282,661: 19x28 +#422 @ 716,419: 28x29 +#423 @ 200,166: 18x25 +#424 @ 84,143: 25x22 +#425 @ 973,92: 24x27 +#426 @ 159,831: 20x10 +#427 @ 6,349: 11x29 +#428 @ 316,896: 18x20 +#429 @ 672,131: 23x26 +#430 @ 633,269: 28x29 +#431 @ 195,546: 15x25 +#432 @ 189,33: 24x17 +#433 @ 685,933: 16x28 +#434 @ 160,209: 10x28 +#435 @ 184,815: 24x25 +#436 @ 646,153: 21x16 +#437 @ 205,291: 21x24 +#438 @ 842,694: 11x26 +#439 @ 407,164: 25x15 +#440 @ 493,430: 11x22 +#441 @ 668,135: 11x8 +#442 @ 229,838: 21x4 +#443 @ 852,507: 21x16 +#444 @ 300,216: 15x24 +#445 @ 875,349: 21x19 +#446 @ 407,701: 27x18 +#447 @ 620,673: 21x24 +#448 @ 50,505: 21x21 +#449 @ 4,402: 18x27 +#450 @ 803,551: 22x27 +#451 @ 339,409: 29x20 +#452 @ 785,961: 21x16 +#453 @ 0,848: 10x22 +#454 @ 679,131: 21x24 +#455 @ 983,956: 10x27 +#456 @ 433,300: 17x21 +#457 @ 448,366: 12x28 +#458 @ 150,974: 15x15 +#459 @ 780,255: 21x13 +#460 @ 409,529: 25x16 +#461 @ 73,155: 24x19 +#462 @ 361,53: 26x18 +#463 @ 694,211: 23x23 +#464 @ 262,915: 11x23 +#465 @ 184,858: 10x10 +#466 @ 91,145: 15x12 +#467 @ 881,380: 10x15 +#468 @ 0,28: 10x17 +#469 @ 340,762: 14x28 +#470 @ 194,968: 16x18 +#471 @ 146,525: 29x28 +#472 @ 71,726: 27x22 +#473 @ 973,847: 21x29 +#474 @ 186,82: 18x11 +#475 @ 612,909: 23x24 +#476 @ 276,351: 12x19 +#477 @ 965,230: 21x14 +#478 @ 65,363: 10x24 +#479 @ 410,699: 16x11 +#480 @ 123,276: 23x11 +#481 @ 793,843: 10x15 +#482 @ 942,496: 16x13 +#483 @ 170,12: 21x16 +#484 @ 402,466: 27x18 +#485 @ 553,814: 23x23 +#486 @ 748,937: 21x29 +#487 @ 732,791: 27x22 +#488 @ 943,539: 14x14 +#489 @ 572,557: 21x20 +#490 @ 280,512: 27x11 +#491 @ 181,288: 20x23 +#492 @ 463,73: 24x19 +#493 @ 301,901: 13x11 +#494 @ 586,71: 16x21 +#495 @ 886,167: 23x26 +#496 @ 307,771: 27x22 +#497 @ 69,57: 27x19 +#498 @ 939,147: 26x13 +#499 @ 654,227: 10x19 +#500 @ 347,114: 25x17 +#501 @ 253,364: 27x20 +#502 @ 954,885: 14x18 +#503 @ 748,45: 19x23 +#504 @ 707,268: 23x16 +#505 @ 888,218: 11x18 +#506 @ 555,828: 28x22 +#507 @ 786,16: 29x21 +#508 @ 64,51: 25x26 +#509 @ 560,974: 29x22 +#510 @ 612,713: 18x10 +#511 @ 193,548: 21x25 +#512 @ 981,79: 15x20 +#513 @ 658,836: 18x13 +#514 @ 135,86: 28x24 +#515 @ 676,752: 22x24 +#516 @ 851,164: 18x25 +#517 @ 232,876: 26x12 +#518 @ 127,254: 11x16 +#519 @ 27,562: 13x14 +#520 @ 567,826: 26x21 +#521 @ 519,114: 20x27 +#522 @ 849,270: 20x29 +#523 @ 644,240: 15x19 +#524 @ 742,465: 16x12 +#525 @ 387,958: 10x14 +#526 @ 854,612: 15x14 +#527 @ 26,171: 15x11 +#528 @ 646,799: 24x22 +#529 @ 660,39: 10x20 +#530 @ 521,531: 29x12 +#531 @ 545,64: 11x15 +#532 @ 822,584: 27x24 +#533 @ 41,227: 18x25 +#534 @ 433,983: 13x13 +#535 @ 663,501: 20x25 +#536 @ 85,234: 7x20 +#537 @ 640,830: 11x13 +#538 @ 255,733: 10x29 +#539 @ 228,818: 19x25 +#540 @ 12,5: 17x29 +#541 @ 224,24: 16x10 +#542 @ 499,816: 27x14 +#543 @ 115,241: 24x11 +#544 @ 613,107: 29x19 +#545 @ 502,148: 22x13 +#546 @ 742,289: 15x12 +#547 @ 208,373: 10x24 +#548 @ 822,53: 12x21 +#549 @ 619,376: 20x25 +#550 @ 678,453: 10x25 +#551 @ 196,85: 11x10 +#552 @ 22,468: 25x18 +#553 @ 383,847: 21x10 +#554 @ 157,457: 20x12 +#555 @ 772,729: 18x16 +#556 @ 565,302: 28x26 +#557 @ 401,504: 12x29 +#558 @ 171,602: 26x21 +#559 @ 957,785: 27x23 +#560 @ 124,391: 25x24 +#561 @ 348,960: 13x26 +#562 @ 175,255: 16x10 +#563 @ 612,627: 15x22 +#564 @ 705,335: 22x11 +#565 @ 654,129: 10x28 +#566 @ 699,627: 13x23 +#567 @ 534,108: 20x28 +#568 @ 136,921: 28x20 +#569 @ 652,888: 15x11 +#570 @ 144,88: 21x19 +#571 @ 648,835: 14x20 +#572 @ 449,190: 26x15 +#573 @ 153,234: 14x16 +#574 @ 488,461: 15x21 +#575 @ 547,43: 18x26 +#576 @ 436,405: 19x13 +#577 @ 859,802: 10x26 +#578 @ 115,230: 14x23 +#579 @ 430,405: 13x12 +#580 @ 570,341: 13x28 +#581 @ 525,874: 26x17 +#582 @ 655,422: 15x13 +#583 @ 690,36: 14x19 +#584 @ 640,268: 15x26 +#585 @ 754,783: 10x13 +#586 @ 95,403: 10x23 +#587 @ 35,922: 15x19 +#588 @ 641,825: 26x11 +#589 @ 280,810: 23x17 +#590 @ 205,690: 14x18 +#591 @ 468,758: 20x24 +#592 @ 693,661: 27x29 +#593 @ 904,282: 19x14 +#594 @ 165,804: 14x20 +#595 @ 119,336: 21x14 +#596 @ 702,118: 20x15 +#597 @ 35,898: 10x15 +#598 @ 255,354: 22x18 +#599 @ 186,73: 12x12 +#600 @ 529,961: 21x22 +#601 @ 958,466: 21x20 +#602 @ 172,99: 13x14 +#603 @ 181,421: 27x22 +#604 @ 918,688: 22x14 +#605 @ 395,223: 23x22 +#606 @ 912,103: 14x20 +#607 @ 185,431: 14x20 +#608 @ 630,454: 12x24 +#609 @ 257,948: 17x26 +#610 @ 631,565: 28x23 +#611 @ 885,793: 17x14 +#612 @ 21,437: 11x24 +#613 @ 816,245: 14x25 +#614 @ 183,386: 26x27 +#615 @ 509,125: 11x28 +#616 @ 908,69: 11x26 +#617 @ 293,578: 22x13 +#618 @ 100,433: 17x23 +#619 @ 192,393: 20x24 +#620 @ 722,354: 19x13 +#621 @ 144,296: 11x15 +#622 @ 235,925: 29x22 +#623 @ 799,845: 22x18 +#624 @ 243,193: 20x11 +#625 @ 639,261: 13x17 +#626 @ 637,946: 22x16 +#627 @ 943,262: 27x28 +#628 @ 568,665: 28x13 +#629 @ 63,497: 14x23 +#630 @ 121,207: 20x29 +#631 @ 969,763: 18x23 +#632 @ 805,199: 23x26 +#633 @ 799,721: 26x17 +#634 @ 965,724: 29x25 +#635 @ 139,444: 19x19 +#636 @ 652,254: 11x12 +#637 @ 842,790: 23x20 +#638 @ 312,359: 11x18 +#639 @ 150,856: 24x18 +#640 @ 87,528: 20x21 +#641 @ 575,705: 26x17 +#642 @ 156,331: 21x15 +#643 @ 944,238: 14x26 +#644 @ 350,930: 26x26 +#645 @ 165,814: 12x17 +#646 @ 287,640: 17x25 +#647 @ 93,535: 5x4 +#648 @ 525,529: 26x10 +#649 @ 957,952: 17x19 +#650 @ 747,464: 13x22 +#651 @ 302,867: 28x12 +#652 @ 941,963: 25x14 +#653 @ 544,630: 26x11 +#654 @ 884,122: 19x14 +#655 @ 114,921: 16x27 +#656 @ 677,913: 18x13 +#657 @ 928,276: 29x11 +#658 @ 862,106: 23x16 +#659 @ 364,57: 29x26 +#660 @ 945,365: 13x18 +#661 @ 575,358: 20x19 +#662 @ 169,58: 26x26 +#663 @ 376,776: 25x20 +#664 @ 141,871: 12x21 +#665 @ 555,62: 18x18 +#666 @ 278,68: 18x13 +#667 @ 231,793: 22x22 +#668 @ 192,471: 21x26 +#669 @ 190,79: 14x13 +#670 @ 627,252: 11x25 +#671 @ 666,129: 17x26 +#672 @ 118,238: 25x20 +#673 @ 496,315: 18x10 +#674 @ 327,98: 28x11 +#675 @ 167,893: 28x21 +#676 @ 314,358: 16x26 +#677 @ 910,207: 18x27 +#678 @ 204,855: 16x20 +#679 @ 418,638: 26x29 +#680 @ 847,654: 27x17 +#681 @ 505,611: 28x17 +#682 @ 502,432: 13x11 +#683 @ 834,381: 14x27 +#684 @ 186,447: 29x29 +#685 @ 78,52: 22x13 +#686 @ 423,167: 11x13 +#687 @ 208,573: 20x16 +#688 @ 55,950: 11x18 +#689 @ 389,353: 29x16 +#690 @ 717,280: 20x22 +#691 @ 798,41: 23x17 +#692 @ 804,8: 20x10 +#693 @ 704,417: 27x27 +#694 @ 914,702: 27x25 +#695 @ 410,727: 16x16 +#696 @ 776,40: 23x17 +#697 @ 370,602: 14x13 +#698 @ 750,546: 28x11 +#699 @ 586,638: 10x18 +#700 @ 475,844: 12x17 +#701 @ 264,963: 21x23 +#702 @ 740,649: 16x14 +#703 @ 368,203: 16x24 +#704 @ 771,641: 24x29 +#705 @ 508,276: 28x26 +#706 @ 225,191: 10x12 +#707 @ 283,663: 23x17 +#708 @ 360,418: 26x23 +#709 @ 260,344: 28x17 +#710 @ 819,141: 18x20 +#711 @ 840,364: 10x14 +#712 @ 770,233: 23x15 +#713 @ 119,505: 16x11 +#714 @ 280,772: 16x10 +#715 @ 319,44: 22x19 +#716 @ 54,648: 26x19 +#717 @ 271,246: 20x20 +#718 @ 70,656: 20x29 +#719 @ 528,917: 26x15 +#720 @ 298,163: 19x23 +#721 @ 98,431: 29x28 +#722 @ 107,438: 19x13 +#723 @ 538,773: 26x23 +#724 @ 403,548: 21x27 +#725 @ 217,62: 14x27 +#726 @ 720,905: 15x11 +#727 @ 819,630: 26x24 +#728 @ 498,178: 11x13 +#729 @ 663,432: 20x13 +#730 @ 132,337: 18x21 +#731 @ 410,281: 28x28 +#732 @ 898,291: 13x10 +#733 @ 245,193: 18x20 +#734 @ 268,527: 20x18 +#735 @ 226,240: 20x26 +#736 @ 787,913: 24x10 +#737 @ 439,418: 21x29 +#738 @ 757,306: 11x25 +#739 @ 321,686: 29x21 +#740 @ 301,791: 15x11 +#741 @ 340,180: 15x22 +#742 @ 941,843: 26x13 +#743 @ 77,534: 18x12 +#744 @ 763,976: 17x14 +#745 @ 575,655: 27x18 +#746 @ 243,184: 29x11 +#747 @ 134,127: 26x27 +#748 @ 735,426: 22x11 +#749 @ 665,480: 13x14 +#750 @ 450,522: 27x20 +#751 @ 340,666: 29x20 +#752 @ 100,808: 21x13 +#753 @ 672,624: 29x23 +#754 @ 299,898: 28x22 +#755 @ 477,331: 14x27 +#756 @ 428,151: 22x20 +#757 @ 447,305: 19x17 +#758 @ 641,179: 15x11 +#759 @ 762,46: 17x11 +#760 @ 896,189: 18x27 +#761 @ 225,787: 3x5 +#762 @ 326,55: 11x22 +#763 @ 632,290: 29x15 +#764 @ 471,53: 17x26 +#765 @ 923,732: 28x22 +#766 @ 767,740: 13x10 +#767 @ 129,260: 18x19 +#768 @ 580,977: 18x20 +#769 @ 880,738: 20x19 +#770 @ 921,336: 19x11 +#771 @ 893,873: 15x11 +#772 @ 569,85: 27x26 +#773 @ 735,941: 14x27 +#774 @ 644,405: 23x29 +#775 @ 607,449: 14x11 +#776 @ 75,530: 23x24 +#777 @ 545,808: 14x11 +#778 @ 354,767: 16x11 +#779 @ 396,776: 10x17 +#780 @ 912,639: 27x14 +#781 @ 847,553: 19x24 +#782 @ 692,39: 9x4 +#783 @ 111,510: 18x19 +#784 @ 804,949: 19x24 +#785 @ 161,245: 20x21 +#786 @ 300,934: 21x12 +#787 @ 76,76: 19x11 +#788 @ 317,710: 26x10 +#789 @ 367,203: 17x14 +#790 @ 606,702: 24x26 +#791 @ 465,108: 19x10 +#792 @ 168,650: 10x11 +#793 @ 244,384: 17x25 +#794 @ 623,158: 26x29 +#795 @ 237,496: 28x18 +#796 @ 563,151: 21x17 +#797 @ 515,382: 15x19 +#798 @ 337,726: 24x22 +#799 @ 345,761: 27x10 +#800 @ 500,430: 19x18 +#801 @ 146,254: 10x15 +#802 @ 474,100: 19x18 +#803 @ 898,277: 19x17 +#804 @ 484,825: 22x20 +#805 @ 933,153: 10x28 +#806 @ 384,93: 27x26 +#807 @ 127,558: 27x14 +#808 @ 778,99: 15x21 +#809 @ 529,931: 14x23 +#810 @ 51,624: 15x28 +#811 @ 931,409: 12x14 +#812 @ 186,225: 16x11 +#813 @ 301,298: 19x19 +#814 @ 580,557: 18x19 +#815 @ 948,238: 18x20 +#816 @ 646,827: 22x15 +#817 @ 106,70: 19x24 +#818 @ 935,558: 26x24 +#819 @ 196,953: 20x13 +#820 @ 625,622: 21x10 +#821 @ 567,750: 27x19 +#822 @ 976,204: 12x27 +#823 @ 298,823: 28x10 +#824 @ 629,239: 18x13 +#825 @ 311,199: 14x16 +#826 @ 845,85: 23x16 +#827 @ 789,548: 23x17 +#828 @ 322,962: 10x29 +#829 @ 240,955: 22x27 +#830 @ 715,787: 25x16 +#831 @ 696,558: 11x13 +#832 @ 956,524: 27x24 +#833 @ 768,326: 18x21 +#834 @ 128,525: 14x15 +#835 @ 193,967: 11x20 +#836 @ 431,57: 21x18 +#837 @ 208,308: 20x22 +#838 @ 499,101: 27x19 +#839 @ 742,803: 13x10 +#840 @ 370,113: 16x27 +#841 @ 300,581: 21x10 +#842 @ 875,160: 26x10 +#843 @ 890,174: 12x11 +#844 @ 336,351: 17x16 +#845 @ 927,233: 23x16 +#846 @ 936,322: 25x26 +#847 @ 934,610: 23x24 +#848 @ 328,562: 10x27 +#849 @ 328,914: 25x10 +#850 @ 708,561: 26x10 +#851 @ 645,558: 12x27 +#852 @ 769,22: 26x11 +#853 @ 537,678: 25x26 +#854 @ 298,301: 27x14 +#855 @ 968,536: 13x12 +#856 @ 144,526: 27x19 +#857 @ 352,282: 16x12 +#858 @ 849,673: 22x22 +#859 @ 717,549: 14x21 +#860 @ 341,422: 12x17 +#861 @ 940,264: 22x11 +#862 @ 352,506: 18x29 +#863 @ 936,263: 15x29 +#864 @ 628,230: 28x13 +#865 @ 625,902: 28x21 +#866 @ 659,422: 13x13 +#867 @ 675,938: 21x22 +#868 @ 896,875: 5x5 +#869 @ 288,226: 20x29 +#870 @ 766,635: 11x13 +#871 @ 649,242: 18x20 +#872 @ 493,27: 23x16 +#873 @ 69,787: 22x25 +#874 @ 871,149: 12x27 +#875 @ 765,166: 24x11 +#876 @ 153,460: 14x16 +#877 @ 227,243: 20x15 +#878 @ 15,538: 12x19 +#879 @ 909,174: 20x24 +#880 @ 241,137: 23x26 +#881 @ 511,446: 22x20 +#882 @ 53,297: 18x15 +#883 @ 434,103: 13x14 +#884 @ 463,351: 19x25 +#885 @ 729,396: 19x16 +#886 @ 381,826: 14x10 +#887 @ 145,906: 17x14 +#888 @ 148,172: 5x4 +#889 @ 683,443: 21x20 +#890 @ 42,866: 27x28 +#891 @ 277,46: 29x11 +#892 @ 617,717: 22x15 +#893 @ 759,258: 22x18 +#894 @ 431,503: 26x26 +#895 @ 962,763: 24x10 +#896 @ 18,788: 19x23 +#897 @ 215,452: 27x22 +#898 @ 520,54: 15x23 +#899 @ 838,362: 17x20 +#900 @ 323,939: 27x29 +#901 @ 713,350: 14x13 +#902 @ 57,656: 14x17 +#903 @ 570,120: 20x27 +#904 @ 302,26: 21x22 +#905 @ 165,432: 18x10 +#906 @ 977,245: 12x18 +#907 @ 341,136: 25x27 +#908 @ 70,720: 16x10 +#909 @ 588,194: 28x22 +#910 @ 941,371: 19x23 +#911 @ 757,90: 4x6 +#912 @ 820,938: 11x16 +#913 @ 201,890: 15x19 +#914 @ 253,270: 15x17 +#915 @ 965,901: 28x26 +#916 @ 190,84: 11x25 +#917 @ 191,479: 28x19 +#918 @ 359,272: 13x12 +#919 @ 341,404: 10x27 +#920 @ 883,391: 26x26 +#921 @ 712,812: 12x13 +#922 @ 708,652: 27x25 +#923 @ 50,176: 25x21 +#924 @ 728,807: 26x11 +#925 @ 200,457: 16x11 +#926 @ 139,288: 29x24 +#927 @ 575,562: 12x12 +#928 @ 839,966: 11x28 +#929 @ 395,262: 17x26 +#930 @ 680,326: 16x26 +#931 @ 734,732: 16x23 +#932 @ 886,344: 26x21 +#933 @ 172,685: 26x14 +#934 @ 493,854: 28x14 +#935 @ 290,693: 17x25 +#936 @ 549,71: 11x17 +#937 @ 927,548: 15x15 +#938 @ 657,852: 11x20 +#939 @ 16,217: 29x21 +#940 @ 180,415: 15x13 +#941 @ 702,308: 26x28 +#942 @ 700,348: 27x21 +#943 @ 961,757: 16x21 +#944 @ 636,234: 25x29 +#945 @ 136,329: 17x12 +#946 @ 398,957: 26x19 +#947 @ 596,335: 14x24 +#948 @ 305,410: 12x10 +#949 @ 86,408: 26x16 +#950 @ 973,849: 16x10 +#951 @ 771,970: 24x16 +#952 @ 296,28: 13x14 +#953 @ 311,674: 11x19 +#954 @ 83,232: 13x27 +#955 @ 688,282: 12x26 +#956 @ 645,222: 13x17 +#957 @ 127,299: 22x28 +#958 @ 392,245: 15x27 +#959 @ 188,527: 10x29 +#960 @ 173,383: 20x21 +#961 @ 816,941: 10x25 +#962 @ 565,84: 18x15 +#963 @ 35,911: 13x16 +#964 @ 513,342: 19x24 +#965 @ 766,967: 29x20 +#966 @ 678,762: 19x21 +#967 @ 196,969: 25x22 +#968 @ 876,332: 22x23 +#969 @ 939,801: 12x23 +#970 @ 212,444: 27x17 +#971 @ 706,260: 17x22 +#972 @ 350,589: 23x10 +#973 @ 50,450: 23x17 +#974 @ 952,727: 18x18 +#975 @ 684,554: 17x18 +#976 @ 175,935: 11x15 +#977 @ 121,824: 16x13 +#978 @ 648,469: 10x13 +#979 @ 325,281: 19x16 +#980 @ 70,654: 27x16 +#981 @ 556,823: 11x12 +#982 @ 293,937: 16x28 +#983 @ 59,441: 26x11 +#984 @ 638,387: 29x10 +#985 @ 348,26: 18x20 +#986 @ 825,172: 11x29 +#987 @ 853,548: 19x12 +#988 @ 802,611: 20x23 +#989 @ 334,508: 23x28 +#990 @ 151,588: 14x19 +#991 @ 27,238: 20x29 +#992 @ 822,266: 28x12 +#993 @ 72,66: 27x11 +#994 @ 595,91: 10x21 +#995 @ 227,832: 26x15 +#996 @ 551,877: 24x17 +#997 @ 23,170: 29x16 +#998 @ 868,176: 20x23 +#999 @ 98,472: 27x16 +#1000 @ 167,986: 13x10 +#1001 @ 22,31: 16x15 +#1002 @ 50,570: 13x11 +#1003 @ 850,253: 21x18 +#1004 @ 257,506: 26x14 +#1005 @ 195,72: 11x17 +#1006 @ 818,8: 18x11 +#1007 @ 831,735: 20x16 +#1008 @ 622,247: 23x25 +#1009 @ 834,661: 26x26 +#1010 @ 673,516: 10x20 +#1011 @ 452,192: 13x14 +#1012 @ 405,36: 21x21 +#1013 @ 929,484: 24x19 +#1014 @ 744,650: 12x16 +#1015 @ 137,878: 12x16 +#1016 @ 619,194: 13x28 +#1017 @ 9,349: 22x23 +#1018 @ 648,478: 23x16 +#1019 @ 237,80: 21x19 +#1020 @ 419,68: 13x19 +#1021 @ 312,688: 19x11 +#1022 @ 588,398: 14x18 +#1023 @ 146,688: 17x28 +#1024 @ 527,852: 25x18 +#1025 @ 789,551: 15x20 +#1026 @ 68,90: 26x26 +#1027 @ 4,789: 24x11 +#1028 @ 263,545: 24x14 +#1029 @ 858,867: 20x29 +#1030 @ 254,325: 10x27 +#1031 @ 212,183: 14x12 +#1032 @ 689,606: 16x29 +#1033 @ 627,961: 18x17 +#1034 @ 91,572: 10x14 +#1035 @ 969,515: 17x29 +#1036 @ 628,50: 21x22 +#1037 @ 88,963: 23x13 +#1038 @ 315,579: 22x12 +#1039 @ 63,211: 22x21 +#1040 @ 591,981: 3x3 +#1041 @ 934,168: 15x25 +#1042 @ 338,766: 12x26 +#1043 @ 818,110: 21x29 +#1044 @ 683,326: 17x19 +#1045 @ 390,568: 22x26 +#1046 @ 331,879: 17x17 +#1047 @ 155,71: 29x10 +#1048 @ 321,807: 15x19 +#1049 @ 806,644: 23x16 +#1050 @ 413,439: 12x19 +#1051 @ 859,881: 24x19 +#1052 @ 284,898: 20x10 +#1053 @ 599,452: 23x28 +#1054 @ 304,804: 21x10 +#1055 @ 297,667: 26x18 +#1056 @ 10,139: 21x25 +#1057 @ 674,789: 21x28 +#1058 @ 863,496: 17x10 +#1059 @ 657,940: 21x25 +#1060 @ 915,397: 28x20 +#1061 @ 250,374: 10x11 +#1062 @ 157,50: 26x28 +#1063 @ 763,317: 18x26 +#1064 @ 950,65: 29x14 +#1065 @ 61,309: 11x21 +#1066 @ 831,907: 28x23 +#1067 @ 782,939: 28x26 +#1068 @ 865,52: 26x24 +#1069 @ 242,668: 16x13 +#1070 @ 670,214: 28x26 +#1071 @ 459,762: 27x10 +#1072 @ 408,320: 11x15 +#1073 @ 443,353: 29x23 +#1074 @ 515,974: 22x13 +#1075 @ 876,835: 17x20 +#1076 @ 976,898: 8x4 +#1077 @ 850,639: 15x25 +#1078 @ 53,178: 16x7 +#1079 @ 186,41: 28x28 +#1080 @ 945,457: 19x13 +#1081 @ 438,828: 27x26 +#1082 @ 851,257: 10x25 +#1083 @ 365,154: 14x19 +#1084 @ 608,514: 25x21 +#1085 @ 527,209: 18x26 +#1086 @ 321,307: 15x14 +#1087 @ 676,256: 21x10 +#1088 @ 169,988: 5x4 +#1089 @ 81,650: 19x25 +#1090 @ 890,796: 27x14 +#1091 @ 935,538: 26x23 +#1092 @ 470,316: 21x21 +#1093 @ 901,285: 22x19 +#1094 @ 794,582: 21x15 +#1095 @ 157,893: 22x13 +#1096 @ 231,964: 27x19 +#1097 @ 812,91: 23x13 +#1098 @ 20,552: 12x15 +#1099 @ 820,958: 10x16 +#1100 @ 412,425: 23x20 +#1101 @ 180,903: 25x10 +#1102 @ 286,915: 18x23 +#1103 @ 580,53: 20x21 +#1104 @ 315,708: 18x18 +#1105 @ 258,886: 29x18 +#1106 @ 945,848: 12x16 +#1107 @ 332,741: 25x16 +#1108 @ 783,116: 22x15 +#1109 @ 436,576: 22x14 +#1110 @ 585,570: 13x24 +#1111 @ 364,974: 12x14 +#1112 @ 833,72: 11x17 +#1113 @ 582,829: 18x10 +#1114 @ 208,418: 26x15 +#1115 @ 496,768: 12x23 +#1116 @ 688,120: 18x23 +#1117 @ 124,392: 25x29 +#1118 @ 171,457: 19x12 +#1119 @ 678,745: 16x10 +#1120 @ 354,674: 23x26 +#1121 @ 284,569: 14x26 +#1122 @ 357,68: 11x24 +#1123 @ 7,499: 13x29 +#1124 @ 513,569: 16x12 +#1125 @ 206,565: 10x17 +#1126 @ 162,5: 17x13 +#1127 @ 230,475: 24x10 +#1128 @ 909,803: 23x28 +#1129 @ 455,315: 20x24 +#1130 @ 498,323: 13x27 +#1131 @ 323,856: 16x26 +#1132 @ 178,234: 24x17 +#1133 @ 391,97: 29x19 +#1134 @ 226,474: 26x28 +#1135 @ 95,24: 28x29 +#1136 @ 316,892: 16x18 +#1137 @ 243,203: 25x23 +#1138 @ 844,878: 18x22 +#1139 @ 335,674: 11x28 +#1140 @ 93,137: 25x22 +#1141 @ 814,63: 22x13 +#1142 @ 124,309: 29x16 +#1143 @ 181,64: 16x28 +#1144 @ 443,101: 11x22 +#1145 @ 427,590: 11x20 +#1146 @ 160,512: 13x21 +#1147 @ 476,322: 17x13 +#1148 @ 94,527: 22x12 +#1149 @ 676,636: 14x20 +#1150 @ 335,942: 28x11 +#1151 @ 15,432: 15x19 +#1152 @ 273,73: 19x29 +#1153 @ 476,541: 26x29 +#1154 @ 118,976: 17x21 +#1155 @ 682,782: 27x22 +#1156 @ 885,414: 10x23 +#1157 @ 459,258: 21x26 +#1158 @ 125,418: 11x28 +#1159 @ 132,421: 14x15 +#1160 @ 270,344: 17x23 +#1161 @ 156,686: 25x19 +#1162 @ 67,853: 10x14 +#1163 @ 269,439: 18x24 +#1164 @ 861,205: 26x10 +#1165 @ 401,508: 22x29 +#1166 @ 294,652: 26x13 +#1167 @ 95,383: 19x27 +#1168 @ 342,943: 18x15 +#1169 @ 522,233: 27x22 +#1170 @ 678,245: 15x16 +#1171 @ 301,941: 12x5 +#1172 @ 593,949: 16x24 +#1173 @ 116,251: 12x10 +#1174 @ 709,665: 16x20 +#1175 @ 608,938: 13x26 +#1176 @ 861,69: 28x22 +#1177 @ 101,463: 11x13 +#1178 @ 641,958: 25x11 +#1179 @ 788,630: 21x10 +#1180 @ 593,390: 13x16 +#1181 @ 146,166: 11x15 +#1182 @ 514,702: 26x22 +#1183 @ 815,377: 29x16 +#1184 @ 422,316: 25x23 +#1185 @ 881,356: 19x26 +#1186 @ 157,72: 12x20 +#1187 @ 382,467: 25x17 +#1188 @ 662,936: 17x11 +#1189 @ 947,798: 24x29 +#1190 @ 858,491: 15x11 +#1191 @ 829,867: 17x19 +#1192 @ 903,873: 20x25 +#1193 @ 111,568: 22x26 +#1194 @ 299,939: 23x12 +#1195 @ 333,101: 11x17 +#1196 @ 626,357: 19x18 +#1197 @ 562,323: 25x23 +#1198 @ 296,939: 8x23 +#1199 @ 804,70: 21x22 +#1200 @ 526,566: 21x29 +#1201 @ 776,404: 19x25 +#1202 @ 452,102: 21x25 +#1203 @ 666,72: 15x21 +#1204 @ 228,96: 13x18 +#1205 @ 600,698: 20x11 +#1206 @ 188,308: 25x13 +#1207 @ 70,513: 11x22 +#1208 @ 132,234: 19x27 +#1209 @ 639,463: 14x10 +#1210 @ 174,253: 17x14 +#1211 @ 256,702: 29x23 +#1212 @ 116,303: 14x20 +#1213 @ 972,186: 16x21 +#1214 @ 209,228: 27x15 +#1215 @ 505,662: 27x18 +#1216 @ 935,485: 19x19 +#1217 @ 788,962: 29x25 +#1218 @ 929,554: 13x18 +#1219 @ 118,283: 26x20 +#1220 @ 161,294: 14x24 +#1221 @ 186,378: 29x26 +#1222 @ 963,268: 14x17 +#1223 @ 131,553: 25x26 +#1224 @ 184,207: 27x13 +#1225 @ 603,648: 24x28 +#1226 @ 355,340: 17x17 +#1227 @ 330,916: 15x4 +#1228 @ 32,164: 11x11 +#1229 @ 298,803: 12x12 +#1230 @ 716,821: 15x12 +#1231 @ 953,524: 24x16 +#1232 @ 953,623: 14x25 +#1233 @ 38,469: 27x15 +#1234 @ 210,49: 18x29 +#1235 @ 313,813: 22x26 +#1236 @ 76,569: 11x6 +#1237 @ 676,451: 23x14 +#1238 @ 155,607: 26x27 +#1239 @ 200,799: 21x28 +#1240 @ 345,343: 23x14 +#1241 @ 587,737: 15x26 +#1242 @ 943,426: 11x14 +#1243 @ 416,529: 23x10 +#1244 @ 25,513: 26x21 +#1245 @ 936,241: 19x20 +#1246 @ 783,119: 25x19 +#1247 @ 745,555: 12x21 +#1248 @ 94,950: 15x23 +#1249 @ 412,491: 17x20 +#1250 @ 606,732: 19x25 +#1251 @ 36,133: 28x28 +#1252 @ 105,815: 25x15 +#1253 @ 203,841: 29x27 +#1254 @ 816,700: 21x23 +#1255 @ 303,351: 15x20 +#1256 @ 505,605: 23x10 +#1257 @ 151,551: 21x22 +#1258 @ 646,49: 14x26 +#1259 @ 10,554: 15x19 +#1260 @ 40,105: 20x20 +#1261 @ 790,573: 10x10 +#1262 @ 717,651: 11x25 +#1263 @ 942,288: 19x10 +#1264 @ 944,424: 19x14 +#1265 @ 697,283: 27x21 +#1266 @ 27,397: 14x19 +#1267 @ 328,978: 11x19 +#1268 @ 237,671: 17x16 +#1269 @ 297,217: 29x15 +#1270 @ 699,96: 12x27 +#1271 @ 305,70: 25x19 +#1272 @ 377,394: 10x27 +#1273 @ 194,546: 29x25 +#1274 @ 861,769: 23x11 +#1275 @ 153,114: 4x5 +#1276 @ 155,937: 23x24 +#1277 @ 945,476: 14x16 +#1278 @ 640,413: 29x17 +#1279 @ 218,785: 19x11 +#1280 @ 974,182: 13x29 +#1281 @ 654,260: 16x12 +#1282 @ 201,688: 22x26 +#1283 @ 221,636: 15x13 +#1284 @ 813,927: 12x16 +#1285 @ 464,718: 14x24 +#1286 @ 278,759: 18x23 +#1287 @ 378,962: 15x16 +#1288 @ 672,121: 24x29 +#1289 @ 926,704: 16x13 +#1290 @ 409,584: 15x28 +#1291 @ 215,935: 15x24 +#1292 @ 180,411: 22x10 +#1293 @ 361,601: 29x10 +#1294 @ 617,187: 18x20 +#1295 @ 256,517: 29x18 +#1296 @ 173,456: 24x28 +#1297 @ 346,971: 12x23 +#1298 @ 598,796: 29x19 +#1299 @ 171,927: 19x25 +#1300 @ 135,676: 19x18 +#1301 @ 879,366: 29x19 +#1302 @ 159,651: 16x17 +#1303 @ 0,27: 26x14 +#1304 @ 803,849: 20x10 +#1305 @ 495,169: 14x25 +#1306 @ 753,466: 12x12 +#1307 @ 953,744: 24x26 +#1308 @ 254,528: 27x12 +#1309 @ 22,404: 11x10 +#1310 @ 771,154: 21x27 +#1311 @ 856,358: 25x16 +#1312 @ 706,50: 13x18 +#1313 @ 647,319: 26x20 +#1314 @ 939,819: 24x29 +#1315 @ 520,794: 26x13 +#1316 @ 69,882: 29x25 +#1317 @ 297,368: 12x10 +#1318 @ 510,966: 19x15 +#1319 @ 909,108: 15x22 +#1320 @ 140,262: 13x24 +#1321 @ 340,681: 22x15 +#1322 @ 104,70: 19x16 +#1323 @ 425,278: 22x11 +#1324 @ 148,88: 13x22 +#1325 @ 514,676: 22x16 +#1326 @ 466,102: 27x23 +#1327 @ 228,808: 10x28 +#1328 @ 708,527: 19x26 +#1329 @ 81,219: 20x12 +#1330 @ 947,816: 29x10 +#1331 @ 163,968: 22x10 +#1332 @ 518,347: 28x27 +#1333 @ 141,283: 21x28 +#1334 @ 792,960: 17x26 +#1335 @ 822,728: 29x21 +#1336 @ 813,238: 10x13 +#1337 @ 534,317: 13x29 +#1338 @ 864,348: 13x24 +#1339 @ 466,287: 22x19 +#1340 @ 952,280: 19x26 +#1341 @ 425,57: 26x14 diff --git a/2018/elixir/inputs/two.txt b/2018/elixir/inputs/two.txt new file mode 100644 index 0000000..6f2da1d --- /dev/null +++ b/2018/elixir/inputs/two.txt @@ -0,0 +1,250 @@ +bvhfawknyoqsudzrpgslecmtkj +bpufawcnyoqxldzrpgsleimtkj +bvhfawcnyoqxqdzrplsleimtkf +bvhoagcnyoqxudzrpgsleixtkj +bxvfgwcnyoqxudzrpgsleimtkj +bvqfawcngoqxudzrpgsleiktkj +bvhfawcnmoqxuyzrpgsleimtkp +bvheawcnyomxsdzrpgsleimtkj +bcdfawcnyoqxudzrpgsyeimtkj +bvhpawcnyoqxudzrpgsteimtkz +bxhfawcnyozxudzrpgsleimtoj +bvhfdwcnyozxudzrposleimtkj +bvpfawcnyotxudzrpgsleimtkq +bvhfpwccyoqxudzrpgslkimtkj +bvhfawcnyoqxudirpgsreimtsj +bvhfawcnyoqxudzppgbleemtkj +bvhzawcnyoqxudqrpgslvimtkj +bvhfawclyoqxudirpgsleimtka +bvhgawfnyoqxudzrpguleimtkj +bvhfazcnytqxudzrpgslvimtkj +bvhfawcnygxxudzrpgjleimtkj +bxhfawcnyoqxudzipgsleimtxj +bvhptwcnyoqxudzrpgsleimtmj +bzhfawcgyooxudzrpgsleimtkj +bvhjlwcnyokxudzrpgsleimtkj +bvhfawcnyoqxudbrmgslesmtkj +bvhfawcnysixudzwpgsleimtkj +bvhflwcnymqxxdzrpgsleimtkj +bvifawcnyoyxudzrpgsleimtvj +bvhfawcnyofxudlrpgsheimtkj +bvhbawcmyoqxudzrpggleimtkj +bhhxgwcnyoqxudzrpgsleimtkj +bvhfawgnyoqxbdzrpgsleimfkj +bvhfawcnyoqxudcrngsleimykj +bvhfawcnyofxudzrpgslebgtkj +bvhfaocnybqxudzapgsleimtkj +bvhxawcnyodxudzrpfsleimtkj +bchfawcnyoqxudrrtgsleimtkj +bvhfawcqyoqxudzdpgsltimtkj +bvhfawknyoqxudzrpnsleimtbj +cihfawcnyoqxudirpgsleimtkj +bvlfawpnyoqxudzrpgslgimtkj +bulfawcnyoqbudzrpgsleimtkj +bvhfajcnyoqkudzrpgsoeimtkj +bvhrakcnyoqxudzrpgsleimjkj +bvbftwcnyoqxuvzrpgsleimtkj +bvhfhwcnyoqxudzrpgslelmtbj +bvhyawcntoqxudzrpgsleimtuj +xvhuawcnyoqxuqzrpgsleimtkj +pvhfawcnyoqxudzdpglleimtkj +bvhfawsnyoqxudzrpgvlefmtkj +bvhfawcnyoqxudzrpgepeiwtkj +bvhfawcnyoqxudzrphsleittkr +dvhfawcnyoqxudzrpkslzimtkj +bvhfawpnyoqxudzrpgmlcimtkj +bvhsawcnyzqxudzrpgsaeimtkj +bdhfawcnyoqxudzrpasleiwtkj +bvhfawbnyoqxpdbrpgsleimtkj +mvhfawwnyoqxujzrpgsleimtkj +bvafawcnyoyxudzrpgsleidtkj +bvhyawcnyoqxudztpgzleimtkj +besfawcnyoqxudzrpgsleimdkj +bvhfawcnyoqxudrrpgsjeimjkj +xvhfkwcnyoqxudzcpgsleimtkj +bvhfawcnyeqdudzrpgzleimtkj +bvhfuwcnybqxudzrpgsleimttj +lvhfawcnyoqhudzdpgsleimtkj +bvhfawcnyoqxudzrpgslevwtnj +bvhfadcnzoqxxdzrpgsleimtkj +bvsfawcnyoqxpdzrpgileimtkj +bzhfaycnyoqxudzrpgsxeimtkj +bwhfdwcnyoqxudzrpgsleimtkz +bvhfawcnyoqxudzrpgsjlimtkm +bvhfawcnyoqxudsrwgsleimtlj +bbhfalynyoqxudzrpgsleimtkj +bvhfawcnyeqxudzrpglleimtkr +bvhfawnnboqxurzrpgsleimtkj +yvhfawcnyoqxudzrpgslzimtpj +bvhfjwcnyoqxqdxrpgsleimtkj +bthfawcnyoqfudzrpgslhimtkj +bvhfawchuoqxudzqpgsleimtkj +bvhfawcndoqxudzrugsleimrkj +bvhfawcnnoqxjdzrpgsleidtkj +bvhpawcnyoqkudzrpgsleimtzj +bvhfaiinyoqxudzopgsleimtkj +bvhfawcnyxqxuizrigsleimtkj +bvnfawcnyoqxudzqpgsleimbkj +bvnfawcnyoeyudzrpgsleimtkj +bvhfawcnyoqxudarpgsieimtoj +bthcawcnyoqxudlrpgsleimtkj +bvhfnwcnyozxudzrpgsleomtkj +bpwfawcnyoqxudzrpgskeimtkj +bvhfapcnyoqxudnrpgsxeimtkj +bvhfdwcnyoqxubzrxgsleimtkj +fvhfawcnyoqxjdzrpgsleirtkj +bvhfawcneoqxudzrvzsleimtkj +bvhaawcnyoqxudzrpgsleimtex +bvhfawcnyojxudvrpgsleimckj +bvlfawcnyoqxddzrpgsleimtko +bvhfawclfoqxudzrpgsleiktkj +bvhfawciyobxudzrpgkleimtkj +bvhfpwcnyoqxudzrpgsqeimtkd +bvhyawcnyyqxudzrkgsleimtkj +bvhfawcncoqxudzrphsaeimtkj +bvhfawmnyoqxudzrpgifeimtkj +bvhfawcjyoqxudzjpgszeimtkj +bohfawcnwoqxudzrpgsleimwkj +bvhfaucnyoqxudzrpgfluimtkj +bvhfawlnyoqgudzrpgwleimtkj +bmhfawcnyoqxndzrpgsleymtkj +bvhfawcngoqxudzrpzxleimtkj +bihfawcnyoqxudrrpgsleimokj +lvhfawcnylqxudzrpgsleintkj +bvhfawcnyoqvugzrqgsleimtkj +bvhfawcnyoqxudzgpgslqimtij +bvhfawcnyoqludzrpgslnimtcj +hvhfawcnyolxudzrpgsmeimtkj +nvhfawcdkoqxudzrpgsleimtkj +bvhfawcnyoqxkdzrggsneimtkj +bvhfawnnyoqxudzrpgqleibtkj +bvhfawyuyoqxudzrhgsleimtkj +wvhfbwcnyoqxtdzrpgsleimtkj +bvhfawcnyoqxedzzpgoleimtkj +bvhfawcnioqxunzrpgsleimtnj +bvhfawctyoqxudzrpgsldkmtkj +bvhfawcnyonxudzrpgsleitpkj +bvefawcnyoqaudzhpgsleimtkj +bvhfawcnyxqxudzrpgslelmbkj +bvhfamrnyoqxudzrpgsleimgkj +bvhfaqcnyoqxudzrpgsaeimekj +bvhfawcnyoqcidzrpgsleimvkj +bvhfawcnnorxudzrpgsmeimtkj +bvroawcnyoqxudzrpgsleiwtkj +bvhfwwcnyoqxudzrpaslewmtkj +bvsfawcnyoqxudzcpgszeimtkj +bkhfmwcnyoqjudzrpgsleimtkj +bvtfawcnyoqxudzrcgslecmtkj +bvhfawcnypzxudzrpgsleimtkv +bvhfawcnyoqzudzrfgtleimtkj +bvhpawcnyoqxudhrpgsleimtko +tvhfawcnyoqxudzxpfsleimtkj +bvhfawccyofxudzrpqsleimtkj +bvnfawtnyoqxuzzrpgsleimtkj +bvhfamcnuwqxudzrpgsleimtkj +bvhfawcfyoqxudjrpgsleimrkj +bvhpalcnyoqxudzrpgslexmtkj +bvhfawcnjsqxudzlpgsleimtkj +bvhfafcnioqxydzrpgsleimtkj +bvzfawcnyxqxudzgpgsleimtkj +bvhzawcnyoqxudzrpgslewctkj +bvhiawcnhoqrudzrpgsleimtkj +bvhfawcnyoqxuszrggslenmtkj +bvhfowcnyoqxudzrptseeimtkj +behfawfnyoqxudzrpgsleimlkj +lvhfawcnyoqxudsrpgvleimtkj +bvhfawnnyaqxudzrpgsqeimtkj +lvhfawcnfoqxvdzrpgsleimtkj +svhxawcnyoqxudzrpqsleimtkj +bvhfawqnfoqxudzrpgsleimkkj +bvhfafcnyoqcudzrpgsleimtcj +bvhfyfcntoqxudzrpgsleimtkj +bvhfpwcnyoqxudzrpgsleimumj +bvhfawccyoqxudzrqgrleimtkj +bvhfawqnyoqxudzbpgsleimkkj +bvhflwcnyoqxudzrpxsleemtkj +bvhfawcnyoqxuezrpgslehrtkj +bvhfawceyoqxudzrpgsleimswj +bvhfawcncohgudzrpgsleimtkj +bahfawcnyoqxgdzrpgsleamtkj +yvhfawcnyoqxudzrppslrimtkj +fvhfawcmyoqxudzrpgskeimtkj +bvylawsnyoqxudzrpgsleimtkj +bvhfswcnyyqxedzrpgsleimtkj +fvrfawcnyoqxudzrpgzleimtkj +bvhfawcnyoqxuvzrpgslermtks +bvhkawccyoqxudzcpgsleimtkj +bvhfaobnyoqxudzrprsleimtkj +bvbfawcnyoqxudirpgsleimhkj +bvhfawcnyoqxudzvpgsueimtgj +bvhxawcnyoqxudzrpgsleimtgi +svhfawcjyoqxuszrpgsleimtkj +bvnfawcnyoeyudzrpgsldimtkj +bvhfawcnyoqxuhzrpgsleimcki +bvhfvwcnyoqxudzizgsleimtkj +bvhfapznyohxudzrpgsleimtkj +bvhfaelnyosxudzrpgsleimtkj +xvhfawcnmoqxuhzrpgsleimtkj +bjhfawcnyaqxutzrpgsleimtkj +bvhfawcnyohxudzrpgslgnmtkj +bvhfawcnyoqxudzrppsreimtkx +fvhfapcnyoqyudzrpgsleimtkj +qvhfafcnyoqxudorpgsleimtkj +bvhfawcnyoqxedzrwgsleimtvj +bvhfawgnyoqxudzupgqleimtkj +bvhfowctyoqxudzrpgbleimtkj +bvhwawcnyoqxudzapgslvimtkj +bvhfadcnyoqxudzrugsleimtuj +bvhfawcnyosxudzlpgsleamtkj +bvhfawcnywqxuqzrpgsloimtkj +bvhfawcnyoqxumzrpgvlfimtkj +bvhfawcgyoqxbdzrpgsleomtkj +bvhfahcnyoqwudzrfgsleimtkj +gvbfawcnyrqxudzrpgsleimtkj +svhfawcnyoqxudlrpgsleimtkx +avhfafcnyoqxuhzrpgsleimtkj +bvhfawcsyoqxuazrpgsleimtej +bvofawcnyoqxudzrpgsteimtkf +bvhfajcnyoqxudzqpgszeimtkj +bvhfawcsyoqxudzrmgsleiktkj +mvhfawcnyoqxudzrpgkluimtkj +bvhfawcnhoqxudzrpgslwhmtkj +bmhaawsnyoqxudzrpgsleimtkj +bvhfawcnyoqxudzhpgsleimhyj +bvhfxwcnyoqxsdzypgsleimtkj +bvhpawcyyoqxuczrpgsleimtkj +bvomawcnyovxudzrpgsleimtkj +bvhfawcnjvqxudzrpgsleimtkt +nvhfawcnyqqxudzrpgsleittkj +bvhiawcnyzqxudzrpysleimtkj +bvhdawcnyoqxukzrpgsleimtuj +bvhfawcnyyxxudzrpgslzimtkj +hvhfawcnyoqxudzupgslemmtkj +byhfawknyoqxudzrpgsleimtkb +bvhfawcnyoqxudzrpasleihakj +bvafahcnyaqxudzrpgsleimtkj +bkhfawcnyoqxudzrpgllepmtkj +bghfawcnycqxuzzrpgsleimtkj +bvhfawcnyoqxudzrbgeleimtkl +bvhfascnyoqgudzrpgsveimtkj +bvhfawnnyoqxudzrpgsleimtdl +bvhqawcnyoqxudzrpgsleimgrj +bvhsawdwyoqxudzrpgsleimtkj +bvhfawcnyoqxudzrpgaleipttj +bvhfawcnrlqxudzrbgsleimtkj +bvhfdwcnyoqxudzqpcsleimtkj +bvhfawcnyoqxudzopgslexmokj +bvhfawcoyoqxudzrpghlewmtkj +bvhfozcnykqxudzrpgsleimtkj +bvhfawcnyoqxuvzrpgslrimtkr +bvhfrncnyoqrudzrpgsleimtkj +bvhfawcnyocxuizrpgslefmtkj +bvhfawywyoqxudzrpgsleimxkj +bvhfawcnyoqxugzrpgslrimtij +bvtfawcnyoqxudzcpgsleimtfj +bvhfawcnyoqxuzzspgsleimtkz +bvhfawcnzoqxvdzrpgslsimtkj +bvhfzwcnyoqxudzrpgslenmhkj +bvhfkccnyoqxudzrpgzleimtkj +bvhfawcnyoqzudzrpgslhimwkj +bzhfawvnyooxudzrpgsleimtkj diff --git a/2018/elixir/lib/advent_of_code_2018.ex b/2018/elixir/lib/advent_of_code_2018.ex new file mode 100644 index 0000000..a209525 --- /dev/null +++ b/2018/elixir/lib/advent_of_code_2018.ex @@ -0,0 +1,18 @@ +defmodule AdventOfCode2018 do + @moduledoc """ + Documentation for AdventOfCode2018. + """ + + @doc """ + Hello world. + + ## Examples + + iex> AdventOfCode2018.hello() + :world + + """ + def hello do + :world + end +end diff --git a/2018/elixir/lib/one.ex b/2018/elixir/lib/one.ex new file mode 100644 index 0000000..8cbc9ae --- /dev/null +++ b/2018/elixir/lib/one.ex @@ -0,0 +1,16 @@ +defmodule One do + def part1(list, initial_freq \\ 0), do: initial_freq + Enum.sum(list) + + def part2(list, initial_freq \\ 0) do + list + |> Stream.cycle() + |> Enum.reduce_while({initial_freq, MapSet.new([initial_freq])}, &part2_reducer/2) + end + + def part2_reducer(i, {last, set}) do + case (i + last) in set do + true -> {:halt, i + last} + _ -> {:cont, {i + last, MapSet.put(set, i + last)}} + end + end +end diff --git a/2018/elixir/lib/three.ex b/2018/elixir/lib/three.ex new file mode 100644 index 0000000..4f80785 --- /dev/null +++ b/2018/elixir/lib/three.ex @@ -0,0 +1,73 @@ +defmodule Three do + @dimension_parser ~r/\#(\d+)\s@\s(\d+),(\d+):\s(\d+)x(\d+)/ + + def part1(input_stream) do + input_stream + |> Stream.map(&parse_dimensions/1) + |> Stream.map(&points_in_square/1) + |> Enum.to_list() + |> Enum.reduce({MapSet.new([]), MapSet.new([])}, &intersecting_squares/2) + |> elem(1) + |> MapSet.to_list() + |> length() + end + + def parse_dimensions(str) do + l = Regex.run(@dimension_parser, str) + [id, x, y, w, h] = l |> tl() |> Enum.map(&String.to_integer/1) + {id, x, y, w, h} + end + + def points_in_square({_, x, y, w, h}) do + x..(x + w - 1) + |> Enum.reduce([], fn x, x_set -> + y..(y + h - 1) + |> Enum.reduce(x_set, fn y, xy_set -> + [{x, y} | xy_set] + end) + end) + end + + def intersecting_squares(square_set, {set, intersects}) do + square_set + |> Enum.reduce({set, intersects}, fn pos, {set, intersects} -> + case MapSet.member?(set, pos) do + true -> {set, MapSet.put(intersects, pos)} + _ -> {MapSet.put(set, pos), intersects} + end + end) + end + + def intersecting_squares2({id, square_set}, {set, intersects}) do + square_set + |> Enum.reduce({set, intersects}, fn pos, {set, intersects} -> + case MapSet.member?(set, pos) do + true -> {set, MapSet.put(intersects, pos)} + _ -> {MapSet.put(set, pos), intersects} + end + end) + end + + # parse input lines + # for each set of dimensions, check each point in the square + # if the point has been recorded already, remove both ids from the set + + def part2(input_stream) do + square_data = + input_stream + |> Stream.map(&parse_dimensions/1) + + square_id_set = + square_data + |> Stream.map(&elem(&1, 0)) + |> Enum.to_list() + |> MapSet.new() + + square_data + |> Enum.map(&{elem(&1, 0), points_in_square(&1)}) + |> Enum.reduce({MapSet.new([]), square_id_set}, fn {id, points}, acc -> intersecting_squares2({id, points}, )) + |> elem(1) + |> MapSet.to_list() + |> length() + end +end diff --git a/2018/elixir/lib/two.ex b/2018/elixir/lib/two.ex new file mode 100644 index 0000000..1be0dde --- /dev/null +++ b/2018/elixir/lib/two.ex @@ -0,0 +1,40 @@ +defmodule Two do + def bool_int(true), do: 1 + def bool_int(false), do: 0 + + def part1(id_list) do + id_list + |> Stream.map(fn id -> + id + |> String.codepoints() + |> Enum.reduce(%{}, fn l, acc -> Map.update(acc, l, 1, &(&1 + 1)) end) + |> Map.values() + |> MapSet.new() + end) + |> Enum.to_list() + |> Enum.reduce([0, 0], fn s, [x, y] -> + [x + bool_int(2 in s), y + bool_int(3 in s)] + end) + |> Enum.reduce(1, fn i, a -> a * i end) + end + + def part2(id_list) do + id_list + |> Stream.map(&String.trim_trailing/1) + |> Enum.to_list() + |> permute_all_pairs() + |> List.flatten() + |> Enum.reduce_while("", fn {id1, id2}, _ -> + case String.myers_difference(id1, id2) do + [eq: p1, del: <<_x::size(8)>>, ins: <<_y::size(8)>>, eq: p2] -> {:halt, p1 <> p2} + _ -> {:cont, ""} + end + end) + end + + def permute_all_pairs([]), do: [] + def permute_all_pairs(list), do: [permute_pairs(list) | permute_all_pairs(tl(list))] + + def permute_pairs([]), do: [] + def permute_pairs([cur | rest]), do: Enum.map(rest, &{cur, &1}) +end diff --git a/2018/elixir/mix.exs b/2018/elixir/mix.exs new file mode 100644 index 0000000..65d7630 --- /dev/null +++ b/2018/elixir/mix.exs @@ -0,0 +1,28 @@ +defmodule AdventOfCode2018.MixProject do + use Mix.Project + + def project do + [ + app: :advent_of_code_2018, + version: "0.1.0", + elixir: "~> 1.7", + 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 + [ + # {:dep_from_hexpm, "~> 0.3.0"}, + # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}, + ] + end +end diff --git a/2018/elixir/test/advent_of_code_2018_test.exs b/2018/elixir/test/advent_of_code_2018_test.exs new file mode 100644 index 0000000..915123b --- /dev/null +++ b/2018/elixir/test/advent_of_code_2018_test.exs @@ -0,0 +1,41 @@ +defmodule AdventOfCode2018Test do + use ExUnit.Case, async: true + + @doc "https://adventofcode.com/2018/day/1" + test "Day 1" do + input_stream = + File.stream!("./inputs/one.txt", [:read]) + |> Stream.map(&String.trim_trailing/1) + |> Stream.map(&String.to_integer/1) + + assert One.part1(input_stream) == 416 + assert One.part2(input_stream) == 56752 + end + + @doc "https://adventofcode.com/2018/day/2" + test "Day 2" do + input_stream = File.stream!("./inputs/two.txt", [:read]) + + assert Two.part1(input_stream) == 6696 + assert Two.part2(input_stream) == "bvnfawcnyoeyudzrpgslimtkj" + end + + @tag :current_day + @doc "https://adventofcode.com/2018/day/3" + test "Day 3" do + test_input = + """ + #1 @ 1,3: 4x4 + #2 @ 3,1: 4x4 + #3 @ 5,5: 2x2 + """ + |> String.split("\n", trim: true) + + # expected_result = MapSet.new([{4, 4}, {5, 4}, {4, 5}, {5, 5}]) + expected_result_part1 = 4 + expected_result_part2 = 3 + + assert Three.part1(test_input) == expected_result_part1 + assert Three.part2(test_input) == expected_result_part2 + end +end diff --git a/2018/elixir/test/test_helper.exs b/2018/elixir/test/test_helper.exs new file mode 100644 index 0000000..869559e --- /dev/null +++ b/2018/elixir/test/test_helper.exs @@ -0,0 +1 @@ +ExUnit.start() diff --git a/2019/1.moon b/2019/1.moon index 62309dd..ca5684a 100644 --- a/2019/1.moon +++ b/2019/1.moon @@ -1,6 +1,7 @@ -- https://adventofcode.com/2019/day/1 require "common" + input = -> input_for_day(1)\gmatch "%d+" mass_to_fuel = => -2 + math.floor @ / 3 diff --git a/2019/common.moon b/2019/common.moon index 53fee49..76b472e 100644 --- a/2019/common.moon +++ b/2019/common.moon @@ -9,8 +9,8 @@ read_whole_file = => input_for_day = => read_whole_file "input/#{@}.txt" -reduce = (iterable, initial, f) -> +reduce = (initial, f) => acc = initial - for e in iterable + for e in @ acc = f acc, e acc