554 lines
16 KiB
Haskell
554 lines
16 KiB
Haskell
example :: [((Int, Int), (Int, Int))]
|
|
example = [
|
|
((0,9), (5,9)),
|
|
((8,0), (0,8)),
|
|
((9,4), (3,4)),
|
|
((2,2), (2,1)),
|
|
((7,0), (7,4)),
|
|
((6,4), (2,0)),
|
|
((0,9), (2,9)),
|
|
((3,4), (1,4)),
|
|
((0,0), (8,8)),
|
|
((5,5), (8,2))
|
|
]
|
|
|
|
isHorizontalOrVertical :: ((Int, Int), (Int, Int)) -> Bool
|
|
isHorizontalOrVertical ((x1, y1), (x2, y2)) = x1 == x2 || y1 == y2
|
|
|
|
atPoint (x,y) p = minX p <= x && x <= maxX p && minY p <= y && y <= maxY p
|
|
|
|
minX ((x1, _), (x2, _)) = min x1 x2
|
|
minY ((_, y1), (_, y2)) = min y1 y2
|
|
|
|
|
|
maxX ((x1, _), (x2, _)) = max x1 x2
|
|
maxY ((_, y1), (_, y2)) = max y1 y2
|
|
|
|
|
|
bounds :: (Ord b, Ord a) => [((a, b), (a, b))] -> ((a, b), (a, b))
|
|
bounds input = ((x0, y0), (x1, y1))
|
|
where
|
|
x0 = minimum $ map minX input
|
|
y0 = minimum $ map minY input
|
|
x1 = maximum $ map maxX input
|
|
y1 = maximum $ map maxY input
|
|
|
|
grid ((x0, y0), (x1, y1)) = [ (x, y) | x <- [x0..x1], y <- [y0..y1] ]
|
|
|
|
counts input = length $ filter (>= 2) intersectionCounts
|
|
where
|
|
intersectionCounts = map (\pos -> length $ filter (atPoint pos) input) gridIndexes
|
|
gridIndexes = grid $ bounds input
|
|
|
|
|
|
inputs :: [((Int, Int), (Int, Int))]
|
|
inputs = [
|
|
((911, 808), (324, 221)),
|
|
((161, 890), (808, 243)),
|
|
((174, 59), (174, 760)),
|
|
((983, 983), (10, 10)),
|
|
((321, 12), (870, 12)),
|
|
((66, 936), (941, 61)),
|
|
((670, 141), (670, 550)),
|
|
((783, 935), (496, 648)),
|
|
((973, 651), (635, 989)),
|
|
((535, 47), (535, 154)),
|
|
((355, 183), (754, 582)),
|
|
((172, 111), (892, 111)),
|
|
((353, 66), (907, 620)),
|
|
((741, 960), (741, 805)),
|
|
((113, 895), (946, 895)),
|
|
((777, 280), (563, 280)),
|
|
((679, 815), (626, 815)),
|
|
((651, 848), (651, 673)),
|
|
((205, 834), (205, 599)),
|
|
((895, 118), (82, 931)),
|
|
((685, 303), (93, 895)),
|
|
((973, 38), (62, 949)),
|
|
((867, 23), (867, 300)),
|
|
((784, 947), (784, 47)),
|
|
((96, 168), (755, 827)),
|
|
((909, 321), (909, 716)),
|
|
((59, 881), (692, 881)),
|
|
((964, 19), (69, 914)),
|
|
((752, 869), (67, 184)),
|
|
((974, 877), (138, 41)),
|
|
((432, 389), (137, 684)),
|
|
((458, 822), (458, 402)),
|
|
((818, 852), (308, 342)),
|
|
((882, 484), (441, 925)),
|
|
((82, 959), (976, 65)),
|
|
((117, 487), (117, 429)),
|
|
((214, 673), (429, 673)),
|
|
((72, 955), (72, 829)),
|
|
((587, 109), (587, 368)),
|
|
((576, 17), (576, 872)),
|
|
((685, 102), (685, 905)),
|
|
((563, 394), (716, 394)),
|
|
((966, 145), (150, 961)),
|
|
((555, 582), (555, 385)),
|
|
((453, 31), (453, 207)),
|
|
((639, 815), (547, 723)),
|
|
((431, 869), (431, 811)),
|
|
((646, 938), (599, 938)),
|
|
((215, 513), (900, 513)),
|
|
((809, 82), (798, 82)),
|
|
((768, 344), (244, 868)),
|
|
((39, 962), (39, 601)),
|
|
((675, 186), (61, 186)),
|
|
((861, 967), (28, 967)),
|
|
((860, 550), (538, 550)),
|
|
((283, 740), (571, 740)),
|
|
((72, 297), (72, 645)),
|
|
((727, 801), (727, 526)),
|
|
((799, 519), (799, 497)),
|
|
((915, 24), (174, 765)),
|
|
((795, 943), (136, 943)),
|
|
((518, 971), (599, 971)),
|
|
((594, 676), (594, 461)),
|
|
((850, 799), (363, 799)),
|
|
((958, 575), (958, 231)),
|
|
((752, 576), (398, 576)),
|
|
((891, 433), (398, 433)),
|
|
((524, 126), (397, 126)),
|
|
((10, 890), (796, 104)),
|
|
((57, 228), (168, 228)),
|
|
((168, 521), (338, 691)),
|
|
((230, 83), (777, 83)),
|
|
((865, 677), (640, 452)),
|
|
((866, 821), (825, 821)),
|
|
((17, 143), (17, 596)),
|
|
((113, 916), (113, 601)),
|
|
((268, 187), (551, 470)),
|
|
((794, 167), (220, 167)),
|
|
((459, 17), (459, 931)),
|
|
((211, 31), (526, 31)),
|
|
((680, 57), (756, 57)),
|
|
((926, 190), (926, 800)),
|
|
((85, 284), (63, 284)),
|
|
((44, 988), (44, 701)),
|
|
((110, 941), (176, 941)),
|
|
((480, 163), (480, 112)),
|
|
((574, 538), (574, 371)),
|
|
((584, 473), (69, 473)),
|
|
((303, 621), (303, 380)),
|
|
((762, 652), (762, 89)),
|
|
((286, 195), (276, 185)),
|
|
((957, 87), (217, 827)),
|
|
((561, 858), (561, 437)),
|
|
((384, 55), (81, 55)),
|
|
((19, 977), (981, 15)),
|
|
((454, 747), (938, 263)),
|
|
((425, 836), (425, 617)),
|
|
((860, 135), (775, 50)),
|
|
((633, 131), (633, 651)),
|
|
((904, 912), (242, 250)),
|
|
((880, 177), (480, 577)),
|
|
((470, 162), (964, 656)),
|
|
((585, 376), (585, 470)),
|
|
((696, 760), (594, 862)),
|
|
((534, 225), (534, 717)),
|
|
((258, 816), (258, 847)),
|
|
((990, 244), (990, 93)),
|
|
((463, 462), (463, 533)),
|
|
((434, 928), (537, 825)),
|
|
((813, 734), (533, 734)),
|
|
((498, 673), (395, 673)),
|
|
((564, 312), (55, 312)),
|
|
((280, 550), (939, 550)),
|
|
((591, 247), (396, 52)),
|
|
((127, 516), (127, 235)),
|
|
((850, 425), (552, 127)),
|
|
((894, 428), (894, 598)),
|
|
((366, 960), (592, 960)),
|
|
((579, 488), (170, 488)),
|
|
((775, 92), (775, 586)),
|
|
((49, 909), (930, 28)),
|
|
((856, 113), (284, 685)),
|
|
((263, 175), (120, 175)),
|
|
((332, 592), (276, 592)),
|
|
((920, 157), (141, 157)),
|
|
((349, 776), (316, 776)),
|
|
((187, 863), (279, 863)),
|
|
((218, 872), (83, 872)),
|
|
((465, 430), (410, 430)),
|
|
((710, 218), (857, 218)),
|
|
((797, 314), (184, 314)),
|
|
((387, 327), (49, 665)),
|
|
((950, 812), (205, 67)),
|
|
((803, 133), (803, 682)),
|
|
((125, 972), (545, 552)),
|
|
((353, 901), (840, 414)),
|
|
((936, 843), (202, 109)),
|
|
((11, 904), (856, 59)),
|
|
((725, 757), (954, 986)),
|
|
((227, 697), (345, 697)),
|
|
((187, 520), (187, 441)),
|
|
((860, 262), (135, 987)),
|
|
((700, 95), (976, 371)),
|
|
((86, 946), (869, 163)),
|
|
((898, 806), (461, 806)),
|
|
((717, 796), (717, 195)),
|
|
((882, 127), (835, 127)),
|
|
((133, 48), (133, 191)),
|
|
((521, 51), (521, 927)),
|
|
((384, 806), (957, 233)),
|
|
((570, 139), (570, 842)),
|
|
((949, 819), (949, 350)),
|
|
((592, 230), (283, 230)),
|
|
((315, 856), (741, 856)),
|
|
((870, 674), (549, 353)),
|
|
((857, 306), (857, 889)),
|
|
((428, 217), (267, 217)),
|
|
((47, 93), (898, 944)),
|
|
((636, 238), (665, 238)),
|
|
((202, 910), (202, 737)),
|
|
((246, 432), (617, 803)),
|
|
((985, 24), (48, 961)),
|
|
((965, 876), (956, 867)),
|
|
((618, 650), (810, 458)),
|
|
((292, 356), (575, 356)),
|
|
((394, 585), (910, 585)),
|
|
((137, 453), (137, 178)),
|
|
((509, 737), (509, 665)),
|
|
((193, 350), (531, 688)),
|
|
((805, 219), (107, 219)),
|
|
((975, 506), (907, 506)),
|
|
((435, 303), (435, 380)),
|
|
((344, 83), (344, 224)),
|
|
((47, 66), (47, 115)),
|
|
((570, 516), (857, 516)),
|
|
((162, 91), (926, 91)),
|
|
((759, 417), (759, 460)),
|
|
((445, 942), (445, 699)),
|
|
((421, 340), (421, 743)),
|
|
((590, 590), (434, 434)),
|
|
((453, 38), (453, 327)),
|
|
((865, 134), (865, 773)),
|
|
((842, 609), (18, 609)),
|
|
((662, 282), (62, 882)),
|
|
((489, 32), (344, 32)),
|
|
((135, 496), (93, 454)),
|
|
((552, 211), (421, 211)),
|
|
((620, 678), (642, 678)),
|
|
((782, 158), (585, 355)),
|
|
((733, 509), (733, 574)),
|
|
((932, 383), (369, 946)),
|
|
((843, 705), (843, 725)),
|
|
((747, 414), (676, 343)),
|
|
((294, 218), (962, 886)),
|
|
((844, 175), (844, 420)),
|
|
((255, 489), (531, 213)),
|
|
((555, 532), (821, 532)),
|
|
((533, 15), (533, 161)),
|
|
((631, 778), (631, 401)),
|
|
((75, 282), (468, 282)),
|
|
((903, 838), (903, 957)),
|
|
((46, 293), (543, 790)),
|
|
((30, 834), (30, 948)),
|
|
((591, 720), (591, 965)),
|
|
((624, 36), (339, 36)),
|
|
((425, 323), (425, 442)),
|
|
((234, 939), (234, 963)),
|
|
((482, 912), (968, 912)),
|
|
((228, 614), (189, 614)),
|
|
((969, 472), (969, 692)),
|
|
((871, 494), (871, 172)),
|
|
((101, 624), (848, 624)),
|
|
((424, 918), (69, 563)),
|
|
((929, 671), (93, 671)),
|
|
((81, 187), (707, 813)),
|
|
((348, 923), (348, 924)),
|
|
((921, 524), (921, 828)),
|
|
((678, 454), (678, 364)),
|
|
((904, 227), (904, 596)),
|
|
((163, 344), (609, 790)),
|
|
((206, 180), (206, 59)),
|
|
((145, 519), (145, 717)),
|
|
((317, 679), (317, 417)),
|
|
((503, 724), (221, 724)),
|
|
((353, 448), (413, 448)),
|
|
((363, 643), (837, 643)),
|
|
((594, 54), (359, 54)),
|
|
((866, 117), (45, 938)),
|
|
((939, 210), (284, 865)),
|
|
((410, 556), (410, 801)),
|
|
((905, 111), (673, 111)),
|
|
((983, 167), (574, 167)),
|
|
((595, 758), (97, 758)),
|
|
((785, 10), (437, 10)),
|
|
((517, 414), (517, 734)),
|
|
((691, 567), (186, 62)),
|
|
((842, 51), (31, 862)),
|
|
((36, 199), (282, 199)),
|
|
((864, 758), (864, 610)),
|
|
((639, 918), (951, 918)),
|
|
((245, 516), (245, 474)),
|
|
((951, 203), (557, 203)),
|
|
((176, 728), (176, 171)),
|
|
((322, 217), (387, 217)),
|
|
((149, 208), (836, 895)),
|
|
((661, 298), (609, 298)),
|
|
((46, 47), (981, 982)),
|
|
((769, 45), (769, 610)),
|
|
((988, 932), (988, 459)),
|
|
((901, 97), (901, 908)),
|
|
((195, 395), (121, 395)),
|
|
((197, 403), (327, 533)),
|
|
((159, 456), (857, 456)),
|
|
((480, 981), (881, 580)),
|
|
((86, 958), (962, 82)),
|
|
((375, 198), (763, 198)),
|
|
((950, 381), (341, 381)),
|
|
((504, 679), (504, 598)),
|
|
((756, 659), (680, 583)),
|
|
((146, 328), (886, 328)),
|
|
((930, 412), (492, 850)),
|
|
((954, 54), (954, 940)),
|
|
((790, 498), (790, 305)),
|
|
((83, 270), (83, 242)),
|
|
((939, 268), (939, 563)),
|
|
((423, 756), (916, 263)),
|
|
((583, 756), (583, 34)),
|
|
((957, 639), (614, 639)),
|
|
((484, 523), (521, 560)),
|
|
((497, 809), (497, 419)),
|
|
((76, 17), (979, 920)),
|
|
((49, 39), (943, 933)),
|
|
((110, 289), (110, 247)),
|
|
((874, 868), (874, 172)),
|
|
((576, 127), (53, 650)),
|
|
((871, 879), (12, 20)),
|
|
((436, 711), (592, 711)),
|
|
((132, 285), (225, 285)),
|
|
((245, 147), (514, 147)),
|
|
((158, 882), (956, 84)),
|
|
((21, 984), (937, 68)),
|
|
((42, 275), (219, 275)),
|
|
((877, 143), (889, 143)),
|
|
((593, 841), (508, 756)),
|
|
((414, 289), (132, 289)),
|
|
((687, 655), (767, 655)),
|
|
((453, 981), (459, 987)),
|
|
((635, 433), (635, 324)),
|
|
((671, 347), (170, 848)),
|
|
((412, 579), (915, 579)),
|
|
((269, 677), (269, 596)),
|
|
((587, 121), (367, 341)),
|
|
((153, 883), (153, 709)),
|
|
((524, 580), (508, 580)),
|
|
((541, 232), (651, 232)),
|
|
((93, 948), (284, 757)),
|
|
((168, 745), (872, 41)),
|
|
((831, 657), (925, 563)),
|
|
((908, 389), (442, 389)),
|
|
((462, 445), (234, 445)),
|
|
((735, 493), (895, 493)),
|
|
((274, 624), (296, 646)),
|
|
((153, 130), (153, 160)),
|
|
((466, 214), (466, 769)),
|
|
((474, 499), (686, 711)),
|
|
((540, 428), (788, 676)),
|
|
((858, 215), (959, 215)),
|
|
((788, 91), (788, 410)),
|
|
((552, 505), (988, 505)),
|
|
((978, 312), (978, 202)),
|
|
((108, 321), (616, 829)),
|
|
((903, 359), (903, 770)),
|
|
((480, 331), (480, 769)),
|
|
((503, 842), (34, 842)),
|
|
((613, 732), (323, 442)),
|
|
((767, 949), (654, 949)),
|
|
((514, 589), (386, 589)),
|
|
((38, 554), (284, 308)),
|
|
((689, 268), (689, 711)),
|
|
((860, 66), (190, 736)),
|
|
((253, 865), (622, 865)),
|
|
((87, 658), (698, 47)),
|
|
((506, 892), (829, 569)),
|
|
((680, 910), (594, 824)),
|
|
((824, 603), (958, 603)),
|
|
((576, 802), (562, 802)),
|
|
((67, 27), (67, 489)),
|
|
((969, 461), (517, 913)),
|
|
((674, 763), (674, 226)),
|
|
((223, 955), (218, 955)),
|
|
((147, 540), (569, 962)),
|
|
((455, 703), (596, 703)),
|
|
((746, 899), (746, 403)),
|
|
((516, 476), (756, 476)),
|
|
((897, 674), (373, 150)),
|
|
((120, 395), (120, 49)),
|
|
((722, 443), (722, 244)),
|
|
((724, 924), (724, 39)),
|
|
((809, 930), (109, 930)),
|
|
((822, 816), (874, 816)),
|
|
((796, 539), (895, 539)),
|
|
((340, 88), (560, 88)),
|
|
((223, 158), (593, 158)),
|
|
((779, 977), (856, 900)),
|
|
((617, 461), (973, 817)),
|
|
((515, 62), (515, 140)),
|
|
((12, 586), (724, 586)),
|
|
((870, 50), (391, 50)),
|
|
((308, 123), (308, 696)),
|
|
((119, 164), (863, 908)),
|
|
((755, 599), (448, 599)),
|
|
((129, 526), (633, 526)),
|
|
((478, 668), (102, 668)),
|
|
((237, 637), (237, 743)),
|
|
((270, 102), (72, 300)),
|
|
((115, 470), (115, 427)),
|
|
((948, 233), (948, 731)),
|
|
((983, 135), (468, 650)),
|
|
((748, 439), (748, 642)),
|
|
((62, 862), (352, 572)),
|
|
((765, 901), (660, 901)),
|
|
((917, 807), (917, 587)),
|
|
((55, 81), (116, 81)),
|
|
((954, 972), (102, 120)),
|
|
((340, 503), (294, 549)),
|
|
((970, 661), (522, 213)),
|
|
((618, 92), (618, 247)),
|
|
((688, 965), (965, 965)),
|
|
((94, 241), (94, 292)),
|
|
((15, 132), (15, 492)),
|
|
((979, 927), (488, 927)),
|
|
((509, 26), (984, 26)),
|
|
((840, 530), (840, 95)),
|
|
((55, 956), (849, 162)),
|
|
((297, 297), (297, 472)),
|
|
((338, 780), (369, 780)),
|
|
((487, 292), (37, 292)),
|
|
((122, 117), (206, 201)),
|
|
((66, 807), (564, 309)),
|
|
((643, 242), (906, 242)),
|
|
((909, 833), (909, 441)),
|
|
((129, 128), (818, 817)),
|
|
((406, 42), (406, 297)),
|
|
((53, 20), (967, 934)),
|
|
((235, 285), (601, 285)),
|
|
((275, 625), (275, 539)),
|
|
((199, 732), (430, 963)),
|
|
((639, 187), (639, 265)),
|
|
((549, 740), (549, 824)),
|
|
((603, 140), (603, 748)),
|
|
((35, 455), (176, 455)),
|
|
((888, 611), (888, 271)),
|
|
((134, 154), (484, 154)),
|
|
((694, 820), (694, 814)),
|
|
((535, 584), (187, 932)),
|
|
((642, 510), (642, 249)),
|
|
((191, 886), (268, 886)),
|
|
((918, 353), (881, 390)),
|
|
((977, 13), (343, 13)),
|
|
((380, 243), (271, 134)),
|
|
((410, 758), (410, 670)),
|
|
((613, 551), (519, 645)),
|
|
((963, 84), (124, 923)),
|
|
((702, 252), (821, 252)),
|
|
((405, 237), (405, 22)),
|
|
((21, 139), (21, 510)),
|
|
((548, 499), (132, 499)),
|
|
((196, 104), (196, 680)),
|
|
((739, 145), (476, 145)),
|
|
((751, 746), (91, 746)),
|
|
((975, 628), (975, 847)),
|
|
((935, 520), (935, 450)),
|
|
((803, 372), (803, 393)),
|
|
((872, 77), (872, 373)),
|
|
((339, 130), (339, 103)),
|
|
((226, 886), (226, 45)),
|
|
((794, 647), (794, 257)),
|
|
((90, 922), (889, 123)),
|
|
((615, 971), (615, 574)),
|
|
((26, 278), (26, 719)),
|
|
((838, 88), (806, 88)),
|
|
((263, 691), (804, 150)),
|
|
((309, 721), (910, 721)),
|
|
((510, 496), (960, 946)),
|
|
((195, 236), (46, 236)),
|
|
((610, 143), (610, 610)),
|
|
((891, 412), (891, 268)),
|
|
((714, 21), (156, 579)),
|
|
((320, 935), (320, 96)),
|
|
((240, 782), (449, 782)),
|
|
((754, 472), (48, 472)),
|
|
((105, 481), (529, 57)),
|
|
((451, 301), (451, 965)),
|
|
((796, 638), (796, 185)),
|
|
((908, 553), (771, 553)),
|
|
((98, 543), (490, 935)),
|
|
((481, 159), (762, 159)),
|
|
((593, 527), (419, 353)),
|
|
((86, 391), (216, 521)),
|
|
((260, 716), (42, 716)),
|
|
((734, 538), (375, 179)),
|
|
((24, 974), (975, 23)),
|
|
((402, 466), (787, 851)),
|
|
((344, 409), (262, 327)),
|
|
((803, 443), (685, 443)),
|
|
((986, 152), (249, 152)),
|
|
((125, 738), (90, 773)),
|
|
((184, 772), (184, 746)),
|
|
((729, 829), (729, 340)),
|
|
((226, 527), (226, 375)),
|
|
((936, 231), (222, 945)),
|
|
((254, 333), (254, 167)),
|
|
((451, 234), (451, 273)),
|
|
((915, 790), (568, 443)),
|
|
((869, 794), (504, 429)),
|
|
((11, 878), (836, 53)),
|
|
((821, 231), (522, 530)),
|
|
((285, 419), (732, 866)),
|
|
((191, 272), (191, 679)),
|
|
((41, 651), (225, 651)),
|
|
((30, 13), (879, 862)),
|
|
((980, 488), (20, 488)),
|
|
((27, 187), (27, 348)),
|
|
((53, 238), (53, 514)),
|
|
((778, 306), (379, 705)),
|
|
((425, 399), (425, 60)),
|
|
((162, 859), (57, 859)),
|
|
((652, 926), (652, 589)),
|
|
((962, 489), (555, 896)),
|
|
((197, 378), (436, 617)),
|
|
((310, 190), (310, 760)),
|
|
((678, 20), (678, 713)),
|
|
((390, 653), (985, 58)),
|
|
((938, 351), (656, 69)),
|
|
((881, 39), (18, 902)),
|
|
((313, 681), (323, 681)),
|
|
((910, 907), (288, 907)),
|
|
((739, 977), (739, 132)),
|
|
((856, 479), (154, 479)),
|
|
((893, 785), (761, 785)),
|
|
((405, 247), (405, 901)),
|
|
((58, 933), (808, 183)),
|
|
((643, 156), (676, 189)),
|
|
((149, 773), (357, 773)),
|
|
((479, 518), (434, 518)),
|
|
((389, 518), (556, 685)),
|
|
((858, 449), (533, 774)),
|
|
((503, 133), (409, 133)),
|
|
((340, 315), (219, 194)),
|
|
((183, 701), (183, 242)),
|
|
((810, 151), (195, 151)),
|
|
((446, 686), (446, 912)),
|
|
((968, 482), (49, 482)),
|
|
((203, 20), (203, 667)),
|
|
((493, 516), (647, 516)),
|
|
((900, 91), (634, 91)),
|
|
((660, 554), (119, 13)),
|
|
((964, 864), (964, 919)),
|
|
((871, 293), (344, 293)),
|
|
((895, 258), (972, 258))
|
|
]
|
|
|
|
{-
|
|
5167
|
|
|
|
|
|
-}
|
|
|
|
|