Skip to content

Instantly share code, notes, and snippets.

@3v0k4
Created December 13, 2018 18:41
Show Gist options
  • Select an option

  • Save 3v0k4/4ddb1cb2d173f1343e25f4d964455152 to your computer and use it in GitHub Desktop.

Select an option

Save 3v0k4/4ddb1cb2d173f1343e25f4d964455152 to your computer and use it in GitHub Desktop.
AdventOfCode 2018 PureScript - Day 3
module Main where
import Prelude
import Effect (Effect)
import Effect.Console (logShow)
import Data.Foldable (foldl, sum)
import Data.Maybe (Maybe(..))
import Data.List (List(..), fromFoldable, (:), concatMap)
import Data.Map (Map, empty, lookup, insert, values)
import Data.Tuple (Tuple(..), snd)
import Data.Either (Either(..))
import Data.String.Regex (Regex, match, regex)
import Data.String.Regex.Flags (noFlags)
import Partial.Unsafe (unsafePartial)
import Data.Array.NonEmpty (NonEmptyArray, toArray, (..))
import Data.Int (fromString)
import Data.Set (Set, delete, fromFoldable) as S
input :: Array String
input =[ "#1 @ 393,863: 11x29", "#2 @ 675,133: 15x26", "#3 @ 690,605: 25x22", "#4 @ 342,752: 19x17", "#5 @ 840,36: 14x18", "#6 @ 671,653: 10x23", "#7 @ 685,354: 25x18", "#8 @ 101,902: 13x24", "#9 @ 700,319: 21x20", "#10 @ 221,880: 28x15", "#11 @ 560,609: 10x14", "#12 @ 471,549: 23x14", "#13 @ 150,849: 27x14", "#14 @ 953,65: 29x23", "#15 @ 955,88: 11x10", "#16 @ 859,624: 21x19", "#17 @ 869,902: 16x29", "#18 @ 126,834: 24x17", "#19 @ 873,627: 18x15", "#20 @ 853,240: 18x28", "#21 @ 863,830: 18x11", "#22 @ 54,732: 20x23", "#23 @ 253,825: 20x10", "#24 @ 261,710: 14x13", "#25 @ 383,456: 24x25", "#26 @ 792,324: 28x19", "#27 @ 163,336: 11x12", "#28 @ 983,534: 14x11", "#29 @ 879,249: 11x23", "#30 @ 702,348: 21x28", "#31 @ 730,51: 18x18", "#32 @ 709,647: 26x26", "#33 @ 850,90: 26x28", "#34 @ 56,194: 14x14", "#35 @ 285,967: 23x28", "#36 @ 868,281: 27x22", "#37 @ 243,692: 11x18", "#38 @ 111,508: 15x20", "#39 @ 851,414: 23x12", "#40 @ 717,593: 10x24", "#41 @ 61,369: 18x13", "#42 @ 491,754: 25x24", "#43 @ 227,891: 18x25", "#44 @ 227,893: 27x19", "#45 @ 711,780: 19x23", "#46 @ 89,576: 14x28", "#47 @ 734,966: 28x19", "#48 @ 653,968: 20x20", "#49 @ 913,451: 24x19", "#50 @ 699,125: 21x25", "#51 @ 99,917: 12x25", "#52 @ 789,137: 13x22", "#53 @ 534,657: 17x24", "#54 @ 119,962: 25x12", "#55 @ 115,16: 21x19", "#56 @ 513,833: 16x28", "#57 @ 500,501: 22x12", "#58 @ 950,424: 25x21", "#59 @ 960,443: 24x21", "#60 @ 718,539: 11x16", "#61 @ 732,525: 24x14", "#62 @ 305,577: 16x17", "#63 @ 866,514: 22x21", "#64 @ 357,85: 14x22", "#65 @ 450,285: 19x11", "#66 @ 806,136: 21x11", "#67 @ 797,916: 12x16", "#68 @ 247,681: 22x10", "#69 @ 237,705: 12x27", "#70 @ 749,342: 28x28", "#71 @ 304,932: 10x14", "#72 @ 206,388: 26x12", "#73 @ 930,621: 23x26", "#74 @ 590,123: 18x23", "#75 @ 404,510: 29x20", "#76 @ 654,314: 28x20", "#77 @ 112,363: 13x22", "#78 @ 705,823: 11x21", "#79 @ 537,561: 17x11", "#80 @ 592,380: 12x19", "#81 @ 755,159: 15x18", "#82 @ 459,831: 15x11", "#83 @ 566,722: 28x23", "#84 @ 620,664: 20x11", "#85 @ 56,601: 10x17", "#86 @ 850,112: 11x25", "#87 @ 972,347: 16x16", "#88 @ 758,971: 22x20", "#89 @ 517,232: 15x10", "#90 @ 562,634: 12x16", "#91 @ 826,979: 17x15", "#92 @ 296,619: 26x18", "#93 @ 171,49: 15x23", "#94 @ 945,85: 12x26", "#95 @ 515,355: 11x15", "#96 @ 303,967: 11x24", "#97 @ 966,9: 24x17", "#98 @ 643,321: 11x12", "#99 @ 607,657: 17x22", "#100 @ 429,596: 23x11", "#101 @ 825,913: 24x13", "#102 @ 281,826: 10x29", "#103 @ 582,189: 19x24", "#104 @ 96,379: 16x22", "#105 @ 819,573: 19x20", "#106 @ 346,474: 25x22", "#107 @ 139,804: 10x19", "#108 @ 870,708: 22x23", "#109 @ 306,534: 17x20", "#110 @ 494,285: 23x20", "#111 @ 177,784: 22x22", "#112 @ 195,43: 26x26", "#113 @ 346,519: 28x27", "#114 @ 206,206: 21x20", "#115 @ 648,703: 24x27", "#116 @ 762,940: 17x14", "#117 @ 706,393: 18x14", "#118 @ 602,533: 24x19", "#119 @ 150,232: 17x19", "#120 @ 729,430: 20x16", "#121 @ 343,706: 17x29", "#122 @ 99,87: 13x10", "#123 @ 939,647: 16x28", "#124 @ 365,749: 17x20", "#125 @ 835,517: 28x12", "#126 @ 574,742: 11x16", "#127 @ 143,934: 13x24", "#128 @ 31,394: 21x14", "#129 @ 658,11: 29x12", "#130 @ 372,659: 14x15", "#131 @ 148,362: 26x20", "#132 @ 623,285: 13x12", "#133 @ 560,113: 11x27", "#134 @ 162,759: 27x19", "#135 @ 198,86: 13x28", "#136 @ 614,528: 19x10", "#137 @ 291,770: 11x25", "#138 @ 666,137: 23x16", "#139 @ 497,623: 10x14", "#140 @ 651,306: 24x28", "#141 @ 352,623: 28x13", "#142 @ 849,745: 12x20", "#143 @ 950,726: 24x15", "#144 @ 208,134: 3x10", "#145 @ 206,33: 24x13", "#146 @ 310,552: 11x17", "#147 @ 403,469: 12x21", "#148 @ 710,742: 29x17", "#149 @ 732,322: 25x25", "#150 @ 89,250: 24x20", "#151 @ 960,740: 28x21", "#152 @ 401,809: 23x24", "#153 @ 552,945: 21x12", "#154 @ 688,254: 27x11", "#155 @ 754,921: 21x15", "#156 @ 648,820: 11x29", "#157 @ 797,821: 22x12", "#158 @ 34,324: 10x11", "#159 @ 949,332: 15x20", "#160 @ 175,539: 14x27", "#161 @ 920,467: 19x18", "#162 @ 577,161: 20x18", "#163 @ 937,936: 13x25", "#164 @ 353,561: 15x11", "#165 @ 172,764: 10x23", "#166 @ 94,399: 13x11", "#167 @ 163,909: 16x18", "#168 @ 357,597: 3x12", "#169 @ 185,779: 11x11", "#170 @ 287,531: 18x24", "#171 @ 927,200: 11x21", "#172 @ 811,581: 16x10", "#173 @ 844,123: 10x19", "#174 @ 60,348: 17x27", "#175 @ 8,894: 17x22", "#176 @ 750,914: 18x14", "#177 @ 116,404: 12x19", "#178 @ 962,96: 16x29", "#179 @ 243,711: 21x12", "#180 @ 393,388: 10x15", "#181 @ 961,2: 20x19", "#182 @ 887,982: 29x14", "#183 @ 848,882: 24x11", "#184 @ 504,181: 29x16", "#185 @ 197,201: 15x28", "#186 @ 231,690: 13x17", "#187 @ 187,517: 25x16", "#188 @ 720,121: 12x23", "#189 @ 951,12: 20x28", "#190 @ 93,553: 14x25", "#191 @ 517,941: 26x18", "#192 @ 820,868: 21x18", "#193 @ 635,80: 15x19", "#194 @ 37,444: 18x23", "#195 @ 490,179: 23x20", "#196 @ 132,227: 23x18", "#197 @ 599,732: 11x28", "#198 @ 98,468: 19x13", "#199 @ 443,817: 29x10", "#200 @ 455,490: 26x18", "#201 @ 113,555: 14x18", "#202 @ 875,192: 14x10", "#203 @ 676,918: 22x20", "#204 @ 63,240: 29x24", "#205 @ 140,887: 14x11", "#206 @ 251,326: 15x28", "#207 @ 281,588: 21x12", "#208 @ 179,697: 10x21", "#209 @ 622,288: 24x14", "#210 @ 842,904: 21x25", "#211 @ 432,451: 26x12", "#212 @ 57,971: 10x18", "#213 @ 112,584: 25x24", "#214 @ 894,775: 27x26", "#215 @ 474,954: 10x24", "#216 @ 261,690: 14x23", "#217 @ 849,355: 22x20", "#218 @ 215,671: 29x20", "#219 @ 159,3: 13x18", "#220 @ 665,58: 19x21", "#221 @ 428,429: 20x26", "#222 @ 215,886: 21x22", "#223 @ 330,55: 16x15", "#224 @ 195,974: 12x11", "#225 @ 522,395: 11x18", "#226 @ 790,632: 29x10", "#227 @ 733,818: 16x28", "#228 @ 288,569: 17x23", "#229 @ 891,893: 16x18", "#230 @ 889,2: 19x27", "#231 @ 333,67: 14x27", "#232 @ 441,589: 23x27", "#233 @ 310,967: 18x15", "#234 @ 246,232: 11x27", "#235 @ 970,432: 22x22", "#236 @ 521,635: 28x27", "#237 @ 877,357: 17x17", "#238 @ 295,811: 29x26", "#239 @ 500,359: 12x16", "#240 @ 684,340: 23x10", "#241 @ 878,507: 25x21", "#242 @ 162,643: 22x21", "#243 @ 580,769: 18x23", "#244 @ 708,841: 10x10", "#245 @ 832,549: 29x28", "#246 @ 841,551: 13x23", "#247 @ 685,307: 15x12", "#248 @ 367,82: 22x19", "#249 @ 631,393: 12x10", "#250 @ 171,25: 12x27", "#251 @ 749,695: 22x12", "#252 @ 598,374: 10x24", "#253 @ 330,677: 12x17", "#254 @ 717,333: 28x27", "#255 @ 578,535: 17x14", "#256 @ 531,970: 14x12", "#257 @ 966,727: 20x19", "#258 @ 324,661: 15x23", "#259 @ 360,362: 13x13", "#260 @ 718,334: 29x17", "#261 @ 96,882: 20x14", "#262 @ 117,586: 14x19", "#263 @ 435,406: 17x26", "#264 @ 138,822: 27x27", "#265 @ 741,819: 22x29", "#266 @ 375,55: 26x12", "#267 @ 979,537: 11x27", "#268 @ 365,89: 28x17", "#269 @ 112,224: 27x11", "#270 @ 720,425: 16x29", "#271 @ 933,760: 12x19", "#272 @ 886,627: 25x23", "#273 @ 179,973: 25x20", "#274 @ 68,445: 14x19", "#275 @ 200,432: 26x11", "#276 @ 713,521: 26x23", "#277 @ 180,49: 15x22", "#278 @ 753,862: 17x16", "#279 @ 345,523: 13x27", "#280 @ 547,22: 22x16", "#281 @ 47,248: 11x29", "#282 @ 816,132: 18x26", "#283 @ 453,647: 15x28", "#284 @ 175,907: 12x16", "#285 @ 883,447: 18x18", "#286 @ 642,733: 10x16", "#287 @ 330,200: 10x12", "#288 @ 672,331: 18x28", "#289 @ 305,477: 13x28", "#290 @ 840,853: 19x29", "#291 @ 520,341: 25x10", "#292 @ 32,142: 27x14", "#293 @ 495,365: 21x18", "#294 @ 920,906: 29x15", "#295 @ 136,138: 23x17", "#296 @ 520,222: 14x17", "#297 @ 407,494: 27x23", "#298 @ 801,847: 14x20", "#299 @ 958,57: 25x12", "#300 @ 858,448: 12x23", "#301 @ 434,600: 29x14", "#302 @ 501,544: 22x12", "#303 @ 287,912: 25x25", "#304 @ 649,786: 17x24", "#305 @ 565,27: 10x28", "#306 @ 555,763: 29x24", "#307 @ 967,278: 14x27", "#308 @ 721,638: 21x14", "#309 @ 516,719: 27x14", "#310 @ 705,347: 16x11", "#311 @ 552,227: 28x14", "#312 @ 963,611: 26x25", "#313 @ 680,603: 23x26", "#314 @ 609,277: 18x24", "#315 @ 520,242: 25x24", "#316 @ 699,261: 15x20", "#317 @ 21,854: 21x21", "#318 @ 364,284: 19x12", "#319 @ 311,844: 21x20", "#320 @ 365,565: 29x29", "#321 @ 918,161: 24x29", "#322 @ 364,300: 28x12", "#323 @ 564,764: 23x11", "#324 @ 107,145: 16x14", "#325 @ 352,938: 19x23", "#326 @ 174,247: 3x7", "#327 @ 22,461: 22x19", "#328 @ 753,987: 10x4", "#329 @ 241,955: 16x22", "#330 @ 752,239: 11x17", "#331 @ 670,222: 23x26", "#332 @ 805,497: 26x19", "#333 @ 370,371: 14x23", "#334 @ 242,891: 11x15", "#335 @ 33,714: 18x16", "#336 @ 326,449: 14x13", "#337 @ 29,402: 4x4", "#338 @ 704,920: 21x15", "#339 @ 321,100: 28x26", "#340 @ 645,314: 14x18", "#341 @ 930,942: 22x20", "#342 @ 874,694: 24x17", "#343 @ 402,121: 12x13", "#344 @ 119,807: 10x18", "#345 @ 97,566: 20x16", "#346 @ 500,574: 22x29", "#347 @ 297,478: 14x22", "#348 @ 695,622: 22x11", "#349 @ 167,553: 12x17", "#350 @ 302,432: 27x20", "#351 @ 365,229: 20x18", "#352 @ 241,438: 23x27", "#353 @ 585,666: 17x19", "#354 @ 363,537: 18x28", "#355 @ 104,241: 21x13", "#356 @ 187,79: 24x17", "#357 @ 833,496: 20x14", "#358 @ 119,102: 16x10", "#359 @ 566,44: 18x16", "#360 @ 423,662: 11x20", "#361 @ 112,383: 11x21", "#362 @ 719,103: 24x10", "#363 @ 406,200: 19x23", "#364 @ 506,29: 10x22", "#365 @ 390,592: 13x10", "#366 @ 156,737: 15x18", "#367 @ 29,366: 23x24", "#368 @ 93,6: 19x17", "#369 @ 700,449: 16x27", "#370 @ 790,148: 29x26", "#371 @ 532,399: 25x25", "#372 @ 433,594: 26x13", "#373 @ 473,646: 22x23", "#374 @ 512,230: 19x23", "#375 @ 801,195: 12x22", "#376 @ 777,377: 22x28", "#377 @ 913,631: 12x18", "#378 @ 473,550: 13x11", "#379 @ 812,17: 15x20", "#380 @ 928,494: 21x25", "#381 @ 684,902: 27x28", "#382 @ 326,10: 28x10", "#383 @ 764,966: 24x22", "#384 @ 288,826: 25x28", "#385 @ 560,820: 10x24", "#386 @ 77,79: 15x26", "#387 @ 716,389: 27x27", "#388 @ 373,572: 16x21", "#389 @ 63,51: 12x17", "#390 @ 801,830: 17x16", "#391 @ 370,111: 29x14", "#392 @ 343,552: 19x26", "#393 @ 915,934: 28x24", "#394 @ 729,782: 17x15", "#395 @ 410,881: 20x24", "#396 @ 853,463: 10x23", "#397 @ 877,193: 10x17", "#398 @ 401,0: 29x10", "#399 @ 190,53: 19x11", "#400 @ 616,78: 27x19", "#401 @ 456,557: 24x26", "#402 @ 594,978: 18x12", "#403 @ 612,95: 12x20", "#404 @ 177,417: 18x20", "#405 @ 628,744: 29x18", "#406 @ 711,327: 15x21", "#407 @ 953,616: 20x19", "#408 @ 94,6: 20x14", "#409 @ 272,825: 10x29", "#410 @ 200,177: 17x27", "#411 @ 937,919: 25x25", "#412 @ 708,394: 26x20", "#413 @ 945,638: 11x12", "#414 @ 780,788: 25x22", "#415 @ 870,895: 25x11", "#416 @ 518,655: 4x7", "#417 @ 168,421: 27x10", "#418 @ 493,188: 29x11", "#419 @ 695,448: 26x13", "#420 @ 849,767: 25x27", "#421 @ 77,407: 14x28", "#422 @ 359,669: 21x13", "#423 @ 318,861: 29x11", "#424 @ 690,29: 22x13", "#425 @ 244,318: 10x15", "#426 @ 328,57: 10x26", "#427 @ 347,103: 22x28", "#428 @ 154,4: 16x28", "#429 @ 586,682: 12x27", "#430 @ 147,841: 11x22", "#431 @ 781,328: 24x22", "#432 @ 421,952: 22x20", "#433 @ 297,347: 13x25", "#434 @ 184,278: 15x18", "#435 @ 833,848: 12x17", "#436 @ 84,16: 24x17", "#437 @ 541,236: 10x18", "#438 @ 510,915: 18x19", "#439 @ 599,595: 20x29", "#440 @ 303,478: 27x24", "#441 @ 129,964: 10x6", "#442 @ 915,455: 21x18", "#443 @ 271,905: 18x28", "#444 @ 718,891: 27x25", "#445 @ 759,667: 21x17", "#446 @ 793,836: 27x13", "#447 @ 389,860: 24x13", "#448 @ 623,312: 20x17", "#449 @ 758,340: 23x18", "#450 @ 124,282: 10x25", "#451 @ 51,460: 25x10", "#452 @ 26,905: 18x15", "#453 @ 726,388: 21x13", "#454 @ 369,200: 29x26", "#455 @ 739,52: 15x22", "#456 @ 543,822: 26x27", "#457 @ 31,506: 14x16", "#458 @ 440,575: 14x20", "#459 @ 706,621: 18x26", "#460 @ 788,388: 22x10", "#461 @ 650,121: 29x28", "#462 @ 43,439: 20x13", "#463 @ 807,451: 21x15", "#464 @ 897,456: 12x14", "#465 @ 948,82: 17x24", "#466 @ 44,612: 13x13", "#467 @ 876,820: 10x17", "#468 @ 899,780: 4x4", "#469 @ 878,214: 23x18", "#470 @ 954,136: 13x15", "#471 @ 424,200: 24x17", "#472 @ 745,774: 20x29", "#473 @ 341,545: 22x19", "#474 @ 493,767: 13x14", "#475 @ 551,644: 24x22", "#476 @ 501,550: 28x16", "#477 @ 133,300: 13x20", "#478 @ 882,971: 19x18", "#479 @ 590,200: 18x13", "#480 @ 254,691: 13x24", "#481 @ 89,154: 16x11", "#482 @ 327,14: 19x15", "#483 @ 575,486: 25x18", "#484 @ 382,592: 22x22", "#485 @ 433,216: 21x23", "#486 @ 978,610: 17x24", "#487 @ 65,312: 14x22", "#488 @ 447,5: 26x24", "#489 @ 298,690: 27x18", "#490 @ 146,877: 22x17", "#491 @ 280,458: 24x26", "#492 @ 813,237: 22x26", "#493 @ 220,135: 23x20", "#494 @ 78,314: 11x22", "#495 @ 918,506: 24x12", "#496 @ 801,762: 14x27", "#497 @ 440,597: 23x17", "#498 @ 472,498: 27x26", "#499 @ 407,460: 15x14", "#500 @ 55,131: 29x23", "#501 @ 617,388: 16x10", "#502 @ 164,333: 21x28", "#503 @ 742,878: 27x22", "#504 @ 148,127: 16x14", "#505 @ 211,112: 29x24", "#506 @ 432,685: 11x29", "#507 @ 557,191: 18x23", "#508 @ 131,824: 19x28", "#509 @ 545,634: 26x29", "#510 @ 264,663: 28x12", "#511 @ 42,323: 12x12", "#512 @ 461,162: 13x21", "#513 @ 153,845: 17x11", "#514 @ 801,448: 10x16", "#515 @ 503,581: 28x14", "#516 @ 487,667: 26x12", "#517 @ 955,841: 17x21", "#518 @ 692,938: 26x25", "#519 @ 804,839: 18x15", "#520 @ 582,22: 28x23", "#521 @ 834,83: 18x25", "#522 @ 72,781: 15x17", "#523 @ 765,978: 12x12", "#524 @ 267,565: 25x21", "#525 @ 252,596: 16x16", "#526 @ 9,867: 23x27", "#527 @ 310,50: 24x26", "#528 @ 34,841: 27x12", "#529 @ 232,56: 26x11", "#530 @ 979,45: 15x18", "#531 @ 738,247: 17x29", "#532 @ 607,341: 25x12", "#533 @ 418,20: 27x24", "#534 @ 926,56: 13x18", "#535 @ 856,123: 23x27", "#536 @ 612,299: 14x20", "#537 @ 311,490: 21x19", "#538 @ 408,826: 23x10", "#539 @ 629,88: 14x16", "#540 @ 908,733: 27x26", "#541 @ 143,207: 21x15", "#542 @ 303,545: 21x29", "#543 @ 975,64: 13x28", "#544 @ 932,373: 28x10", "#545 @ 876,417: 10x10", "#546 @ 193,767: 28x25", "#547 @ 957,143: 13x10", "#548 @ 263,432: 7x4", "#549 @ 949,685: 23x21", "#550 @ 382,203: 11x21", "#551 @ 33,640: 12x27", "#552 @ 312,733: 21x12", "#553 @ 81,942: 12x18", "#554 @ 122,809: 3x13", "#555 @ 252,427: 22x23", "#556 @ 868,181: 26x12", "#557 @ 679,972: 25x27", "#558 @ 765,907: 23x25", "#559 @ 494,666: 19x18", "#560 @ 170,701: 21x29", "#561 @ 807,626: 15x11", "#562 @ 211,859: 12x17", "#563 @ 309,498: 27x15", "#564 @ 960,66: 26x28", "#565 @ 840,267: 20x26", "#566 @ 129,847: 22x11", "#567 @ 158,796: 24x26", "#568 @ 954,335: 10x12", "#569 @ 59,755: 15x14", "#570 @ 963,977: 27x11", "#571 @ 787,10: 26x16", "#572 @ 191,497: 20x25", "#573 @ 232,903: 11x26", "#574 @ 869,789: 20x19", "#575 @ 221,378: 15x27", "#576 @ 155,81: 20x21", "#577 @ 509,77: 19x11", "#578 @ 33,676: 25x24", "#579 @ 715,715: 19x11", "#580 @ 579,758: 27x25", "#581 @ 120,902: 15x29", "#582 @ 208,412: 25x21", "#583 @ 267,775: 28x24", "#584 @ 380,105: 25x27", "#585 @ 356,848: 22x14", "#586 @ 272,553: 25x21", "#587 @ 423,951: 25x25", "#588 @ 207,82: 11x29", "#589 @ 41,833: 12x5", "#590 @ 709,543: 19x15", "#591 @ 79,547: 17x17", "#592 @ 436,670: 15x29", "#593 @ 171,244: 12x17", "#594 @ 278,97: 18x23", "#595 @ 490,175: 22x17", "#596 @ 357,285: 15x16", "#597 @ 764,725: 22x29", "#598 @ 720,131: 24x24", "#599 @ 8,331: 21x18", "#600 @ 289,738: 23x24", "#601 @ 153,947: 16x12", "#602 @ 914,637: 24x11", "#603 @ 611,330: 25x16", "#604 @ 553,798: 28x15", "#605 @ 953,776: 16x14", "#606 @ 928,937: 19x17", "#607 @ 451,808: 26x13", "#608 @ 352,592: 18x22", "#609 @ 775,946: 11x23", "#610 @ 391,475: 14x29", "#611 @ 87,760: 14x20", "#612 @ 599,971: 25x29", "#613 @ 723,343: 11x22", "#614 @ 580,166: 22x23", "#615 @ 366,291: 22x18", "#616 @ 704,887: 20x21", "#617 @ 761,883: 23x17", "#618 @ 352,730: 11x12", "#619 @ 911,858: 13x12", "#620 @ 919,466: 25x24", "#621 @ 321,813: 11x11", "#622 @ 53,422: 29x26", "#623 @ 711,514: 18x26", "#624 @ 455,284: 26x18", "#625 @ 677,871: 23x15", "#626 @ 731,648: 10x25", "#627 @ 53,759: 10x13", "#628 @ 930,68: 25x19", "#629 @ 719,918: 22x11", "#630 @ 108,247: 14x23", "#631 @ 535,675: 28x24", "#632 @ 335,112: 18x14", "#633 @ 254,450: 28x26", "#634 @ 852,870: 12x29", "#635 @ 308,752: 16x14", "#636 @ 299,692: 21x19", "#637 @ 288,487: 20x19", "#638 @ 661,5: 27x28", "#639 @ 672,709: 29x19", "#640 @ 837,584: 12x20", "#641 @ 891,935: 28x13", "#642 @ 808,69: 27x25", "#643 @ 166,384: 28x26", "#644 @ 259,688: 21x25", "#645 @ 54,658: 18x10", "#646 @ 62,333: 12x24", "#647 @ 731,92: 25x19", "#648 @ 129,94: 23x21", "#649 @ 217,592: 16x20", "#650 @ 41,909: 23x17", "#651 @ 865,107: 5x7", "#652 @ 79,565: 23x22", "#653 @ 155,187: 15x20", "#654 @ 873,705: 14x26", "#655 @ 376,461: 25x22", "#656 @ 329,6: 28x20", "#657 @ 723,969: 23x11", "#658 @ 115,859: 12x10", "#659 @ 674,888: 17x23", "#660 @ 703,750: 24x24", "#661 @ 242,76: 14x28", "#662 @ 763,842: 23x17", "#663 @ 310,26: 12x10", "#664 @ 765,70: 21x28", "#665 @ 640,316: 27x26", "#666 @ 143,817: 27x13", "#667 @ 107,443: 29x11", "#668 @ 923,904: 15x21", "#669 @ 969,114: 19x13", "#670 @ 940,72: 10x23", "#671 @ 476,848: 18x23", "#672 @ 348,5: 20x10", "#673 @ 906,404: 24x27", "#674 @ 673,694: 18x20", "#675 @ 112,12: 16x14", "#676 @ 77,322: 21x14", "#677 @ 899,104: 13x16", "#678 @ 202,131: 18x25", "#679 @ 324,263: 13x10", "#680 @ 18,921: 20x24", "#681 @ 690,604: 18x26", "#682 @ 628,191: 14x14", "#683 @ 467,632: 11x27", "#684 @ 32,906: 19x21", "#685 @ 602,112: 14x18", "#686 @ 305,692: 3x13", "#687 @ 12,452: 13x29", "#688 @ 834,462: 18x29", "#689 @ 81,782: 12x25", "#690 @ 824,521: 15x17", "#691 @ 919,408: 20x22", "#692 @ 410,712: 24x16", "#693 @ 442,621: 17x26", "#694 @ 337,565: 25x12", "#695 @ 943,607: 12x15", "#696 @ 716,127: 15x16", "#697 @ 733,660: 26x15", "#698 @ 109,855: 24x24", "#699 @ 236,825: 26x27", "#700 @ 892,373: 26x27", "#701 @ 911,789: 27x26", "#702 @ 704,654: 13x24", "#703 @ 146,355: 11x16", "#704 @ 888,105: 15x23", "#705 @ 143,909: 21x26", "#706 @ 961,766: 16x16", "#707 @ 124,856: 18x22", "#708 @ 170,144: 22x26", "#709 @ 181,264: 22x23", "#710 @ 364,22: 15x14", "#711 @ 702,961: 24x24", "#712 @ 161,98: 25x10", "#713 @ 466,546: 23x11", "#714 @ 463,266: 19x26", "#715 @ 414,10: 18x13", "#716 @ 101,396: 25x24", "#717 @ 69,204: 14x20", "#718 @ 437,589: 15x24", "#719 @ 403,899: 25x10", "#720 @ 429,650: 10x16", "#721 @ 789,907: 28x21", "#722 @ 562,783: 19x17", "#723 @ 11,471: 17x14", "#724 @ 688,308: 13x26", "#725 @ 878,300: 23x19", "#726 @ 455,623: 15x23", "#727 @ 943,363: 19x18", "#728 @ 724,715: 15x15", "#729 @ 891,706: 19x14", "#730 @ 154,389: 20x17", "#731 @ 872,140: 15x28", "#732 @ 940,681: 27x14", "#733 @ 741,361: 24x17", "#734 @ 961,282: 18x21", "#735 @ 62,533: 23x17", "#736 @ 95,130: 23x12", "#737 @ 230,581: 18x24", "#738 @ 344,765: 12x18", "#739 @ 78,204: 22x10", "#740 @ 862,294: 13x18", "#741 @ 131,949: 21x15", "#742 @ 194,177: 23x24", "#743 @ 106,68: 23x22", "#744 @ 745,982: 28x17", "#745 @ 366,202: 25x28", "#746 @ 844,75: 16x11", "#747 @ 765,281: 15x10", "#748 @ 280,569: 26x16", "#749 @ 84,458: 24x13", "#750 @ 930,609: 23x11", "#751 @ 642,189: 12x19", "#752 @ 403,474: 24x25", "#753 @ 489,246: 22x18", "#754 @ 617,570: 25x29", "#755 @ 491,557: 18x11", "#756 @ 252,75: 22x18", "#757 @ 938,833: 18x13", "#758 @ 170,336: 24x22", "#759 @ 857,185: 16x15", "#760 @ 583,835: 5x4", "#761 @ 611,181: 27x26", "#762 @ 811,580: 29x17", "#763 @ 4,348: 12x15", "#764 @ 810,853: 16x19", "#765 @ 681,912: 26x16", "#766 @ 381,251: 28x16", "#767 @ 760,734: 12x13", "#768 @ 771,82: 26x11", "#769 @ 284,718: 17x24", "#770 @ 866,347: 17x25", "#771 @ 78,134: 23x26", "#772 @ 222,419: 22x15", "#773 @ 250,440: 5x4", "#774 @ 438,598: 18x19", "#775 @ 51,243: 23x27", "#776 @ 392,176: 10x20", "#777 @ 61,543: 27x17", "#778 @ 58,66: 25x29", "#779 @ 58,808: 14x15", "#780 @ 483,485: 18x24", "#781 @ 474,955: 25x22", "#782 @ 378,379: 23x10", "#783 @ 882,615: 23x18", "#784 @ 735,418: 25x16", "#785 @ 335,191: 14x12", "#786 @ 638,377: 26x18", "#787 @ 611,369: 17x25", "#788 @ 82,769: 18x10", "#789 @ 929,955: 23x13", "#790 @ 564,476: 12x16", "#791 @ 372,742: 15x10", "#792 @ 476,845: 24x18", "#793 @ 900,560: 29x13", "#794 @ 612,196: 23x11", "#795 @ 808,248: 10x25", "#796 @ 567,125: 20x22", "#797 @ 252,601: 25x21", "#798 @ 382,217: 26x25", "#799 @ 317,488: 27x18", "#800 @ 98,390: 17x27", "#801 @ 954,75: 11x21", "#802 @ 99,43: 10x16", "#803 @ 761,81: 13x14", "#804 @ 6,902: 10x10", "#805 @ 854,345: 25x17", "#806 @ 0,778: 13x23", "#807 @ 445,564: 29x27", "#808 @ 275,923: 17x21", "#809 @ 346,744: 28x26", "#810 @ 428,953: 7x17", "#811 @ 300,689: 13x17", "#812 @ 510,728: 27x20", "#813 @ 246,584: 18x14", "#814 @ 331,538: 24x26", "#815 @ 468,664: 5x8", "#816 @ 25,900: 10x15", "#817 @ 156,742: 16x21", "#818 @ 893,211: 29x25", "#819 @ 80,190: 28x19", "#820 @ 718,371: 20x19", "#821 @ 231,676: 16x27", "#822 @ 217,901: 23x26", "#823 @ 52,580: 12x11", "#824 @ 856,307: 15x28", "#825 @ 515,649: 25x20", "#826 @ 58,815: 21x23", "#827 @ 884,633: 19x17", "#828 @ 4,765: 28x17", "#829 @ 499,735: 12x19", "#830 @ 965,971: 13x10", "#831 @ 855,500: 27x11", "#832 @ 535,375: 24x22", "#833 @ 35,615: 28x19", "#834 @ 513,22: 14x18", "#835 @ 652,315: 15x16", "#836 @ 907,375: 14x19", "#837 @ 284,731: 14x14", "#838 @ 499,62: 22x28", "#839 @ 228,319: 28x13", "#840 @ 596,727: 14x10", "#841 @ 629,307: 23x23", "#842 @ 102,294: 28x29", "#843 @ 458,750: 23x17", "#844 @ 893,106: 15x19", "#845 @ 306,817: 27x26", "#846 @ 295,693: 16x23", "#847 @ 448,829: 21x10", "#848 @ 884,418: 26x29", "#849 @ 239,308: 15x23", "#850 @ 78,403: 26x14", "#851 @ 693,349: 26x29", "#852 @ 151,825: 13x19", "#853 @ 227,909: 17x18", "#854 @ 270,671: 21x23", "#855 @ 568,853: 25x14", "#856 @ 38,572: 26x20", "#857 @ 391,849: 17x29", "#858 @ 570,569: 17x24", "#859 @ 225,893: 11x12", "#860 @ 376,520: 20x24", "#861 @ 909,724: 19x13", "#862 @ 879,802: 29x27", "#863 @ 365,41: 15x26", "#864 @ 554,8: 16x17", "#865 @ 118,510: 3x12", "#866 @ 42,659: 25x12", "#867 @ 46,421: 16x25", "#868 @ 232,850: 18x26", "#869 @ 986,21: 10x27", "#870 @ 138,445: 26x15", "#871 @ 47,968: 20x13", "#872 @ 665,686: 15x20", "#873 @ 864,756: 16x18", "#874 @ 552,355: 25x21", "#875 @ 453,482: 13x11", "#876 @ 839,7: 18x16", "#877 @ 831,141: 11x10", "#878 @ 732,806: 11x20", "#879 @ 59,513: 16x25", "#880 @ 815,149: 25x12", "#881 @ 605,288: 25x23", "#882 @ 144,188: 26x14", "#883 @ 104,945: 16x23", "#884 @ 42,153: 13x16", "#885 @ 785,98: 4x10", "#886 @ 655,824: 17x28", "#887 @ 71,516: 11x14", "#888 @ 169,792: 19x20", "#889 @ 673,867: 27x21", "#890 @ 754,435: 16x26", "#891 @ 301,348: 18x12", "#892 @ 849,1: 19x20", "#893 @ 943,952: 23x15", "#894 @ 299,556: 27x18", "#895 @ 815,763: 28x10", "#896 @ 250,437: 13x13", "#897 @ 437,414: 10x11", "#898 @ 455,562: 13x11", "#899 @ 860,11: 17x29", "#900 @ 146,215: 14x18", "#901 @ 881,683: 11x23", "#902 @ 573,571: 11x18", "#903 @ 394,760: 16x21", "#904 @ 415,563: 14x12", "#905 @ 859,54: 10x24", "#906 @ 78,373: 23x27", "#907 @ 218,876: 19x19", "#908 @ 877,151: 15x29", "#909 @ 41,493: 20x29", "#910 @ 303,25: 12x11", "#911 @ 901,490: 20x23", "#912 @ 113,482: 11x26", "#913 @ 303,729: 11x24", "#914 @ 44,352: 24x21", "#915 @ 767,267: 11x23", "#916 @ 829,22: 17x25", "#917 @ 463,277: 27x27", "#918 @ 752,901: 17x28", "#919 @ 23,388: 17x13", "#920 @ 909,572: 13x22", "#921 @ 976,515: 19x27", "#922 @ 649,332: 23x22", "#923 @ 884,401: 21x13", "#924 @ 946,444: 24x10", "#925 @ 238,938: 25x28", "#926 @ 784,744: 15x12", "#927 @ 299,680: 15x22", "#928 @ 621,189: 29x23", "#929 @ 243,257: 18x23", "#930 @ 631,271: 17x25", "#931 @ 829,986: 10x4", "#932 @ 690,445: 25x23", "#933 @ 856,98: 27x11", "#934 @ 919,150: 17x14", "#935 @ 870,887: 27x24", "#936 @ 747,164: 26x21", "#937 @ 402,714: 15x19", "#938 @ 48,321: 23x29", "#939 @ 544,619: 18x25", "#940 @ 272,698: 21x18", "#941 @ 116,647: 11x25", "#942 @ 313,965: 10x17", "#943 @ 680,893: 29x13", "#944 @ 947,664: 11x25", "#945 @ 169,859: 11x13", "#946 @ 896,774: 11x14", "#947 @ 115,142: 16x22", "#948 @ 690,643: 15x27", "#949 @ 8,768: 24x23", "#950 @ 337,490: 15x11", "#951 @ 375,403: 22x16", "#952 @ 701,965: 15x20", "#953 @ 339,541: 11x16", "#954 @ 502,957: 26x12", "#955 @ 369,248: 24x22", "#956 @ 934,4: 28x17", "#957 @ 242,900: 13x21", "#958 @ 456,4: 20x26", "#959 @ 555,623: 3x6", "#960 @ 424,482: 24x25", "#961 @ 564,637: 5x9", "#962 @ 518,545: 25x29", "#963 @ 354,761: 15x16", "#964 @ 709,777: 20x24", "#965 @ 786,817: 28x14", "#966 @ 105,129: 21x13", "#967 @ 39,678: 4x17", "#968 @ 594,621: 25x10", "#969 @ 123,959: 22x16", "#970 @ 479,298: 28x14", "#971 @ 928,84: 12x17", "#972 @ 924,955: 18x27", "#973 @ 306,851: 13x16", "#974 @ 288,830: 27x12", "#975 @ 83,893: 29x18", "#976 @ 877,112: 10x26", "#977 @ 108,870: 19x17", "#978 @ 370,97: 5x3", "#979 @ 748,865: 23x20", "#980 @ 271,92: 23x19", "#981 @ 603,192: 25x28", "#982 @ 860,522: 29x21", "#983 @ 920,412: 19x27", "#984 @ 473,806: 13x13", "#985 @ 850,462: 14x10", "#986 @ 593,184: 25x18", "#987 @ 894,410: 16x16", "#988 @ 607,91: 11x14", "#989 @ 77,331: 25x18", "#990 @ 770,675: 17x11", "#991 @ 399,109: 26x11", "#992 @ 754,706: 13x22", "#993 @ 863,103: 18x21", "#994 @ 420,608: 22x25", "#995 @ 380,97: 23x16", "#996 @ 463,178: 19x12", "#997 @ 308,681: 11x29", "#998 @ 615,479: 27x22", "#999 @ 101,880: 22x26", "#1000 @ 351,24: 16x13", "#1001 @ 362,609: 12x23", "#1002 @ 421,8: 16x11", "#1003 @ 318,611: 18x16", "#1004 @ 805,32: 26x12", "#1005 @ 702,591: 27x22", "#1006 @ 183,901: 20x18", "#1007 @ 298,552: 25x21", "#1008 @ 457,289: 10x25", "#1009 @ 974,344: 15x22", "#1010 @ 581,743: 25x24", "#1011 @ 704,796: 13x10", "#1012 @ 107,454: 17x19", "#1013 @ 60,837: 14x27", "#1014 @ 95,558: 18x17", "#1015 @ 649,569: 24x25", "#1016 @ 962,733: 27x27", "#1017 @ 500,4: 24x25", "#1018 @ 757,972: 24x20", "#1019 @ 250,331: 16x29", "#1020 @ 392,166: 12x13", "#1021 @ 865,502: 20x21", "#1022 @ 159,221: 17x24", "#1023 @ 266,819: 24x21", "#1024 @ 265,599: 11x24", "#1025 @ 193,557: 27x18", "#1026 @ 15,911: 10x16", "#1027 @ 873,201: 10x12", "#1028 @ 295,830: 15x24", "#1029 @ 674,74: 28x16", "#1030 @ 940,940: 16x29", "#1031 @ 17,893: 14x10", "#1032 @ 575,528: 14x13", "#1033 @ 921,618: 16x22", "#1034 @ 855,713: 23x22", "#1035 @ 935,399: 25x21", "#1036 @ 173,643: 17x15", "#1037 @ 868,425: 19x18", "#1038 @ 168,570: 29x14", "#1039 @ 505,731: 19x29", "#1040 @ 824,139: 28x23", "#1041 @ 818,503: 27x28", "#1042 @ 523,825: 11x26", "#1043 @ 581,833: 10x14", "#1044 @ 766,420: 14x21", "#1045 @ 676,124: 22x28", "#1046 @ 513,258: 17x19", "#1047 @ 188,866: 13x28", "#1048 @ 232,50: 24x12", "#1049 @ 725,533: 18x18", "#1050 @ 753,858: 26x28", "#1051 @ 769,342: 8x12", "#1052 @ 965,296: 15x17", "#1053 @ 920,757: 27x16", "#1054 @ 775,755: 21x13", "#1055 @ 217,953: 21x16", "#1056 @ 121,492: 29x24", "#1057 @ 347,7: 12x18", "#1058 @ 75,763: 23x10", "#1059 @ 336,576: 24x26", "#1060 @ 864,252: 29x13", "#1061 @ 98,633: 28x19", "#1062 @ 539,229: 19x10", "#1063 @ 233,570: 24x29", "#1064 @ 482,251: 16x27", "#1065 @ 812,762: 13x17", "#1066 @ 237,958: 22x20", "#1067 @ 260,694: 12x29", "#1068 @ 492,219: 26x27", "#1069 @ 694,614: 22x18", "#1070 @ 112,276: 24x10", "#1071 @ 158,346: 19x15", "#1072 @ 10,779: 10x14", "#1073 @ 503,16: 13x14", "#1074 @ 690,164: 26x23", "#1075 @ 52,323: 16x24", "#1076 @ 448,595: 10x15", "#1077 @ 744,772: 11x20", "#1078 @ 907,49: 27x14", "#1079 @ 382,474: 17x16", "#1080 @ 642,576: 14x16", "#1081 @ 455,616: 20x20", "#1082 @ 935,657: 18x12", "#1083 @ 941,77: 13x14", "#1084 @ 761,85: 11x16", "#1085 @ 335,643: 25x21", "#1086 @ 154,900: 20x13", "#1087 @ 516,52: 14x16", "#1088 @ 654,318: 27x29", "#1089 @ 102,440: 11x10", "#1090 @ 464,660: 18x20", "#1091 @ 894,884: 13x18", "#1092 @ 986,42: 14x13", "#1093 @ 968,689: 22x17", "#1094 @ 438,492: 20x27", "#1095 @ 506,335: 15x29", "#1096 @ 447,594: 23x28", "#1097 @ 798,504: 17x13", "#1098 @ 40,631: 16x28", "#1099 @ 834,860: 19x21", "#1100 @ 533,597: 28x18", "#1101 @ 744,885: 19x18", "#1102 @ 465,675: 11x25", "#1103 @ 45,571: 18x26", "#1104 @ 133,444: 19x12", "#1105 @ 874,1: 19x25", "#1106 @ 350,463: 25x17", "#1107 @ 92,553: 22x19", "#1108 @ 403,948: 24x14", "#1109 @ 340,104: 20x18", "#1110 @ 399,752: 23x12", "#1111 @ 188,197: 13x19", "#1112 @ 26,481: 15x17", "#1113 @ 903,589: 28x24", "#1114 @ 506,292: 7x6", "#1115 @ 328,258: 27x25", "#1116 @ 978,544: 10x29", "#1117 @ 503,64: 12x25", "#1118 @ 99,931: 11x18", "#1119 @ 200,191: 16x12", "#1120 @ 50,708: 25x24", "#1121 @ 274,799: 17x27", "#1122 @ 636,788: 17x18", "#1123 @ 451,746: 13x17", "#1124 @ 261,428: 15x26", "#1125 @ 329,792: 25x19", "#1126 @ 572,807: 19x17", "#1127 @ 198,609: 27x10", "#1128 @ 104,49: 14x15", "#1129 @ 30,880: 16x19", "#1130 @ 348,160: 14x12", "#1131 @ 895,627: 23x14", "#1132 @ 104,320: 22x14", "#1133 @ 293,535: 13x26", "#1134 @ 230,385: 11x28", "#1135 @ 782,636: 27x15", "#1136 @ 893,926: 16x13", "#1137 @ 822,134: 26x12", "#1138 @ 801,822: 17x13", "#1139 @ 945,0: 17x18", "#1140 @ 778,96: 15x18", "#1141 @ 499,626: 5x6", "#1142 @ 62,526: 29x10", "#1143 @ 528,962: 12x13", "#1144 @ 296,573: 14x25", "#1145 @ 673,398: 14x11", "#1146 @ 223,878: 10x15", "#1147 @ 149,949: 24x29", "#1148 @ 664,391: 25x11", "#1149 @ 234,343: 21x15", "#1150 @ 443,667: 24x26", "#1151 @ 640,986: 25x13", "#1152 @ 664,667: 27x28", "#1153 @ 975,260: 24x27", "#1154 @ 383,868: 18x13", "#1155 @ 374,851: 26x18", "#1156 @ 375,399: 25x22", "#1157 @ 229,904: 12x14", "#1158 @ 581,197: 21x15", "#1159 @ 388,118: 13x20", "#1160 @ 801,193: 29x28", "#1161 @ 949,691: 19x25", "#1162 @ 635,468: 11x27", "#1163 @ 705,38: 11x15", "#1164 @ 777,627: 21x12", "#1165 @ 159,748: 13x14", "#1166 @ 714,809: 26x17", "#1167 @ 169,157: 14x29", "#1168 @ 89,271: 24x10", "#1169 @ 301,700: 29x18", "#1170 @ 509,896: 13x22", "#1171 @ 91,77: 10x16", "#1172 @ 418,401: 16x13", "#1173 @ 93,822: 27x18", "#1174 @ 917,825: 24x14", "#1175 @ 888,871: 21x19", "#1176 @ 583,14: 18x13", "#1177 @ 937,190: 21x20", "#1178 @ 210,855: 12x23", "#1179 @ 905,117: 21x25", "#1180 @ 883,647: 19x24", "#1181 @ 549,663: 10x18", "#1182 @ 737,824: 13x22", "#1183 @ 787,20: 11x14", "#1184 @ 936,834: 28x17", "#1185 @ 50,554: 12x10", "#1186 @ 894,867: 21x23", "#1187 @ 600,105: 20x10", "#1188 @ 412,397: 28x18", "#1189 @ 236,700: 25x12", "#1190 @ 353,798: 20x20", "#1191 @ 744,865: 15x17", "#1192 @ 684,158: 18x11", "#1193 @ 561,196: 7x14", "#1194 @ 149,831: 19x14", "#1195 @ 600,628: 22x11", "#1196 @ 322,680: 20x24", "#1197 @ 185,109: 17x23", "#1198 @ 36,831: 21x19", "#1199 @ 416,603: 25x28", "#1200 @ 180,882: 20x25", "#1201 @ 27,393: 11x20", "#1202 @ 49,564: 13x24", "#1203 @ 543,323: 25x23", "#1204 @ 893,16: 29x11", "#1205 @ 824,724: 26x25", "#1206 @ 739,324: 21x17", "#1207 @ 84,839: 11x15", "#1208 @ 734,816: 18x22", "#1209 @ 525,950: 28x12", "#1210 @ 547,836: 22x25", "#1211 @ 877,190: 27x24", "#1212 @ 88,1: 13x28", "#1213 @ 556,236: 28x10", "#1214 @ 358,566: 17x11", "#1215 @ 447,577: 13x29", "#1216 @ 340,139: 27x26", "#1217 @ 82,934: 24x25", "#1218 @ 475,661: 15x28", "#1219 @ 94,340: 10x19", "#1220 @ 934,608: 11x20", "#1221 @ 72,155: 24x27", "#1222 @ 738,846: 13x28", "#1223 @ 107,436: 22x26", "#1224 @ 416,563: 24x20", "#1225 @ 353,0: 11x18", "#1226 @ 205,911: 25x11", "#1227 @ 50,763: 26x25", "#1228 @ 352,955: 19x28", "#1229 @ 488,649: 27x21", "#1230 @ 28,723: 27x15", "#1231 @ 920,956: 18x23", "#1232 @ 23,641: 17x13", "#1233 @ 437,811: 19x10"]
data Coords = Coords Int Int
data Claim = Claim Coords Int
instance showClaim :: Show Claim where
show (Claim coords id) = "Claim #" <> show id <> " : " <> show coords
instance showCoords :: Show Coords where
show (Coords x y) = show x <> "," <> show y
instance eqCoords :: Eq Coords where
eq (Coords x y) (Coords a b) =
x == a && y == b
instance ordCoords :: Ord Coords where
compare (Coords x y) (Coords a b) =
if x == a then
compare y b
else
compare x a
idFromClaim :: Claim -> Int
idFromClaim (Claim _ id) = id
claimRegex :: Regex
claimRegex =
unsafePartial (right $ regex re noFlags)
where
re :: String
re = """^#(\d+)\s@\s(\d+),(\d+):\s(\d+)x(\d+)$"""
right :: forall a b. Partial => Either a b -> b
right (Right x) = x
amountOverlapping :: List Claim -> Int
amountOverlapping xs =
sum (values $ foldl fnc empty xs)
where
fnc :: Map Coords Int -> Claim -> Map Coords Int
fnc m (Claim coords _) =
case lookup coords m of
Just _ -> insert coords 1 m
Nothing -> insert coords 0 m
notOverlappingId :: List Claim -> Either String Int
notOverlappingId xs =
extractOne $ fromFoldable $ snd $ foldl fnc acc xs
where
fnc :: Tuple (Map Coords Int) (S.Set Int) -> Claim -> Tuple (Map Coords Int) (S.Set Int)
fnc (Tuple m1 m2) (Claim coords id) =
case lookup coords m1 of
Just oid ->
Tuple (insert coords id m1) (S.delete id (S.delete oid m2))
Nothing ->
Tuple (insert coords id m1) m2
acc :: Tuple (Map Coords Int) (S.Set Int)
acc = Tuple empty (S.fromFoldable $ map idFromClaim xs)
extractOne :: List Int -> Either String Int
extractOne (x : Nil) = Right x
extractOne _ = Left "I was expecting to find only one element!"
unsafeFromString :: Partial => String -> Int
unsafeFromString x = unsafePartial (just $ fromString x)
where
just :: forall a. Partial => Maybe a -> a
just (Just y) = y
toClaims :: Partial => Maybe (NonEmptyArray (Maybe String)) -> List Claim
toClaims (Just xs) =
unsafePartial (toClaims' $ toArray xs)
where
toClaims' :: Partial => Array (Maybe String) -> List Claim
toClaims' [_, (Just id), (Just x), (Just y), (Just a), (Just b)] = fromFoldable do
let x' = (unsafeFromString a) + (unsafeFromString x) - 1
y' = (unsafeFromString b) + (unsafeFromString y) - 1
i <- (unsafeFromString x) .. x'
j <- (unsafeFromString y) .. y'
pure $ Claim (Coords j i) (unsafeFromString id)
stringToClaimList :: String -> List Claim
stringToClaimList x =
unsafePartial (toClaims $ match claimRegex x)
allClaims :: Array String -> List Claim
allClaims =
concatMap stringToClaimList <<< fromFoldable
main :: Effect Unit
main = do
logShow $ amountOverlapping $ allClaims input
logShow $ notOverlappingId $ allClaims input
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment