From cf17d2779c0dd81166706c402097f2e018fed8d1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 15 Nov 2019 16:11:58 +0100 Subject: [PATCH] 2018: day03: part 1 --- aoc2018/input/day03.txt | 1347 +++++++++++++++++++++++++++++++++++++++ aoc2018/src/day03.rs | 103 +++ aoc2018/src/lib.rs | 1 + 3 files changed, 1451 insertions(+) create mode 100644 aoc2018/input/day03.txt create mode 100644 aoc2018/src/day03.rs diff --git a/aoc2018/input/day03.txt b/aoc2018/input/day03.txt new file mode 100644 index 0000000..8fd079e --- /dev/null +++ b/aoc2018/input/day03.txt @@ -0,0 +1,1347 @@ +#1 @ 916,616: 21x29 +#2 @ 182,253: 29x10 +#3 @ 5,24: 16x17 +#4 @ 369,697: 17x19 +#5 @ 268,954: 28x23 +#6 @ 974,162: 22x14 +#7 @ 178,904: 18x14 +#8 @ 304,923: 29x28 +#9 @ 597,714: 11x24 +#10 @ 453,481: 22x13 +#11 @ 152,717: 22x18 +#12 @ 637,836: 18x14 +#13 @ 248,522: 12x22 +#14 @ 378,677: 14x18 +#15 @ 136,571: 10x17 +#16 @ 928,358: 21x13 +#17 @ 627,767: 10x20 +#18 @ 347,955: 15x28 +#19 @ 241,629: 12x11 +#20 @ 545,53: 14x12 +#21 @ 70,931: 18x19 +#22 @ 723,235: 22x21 +#23 @ 770,799: 12x12 +#24 @ 177,775: 10x19 +#25 @ 968,858: 20x28 +#26 @ 761,321: 17x24 +#27 @ 664,421: 10x23 +#28 @ 353,417: 29x27 +#29 @ 219,243: 26x22 +#30 @ 132,378: 10x10 +#31 @ 275,648: 19x20 +#32 @ 285,88: 29x22 +#33 @ 595,862: 18x22 +#34 @ 101,955: 12x28 +#35 @ 390,824: 11x28 +#36 @ 803,340: 19x27 +#37 @ 240,447: 22x10 +#38 @ 962,943: 19x29 +#39 @ 489,195: 18x19 +#40 @ 870,841: 22x28 +#41 @ 717,945: 28x26 +#42 @ 173,784: 12x14 +#43 @ 40,909: 10x19 +#44 @ 220,541: 16x25 +#45 @ 248,213: 25x23 +#46 @ 584,900: 11x23 +#47 @ 722,486: 11x15 +#48 @ 682,976: 20x10 +#49 @ 284,838: 23x25 +#50 @ 486,646: 19x15 +#51 @ 434,698: 18x28 +#52 @ 515,922: 23x16 +#53 @ 99,370: 24x16 +#54 @ 694,316: 15x14 +#55 @ 599,409: 20x26 +#56 @ 540,465: 21x25 +#57 @ 227,616: 29x17 +#58 @ 134,620: 17x13 +#59 @ 749,156: 24x10 +#60 @ 240,665: 12x10 +#61 @ 96,364: 25x26 +#62 @ 465,565: 25x12 +#63 @ 833,983: 24x10 +#64 @ 683,226: 18x17 +#65 @ 152,372: 15x21 +#66 @ 782,831: 28x11 +#67 @ 320,948: 24x16 +#68 @ 144,821: 12x11 +#69 @ 737,677: 24x13 +#70 @ 155,926: 12x25 +#71 @ 757,418: 19x15 +#72 @ 418,712: 29x10 +#73 @ 475,607: 21x26 +#74 @ 646,202: 23x10 +#75 @ 276,595: 22x14 +#76 @ 943,801: 10x17 +#77 @ 674,186: 29x21 +#78 @ 69,284: 28x20 +#79 @ 921,772: 11x17 +#80 @ 477,722: 18x23 +#81 @ 159,379: 23x10 +#82 @ 594,159: 23x17 +#83 @ 804,559: 29x18 +#84 @ 257,113: 28x26 +#85 @ 554,655: 19x27 +#86 @ 33,468: 28x29 +#87 @ 274,156: 13x11 +#88 @ 589,365: 22x17 +#89 @ 609,736: 10x8 +#90 @ 263,820: 16x14 +#91 @ 403,279: 14x19 +#92 @ 838,782: 19x26 +#93 @ 354,731: 28x24 +#94 @ 215,969: 28x13 +#95 @ 644,715: 22x16 +#96 @ 612,784: 16x21 +#97 @ 685,811: 25x13 +#98 @ 377,236: 18x19 +#99 @ 563,425: 18x15 +#100 @ 609,342: 29x24 +#101 @ 801,427: 26x18 +#102 @ 675,371: 12x26 +#103 @ 270,80: 26x11 +#104 @ 757,608: 22x22 +#105 @ 916,752: 29x25 +#106 @ 317,767: 22x15 +#107 @ 844,222: 17x21 +#108 @ 811,664: 26x15 +#109 @ 822,257: 26x13 +#110 @ 694,340: 17x12 +#111 @ 795,423: 26x23 +#112 @ 177,311: 4x10 +#113 @ 151,820: 12x18 +#114 @ 841,608: 27x29 +#115 @ 170,435: 17x21 +#116 @ 200,626: 28x20 +#117 @ 944,767: 15x11 +#118 @ 870,192: 12x18 +#119 @ 497,203: 27x23 +#120 @ 391,247: 13x22 +#121 @ 161,724: 15x22 +#122 @ 244,947: 10x17 +#123 @ 663,289: 21x26 +#124 @ 58,460: 17x16 +#125 @ 566,398: 19x18 +#126 @ 412,651: 19x11 +#127 @ 555,658: 28x27 +#128 @ 807,444: 10x18 +#129 @ 780,5: 14x16 +#130 @ 990,472: 3x4 +#131 @ 642,593: 20x29 +#132 @ 44,340: 26x11 +#133 @ 372,183: 23x17 +#134 @ 474,771: 21x25 +#135 @ 570,313: 26x28 +#136 @ 390,104: 15x11 +#137 @ 234,113: 19x11 +#138 @ 95,862: 21x23 +#139 @ 481,700: 17x25 +#140 @ 570,310: 18x23 +#141 @ 582,447: 10x11 +#142 @ 25,831: 14x15 +#143 @ 582,323: 17x23 +#144 @ 478,281: 29x14 +#145 @ 935,274: 15x13 +#146 @ 664,967: 15x11 +#147 @ 473,567: 14x29 +#148 @ 682,331: 15x13 +#149 @ 859,734: 20x19 +#150 @ 456,668: 15x16 +#151 @ 346,674: 29x28 +#152 @ 588,117: 20x22 +#153 @ 405,808: 11x25 +#154 @ 486,248: 20x18 +#155 @ 57,745: 21x10 +#156 @ 93,840: 17x15 +#157 @ 62,396: 23x14 +#158 @ 897,817: 14x28 +#159 @ 192,178: 23x28 +#160 @ 619,213: 16x18 +#161 @ 502,559: 14x11 +#162 @ 758,672: 25x15 +#163 @ 459,886: 22x18 +#164 @ 87,723: 28x11 +#165 @ 119,465: 22x11 +#166 @ 956,943: 23x21 +#167 @ 119,812: 25x15 +#168 @ 916,3: 14x16 +#169 @ 323,750: 14x25 +#170 @ 930,48: 28x10 +#171 @ 342,956: 25x17 +#172 @ 145,125: 10x16 +#173 @ 852,80: 28x14 +#174 @ 143,704: 26x19 +#175 @ 142,350: 15x20 +#176 @ 965,7: 16x19 +#177 @ 363,672: 24x18 +#178 @ 256,766: 23x24 +#179 @ 590,883: 24x26 +#180 @ 35,32: 14x25 +#181 @ 383,215: 10x21 +#182 @ 453,875: 12x25 +#183 @ 632,30: 12x26 +#184 @ 234,584: 21x28 +#185 @ 689,859: 14x27 +#186 @ 157,83: 19x24 +#187 @ 906,331: 15x27 +#188 @ 633,35: 13x13 +#189 @ 772,685: 20x16 +#190 @ 904,382: 12x21 +#191 @ 273,110: 17x29 +#192 @ 919,361: 16x14 +#193 @ 562,281: 13x10 +#194 @ 480,641: 14x27 +#195 @ 504,778: 17x21 +#196 @ 694,464: 27x21 +#197 @ 625,282: 10x25 +#198 @ 812,986: 22x10 +#199 @ 141,317: 27x13 +#200 @ 742,805: 18x12 +#201 @ 681,596: 20x27 +#202 @ 752,170: 26x11 +#203 @ 405,548: 25x15 +#204 @ 7,11: 14x27 +#205 @ 103,686: 21x21 +#206 @ 664,580: 13x29 +#207 @ 348,310: 20x28 +#208 @ 926,95: 12x13 +#209 @ 755,694: 20x29 +#210 @ 258,435: 20x21 +#211 @ 814,669: 14x22 +#212 @ 582,41: 29x18 +#213 @ 587,983: 3x3 +#214 @ 739,359: 18x27 +#215 @ 738,156: 21x29 +#216 @ 230,651: 21x28 +#217 @ 144,597: 25x22 +#218 @ 472,196: 12x29 +#219 @ 748,532: 22x14 +#220 @ 16,717: 20x11 +#221 @ 833,370: 22x12 +#222 @ 972,81: 18x19 +#223 @ 828,239: 13x10 +#224 @ 610,839: 23x23 +#225 @ 869,228: 21x12 +#226 @ 281,645: 25x21 +#227 @ 0,533: 18x27 +#228 @ 533,725: 27x17 +#229 @ 10,973: 29x25 +#230 @ 973,819: 24x20 +#231 @ 35,42: 26x28 +#232 @ 631,601: 26x29 +#233 @ 923,573: 19x21 +#234 @ 743,526: 20x24 +#235 @ 381,765: 17x15 +#236 @ 811,589: 12x28 +#237 @ 578,307: 24x20 +#238 @ 562,368: 28x13 +#239 @ 641,615: 16x28 +#240 @ 912,235: 29x20 +#241 @ 762,804: 13x13 +#242 @ 591,165: 25x25 +#243 @ 588,19: 28x12 +#244 @ 371,699: 12x13 +#245 @ 136,460: 22x13 +#246 @ 680,828: 20x14 +#247 @ 651,318: 26x17 +#248 @ 829,500: 27x13 +#249 @ 552,469: 10x29 +#250 @ 983,686: 15x16 +#251 @ 428,442: 25x11 +#252 @ 819,114: 24x12 +#253 @ 762,632: 11x12 +#254 @ 618,843: 25x12 +#255 @ 38,380: 20x25 +#256 @ 349,24: 29x25 +#257 @ 107,172: 28x19 +#258 @ 751,349: 18x20 +#259 @ 150,419: 20x16 +#260 @ 205,579: 17x17 +#261 @ 190,456: 29x12 +#262 @ 126,722: 14x19 +#263 @ 658,936: 22x12 +#264 @ 835,3: 26x28 +#265 @ 268,604: 24x15 +#266 @ 753,737: 15x19 +#267 @ 142,934: 19x28 +#268 @ 908,166: 12x16 +#269 @ 471,923: 16x13 +#270 @ 42,777: 16x16 +#271 @ 145,310: 11x19 +#272 @ 301,629: 28x18 +#273 @ 206,976: 21x22 +#274 @ 482,567: 10x26 +#275 @ 724,515: 23x11 +#276 @ 290,735: 24x19 +#277 @ 33,157: 20x14 +#278 @ 89,591: 13x23 +#279 @ 194,608: 20x17 +#280 @ 297,914: 17x28 +#281 @ 13,320: 21x20 +#282 @ 652,204: 11x5 +#283 @ 374,476: 20x13 +#284 @ 224,580: 26x18 +#285 @ 482,633: 26x26 +#286 @ 779,921: 15x13 +#287 @ 693,963: 25x25 +#288 @ 907,136: 28x19 +#289 @ 605,942: 14x29 +#290 @ 212,633: 10x18 +#291 @ 466,652: 15x21 +#292 @ 217,692: 12x20 +#293 @ 445,13: 11x21 +#294 @ 628,907: 18x20 +#295 @ 713,214: 11x11 +#296 @ 172,604: 11x16 +#297 @ 87,187: 21x26 +#298 @ 107,845: 14x25 +#299 @ 387,555: 22x11 +#300 @ 581,710: 29x29 +#301 @ 142,293: 12x25 +#302 @ 663,830: 28x15 +#303 @ 529,914: 10x21 +#304 @ 809,90: 15x14 +#305 @ 50,510: 29x19 +#306 @ 588,457: 15x21 +#307 @ 272,224: 20x26 +#308 @ 84,138: 15x25 +#309 @ 484,429: 12x23 +#310 @ 777,15: 22x23 +#311 @ 520,510: 13x24 +#312 @ 931,156: 18x23 +#313 @ 834,30: 27x12 +#314 @ 797,920: 23x24 +#315 @ 466,319: 21x10 +#316 @ 723,786: 13x27 +#317 @ 319,629: 10x24 +#318 @ 143,429: 10x18 +#319 @ 260,188: 11x16 +#320 @ 75,270: 21x13 +#321 @ 99,84: 18x13 +#322 @ 836,570: 19x20 +#323 @ 920,513: 25x16 +#324 @ 460,852: 15x27 +#325 @ 77,910: 11x22 +#326 @ 738,281: 19x24 +#327 @ 884,183: 23x29 +#328 @ 945,302: 16x10 +#329 @ 169,38: 12x29 +#330 @ 748,165: 11x17 +#331 @ 895,719: 10x6 +#332 @ 570,524: 13x16 +#333 @ 55,742: 22x11 +#334 @ 616,34: 14x17 +#335 @ 662,596: 10x19 +#336 @ 441,205: 27x15 +#337 @ 286,9: 12x23 +#338 @ 481,954: 10x24 +#339 @ 825,83: 22x21 +#340 @ 949,943: 11x13 +#341 @ 765,258: 24x28 +#342 @ 762,600: 13x14 +#343 @ 616,72: 18x15 +#344 @ 513,54: 10x25 +#345 @ 612,226: 21x28 +#346 @ 836,73: 13x15 +#347 @ 226,422: 18x18 +#348 @ 433,794: 12x15 +#349 @ 256,47: 23x18 +#350 @ 106,210: 13x13 +#351 @ 721,614: 14x29 +#352 @ 12,616: 29x16 +#353 @ 151,253: 21x16 +#354 @ 565,673: 11x18 +#355 @ 135,826: 25x29 +#356 @ 755,770: 19x17 +#357 @ 520,125: 23x18 +#358 @ 139,78: 17x11 +#359 @ 753,793: 15x29 +#360 @ 730,108: 14x15 +#361 @ 755,827: 23x28 +#362 @ 613,122: 29x16 +#363 @ 152,252: 18x29 +#364 @ 715,763: 19x22 +#365 @ 822,215: 10x18 +#366 @ 730,725: 13x21 +#367 @ 842,289: 14x11 +#368 @ 704,636: 29x10 +#369 @ 451,486: 20x16 +#370 @ 767,389: 12x12 +#371 @ 621,29: 14x18 +#372 @ 407,335: 10x20 +#373 @ 55,762: 23x19 +#374 @ 393,794: 20x29 +#375 @ 545,494: 14x10 +#376 @ 585,411: 22x11 +#377 @ 93,698: 29x14 +#378 @ 792,523: 17x25 +#379 @ 249,36: 18x12 +#380 @ 220,141: 4x3 +#381 @ 576,826: 9x3 +#382 @ 9,531: 12x24 +#383 @ 381,332: 13x25 +#384 @ 960,810: 23x11 +#385 @ 470,925: 10x12 +#386 @ 76,36: 18x12 +#387 @ 376,690: 13x24 +#388 @ 913,707: 15x26 +#389 @ 881,192: 29x10 +#390 @ 255,462: 15x14 +#391 @ 609,854: 11x18 +#392 @ 607,163: 27x27 +#393 @ 823,570: 28x20 +#394 @ 888,532: 10x25 +#395 @ 835,452: 26x27 +#396 @ 95,359: 29x20 +#397 @ 89,363: 17x26 +#398 @ 348,966: 12x15 +#399 @ 848,657: 14x24 +#400 @ 916,45: 15x10 +#401 @ 720,729: 27x29 +#402 @ 859,743: 18x14 +#403 @ 236,661: 28x12 +#404 @ 158,726: 22x20 +#405 @ 42,981: 22x18 +#406 @ 396,112: 21x28 +#407 @ 249,679: 18x19 +#408 @ 573,663: 25x10 +#409 @ 65,355: 11x12 +#410 @ 688,530: 15x23 +#411 @ 539,110: 24x21 +#412 @ 852,491: 18x27 +#413 @ 565,979: 29x14 +#414 @ 897,530: 18x13 +#415 @ 331,654: 19x25 +#416 @ 726,395: 23x14 +#417 @ 22,639: 27x15 +#418 @ 647,913: 19x29 +#419 @ 961,955: 24x26 +#420 @ 927,324: 19x15 +#421 @ 689,336: 24x23 +#422 @ 817,648: 21x12 +#423 @ 663,283: 19x23 +#424 @ 454,960: 20x14 +#425 @ 276,158: 10x11 +#426 @ 766,736: 23x24 +#427 @ 102,726: 29x15 +#428 @ 116,668: 14x24 +#429 @ 915,97: 15x18 +#430 @ 349,423: 24x17 +#431 @ 381,91: 18x23 +#432 @ 115,110: 29x21 +#433 @ 559,220: 23x17 +#434 @ 150,659: 15x27 +#435 @ 675,590: 16x15 +#436 @ 624,340: 27x13 +#437 @ 564,677: 23x10 +#438 @ 78,278: 14x18 +#439 @ 163,606: 29x11 +#440 @ 360,356: 15x15 +#441 @ 927,300: 26x26 +#442 @ 104,585: 22x21 +#443 @ 512,352: 11x13 +#444 @ 688,506: 16x21 +#445 @ 406,402: 24x16 +#446 @ 612,157: 13x14 +#447 @ 217,693: 21x20 +#448 @ 822,247: 27x23 +#449 @ 761,412: 22x18 +#450 @ 744,247: 24x16 +#451 @ 656,432: 24x11 +#452 @ 441,854: 12x20 +#453 @ 532,106: 27x12 +#454 @ 128,248: 28x25 +#455 @ 502,769: 24x16 +#456 @ 552,231: 14x29 +#457 @ 108,882: 19x26 +#458 @ 897,0: 24x22 +#459 @ 69,783: 12x12 +#460 @ 854,181: 20x20 +#461 @ 177,46: 29x29 +#462 @ 200,696: 17x20 +#463 @ 164,202: 23x17 +#464 @ 760,630: 17x18 +#465 @ 889,779: 11x21 +#466 @ 667,525: 24x12 +#467 @ 500,188: 13x14 +#468 @ 942,650: 23x23 +#469 @ 331,395: 24x26 +#470 @ 564,41: 18x16 +#471 @ 122,154: 29x28 +#472 @ 931,865: 15x11 +#473 @ 532,441: 12x28 +#474 @ 286,0: 18x18 +#475 @ 208,641: 16x14 +#476 @ 423,490: 26x26 +#477 @ 643,185: 12x29 +#478 @ 323,159: 24x13 +#479 @ 848,642: 26x14 +#480 @ 311,890: 24x16 +#481 @ 174,444: 8x8 +#482 @ 14,24: 16x20 +#483 @ 805,931: 15x19 +#484 @ 117,327: 19x20 +#485 @ 821,503: 19x28 +#486 @ 477,926: 20x10 +#487 @ 631,637: 18x12 +#488 @ 889,558: 11x17 +#489 @ 732,750: 17x18 +#490 @ 265,10: 28x15 +#491 @ 444,3: 21x28 +#492 @ 109,867: 27x24 +#493 @ 15,327: 23x24 +#494 @ 409,550: 16x10 +#495 @ 178,205: 24x23 +#496 @ 380,492: 22x16 +#497 @ 772,228: 11x20 +#498 @ 416,279: 14x26 +#499 @ 911,563: 22x11 +#500 @ 144,916: 25x27 +#501 @ 575,425: 21x25 +#502 @ 356,780: 11x28 +#503 @ 226,897: 29x13 +#504 @ 594,317: 23x19 +#505 @ 289,121: 12x12 +#506 @ 574,926: 29x13 +#507 @ 754,882: 13x10 +#508 @ 614,709: 12x27 +#509 @ 835,680: 17x12 +#510 @ 720,475: 29x11 +#511 @ 808,311: 10x16 +#512 @ 812,944: 10x11 +#513 @ 113,83: 10x16 +#514 @ 541,246: 18x21 +#515 @ 729,339: 17x25 +#516 @ 862,853: 17x24 +#517 @ 303,423: 26x22 +#518 @ 61,469: 16x17 +#519 @ 567,234: 10x23 +#520 @ 868,92: 15x13 +#521 @ 619,809: 12x20 +#522 @ 799,619: 23x27 +#523 @ 552,422: 26x27 +#524 @ 860,662: 23x12 +#525 @ 425,556: 15x17 +#526 @ 566,565: 29x10 +#527 @ 437,494: 26x10 +#528 @ 554,116: 23x10 +#529 @ 52,386: 11x17 +#530 @ 475,702: 29x20 +#531 @ 853,874: 10x21 +#532 @ 761,245: 11x25 +#533 @ 646,88: 12x21 +#534 @ 79,578: 12x23 +#535 @ 544,88: 16x29 +#536 @ 328,160: 29x17 +#537 @ 357,331: 26x22 +#538 @ 590,922: 23x19 +#539 @ 975,86: 17x14 +#540 @ 546,104: 26x26 +#541 @ 36,665: 25x25 +#542 @ 310,778: 16x21 +#543 @ 145,420: 20x10 +#544 @ 948,246: 16x28 +#545 @ 157,839: 15x24 +#546 @ 596,169: 23x19 +#547 @ 489,134: 25x14 +#548 @ 932,265: 22x20 +#549 @ 370,740: 27x14 +#550 @ 496,426: 28x11 +#551 @ 104,881: 26x16 +#552 @ 550,356: 17x23 +#553 @ 423,426: 24x22 +#554 @ 888,936: 25x25 +#555 @ 732,843: 27x27 +#556 @ 622,537: 17x23 +#557 @ 617,31: 25x16 +#558 @ 501,434: 10x17 +#559 @ 401,611: 27x16 +#560 @ 862,751: 21x20 +#561 @ 254,131: 11x19 +#562 @ 573,129: 19x21 +#563 @ 211,159: 20x17 +#564 @ 225,906: 21x19 +#565 @ 321,244: 14x18 +#566 @ 767,433: 23x23 +#567 @ 949,799: 12x14 +#568 @ 445,198: 26x24 +#569 @ 41,658: 29x19 +#570 @ 256,318: 19x25 +#571 @ 574,153: 18x29 +#572 @ 62,323: 3x8 +#573 @ 817,653: 28x12 +#574 @ 959,266: 19x27 +#575 @ 575,747: 29x19 +#576 @ 103,359: 19x27 +#577 @ 848,228: 12x28 +#578 @ 5,591: 29x29 +#579 @ 161,409: 10x24 +#580 @ 247,297: 10x28 +#581 @ 725,483: 17x21 +#582 @ 236,966: 14x22 +#583 @ 831,111: 19x11 +#584 @ 192,587: 22x26 +#585 @ 156,603: 14x20 +#586 @ 565,809: 29x25 +#587 @ 394,22: 25x27 +#588 @ 941,870: 16x16 +#589 @ 568,740: 12x16 +#590 @ 773,912: 22x12 +#591 @ 799,405: 13x16 +#592 @ 30,967: 28x19 +#593 @ 776,272: 22x17 +#594 @ 276,801: 15x18 +#595 @ 89,71: 23x26 +#596 @ 902,943: 19x25 +#597 @ 948,146: 28x14 +#598 @ 413,776: 17x12 +#599 @ 799,467: 23x29 +#600 @ 938,243: 23x28 +#601 @ 483,952: 17x29 +#602 @ 6,595: 26x28 +#603 @ 69,516: 13x20 +#604 @ 478,829: 27x29 +#605 @ 382,229: 11x22 +#606 @ 947,201: 12x11 +#607 @ 568,639: 16x25 +#608 @ 475,876: 11x27 +#609 @ 710,216: 10x19 +#610 @ 655,584: 25x14 +#611 @ 482,665: 27x17 +#612 @ 1,189: 17x27 +#613 @ 199,679: 22x29 +#614 @ 439,375: 14x28 +#615 @ 128,321: 24x16 +#616 @ 896,390: 15x15 +#617 @ 945,791: 12x21 +#618 @ 267,84: 18x20 +#619 @ 550,210: 18x15 +#620 @ 667,613: 29x28 +#621 @ 196,311: 25x29 +#622 @ 798,215: 29x23 +#623 @ 939,496: 17x23 +#624 @ 38,232: 25x17 +#625 @ 295,751: 27x15 +#626 @ 766,159: 10x14 +#627 @ 640,902: 15x21 +#628 @ 498,419: 15x27 +#629 @ 795,403: 24x24 +#630 @ 710,367: 29x29 +#631 @ 593,714: 25x29 +#632 @ 821,97: 13x29 +#633 @ 519,500: 28x26 +#634 @ 616,770: 27x22 +#635 @ 354,121: 24x23 +#636 @ 969,32: 11x12 +#637 @ 401,344: 18x24 +#638 @ 588,918: 20x16 +#639 @ 173,907: 16x29 +#640 @ 771,372: 15x23 +#641 @ 799,783: 22x27 +#642 @ 737,98: 28x20 +#643 @ 781,341: 27x29 +#644 @ 35,236: 11x13 +#645 @ 297,935: 26x11 +#646 @ 648,95: 7x4 +#647 @ 28,26: 15x14 +#648 @ 637,828: 13x26 +#649 @ 154,947: 22x19 +#650 @ 302,852: 17x17 +#651 @ 934,150: 20x25 +#652 @ 964,269: 17x21 +#653 @ 503,824: 12x12 +#654 @ 79,70: 25x25 +#655 @ 233,668: 26x24 +#656 @ 479,672: 15x17 +#657 @ 881,161: 28x29 +#658 @ 91,588: 16x27 +#659 @ 138,60: 17x16 +#660 @ 924,626: 22x12 +#661 @ 728,395: 14x17 +#662 @ 840,819: 28x14 +#663 @ 883,215: 12x15 +#664 @ 105,624: 25x13 +#665 @ 752,741: 26x17 +#666 @ 890,572: 23x25 +#667 @ 510,904: 23x28 +#668 @ 220,431: 20x14 +#669 @ 706,806: 20x16 +#670 @ 523,860: 17x18 +#671 @ 818,608: 11x28 +#672 @ 113,727: 18x27 +#673 @ 550,513: 22x13 +#674 @ 163,468: 11x28 +#675 @ 750,629: 17x12 +#676 @ 921,681: 8x10 +#677 @ 687,78: 15x10 +#678 @ 117,637: 27x23 +#679 @ 20,483: 14x28 +#680 @ 413,261: 12x29 +#681 @ 932,258: 17x20 +#682 @ 501,822: 18x18 +#683 @ 368,91: 19x22 +#684 @ 280,684: 15x28 +#685 @ 848,611: 15x12 +#686 @ 48,121: 10x11 +#687 @ 964,881: 28x11 +#688 @ 317,431: 8x3 +#689 @ 771,426: 10x22 +#690 @ 861,373: 14x24 +#691 @ 372,433: 15x10 +#692 @ 788,713: 15x15 +#693 @ 727,796: 21x18 +#694 @ 106,366: 6x21 +#695 @ 172,364: 29x15 +#696 @ 212,878: 19x14 +#697 @ 20,2: 27x12 +#698 @ 741,577: 11x25 +#699 @ 200,229: 24x22 +#700 @ 596,24: 17x18 +#701 @ 282,934: 22x12 +#702 @ 55,615: 28x26 +#703 @ 4,600: 16x19 +#704 @ 387,817: 24x12 +#705 @ 955,100: 17x29 +#706 @ 286,526: 28x23 +#707 @ 144,62: 7x10 +#708 @ 477,231: 15x27 +#709 @ 521,678: 20x20 +#710 @ 279,249: 18x14 +#711 @ 471,336: 20x28 +#712 @ 18,507: 27x14 +#713 @ 576,221: 14x10 +#714 @ 646,705: 12x27 +#715 @ 631,211: 15x28 +#716 @ 680,79: 15x27 +#717 @ 682,360: 14x25 +#718 @ 268,2: 24x19 +#719 @ 469,235: 20x15 +#720 @ 977,373: 13x15 +#721 @ 352,842: 16x19 +#722 @ 310,91: 15x14 +#723 @ 394,539: 20x28 +#724 @ 366,841: 22x10 +#725 @ 644,573: 14x26 +#726 @ 252,815: 19x15 +#727 @ 575,714: 28x21 +#728 @ 23,706: 14x16 +#729 @ 208,607: 25x25 +#730 @ 506,183: 10x13 +#731 @ 641,852: 20x19 +#732 @ 820,533: 10x20 +#733 @ 381,851: 22x11 +#734 @ 799,908: 21x15 +#735 @ 597,96: 24x29 +#736 @ 592,876: 16x11 +#737 @ 945,807: 10x14 +#738 @ 407,578: 27x27 +#739 @ 150,649: 17x25 +#740 @ 615,596: 17x18 +#741 @ 893,717: 16x12 +#742 @ 153,252: 29x10 +#743 @ 186,626: 17x26 +#744 @ 2,596: 10x19 +#745 @ 704,113: 16x29 +#746 @ 716,221: 17x22 +#747 @ 132,912: 21x19 +#748 @ 428,562: 13x12 +#749 @ 528,946: 17x13 +#750 @ 110,213: 14x12 +#751 @ 836,597: 27x22 +#752 @ 786,842: 14x28 +#753 @ 299,769: 26x14 +#754 @ 958,24: 11x15 +#755 @ 93,306: 12x20 +#756 @ 201,803: 23x28 +#757 @ 79,70: 18x19 +#758 @ 52,393: 15x16 +#759 @ 237,320: 16x15 +#760 @ 430,564: 8x7 +#761 @ 566,236: 15x16 +#762 @ 156,829: 18x13 +#763 @ 581,239: 11x23 +#764 @ 307,358: 25x22 +#765 @ 76,841: 13x10 +#766 @ 384,830: 17x26 +#767 @ 901,827: 12x15 +#768 @ 426,653: 14x16 +#769 @ 804,519: 17x26 +#770 @ 45,495: 22x20 +#771 @ 320,948: 22x15 +#772 @ 518,635: 17x20 +#773 @ 886,848: 13x15 +#774 @ 726,546: 18x13 +#775 @ 359,190: 22x28 +#776 @ 705,371: 20x17 +#777 @ 818,518: 28x16 +#778 @ 606,733: 18x27 +#779 @ 639,119: 13x21 +#780 @ 429,788: 18x22 +#781 @ 299,744: 11x20 +#782 @ 189,655: 27x20 +#783 @ 513,665: 12x18 +#784 @ 494,443: 23x25 +#785 @ 75,297: 21x15 +#786 @ 356,679: 29x23 +#787 @ 482,218: 26x25 +#788 @ 500,212: 10x12 +#789 @ 94,661: 23x13 +#790 @ 283,708: 13x26 +#791 @ 597,936: 22x12 +#792 @ 77,94: 21x24 +#793 @ 750,403: 20x13 +#794 @ 368,102: 28x25 +#795 @ 601,88: 23x19 +#796 @ 96,163: 29x26 +#797 @ 326,601: 15x29 +#798 @ 434,289: 9x6 +#799 @ 10,4: 21x28 +#800 @ 42,622: 23x16 +#801 @ 693,221: 11x12 +#802 @ 807,618: 17x12 +#803 @ 763,875: 21x18 +#804 @ 615,641: 22x15 +#805 @ 625,78: 12x20 +#806 @ 591,237: 17x28 +#807 @ 744,585: 10x22 +#808 @ 56,623: 12x11 +#809 @ 606,776: 21x11 +#810 @ 579,25: 15x24 +#811 @ 729,209: 11x25 +#812 @ 667,505: 26x24 +#813 @ 439,18: 18x20 +#814 @ 464,880: 22x11 +#815 @ 757,638: 17x17 +#816 @ 844,272: 16x21 +#817 @ 153,774: 27x22 +#818 @ 267,531: 20x21 +#819 @ 45,783: 6x5 +#820 @ 864,643: 18x25 +#821 @ 162,922: 18x19 +#822 @ 58,319: 11x21 +#823 @ 971,840: 22x24 +#824 @ 87,590: 19x14 +#825 @ 354,419: 13x10 +#826 @ 729,396: 25x12 +#827 @ 660,971: 27x16 +#828 @ 830,777: 11x14 +#829 @ 862,818: 14x25 +#830 @ 142,706: 27x21 +#831 @ 488,335: 11x11 +#832 @ 652,173: 29x29 +#833 @ 482,243: 19x28 +#834 @ 774,434: 22x12 +#835 @ 486,192: 16x14 +#836 @ 6,526: 26x18 +#837 @ 672,75: 16x18 +#838 @ 323,719: 19x23 +#839 @ 693,816: 10x25 +#840 @ 567,123: 19x17 +#841 @ 427,32: 27x29 +#842 @ 549,436: 18x10 +#843 @ 102,496: 27x19 +#844 @ 410,557: 14x26 +#845 @ 935,803: 22x20 +#846 @ 775,233: 27x23 +#847 @ 357,79: 14x22 +#848 @ 771,743: 15x17 +#849 @ 30,613: 27x29 +#850 @ 580,213: 13x19 +#851 @ 933,939: 16x23 +#852 @ 151,309: 11x24 +#853 @ 925,10: 29x15 +#854 @ 97,83: 12x12 +#855 @ 474,479: 16x26 +#856 @ 246,331: 11x17 +#857 @ 972,116: 22x19 +#858 @ 959,104: 22x23 +#859 @ 225,489: 25x29 +#860 @ 428,187: 28x12 +#861 @ 458,883: 28x26 +#862 @ 778,919: 20x20 +#863 @ 785,532: 22x26 +#864 @ 37,496: 10x25 +#865 @ 550,798: 28x19 +#866 @ 634,886: 14x24 +#867 @ 400,762: 18x20 +#868 @ 753,180: 15x12 +#869 @ 403,254: 11x26 +#870 @ 620,696: 19x18 +#871 @ 903,706: 21x16 +#872 @ 31,927: 29x26 +#873 @ 281,816: 23x28 +#874 @ 462,860: 6x6 +#875 @ 131,138: 22x12 +#876 @ 720,92: 20x14 +#877 @ 252,174: 27x13 +#878 @ 243,539: 18x11 +#879 @ 389,39: 17x24 +#880 @ 133,104: 17x18 +#881 @ 182,254: 16x12 +#882 @ 417,374: 20x21 +#883 @ 489,849: 16x19 +#884 @ 354,429: 15x13 +#885 @ 60,345: 19x11 +#886 @ 277,949: 10x10 +#887 @ 517,888: 27x13 +#888 @ 12,930: 20x18 +#889 @ 810,307: 18x17 +#890 @ 78,960: 25x25 +#891 @ 788,206: 12x26 +#892 @ 253,600: 13x20 +#893 @ 459,495: 25x14 +#894 @ 539,785: 11x25 +#895 @ 567,411: 12x21 +#896 @ 531,240: 25x20 +#897 @ 532,922: 15x27 +#898 @ 633,924: 22x20 +#899 @ 791,842: 13x12 +#900 @ 210,666: 13x19 +#901 @ 506,564: 22x17 +#902 @ 278,965: 21x28 +#903 @ 454,968: 15x22 +#904 @ 363,643: 20x10 +#905 @ 468,875: 27x23 +#906 @ 743,759: 18x12 +#907 @ 76,30: 12x20 +#908 @ 607,803: 25x21 +#909 @ 365,751: 21x28 +#910 @ 69,34: 29x17 +#911 @ 70,341: 19x16 +#912 @ 959,681: 28x10 +#913 @ 881,560: 13x14 +#914 @ 315,721: 28x25 +#915 @ 555,737: 29x23 +#916 @ 838,442: 17x23 +#917 @ 5,533: 24x25 +#918 @ 702,547: 17x19 +#919 @ 378,249: 28x22 +#920 @ 72,755: 11x29 +#921 @ 562,805: 27x26 +#922 @ 89,66: 24x23 +#923 @ 404,921: 18x25 +#924 @ 730,369: 14x10 +#925 @ 784,759: 10x15 +#926 @ 641,616: 15x15 +#927 @ 733,523: 26x24 +#928 @ 811,687: 28x28 +#929 @ 905,514: 26x17 +#930 @ 937,5: 19x18 +#931 @ 345,639: 28x18 +#932 @ 253,659: 10x29 +#933 @ 56,614: 15x27 +#934 @ 288,673: 16x27 +#935 @ 779,863: 22x23 +#936 @ 761,819: 15x20 +#937 @ 900,386: 16x26 +#938 @ 921,946: 21x28 +#939 @ 404,152: 11x23 +#940 @ 542,362: 14x23 +#941 @ 873,137: 20x11 +#942 @ 311,897: 14x29 +#943 @ 99,575: 17x20 +#944 @ 352,792: 10x19 +#945 @ 969,120: 27x16 +#946 @ 733,963: 28x23 +#947 @ 437,950: 20x24 +#948 @ 355,367: 14x14 +#949 @ 242,362: 18x21 +#950 @ 618,823: 23x19 +#951 @ 191,398: 16x22 +#952 @ 576,28: 27x16 +#953 @ 247,975: 17x17 +#954 @ 504,937: 19x13 +#955 @ 84,869: 27x27 +#956 @ 35,635: 16x10 +#957 @ 952,979: 19x17 +#958 @ 122,313: 11x29 +#959 @ 219,512: 27x10 +#960 @ 170,943: 26x16 +#961 @ 141,380: 23x12 +#962 @ 364,335: 22x29 +#963 @ 241,220: 12x12 +#964 @ 836,8: 19x24 +#965 @ 121,497: 18x27 +#966 @ 716,106: 19x12 +#967 @ 797,574: 22x16 +#968 @ 464,315: 28x29 +#969 @ 494,702: 22x18 +#970 @ 418,505: 12x28 +#971 @ 169,835: 12x24 +#972 @ 575,689: 17x24 +#973 @ 102,357: 24x25 +#974 @ 199,942: 13x11 +#975 @ 745,743: 12x18 +#976 @ 837,32: 21x15 +#977 @ 700,488: 19x29 +#978 @ 770,644: 29x18 +#979 @ 847,467: 14x28 +#980 @ 673,575: 19x28 +#981 @ 258,475: 27x12 +#982 @ 405,632: 16x13 +#983 @ 591,82: 17x18 +#984 @ 820,376: 21x29 +#985 @ 895,761: 29x23 +#986 @ 111,328: 12x22 +#987 @ 799,299: 21x14 +#988 @ 912,164: 19x12 +#989 @ 110,648: 10x26 +#990 @ 366,40: 10x26 +#991 @ 162,758: 24x13 +#992 @ 645,973: 24x11 +#993 @ 680,812: 20x22 +#994 @ 13,159: 17x14 +#995 @ 724,803: 27x11 +#996 @ 860,745: 12x18 +#997 @ 140,939: 16x26 +#998 @ 237,377: 26x20 +#999 @ 163,935: 23x29 +#1000 @ 578,96: 21x16 +#1001 @ 277,794: 14x12 +#1002 @ 626,261: 10x25 +#1003 @ 735,160: 26x24 +#1004 @ 460,483: 25x14 +#1005 @ 765,257: 16x27 +#1006 @ 888,838: 12x17 +#1007 @ 949,269: 14x14 +#1008 @ 535,771: 21x17 +#1009 @ 620,429: 14x26 +#1010 @ 592,33: 28x24 +#1011 @ 942,163: 22x15 +#1012 @ 132,624: 19x22 +#1013 @ 143,332: 10x21 +#1014 @ 932,652: 15x29 +#1015 @ 358,754: 10x16 +#1016 @ 244,203: 29x16 +#1017 @ 194,406: 6x8 +#1018 @ 524,932: 21x13 +#1019 @ 957,642: 14x24 +#1020 @ 388,626: 19x11 +#1021 @ 730,215: 13x13 +#1022 @ 100,618: 24x10 +#1023 @ 141,568: 17x17 +#1024 @ 902,141: 28x27 +#1025 @ 205,319: 14x12 +#1026 @ 133,380: 14x22 +#1027 @ 784,840: 17x20 +#1028 @ 854,365: 13x27 +#1029 @ 167,465: 14x21 +#1030 @ 366,739: 13x12 +#1031 @ 609,804: 19x11 +#1032 @ 370,257: 25x26 +#1033 @ 150,696: 28x24 +#1034 @ 79,174: 10x22 +#1035 @ 575,878: 28x26 +#1036 @ 200,323: 29x10 +#1037 @ 915,335: 16x11 +#1038 @ 296,718: 24x29 +#1039 @ 402,564: 10x17 +#1040 @ 962,649: 20x12 +#1041 @ 38,126: 14x13 +#1042 @ 677,482: 26x26 +#1043 @ 474,884: 19x10 +#1044 @ 325,962: 29x28 +#1045 @ 405,545: 28x28 +#1046 @ 740,173: 15x26 +#1047 @ 86,34: 24x22 +#1048 @ 802,459: 26x24 +#1049 @ 428,192: 23x14 +#1050 @ 180,613: 28x26 +#1051 @ 984,723: 15x17 +#1052 @ 317,430: 17x10 +#1053 @ 789,835: 12x11 +#1054 @ 675,775: 29x28 +#1055 @ 971,35: 5x3 +#1056 @ 756,272: 13x19 +#1057 @ 665,333: 21x19 +#1058 @ 597,54: 17x26 +#1059 @ 501,867: 28x28 +#1060 @ 392,937: 20x20 +#1061 @ 151,383: 26x26 +#1062 @ 403,372: 12x26 +#1063 @ 471,877: 27x18 +#1064 @ 987,468: 10x22 +#1065 @ 850,612: 14x17 +#1066 @ 686,879: 17x24 +#1067 @ 794,549: 15x10 +#1068 @ 749,45: 22x25 +#1069 @ 636,231: 20x14 +#1070 @ 966,94: 19x15 +#1071 @ 860,486: 14x28 +#1072 @ 599,698: 11x28 +#1073 @ 2,154: 29x27 +#1074 @ 308,404: 28x26 +#1075 @ 207,457: 12x11 +#1076 @ 399,850: 11x13 +#1077 @ 815,81: 11x28 +#1078 @ 491,152: 26x11 +#1079 @ 670,561: 10x18 +#1080 @ 430,472: 18x29 +#1081 @ 240,702: 12x10 +#1082 @ 879,93: 16x19 +#1083 @ 250,108: 23x16 +#1084 @ 459,248: 25x15 +#1085 @ 795,706: 19x26 +#1086 @ 590,102: 23x27 +#1087 @ 874,931: 24x24 +#1088 @ 714,396: 26x14 +#1089 @ 132,176: 19x29 +#1090 @ 171,99: 12x16 +#1091 @ 170,618: 27x17 +#1092 @ 974,634: 17x28 +#1093 @ 507,137: 15x16 +#1094 @ 74,253: 25x28 +#1095 @ 612,947: 18x11 +#1096 @ 573,711: 17x19 +#1097 @ 144,957: 24x29 +#1098 @ 721,807: 24x10 +#1099 @ 288,370: 22x14 +#1100 @ 452,59: 26x29 +#1101 @ 935,312: 18x18 +#1102 @ 474,925: 11x12 +#1103 @ 606,59: 10x26 +#1104 @ 466,622: 14x21 +#1105 @ 248,938: 13x21 +#1106 @ 53,371: 29x26 +#1107 @ 867,90: 20x20 +#1108 @ 290,787: 23x16 +#1109 @ 764,58: 20x25 +#1110 @ 308,946: 20x19 +#1111 @ 31,140: 16x11 +#1112 @ 392,144: 19x25 +#1113 @ 948,836: 25x23 +#1114 @ 459,866: 21x22 +#1115 @ 488,562: 18x27 +#1116 @ 429,286: 20x21 +#1117 @ 68,311: 29x27 +#1118 @ 197,830: 13x11 +#1119 @ 218,525: 10x25 +#1120 @ 436,9: 16x12 +#1121 @ 32,824: 13x10 +#1122 @ 889,147: 27x11 +#1123 @ 312,388: 14x22 +#1124 @ 626,333: 26x14 +#1125 @ 729,751: 29x21 +#1126 @ 638,724: 25x16 +#1127 @ 353,741: 20x20 +#1128 @ 288,659: 12x11 +#1129 @ 76,95: 26x20 +#1130 @ 131,920: 23x11 +#1131 @ 129,385: 15x16 +#1132 @ 166,588: 15x25 +#1133 @ 761,338: 21x19 +#1134 @ 698,323: 16x18 +#1135 @ 558,79: 29x25 +#1136 @ 704,478: 20x14 +#1137 @ 785,276: 28x29 +#1138 @ 281,940: 19x14 +#1139 @ 519,631: 14x24 +#1140 @ 565,283: 6x3 +#1141 @ 131,952: 15x29 +#1142 @ 599,934: 28x23 +#1143 @ 376,562: 12x14 +#1144 @ 935,414: 12x16 +#1145 @ 845,792: 17x25 +#1146 @ 524,105: 25x28 +#1147 @ 816,199: 16x17 +#1148 @ 791,933: 23x22 +#1149 @ 70,84: 23x14 +#1150 @ 934,427: 14x11 +#1151 @ 890,552: 28x10 +#1152 @ 101,91: 19x21 +#1153 @ 611,596: 17x11 +#1154 @ 684,960: 17x29 +#1155 @ 80,151: 26x15 +#1156 @ 908,809: 11x27 +#1157 @ 262,730: 19x17 +#1158 @ 946,794: 21x25 +#1159 @ 55,296: 19x19 +#1160 @ 4,601: 16x25 +#1161 @ 632,708: 12x24 +#1162 @ 799,549: 13x28 +#1163 @ 913,374: 23x13 +#1164 @ 593,82: 18x27 +#1165 @ 784,721: 12x17 +#1166 @ 503,436: 20x11 +#1167 @ 470,655: 23x14 +#1168 @ 969,383: 13x12 +#1169 @ 397,491: 25x21 +#1170 @ 327,251: 26x10 +#1171 @ 534,232: 14x24 +#1172 @ 171,581: 16x17 +#1173 @ 520,149: 28x11 +#1174 @ 590,571: 11x24 +#1175 @ 297,907: 22x17 +#1176 @ 450,5: 23x11 +#1177 @ 570,641: 11x20 +#1178 @ 565,655: 17x21 +#1179 @ 969,654: 28x21 +#1180 @ 263,124: 12x22 +#1181 @ 606,95: 22x28 +#1182 @ 123,170: 12x16 +#1183 @ 250,692: 16x13 +#1184 @ 214,131: 22x25 +#1185 @ 25,981: 21x14 +#1186 @ 28,580: 24x11 +#1187 @ 256,589: 22x23 +#1188 @ 151,898: 28x16 +#1189 @ 387,597: 20x26 +#1190 @ 983,142: 14x23 +#1191 @ 922,516: 20x12 +#1192 @ 506,132: 13x20 +#1193 @ 410,407: 16x17 +#1194 @ 326,750: 12x10 +#1195 @ 838,19: 7x7 +#1196 @ 395,772: 26x22 +#1197 @ 561,709: 19x16 +#1198 @ 555,43: 29x21 +#1199 @ 684,77: 29x29 +#1200 @ 616,80: 21x22 +#1201 @ 188,871: 27x14 +#1202 @ 808,409: 20x25 +#1203 @ 65,141: 29x16 +#1204 @ 514,525: 11x14 +#1205 @ 258,977: 23x23 +#1206 @ 337,506: 13x26 +#1207 @ 662,592: 16x20 +#1208 @ 520,331: 25x22 +#1209 @ 571,859: 10x24 +#1210 @ 843,807: 13x17 +#1211 @ 3,199: 9x13 +#1212 @ 286,624: 10x25 +#1213 @ 259,754: 26x17 +#1214 @ 779,797: 24x16 +#1215 @ 117,685: 14x22 +#1216 @ 428,494: 25x27 +#1217 @ 695,39: 28x12 +#1218 @ 784,848: 28x29 +#1219 @ 142,742: 29x26 +#1220 @ 983,101: 11x24 +#1221 @ 582,892: 14x17 +#1222 @ 709,774: 25x17 +#1223 @ 96,65: 17x19 +#1224 @ 437,861: 24x19 +#1225 @ 105,956: 25x23 +#1226 @ 913,954: 22x17 +#1227 @ 940,233: 15x11 +#1228 @ 925,46: 12x23 +#1229 @ 6,524: 14x12 +#1230 @ 288,620: 26x28 +#1231 @ 442,13: 10x27 +#1232 @ 132,645: 20x12 +#1233 @ 820,229: 23x22 +#1234 @ 203,306: 10x12 +#1235 @ 192,167: 28x22 +#1236 @ 621,121: 13x22 +#1237 @ 820,103: 21x26 +#1238 @ 459,864: 25x20 +#1239 @ 542,709: 13x26 +#1240 @ 904,807: 26x11 +#1241 @ 67,837: 25x23 +#1242 @ 573,316: 12x21 +#1243 @ 638,125: 14x29 +#1244 @ 163,347: 15x28 +#1245 @ 454,786: 28x10 +#1246 @ 12,170: 26x13 +#1247 @ 720,350: 11x29 +#1248 @ 349,849: 10x17 +#1249 @ 304,833: 15x26 +#1250 @ 766,447: 21x16 +#1251 @ 972,658: 27x10 +#1252 @ 309,921: 22x28 +#1253 @ 127,615: 12x27 +#1254 @ 515,900: 23x26 +#1255 @ 480,228: 14x19 +#1256 @ 478,729: 17x12 +#1257 @ 391,221: 23x19 +#1258 @ 197,358: 21x11 +#1259 @ 138,630: 15x11 +#1260 @ 700,325: 17x22 +#1261 @ 958,140: 13x23 +#1262 @ 379,48: 27x25 +#1263 @ 623,409: 27x21 +#1264 @ 59,540: 29x22 +#1265 @ 697,129: 22x11 +#1266 @ 919,677: 21x18 +#1267 @ 205,197: 19x11 +#1268 @ 137,193: 25x25 +#1269 @ 621,540: 15x15 +#1270 @ 936,676: 10x20 +#1271 @ 0,929: 24x23 +#1272 @ 913,33: 27x26 +#1273 @ 110,361: 21x11 +#1274 @ 795,680: 22x19 +#1275 @ 61,624: 5x13 +#1276 @ 756,807: 13x26 +#1277 @ 299,154: 23x15 +#1278 @ 300,148: 21x24 +#1279 @ 132,64: 23x15 +#1280 @ 953,803: 26x22 +#1281 @ 534,104: 11x16 +#1282 @ 703,29: 10x15 +#1283 @ 486,707: 13x25 +#1284 @ 264,721: 23x26 +#1285 @ 84,256: 21x13 +#1286 @ 743,401: 15x18 +#1287 @ 293,431: 26x27 +#1288 @ 727,338: 20x18 +#1289 @ 12,573: 29x22 +#1290 @ 625,180: 17x26 +#1291 @ 62,291: 14x26 +#1292 @ 477,286: 18x11 +#1293 @ 267,734: 10x6 +#1294 @ 389,218: 16x19 +#1295 @ 965,933: 10x15 +#1296 @ 36,766: 28x14 +#1297 @ 574,728: 12x20 +#1298 @ 85,873: 25x13 +#1299 @ 441,393: 26x21 +#1300 @ 56,534: 29x23 +#1301 @ 412,371: 26x21 +#1302 @ 274,985: 12x13 +#1303 @ 940,199: 22x26 +#1304 @ 145,70: 21x12 +#1305 @ 388,5: 25x29 +#1306 @ 83,953: 11x11 +#1307 @ 802,833: 21x14 +#1308 @ 83,188: 15x24 +#1309 @ 564,130: 26x26 +#1310 @ 324,506: 21x25 +#1311 @ 618,333: 27x14 +#1312 @ 662,796: 14x22 +#1313 @ 463,490: 15x10 +#1314 @ 736,527: 23x13 +#1315 @ 385,116: 23x21 +#1316 @ 840,649: 21x15 +#1317 @ 514,32: 18x28 +#1318 @ 771,245: 25x18 +#1319 @ 199,950: 25x24 +#1320 @ 459,954: 17x11 +#1321 @ 516,148: 24x11 +#1322 @ 38,488: 23x11 +#1323 @ 960,611: 25x29 +#1324 @ 138,56: 19x19 +#1325 @ 979,715: 20x26 +#1326 @ 370,474: 20x11 +#1327 @ 552,497: 10x16 +#1328 @ 805,684: 16x23 +#1329 @ 633,208: 12x27 +#1330 @ 879,830: 15x28 +#1331 @ 413,499: 13x10 +#1332 @ 174,309: 13x19 +#1333 @ 133,767: 24x23 +#1334 @ 152,823: 11x11 +#1335 @ 516,935: 11x18 +#1336 @ 39,367: 17x29 +#1337 @ 262,138: 27x27 +#1338 @ 959,790: 20x18 +#1339 @ 150,916: 17x10 +#1340 @ 836,23: 21x24 +#1341 @ 405,391: 21x16 +#1342 @ 317,869: 20x28 +#1343 @ 935,692: 16x17 +#1344 @ 923,788: 26x21 +#1345 @ 3,555: 22x10 +#1346 @ 749,627: 14x12 +#1347 @ 32,136: 21x24 diff --git a/aoc2018/src/day03.rs b/aoc2018/src/day03.rs new file mode 100644 index 0000000..3ed3bd2 --- /dev/null +++ b/aoc2018/src/day03.rs @@ -0,0 +1,103 @@ +use std::collections::HashMap; +use std::fmt; + +use super::Result; + +const INPUT: &str = include_str!("../input/day03.txt"); + +pub fn run() -> Result<()> { + println!("part 1: {}", part1(INPUT)?); + + Ok(()) +} + +#[derive(Debug)] +struct ParseError { + line: String, +} + +impl ParseError { + fn new(line: &str) -> Self { + ParseError { + line: line.to_string(), + } + } +} + +impl fmt::Display for ParseError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", self.line) + } +} + +impl std::error::Error for ParseError { + fn description(&self) -> &str { + &self.line + } +} + +fn parse(line: &str) -> Option<(usize, usize, usize, usize)> { + // remove '#XXX @ ' start of line + let line = &line[(line.find(" @ ")? + 3)..]; + + // parse 'x,y: NNxNN + let comma = line.find(',')?; + let colon = line.find(':')?; + let x = line[..comma].parse().ok()?; + let y = line[(comma + 1)..colon].parse().ok()?; + + // reduce line to 'NNxNN' + let line = &line[(colon + 2)..]; + + let sep = line.find('x')?; + let width = line[..sep].parse().ok()?; + let height = line[(sep + 1)..].parse().ok()?; + + Some((x, y, width, height)) +} + +fn part1(input: &str) -> Result { + let mut res = 0; + let mut map: HashMap<(usize, usize), u64> = HashMap::default(); + + for line in input.lines() { + let (x, y, width, height) = parse(line).ok_or(ParseError::new(line))?; + + for i in 0..width { + for j in 0..height { + let x = x + i; + let y = y + j; + + // add tissue patch at coordinates (x, y) + let entry = map.entry((x, y)).or_default(); + *entry += 1; + + // count overlap the first time only + if *entry == 2 { + res += 1; + } + } + } + } + + Ok(res) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_provided() { + let input = "#1 @ 1,3: 4x4 +#2 @ 3,1: 4x4 +#3 @ 5,5: 2x2 +"; + assert_eq!(part1(input).unwrap(), 4); + } + + #[test] + fn part1_real() { + assert_eq!(part1(INPUT).unwrap(), 114946); + } +} diff --git a/aoc2018/src/lib.rs b/aoc2018/src/lib.rs index 464d775..2a592b7 100644 --- a/aoc2018/src/lib.rs +++ b/aoc2018/src/lib.rs @@ -1,4 +1,5 @@ pub mod day01; pub mod day02; +pub mod day03; pub type Result = std::result::Result>;