diff --git a/2024/gareth/day07/day07.go b/2024/gareth/day07/day07.go deleted file mode 100644 index 694c09a..0000000 --- a/2024/gareth/day07/day07.go +++ /dev/null @@ -1,90 +0,0 @@ -package day07 - -import ( - "fmt" - "strconv" - "strings" -) - -func Part1(input string) int { - total := 0 - lines := strings.Split(strings.TrimSpace(input), "\n") - - for i := 0; i < len(lines); i++ { - target, numbers := parseLine(lines[i]) - if validLinePart1(numbers, 1, numbers[0], target) { - total += target - } - } - - return total -} - -func Part2(input string) int { - total := 0 - lines := strings.Split(strings.TrimSpace(input), "\n") - - for i := 0; i < len(lines); i++ { - target, numbers := parseLine(lines[i]) - if validLinePart2(numbers, 1, numbers[0], target) { - total += target - } - } - - return total -} - -func parseLine(line string) (int, []int) { - parts := strings.Split(line, ":") - target, _ := strconv.Atoi(strings.TrimSpace(parts[0])) - numberStrings := strings.Fields(parts[1]) - - numbers := make([]int, len(numberStrings)) - for i := 0; i < len(numberStrings); i++ { - numbers[i], _ = strconv.Atoi(strings.TrimSpace(numberStrings[i])) - } - - return target, numbers -} - -func validLinePart1(numbers []int, index int, currentValue int, target int) bool { - if index == len(numbers) { - return currentValue == target - } - - sum := currentValue + numbers[index] - if validLinePart1(numbers, index+1, sum, target) { - return true - } - - product := currentValue * numbers[index] - if validLinePart1(numbers, index+1, product, target) { - return true - } - - return false -} - -func validLinePart2(numbers []int, index int, currentValue int, target int) bool { - if index == len(numbers) { - return currentValue == target - } - - sum := currentValue + numbers[index] - if validLinePart2(numbers, index+1, sum, target) { - return true - } - - product := currentValue * numbers[index] - if validLinePart2(numbers, index+1, product, target) { - return true - } - - // Turns 12 || 34 into 1234 - concatenated, _ := strconv.Atoi(strings.TrimSpace(fmt.Sprintf("%d%d", currentValue, numbers[index]))) - if validLinePart2(numbers, index+1, concatenated, target) { - return true - } - - return false -} diff --git a/2024/gareth/day07/day07_test.go b/2024/gareth/day07/day07_test.go deleted file mode 100644 index 73ff38b..0000000 --- a/2024/gareth/day07/day07_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package day07 - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestPart1(t *testing.T) { - r := Part1(`190: 10 19 -3267: 81 40 27 -83: 17 5 -156: 15 6 -7290: 6 8 6 15 -161011: 16 10 13 -192: 17 8 14 -21037: 9 7 18 13 -292: 11 6 16 20`) - assert.Equal(t, 3749, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`190: 10 19 -3267: 81 40 27 -83: 17 5 -156: 15 6 -7290: 6 8 6 15 -161011: 16 10 13 -192: 17 8 14 -21037: 9 7 18 13 -292: 11 6 16 20`) - assert.Equal(t, 11387, r) -} diff --git a/2024/gareth/day07/input.txt b/2024/gareth/day07/input.txt deleted file mode 100644 index 23117ba..0000000 --- a/2024/gareth/day07/input.txt +++ /dev/null @@ -1,850 +0,0 @@ -31084: 8 67 8 735 38 -40541461584: 5 81 9 4 32 43 283 228 -6208: 915 6 2 539 148 29 -306501986: 6 3 630 45 536 64 6 -21276000: 8 5 5 91 6 5 8 6 8 985 2 8 -1432991: 3 403 4 821 591 2 236 -17115994: 69 321 254 764 3 99 -19961295: 5 311 84 6 63 -22953531: 22 95 35 2 8 -18894343830: 90 5 3 2 65 7 159 2 91 1 -4312695565: 158 8 716 615 95 59 -391: 1 326 64 -25202: 8 5 62 1 401 -5324514: 6 8 466 59 169 -658234: 3 83 592 97 57 4 -26804472776473: 7 61 1 447 29 496 71 9 -1503368: 653 23 18 824 625 -24803314445: 5 2 4 4 417 1 987 4 447 -1021069871: 7 3 2 7 9 37 2 2 8 5 58 -1614: 63 645 4 3 31 868 -4258805: 68 532 78 91 5 -4495130022: 583 78 275 37 77 -45111648: 47 98 45 855 998 46 6 -2964501691711: 9 672 76 9 754 7 4 65 -90685578359: 906 855 782 33 126 -13608006: 3 5 7 7 3 602 7 4 7 720 6 -4645623: 66 863 5 615 8 -2569495: 443 74 7 71 5 -134484: 68 55 4 77 9 2 327 4 -1143450000: 24 750 35 264 5 1 -5449: 4 2 907 7 -23061783: 854 9 5 6 1 1 7 3 2 76 5 -2930: 18 6 7 555 5 -2115475: 9 194 8 54 42 5 31 -19449: 6 1 9 4 4 769 8 1 79 905 -4595553: 298 3 4 257 5 3 345 45 -208314087: 7 3 877 815 9 9 3 2 6 51 -2905504: 46 58 514 626 763 -963368: 48 425 484 6 370 -9980664: 1 98 80 5 98 68 -652568: 7 197 871 290 68 -45827: 15 3 665 9 154 -722: 2 21 337 5 357 -27652464029930: 7 829 9 700 7 9 3 7 4 1 8 -6868809: 45 2 9 848 9 -1175: 7 5 98 -2133: 17 2 5 36 5 -528: 55 1 5 8 9 31 -8206806: 1 4 9 4 99 6 24 97 2 5 6 5 -37530658373: 1 2 8 5 8 4 5 7 3 946 373 -65484738025: 47 5 4 43 8 6 43 7 7 26 5 -2157: 8 2 1 93 8 568 -23082508: 7 5 3 3 2 5 8 477 2 3 1 1 -29090880: 45 28 37 8 78 -1262763: 1 1 27 729 93 16 2 75 -1409848204234: 7 87 622 84 820 42 34 -3304: 6 55 4 -1196013120: 8 340 179 35 192 -124278235: 4 4 69 225 78 235 -2735190615: 273 2 3 1 906 1 5 -52192: 104 89 6 45 10 72 -573777850: 680 31 807 8 50 -35694425: 82 38 921 61 871 84 2 -658877085778: 7 86 55 156 10 977 8 -20860682976: 546 3 7 930 7 954 42 6 -224616: 441 46 8 36 73 8 3 45 7 -358087: 7 236 9 45 2 9 3 9 6 4 2 5 -6354432: 55 792 7 153 639 7 -1923524: 177 175 9 3 3 528 21 -117340: 9 82 159 -1234059: 64 357 9 45 6 -2651349895: 8 526 4 7 9 1 6 42 9 89 5 -3884759: 737 251 3 5 7 -633925731: 346 4 3 5 472 9 7 9 4 8 9 -43555: 37 4 60 25 53 77 -4230519: 2 2 12 8 9 9 91 41 2 5 2 3 -5489: 69 8 9 515 6 -82630872: 33 1 2 19 81 9 4 5 6 6 33 -203340489: 181 55 1 4 112 9 -72068: 7 197 4 5 9 -168389664: 1 683 84 5 667 -30367442: 2 657 6 4 384 5 673 49 -2846739576: 4 8 743 9 3 9 829 719 6 -78401: 77 4 9 93 5 -627886555182: 1 61 78 8 65 4 57 94 82 -53361: 85 3 592 1 63 -154268: 48 43 3 892 4 8 3 8 1 -525075263: 656 34 4 8 6 6 -248294606: 6 896 24 1 83 9 4 1 7 75 -9082152: 182 66 9 8 6 7 7 2 195 2 -1657909631: 8 5 76 7 5 95 2 9 22 544 -484430: 2 5 64 7 49 961 83 3 -11192683920: 6 26 7 8 5 8 6 3 8 372 1 1 -52887178: 4 863 61 118 60 -896861: 88 9 7 671 4 187 -721710054179: 135 891 60 541 81 -12403134: 92 6 34 58 6 5 7 9 6 6 -33615296: 312 44 55 9 3 1 572 -183192: 35 8 5 5 612 28 71 3 4 8 -1244794661146: 6 4 9 6 1 6 4 57 7 685 8 6 -362827266: 86 643 395 8 738 813 -1477891785: 86 6 2 8 13 2 91 7 1 8 8 -5983: 3 888 5 291 2 57 6 -73739569: 668 6 687 89 6 69 -902757501: 855 24 627 1 63 26 9 -177442819: 6 9 401 2 4 52 256 4 3 -87403263: 95 920 3 191 7 65 -223398085: 57 3 1 8 11 50 45 8 9 85 -76471: 81 472 2 1 6 -102739: 1 284 1 8 9 1 -98723250300: 79 119 1 1 2 143 5 7 21 -37813543: 28 4 5 813 540 -21449386021: 185 4 9 9 3 6 4 46 7 1 3 8 -355140846: 39 4 6 90 845 -25511824797: 3 7 4 746 48 55 3 15 -11681963: 5 76 9 67 1 35 3 8 50 3 2 -10812636790: 3 778 3 954 790 -144: 90 14 40 -2954988: 6 3 3 16 4 95 2 1 7 3 9 3 -1666626: 282 573 74 39 1 46 -380854191760: 2 7 24 5 54 177 5 5 664 -20485976: 47 155 643 323 3 8 -562264400: 8 1 3 1 5 74 3 67 309 88 -5054: 67 3 55 599 604 -5790: 8 6 4 3 7 43 1 9 8 4 17 6 -1423: 232 6 23 2 6 -2214885600: 1 5 2 1 3 50 183 41 82 3 -586061: 507 69 31 975 3 -68594249: 2 9 373 9 50 340 3 32 6 -380980: 95 4 980 -7510: 5 4 825 4 71 9 -451918: 90 50 18 11 106 -16294: 29 134 8 65 4 1 455 3 -10536237: 6 6 3 9 1 1 4 724 4 5 1 97 -24566372: 1 34 8 3 90 592 85 87 -284990: 5 5 5 91 7 5 88 5 -1108832032: 80 93 29 3 727 88 -215422984: 63 82 417 8 70 1 -37636247: 3 875 3 39 615 6 73 5 2 -511718662: 3 505 3 718 23 42 9 -172674894: 6 76 9 6 7 5 6 6 7 7 22 2 -2494298: 21 8 468 606 6 -1164891: 12 97 891 -1303421387: 8 604 17 5 6 48 95 87 -113169: 242 889 55 7 6 -28083319654: 7 1 6 2 780 4 8 9 9 3 8 7 -689769: 2 479 72 6 -664006: 603 60 997 9 -383810: 312 123 4 7 -278838736: 254 851 15 86 76 -35266920: 4 8 65 481 94 -2342060: 5 55 2 43 99 710 -61499384: 760 4 83 423 2 4 -1337677: 769 562 5 67 3 9 13 -20708670: 1 7 8 1 9 9 6 70 6 1 3 57 -22607703347: 23 6 7 6 7 67 80 39 44 -422584: 1 6 185 2 95 23 1 878 -16961283369: 7 614 720 9 609 1 9 -7743900: 12 80 8 38 33 75 525 -5198: 5 14 5 5 3 -7706: 5 765 6 -60799047884: 9 6 5 331 7 2 2 6 3 3 5 87 -373279812855: 74 65 5 946 16 571 5 -273426612: 519 24 87 2 656 3 958 -449: 250 94 8 9 88 -69949442: 8 92 4 1 15 33 8 3 1 2 2 -2540247614: 578 3 346 73 29 5 5 9 2 -72710790952: 99 4 87 255 85 7 4 -43727113667: 3 1 333 66 106 71 2 4 7 -74125836117: 4 5 52 6 25 35 9 3 521 -527906: 54 9 9 931 29 -139782: 11 33 6 526 918 -19218: 704 402 9 522 284 8 -8668810: 40 8 6 3 6 2 84 2 2 75 7 3 -1487663526: 9 9 517 70 2 6 2 5 94 8 4 -20610: 1 152 3 2 45 -359112: 323 5 47 54 7 6 3 8 4 2 4 -3198: 1 7 8 8 24 7 1 4 41 7 27 -41189: 13 9 3 624 5 -4720776758223: 47 20 776 758 222 -195264: 4 2 339 36 2 -16012371600: 6 9 6 3 6 3 95 3 76 4 185 -3864074: 3 4 426 84 73 -45674415: 42 4 9 7 82 410 5 -1175718380: 6 340 5 911 746 -51156: 3 4 4 540 87 -4831584: 2 43 8 2 55 5 7 5 69 96 -874516400: 874 5 16 368 32 -220190: 7 974 32 38 1 7 4 172 4 -429894584: 1 9 5 7 5 98 94 9 6 9 58 4 -114640: 3 7 31 52 7 6 1 772 299 -10759: 23 1 6 12 7 2 1 4 81 28 7 -360390945715: 2 431 696 27 213 20 5 -3140056: 783 9 5 1 43 9 8 864 -15606936: 96 6 40 639 172 -1134226: 9 824 46 152 2 -640: 5 32 2 2 -46339061240: 7 20 9 987 5 715 618 -35646030: 42 1 885 137 7 -271367519: 7 45 964 127 96 893 -495104: 1 960 8 56 64 -3480: 7 1 12 3 1 40 -2608290: 91 95 46 3 3 30 -55890251: 1 65 7 9 4 81 454 3 582 -541872: 774 7 46 2 27 -309960637: 8 43 4 90 640 -14270: 44 8 875 1 9 6 1 8 3 5 5 -2461824: 1 4 1 9 7 12 61 71 1 4 1 8 -53575: 6 73 9 7 118 3 -3128658: 93 9 2 2 20 8 94 331 7 -223592: 5 43 381 5 9 4 5 884 8 -12112807054: 870 119 7 61 15 274 4 -27775914: 6 1 781 1 9 18 4 3 5 889 -279477744: 33 3 9 411 87 763 -9896932013: 647 3 331 353 343 46 -8127207475: 8 1 2 720 3 4 29 9 4 91 3 -3683665: 981 751 5 5 8 -7203976: 3 51 7 5 629 3 5 9 9 8 5 4 -12182439609: 5 57 9 9 9 7 9 8 4 320 3 3 -6547981: 9 727 2 47 84 -269451007: 9 262 62 4 992 -1760418: 99 34 1 5 99 96 4 27 6 -4881246: 5 3 46 2 4 67 57 8 -104401: 68 69 8 72 1 -57612060: 6 270 53 61 11 -65336211: 92 71 912 169 540 1 -1056886344323: 8 990 3 9 1 6 18 695 64 -431112: 3 19 108 92 69 -1497953467: 1 640 5 8 6 9 38 65 -20122455: 24 76 903 9 -112719469: 32 80 7 13 6 456 4 6 -1178483161: 18 8 6 29 75 754 4 3 4 -119908723232: 48 39 7 5 3 73 8 64 30 -21106565: 350 1 37 4 966 2 1 7 2 2 -70193: 4 53 9 2 7 701 59 746 4 -3034: 21 45 68 816 3 -3005: 2 89 24 92 7 58 -81430304: 124 4 989 2 83 -22260548: 7 15 212 54 7 -494808: 87 6 665 6 8 -6723: 4 81 13 457 13 -463069864051: 995 8 4 91 7 465 10 -913887: 3 6 7 2 752 9 5 1 36 5 2 1 -824408862: 82 43 9 86 8 94 6 5 -3431928092169: 5 3 67 76 755 15 362 6 -502132176: 9 109 624 964 702 -83412526: 1 4 7 2 27 405 3 1 721 8 -407094: 27 7 60 433 7 5 -701412: 2 5 84 648 97 836 8 -25707842242: 311 3 2 3 711 8 8 2 2 42 -505119: 1 44 41 7 40 -295936440: 9 27 963 89 272 4 38 -59813: 595 97 657 457 984 -297534: 348 61 1 1 2 7 296 46 -143500: 618 32 8 31 19 1 82 7 -138312966147: 5 29 5 3 2 2 7 50 4 8 96 2 -311740: 5 76 5 37 1 1 597 3 20 -4908292: 9 785 31 59 5 -6141663: 204 7 25 3 5 1 7 2 9 6 2 2 -746258: 1 3 61 6 48 21 4 11 81 5 -310680: 6 7 59 782 9 45 8 -170615594: 447 3 7 74 35 7 7 6 6 6 2 -160656040: 75 78 105 603 7 -5577322182: 47 49 942 2 24 5 7 1 2 7 -48328: 3 7 4 7 9 149 9 456 7 3 7 -155259452737: 56 746 874 2 8 342 -35341: 5 76 93 1 -22236341: 3 381 88 641 5 1 -44989863673: 96 6 5 6 71 2 3 381 7 3 3 -606: 4 80 50 4 70 -12733: 65 9 2 86 5 -22463298: 24 88 3 5 80 1 4 89 8 -377019478: 6 748 5 1 3 4 1 9 7 2 3 8 -19642752: 696 5 7 544 51 -702511961: 887 792 1 7 961 -6024648: 8 86 75 47 168 -104509650: 5 1 482 62 72 597 7 70 -1135227: 2 218 25 27 45 5 5 -224: 2 4 6 2 86 100 -173902: 99 277 462 89 4 99 -823929: 9 9 8 5 929 -25781529: 60 9 8 4 7 65 9 2 4 213 9 -15984006: 38 6 5 9 727 7 6 4 96 1 5 -911: 7 6 1 868 1 -1319338035: 7 6 1 7 6 438 1 448 5 87 -281978: 561 4 9 5 5 56 1 4 1 9 5 3 -26739745316256: 3 772 8 21 75 45 5 75 5 -804636: 50 6 26 542 927 -4368: 9 87 1 8 42 -1339970241787: 2 6 8 17 4 82 9 29 4 95 2 -27896197888: 8 8 849 619 66 521 -1624907806241: 9 270 3 9 649 18 9 44 1 -804053256: 531 30 7 9 25 91 6 -19887: 394 48 682 27 264 -576579196: 34 7 5 75 6 8 1 5 5 5 91 9 -4075638918: 886 5 23 97 1 5 4 7 48 -1242184922: 7 4 5 7 88 9 393 4 925 -816: 5 2 5 6 45 6 -16640: 34 60 177 -55047199922: 5 674 9 97 58 8 985 7 1 -202: 1 57 3 8 1 4 28 2 -128584480: 34 6 835 650 94 8 -14447: 166 3 28 420 83 -302594: 5 6 2 511 83 -100153: 4 389 35 70 60 43 450 -2185551: 38 3 43 19 3 -6746: 4 6 583 93 784 39 -3486469538: 8 47 3 40 786 7 9 1 19 -2105210: 7 4 8 2 6 9 8 31 7 56 3 2 -47524069: 6 4 610 811 106 4 85 8 -24206: 25 599 13 2 19 -83444222: 309 3 9 96 1 8 38 21 -1157600: 383 930 42 92 800 -135424: 274 494 29 6 33 -41759168088: 63 4 91 3 77 2 33 9 94 -912: 6 1 9 58 1 838 -1483426560: 4 6 1 69 801 406 692 6 -1291767304: 41 475 889 4 88 65 8 -4740630: 941 32 56 2 87 -145255683: 6 928 2 270 96 3 3 -2804256: 2 563 36 41 6 91 8 -3662: 592 6 91 11 8 -2070609492: 9 460 7 1 66 352 9 8 5 -58896: 73 2 5 17 5 15 8 -161664199: 5 9 8 9 746 32 2 1 9 8 -28767133: 6 69 10 43 37 96 -321150750: 6 3 33 7 6 191 1 74 355 -32221373185: 931 4 3 78 56 33 8 -125188150: 1 84 8 299 7 6 3 623 38 -529: 1 2 63 54 350 -371329981: 53 730 8 78 760 4 57 1 -8636010413: 34 6 1 516 8 4 4 82 1 1 1 -16436: 8 8 36 7 70 -2610384: 6 74 93 329 8 42 -2511598: 21 497 80 7 10 12 5 -2051303: 68 6 53 523 6 91 -3583491: 58 3 3 8 852 79 4 5 5 46 -2567: 5 3 32 4 3 -37412197: 63 94 238 46 197 -660996: 61 61 7 43 18 -772595115: 1 7 2 25 4 2 314 72 5 8 6 -1125072: 6 82 64 2 3 7 444 2 3 48 -40030036: 9 68 7 66 646 -26483808: 5 6 9 862 16 33 96 -89503594: 2 91 80 112 72 61 -34849136: 7 14 6 1 9 857 68 88 -1052469452651: 5 94 9 5 5 5 9 870 8 8 3 8 -2333026: 2 9 1 8 36 9 5 5 75 1 7 9 -2142047: 55 2 6 1 60 3 9 40 6 5 -18329059: 1 7 398 2 523 11 1 -1515: 1 5 216 3 1 214 -636751072: 65 7 58 3 967 7 759 9 4 -65121: 3 648 21 -1203384: 855 2 9 12 7 -1231: 567 1 29 21 1 612 -5830477499: 416 2 925 357 7 -39904736: 2 2 987 58 51 2 1 8 -7192: 4 881 3 11 8 -984797352: 86 84 99 3 1 459 -4330380: 444 3 8 3 797 7 6 9 1 5 6 -174675: 8 41 206 75 824 530 -644000: 2 4 89 4 17 7 92 14 1 4 -275310: 6 11 31 58 888 4 2 9 2 -2980025: 29 72 7 96 4 61 -1100140: 3 8 9 91 3 9 466 5 6 8 3 9 -26416153: 5 3 64 9 4 764 7 7 5 4 6 7 -392307: 644 22 589 2 30 -1703108: 23 789 9 532 7 8 -84496967641: 9 8 7 71 696 158 605 9 -4926: 5 47 3 5 2 6 60 -1238: 7 20 5 8 75 -4166368: 4 8 393 74 22 7 -264286: 5 5 2 6 11 26 80 115 8 6 -5390070: 38 5 77 813 35 3 54 8 6 -7109213251: 798 2 5 88 89 50 -11479038526: 245 1 5 7 333 456 3 7 9 -35577532: 71 155 500 25 5 -516: 7 4 6 4 1 70 9 66 1 5 39 2 -12159: 9 6 1 225 9 -593081: 1 92 6 4 343 2 6 8 3 41 -52698: 89 592 7 -36739952992513: 9 4 779 4 627 92 4 8 3 7 -2006: 22 8 90 75 5 8 -83601: 68 30 8 5 1 56 3 1 3 7 -478266: 1 4 8 6 3 724 612 8 286 -297000: 49 50 820 9 90 6 88 -1229910807: 262 102 46 6 600 807 -185356128: 44 5 401 7 82 115 48 -246521: 787 6 4 6 307 -86285202: 25 96 42 856 402 -23586: 70 1 3 52 9 5 -18086584: 46 6 144 8 27 534 7 -33690: 4 69 4 56 89 -46311716: 12 3 41 18 619 6 -214023: 5 793 66 7 53 9 -6755: 270 2 799 12 5 -14223284: 9 9 7 5 7 8 2 111 1 45 4 8 -2291081: 3 2 632 725 81 -284789717303: 605 3 9 3 960 30 47 49 -17262: 105 4 3 1 3 9 3 240 2 7 1 -157051: 9 7 6 181 6 9 3 3 451 81 -1349805670: 59 4 874 26 71 -2361910101: 5 623 7 3 38 6 8 1 3 1 8 2 -45459840: 8 42 71 1 3 8 4 9 8 9 384 -644841302: 7 658 2 70 62 68 2 -196349: 69 6 192 81 2 4 -25233495: 14 6 1 3 34 83 14 -2502364627: 9 73 7 1 76 4 7 95 8 5 27 -891841251: 79 62 560 2 63 6 51 -526: 95 9 4 1 417 -46610701: 46 605 5 697 4 -101160: 5 5 6 5 9 4 873 8 4 3 3 63 -74700: 86 2 765 47 83 -487499: 9 52 6 6 85 502 -12930315: 4 77 3 9 48 9 1 5 -818480: 3 4 8 966 10 3 7 1 4 5 4 1 -8956575: 6 8 827 5 676 864 35 -6467920693: 5 8 5 48 652 1 8 8 1 3 8 5 -877: 71 10 689 32 75 -53325209060: 554 965 941 2 53 -23291024284082: 9 42 193 47 6 9 515 48 -929424926: 3 6 29 42 492 5 -17829266: 6 56 4 53 63 -12276: 2 5 55 3 66 -181712606: 595 74 75 412 6 -8831966: 2 56 30 2 2 39 65 2 9 8 7 -661454663997: 231 3 453 350 8 10 78 -237094: 3 3 311 50 646 12 -5707220457: 71 82 86 966 4 920 55 -152255376595: 76 17 40 820 65 163 -1347305: 9 4 8 65 664 3 4 3 701 9 -70155: 91 2 88 257 706 58 1 -60468016: 640 1 23 5 27 726 812 -408075824: 40 74 6 758 22 -149767280436: 1 221 860 788 436 -1581985302: 83 9 258 3 8 38 72 3 6 -157694208: 94 8 52 3 5 15 56 1 3 8 -3814512: 5 6 4 8 8 5 6 5 5 37 9 -4548610: 66 9 3 3 7 57 50 1 9 -21119484: 38 822 28 29 876 -5946398: 661 589 67 71 91 57 -151648362: 894 75 5 9 93 54 317 -10321152: 99 807 712 2 8 -114489: 6 5 4 8 31 84 37 9 -145909: 75 70 909 -106820010: 722 269 10 2 55 -1480075: 44 2 198 9 3 71 691 6 7 -28827: 19 1 5 7 6 9 78 1 8 849 3 -7566: 7 244 8 141 62 23 5 83 -5508361: 495 4 214 13 1 -4988516: 5 33 55 12 568 66 2 97 -184373: 1 9 7 9 5 1 1 33 9 11 20 -199283931852: 3 5 8 4 158 6 3 539 855 -1666857472580: 77 654 23 180 331 -14487733: 557 891 68 9 9 5 828 -1198391800: 231 965 8 84 2 93 1 4 2 -126143604: 86 2 6 463 88 55 5 3 -153392452209: 6 482 7 3 939 11 5 4 9 7 -12681: 5 7 2 9 4 7 44 2 5 65 4 9 -989: 1 9 99 -93840: 98 38 46 15 -217780: 419 3 516 23 5 -33264: 447 87 973 5 22 -7178025: 995 9 5 2 87 7 527 20 5 -9028: 3 83 7 5 3 -12935: 711 5 6 3 47 -3659499181: 365 925 6 229 9 5 181 -701521: 9 4 3 64 7 61 8 26 67 53 -340704429: 52 78 84 319 7 7 99 -62241150: 7 176 842 8 77 6 -112424: 5 1 8 936 82 8 183 92 -723672: 347 67 1 2 874 -3066: 51 5 8 8 8 898 -1274880: 23 52 542 9 87 -2517506958: 37 68 780 726 9 59 -110283391: 3 52 3 53 8 3 8 6 3 903 1 -4536: 83 5 81 9 747 2 -87466: 19 46 6 3 -605783111392: 404 91 601 37 741 4 -58853775: 4 485 79 4 384 399 -47889063: 516 64 89 984 999 29 -23241016: 7 3 5 5 6 1 3 819 27 9 9 1 -27260572330: 9 9 7 9 28 57 2 3 8 2 5 5 -233756964: 61 958 6 5 1 5 26 8 314 -781268: 376 6 743 4 692 1 -69945120: 7 4 539 5 113 5 6 4 7 73 -267715242: 92 8 663 9 4 3 632 3 1 2 -1896465174: 976 920 1 4 651 72 -2800123: 203 8 17 9 384 23 -206464: 3 7 3 186 1 -127766017: 74 12 9 35 714 1 24 1 -24: 7 5 1 9 3 -10510918116: 59 46 109 181 15 -3621981: 2 248 954 2 1 3 9 78 -7258534: 70 96 523 840 898 -12932425: 928 6 43 57 8 54 1 3 9 7 -40426441: 6 8 7 7 3 8 1 2 1 18 509 9 -258400: 70 120 34 40 -895: 81 303 38 2 51 -80809920: 932 69 727 47 995 -21779938: 9 411 92 64 226 -1613: 4 401 4 7 -43158803498: 36 222 9 7 26 39 6 9 9 1 -4366703135: 57 7 93 7 2 70 982 8 6 -167694750: 9 89 350 76 598 -1913663802: 64 299 63 6 2 10 2 -1444191: 556 9 11 4 6 5 1 41 83 7 -1003880435: 19 82 746 977 863 -4155: 72 810 13 4 575 -96614034: 15 6 361 72 6 2 3 6 59 -1688: 5 9 1 5 3 8 8 -41338714328: 41 338 639 75 328 -9197318140: 2 59 6 1 690 8 1 5 227 4 -46479360: 61 7 4 2 9 7 39 272 6 5 8 -404048233: 951 7 8 576 2 4 235 -11494468882: 3 187 5 9 1 3 24 2 6 7 5 7 -1922: 6 233 457 6 61 -6955: 9 7 8 4 5 7 4 2 4 5 202 5 -31285182: 23 136 506 7 63 52 -8117862: 437 1 6 921 2 381 46 6 -47589: 9 94 374 39 7 -2256037: 60 376 39 -2527024499: 4 3 1 7 8 10 3 1 6 51 91 -37690: 3 720 52 6 1 88 1 -4175256007: 4 8 5 39 20 2 34 2 23 -380247474471: 2 4 2 45 497 88 5 7 2 7 1 -21474: 9 9 9 1 17 4 784 8 4 39 9 -3277745: 18 2 5 4 414 89 271 -20611117618: 3 3 2 4 8 1 4 9 39 76 19 -6706090709: 799 2 3 1 8 9 8 4 7 872 -5792: 618 29 68 8 3 69 -410827821: 4 927 73 453 16 409 -233173828: 3 74 634 6 896 3 4 7 5 6 -187959: 119 32 2 556 23 -486043544: 3 230 57 52 54 74 62 7 -2347696: 4 1 35 40 19 769 8 -4278588041013: 44 7 29 4 7 456 7 4 684 -5637600: 58 9 54 25 8 -4977330: 9 7 6 79 3 9 8 838 3 4 7 6 -22497: 82 79 983 1 1 3 9 102 -35382699154: 77 617 2 14 2 46 554 -16502056: 8 6 58 319 488 5 819 -756793: 88 3 3 944 192 3 1 72 -4214: 6 697 1 5 27 -12450094: 2 2 2 6 3 629 9 857 5 9 4 -1618088: 76 4 6 1 7 7 62 90 5 1 8 -1060491: 3 361 14 906 66 1 -266689086: 3 2 17 83 5 6 8 42 6 5 3 3 -68560832: 3 1 82 6 8 5 3 308 2 1 2 -1326: 423 846 4 1 8 44 -68085: 674 6 78 7 -1840707: 85 9 62 6 804 4 3 -13403416: 2 1 3 5 4 65 7 8 7 3 933 -2093: 56 6 868 26 614 9 8 -12213922: 73 703 14 1 17 -224283: 640 7 4 5 8 4 -97770: 1 214 7 27 1 8 378 -25990: 6 5 5 87 2 7 767 6 92 4 -299184551: 325 2 92 544 7 -63062194: 70 9 605 7 46 123 825 -68322843482: 28 244 28 434 82 -37380255: 80 1 935 87 493 4 5 -305472677: 509 6 7 267 7 -46: 1 45 2 -2250: 29 1 75 6 69 -191773: 19 176 5 8 -91083792: 4 7 236 878 7 5 6 4 3 1 1 -335524376: 8 53 51 68 668 158 -29640281671: 7 8 4 6 3 5 7 44 7 8 8 90 -497340: 9 3 762 7 3 6 3 5 6 -279527: 402 67 149 4 1 3 -279694: 1 935 96 765 97 -224785469: 2 1 9 5 68 10 2 3 9 3 7 23 -10732502: 15 5 477 5 60 -7497250: 8 936 1 9 249 -56971: 4 76 9 79 91 -41393070: 2 53 5 781 70 -12168228431496: 64 3 8 2 161 9 7 831 3 -117142318737: 3 6 6 9 2 60 436 3 9 6 9 3 -158260: 9 45 5 4 78 -2363212870: 2 363 212 4 52 420 -447325: 463 2 795 355 25 -4751: 11 48 9 -841: 81 9 97 2 13 -3346211520: 3 9 858 11 522 -697352492: 67 1 4 4 18 3 455 69 9 5 -7319280640: 61 45 7 709 7 656 80 -27260: 7 9 344 79 5 -10737320581: 7 8 5 5 55 7 8 6 294 70 -17943: 9 839 921 18 6 9 4 -35412: 6 724 1 9 8 580 -6453: 161 1 475 81 9 -840798: 975 287 52 3 647 517 -17854: 3 32 69 42 7 655 -1735468803: 3 86 8 5 9 91 68 3 26 80 -1955340326: 54 8 292 2 54 5 327 -7614444: 86 7 718 824 7 88 7 19 -108369902185: 3 9 115 814 7 9 5 7 1 8 6 -139223: 8 3 53 2 77 38 6 3 2 7 4 -2142640: 49 43 35 566 72 -266228026: 3 80 51 8 597 5 62 24 -68870224: 6 62 870 22 4 -393281: 5 4 109 9 32 77 2 22 9 -22257035: 29 25 685 5 6 3 597 3 5 -1480: 679 67 130 537 9 58 -11720991: 1 8 23 7 364 5 5 5 59 7 -156699: 663 9 301 5 5 -1292069: 17 760 21 42 6 -83229203: 100 1 4 7 1 808 321 9 2 -15899250: 986 375 43 -80808: 40 4 521 212 104 -10465625002: 9 77 71 47 50 1 425 2 -819408192: 31 68 991 7 3 87 -667: 8 8 2 7 -26860: 200 45 23 56 4 -49480468: 43 29 90 127 -5186813940000: 504 967 5 825 5 86 2 3 -19174057: 6 7 652 7 51 7 -72691616664: 991 7 733 662 6 38 -18573243: 343 360 489 9 900 6 -3883810560: 6 88 2 8 4 438 8 980 6 -19738: 5 2 508 38 54 -703764: 13 8 48 495 20 77 23 6 -273920: 7 629 987 89 8 20 -911: 7 5 9 4 592 -33029: 50 644 822 7 -524702: 7 153 24 79 7 3 95 17 -109342: 84 130 3 3 2 2 80 -35742400: 8 1 706 7 51 174 6 6 9 7 -1483641: 2 64 70 737 153 -7397: 364 5 8 4 85 -10622451329: 5 80 3 7 1 4 7 879 3 1 2 -1513454743: 69 31 8 732 963 91 -87816030: 47 1 7 80 3 8 1 6 417 1 -2957777379: 30 265 7 777 379 -279602: 759 1 23 4 4 274 9 7 -2793723: 2 10 66 1 6 24 2 723 -13426560: 36 37 180 8 7 -72281484: 8 25 758 6 17 9 36 -15157818475: 26 124 1 5 7 818 475 -1726473: 857 5 41 9 819 2 -69102877793: 9 997 2 91 7 17 711 7 5 -1182849: 2 249 31 38 4 129 8 -81125766: 7 2 670 17 308 3 789 -20198: 8 6 3 396 2 -130416799: 10 27 483 6 7 9 6 4 -29969: 7 62 38 7 91 5 4 907 -4071: 3 10 4 7 23 -3447616557: 858 111 362 9 54 -31720: 38 59 43 63 4 2 -10386966: 1 3 8 612 2 96 5 7 8 4 6 3 -2515969: 2 768 9 906 8 -2085272: 18 65 114 297 25 -245966149: 96 3 146 5 6 4 2 2 3 731 -936628: 57 38 19 887 90 88 -434515299: 905 64 9 8 56 99 -7751781085279: 8 7 900 819 9 389 11 -6523: 4 61 26 151 28 -507242778: 6 822 69 44 4 459 1 6 7 -4557: 2 48 3 9 169 3 -6172533: 37 9 207 43 7 9 7 7 12 9 -4528512: 7 27 871 689 5 6 63 -35178: 1 682 81 46 80 -40198: 67 4 25 6 -12418780: 54 7 6 8 351 6 164 11 -37440: 24 9 8 12 870 247 32 -7303307255: 35 695 324 6 64 8 52 -42929: 9 124 38 5 516 -101311: 2 99 31 1 3 -3786723: 1 685 92 6 3 3 -757762: 76 997 1 3 38 -728: 567 6 23 42 90 -19126995: 593 1 70 65 59 58 458 -83647: 8 828 47 -1250549: 24 939 1 71 50 -9778: 9 173 39 15 5 3 39 262 -18714: 89 265 5 13 4 43 1 3 -10446534727248: 61 465 74 62 990 8 6 -4136: 12 289 668 -986: 919 65 2 -382284584: 655 1 7 1 144 578 7 1 -2087668: 521 7 75 94 48 4 -13551: 62 69 8 36 9 -54736659: 504 52 8 38 17 261 -46609728: 5 9 6 5 78 8 818 9 3 1 5 6 -8001: 55 7 6 9 7 3 -2164: 20 62 3 7 8 8 76 -34288954: 174 227 512 141 854 -149143039: 568 157 839 4 4 8 745 -858002: 715 600 1 2 2 -355275: 3 550 5 22 6 -1161901609: 9 3 7 1 9 5 8 2 99 9 492 4 -14265505: 7 4 77 237 684 -93906: 1 23 457 4 78 -280258704: 396 16 217 528 81 -2447: 237 9 217 9 88 -21103892: 688 2 139 4 3 64 55 7 -572320: 571 889 7 8 7 -22940: 74 1 31 10 -453933144: 884 1 7 2 8 75 164 94 9 -9387402762: 447 7 134 3 70 3 57 2 -628: 2 96 5 6 10 -58729373: 53 4 53 29 373 -16162243: 2 3 90 75 92 139 927 -1806271: 4 319 283 5 13 718 -1908: 72 26 16 8 9 -87108518916: 8 349 61 129 729 4 -1120226562: 81 8 1 54 7 89 8 5 2 32 -5619463232: 7 860 2 3 9 3 24 29 -28275666: 4 35 65 440 227 -57418552: 8 96 4 18 9 6 4 142 -337848089754: 893 778 54 82 7 9 5 -101244761: 2 8 4 1 222 8 1 631 6 4 5 -31091: 2 94 6 323 9 4 4 53 8 3 -9551142: 2 7 4 4 92 9 87 2 54 -431798: 2 827 32 904 554 96 -368064: 62 5 31 10 568 6 -641856: 80 23 1 2 8 -356332: 848 13 8 38 853 4 -1530148: 107 13 11 13 33 -10595: 4 93 3 71 524 -13825: 37 88 128 73 4 -485809: 9 597 19 6 996 5 -6598799: 541 2 674 617 6 5 3 1 1 -15595884486: 6 36 560 69 8 961 -655845: 5 5 2 512 8 298 7 115 -167578404: 716 3 162 9 916 19 -539849: 3 7 1 594 25 -3430232: 9 15 29 9 2 700 7 56 4 8 -4196: 951 77 9 8 4 4 -24625387: 9 6 8 6 9 37 846 38 3 8 8 -4318272002: 10 7 2 3 80 6 5 2 7 306 2 -49392736: 80 63 4 72 34 2 944 2 -97244751876: 3 45 6 3 7 293 8 5 9 2 3 1 -2827209446: 384 6 35 4 9 6 7 3 441 5 -773376516: 7 73 37 651 5 -466781: 21 76 5 364 782 -314242938: 77 30 223 22 610 218 -654638167: 14 95 6 631 7 169 -11952: 76 23 69 7 50 439 18 -7579925: 860 37 435 47 5 -1618: 80 4 7 711 59 -33287: 1 822 40 354 48 2 3 -126232779: 6 3 841 9 5 4 77 8 34 9 3 -155627: 1 6 99 989 54 95 13 99 -713339897: 9 7 5 8 9 30 430 -131670050047: 231 19 75 12 5 1 4 8 -7727322: 2 795 9 753 513 -349733: 615 8 637 271 4 6 28 -2481710424: 1 58 9 49 1 3 96 5 9 3 8 3 -261963659: 9 7 4 7 2 308 655 650 9 -51571974: 7 5 579 7 848 1 1 3 -20290: 3 85 3 467 36 1 1 6 196 -2626: 2 6 96 545 2 -22878: 2 2 80 275 4 21 3 9 -575535: 54 4 14 18 10 8 73 6 3 -477517: 43 3 4 5 8 46 7 50 -1384703: 4 401 6 7 738 51 -891003337: 86 6 12 4 825 3 3 39 -90028742465: 608 3 1 37 4 3 4 2 4 6 2 1 -231588050: 35 3 1 586 1 2 8 1 3 65 5 -1072: 7 9 995 9 5 -11381395: 73 4 974 2 36 2 435 7 -3841: 847 4 87 358 8 -88734868: 3 6 9 8 9 2 7 5 4 838 725 -280240227: 2 981 23 1 48 94 -343965: 6 35 67 885 23 -14417393: 9 4 7 2 63 6 38 35 90 -227912: 8 183 31 19 3 72 9 8 1 -2511501082: 1 946 88 2 430 3 7 6 2 4 -9770975: 2 207 7 58 9 4 36 33 5 -181098129983: 36 3 6 1 3 399 7 9 8 1 8 6 -5511886: 749 92 63 2 9 4 104 94 -11912: 3 167 581 43 15 -54194003: 24 5 7 50 632 -40135618285: 5 5 5 4 8 7 7 38 182 8 3 5 -8817032: 460 2 2 6 4 4 7 2 57 728 -236071: 566 414 610 196 941 -1699: 874 26 799 -9082: 59 85 7 9 10 -14399715: 7 6 5 84 32 1 9 9 8 756 7 -957922: 5 76 282 265 853 -519850: 854 1 1 608 8 -494598: 8 8 8 9 1 2 4 1 3 4 17 78 -717301: 769 92 138 844 1 -79732051: 8 1 7 80 45 5 221 629 8 -193315: 5 329 577 536 60 -443120: 71 7 62 5 764 4 -799531202: 320 693 332 72 50 2 -25055194: 241 48 900 7 194 -148742749564: 341 93 73 435 240 65 -2975722: 802 811 6 919 2 -69614316: 3 9 65 34 9 9 6 3 1 96 59 -9211672: 92 116 51 20 -1384: 5 687 2 -2227754259: 312 1 75 78 952 -1980: 6 46 5 70 6 -1051: 74 41 921 7 8 -7224: 69 9 6 405 7 -100058717: 58 44 628 7 145 31 9 8 -13325842: 86 4 981 7 534 49 5 9 -135606016: 86 1 1 7 2 4 8 877 96 8 -188416: 4 8 735 32 8 -13081748: 306 58 2 737 -3408461: 654 396 4 34 348 94 9 -19518: 2 1 8 9 1 54 9 25 9 616 2 -31719: 65 6 9 78 597 -246572: 26 98 9 4 393 9 81 2 8 -127805458: 40 71 9 1 5 457 -7811: 198 16 5 7 31 1 4 794 6 -1168319105: 5 2 1 2 4 44 8 93 9 12 8 8 -7211685: 411 5 7 562 8 554 93 5 -4028985022: 77 86 48 505 604 -127755655140: 73 70 5 3 8 31 5 140 -208269903: 3 75 267 990 3 -956027222: 455 20 5 10 4 3 5 7 -332644: 63 1 8 660 4 -739903: 8 744 1 67 3 630 9 1 5 -449841: 8 6 3 1 9 9 4 9 608 73 88 -3162: 88 4 6 9 7 3 53 7 9 17 -123780: 961 528 514 51 9 60 -397: 88 299 1 1 9 -20327221321: 10 40 83 98 1 460 7 6 -22759444: 366 7 6 3 241 6 -1397068088398: 419 2 5 161 5 6 4 414 1 -5172: 6 431 2 -7637: 251 9 85 746 7 -1812: 908 35 789 3 77 -1120: 7 9 1 68 9 2 4 -770138283: 11 6 57 1 3 8 947 9 1 3 3 -163644: 610 32 344 63 156 -6168: 137 5 9 -507: 41 9 2 76 60 -593693: 77 77 16 765 9 -1214074355: 9 4 5 3 9 73 5 7 8 4 855 8 -607244471: 6 3 7 3 1 83 2 510 2 4 6 8 -275: 26 2 9 2 2 -250040507: 24 9 455 585 504 -5137920095731: 44 7 438 78 3 23 573 2 -282926819: 6 4 827 26 812 42 3 32 -80952: 37 2 6 948 2 -8890436: 635 2 7 43 8 -10600: 2 1 8 8 6 6 8 3 91 541 6 5 -23840: 5 86 1 9 4 1 7 511 57 5 -283368: 3 8 8 322 8 -1123947090: 49 3 877 8 1 323 9 342 -25775616: 8 8 6 97 692 -243687944: 650 5 815 32 92 -2855764: 2 1 912 730 1 -2736185924: 835 66 2 53 8 3 31 3 2 2 \ No newline at end of file diff --git a/2024/gareth/day08/day08.go b/2024/gareth/day08/day08.go deleted file mode 100644 index ce5a1cd..0000000 --- a/2024/gareth/day08/day08.go +++ /dev/null @@ -1,80 +0,0 @@ -package day08 - -import ( - "math" - "strings" -) - -type Coordinate struct { - Row int - Col int -} - -func Part1(input string) int { - grid, antennaMap := parseInput(input) - result := findAntinodes(grid, antennaMap, true) - return result -} - -func Part2(input string) int { - grid, antennaMap := parseInput(input) - result := findAntinodes(grid, antennaMap, false) - return result -} - -func parseInput(input string) ([][]rune, map[rune][]Coordinate) { - lines := strings.Split(input, "\n") - rowCount := len(lines) - colCount := len(lines[0]) - grid := make([][]rune, rowCount) - antennaMap := make(map[rune][]Coordinate) - - for row := 0; row < rowCount; row++ { - grid[row] = []rune(lines[row]) - for col := 0; col < colCount; col++ { - frequency := grid[row][col] - if frequency != '.' { - antennaMap[frequency] = append(antennaMap[frequency], Coordinate{Row: row, Col: col}) - } - } - } - - return grid, antennaMap -} - -func findAntinodes(grid [][]rune, antennaMap map[rune][]Coordinate, onlySpecial bool) int { - rowCount := len(grid) - colCount := len(grid[0]) - uniqueAntinodes := make(map[Coordinate]struct{}) - - for row := 0; row < rowCount; row++ { - for col := 0; col < colCount; col++ { - for _, antennaPositions := range antennaMap { - for i, firstAntenna := range antennaPositions { - for j, secondAntenna := range antennaPositions { - //I know I know thats too many for loops - if i != j { - distance1 := int(math.Abs(float64(row-firstAntenna.Row)) + math.Abs(float64(col-firstAntenna.Col))) - distance2 := int(math.Abs(float64(row-secondAntenna.Row)) + math.Abs(float64(col-secondAntenna.Col))) - - rowDiff1 := row - firstAntenna.Row - rowDiff2 := row - secondAntenna.Row - colDiff1 := col - firstAntenna.Col - colDiff2 := col - secondAntenna.Col - - if rowDiff1*colDiff2 == rowDiff2*colDiff1 { - if (distance1 == 2*distance2 || distance1*2 == distance2) && onlySpecial { - uniqueAntinodes[Coordinate{Row: row, Col: col}] = struct{}{} - } else if !onlySpecial { - uniqueAntinodes[Coordinate{Row: row, Col: col}] = struct{}{} - } - } - } - } - } - } - } - } - - return len(uniqueAntinodes) -} diff --git a/2024/gareth/day08/day08_test.go b/2024/gareth/day08/day08_test.go deleted file mode 100644 index f744f8f..0000000 --- a/2024/gareth/day08/day08_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package day08 - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestPart1(t *testing.T) { - r := Part1(`............ -........0... -.....0...... -.......0.... -....0....... -......A..... -............ -............ -........A... -.........A.. -............ -............`) - assert.Equal(t, 14, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`............ -........0... -.....0...... -.......0.... -....0....... -......A..... -............ -............ -........A... -.........A.. -............ -............`) - assert.Equal(t, 11387, r) -} diff --git a/2024/gareth/day08/input.txt b/2024/gareth/day08/input.txt deleted file mode 100644 index d4fb9a8..0000000 --- a/2024/gareth/day08/input.txt +++ /dev/null @@ -1,50 +0,0 @@ -........................E...j......W..........L... -............................O........E.........L.. -..q......O...........l....................K....... -............q...................HM......W......... -................................1..H...........IW. -....................5............................. -..........k........M...wl............6............ -.....O.......w...k.....5.8..l......K.........o.6.. -.......k....w.........5.........R.....o........K.. -.....q..X..............j........E...I.........K... -............O..........E........................H. -................Mn.h2.w.p....................H.... -..................p.......a............j.....L.... -.....X...l.p.....................m.........W..6... -..Xq................A..................R..m....... -.........................i..........a..........R.. -...........u.....................a........I.....2. -k..............A..n.........R.................o... -................n.................Qo.............. -..........u.A.........h........2.................. -...5.......Y.....p...............iN............... -1...x.....................i....................... -........M..............2.....Qi................... -...............................I..e............... -......u......A...........m..........h............. -.......1...........U.............Qm.......j....... -.......X.......................................9.. -.....u........U.......Y........................... -.............................h.e.................. -..................4....e......Q.....L....N........ -.1..................4.......................y8.... -.........Y................................8.N..... -............P.0J...........3..........8y.......... -....V3P..........J................................ -............U..P...7x...........e................. -....................J...............r...9......... -.........0.V......Y............................... -...............V.4................................ -..........V..........................n............ -..............v........7.......................... -...........U..........J.......7................... -.....v........7..........................a........ -.......................................r.......... -...........0.......x................y............. -............6..v.x.....................N.......... -...........P...................................... -........3.......................r......4.......... -..............3......................y............ -................................................9. -.................................................9 \ No newline at end of file diff --git a/2024/gareth/day09/day09.go b/2024/gareth/day09/day09.go deleted file mode 100644 index c2e12df..0000000 --- a/2024/gareth/day09/day09.go +++ /dev/null @@ -1,104 +0,0 @@ -package day09 - -func Part1(input string) int { - files, gaps, lengthOfFinalFile := parseInput(input) - checksum := compactFiles(files, gaps, lengthOfFinalFile) - return checksum -} - -func Part2(input string) int { - files, freeSpaces := parseInputPart2(input) - checksum := calculateChecksum(files, freeSpaces) - return checksum -} - -func parseInput(input string) ([]int, []int, int) { - var files []int - var gaps []int - lengthOfFinalFile := 0 - for i, char := range input { - if i%2 == 0 { - files = append(files, int(char-'0')) - lengthOfFinalFile += int(char - '0') - } else { - gaps = append(gaps, int(char-'0')) - } - } - return files, gaps, lengthOfFinalFile -} - -func parseInputPart2(input string) ([][]int, [][]int) { - files, freeSpaces, position := [][]int{}, [][]int{}, 0 - for index, char := range input { - length := int(char - '0') - if index%2 == 0 { - files = append(files, generateRange(position, position+length)) - } else { - freeSpaces = append(freeSpaces, generateRange(position, position+length)) - } - position += length - } - return files, freeSpaces -} - -func compactFiles(files []int, gaps []int, lengthOfFinalFile int) int { - fileIndex := len(files) - 1 - gapIndex := 0 - position := files[0] - checksum := 0 - fileID := files[0] - - for lengthOfFinalFile != position { - // If there's a gap and a file to move then move the file - if gaps[gapIndex] > 0 && files[fileIndex] > 0 { - files[fileIndex]-- - gaps[gapIndex]-- - checksum += fileIndex * position - position++ - } - - // If this file is fully moved go to next file - if files[fileIndex] == 0 { - fileIndex-- - fileID++ - } - - // Update gapIndex if this gap is filled - if gaps[gapIndex] == 0 { - gapIndex++ - for f := 0; f < files[gapIndex]; f++ { - checksum += gapIndex * position - position++ - } - } - } - - return checksum -} - -func generateRange(start, end int) []int { - rangeList := make([]int, end-start) - for i := range rangeList { - rangeList[i] = start + i - } - return rangeList -} - -func calculateChecksum(files, freeSpaces [][]int) int { - checksum := 0 - for fileIndex := len(files) - 1; fileIndex >= 0; fileIndex-- { - for spaceIndex := 0; spaceIndex < len(freeSpaces); spaceIndex++ { - if len(freeSpaces[spaceIndex]) >= len(files[fileIndex]) && files[fileIndex][0] > freeSpaces[spaceIndex][0] { - files[fileIndex] = freeSpaces[spaceIndex][:len(files[fileIndex])] - freeSpaces[spaceIndex] = freeSpaces[spaceIndex][len(files[fileIndex]):] - } - } - } - - for fileID, file := range files { - for _, block := range file { - checksum += fileID * block - } - } - return checksum -} diff --git a/2024/gareth/day09/day09_test.go b/2024/gareth/day09/day09_test.go deleted file mode 100644 index b9de485..0000000 --- a/2024/gareth/day09/day09_test.go +++ /dev/null @@ -1,22 +0,0 @@ -package day09 - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestPart1(t *testing.T) { - r := Part1(`12345`) - assert.Equal(t, 60, r) -} - -func TestPart1Long(t *testing.T) { - r := Part1(`2333133121414131402`) - assert.Equal(t, 1928, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`2333133121414131402`) - assert.Equal(t, 2858, r) -} diff --git a/2024/gareth/day09/input.txt b/2024/gareth/day09/input.txt deleted file mode 100644 index b5ab7ba..0000000 --- a/2024/gareth/day09/input.txt +++ /dev/null @@ -1 +0,0 @@ -2529414994631170149953136311659836486767499011295895209013255645858553884990631239857180407026188318789536626883964672136355273919115442427552799046486996326836721848461142184774852462365260634524991545439574418977718911375256991472764810705999392318631748622830142133467261617273937356141415707425753674415292503537471415868114655290826112291685289736371370794189785878486831872016564126976522727423616247825525582235815348304183161672962553208063528051403895878511223754541942753550948843423236569890488336109548241119404580493982516632107654275399605468301782552884515594818174546445227869897726454296218318628664159728961325374033515263746610627048519411977781695595794535515064703636952079774826159321748816186679411826696063348134165468188023619726476382843216866261777484681339754899174368188722709816794137754761792646555351973887495359649411363814901253642493312614366531222370302156743751318251941645822081602872738751283687336339884876543218141359765134733663492093416431535012445097595649165971493028986240575597653688523974288772307034632638625633187731811281922665421327836218203214749354406959408680793080389496978212945419775978249165443961189137588895163095106088317084441298272395387540452384597822868485507235641120715625515459853525688110756198615289287578182442456417904668154987527729122473963550517916127294526771821425495935972610686448528932482912141732519954383661982334932650248353682615255120545729895022211147836848115341454584957926805633627964276847999330476526354279332512826717133230773157324347402953953927527665567153253315399378748818468678693837961867951860312379276017805343355247963052974232165110245254232287194847722340532410286385821556192322832743937519209173458985571983132531839983977272421739138970811391464140682379139824407889378619871180297441298829669070809895586794531431857864567433873076723053603435662419381934421712102617472739137385638576101831848842655652454165101290255871526232351950556852421166861327615244371495542266229753205035804540174131698192768395814389388644268086405515537752706254391829761337527891677215356747115182964429255822243039588914805260924016257466777195552352949478722191539771342551122847825532233481813754983169379785489050221270707365696021932483631432414437351963685012191132618360937331778186804479417765518124878796421456944742103810878239437117576013394324571182139571294073653266958694952196425926136893533164132575492817488096489046378492654888421055756213119857493249964822944119957868459016171356769871756326614598659835681980344267978612918689166116244890339182206315282146134018964798226159212449309744905320227743183143823029572839434660354034213549817535283713791522376277984037586413688061535089165885822732145890396647843158478710908866936938249064552772794146522586525741963899855122516857695592581647685180705089559981833535136560929145755880975051188152909463771689906499581149643227497130528722407033493481913346162338161479763710736884142797715949788465814349438278276580443850194834256818985090856559827988358562352513349995775225726210788843511763845149583787943127203914501053994685329347167183832489402915704644923353246710121286566284592170886447519167319529279269987190217074136145686633506883865816354097504356778652208815894272748631452119193048574123409114138145899637632260879694921946816524934021101560398222255429352486691681551047543735741549497410302274971744428279371337924012804528976512947630763820698984176515394115387633878375905835504237195317411954949167209227352725803951402765353945194611408966745723441976996218446199527123935043173695744261353026652837718730465094774015112912204943556343544443281354456239347083976280589560844610218264355879457283812993459560733867541611553150662275879650464596329710741282407824297149262230995875542027136495131087189327597974108634582334863989876019159315756949473828329795289481447823671037856645639327923091353712977682847527747453192825951029198856408367633596597492822338202150779572581027413328459951408278317191453930802581727739778818584413762281675934513970122072971459927778838048533780518220295897149947836136418279345115765461984365627774424287416673159950719867353137466421928859527059578264892347829281782530312247822394516573966472975576956366988127608160989564458910184313229420889926896085859813973174764072952774397898954466591163388550598972604976663611761341337996196531364142244786437084508236507637471411333734425822787974289912567133635377856417676855417510459720787516351248865028922683834152246383211823927644303075529444473819826470587213904655264647936061755076265634169417988091507859331696695769284314334936986135269574142089267669916879509927751857594745155933587016723848953951677257844971196014883326232861968441712070642663307777867467921814283324529951996933555279335439351793773832376425489790347097348422593969642852779022169223143874617495449982708614991877319989495996341617318379612350708842715884444940298963514595995861202572539578968229889314943042379386975825399714472598998896275717317789252230862580831911698693607072779348639733637062376388618751532446287461907975694698138498743674524764675433752075968423109396213318302547126063612015531374816351905283436220886375995812865645649141134191501727367893497583962867563365886828824519512052627638939237741386617227974759779067369889518684846439526033282876841617462042442269987069773717961312365584922658887661807898123591715763889589721296117827774775908347857384569976642759537833152357239422302577182823786591653840885394638914438832962054492810589492861554891063532026219355884515583221127034332875159922409584108748275365712893384120529451631561844113821693951354569460739871304131148640197459796332329932481346758171451932293326231949729390343088517175979578399524493432135176233172553180593570434837191336643916833176559150318999731314923242823710603792571853876371181271567758677297726678746261485567172587397114357927481587588546685557202136685993376096227650548253591779513552553924641735665178743045792684921252441476943956138343342153965395174258165333143368244033705373906479283944601437469850534960435315251028392311693555987024759239405319995026991252746572267189531323531240726621262588875681413577157821855759361879662876199816456269408159192440157511974546254551552112837961332772366597688970625124776783129518443867948213402053698231624310479198241337516740542547528657576074569664283634947780873287845510856376975280329234895920361046864061638397742281498357239959407484853642241734938160807663532164878623998830956790996098256839394229567714123932563931773235189019543369113372644947855499733915242264161245168769962351632553241194171382308165896772152271462743716484197248784950479730116542401564881257731654274033215711596287275930853493403887128663418582562837826832168965813950579887467061403834136842595975531188795065866894841959715210245747786292922145987543385430557218605063544754162850197295523292787872151070389787421074127480979667155282908461632832688958559343982661121567427116199232372744447250876255842217334096361787578921133673471226504829932937435162951056248417288221392613501749757484922179762626734566329696681235101999163642723350107832851532326160957591154631213496682013446738936344824599467110178333272612434182583726759394461671638880234884483742665765867162858753905079626655457570366587407816437486477441464926871135787479692260276680512056289567185812166261926597168235395791874272491337975719533018634929555681852889654725246766427836868339678299888070467361418118189185887849937415133033914434276167236373773242317889396972266762417210188295313421108175673291946914346531348630218711871325557857622725614288216914324142176149347966536219563474327432727315874397694491365159904382779931668771605155113377709491935019345329841640515393223388938398282814804018387757388269801688686119747960177369204228904719749989835059126010153088386468907469927142349124434852117714543516719911402832634829925120206332742825132621443526525038458970937574866527656658817482173683851272254888471587388799605651435266467029242546257288474665612035773117775755683493605435355451292552972838536749176269563218506210641949288225781671776376732626121854927620421599755763586241659734169460198471917986486743522513185299196496888657338493297625141871835456782744552777179870472819335930524451412227158567606324777065304544224274548895676217717154302827468454448617961547129915827072347777646166273473351079158780484188286332909954245091842872889126836863984182843435306389397411631977474322671629434756137663563618752317648357694644226485694945599174259688668187274661887191493082457995761881593446127225317165293022501952319497336932322767788699429262191752563263922892838047925172188196504853449214629551296665581145158670239512849396537147485663544045742782496673348490857554903925836698569925609944374774653511741831657175125137496038822182603950587691483262191235208463325762778839662856282217234530369627147973868822827010148030165632441653194425421050232513106040447451846676359089671531796362678717767988124162979694506496784054812360567782399784865135388690294642683171216974766986396576975490105318559373424698787437688557877158218371278457789860311029563277546383544892577698264626845017579266981747732354379074878361114767608950934590211375765721348048884340909970805539267593105416844391682494919095598134249119368133359819757379212389438096743567758051275829118265143278801797638476563062925356262417553725967577142813708467847887655547416511553757847121804935843837784184545722793051823734246648646452287876584949575494315249845695325028189443292761891979237563826779898665181091654818647159185643608485305387963626224565928489378619444981923468579667968346377691534172934755957294709524397313443796384252591052707013952490768483528934175481704189152762162211298817663343485942147260512852528849838755724259418851669671598937513426823917485262305387796586297250551618388512339573624195264377407617827265294187259151294042519881542927279134235990229478796182765494193011192529599466449484487736567431126378487357537211408016478927122161197418944499364646411439156188812657659057274751477567475479836151955744708965869356819072204223903818202714564693184141171455129739674233312746984353853673975679277422414589723884364055569015124470343548823363192038946382122535898741553564885030261230488670409813686864388051132153324436708452844556148980927437241868332788438436634578876696742551928297793057289492146014478268681653366058565496734095904157615382536916912880508895357980811744463551872854337213632877945616938728611968899069416832219319264918987045779598529743253653729623391460482983259834966541864633785212981315586379697984194168364339675053787966329947131876867391118287634731671236868794137657415848338165177860813946763329597892791846106916246165157787333462409543784419585539868247783516923034381310458279709742708571821071597884146240884743628171457667686192573119798348994886418635727348836793913966419121819538427523585050341284172143209454318938299629713522699382881471164623839496246929753762186223896414982817796548399273461731797862527790617851192259229068723173591179947263952488681098333066867061403077834543413647619652285790488368491330257022614855462914813418496334698360298890977253499690182691378151647998867282767275147356601673269337114933275033361763477777327319657889664111264293916799147973231610405711368633275341825337629973362314465218134291874541119265441641325965383489444932957497211982434423247696121722833394918883766470873350703970871023839028395037172370843315285469767290177132558647268362894144737545542038543444326848886920491119779813203419559399587340303127918720857376772641801270168616802661393363597267548380882130511796448246378086751479931092975214946844455177376047631427628232643039145923562453584976937176864628584340132716635333833468614764566940837086345727807372153256379129817956745919253421978943303191964484576435667240425071512984142417757658878650324473919977471882477144698189544341706848156784755021389523767151202493163382509560121311875219924649812452873976707628227820632820739257169016537896842144442495561161711243947054753082906874578195333626412299754020937251566533744223342995987474144817277213873632741755679846976852884229374282621294461537863047549490727134294218613747912747684785411267652467495199481996163375674940915462324184284088111423992371895230408480857930131266845763228223598440796634564969707066156452295089288777649277556013195871949271376495896088399085111576956820871784768372833888472937351118942457391847395757728767643727465020313980359554748836956333726494842729481765977351583238212696488790762185727885446331169472632080216273482057861829471778875450927772519954192552374349244223288897401148744834795092241162595178262946332893829021521296928856767232999222429392929724231276538533162498199713755661745720188685621372609635783747372243441353383311216763858812142622337755866549154717988836991149157056679744351490452357525326895036498352158193214564873889188822172336593194139584162523761462788035946956594849555358833582551834963214195228681216846935144898711024858025684423272687674547243741279359721575796724717376598366601669371589483213985131383414752627927723557070944997926173415173724037987866907042694413604737826114832744647489791567315380453572501087819757772371789536942057356056834340224775282111235470393566669227791979483123856082711161352084954631189797986652655943733985175613773658602334372343281879567914308267183638153184823726724566396110569430372769759269198217761169106040842690481473942285616714699962893391327592143644558856814994338618558544845832538562737478613796728913775260514678619912268081237650253842478140275339735790247579151915741082626354947213262785324994159099206320675914582810964666394819689639747759292899828544111124815030245345989832397773681057556125975939588428612540904269995936848226157958545165614127438731257823974789789811341898208715245826579965389778646581252045654084858253831882371812399318389060736043917199945624964579799041907783207825824399623327318161397052456683102527646058649444143050285876779192592564613330951083466466502517598764917022923845789672152239786235482764779660924680725767294573227498398795537592791385536149221689312957148544603085491049136359461311252913228854582995985553121163751021405540196625412868938130782435662350157030738948966344462633246063731083604516377127533931273840604693967751118249227536484769582931637926753549825338488847403822703910596122894485916477281041683480916174998749199321157023909665156323107760293576617787344728487416299641705594226185974385776878853444481736797141554985434667491845948847953989684619984662615950661342432494176354605213197243564389207529919259276511378044254880809886939188541479568484884436932410235652754259366920219999509354482025651582522873161276536036926662659835546646737470146247178441633174105497918161793946529556639276345920313138156847186466769956195522594258387664807758424387523222864982562133457388503184838382627283787760769617306330925889844668863338639486313032367972343946232599962147372284593149426277978221664943956749342273165518778795246230308036222172627794688092688374417660859628207682432230585335997646518451283753855632283563461248551782801478427171182044233235333689246344142349195527326218614546934096196395919249796094979048404911418569849992205723919588352868267022792715638089365555469933109745505983854555716754389359943836287587882385792117865937135819373743166117166634263438428256662492501874434630605897748134639549891548337076632976438735725457809789651163712698574923324917873193176394253438473564844581103495857314944695524838936319331387739355914148379720413456597618841520611034261711463157755783229893234042737345213852299940451380776112897760259714232379641391851693292843105245934282976949556542441355827670265534643431928527265926343029236454344667976639992684351387822888527390635595276038301338842760967882862050784988835946425019497961696974179371653976645268358674107934849749506388444356928590662862962050795631898627636338248381123892379795127315579693901181929965611971192592687949777296569359557275288711591621995840581068823650967232971011659247646069542710526291704853263490729512519956325623226321378177893166585121321844383090608885395624666032711317364698202572312567906283314163458748239810969511193451358948754518893542546920874788249278615074638584873548987858714494329655139886301026184321619953857896988815757599456453288089384482348062264715136844338148275555332016145254409076549132309660707222523960779157687563959995652343137132357989488445389210161565559326941817131277456063109683808335235724285164251890294027516524798351723588853355353337971087914066811666802940771578915136967538512688114939848293447517254942203619344534653241641455922596502420724020646461452575937427301251575826383828208412638471853768861468933955412839852493704967123787276736464624867167589648486712784155602554687837309060812180409563389019256718323094324035663674751022144535804524703362643625738220613356196193181182676491217180161232783738874760412587743291935496788956644846291471646968263250985566956040196438494715221043223627487440104551507183612184648040516627433067117696278659536799656067988833855035232022299588322565596270969486416635211995476318621946902994605967253960603347503394665843208333927524282996905694719826813772238273901570383296399220481911621780582786776577412022235016458129677157872539206116436944159412168664414826399628808910403233937791491571647325359066778280479961443674664081892572998374821221625140159133847469139499164637247539935712522260797025385033319534455526189365428960343483535542217665664726812024901773776917146114487248538687624319891318957441316967777576473049372764251177564480132356638412215697295025474413357622434690359746759335827523317492439392733713486952142988665231215292633669259725952646192054369364385068652199241664604763346882699186751576467924189378159018354145172419751388786241999187995825214531719054494111317922957862687780948371339841473610663867992514545614484648353581399073723231208154211012754251288542144223701493275358165119283458504117789158274734615196369367194387631995881697342191189572599029142212195690231476735929641029888887177840149796788522677992162737116597478484646056525174271255454122623685275569419714652921746041168099595295681399824887713226447050238817675317501956458571484291876187918049171175574175502991341121445870531814272148263064565282627514101123843723926654728619217784377581691964745248742935414089789490199119901853209347556262769030686033849925415671401323286071689986625384437097242386402070752539733644425362302761512360586910688334224486608461723197915563788036646327757479361026187821836868569836296615936497363657906673652749883673425570236496307020577955277693605582949958448529747175845572891755706137581334391327675010162978597060117322524120484736867193209235686848993575189277991753559513785257361183538376296615746462283343218369316121978319455552454193795487287969913691192354711363702111845346793736812589899096354127506081808036655441412958509547693761145119798696819510255490727798714511824497435990268786605521723282914729916771733149511360747625614267243964173121895462317598271534507061376766169942297795745526178562494180322753378246586130222089701041133920185272225395134511116953644349679488869173479735531687619476132528769768498069807465749939773067771825171055452073763268712329272937896090472378592133239775938085409573688062851627994874304318317862611643166961232498534730265757407912729619903682765224124977839280352358547098287921317341666922129894464337354928568038122378355225632276256715583670471355993855172746622825944376966233973757356911825260162871812592632559891117486347422347992529941697702017488464635678917868589612168269669537653857591035652857132315393832456797892133684196261957473754507416947165754330317062712830511914274558747584295780647492605119565668911332402960887396222241993596509063834636402284154381646485385868579153248445294622277948748137205831632555745583303493332 \ No newline at end of file diff --git a/2024/gareth/day10/day10.go b/2024/gareth/day10/day10.go deleted file mode 100644 index ef1dda7..0000000 --- a/2024/gareth/day10/day10.go +++ /dev/null @@ -1,141 +0,0 @@ -package day10 - -import ( - "strings" -) - -var directions = [][2]int{ - {-1, 0}, - {1, 0}, - {0, -1}, - {0, 1}, -} - -func Part1(input string) int { - grid := ParseInput(input) - return CalculateTotalTrailheadScore(grid) -} - -func Part2(input string) int { - grid := ParseInput(input) - return CalculateTotalTrailheadRating(grid) -} - -func ParseInput(input string) [][]int { - lines := strings.Split(strings.TrimSpace(input), "\n") - grid := make([][]int, len(lines)) - for i, line := range lines { - grid[i] = make([]int, len(line)) - for j, char := range line { - grid[i][j] = int(char - '0') - } - } - return grid -} - -func IsValidPosition(x, y, rows, cols int) bool { - return x >= 0 && x < rows && y >= 0 && y < cols -} - -func DFS(grid [][]int, x, y, prevHeight int, visited [][]bool, reached9 map[[2]int]bool) { - rows := len(grid) - cols := len(grid[0]) - if !IsValidPosition(x, y, rows, cols) || visited[x][y] || grid[x][y] != prevHeight+1 { - return - } - - if grid[x][y] == 9 { - reached9[[2]int{x, y}] = true - return - } - - visited[x][y] = true - for _, dir := range directions { - nx, ny := x+dir[0], y+dir[1] - DFS(grid, nx, ny, grid[x][y], visited, reached9) - } - visited[x][y] = false -} - -func CalculateTrailheadScore(grid [][]int, x, y int) int { - rows := len(grid) - cols := len(grid[0]) - visited := make([][]bool, rows) - for i := range visited { - visited[i] = make([]bool, cols) - } - - reached9 := make(map[[2]int]bool) - DFS(grid, x, y, -1, visited, reached9) - return len(reached9) -} - -func DFSForRatings(grid [][]int, x, y, prevHeight int, visited [][]bool, trailCache map[[3]int]int) int { - rows := len(grid) - cols := len(grid[0]) - if !IsValidPosition(x, y, rows, cols) || visited[x][y] || grid[x][y] != prevHeight+1 { - return 0 - } - - if grid[x][y] == 9 { - return 1 - } - - cacheKey := [3]int{x, y, grid[x][y]} - if count, exists := trailCache[cacheKey]; exists { - return count - } - - visited[x][y] = true - totalTrails := 0 - for _, dir := range directions { - nx, ny := x+dir[0], y+dir[1] - totalTrails += DFSForRatings(grid, nx, ny, grid[x][y], visited, trailCache) - } - visited[x][y] = false - - trailCache[cacheKey] = totalTrails - return totalTrails -} - -func CalculateTrailheadRating(grid [][]int, x, y int) int { - rows := len(grid) - cols := len(grid[0]) - visited := make([][]bool, rows) - for i := range visited { - visited[i] = make([]bool, cols) - } - - trailCache := make(map[[3]int]int) - return DFSForRatings(grid, x, y, -1, visited, trailCache) -} - -func CalculateTotalTrailheadScore(grid [][]int) int { - rows := len(grid) - cols := len(grid[0]) - totalScore := 0 - for i := 0; i < rows; i++ { - for j := 0; j < cols; j++ { - if grid[i][j] == 0 { - score := CalculateTrailheadScore(grid, i, j) - totalScore += score - } - } - } - return totalScore -} - -func CalculateTotalTrailheadRating(grid [][]int) int { - rows := len(grid) - cols := len(grid[0]) - totalRating := 0 - for i := 0; i < rows; i++ { - for j := 0; j < cols; j++ { - if grid[i][j] == 0 { - rating := CalculateTrailheadRating(grid, i, j) - totalRating += rating - } - } - } - return totalRating -} diff --git a/2024/gareth/day10/day10_test.go b/2024/gareth/day10/day10_test.go deleted file mode 100644 index 547889b..0000000 --- a/2024/gareth/day10/day10_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package day10 - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestPart1(t *testing.T) { - r := Part1(`89010123 -78121874 -87430965 -96549874 -45678903 -32019012 -01329801 -10456732`) - assert.Equal(t, 36, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`89010123 -78121874 -87430965 -96549874 -45678903 -32019012 -01329801 -10456732`) - assert.Equal(t, 81, r) -} diff --git a/2024/gareth/day10/input.txt b/2024/gareth/day10/input.txt deleted file mode 100644 index a6f2793..0000000 --- a/2024/gareth/day10/input.txt +++ /dev/null @@ -1,45 +0,0 @@ -987123434330121232101001234730123456781067632 -876076576521010345692340349823212347892398701 -945087689432105676787659856714503210987445610 -332196576587654989801456787609654502376530923 -211543210298923215432321098128778901430121894 -300692340147210106523543210039569876589836765 -456781678236103267015693016543410231276745650 -576890549345234178106782187612320140345654321 -985098432100125089235493498109876056034765012 -834127102345456978340362569018765487123876678 -123236221976347869651251078729034398101985589 -014545340889298958707867897430120987012834432 -105965456770107843216950956541231276543124501 -896872378761016930345441019876501345678023670 -787901069654325321210332398545432330589012981 -107821543213034321089206787638901421432103210 -215430694102123475670115896129876548901210349 -126989780210014984308924925014578037654321458 -037878921001235675217833210123669123109452367 -549865438901045102346542106548754321278501476 -678954987432696201256430087239689870347699985 -230143006501787349961021298101236787656788014 -123272112981010458872787034010345691875107623 -054387623472129867763698125676210010961234510 -565694502561036789854567012980387121250129878 -676783411051045672343218763901296030343278569 -989872123432345891050109654812345145467303450 -012763094321056700891760345765432256958912341 -103450185789763211709851236876301967843211032 -814321276656854345612345654954101878701208983 -923434434565956745678036783063210989870345674 -874532345410345832989123192178981876781456564 -265101654323234901808765013265432185692387565 -103216765432101267814554323476501094501893474 -232109856321011876923601098789678923432102985 -343898707896540945498712367765672310567891078 -456789010987231234321203456894581455454986569 -556776125670102343100157654503490166303890432 -543895434894321765212348983212321876212761201 -432104898765010894301054581200110955211654300 -301256567656987105498765690341034567300563212 -434567430547896234787654785652123498456767843 -321798121032345375696543098743096567877854952 -210899021121036789781232143456787656928923761 -326765430110145678710123232109876543210010890 \ No newline at end of file diff --git a/2024/gareth/day11/day11.go b/2024/gareth/day11/day11.go deleted file mode 100644 index 4876cac..0000000 --- a/2024/gareth/day11/day11.go +++ /dev/null @@ -1,89 +0,0 @@ -package day11 - -import ( - "strconv" - "strings" -) - -func Part1(input string) int { - stones := ParseInput(input) - return len(blinkTimes(stones, 25)) -} - -func Part2(input string) int { - stones := ParseInput(input) - return getNumStones(stones, 75) -} - -func ParseInput(input string) []int { - strStones := strings.Split(strings.TrimSpace(input), " ") - stones := make([]int, 0, len(strStones)) - for _, s := range strStones { - num, _ := strconv.Atoi(s) - stones = append(stones, num) - } - return stones -} - -// Part 1 initial thought of recursion -func blinkTimes(stones []int, times int) []int { - if times <= 0 { - return stones - } - result := blink(stones) - return blinkTimes(result, times-1) -} - -func blink(stones []int) []int { - result := make([]int, 0) - for _, stone := range stones { - strStone := strconv.Itoa(stone) - if stone == 0 { - result = append(result, 1) - } else if len(strStone)%2 == 0 { - mid := len(strStone) / 2 - firstHalf, _ := strconv.Atoi(strStone[:mid]) - secondHalf, _ := strconv.Atoi(strStone[mid:]) - result = append(result, firstHalf, secondHalf) - } else { - result = append(result, stone*2024) - } - } - return result -} - -// Part 2 with maps since blinkTimes(75) would set my computer on fire -func getNumStones(s []int, times int) int { - stoneMap := make(map[int]int) - for _, stone := range s { - stoneMap[stone] = stoneMap[stone] + 1 - } - - for i := 0; i < times; i++ { - stoneMap2 := make(map[int]int) - for stone, count := range stoneMap { - stones := make([]int, 0) - strStone := strconv.Itoa(stone) - if stone == 0 { - stones = append(stones, 1) - } else if len(strStone)%2 == 0 { - mid := len(strStone) / 2 - firstHalf, _ := strconv.Atoi(strStone[:mid]) - secondHalf, _ := strconv.Atoi(strStone[mid:]) - stones = append(stones, firstHalf, secondHalf) - } else { - stones = append(stones, stone*2024) - } - for _, newStone := range stones { - stoneMap2[newStone] = stoneMap2[newStone] + count - } - } - stoneMap = stoneMap2 - } - - result := 0 - for _, count := range stoneMap { - result += count - } - return result -} diff --git a/2024/gareth/day11/day11_test.go b/2024/gareth/day11/day11_test.go deleted file mode 100644 index 56c3825..0000000 --- a/2024/gareth/day11/day11_test.go +++ /dev/null @@ -1,12 +0,0 @@ -package day11 - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestPart1(t *testing.T) { - r := Part1(`125 17`) - assert.Equal(t, 55312, r) -} diff --git a/2024/gareth/day11/input.txt b/2024/gareth/day11/input.txt deleted file mode 100644 index ae72b37..0000000 --- a/2024/gareth/day11/input.txt +++ /dev/null @@ -1 +0,0 @@ -965842 9159 3372473 311 0 6 86213 48 \ No newline at end of file diff --git a/2024/gareth/day13/day13.go b/2024/gareth/day13/day13.go deleted file mode 100644 index 3d038b1..0000000 --- a/2024/gareth/day13/day13.go +++ /dev/null @@ -1,76 +0,0 @@ -package day13 - -import ( - "regexp" - "strconv" - "strings" -) - -type ClawMachine struct { - Ax, Ay int - Bx, By int - Px, Py int -} - -func Part1(input string) int { - clawMachines := parseInput(input) - total := 0 - for _, c := range clawMachines { - x, y := solveSimEquations(c.Ax, c.Bx, c.Px, c.Ay, c.By, c.Py) - total += x*3 + y - } - return total -} - -func Part2(input string) int { - clawMachines := parseInput(input) - total := 0 - for _, c := range clawMachines { - prizeX, prizeY := c.Px+10000000000000, c.Py+10000000000000 - det, x, y := c.Ax*c.By-c.Bx*c.Ay, prizeX*c.By-c.Bx*prizeY, c.Ax*prizeY-prizeX*c.Ay - if det != 0 && x == (x/det)*det && y == (y/det)*det { - total += (x/det)*3 + (y / det) - } - } - - return total -} - -func parseInput(input string) []ClawMachine { - clawMachines := strings.Split(strings.TrimSpace(input), "\n\n") - output := make([]ClawMachine, 0, len(clawMachines)) - for _, c := range clawMachines { - var clawMachine ClawMachine - line := strings.Split(strings.TrimSpace(c), "\n") - - re := regexp.MustCompile(`X\+(\d+), Y\+(\d+)`) - matches := re.FindStringSubmatch(line[0]) - clawMachine.Ax, _ = strconv.Atoi(matches[1]) - clawMachine.Ay, _ = strconv.Atoi(matches[2]) - - matches = re.FindStringSubmatch(line[1]) - clawMachine.Bx, _ = strconv.Atoi(matches[1]) - clawMachine.By, _ = strconv.Atoi(matches[2]) - - re = regexp.MustCompile(`X=(\d+), Y=(\d+)`) - matches = re.FindStringSubmatch(line[2]) - clawMachine.Px, _ = strconv.Atoi(matches[1]) - clawMachine.Py, _ = strconv.Atoi(matches[2]) - - output = append(output, clawMachine) - } - return output -} - -func solveSimEquations(a1, b1, c1, a2, b2, c2 int) (int, int) { - det := a1*b2 - a2*b1 - if det == 0 || (c1*b2-c2*b1)%det != 0 || (a1*c2-a2*c1)%det != 0 { - return 0, 0 - } - x := (c1*b2 - c2*b1) / det - y := (a1*c2 - a2*c1) / det - if x < 0 || x > 100 || y < 0 || y > 100 { - return 0, 0 - } - return x, y -} diff --git a/2024/gareth/day13/day13_test.go b/2024/gareth/day13/day13_test.go deleted file mode 100644 index 209a74f..0000000 --- a/2024/gareth/day13/day13_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package day13 - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestPart1(t *testing.T) { - r := Part1(`Button A: X+94, Y+34 -Button B: X+22, Y+67 -Prize: X=8400, Y=5400 - -Button A: X+26, Y+66 -Button B: X+67, Y+21 -Prize: X=12748, Y=12176 - -Button A: X+17, Y+86 -Button B: X+84, Y+37 -Prize: X=7870, Y=6450 - -Button A: X+69, Y+23 -Button B: X+27, Y+71 -Prize: X=18641, Y=10279`) - assert.Equal(t, 480, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`Button A: X+94, Y+34 -Button B: X+22, Y+67 -Prize: X=8400, Y=5400 - -Button A: X+26, Y+66 -Button B: X+67, Y+21 -Prize: X=12748, Y=12176 - -Button A: X+17, Y+86 -Button B: X+84, Y+37 -Prize: X=7870, Y=6450 - -Button A: X+69, Y+23 -Button B: X+27, Y+71 -Prize: X=18641, Y=10279`) - assert.Equal(t, 0, r) -} diff --git a/2024/gareth/day13/input.txt b/2024/gareth/day13/input.txt deleted file mode 100644 index ad39ae5..0000000 --- a/2024/gareth/day13/input.txt +++ /dev/null @@ -1,1279 +0,0 @@ -Button A: X+54, Y+22 -Button B: X+36, Y+62 -Prize: X=19754, Y=14184 - -Button A: X+20, Y+68 -Button B: X+34, Y+13 -Prize: X=15660, Y=15792 - -Button A: X+63, Y+17 -Button B: X+11, Y+28 -Prize: X=2658, Y=11605 - -Button A: X+15, Y+56 -Button B: X+74, Y+29 -Prize: X=9393, Y=11622 - -Button A: X+34, Y+97 -Button B: X+83, Y+35 -Prize: X=3876, Y=4197 - -Button A: X+14, Y+62 -Button B: X+75, Y+27 -Prize: X=12989, Y=4061 - -Button A: X+46, Y+17 -Button B: X+15, Y+54 -Prize: X=15841, Y=336 - -Button A: X+19, Y+61 -Button B: X+69, Y+12 -Prize: X=204, Y=7413 - -Button A: X+34, Y+14 -Button B: X+29, Y+40 -Prize: X=2353, Y=10368 - -Button A: X+64, Y+32 -Button B: X+25, Y+48 -Prize: X=3273, Y=304 - -Button A: X+18, Y+60 -Button B: X+66, Y+30 -Prize: X=11594, Y=2330 - -Button A: X+65, Y+47 -Button B: X+11, Y+29 -Prize: X=4677, Y=195 - -Button A: X+13, Y+23 -Button B: X+42, Y+14 -Prize: X=7115, Y=12417 - -Button A: X+81, Y+55 -Button B: X+26, Y+93 -Prize: X=2703, Y=5678 - -Button A: X+50, Y+96 -Button B: X+74, Y+20 -Prize: X=8694, Y=9856 - -Button A: X+19, Y+54 -Button B: X+74, Y+36 -Prize: X=6145, Y=9170 - -Button A: X+45, Y+76 -Button B: X+43, Y+15 -Prize: X=4194, Y=5627 - -Button A: X+28, Y+91 -Button B: X+94, Y+48 -Prize: X=2282, Y=2009 - -Button A: X+70, Y+35 -Button B: X+33, Y+83 -Prize: X=4786, Y=3856 - -Button A: X+14, Y+89 -Button B: X+38, Y+40 -Prize: X=2186, Y=3415 - -Button A: X+55, Y+19 -Button B: X+43, Y+79 -Prize: X=4737, Y=2757 - -Button A: X+32, Y+76 -Button B: X+60, Y+17 -Prize: X=11124, Y=5467 - -Button A: X+33, Y+62 -Button B: X+50, Y+21 -Prize: X=4940, Y=12625 - -Button A: X+56, Y+14 -Button B: X+48, Y+92 -Prize: X=2888, Y=962 - -Button A: X+14, Y+58 -Button B: X+83, Y+30 -Prize: X=6249, Y=5488 - -Button A: X+47, Y+83 -Button B: X+47, Y+11 -Prize: X=7153, Y=15685 - -Button A: X+35, Y+68 -Button B: X+52, Y+16 -Prize: X=12241, Y=14956 - -Button A: X+46, Y+72 -Button B: X+56, Y+25 -Prize: X=6054, Y=4401 - -Button A: X+35, Y+57 -Button B: X+43, Y+14 -Prize: X=10516, Y=12390 - -Button A: X+29, Y+56 -Button B: X+41, Y+25 -Prize: X=6288, Y=2319 - -Button A: X+73, Y+19 -Button B: X+59, Y+86 -Prize: X=9965, Y=8669 - -Button A: X+13, Y+43 -Button B: X+49, Y+13 -Prize: X=12137, Y=19559 - -Button A: X+17, Y+65 -Button B: X+67, Y+22 -Prize: X=1910, Y=15266 - -Button A: X+55, Y+27 -Button B: X+11, Y+43 -Prize: X=7767, Y=5007 - -Button A: X+26, Y+18 -Button B: X+35, Y+94 -Prize: X=4719, Y=9616 - -Button A: X+37, Y+81 -Button B: X+58, Y+13 -Prize: X=11010, Y=1876 - -Button A: X+66, Y+43 -Button B: X+17, Y+88 -Prize: X=6227, Y=5057 - -Button A: X+36, Y+66 -Button B: X+61, Y+31 -Prize: X=1642, Y=10702 - -Button A: X+54, Y+17 -Button B: X+15, Y+50 -Prize: X=17444, Y=2332 - -Button A: X+33, Y+74 -Button B: X+47, Y+16 -Prize: X=1127, Y=13206 - -Button A: X+45, Y+93 -Button B: X+84, Y+43 -Prize: X=9867, Y=10858 - -Button A: X+35, Y+99 -Button B: X+64, Y+33 -Prize: X=3780, Y=5511 - -Button A: X+29, Y+62 -Button B: X+46, Y+24 -Prize: X=14412, Y=6932 - -Button A: X+91, Y+18 -Button B: X+21, Y+20 -Prize: X=9303, Y=2474 - -Button A: X+61, Y+34 -Button B: X+30, Y+75 -Prize: X=6835, Y=7015 - -Button A: X+32, Y+82 -Button B: X+46, Y+12 -Prize: X=7126, Y=14580 - -Button A: X+30, Y+47 -Button B: X+36, Y+11 -Prize: X=13922, Y=14563 - -Button A: X+79, Y+39 -Button B: X+12, Y+43 -Prize: X=15040, Y=13839 - -Button A: X+15, Y+14 -Button B: X+20, Y+81 -Prize: X=1075, Y=1502 - -Button A: X+35, Y+80 -Button B: X+45, Y+11 -Prize: X=10380, Y=11870 - -Button A: X+50, Y+36 -Button B: X+21, Y+58 -Prize: X=4389, Y=3546 - -Button A: X+31, Y+95 -Button B: X+60, Y+14 -Prize: X=5432, Y=4076 - -Button A: X+96, Y+20 -Button B: X+64, Y+77 -Prize: X=3424, Y=2687 - -Button A: X+15, Y+51 -Button B: X+60, Y+26 -Prize: X=1505, Y=19741 - -Button A: X+37, Y+12 -Button B: X+33, Y+78 -Prize: X=10344, Y=13604 - -Button A: X+70, Y+93 -Button B: X+84, Y+21 -Prize: X=9184, Y=8034 - -Button A: X+33, Y+85 -Button B: X+99, Y+59 -Prize: X=4356, Y=2988 - -Button A: X+26, Y+27 -Button B: X+13, Y+60 -Prize: X=1105, Y=3240 - -Button A: X+55, Y+31 -Button B: X+21, Y+46 -Prize: X=7181, Y=11070 - -Button A: X+20, Y+54 -Button B: X+41, Y+32 -Prize: X=2979, Y=3400 - -Button A: X+35, Y+19 -Button B: X+33, Y+60 -Prize: X=10334, Y=11024 - -Button A: X+84, Y+21 -Button B: X+29, Y+79 -Prize: X=9575, Y=6340 - -Button A: X+58, Y+24 -Button B: X+15, Y+64 -Prize: X=10518, Y=6264 - -Button A: X+41, Y+12 -Button B: X+45, Y+69 -Prize: X=10120, Y=8966 - -Button A: X+87, Y+28 -Button B: X+14, Y+67 -Prize: X=6242, Y=6571 - -Button A: X+12, Y+28 -Button B: X+65, Y+24 -Prize: X=1515, Y=12044 - -Button A: X+85, Y+24 -Button B: X+29, Y+37 -Prize: X=7600, Y=2434 - -Button A: X+34, Y+92 -Button B: X+94, Y+69 -Prize: X=9882, Y=12282 - -Button A: X+11, Y+37 -Button B: X+23, Y+12 -Prize: X=848, Y=8448 - -Button A: X+52, Y+28 -Button B: X+33, Y+63 -Prize: X=3429, Y=6843 - -Button A: X+57, Y+13 -Button B: X+56, Y+55 -Prize: X=4314, Y=1744 - -Button A: X+81, Y+24 -Button B: X+12, Y+59 -Prize: X=13487, Y=6933 - -Button A: X+72, Y+50 -Button B: X+15, Y+40 -Prize: X=8927, Y=9290 - -Button A: X+68, Y+27 -Button B: X+16, Y+30 -Prize: X=2728, Y=2904 - -Button A: X+66, Y+13 -Button B: X+54, Y+65 -Prize: X=6060, Y=1846 - -Button A: X+56, Y+86 -Button B: X+88, Y+44 -Prize: X=5840, Y=4138 - -Button A: X+44, Y+80 -Button B: X+46, Y+15 -Prize: X=15084, Y=8430 - -Button A: X+50, Y+18 -Button B: X+13, Y+60 -Prize: X=6386, Y=6944 - -Button A: X+15, Y+63 -Button B: X+67, Y+14 -Prize: X=12210, Y=802 - -Button A: X+22, Y+65 -Button B: X+65, Y+33 -Prize: X=2817, Y=4983 - -Button A: X+23, Y+37 -Button B: X+51, Y+11 -Prize: X=4351, Y=1387 - -Button A: X+58, Y+39 -Button B: X+14, Y+50 -Prize: X=2678, Y=3343 - -Button A: X+13, Y+80 -Button B: X+65, Y+68 -Prize: X=4784, Y=5536 - -Button A: X+47, Y+93 -Button B: X+84, Y+33 -Prize: X=5496, Y=3948 - -Button A: X+51, Y+13 -Button B: X+21, Y+58 -Prize: X=13064, Y=14007 - -Button A: X+38, Y+22 -Button B: X+12, Y+26 -Prize: X=1962, Y=11422 - -Button A: X+51, Y+13 -Button B: X+34, Y+62 -Prize: X=13062, Y=2106 - -Button A: X+31, Y+11 -Button B: X+44, Y+78 -Prize: X=4550, Y=7654 - -Button A: X+97, Y+27 -Button B: X+48, Y+63 -Prize: X=10321, Y=3816 - -Button A: X+59, Y+17 -Button B: X+27, Y+78 -Prize: X=978, Y=18744 - -Button A: X+68, Y+27 -Button B: X+25, Y+64 -Prize: X=2115, Y=1002 - -Button A: X+19, Y+33 -Button B: X+91, Y+19 -Prize: X=7873, Y=2689 - -Button A: X+39, Y+96 -Button B: X+47, Y+16 -Prize: X=5548, Y=8672 - -Button A: X+58, Y+11 -Button B: X+20, Y+80 -Prize: X=4668, Y=4086 - -Button A: X+13, Y+33 -Button B: X+56, Y+14 -Prize: X=3696, Y=1396 - -Button A: X+21, Y+45 -Button B: X+34, Y+13 -Prize: X=15420, Y=12003 - -Button A: X+12, Y+22 -Button B: X+77, Y+27 -Prize: X=2487, Y=1477 - -Button A: X+58, Y+89 -Button B: X+70, Y+19 -Prize: X=5774, Y=1787 - -Button A: X+25, Y+63 -Button B: X+53, Y+13 -Prize: X=13823, Y=19135 - -Button A: X+45, Y+36 -Button B: X+34, Y+99 -Prize: X=6416, Y=9369 - -Button A: X+81, Y+35 -Button B: X+18, Y+50 -Prize: X=4203, Y=5025 - -Button A: X+81, Y+28 -Button B: X+12, Y+58 -Prize: X=2592, Y=5258 - -Button A: X+57, Y+21 -Button B: X+19, Y+67 -Prize: X=19310, Y=9410 - -Button A: X+62, Y+48 -Button B: X+25, Y+84 -Prize: X=1505, Y=2652 - -Button A: X+98, Y+18 -Button B: X+20, Y+26 -Prize: X=9334, Y=1960 - -Button A: X+23, Y+42 -Button B: X+33, Y+13 -Prize: X=11779, Y=4858 - -Button A: X+12, Y+36 -Button B: X+75, Y+39 -Prize: X=4355, Y=8495 - -Button A: X+20, Y+34 -Button B: X+37, Y+18 -Prize: X=10274, Y=2754 - -Button A: X+89, Y+26 -Button B: X+18, Y+44 -Prize: X=4524, Y=1864 - -Button A: X+11, Y+36 -Button B: X+53, Y+21 -Prize: X=18093, Y=17453 - -Button A: X+48, Y+22 -Button B: X+47, Y+74 -Prize: X=8784, Y=8868 - -Button A: X+29, Y+53 -Button B: X+45, Y+16 -Prize: X=12465, Y=10268 - -Button A: X+47, Y+82 -Button B: X+65, Y+19 -Prize: X=4989, Y=3984 - -Button A: X+98, Y+36 -Button B: X+52, Y+96 -Prize: X=1610, Y=1668 - -Button A: X+31, Y+75 -Button B: X+63, Y+26 -Prize: X=1468, Y=2161 - -Button A: X+14, Y+66 -Button B: X+47, Y+14 -Prize: X=5961, Y=12456 - -Button A: X+20, Y+87 -Button B: X+70, Y+44 -Prize: X=1740, Y=3922 - -Button A: X+52, Y+21 -Button B: X+16, Y+43 -Prize: X=3884, Y=7457 - -Button A: X+93, Y+97 -Button B: X+91, Y+20 -Prize: X=2827, Y=851 - -Button A: X+68, Y+15 -Button B: X+23, Y+63 -Prize: X=10422, Y=7157 - -Button A: X+84, Y+68 -Button B: X+22, Y+86 -Prize: X=2696, Y=2728 - -Button A: X+67, Y+34 -Button B: X+40, Y+83 -Prize: X=5256, Y=5865 - -Button A: X+34, Y+49 -Button B: X+97, Y+12 -Prize: X=3687, Y=1352 - -Button A: X+15, Y+90 -Button B: X+89, Y+21 -Prize: X=7432, Y=2013 - -Button A: X+41, Y+13 -Button B: X+12, Y+50 -Prize: X=7134, Y=14486 - -Button A: X+20, Y+28 -Button B: X+32, Y+13 -Prize: X=10032, Y=19165 - -Button A: X+27, Y+77 -Button B: X+69, Y+13 -Prize: X=9554, Y=15260 - -Button A: X+47, Y+23 -Button B: X+32, Y+54 -Prize: X=6409, Y=355 - -Button A: X+56, Y+81 -Button B: X+64, Y+16 -Prize: X=7600, Y=5786 - -Button A: X+46, Y+17 -Button B: X+37, Y+66 -Prize: X=7509, Y=14295 - -Button A: X+18, Y+33 -Button B: X+64, Y+36 -Prize: X=16814, Y=12887 - -Button A: X+22, Y+79 -Button B: X+92, Y+31 -Prize: X=3856, Y=5165 - -Button A: X+43, Y+12 -Button B: X+30, Y+74 -Prize: X=1825, Y=17414 - -Button A: X+74, Y+49 -Button B: X+28, Y+70 -Prize: X=6646, Y=9135 - -Button A: X+85, Y+14 -Button B: X+12, Y+79 -Prize: X=1124, Y=3340 - -Button A: X+60, Y+31 -Button B: X+11, Y+44 -Prize: X=14996, Y=12846 - -Button A: X+62, Y+17 -Button B: X+12, Y+54 -Prize: X=17176, Y=5908 - -Button A: X+73, Y+54 -Button B: X+21, Y+91 -Prize: X=4258, Y=4810 - -Button A: X+32, Y+57 -Button B: X+36, Y+11 -Prize: X=412, Y=2137 - -Button A: X+80, Y+65 -Button B: X+12, Y+63 -Prize: X=2060, Y=5135 - -Button A: X+38, Y+19 -Button B: X+11, Y+30 -Prize: X=2771, Y=8832 - -Button A: X+12, Y+63 -Button B: X+89, Y+94 -Prize: X=2441, Y=3484 - -Button A: X+64, Y+42 -Button B: X+19, Y+44 -Prize: X=10186, Y=11248 - -Button A: X+21, Y+47 -Button B: X+81, Y+42 -Prize: X=6363, Y=4491 - -Button A: X+55, Y+70 -Button B: X+90, Y+13 -Prize: X=7855, Y=6037 - -Button A: X+39, Y+78 -Button B: X+53, Y+19 -Prize: X=19180, Y=483 - -Button A: X+11, Y+77 -Button B: X+74, Y+17 -Prize: X=6027, Y=1608 - -Button A: X+71, Y+34 -Button B: X+20, Y+54 -Prize: X=1962, Y=12986 - -Button A: X+19, Y+50 -Button B: X+57, Y+25 -Prize: X=19082, Y=12150 - -Button A: X+54, Y+19 -Button B: X+13, Y+31 -Prize: X=1754, Y=19209 - -Button A: X+77, Y+15 -Button B: X+17, Y+98 -Prize: X=7856, Y=7117 - -Button A: X+86, Y+35 -Button B: X+18, Y+85 -Prize: X=6694, Y=6375 - -Button A: X+14, Y+62 -Button B: X+63, Y+41 -Prize: X=1330, Y=4938 - -Button A: X+92, Y+51 -Button B: X+38, Y+74 -Prize: X=6240, Y=8435 - -Button A: X+14, Y+20 -Button B: X+86, Y+27 -Prize: X=4106, Y=2319 - -Button A: X+54, Y+17 -Button B: X+36, Y+69 -Prize: X=6488, Y=2762 - -Button A: X+82, Y+96 -Button B: X+82, Y+15 -Prize: X=4592, Y=2460 - -Button A: X+14, Y+65 -Button B: X+71, Y+24 -Prize: X=9947, Y=3249 - -Button A: X+33, Y+54 -Button B: X+23, Y+11 -Prize: X=7043, Y=12653 - -Button A: X+35, Y+12 -Button B: X+16, Y+47 -Prize: X=7136, Y=7027 - -Button A: X+11, Y+26 -Button B: X+39, Y+20 -Prize: X=8298, Y=1518 - -Button A: X+50, Y+12 -Button B: X+13, Y+23 -Prize: X=1816, Y=2066 - -Button A: X+17, Y+38 -Button B: X+63, Y+40 -Prize: X=9007, Y=7834 - -Button A: X+55, Y+19 -Button B: X+11, Y+28 -Prize: X=14257, Y=9219 - -Button A: X+55, Y+18 -Button B: X+11, Y+69 -Prize: X=1343, Y=5285 - -Button A: X+19, Y+53 -Button B: X+74, Y+28 -Prize: X=2560, Y=1920 - -Button A: X+12, Y+59 -Button B: X+39, Y+14 -Prize: X=5354, Y=317 - -Button A: X+72, Y+14 -Button B: X+91, Y+86 -Prize: X=9387, Y=7358 - -Button A: X+18, Y+84 -Button B: X+54, Y+48 -Prize: X=3852, Y=6960 - -Button A: X+12, Y+69 -Button B: X+57, Y+12 -Prize: X=6488, Y=7169 - -Button A: X+15, Y+30 -Button B: X+42, Y+15 -Prize: X=12671, Y=10775 - -Button A: X+25, Y+12 -Button B: X+34, Y+96 -Prize: X=2435, Y=6348 - -Button A: X+29, Y+12 -Button B: X+40, Y+66 -Prize: X=1315, Y=17804 - -Button A: X+69, Y+26 -Button B: X+22, Y+56 -Prize: X=6670, Y=4708 - -Button A: X+19, Y+42 -Button B: X+62, Y+21 -Prize: X=2458, Y=16769 - -Button A: X+45, Y+17 -Button B: X+23, Y+38 -Prize: X=5151, Y=19084 - -Button A: X+17, Y+33 -Button B: X+35, Y+14 -Prize: X=14888, Y=18170 - -Button A: X+74, Y+36 -Button B: X+14, Y+57 -Prize: X=14816, Y=15158 - -Button A: X+36, Y+14 -Button B: X+32, Y+60 -Prize: X=3368, Y=15472 - -Button A: X+85, Y+19 -Button B: X+83, Y+89 -Prize: X=10387, Y=4717 - -Button A: X+55, Y+18 -Button B: X+37, Y+68 -Prize: X=16050, Y=14820 - -Button A: X+52, Y+21 -Button B: X+15, Y+49 -Prize: X=4037, Y=6619 - -Button A: X+75, Y+11 -Button B: X+11, Y+51 -Prize: X=19531, Y=6083 - -Button A: X+90, Y+21 -Button B: X+29, Y+38 -Prize: X=10125, Y=3768 - -Button A: X+33, Y+70 -Button B: X+45, Y+20 -Prize: X=4805, Y=17590 - -Button A: X+11, Y+28 -Button B: X+58, Y+33 -Prize: X=4190, Y=18722 - -Button A: X+95, Y+50 -Button B: X+16, Y+70 -Prize: X=3754, Y=2530 - -Button A: X+88, Y+19 -Button B: X+35, Y+84 -Prize: X=7511, Y=3227 - -Button A: X+48, Y+12 -Button B: X+11, Y+31 -Prize: X=9355, Y=19551 - -Button A: X+71, Y+40 -Button B: X+39, Y+96 -Prize: X=9850, Y=12656 - -Button A: X+18, Y+46 -Button B: X+69, Y+53 -Prize: X=1584, Y=3308 - -Button A: X+65, Y+26 -Button B: X+62, Y+89 -Prize: X=7671, Y=5829 - -Button A: X+92, Y+51 -Button B: X+19, Y+41 -Prize: X=4806, Y=5650 - -Button A: X+26, Y+98 -Button B: X+50, Y+39 -Prize: X=6268, Y=10174 - -Button A: X+16, Y+64 -Button B: X+34, Y+12 -Prize: X=16854, Y=11364 - -Button A: X+20, Y+69 -Button B: X+61, Y+23 -Prize: X=408, Y=12175 - -Button A: X+49, Y+16 -Button B: X+11, Y+45 -Prize: X=17005, Y=1724 - -Button A: X+82, Y+15 -Button B: X+92, Y+80 -Prize: X=15178, Y=8525 - -Button A: X+98, Y+17 -Button B: X+32, Y+95 -Prize: X=4930, Y=5596 - -Button A: X+74, Y+24 -Button B: X+63, Y+72 -Prize: X=4818, Y=1872 - -Button A: X+63, Y+23 -Button B: X+29, Y+74 -Prize: X=4610, Y=2155 - -Button A: X+14, Y+69 -Button B: X+46, Y+16 -Prize: X=5686, Y=14981 - -Button A: X+12, Y+44 -Button B: X+73, Y+32 -Prize: X=1404, Y=2320 - -Button A: X+16, Y+61 -Button B: X+36, Y+16 -Prize: X=19784, Y=1294 - -Button A: X+79, Y+17 -Button B: X+11, Y+57 -Prize: X=18419, Y=19769 - -Button A: X+27, Y+61 -Button B: X+32, Y+16 -Prize: X=11215, Y=8185 - -Button A: X+80, Y+14 -Button B: X+55, Y+94 -Prize: X=6715, Y=3622 - -Button A: X+13, Y+99 -Button B: X+67, Y+60 -Prize: X=1132, Y=5469 - -Button A: X+11, Y+64 -Button B: X+68, Y+52 -Prize: X=1359, Y=3096 - -Button A: X+16, Y+40 -Button B: X+60, Y+34 -Prize: X=4712, Y=2220 - -Button A: X+50, Y+11 -Button B: X+12, Y+60 -Prize: X=15794, Y=4259 - -Button A: X+38, Y+17 -Button B: X+29, Y+54 -Prize: X=1335, Y=6160 - -Button A: X+36, Y+59 -Button B: X+93, Y+32 -Prize: X=6990, Y=6880 - -Button A: X+29, Y+97 -Button B: X+62, Y+55 -Prize: X=3255, Y=5097 - -Button A: X+25, Y+21 -Button B: X+22, Y+73 -Prize: X=3307, Y=5831 - -Button A: X+15, Y+75 -Button B: X+87, Y+82 -Prize: X=2655, Y=6215 - -Button A: X+22, Y+82 -Button B: X+74, Y+39 -Prize: X=4198, Y=6648 - -Button A: X+41, Y+61 -Button B: X+36, Y+11 -Prize: X=7347, Y=17092 - -Button A: X+82, Y+51 -Button B: X+19, Y+60 -Prize: X=1729, Y=1509 - -Button A: X+43, Y+13 -Button B: X+49, Y+76 -Prize: X=8520, Y=7788 - -Button A: X+97, Y+24 -Button B: X+46, Y+51 -Prize: X=1349, Y=1245 - -Button A: X+84, Y+38 -Button B: X+13, Y+51 -Prize: X=10408, Y=4606 - -Button A: X+48, Y+97 -Button B: X+80, Y+28 -Prize: X=9584, Y=8808 - -Button A: X+13, Y+32 -Button B: X+76, Y+43 -Prize: X=16226, Y=18495 - -Button A: X+14, Y+33 -Button B: X+78, Y+54 -Prize: X=1852, Y=2028 - -Button A: X+11, Y+30 -Button B: X+73, Y+37 -Prize: X=7433, Y=18454 - -Button A: X+23, Y+56 -Button B: X+31, Y+16 -Prize: X=12525, Y=3816 - -Button A: X+55, Y+16 -Button B: X+21, Y+68 -Prize: X=16009, Y=16852 - -Button A: X+17, Y+47 -Button B: X+76, Y+37 -Prize: X=6637, Y=12724 - -Button A: X+74, Y+88 -Button B: X+59, Y+12 -Prize: X=9928, Y=6688 - -Button A: X+26, Y+87 -Button B: X+32, Y+21 -Prize: X=1790, Y=3063 - -Button A: X+25, Y+71 -Button B: X+56, Y+19 -Prize: X=1849, Y=5946 - -Button A: X+51, Y+76 -Button B: X+59, Y+28 -Prize: X=7997, Y=6644 - -Button A: X+53, Y+28 -Button B: X+32, Y+62 -Prize: X=5323, Y=6228 - -Button A: X+33, Y+69 -Button B: X+39, Y+18 -Prize: X=575, Y=13307 - -Button A: X+93, Y+15 -Button B: X+56, Y+55 -Prize: X=7024, Y=3845 - -Button A: X+21, Y+53 -Button B: X+68, Y+24 -Prize: X=5268, Y=7924 - -Button A: X+13, Y+51 -Button B: X+78, Y+27 -Prize: X=15733, Y=10982 - -Button A: X+12, Y+79 -Button B: X+50, Y+11 -Prize: X=7094, Y=2854 - -Button A: X+21, Y+83 -Button B: X+90, Y+69 -Prize: X=2607, Y=5143 - -Button A: X+94, Y+16 -Button B: X+25, Y+54 -Prize: X=10271, Y=6474 - -Button A: X+80, Y+14 -Button B: X+12, Y+69 -Prize: X=15888, Y=10392 - -Button A: X+58, Y+37 -Button B: X+15, Y+54 -Prize: X=1422, Y=3573 - -Button A: X+13, Y+28 -Button B: X+59, Y+29 -Prize: X=2235, Y=12810 - -Button A: X+11, Y+32 -Button B: X+58, Y+13 -Prize: X=438, Y=6564 - -Button A: X+14, Y+72 -Button B: X+93, Y+84 -Prize: X=4137, Y=7476 - -Button A: X+63, Y+29 -Button B: X+27, Y+54 -Prize: X=4319, Y=1669 - -Button A: X+86, Y+28 -Button B: X+30, Y+60 -Prize: X=5710, Y=2060 - -Button A: X+15, Y+54 -Button B: X+52, Y+19 -Prize: X=9815, Y=1199 - -Button A: X+24, Y+63 -Button B: X+57, Y+20 -Prize: X=16160, Y=12588 - -Button A: X+19, Y+37 -Button B: X+57, Y+33 -Prize: X=2324, Y=15332 - -Button A: X+25, Y+14 -Button B: X+31, Y+56 -Prize: X=7136, Y=17336 - -Button A: X+66, Y+29 -Button B: X+25, Y+57 -Prize: X=13681, Y=16936 - -Button A: X+36, Y+93 -Button B: X+84, Y+56 -Prize: X=6720, Y=11242 - -Button A: X+92, Y+41 -Button B: X+18, Y+96 -Prize: X=1396, Y=1150 - -Button A: X+12, Y+38 -Button B: X+63, Y+28 -Prize: X=19403, Y=12776 - -Button A: X+72, Y+28 -Button B: X+13, Y+37 -Prize: X=5137, Y=3113 - -Button A: X+90, Y+72 -Button B: X+91, Y+13 -Prize: X=5795, Y=2543 - -Button A: X+28, Y+13 -Button B: X+31, Y+49 -Prize: X=16418, Y=9287 - -Button A: X+17, Y+33 -Button B: X+64, Y+32 -Prize: X=11422, Y=2206 - -Button A: X+71, Y+22 -Button B: X+16, Y+45 -Prize: X=2918, Y=7791 - -Button A: X+15, Y+36 -Button B: X+55, Y+35 -Prize: X=7930, Y=7704 - -Button A: X+57, Y+65 -Button B: X+95, Y+17 -Prize: X=11818, Y=4800 - -Button A: X+22, Y+46 -Button B: X+33, Y+21 -Prize: X=1232, Y=1040 - -Button A: X+34, Y+98 -Button B: X+85, Y+39 -Prize: X=7582, Y=9494 - -Button A: X+63, Y+15 -Button B: X+15, Y+47 -Prize: X=13439, Y=17391 - -Button A: X+20, Y+41 -Button B: X+38, Y+23 -Prize: X=2052, Y=10086 - -Button A: X+14, Y+66 -Button B: X+84, Y+28 -Prize: X=16902, Y=10730 - -Button A: X+27, Y+12 -Button B: X+17, Y+43 -Prize: X=9367, Y=12201 - -Button A: X+30, Y+49 -Button B: X+40, Y+20 -Prize: X=8430, Y=10049 - -Button A: X+82, Y+22 -Button B: X+46, Y+97 -Prize: X=3798, Y=4236 - -Button A: X+56, Y+55 -Button B: X+94, Y+13 -Prize: X=6522, Y=5533 - -Button A: X+39, Y+41 -Button B: X+59, Y+16 -Prize: X=4261, Y=3559 - -Button A: X+59, Y+18 -Button B: X+11, Y+63 -Prize: X=15316, Y=10169 - -Button A: X+59, Y+55 -Button B: X+20, Y+98 -Prize: X=375, Y=667 - -Button A: X+11, Y+93 -Button B: X+64, Y+67 -Prize: X=6699, Y=14917 - -Button A: X+13, Y+46 -Button B: X+48, Y+15 -Prize: X=1661, Y=1232 - -Button A: X+36, Y+99 -Button B: X+85, Y+42 -Prize: X=2224, Y=3048 - -Button A: X+11, Y+75 -Button B: X+28, Y+22 -Prize: X=2614, Y=6168 - -Button A: X+21, Y+97 -Button B: X+94, Y+81 -Prize: X=7763, Y=8662 - -Button A: X+34, Y+13 -Button B: X+26, Y+42 -Prize: X=8612, Y=15869 - -Button A: X+39, Y+71 -Button B: X+31, Y+13 -Prize: X=19737, Y=5345 - -Button A: X+21, Y+60 -Button B: X+75, Y+30 -Prize: X=10448, Y=18140 - -Button A: X+24, Y+49 -Button B: X+47, Y+17 -Prize: X=7371, Y=12446 - -Button A: X+56, Y+86 -Button B: X+94, Y+41 -Prize: X=3570, Y=4759 - -Button A: X+14, Y+50 -Button B: X+54, Y+28 -Prize: X=19392, Y=1330 - -Button A: X+20, Y+67 -Button B: X+52, Y+13 -Prize: X=1000, Y=3692 - -Button A: X+14, Y+26 -Button B: X+50, Y+21 -Prize: X=7114, Y=9374 - -Button A: X+19, Y+55 -Button B: X+39, Y+16 -Prize: X=15710, Y=8361 - -Button A: X+56, Y+14 -Button B: X+63, Y+96 -Prize: X=4851, Y=3540 - -Button A: X+33, Y+67 -Button B: X+54, Y+24 -Prize: X=5447, Y=1189 - -Button A: X+39, Y+84 -Button B: X+89, Y+24 -Prize: X=10312, Y=8292 - -Button A: X+51, Y+19 -Button B: X+53, Y+74 -Prize: X=4001, Y=3498 - -Button A: X+67, Y+43 -Button B: X+11, Y+36 -Prize: X=4764, Y=9202 - -Button A: X+21, Y+62 -Button B: X+54, Y+22 -Prize: X=4434, Y=2234 - -Button A: X+89, Y+87 -Button B: X+24, Y+88 -Prize: X=6501, Y=7323 - -Button A: X+54, Y+29 -Button B: X+28, Y+51 -Prize: X=13224, Y=17258 - -Button A: X+62, Y+45 -Button B: X+39, Y+94 -Prize: X=4796, Y=9262 - -Button A: X+45, Y+23 -Button B: X+12, Y+52 -Prize: X=11084, Y=11636 - -Button A: X+22, Y+37 -Button B: X+48, Y+25 -Prize: X=5514, Y=11182 - -Button A: X+15, Y+38 -Button B: X+75, Y+39 -Prize: X=16520, Y=17711 - -Button A: X+78, Y+11 -Button B: X+49, Y+92 -Prize: X=9365, Y=6341 - -Button A: X+98, Y+14 -Button B: X+13, Y+64 -Prize: X=5741, Y=2498 - -Button A: X+13, Y+63 -Button B: X+61, Y+20 -Prize: X=13770, Y=14824 - -Button A: X+21, Y+38 -Button B: X+62, Y+37 -Prize: X=17864, Y=15513 - -Button A: X+24, Y+21 -Button B: X+15, Y+62 -Prize: X=1476, Y=4224 - -Button A: X+16, Y+75 -Button B: X+52, Y+12 -Prize: X=468, Y=8849 - -Button A: X+14, Y+41 -Button B: X+46, Y+22 -Prize: X=2040, Y=1353 - -Button A: X+49, Y+16 -Button B: X+29, Y+54 -Prize: X=10446, Y=18614 - -Button A: X+11, Y+69 -Button B: X+75, Y+18 -Prize: X=10963, Y=2327 - -Button A: X+37, Y+64 -Button B: X+47, Y+20 -Prize: X=18201, Y=3324 - -Button A: X+99, Y+14 -Button B: X+87, Y+75 -Prize: X=14862, Y=6177 - -Button A: X+12, Y+58 -Button B: X+82, Y+33 -Prize: X=7438, Y=6507 - -Button A: X+72, Y+13 -Button B: X+13, Y+79 -Prize: X=14160, Y=11952 - -Button A: X+24, Y+55 -Button B: X+73, Y+39 -Prize: X=12196, Y=4761 - -Button A: X+47, Y+28 -Button B: X+21, Y+52 -Prize: X=969, Y=9732 - -Button A: X+57, Y+29 -Button B: X+15, Y+30 -Prize: X=17750, Y=13700 - -Button A: X+40, Y+23 -Button B: X+13, Y+26 -Prize: X=13248, Y=14881 - -Button A: X+68, Y+13 -Button B: X+85, Y+90 -Prize: X=9707, Y=6207 - -Button A: X+47, Y+23 -Button B: X+19, Y+57 -Prize: X=2226, Y=13254 \ No newline at end of file diff --git a/2024/gareth/day14/day14.go b/2024/gareth/day14/day14.go deleted file mode 100644 index d16f089..0000000 --- a/2024/gareth/day14/day14.go +++ /dev/null @@ -1,172 +0,0 @@ -package day14 - -import ( - "fmt" - "strconv" - "strings" -) - -type Robot struct { - px, py int // position - vx, vy int // velocity -} - -func Part1(input string) int { - // Parse the input - lines := strings.Split(input, "\n") - var robots []Robot - for _, line := range lines { - robot := ParseRobot(line) - robots = append(robots, robot) - } - - // Define grid size - gridWidth := 101 - gridHeight := 103 - - // Update robot positions for 100 seconds - for i := 0; i < 100; i++ { - for j := range robots { - robots[j].UpdatePosition(gridWidth, gridHeight) - } - } - - // Count the robots in each quadrant - q1, q2, q3, q4 := CountRobotsInQuadrants(robots, gridWidth, gridHeight) - fmt.Printf("Quadrant counts: Q1=%d, Q2=%d, Q3=%d, Q4=%d\n", q1, q2, q3, q4) - - // Calculate the safety factor - safetyFactor := CalculateSafetyFactor(q1, q2, q3, q4) - fmt.Printf("Safety Factor: %d\n", safetyFactor) - return safetyFactor -} - -func Part2(input string) int { - // Parse the input - lines := strings.Split(input, "\n") - var robots []Robot - for _, line := range lines { - robot := ParseRobot(line) - robots = append(robots, robot) - } - - // Define grid size - gridWidth := 101 - gridHeight := 103 - - // Update robot positions for 100 seconds - for i := 0; i < 6285; i++ { - for j := range robots { - robots[j].UpdatePosition(gridWidth, gridHeight) - } - } - - DisplayGrid(robots, gridWidth, gridHeight) - return 2 -} - -// ParseRobot takes a line of input and converts it to a Robot struct -func ParseRobot(line string) Robot { - parts := strings.Split(line, " ") - posParts := strings.Split(parts[0][2:], ",") // Extract p=x,y and split - velParts := strings.Split(parts[1][2:], ",") // Extract v=x,y and split - - px, _ := strconv.Atoi(posParts[0]) - py, _ := strconv.Atoi(posParts[1]) - vx, _ := strconv.Atoi(velParts[0]) - vy, _ := strconv.Atoi(velParts[1]) - - return Robot{px, py, vx, vy} -} - -// UpdatePosition updates the position of a robot, considering the wrap-around -func (r *Robot) UpdatePosition(gridWidth, gridHeight int) { - r.px = (r.px + r.vx + gridWidth) % gridWidth - r.py = (r.py + r.vy + gridHeight) % gridHeight -} - -// CountRobotsInQuadrants counts the number of robots in each of the four quadrants -func CountRobotsInQuadrants(robots []Robot, width, height int) (int, int, int, int) { - midX := width / 2 - midY := height / 2 - - q1, q2, q3, q4 := 0, 0, 0, 0 - - for _, r := range robots { - if r.px == midX || r.py == midY { - // Skip robots on the middle line - continue - } - if r.px < midX && r.py < midY { - q1++ // Top-left quadrant - } else if r.px > midX && r.py < midY { - q2++ // Top-right quadrant - } else if r.px < midX && r.py > midY { - q3++ // Bottom-left quadrant - } else if r.px > midX && r.py > midY { - q4++ // Bottom-right quadrant - } - } - - return q1, q2, q3, q4 -} - -// CalculateSafetyFactor multiplies the number of robots in each quadrant -func CalculateSafetyFactor(q1, q2, q3, q4 int) int { - return q1 * q2 * q3 * q4 -} - -// DisplayGrid displays the current state of the grid -func DisplayGrid(robots []Robot, width, height int) { - grid := make([][]rune, height) - for i := range grid { - grid[i] = make([]rune, width) - for j := range grid[i] { - grid[i][j] = '.' - } - } - for _, r := range robots { - grid[r.py][r.px] = '#' - } - for _, row := range grid { - fmt.Println(string(row)) - } -} - -// FindEasterEgg determines the fewest number of seconds that must elapse for the robots to display the Easter egg -func FindEasterEgg(robots []Robot, width, height int) int { - smallestArea := width * height - bestTime := 0 - for t := 6285; t < 6286; t++ { // Large upper limit to search - // Update robot positions - for i := range robots { - robots[i].UpdatePosition(width, height) - } - // Calculate the bounding box of all robot positions - minX, minY := width, height - maxX, maxY := 0, 0 - for _, r := range robots { - if r.px < minX { - minX = r.px - } - if r.px > maxX { - maxX = r.px - } - if r.py < minY { - minY = r.py - } - if r.py > maxY { - maxY = r.py - } - } - - area := (maxX - minX + 1) * (maxY - minY + 1) - if area < smallestArea { - smallestArea = area - bestTime = t + 1 - fmt.Printf("Time: %d\n", bestTime) - DisplayGrid(robots, width, height) - } - } - return bestTime -} diff --git a/2024/gareth/day14/day14_test.go b/2024/gareth/day14/day14_test.go deleted file mode 100644 index ebb51a5..0000000 --- a/2024/gareth/day14/day14_test.go +++ /dev/null @@ -1,23 +0,0 @@ -package day14 - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestPart1(t *testing.T) { - r := Part1(`p=0,4 v=3,-3 -p=6,3 v=-1,-3 -p=10,3 v=-1,2 -p=2,0 v=2,-1 -p=0,0 v=1,3 -p=3,0 v=-2,-2 -p=7,6 v=-1,-3 -p=3,0 v=-1,-2 -p=9,3 v=2,3 -p=7,3 v=-1,2 -p=2,4 v=2,-3 -p=9,5 v=-3,-3`) - assert.Equal(t, 12, r) -} diff --git a/2024/gareth/day14/input.txt b/2024/gareth/day14/input.txt deleted file mode 100644 index e1a6d0a..0000000 --- a/2024/gareth/day14/input.txt +++ /dev/null @@ -1,500 +0,0 @@ -p=38,76 v=-61,88 -p=28,22 v=-43,-40 -p=76,78 v=-98,87 -p=39,56 v=10,96 -p=38,0 v=79,-15 -p=6,44 v=-88,53 -p=40,80 v=-83,31 -p=11,2 v=28,-31 -p=41,91 v=-86,-48 -p=8,55 v=-81,95 -p=77,19 v=3,-90 -p=94,73 v=-59,42 -p=51,53 v=35,48 -p=12,52 v=72,6 -p=62,61 v=96,47 -p=78,62 v=47,-57 -p=39,54 v=53,50 -p=1,43 v=-64,-46 -p=9,21 v=28,-36 -p=92,79 v=67,-47 -p=6,15 v=-58,-48 -p=54,67 v=99,-38 -p=96,99 v=-55,30 -p=90,44 v=-10,-8 -p=23,84 v=20,77 -p=5,84 v=28,88 -p=55,20 v=-31,-36 -p=84,43 v=-37,-41 -p=12,75 v=-38,30 -p=39,2 v=-12,-29 -p=74,14 v=56,-81 -p=63,53 v=22,-53 -p=51,28 v=9,-90 -p=53,72 v=48,-61 -p=33,42 v=-43,23 -p=75,18 v=-89,-37 -p=38,83 v=27,38 -p=69,31 v=61,80 -p=73,3 v=-45,74 -p=39,29 v=92,17 -p=78,45 v=-23,-47 -p=48,59 v=-57,38 -p=2,41 v=-71,-93 -p=30,13 v=36,-82 -p=37,57 v=25,13 -p=51,73 v=56,-98 -p=76,78 v=38,91 -p=56,49 v=22,55 -p=34,47 v=10,84 -p=83,93 v=81,-16 -p=14,70 v=71,-50 -p=97,74 v=-4,70 -p=33,8 v=93,-35 -p=39,70 v=-2,19 -p=94,63 v=20,44 -p=86,4 v=-33,19 -p=17,67 v=26,44 -p=39,2 v=-70,-25 -p=47,56 v=-79,-55 -p=5,98 v=86,-75 -p=53,21 v=79,-89 -p=53,85 v=61,73 -p=46,32 v=66,54 -p=30,75 v=49,-73 -p=44,81 v=-61,-69 -p=82,66 v=-72,-6 -p=89,76 v=-13,98 -p=57,87 v=30,36 -p=12,41 v=59,-40 -p=36,56 v=10,-61 -p=60,80 v=48,39 -p=50,75 v=-44,42 -p=66,56 v=-93,-1 -p=57,96 v=83,-79 -p=98,88 v=-15,-16 -p=0,63 v=59,44 -p=90,27 v=29,-40 -p=21,60 v=-86,2 -p=85,13 v=11,61 -p=92,77 v=24,-34 -p=16,24 v=80,4 -p=47,8 v=-79,-49 -p=1,28 v=-82,-48 -p=80,55 v=6,-72 -p=60,94 v=-67,-15 -p=83,90 v=-98,78 -p=3,75 v=46,-66 -p=93,40 v=15,11 -p=52,37 v=48,7 -p=23,4 v=-47,25 -p=46,43 v=57,-98 -p=23,12 v=-98,-36 -p=11,42 v=-83,50 -p=80,33 v=25,54 -p=59,95 v=-1,36 -p=55,67 v=-44,-60 -p=90,80 v=83,-39 -p=57,61 v=-1,96 -p=51,79 v=31,39 -p=28,89 v=85,35 -p=12,98 v=28,-80 -p=25,61 v=-95,-50 -p=77,84 v=-37,78 -p=50,80 v=66,89 -p=93,32 v=-15,-45 -p=30,4 v=-96,-29 -p=81,95 v=14,-66 -p=23,3 v=42,-16 -p=33,69 v=-96,-10 -p=28,23 v=-43,68 -p=77,25 v=-45,-41 -p=27,96 v=-69,-32 -p=41,15 v=-53,-35 -p=66,81 v=-22,5 -p=5,15 v=13,-95 -p=88,1 v=-59,-26 -p=48,41 v=16,-19 -p=88,75 v=33,46 -p=21,9 v=-64,-86 -p=36,4 v=-16,-95 -p=68,22 v=-5,65 -p=8,43 v=-34,46 -p=71,68 v=-49,-59 -p=37,92 v=-48,-18 -p=59,43 v=-21,-10 -p=69,31 v=30,58 -p=90,77 v=46,-74 -p=42,42 v=-76,20 -p=58,34 v=78,55 -p=18,10 v=33,2 -p=23,92 v=45,-69 -p=23,45 v=-32,27 -p=63,50 v=39,-96 -p=8,72 v=-34,85 -p=22,102 v=-69,26 -p=73,14 v=-45,-38 -p=65,54 v=-51,68 -p=99,29 v=-16,67 -p=29,60 v=15,-19 -p=85,76 v=-54,80 -p=21,23 v=-3,-47 -p=9,37 v=94,-44 -p=99,77 v=48,80 -p=48,47 v=18,56 -p=26,61 v=36,-57 -p=80,58 v=56,90 -p=37,6 v=53,-90 -p=47,15 v=53,60 -p=4,79 v=70,52 -p=35,8 v=31,12 -p=18,8 v=25,-30 -p=80,38 v=33,45 -p=23,26 v=-69,61 -p=10,35 v=-78,-96 -p=53,17 v=48,-34 -p=24,45 v=72,-2 -p=65,75 v=-1,-38 -p=5,72 v=-49,39 -p=63,87 v=-27,-16 -p=0,46 v=-34,73 -p=14,46 v=55,-15 -p=28,70 v=45,92 -p=29,30 v=89,10 -p=98,31 v=-46,-89 -p=1,85 v=-77,82 -p=30,79 v=-43,28 -p=29,70 v=-81,65 -p=51,97 v=13,-25 -p=76,19 v=-23,18 -p=36,83 v=-17,91 -p=52,34 v=-39,-98 -p=35,46 v=-43,55 -p=97,13 v=-99,-26 -p=40,26 v=27,13 -p=18,38 v=89,57 -p=45,57 v=-79,-52 -p=86,76 v=-54,-64 -p=12,38 v=28,55 -p=6,56 v=-86,97 -p=85,100 v=-41,-22 -p=4,34 v=28,-95 -p=89,33 v=-4,-73 -p=82,20 v=-33,-15 -p=98,5 v=31,43 -p=85,81 v=73,88 -p=13,42 v=-90,-49 -p=93,60 v=-91,-64 -p=56,7 v=-5,64 -p=9,5 v=45,76 -p=61,4 v=74,86 -p=23,53 v=-7,3 -p=89,21 v=-38,-74 -p=13,44 v=-86,10 -p=96,62 v=-11,96 -p=5,98 v=-22,3 -p=26,26 v=-73,-93 -p=52,95 v=-5,42 -p=62,50 v=-57,-7 -p=11,2 v=41,-77 -p=23,73 v=-2,-97 -p=34,77 v=-47,-71 -p=91,58 v=99,43 -p=41,74 v=-53,42 -p=75,102 v=55,-81 -p=89,95 v=30,8 -p=76,28 v=-80,12 -p=82,27 v=-43,77 -p=62,63 v=-97,21 -p=94,73 v=-58,14 -p=13,35 v=-47,-46 -p=56,0 v=61,25 -p=94,39 v=11,8 -p=96,53 v=77,-53 -p=23,78 v=-43,-7 -p=24,51 v=-74,-86 -p=77,33 v=60,8 -p=84,71 v=-76,19 -p=78,96 v=82,3 -p=61,92 v=-58,-30 -p=9,75 v=94,-34 -p=89,13 v=7,-26 -p=16,67 v=-25,96 -p=95,43 v=-25,-54 -p=39,62 v=18,-40 -p=41,36 v=17,-65 -p=2,42 v=86,-10 -p=29,54 v=55,-2 -p=51,74 v=-44,92 -p=75,40 v=-36,-96 -p=60,15 v=-93,-84 -p=44,33 v=44,8 -p=88,51 v=85,-94 -p=26,60 v=43,62 -p=94,22 v=-81,-98 -p=4,50 v=-94,-96 -p=87,47 v=-55,3 -p=15,80 v=33,-14 -p=4,48 v=-24,-48 -p=57,36 v=-18,-98 -p=87,12 v=76,63 -p=53,17 v=-91,-81 -p=17,96 v=53,6 -p=91,40 v=95,-46 -p=23,28 v=-55,55 -p=81,7 v=-54,16 -p=62,102 v=-97,-77 -p=42,31 v=80,-41 -p=99,53 v=-72,57 -p=17,29 v=98,58 -p=24,57 v=84,-48 -p=98,101 v=-33,-30 -p=77,82 v=-36,-25 -p=44,8 v=83,18 -p=27,35 v=-27,16 -p=95,58 v=-29,52 -p=87,40 v=60,-91 -p=66,1 v=17,24 -p=17,11 v=63,21 -p=67,77 v=-23,-11 -p=91,30 v=-59,64 -p=22,34 v=7,84 -p=55,90 v=48,29 -p=45,45 v=31,50 -p=12,34 v=65,-86 -p=40,48 v=18,-1 -p=39,42 v=75,11 -p=28,27 v=63,-49 -p=93,44 v=-81,3 -p=8,78 v=-51,-15 -p=6,37 v=-51,-42 -p=73,89 v=-45,23 -p=2,80 v=-23,50 -p=93,37 v=55,-44 -p=16,52 v=-54,35 -p=15,17 v=-33,74 -p=84,37 v=-6,-48 -p=13,47 v=50,-48 -p=88,34 v=-79,-39 -p=16,68 v=50,94 -p=20,78 v=-99,29 -p=100,20 v=77,64 -p=79,2 v=-91,30 -p=52,0 v=-95,-86 -p=4,84 v=79,35 -p=13,74 v=19,-66 -p=57,55 v=-9,-63 -p=21,30 v=19,-94 -p=50,37 v=-66,4 -p=9,56 v=94,95 -p=91,59 v=55,-65 -p=77,15 v=34,-33 -p=5,100 v=81,-26 -p=26,96 v=-34,83 -p=36,64 v=-44,94 -p=37,65 v=-70,51 -p=74,6 v=25,-93 -p=33,78 v=-17,-48 -p=0,33 v=-6,-39 -p=3,55 v=-11,96 -p=32,19 v=-8,-33 -p=60,53 v=-5,-55 -p=75,62 v=56,45 -p=74,71 v=12,-66 -p=50,74 v=-53,91 -p=24,90 v=-19,-57 -p=58,53 v=31,5 -p=13,95 v=-33,20 -p=30,98 v=41,-70 -p=54,78 v=71,-43 -p=78,73 v=26,53 -p=66,30 v=-49,60 -p=81,87 v=-24,-15 -p=28,27 v=-31,11 -p=75,18 v=-89,10 -p=76,82 v=-89,-66 -p=44,65 v=-17,98 -p=17,42 v=-7,-5 -p=75,92 v=-54,32 -p=95,10 v=-28,-76 -p=20,36 v=-22,-62 -p=100,0 v=11,21 -p=37,39 v=5,-46 -p=80,50 v=-63,7 -p=77,28 v=-98,2 -p=61,41 v=-1,-40 -p=88,78 v=95,-17 -p=83,1 v=47,-30 -p=47,67 v=-30,-9 -p=14,81 v=-38,82 -p=40,97 v=-31,76 -p=76,27 v=37,-70 -p=25,73 v=80,35 -p=88,84 v=-33,77 -p=60,71 v=83,35 -p=14,93 v=-3,-25 -p=40,45 v=-35,4 -p=34,35 v=15,19 -p=87,100 v=90,-66 -p=20,90 v=-42,-68 -p=90,44 v=50,-52 -p=43,77 v=31,89 -p=99,81 v=33,-12 -p=28,35 v=58,-37 -p=37,52 v=57,6 -p=48,65 v=-66,23 -p=63,21 v=39,-35 -p=91,77 v=-15,-70 -p=27,28 v=93,-94 -p=18,61 v=-99,38 -p=56,36 v=-98,81 -p=90,75 v=-72,-67 -p=86,21 v=-13,-46 -p=20,88 v=89,-74 -p=17,41 v=-82,-98 -p=28,65 v=45,-72 -p=85,15 v=35,41 -p=39,43 v=-2,-36 -p=93,72 v=-94,91 -p=90,73 v=-64,77 -p=83,43 v=-94,-99 -p=50,59 v=-49,51 -p=58,25 v=13,-36 -p=25,102 v=-44,-54 -p=100,86 v=16,-23 -p=45,42 v=21,-90 -p=9,29 v=-13,18 -p=24,41 v=1,-47 -p=69,33 v=-58,55 -p=80,52 v=52,-2 -p=82,77 v=82,-11 -p=86,78 v=-41,-69 -p=89,58 v=69,-13 -p=12,91 v=-55,-65 -p=69,40 v=-93,59 -p=8,26 v=2,19 -p=21,47 v=19,3 -p=38,20 v=25,-83 -p=20,99 v=54,31 -p=20,74 v=-14,-30 -p=51,83 v=-40,24 -p=61,30 v=-27,-94 -p=84,19 v=-28,69 -p=28,33 v=-65,3 -p=58,91 v=-93,-18 -p=33,78 v=22,92 -p=86,53 v=63,-43 -p=53,79 v=-26,-42 -p=83,16 v=94,56 -p=21,0 v=-64,-35 -p=48,80 v=-97,79 -p=62,18 v=29,71 -p=17,13 v=-69,-36 -p=1,93 v=19,75 -p=7,75 v=41,93 -p=65,61 v=-45,65 -p=56,71 v=92,-63 -p=71,102 v=-53,-21 -p=64,79 v=96,49 -p=40,13 v=-74,-84 -p=28,71 v=93,91 -p=43,68 v=-39,-6 -p=10,40 v=63,55 -p=73,0 v=-97,-82 -p=26,38 v=85,-27 -p=27,94 v=36,-79 -p=1,99 v=-82,-30 -p=66,96 v=-23,31 -p=78,21 v=96,16 -p=10,93 v=-51,-76 -p=76,87 v=78,80 -p=13,20 v=-38,68 -p=31,42 v=-43,5 -p=56,10 v=-53,-33 -p=76,61 v=34,-4 -p=73,2 v=-36,74 -p=93,83 v=15,-19 -p=76,50 v=20,-51 -p=27,53 v=36,-51 -p=93,97 v=50,72 -p=59,22 v=87,21 -p=95,22 v=-29,66 -p=56,35 v=79,10 -p=60,38 v=17,-94 -p=67,41 v=-5,6 -p=97,71 v=-73,35 -p=26,10 v=-73,74 -p=74,71 v=5,64 -p=36,91 v=84,-17 -p=38,91 v=67,33 -p=19,64 v=41,-9 -p=89,15 v=-59,66 -p=5,94 v=94,-27 -p=92,21 v=7,-87 -p=87,64 v=-28,-5 -p=22,6 v=-95,25 -p=59,42 v=-51,-7 -p=50,95 v=88,29 -p=59,91 v=73,-21 -p=52,42 v=-75,56 -p=10,39 v=-30,7 -p=88,79 v=29,-62 -p=31,89 v=-21,-82 -p=43,60 v=4,52 -p=2,76 v=-68,-15 -p=13,71 v=-38,97 -p=93,38 v=1,-95 -p=53,99 v=10,16 -p=94,72 v=-98,30 -p=1,3 v=37,-82 -p=68,78 v=55,18 -p=1,78 v=42,-7 -p=80,84 v=52,-26 -p=75,46 v=-87,-20 -p=71,27 v=95,-39 -p=90,18 v=73,11 -p=99,3 v=62,52 -p=39,88 v=-80,-93 -p=85,32 v=69,-40 -p=72,23 v=-28,-75 -p=22,59 v=98,-7 -p=69,76 v=12,93 -p=56,59 v=30,50 -p=80,92 v=-49,-80 -p=4,40 v=-77,-50 -p=90,60 v=40,-28 -p=6,79 v=9,56 -p=63,47 v=57,-59 -p=33,62 v=22,37 -p=74,27 v=78,70 -p=26,101 v=-43,-49 -p=1,24 v=-29,-38 -p=73,90 v=56,79 -p=5,90 v=-20,-75 -p=16,35 v=94,8 -p=96,93 v=4,58 -p=61,43 v=4,4 -p=13,68 v=76,94 -p=5,29 v=86,-95 -p=32,81 v=39,-85 -p=94,42 v=-37,55 -p=80,20 v=60,22 -p=43,94 v=57,-19 -p=93,4 v=51,-26 -p=12,4 v=62,-58 -p=87,74 v=-98,-64 -p=81,41 v=-26,69 -p=30,54 v=-30,-13 -p=73,4 v=21,-30 -p=68,35 v=-49,-44 -p=47,2 v=19,-70 -p=92,100 v=33,79 -p=81,11 v=73,-83 -p=46,75 v=-62,-69 -p=48,56 v=-13,-56 -p=7,84 v=15,30 -p=92,10 v=28,69 -p=15,31 v=-87,61 -p=95,0 v=33,79 -p=3,61 v=-37,-50 -p=73,95 v=96,20 \ No newline at end of file diff --git a/2024/gareth/day18/day18.go b/2024/gareth/day18/day18.go deleted file mode 100644 index ed76eb7..0000000 --- a/2024/gareth/day18/day18.go +++ /dev/null @@ -1,156 +0,0 @@ -package day18 - -import ( - "container/heap" - "strconv" - "strings" -) - -type Point struct { - x, y int -} - -// Item represents a node in the priority queue. -type Item struct { - point Point - distance int - index int -} - -func Part1(input string) int { - grid := parseInput(input, 1024) - _, distance := dijkstra(grid) - return distance -} - -func Part2(input string) int { - lines := strings.Split(strings.TrimSpace(input), "\n") - numLines := len(lines) - for i := 1; i <= numLines; i++ { - grid := parseInput(input, i) - _, distance := dijkstra(grid) - if distance == -1 { - println(lines[i-1]) - return 2 - } - } - return -1 -} - -func parseInput(input string, upToLine int) [][]rune { - grid := make([][]rune, 71) - for i := range grid { - grid[i] = make([]rune, 71) - for j := range grid[i] { - grid[i][j] = '.' - } - } - - lines := strings.Split(strings.TrimSpace(input), "\n") - - for index, line := range lines { - if index == upToLine { - break - } - cords := strings.Split(strings.TrimSpace(line), ",") - x, _ := strconv.Atoi(cords[0]) - y, _ := strconv.Atoi(cords[1]) - grid[x][y] = '#' - } - return grid -} - -// PriorityQueue implements a priority queue for Dijkstra's algorithm. -type PriorityQueue []*Item - -func (pq PriorityQueue) Len() int { return len(pq) } -func (pq PriorityQueue) Less(i, j int) bool { - return pq[i].distance < pq[j].distance -} -func (pq PriorityQueue) Swap(i, j int) { - pq[i], pq[j] = pq[j], pq[i] - pq[i].index = i - pq[j].index = j -} - -func (pq *PriorityQueue) Push(x interface{}) { - n := len(*pq) - item := x.(*Item) - item.index = n - *pq = append(*pq, item) -} - -func (pq *PriorityQueue) Pop() interface{} { - old := *pq - n := len(old) - item := old[n-1] - item.index = -1 - *pq = old[0 : n-1] - return item -} - -func isValid(grid [][]rune, x, y int) bool { - return x >= 0 && x < len(grid) && y >= 0 && y < len(grid[0]) && grid[x][y] == '.' -} - -func dijkstra(grid [][]rune) ([][]rune, int) { - directions := []Point{{0, 1}, {1, 0}, {0, -1}, {-1, 0}} - rows, cols := len(grid), len(grid[0]) - - // Validate start and end points - if grid[0][0] != '.' || grid[rows-1][cols-1] != '.' { - return grid, -1 // No path if start or end is not valid - } - - dist := make([][]int, rows) - for i := range dist { - dist[i] = make([]int, cols) - for j := range dist[i] { - dist[i][j] = 1 << 30 - } - } - - pq := &PriorityQueue{} - heap.Init(pq) - heap.Push(pq, &Item{point: Point{0, 0}, distance: 0}) - dist[0][0] = 0 - - path := make([][]Point, rows) - for i := range path { - path[i] = make([]Point, cols) - } - - for pq.Len() > 0 { - item := heap.Pop(pq).(*Item) - x, y := item.point.x, item.point.y - if x == rows-1 && y == cols-1 { - break - } - for _, dir := range directions { - nx, ny := x+dir.x, y+dir.y - if isValid(grid, nx, ny) { - newDist := dist[x][y] + 1 - if newDist < dist[nx][ny] { - dist[nx][ny] = newDist - heap.Push(pq, &Item{point: Point{nx, ny}, distance: newDist}) - path[nx][ny] = Point{x, y} - } - } - } - } - - // Check if no path exists - if dist[rows-1][cols-1] == 1<<30 { - return grid, -1 // No path found - } - - // Reconstruct the path - x, y := rows-1, cols-1 - for x != 0 || y != 0 { - grid[x][y] = 'O' - x, y = path[x][y].x, path[x][y].y - } - grid[0][0] = 'O' - - return grid, dist[rows-1][cols-1] -} diff --git a/2024/gareth/day18/day18_test.go b/2024/gareth/day18/day18_test.go deleted file mode 100644 index 7a52d3b..0000000 --- a/2024/gareth/day18/day18_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package day18 - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestPart1(t *testing.T) { - r := Part1(`5,4 -4,2 -4,5 -3,0 -2,1 -6,3 -2,4 -1,5 -0,6 -3,3 -2,6 -5,1 -1,2 -5,5 -2,5 -6,5 -1,4 -0,4 -6,4 -1,1 -6,1 -1,0 -0,5 -1,6 -2,0`) - assert.Equal(t, 22, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`5,4 -4,2 -4,5 -3,0 -2,1 -6,3 -2,4 -1,5 -0,6 -3,3 -2,6 -5,1 -1,2 -5,5 -2,5 -6,5 -1,4 -0,4 -6,4 -1,1 -6,1 -1,0 -0,5 -1,6 -2,0`) - assert.Equal(t, 0, r) -} diff --git a/2024/gareth/day18/input.txt b/2024/gareth/day18/input.txt deleted file mode 100644 index 6265c77..0000000 --- a/2024/gareth/day18/input.txt +++ /dev/null @@ -1,3450 +0,0 @@ -44,51 -65,43 -65,40 -35,54 -66,67 -41,59 -55,55 -23,2 -45,57 -69,36 -34,53 -37,2 -38,1 -37,55 -41,67 -58,55 -3,26 -9,14 -5,28 -54,51 -56,69 -48,47 -46,53 -64,29 -61,56 -69,64 -45,7 -69,38 -39,54 -50,47 -27,14 -33,1 -67,50 -9,19 -56,57 -64,53 -15,21 -63,50 -3,42 -63,65 -43,52 -9,26 -59,31 -1,29 -30,59 -59,53 -13,0 -65,35 -5,24 -19,35 -47,9 -4,21 -24,11 -53,66 -35,2 -26,9 -56,51 -70,29 -69,56 -53,55 -69,67 -58,67 -8,9 -37,62 -55,9 -35,3 -69,35 -55,15 -59,69 -51,9 -61,5 -5,29 -66,45 -5,23 -63,37 -59,17 -69,55 -63,61 -17,18 -57,8 -15,17 -63,60 -53,61 -33,3 -67,68 -23,3 -9,20 -19,7 -1,5 -53,9 -68,47 -21,14 -32,13 -19,5 -6,19 -25,9 -43,58 -4,7 -25,16 -67,37 -0,29 -59,65 -47,55 -8,1 -11,19 -49,5 -57,48 -59,59 -65,39 -36,9 -43,5 -66,29 -55,54 -53,5 -1,35 -6,11 -68,31 -70,69 -20,21 -61,8 -65,46 -47,0 -49,41 -3,11 -30,25 -55,11 -29,4 -33,62 -15,13 -1,18 -1,37 -39,60 -65,53 -67,48 -67,49 -52,49 -25,3 -55,43 -0,21 -13,6 -41,53 -38,9 -17,17 -47,41 -41,6 -45,54 -56,17 -1,38 -6,23 -67,56 -2,11 -69,49 -1,33 -32,5 -41,50 -66,61 -5,21 -21,11 -3,29 -59,16 -49,55 -22,9 -34,1 -15,10 -57,3 -69,57 -18,3 -43,59 -24,15 -65,25 -53,11 -35,56 -39,12 -53,52 -65,30 -38,51 -25,7 -33,10 -63,36 -7,14 -5,25 -50,37 -51,5 -1,23 -53,6 -47,3 -61,41 -27,3 -61,26 -51,7 -39,61 -13,25 -1,31 -35,62 -50,43 -29,6 -53,15 -61,63 -45,5 -11,29 -27,6 -31,14 -55,41 -29,5 -5,5 -25,11 -61,35 -4,13 -34,17 -11,21 -69,69 -63,55 -50,45 -49,46 -1,13 -57,39 -63,47 -55,62 -37,61 -1,32 -7,30 -13,9 -51,47 -49,1 -19,23 -2,45 -51,62 -51,53 -57,63 -54,45 -47,58 -33,59 -3,37 -51,59 -39,3 -19,4 -61,60 -9,21 -67,69 -45,56 -53,57 -1,0 -23,13 -5,1 -27,7 -45,51 -56,45 -33,64 -56,13 -7,33 -20,13 -36,5 -57,55 -9,16 -57,65 -45,48 -47,48 -59,45 -65,29 -11,27 -55,67 -69,63 -17,2 -63,41 -10,27 -9,27 -69,47 -25,0 -57,51 -55,53 -65,48 -15,20 -43,9 -55,47 -62,37 -35,59 -22,17 -25,24 -18,7 -63,38 -40,63 -69,58 -59,43 -3,1 -34,7 -42,59 -41,51 -65,27 -7,21 -9,39 -51,49 -7,5 -25,2 -32,63 -8,3 -33,9 -54,9 -67,61 -67,38 -62,33 -17,1 -44,55 -2,27 -7,19 -2,47 -1,9 -7,9 -41,1 -39,10 -61,25 -35,61 -63,59 -21,13 -29,11 -58,51 -37,3 -17,12 -7,3 -7,29 -37,59 -65,69 -67,31 -19,13 -61,66 -23,9 -43,49 -50,9 -43,8 -61,64 -49,8 -15,2 -57,43 -23,15 -64,43 -39,52 -33,57 -8,29 -57,53 -11,6 -65,31 -65,67 -28,17 -9,31 -41,56 -22,1 -51,11 -66,69 -43,6 -1,19 -33,13 -53,41 -68,35 -43,3 -65,51 -44,3 -57,17 -61,12 -61,65 -44,1 -57,13 -13,10 -61,53 -9,15 -11,9 -29,12 -64,65 -45,41 -67,59 -55,12 -67,33 -56,41 -10,1 -5,14 -19,10 -53,43 -69,31 -3,21 -57,14 -37,47 -35,9 -10,5 -11,24 -66,41 -40,1 -59,39 -65,64 -63,70 -64,67 -13,35 -7,35 -4,11 -17,7 -43,60 -53,3 -32,55 -60,49 -39,48 -63,33 -7,6 -63,53 -69,37 -61,48 -45,45 -61,62 -16,7 -54,3 -13,11 -67,29 -47,59 -23,12 -32,3 -11,25 -63,63 -69,39 -29,7 -49,51 -62,43 -55,39 -3,51 -5,17 -45,3 -17,9 -13,1 -55,33 -47,2 -53,14 -13,19 -61,61 -1,39 -29,15 -5,35 -39,5 -1,1 -53,64 -47,56 -48,55 -59,67 -23,7 -59,63 -68,29 -31,13 -28,13 -30,3 -3,3 -31,17 -43,57 -51,4 -69,34 -3,47 -9,3 -69,54 -17,15 -61,34 -3,43 -39,9 -57,10 -58,43 -63,31 -52,55 -47,49 -25,6 -48,53 -38,57 -17,8 -63,69 -69,65 -50,7 -61,54 -63,67 -55,6 -65,52 -17,3 -51,51 -67,47 -57,5 -10,11 -57,41 -69,44 -29,61 -5,2 -9,11 -17,13 -52,45 -52,47 -57,15 -53,63 -1,7 -54,47 -7,16 -47,7 -9,1 -67,42 -39,1 -53,10 -41,69 -52,13 -57,60 -61,46 -67,60 -5,9 -54,61 -11,32 -55,68 -6,27 -26,3 -66,55 -49,66 -69,32 -61,3 -26,11 -5,44 -57,47 -3,19 -61,58 -12,11 -31,6 -11,34 -49,47 -68,41 -0,5 -61,38 -41,57 -68,45 -39,58 -1,10 -63,29 -55,59 -69,66 -9,24 -63,57 -65,54 -11,3 -48,5 -37,49 -40,7 -2,13 -57,31 -61,51 -33,58 -55,20 -49,53 -35,5 -67,43 -25,1 -61,13 -2,7 -6,9 -20,9 -5,7 -40,3 -7,13 -43,53 -67,65 -66,65 -37,57 -2,21 -13,17 -65,37 -13,3 -50,51 -31,10 -5,18 -35,7 -65,32 -7,26 -7,18 -11,8 -56,65 -65,58 -53,53 -55,44 -9,9 -13,8 -67,35 -38,7 -32,7 -69,29 -22,15 -58,63 -27,13 -29,10 -19,3 -62,67 -15,7 -57,59 -40,51 -61,47 -69,59 -31,19 -27,5 -59,11 -68,67 -15,5 -68,53 -44,43 -60,35 -61,11 -33,63 -40,47 -7,1 -39,51 -62,69 -18,11 -31,55 -44,59 -63,46 -67,67 -37,9 -3,28 -5,32 -11,18 -65,38 -16,21 -3,16 -55,45 -59,56 -66,35 -18,1 -11,11 -61,37 -9,13 -9,23 -48,43 -3,5 -8,19 -3,9 -13,5 -47,61 -5,43 -7,12 -39,55 -46,59 -31,9 -45,59 -27,4 -11,7 -17,5 -7,27 -12,15 -11,20 -12,3 -25,17 -2,3 -13,13 -64,57 -55,3 -3,4 -37,4 -31,3 -44,7 -51,65 -65,61 -69,52 -9,34 -25,5 -24,13 -59,57 -11,1 -3,30 -37,63 -22,21 -42,49 -7,25 -1,24 -39,59 -17,11 -14,13 -19,6 -61,40 -7,15 -13,7 -51,39 -47,57 -4,25 -1,45 -25,15 -9,7 -7,34 -48,11 -66,57 -57,7 -51,55 -57,61 -39,53 -14,1 -31,7 -59,66 -3,23 -41,49 -65,49 -68,39 -37,5 -49,50 -11,15 -59,33 -11,22 -15,4 -23,5 -39,63 -54,11 -21,3 -41,4 -30,63 -13,15 -5,13 -67,39 -61,14 -61,69 -61,42 -42,55 -49,3 -21,8 -23,10 -50,55 -59,35 -69,43 -6,29 -21,15 -45,1 -5,38 -54,15 -55,37 -5,15 -42,11 -46,5 -67,57 -60,13 -47,47 -63,39 -51,3 -1,20 -15,23 -37,58 -35,58 -36,7 -27,9 -49,11 -47,1 -57,49 -50,3 -8,11 -65,26 -2,33 -61,59 -37,53 -6,7 -65,41 -57,64 -16,5 -55,26 -55,4 -13,4 -16,13 -56,63 -54,59 -54,55 -0,7 -7,23 -37,1 -5,10 -19,9 -49,49 -66,33 -65,55 -23,11 -61,31 -27,11 -57,70 -10,13 -62,11 -55,66 -58,11 -69,41 -18,17 -51,52 -14,7 -59,62 -58,13 -3,27 -51,60 -67,52 -57,37 -64,35 -4,33 -44,49 -55,16 -68,61 -15,15 -52,3 -41,61 -0,39 -37,50 -59,51 -3,34 -4,5 -47,44 -59,60 -9,4 -27,1 -46,47 -35,60 -45,55 -53,50 -65,63 -8,5 -30,53 -37,7 -35,64 -51,35 -14,33 -31,8 -39,49 -51,41 -49,7 -3,15 -55,13 -53,13 -57,52 -3,8 -1,15 -4,19 -8,23 -3,25 -62,57 -53,7 -3,31 -33,61 -69,61 -36,53 -61,39 -57,9 -15,25 -57,18 -26,13 -7,31 -61,45 -34,5 -41,54 -56,3 -2,17 -63,43 -63,62 -69,33 -69,51 -59,13 -29,9 -59,41 -55,19 -11,2 -33,5 -25,18 -1,11 -45,61 -37,54 -62,55 -42,65 -22,5 -42,3 -41,52 -31,63 -9,33 -30,15 -52,7 -23,4 -57,42 -3,17 -45,53 -57,67 -64,61 -3,38 -39,57 -65,59 -43,51 -40,57 -45,37 -63,64 -1,3 -0,43 -6,3 -3,36 -1,36 -62,51 -12,17 -3,35 -16,9 -25,13 -35,63 -53,45 -68,63 -55,40 -68,59 -69,45 -4,15 -55,42 -65,33 -21,9 -5,11 -19,1 -46,51 -3,22 -60,43 -70,49 -31,5 -47,6 -64,41 -13,12 -7,22 -7,50 -48,61 -48,51 -1,41 -28,7 -3,41 -45,49 -36,63 -42,1 -5,36 -52,41 -39,4 -5,33 -60,67 -48,7 -24,23 -57,11 -27,17 -48,3 -11,37 -47,51 -38,61 -1,26 -9,25 -64,33 -11,5 -21,7 -63,35 -1,27 -24,7 -15,9 -59,61 -9,22 -15,3 -43,1 -56,7 -67,55 -7,7 -44,45 -63,45 -55,7 -59,58 -29,55 -57,45 -67,53 -31,62 -57,58 -52,9 -7,17 -4,31 -51,45 -9,8 -58,45 -70,47 -21,4 -55,17 -67,63 -55,65 -33,7 -41,5 -3,39 -5,31 -53,47 -59,55 -55,51 -59,68 -35,57 -65,47 -56,55 -27,8 -11,13 -2,41 -3,2 -29,13 -51,61 -59,15 -38,47 -45,67 -45,4 -4,1 -50,11 -51,54 -47,53 -69,53 -65,50 -51,63 -67,45 -11,31 -1,25 -3,40 -63,49 -39,7 -23,1 -30,11 -21,1 -59,37 -57,69 -34,3 -69,27 -9,29 -41,60 -58,53 -70,41 -38,15 -55,5 -43,55 -60,53 -60,45 -43,46 -49,35 -24,5 -1,43 -15,1 -67,51 -37,11 -20,1 -59,9 -68,25 -57,29 -45,15 -54,37 -17,29 -17,52 -4,43 -29,23 -13,46 -41,65 -65,16 -43,41 -17,23 -11,46 -34,67 -35,37 -5,47 -35,40 -41,29 -12,69 -15,67 -53,35 -42,43 -47,22 -35,49 -17,40 -13,59 -49,59 -33,29 -47,31 -11,54 -27,65 -69,3 -67,7 -53,29 -24,45 -57,28 -21,25 -62,21 -31,29 -23,59 -41,47 -22,55 -22,43 -67,26 -29,41 -41,25 -59,23 -43,35 -33,56 -7,69 -23,25 -31,1 -23,65 -41,45 -31,39 -47,63 -25,45 -67,13 -40,41 -46,45 -27,43 -23,49 -37,19 -67,27 -66,23 -46,31 -37,13 -35,47 -19,30 -20,47 -9,38 -64,7 -29,30 -19,45 -56,21 -35,66 -5,45 -33,49 -39,34 -47,65 -17,31 -13,51 -45,22 -45,42 -55,23 -27,55 -37,28 -41,37 -51,36 -57,33 -29,29 -35,53 -1,62 -49,69 -47,32 -4,59 -23,51 -61,33 -15,50 -37,24 -1,57 -46,27 -11,43 -29,35 -20,25 -37,29 -18,41 -31,34 -29,37 -46,29 -23,57 -9,69 -43,68 -37,65 -49,18 -4,61 -58,1 -20,33 -21,12 -46,65 -63,21 -31,27 -27,51 -5,64 -27,48 -26,59 -29,24 -18,35 -15,40 -6,59 -41,21 -46,35 -10,57 -29,19 -45,70 -62,17 -59,36 -25,66 -42,47 -26,49 -53,21 -59,21 -13,55 -51,40 -17,49 -47,34 -31,50 -2,57 -27,37 -55,49 -28,69 -64,25 -34,37 -57,24 -61,17 -43,11 -59,10 -27,42 -9,42 -13,58 -55,35 -35,46 -19,31 -28,65 -15,45 -31,47 -29,45 -67,41 -7,46 -41,63 -39,39 -67,20 -67,21 -37,18 -6,43 -47,33 -57,26 -26,45 -27,45 -35,39 -40,17 -48,21 -65,23 -42,33 -9,37 -29,25 -63,16 -53,24 -31,18 -25,37 -67,11 -43,39 -31,46 -3,55 -13,44 -14,49 -9,35 -55,57 -33,51 -37,69 -7,59 -1,17 -68,3 -64,13 -31,23 -33,53 -43,40 -2,67 -28,47 -43,65 -47,35 -63,3 -35,20 -19,26 -35,17 -11,33 -51,34 -20,29 -12,59 -43,14 -57,34 -33,39 -42,27 -7,61 -45,17 -11,63 -33,14 -4,55 -39,38 -9,43 -27,53 -14,37 -17,65 -31,45 -55,29 -10,47 -19,51 -29,17 -25,69 -18,25 -11,62 -65,21 -23,38 -1,66 -30,49 -9,61 -63,23 -23,39 -11,49 -47,67 -6,69 -31,48 -14,21 -21,57 -24,59 -18,29 -47,27 -25,21 -55,69 -63,7 -35,13 -23,63 -13,33 -15,11 -15,39 -25,36 -43,20 -65,1 -23,21 -20,55 -47,14 -45,36 -51,67 -22,41 -17,47 -16,31 -60,5 -43,36 -8,37 -43,15 -21,5 -10,53 -45,62 -51,17 -57,23 -22,31 -15,16 -31,32 -23,20 -55,0 -25,44 -55,24 -43,47 -5,57 -62,23 -8,61 -27,34 -20,57 -40,33 -15,65 -43,7 -24,29 -44,27 -27,63 -5,63 -57,21 -61,24 -23,29 -49,21 -55,25 -27,50 -17,25 -7,48 -5,53 -37,43 -13,41 -21,70 -8,45 -34,33 -58,47 -6,55 -3,57 -70,23 -59,1 -13,18 -33,60 -46,39 -35,27 -11,41 -33,55 -42,67 -19,48 -17,51 -17,50 -44,31 -68,17 -39,30 -1,63 -29,21 -9,47 -55,27 -33,27 -53,51 -21,21 -9,63 -25,33 -7,58 -53,38 -46,19 -18,69 -21,49 -40,39 -5,37 -53,67 -39,31 -33,12 -7,57 -1,49 -1,55 -19,36 -29,43 -13,50 -55,63 -51,37 -1,56 -41,41 -29,53 -24,63 -27,33 -70,9 -24,19 -2,65 -39,37 -36,35 -25,52 -32,27 -9,51 -25,19 -45,63 -15,33 -19,21 -49,13 -39,13 -65,15 -3,54 -11,57 -49,24 -41,14 -15,29 -15,27 -1,60 -31,25 -30,39 -3,58 -11,44 -13,53 -27,38 -35,33 -43,31 -53,34 -61,67 -25,27 -13,63 -21,59 -17,21 -21,55 -48,17 -5,51 -24,49 -54,49 -50,29 -31,43 -53,19 -62,31 -43,45 -19,41 -17,33 -31,59 -65,28 -26,25 -3,65 -51,25 -59,27 -20,69 -31,60 -47,11 -24,35 -39,23 -48,29 -17,44 -33,50 -61,49 -67,22 -15,26 -15,55 -52,25 -51,0 -67,10 -43,19 -45,33 -39,11 -13,49 -49,33 -3,70 -33,34 -51,13 -25,31 -32,67 -14,45 -45,34 -17,53 -43,21 -53,36 -55,31 -3,13 -1,48 -18,15 -17,69 -29,36 -11,48 -45,31 -29,39 -60,7 -22,27 -41,38 -21,47 -67,8 -49,19 -43,37 -41,33 -53,49 -21,53 -25,60 -33,45 -49,31 -13,22 -53,30 -37,12 -37,31 -27,61 -29,26 -5,52 -33,26 -35,70 -33,69 -39,25 -9,55 -29,1 -5,3 -69,15 -31,22 -9,32 -53,20 -23,33 -31,33 -6,63 -64,15 -69,23 -49,39 -48,27 -41,3 -7,38 -59,47 -65,10 -7,66 -17,24 -67,9 -25,22 -0,63 -7,37 -9,36 -9,17 -69,25 -27,39 -42,25 -11,23 -57,25 -31,67 -51,20 -35,55 -11,17 -9,57 -11,67 -35,29 -5,27 -16,57 -27,36 -21,63 -10,51 -52,17 -34,11 -3,45 -49,67 -37,37 -43,12 -53,18 -5,66 -26,17 -17,67 -19,60 -28,19 -31,70 -27,20 -11,68 -8,67 -33,38 -15,47 -51,29 -33,23 -47,23 -11,30 -45,69 -33,16 -42,19 -8,55 -25,67 -23,19 -69,7 -35,31 -28,29 -67,17 -13,31 -26,53 -19,66 -27,57 -45,65 -33,11 -5,65 -1,69 -22,67 -13,65 -51,38 -3,53 -70,27 -17,30 -25,59 -19,64 -21,19 -36,33 -36,27 -53,56 -65,24 -39,18 -37,36 -15,64 -15,28 -53,28 -45,27 -33,47 -31,69 -23,67 -5,59 -53,59 -35,19 -29,22 -47,43 -59,7 -35,42 -54,31 -21,45 -25,53 -20,51 -69,8 -12,39 -29,54 -10,45 -16,67 -29,58 -61,15 -63,2 -27,15 -57,36 -60,31 -30,43 -21,51 -21,38 -21,42 -63,18 -29,47 -17,57 -67,15 -65,3 -16,47 -13,54 -37,45 -45,14 -48,57 -25,55 -55,32 -47,17 -19,19 -41,39 -7,52 -7,45 -51,23 -53,22 -23,37 -11,56 -68,15 -50,33 -35,67 -33,24 -23,64 -15,51 -15,36 -26,61 -57,32 -15,35 -39,17 -16,39 -11,65 -13,14 -33,17 -43,25 -40,45 -63,25 -19,32 -41,8 -44,67 -3,59 -41,19 -36,13 -14,17 -17,39 -23,54 -25,63 -28,33 -19,47 -16,33 -29,65 -33,20 -31,49 -65,2 -34,45 -27,2 -11,36 -48,41 -45,25 -3,69 -42,69 -43,17 -61,29 -65,7 -31,51 -40,27 -14,63 -27,31 -10,17 -59,25 -37,17 -4,49 -19,29 -25,51 -26,21 -15,63 -64,9 -24,27 -69,5 -30,67 -3,7 -51,69 -19,57 -4,51 -48,35 -34,23 -59,3 -26,31 -37,23 -7,65 -66,7 -68,11 -42,17 -52,67 -24,41 -49,17 -33,67 -29,69 -69,19 -39,64 -14,57 -49,43 -19,22 -53,39 -47,25 -33,35 -63,9 -20,19 -58,5 -35,25 -60,3 -19,53 -22,65 -38,31 -56,49 -19,44 -67,3 -13,28 -27,41 -31,56 -50,1 -14,25 -27,23 -26,67 -65,5 -17,58 -15,61 -48,25 -35,15 -29,16 -39,67 -31,37 -57,2 -54,39 -38,13 -29,40 -23,52 -39,47 -21,29 -36,67 -25,39 -3,67 -40,13 -12,25 -59,38 -17,22 -44,63 -9,59 -47,29 -52,31 -29,67 -3,33 -21,16 -12,35 -29,59 -2,51 -47,5 -53,37 -44,19 -28,39 -45,35 -15,49 -7,39 -56,35 -31,21 -17,62 -15,59 -63,10 -63,11 -49,57 -3,49 -35,51 -43,30 -11,38 -36,43 -13,29 -47,13 -9,62 -43,23 -50,27 -12,41 -63,13 -29,3 -35,69 -12,65 -46,25 -16,27 -7,43 -47,68 -63,19 -41,7 -56,29 -58,15 -63,51 -45,9 -25,61 -36,15 -33,30 -61,22 -45,24 -59,30 -53,31 -5,69 -17,27 -27,29 -58,33 -59,40 -35,22 -47,15 -16,45 -37,40 -14,65 -44,9 -27,67 -35,36 -36,17 -33,19 -52,27 -11,45 -64,5 -41,43 -39,69 -9,53 -41,17 -43,42 -17,59 -45,29 -37,39 -21,39 -21,65 -19,37 -21,23 -65,17 -11,35 -35,1 -33,65 -47,19 -37,15 -13,21 -49,30 -20,59 -62,7 -13,70 -1,47 -61,7 -15,69 -5,67 -53,23 -39,27 -49,60 -5,56 -51,66 -37,67 -13,69 -19,39 -33,21 -7,67 -16,15 -17,61 -49,14 -15,68 -25,35 -69,9 -21,67 -46,17 -24,57 -23,68 -1,51 -43,38 -35,48 -39,16 -0,55 -65,65 -19,33 -60,9 -5,41 -67,2 -29,44 -53,69 -41,31 -17,37 -63,17 -7,42 -8,49 -7,32 -6,49 -15,37 -13,57 -33,33 -35,43 -39,29 -51,15 -29,66 -23,27 -23,61 -61,21 -25,47 -18,59 -41,35 -31,52 -30,35 -69,17 -27,59 -13,30 -49,27 -15,31 -11,53 -65,57 -15,56 -30,19 -23,62 -27,27 -24,31 -23,47 -23,23 -23,31 -29,46 -28,61 -17,41 -36,19 -7,40 -38,65 -11,66 -27,69 -37,21 -45,11 -59,18 -7,41 -59,49 -51,43 -19,49 -15,43 -55,61 -49,37 -8,65 -39,68 -61,9 -7,51 -41,32 -37,25 -19,43 -26,29 -19,56 -69,1 -43,34 -67,23 -11,69 -37,35 -69,13 -19,27 -27,19 -60,19 -32,21 -32,35 -11,47 -35,41 -66,5 -28,57 -42,63 -44,39 -51,1 -18,43 -14,53 -27,68 -41,11 -44,17 -18,19 -49,29 -52,43 -35,65 -19,15 -53,33 -27,25 -45,23 -37,51 -67,14 -9,52 -1,61 -50,19 -65,19 -27,32 -38,41 -31,35 -25,46 -53,42 -33,25 -25,29 -16,61 -21,46 -43,61 -13,37 -2,53 -13,38 -59,20 -63,20 -3,63 -13,43 -67,0 -35,23 -6,35 -21,27 -20,45 -39,43 -12,49 -7,11 -9,68 -15,42 -43,27 -41,15 -19,63 -61,23 -66,13 -25,65 -18,67 -69,12 -23,48 -27,26 -17,54 -53,68 -33,28 -21,52 -22,45 -16,63 -21,61 -29,63 -49,68 -44,65 -59,4 -51,19 -51,57 -19,69 -22,49 -37,68 -49,23 -58,21 -47,10 -34,9 -33,41 -25,64 -23,50 -25,54 -37,32 -39,42 -41,9 -29,28 -25,41 -39,21 -45,19 -19,65 -22,29 -47,38 -21,28 -50,15 -5,40 -49,65 -67,19 -36,49 -61,57 -53,2 -32,37 -43,63 -10,41 -69,21 -19,55 -20,39 -64,1 -57,38 -69,18 -17,38 -11,51 -20,63 -57,35 -21,24 -41,55 -51,70 -61,55 -19,61 -40,25 -57,27 -61,1 -39,44 -39,36 -27,21 -41,24 -21,37 -1,53 -51,58 -27,47 -57,57 -39,33 -37,33 -23,55 -40,69 -21,43 -37,46 -49,70 -46,67 -64,21 -41,13 -13,27 -45,12 -50,23 -39,66 -45,13 -19,17 -19,11 -63,1 -19,38 -17,48 -61,28 -22,59 -19,62 -37,44 -21,34 -13,39 -61,43 -37,38 -2,69 -27,64 -12,29 -53,27 -31,61 -2,63 -23,40 -23,26 -59,26 -32,39 -31,11 -43,33 -53,32 -49,45 -63,5 -21,31 -53,25 -17,43 -4,45 -23,32 -5,62 -13,45 -19,14 -57,22 -13,26 -51,27 -69,11 -39,28 -15,19 -65,20 -7,54 -5,46 -31,57 -39,45 -34,51 -7,63 -17,55 -46,9 -29,33 -26,41 -39,22 -67,25 -66,17 -69,6 -47,21 -10,29 -62,3 -16,35 -63,15 -67,5 -62,27 -7,49 -17,19 -20,41 -45,39 -61,27 -34,29 -47,64 -11,61 -51,12 -33,46 -10,61 -19,25 -23,45 -47,42 -21,69 -41,27 -59,29 -22,23 -33,43 -41,22 -31,53 -9,41 -29,31 -49,61 -9,45 -5,55 -33,44 -27,62 -1,21 -23,35 -47,37 -25,25 -44,23 -30,69 -61,19 -22,57 -0,51 -31,15 -53,65 -60,1 -46,13 -25,23 -65,13 -51,16 -17,66 -0,15 -29,51 -9,60 -39,19 -5,19 -39,15 -41,20 -33,15 -51,26 -4,67 -43,67 -51,21 -48,39 -9,49 -22,35 -32,43 -43,16 -21,33 -47,45 -51,31 -28,53 -48,37 -19,20 -57,1 -35,35 -14,41 -23,53 -31,24 -57,19 -21,41 -41,10 -15,60 -70,17 -43,13 -41,30 -35,21 -52,59 -47,16 -55,1 -47,62 -24,33 -35,26 -19,50 -39,41 -30,65 -37,41 -5,39 -51,22 -65,44 -49,25 -20,67 -9,65 -27,56 -39,65 -30,31 -11,55 -5,49 -43,43 -9,58 -14,47 -49,63 -23,69 -67,24 -68,5 -47,20 -45,47 -65,45 -11,59 -5,61 -60,51 -36,23 -63,27 -50,59 -41,36 -55,21 -36,39 -55,58 -7,47 -45,43 -17,63 -32,19 -34,41 -33,48 -30,1 -11,39 -1,65 -43,28 -47,69 -32,41 -39,35 -13,60 -33,68 -49,9 -3,48 -43,69 -12,63 -65,12 -14,67 -12,55 -9,40 -49,64 -65,9 -68,21 -26,57 -38,25 -31,31 -41,23 -43,29 -59,19 -28,51 -19,54 -49,12 -15,24 -63,48 -13,61 -23,17 -29,49 -5,60 -27,24 -60,29 -27,49 -35,45 -17,35 -69,2 -15,32 -26,39 -29,27 -1,67 -23,41 -21,36 -23,43 -62,5 -35,11 -48,65 -25,68 -17,45 -13,47 -31,0 -31,65 -59,5 -13,23 -15,53 -27,35 -41,62 -59,22 -58,39 -53,17 -16,55 -54,23 -15,52 -33,31 -49,32 -9,64 -24,39 -13,67 -25,43 -38,27 -25,49 -36,31 -15,41 -65,11 -15,57 -67,1 -39,20 -29,57 -5,68 -25,57 -31,30 -19,59 -49,15 -31,41 -21,35 -59,24 -32,53 -3,61 -47,39 -7,53 -51,33 -45,21 -1,59 -37,27 -38,21 -57,30 -22,61 -21,17 -33,37 -7,55 -29,42 -9,5 -9,67 -52,63 -19,67 -53,1 -44,36 -34,34 -60,18 -62,64 -38,2 -22,40 -25,40 -28,45 -22,13 -20,37 -28,9 -28,64 -68,0 -0,6 -34,38 -63,40 -66,66 -12,16 -21,56 -26,15 -0,54 -20,44 -52,10 -70,55 -54,33 -22,47 -69,20 -32,36 -21,48 -28,40 -0,14 -2,50 -5,70 -28,8 -15,6 -58,9 -36,51 -46,28 -8,14 -64,6 -0,56 -58,29 -64,55 -26,51 -17,4 -30,54 -14,24 -68,26 -14,35 -68,22 -26,2 -30,38 -17,16 -28,11 -37,14 -62,16 -23,42 -26,68 -42,7 -60,20 -40,49 -14,12 -68,12 -26,44 -28,37 -35,50 -70,43 -66,58 -48,56 -46,30 -34,48 -16,14 -62,15 -41,2 -56,6 -31,16 -50,70 -24,20 -64,58 -59,14 -6,6 -19,2 -10,66 -25,20 -54,46 -41,16 -55,50 -10,28 -42,42 -38,45 -26,34 -59,8 -12,36 -10,23 -58,35 -47,66 -60,46 -40,54 -16,8 -36,16 -56,39 -70,36 -30,4 -35,32 -54,63 -8,36 -38,10 -30,70 -4,41 -0,48 -25,10 -34,52 -20,4 -56,44 -67,4 -38,44 -18,37 -6,60 -60,47 -6,66 -27,18 -35,12 -37,8 -8,48 -18,53 -30,50 -36,50 -35,24 -22,3 -55,8 -20,24 -70,65 -4,68 -25,42 -8,68 -42,5 -30,55 -70,60 -18,33 -23,36 -35,8 -40,28 -34,13 -42,4 -26,32 -54,67 -29,2 -39,6 -68,48 -0,16 -8,35 -18,5 -38,12 -32,10 -48,13 -70,57 -19,0 -46,23 -42,36 -38,35 -39,14 -11,70 -34,59 -24,40 -70,64 -70,52 -45,28 -24,21 -4,6 -66,62 -62,29 -25,34 -34,21 -36,37 -4,54 -39,70 -46,6 -26,58 -30,27 -36,56 -44,5 -59,6 -65,18 -64,17 -38,24 -57,12 -34,12 -66,42 -15,18 -30,13 -69,60 -21,40 -25,4 -54,66 -26,26 -34,39 -31,58 -62,39 -12,23 -2,48 -32,1 -28,32 -62,52 -32,59 -50,18 -17,6 -44,12 -42,46 -48,15 -8,15 -62,13 -28,15 -70,22 -35,30 -48,22 -2,62 -41,64 -10,38 -64,44 -41,68 -48,1 -70,37 -8,39 -24,52 -58,42 -25,8 -6,57 -18,46 -67,28 -36,24 -70,5 -63,42 -6,67 -18,48 -38,20 -14,0 -10,37 -26,24 -70,34 -58,60 -61,36 -64,26 -24,25 -62,46 -44,64 -55,10 -25,14 -4,26 -4,34 -14,44 -42,14 -37,20 -10,33 -37,26 -34,40 -10,46 -52,16 -3,66 -4,35 -66,53 -67,58 -31,44 -70,31 -38,59 -68,28 -40,11 -6,38 -52,29 -28,35 -52,37 -30,5 -14,9 -18,28 -43,48 -68,49 -38,39 -46,16 -13,32 -12,13 -53,8 -52,0 -60,28 -68,9 -52,39 -36,30 -40,66 -13,20 -27,60 -18,10 -46,32 -8,31 -39,40 -70,59 -58,56 -50,34 -60,40 -70,32 -64,52 -30,29 -58,62 -32,56 -35,10 -38,53 -51,18 -56,62 -18,6 -37,30 -44,37 -67,66 -10,30 -1,70 -66,16 -50,36 -28,58 -30,45 -0,70 -28,44 -20,3 -62,28 -30,30 -15,22 -17,0 -48,40 -6,36 -30,23 -13,24 -54,22 -68,6 -67,30 -32,2 -36,11 -37,16 -0,49 -62,25 -8,13 -22,32 -40,43 -44,32 -38,28 -0,18 -30,37 -29,50 -46,69 -32,25 -46,10 -70,1 -1,4 -56,28 -62,18 -55,28 -36,25 -14,36 -38,58 -66,47 -20,16 -50,32 -16,41 -58,2 -54,20 -55,2 -1,58 -30,17 -60,16 -64,64 -68,24 -32,20 -66,44 -50,64 -36,18 -14,40 -12,52 -24,64 -28,50 -14,50 -36,3 -48,0 -50,60 -50,30 -63,24 -70,3 -27,12 -30,0 -42,35 -60,38 -54,34 -31,26 -22,46 -4,63 -38,50 -58,31 -49,56 -16,36 -8,20 -4,66 -62,48 -2,4 -6,54 -13,34 -36,8 -63,14 -38,17 -26,12 -20,32 -52,38 -11,52 -46,1 -48,19 -38,33 -44,28 -56,56 -54,58 -43,4 -64,50 -32,46 -45,18 -14,26 -63,54 -42,8 -68,20 -56,24 -14,31 -34,35 -70,30 -67,18 -0,67 -40,2 -58,52 -23,28 -58,27 -50,68 -10,49 -40,65 -52,4 -20,27 -62,10 -56,50 -60,14 -59,0 -62,6 -48,28 -57,20 -38,48 -20,35 -10,55 -62,20 -68,16 -42,68 -24,55 -61,70 -12,2 -53,4 -62,1 -15,14 -70,4 -37,34 -63,32 -49,0 -0,52 -60,52 -63,66 -3,62 -20,17 -12,32 -62,50 -65,68 -10,19 -14,28 -9,0 -26,30 -4,27 -39,56 -42,29 -60,24 -68,7 -59,42 -51,48 -29,8 -54,43 -49,36 -24,28 -30,7 -6,61 -55,34 -9,12 -31,40 -20,64 -50,0 -66,21 -19,18 -4,2 -30,47 -2,5 -7,20 -33,4 -24,1 -7,60 -40,24 -46,20 -49,4 -36,34 -8,18 -50,40 -12,7 -6,39 -46,46 -29,14 -50,38 -22,30 -61,32 -58,69 -32,38 -11,42 -0,22 -56,54 -10,31 -49,62 -65,4 -24,14 -44,33 -47,18 -7,28 -16,49 -42,60 -64,20 -50,48 -36,61 -1,44 -56,25 -26,38 -36,59 -14,34 -32,34 -29,0 -8,41 -67,40 -60,65 -19,70 -0,19 -4,64 -29,38 -26,50 -24,48 -25,56 -60,10 -3,68 -8,2 -56,34 -18,64 -51,64 -42,32 -59,46 -14,39 -0,31 -2,37 -40,37 -52,22 -16,70 -1,52 -58,59 -2,26 -6,64 -42,45 -12,18 -54,1 -45,46 -39,26 -52,33 -2,61 -65,66 -36,0 -42,23 -24,46 -64,36 -45,30 -43,56 -60,57 -44,20 -61,68 -16,3 -44,56 -57,40 -12,58 -10,26 -42,58 -31,54 -12,31 -48,34 -59,44 -70,11 -1,54 -40,18 -70,63 -27,10 -2,20 -46,49 -26,69 -30,10 -31,20 -32,70 -30,64 -52,48 -10,9 -38,6 -52,28 -24,24 -48,24 -70,46 -1,6 -44,21 -20,66 -12,53 -5,48 -51,68 -40,23 -63,56 -4,3 -64,4 -51,10 -14,11 -65,60 -53,70 -2,2 -34,61 -24,2 -48,59 -67,12 -8,52 -26,4 -9,44 -9,48 -44,2 -41,48 -21,32 -24,70 -20,15 -25,28 -26,1 -21,30 -4,56 -17,14 -4,36 -12,22 -14,62 -54,42 -52,1 -2,1 -28,2 -31,42 -14,8 -11,58 -49,20 -52,44 -42,13 -54,57 -70,19 -2,52 -3,20 -47,28 -70,12 -52,23 -3,0 -64,0 -70,40 -22,22 -39,24 -32,69 -22,48 -19,52 -36,69 -27,46 -22,19 -63,30 -16,52 -64,69 -28,1 -43,0 -22,42 -50,56 -35,38 -4,37 -62,4 -28,27 -51,44 -22,8 -19,58 -12,9 -58,30 -51,8 -15,46 -60,17 -6,1 -16,59 -6,16 -10,4 -0,68 -14,58 -27,22 -69,62 -0,53 -36,57 -24,68 -20,68 -54,53 -2,25 -2,8 -52,53 -33,22 -27,52 -66,15 -6,47 -31,38 -54,19 -68,34 -50,6 -23,70 -1,42 -64,27 -41,58 -33,42 -60,56 -32,18 -12,68 -42,38 -54,62 -52,20 -36,22 -47,24 -34,46 -49,26 -9,66 -25,30 -38,14 -46,34 -56,66 -52,6 -36,70 -58,40 -35,52 -28,43 -16,50 -8,42 -61,10 -42,31 -67,16 -21,2 -54,70 -10,50 -26,55 -34,16 -34,8 -12,6 -32,45 -26,6 -56,68 -69,24 -42,9 -45,40 -48,8 -64,14 -30,62 -13,42 -46,4 -16,25 -48,31 -46,58 -40,40 -46,68 -48,20 -56,4 -8,40 -10,14 -20,31 -61,20 -34,24 -68,68 -14,18 -1,46 -62,65 -46,55 -18,55 -24,66 -48,10 -16,38 -11,14 -21,22 -22,38 -28,22 -2,24 -15,66 -22,50 -19,28 -68,51 -58,25 -14,15 -64,56 -46,48 -38,67 -56,9 -12,62 -43,24 -36,10 -60,0 -2,10 -28,60 -53,44 -18,39 -28,42 -6,10 -68,44 -18,49 -68,32 -27,66 -0,44 -4,10 -29,68 -40,9 -61,44 -24,32 -9,70 -10,69 -8,56 -65,14 -25,48 -0,33 -3,32 -42,57 -40,15 -60,21 -22,69 -21,10 -20,36 -64,51 -12,1 -40,46 -48,6 -22,44 -8,24 -18,12 -54,4 -54,10 -22,39 -34,62 -64,40 -18,52 -0,25 -0,57 -38,55 -64,45 -0,35 -36,55 -0,41 -45,10 -64,16 -24,58 -56,58 -64,42 -12,46 -22,10 -38,52 -20,56 -54,41 -62,53 -4,60 -64,12 -10,7 -59,32 -20,2 -32,14 -42,50 -56,1 -50,49 -4,39 -7,24 -38,3 -69,68 -66,4 -67,32 -42,21 -4,53 -35,44 -20,53 -68,18 -0,65 -38,63 -70,53 -64,54 -35,4 -54,65 -53,0 -58,70 -63,52 -20,50 -32,16 -32,54 -47,36 -50,61 -34,27 -65,56 -65,0 -50,39 -16,10 -22,70 -10,36 -32,66 -38,8 -37,0 -4,14 -28,49 -4,12 -48,67 -59,70 -42,48 -28,56 -2,31 -64,24 -7,70 -43,18 -2,12 -10,32 -62,44 -26,70 -30,68 -4,46 -58,50 -49,58 -45,50 -8,59 -41,0 -10,24 -18,60 -60,54 -0,69 -26,5 -56,18 -60,15 -10,58 -5,12 -0,9 -22,34 -14,51 -3,60 -18,70 -69,50 -64,48 -69,10 -4,42 -8,38 -40,22 -30,60 -15,0 -28,3 -27,40 -56,70 -5,30 -42,26 -2,28 -39,8 -34,60 -34,26 -34,49 -4,29 -34,36 -33,52 -40,32 -54,8 -3,46 -10,68 -42,70 -8,26 -34,66 -15,8 -21,44 -5,26 -44,40 -50,31 -40,4 -68,10 -43,54 -4,62 -52,66 -16,22 -32,32 -62,0 -6,46 -28,23 -42,52 -53,26 -10,25 -42,54 -56,67 -60,26 -19,34 -60,30 -46,37 -10,56 -12,10 -66,25 -60,69 -19,46 -23,16 \ No newline at end of file diff --git a/2024/gareth/day19/day19.go b/2024/gareth/day19/day19.go deleted file mode 100644 index cf151af..0000000 --- a/2024/gareth/day19/day19.go +++ /dev/null @@ -1,90 +0,0 @@ -package day19 - -import ( - "strings" -) - -func Part1(input string) int { - towelPatterns, designs := parseInput(input) - result := countPossibleDesigns(towelPatterns, designs) - return result -} - -func Part2(input string) int { - towelPatterns, designs := parseInput(input) - result := totalArrangements(towelPatterns, designs) - return result -} - -func parseInput(input string) ([]string, []string) { - parts := strings.SplitN(input, "\n\n", 2) - towels := strings.Split(strings.ReplaceAll(parts[0], " ", ""), ",") - patterns := strings.Split(strings.TrimSpace(parts[1]), "\n") - return towels, patterns -} - -func countPossibleDesigns(towelPatterns []string, designs []string) int { - memo := make(map[string]bool) - count := 0 - - for _, design := range designs { - if canConstruct(design, towelPatterns, memo) { - count++ - } - } - - return count -} - -func canConstruct(design string, patterns []string, memo map[string]bool) bool { - if design == "" { - return true - } - if val, found := memo[design]; found { - return val - } - - for _, pattern := range patterns { - if strings.HasPrefix(design, pattern) { - remaining := design[len(pattern):] - if canConstruct(remaining, patterns, memo) { - memo[design] = true - return true - } - } - } - - memo[design] = false - return false -} - -func totalArrangements(towelPatterns []string, designs []string) int { - memo := make(map[string]int) - total := 0 - - for _, design := range designs { - total += countWays(design, towelPatterns, memo) - } - - return total -} - -func countWays(design string, patterns []string, memo map[string]int) int { - if design == "" { - return 1 - } - if val, found := memo[design]; found { - return val - } - - totalWays := 0 - for _, pattern := range patterns { - if strings.HasPrefix(design, pattern) { - remaining := design[len(pattern):] - totalWays += countWays(remaining, patterns, memo) - } - } - - memo[design] = totalWays - return totalWays -} diff --git a/2024/gareth/day19/day19_test.go b/2024/gareth/day19/day19_test.go deleted file mode 100644 index cb0ed02..0000000 --- a/2024/gareth/day19/day19_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package day19 - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestPart1(t *testing.T) { - r := Part1(`r, wr, b, g, bwu, rb, gb, br - -brwrr -bggr -gbbr -rrbgbr -ubwu -bwurrg -brgr -bbrgwb`) - assert.Equal(t, 6, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`r, wr, b, g, bwu, rb, gb, br - -brwrr -bggr -gbbr -rrbgbr -ubwu -bwurrg -brgr -bbrgwb`) - assert.Equal(t, 16, r) -} diff --git a/2024/gareth/day19/input.txt b/2024/gareth/day19/input.txt deleted file mode 100644 index 9547196..0000000 --- a/2024/gareth/day19/input.txt +++ /dev/null @@ -1,402 +0,0 @@ -rrgbg, rgguubg, rbru, rb, rrrw, wbu, gbgb, uururg, ubru, rugb, bbru, b, rggurg, wgru, bgrwb, rrgubg, ubrrbg, wgurru, rrrrw, rbrwu, wubwb, wrbbr, bgbu, brrww, brg, gbwu, wrubuur, gur, grbr, gruwrrbg, bgwr, wgugbgb, rwbru, wuwr, rrg, ruwg, rgwgr, ubu, wbr, bwg, gbu, bgrwrb, wwrw, bb, gr, rug, grr, ubwb, rbruwbu, guggug, ugu, rwbuu, bbur, wbrww, wubw, br, gruu, gwr, wrrwwu, wug, bgu, bgb, wugb, grb, rbbg, grgbwgb, rwu, bwrbb, uwrbbru, bbu, wrg, rwg, ggbgbg, wbwru, wrgrw, bburr, bgr, rgbg, bwwwugrb, uwu, rwuwrg, gguburu, uwubwu, wb, wgguug, ugrbw, rbgu, rwwu, ggbbgb, gw, wgg, rrw, uurg, uubg, bgurgb, uwgbr, wbrwu, rrbb, rww, bwgb, uugru, ggrbub, wubgw, rwwugr, uuwur, burbrg, bbr, ggb, wgr, gwbgw, rrbu, wuwwrwb, rbbr, uubw, buuu, ubbwggu, brr, urguww, uggwwgw, ugw, ug, rub, grrrwu, wurburgg, wwww, ruu, wrb, rrur, urggr, bwbwwwrg, wwbu, bbg, uwb, ggugu, gbbr, rbrgw, bg, bbuu, uwrgrg, ggbwrgw, wwgwugr, wgbwuwb, gbrwg, bbw, wwrgu, rgrwrbwb, wwwg, gugbgbg, bwrwub, rw, gbb, ggw, rrb, urrbbwb, urbu, grg, rbugggb, bruwg, uubgwgw, bw, uubgu, rru, rwww, gu, wrbrg, guu, wgu, ruuru, wubrrg, brugrg, uuggb, wrurg, rgb, rbu, urg, buw, grwbg, gwuw, grbbg, wuwu, gbgbbw, uugrwrww, wbguub, grrgbug, u, uug, uwr, wrwb, gbg, bru, wwg, bbwur, bbbbbbbw, bugbb, rwurrgr, wwb, ugbbw, bug, grgg, bgwgrrb, uggu, rurguru, wwr, rbw, ubwwgw, wrrw, rrbg, g, rgrbub, gruggw, bur, ubgb, bgg, uwur, ur, bbbwb, gwbu, wuww, uruuuubb, wbru, ugggg, gbuu, rgg, wwwug, gbrwgg, guwgr, urw, wbur, bu, rur, rrubr, ugb, ubrgrb, rbbgg, rbwrg, rggw, rguug, wwu, uur, wrrguggu, brbb, bwwwbr, guw, gugw, wgubwu, rrr, ub, ru, brrbbruw, bwwgrrbb, rubgu, uggwwg, wbb, rwr, r, ruuu, wbggg, wwwu, grbrb, rrrrr, ruwb, wuuw, rbbb, ugg, wbg, rguwr, wbw, wbuwg, ubbgrbb, urugu, rbubw, wrgwuuwu, grw, ubbbu, bwurb, rwuu, rgbbwur, urbuu, uww, wuw, bwurgu, wur, wuwwrbur, wwuu, wbgw, grbbbw, wuub, urb, wuuguuwg, wg, gwrgr, gbug, gbrbw, rwgg, brbbu, bwww, wrbbbu, wwgbggb, burug, gww, ubgrrb, bgw, rgbb, brb, wbuu, brw, ggrbrbwg, uwruw, wrgurrbb, guwrgu, rr, ugggrbr, bgrgg, urgbrbrb, wrw, wwubggu, ugurwg, grrg, bwrb, rrgwuuw, rrru, wurg, bgurwu, rgurbb, uuub, uuwb, rrrg, wrgrrrww, uwg, bgbguu, wrgwb, wwwru, rg, rrurwur, urrbb, bww, rrwwbbb, ubr, wgrbu, gru, ubg, gb, ggr, gbwbwru, uuw, rbb, gugwrg, gwb, bbb, rgrggw, uw, wggbbg, rwgubgb, gwbw, brrr, gugbwu, rwrr, uuuwbb, ugrrr, rgu, wubrwr, wrr, bwb, bwbgurb, rrrub, wub, rwgrug, rurb, gwrgrbr, rbrwbb, wwrgbg, urr, bwu, bwgu, rbuuw, bbub, wbbwubu, ggg, wbwwgwb, buwbg, wwwuru, rbg, gubugg, gbwb, www, rbr, ubur, grbbw, wgw, gbw, wgrw, rguuuu, rwb, gbrw, bbbb, gururbb, rbggwu, bub, bgbr, gurb, rrbgrb, rurwb, ugr, wgwrg, ruw, bgrr, gwu, gbr, uwugwru, wru, wr, ugbruw, grbubb, gwg, gwggurg, gugbr, ugubbgb, uwrw, uru, bwr, rgr, rbgrwg, buuw, ugbur, urgub, wurrrgww, rgguuwru, burr, rgw, rbruw, rwbwbbr, bwguw, uub, wgb, rgur, ubb, urwg, rwgww, wgub, rwwrgu, gg, rgug, gub, bggr, uuu, uu, rbug - -bubrbbwggggbuuwbbrwwbbgbwrruugwbwgbwugbugrgu -wugwgwggbgubuuwugugrugwbrrwrbwwguburbbbggw -wbbrrwwbgwbgrrbwuuwrbbrwuwburgbwgwwuruwgbggubwug -ubrwbrbrggrwgbwbwwuwwguurbubwrbgwwrubbrwuwururwrr -gggrwbgwbwuwrubrguwggruubrggwgbrbguwrbrgwuurbwggrggrwwwrb -wuurugububruuwuggwuuwgbwwbrbwgrrrubwbuuwu -grrrwrwgwuwrburruuwwubgubwwwrrrwbwwbggrbrgr -gugrrubugrgrwgggggrbrbrwgguurrwurgrbuggrrbbwgwwwbuu -wubuwgwuwrrubbwuwwrburrwbrrubgurbggbbubrwrguwururgww -ubbrgurrbgbrbwguggugwrrrurwwwugbgrwwbuwrbggrgwwrgwbrwwuugb -bgwbwwwrrgugwwwugruwrbgrbrwbwbrwurbgruwgrggwruururb -guwurburwrguurwbggrrwwugurguwbubbrggrggrubrbbbrwwbgw -wgwuurwrgubguugbbgrrwbwgrwbwrwgbwrwburggrgbbuuw -grbgrruuwrgwwuburwggbubbbgwwrgrbubggwrwbuurwwbuubuwrgwb -bbwuubwuuwwubrwrwgbbrgwwurwbbwwburwuwwwubwrubguubggruwbbg -rrugrwurbugrrbggburwurbbgbuugwwrgbwrbrwbgbgrbwbuuww -gubwuubuwrrwgbuwbwguubuwwbwwrrwgbwbuwgguguwuwbwu -rrbbubrrrwubrrwwbrrbwrbwugbrbrggwbgrwgugwuugg -uurwrgruuwbwuubbrwubrwuuwwgubwgrwbbwgbwwwrbgugrbwururgurb -rbwbbrguggubguurrrrburuwrrubgbgrwrbugrrrgruburwb -grggbggwrubwwwwgrurwgbwuubguwrrrbgubruguub -rrbgbggwbwbrbrrwwgbbggrruwgggurgbrbrwubwuurrbbbwgrbrgrurr -gububbuuguwgbgrwgwgruburwrgwgbbrbrruururrrubrgggwwrbgb -ruurrgggbwbrggwggrurgrwgwbgburwwuwgubggubru -rbrrwgrgrrwrbwbrbggbwrwwuwrbwuwuuwbgbrwrgrwwgbuugbugg -wwbwrrbrrruuwrrwgggruwbubrrwrwuwwurwurbrbrrrw -wbguwwwwwguuuwuubrwgrgwguugrbrruwwrwgugbbb -rrggwbububgbgbguggwwgurbgbwuwwrwrgwuuwruggu -rbguubrrbrgwwgwbgrwrbrggwuwguuuwbwbwwbuwgr -wgbrrguuurgggrwgwgbrbguugrururubruugrrrrgbrgugbg -bgurwgugurwwbuugwurrgurwwrgwgubgrrgururubguuuwugbg -rwbbuwuwbgwbbwurbubwwugbgrbugrbuurbwwbrrwruwrrrwww -rbrburwwbwugrggwrrrruwwgbrgurbwwrrburbbggugbwbu -burgwubggburuuguuwrwbbgbuguguwwburububwrrgw -gggubgbgbwgrggrbrbrgguruurwbrrwubbrbruwgwbu -wggruwwgbwgguwgbgbggrbggbbbwbwwwrgrwwggwrgguuwwgwubgru -bbrwwruugwwbbbwububuuwruburbwbbgrwbburrgbbrub -gwggggwgguuburrgrgugrwgwrbbggggurgugugrgrgwwbr -gggbbugwgbwgwugrrgbwrrwurrgugburrggrruugurbrugrbbbg -gbwrwggbuggurrgubuguubrbgwbrubgwgrbrwubbgrr -bwuwgurrrgwwgguubggwwuurbbrbbwgwggwuwgbbwrwrburgr -wgrwwubbbwbbrggrgugwggbubwwburubwwuwgbbubbrrrrguubguwbuuu -rguuurgbrbrbuubgbuuggrwrwgrwugwrwgbwbbwbbgg -uugbgwguuggwgwrrggggwrbrgbguuguwrbrgwgbwwuubgugwwug -rbuuwwwrrrurgrgbrbbbrrbbwwwgwgwuwgbwggrbbwbruwwwwbg -wwgwuurrurrbbgwuwwbgrbbrbruugwwgugbrbrgguuwrugwuguurbgwrru -wrgwrrbrgugrrwguuguwburwuguuggguwwgbguwrbrbgubrg -wbrugwbubuggrruggbruwrgrwgugwgbwugugbwguwwuubbrwwubggw -grbgrrbrwggurbbrwugrwbbrurwrwbruuggwrggrrgrgwwbuwbgurb -gwwurrbwrgrgurwuugwbwrgrrrwwwrwguwbrbrrurwbwbuggrwb -wubguubgbbwuwbwgwwrrrgbuggwbwwwugrbbgrwubbrgurbuwwrgbur -uurgwruubgrbgubbwrubbggrububgrwwrubwwbrgbbu -uruuwrrbwbbugbbbrwguwbwuguurbwrurugwuwwguwbgb -wurbgrggbggbwwgwwbbgbbrurrrwggrwwrbrbrwrbg -ggwwrrbbwgubrgrgrgwuububrbrggbwwbubgbbgwubrgwrbururu -grrgubuwgwuwuururwwrbgwrgrurrbbrwbgruggrbggbwubrb -grbbrwbrgwgrgubuwbuwbrwuwugrbwuwwguwrbwbwwbuurgbwgw -uuguwrwggruurrggurrbgurbwgggugbgrrguugggwurgrrgubugbugugg -wrwugwwuwwbrubwwuruuwuwrugugbwwgugrrbuuguwggbrguuugwgwbw -uuggwbgurgurbgruruwwrrgubbuwwruruwrurbwugguwbwbgrgg -urwbggurwbwguurugbrbwbrbgwrgrbbrubrubburuwrburww -wbbrbwwwwrbruubggwrurgugbgbbuwgrrrrwugbwwwr -ubugrwubbgbrrrrgguugurgbubwgruuwrrgrbguuuw -rrruwrgwrggwburgugwbwwwbggubuwbwuuurrggwwbwrgwgwggbguubw -rgrgbrguruguwrggbrgruwrrbgbbbwugbrbgrbrrrggrubwuubwwbguw -rbggwgugrbwbrbwurbrugrwbbbwuuuwrwgbbbrwbuwgbwrgggurbwug -rgbuuwurbrwwuwbrugbggwbgbrrwguguwbubrubwguubbubgrgrwu -gwwwgbrguruuwggwugguuwwrbwgbgwuwuuwrgruguwrbugurrwruw -ubbgwurbrwrwggwubggugrgugwurwwbbbrbwbwgubw -wurggrrwbwgbwuguurgwgurgugwbguuurrubuwwggwgggwg -ugbrrwbgurbugwwwbggggggrugububwbguurruggrgrubuuwgurrwbbu -rbrurrwuuugbwwgubugbuugruwwurwrbrrbrbgwurwuuu -rrurrrwrwrrrbbbwguuwrruwguwuggbgguurrbbgggbwruurugurgb -rurwwgugrrrrwbwurugwrugbgwwbuwrbwuwuguggub -ubbgbrgggbuwggwgrgbgrgwbwggrrwbrggwgubuwgrwrbwrg -wggruuggrwbwrwrugwgbuwggwbgrbuggrgguggubbrbruuu -ggurbuwwbbubrguuubgwugugrgrguwrwbrubrgbwwrg -rgrgbbbbwwruubwuwguwgububwgruwgruggbgggbuggwwgwuwwgu -guwugugbrrbrruggwrbwbbgbburubwuuurbugubwrrug -grurwuuwrbguuwgruubwwbuubwbuurgugrgrwbggggwugbgruuurww -wuugguggwrrgruwgbbrrgbwbruubgrbbrburgugurgwggwgggrrur -grgbbrwuwwrrgggwwwuubuggwrbgrgbwrwwrrwrwguwggw -bwuuguwwrbbgrwubbbrwwwrrururbwgbrrrrwbrbgrbgbbu -urggrwbggwubgggrwwgwgbwbggwggrwrrrbgwrruwbbrbguuwrw -bubruuwrrbbruwbbugwuuwbwwbwbbuwubgrububwwrgwubgrggrruwggg -rurgwubgbwrrwuwuuggrrrwwgwrgburbggwwrubuwwuwgwruwurugw -wgbgururuggrbrugbwrguruugguubrgwrgguwgwruwbgrrr -uubwrbrgggrugurgbrwuugrwrwwwrgbrgwwugbwubwgrr -bggugwwurguwbgbwbwbuwwbrruubbgbbrbwbburugrr -wrwbrbgbbrwugrwbbwgbgggbrwurgrwubuggwurrrugu -grrwbgubrrwruubuugguurrrbrbubbrwgrbbguguub -uburuugrwbrurguwgrgwbrrrgrbbgbrbuwrrbugrgbrbbug -wgbuwuuwuruwuwuuwuwgggrbugburubggbgubwgbuuggbur -wuugrbbwuguwuwwuuruwrwbgurrbbwbwwrwuugbwgbuugbgwwrwwwgw -uruburbbbrwbuwrrbrbguuggbguruwwrruburwgwggr -rurbbururbwuwuwrrrbbbwbuuwwwuwrrggurgrrurgruggwuubwrww -wrbrwwggubwbugrrrgbugubgruggurwwrwuwwwrgbrrugbbbubwgwb -gwruggbrbbrwubgbuwwwrugwbubgugwuuugggurwuuwrururugg -bwgububwrrgruwubrrubwwubrwrbgrurwgrrrwbrwbubggw -urwrbwwrubbuwrbbwgugrbrburrgbbuugbbubbbugb -buggwggugwuwwwugggbrrrbbggwwuguguubugbrugu -wbrwwbwuwbwgrubbuurbuurgwubrwwwuruwuurbrubbugwuw -bbrbggbgwuguburwrgrbgrbrbugrgwbwubgwwuwbwbwrbwrwbgb -wuugrubwgggbugrbwgwgurgwuubuubrbrrbbruwbwrwgguwrrrwbwgbbw -wuugwgbwrrgugguwwgbwgbbwgbbgbgwuugbbuuwgrburuuurwbggwgrugu -wgrrwwugbugbbrrrrburgwbgrgubbguuwbbwwrbbbwuurrwbruruugrg -uwwgbwbuuwgwbbbggbwrrbwugwbruruwbbwrrwurwgbgw -gruwuruuuuuurwurwgbbggrubrubbgbrwubrbuwbruwgb -wuugrbubwrbrgwubrggugwbrgbggbbgwurrwgwrwu -grurbbbgbbubgurrrbrrrwwgggguuubuwgbwgwrguwu -ggwgbrwwwgrwgrgubrbugwuwwrbgwwgwwgurrbgburuwrgg -urwbwbbbuurubwgwrwbgrgruugwuuubgbbwwrurwwrbgugwgwbwggrbgub -wwwguggbrbrubgwggbrbbrgbuuuwubbwrbugbbbgruwbwwurggg -wuuurrguggwugbggggwbwbrrwurrbgwgwgbuwubgwubuuwbugwbwbwwwrguw -uwrgubwbrbbbgrwruwgrggbgbrwgubguuuuugwuwgwuubbgrgbgub -uuggugwuwrwgbrwwgrwgwggrbuuwruuwgbrbwrbugururuww -rwwrwurbrgwubbgwgggugbwwrubuggrgggurbrgwrwrwrrbwrwuu -rwbubuwrrgwggrrgrbwwgrgbgurrbrbrggrbuwwbrggwwrwgubrwgub -gurbbwuubbrrgbrurbwrggwuwwbrbuurwbubwwwrubggbwwgbwbrg -uwbuurrwbrgrgrurggwbwgrrwgwrbuwwwuburugugbugwuwwbrrubwu -rbbrwgwrrbbgwbgrwbrrrwwuuugrwbggrugrbburgbugburggbw -uggbgrgruubgggwbrugrgrbbbbwbwbgrbrrgrwbwrgguuwruwrwr -uwbbbuurggrbrurwgubrrrbuwgrgrrrrbwubrwrbbg -wuuurrbwrgwrguuwgrrgbuwggrbbwbuwbgugrwubwugwbrbg -gbrggbbwgurgrrbrugwrbuwgbrwbbbubgwggrurgurrw -rruwuwuuuuugwwbwbrrbbggrruwbgwuuuwgugwurwrg -gugrrbwrbrubuubgggbwbwwugugwrgwguurugbwbwwggrggbgrgrrbrw -ubbubwbuwrugrguggwwrwbbwbrbwrgwwbguwuwgwwwbwwbggbrwb -bbruguwgwbggbuubbgwugubrwbuwuwbgrgwwguwwwggruwgbb -grbugrrgwgbrgbuwrwbbgwbrrbrubrgwurbwwrwruugg -ruuruwbubugrgrbggrgubggbgrwrgwgrgbbubuwwwurbgguwr -rrwbbugbrurwgwbwwbgurgurwwwguugguwrwguwuggwgwb -wwuwgwgburubbbwggrrbbbbwbgbubguwrgbrrwubguurwwgrbgurg -urwbbbruggrwwgbuguuwubgubrbgwubwgwwrwwgubggwwrgbww -gbuurrwrgggwurrwuggbruwurrugrwrrbuwrggbwgugrwrwurwruwu -buuwrwuuuwgwwggbrbgbguuuruuuubbguwgbbbwgwgbuuwrrgbr -ggrrburrbbwrrwbwwubuugrgbugubwubrugbgwugrgu -uuubbwrbrwgrwugugbbgbgwwrrbuguuuburgrruugbwbbrwrbrbbwbrb -uuuuwrubrruguuwbwwugrrruwwburgbbggrgrgwbggubuuwu -wwgrubrrubrwrbgwrwgbguwgbbrgrrubbwbubbburbwgrrrub -bgwrgbrbbbuguugguguuubuugwbrwwurwuubrguwrruuuw -wuugbbbwuuguuwgrrwrwgwwwwwrbwgwrbwguwbrbgugubr -rgruurbggrbubwwbuwwuwuwwrbbgbgbguwrbbrwubgwrbr -uuurrubugrwwuuguwrwwwggubbbrbbbuwbbrggwuggru -wuuuurwgrwggwrruuuwubwubggrbrbwgbrwbgbwwurgbrwu -wuurggrwwbgwuwwrburuwrwrruruubgggbrugwwrwgbuwrbwgbur -ggrubgbbwruggbuuuwgrbwruwgurbwbubwuurubugbwg -rwwggbubrwurgwrbrwuwugbrrwwubuwrwbgguuuuwuwgwurgbwguw -wwbubuubgwwrrgbruubgggrrbuuwrugwbubrwgwbggbgwu -bwwgrrbbubbwrwwwguwbuuwgbbwgbbubrguwbbbgrugubrwg -wgubbgguwgbrbrgrggubrrwwgrrrwugruggrurrbubuugwbgwuuwwwwgr -wwbgwuwggugubgbggwuwgwggrrurrbbrrrrbbbgurwrrbuggg -rubguwgwuwwbuguguggurgwrwgbrbwubgugrurbwwwwbbuwu -rrwrgrwggubrwgwrwwuugrgbbrgrubgwrwuugrgbbgugbgrburrrrrugwu -bbgwugrgwbggrwwwrgbwburrwrwurbwgugwgwgrbuugwwuuwgburggggg -uuwbwguuwrbbuggbwggbgrbuwbgugwuurrurrgbrbuurwbwurrr -wurbwrgrgrrbgbwbwwuuggwuwuwbbwwuwgwgrwggubbgrwggbrrggur -wugrrubbggwurburggurrgggwuwwuguugrggurrgburrbrbrwgwbuwbg -wrugrbrwuwrugrbwurgwruggwrgwuwrgwuuwbwwggwubbgrwggwguwww -grbwguwbbbrwuwggbgurgbgbbwbgwwbwrrwbubrgubbgubgwwurggwbrbg -uubrubgurbgrgruwbwwugbuwgugburuubwuubbbrbbgbuggbbu -bbgbrwbwrwgbwrwwbbbrrugrwgbwbbruugurgggbbrgrguwurubgwbw -wwugrubrwrwburubwwuubbuubgburbbrrrruugbbwwgwbrrbubgbgbuwu -bwugrruubwwrbwbrrrbrrrbbgwrruwwbrgubugrgbwgbbrbgrwgwwwggr -wgugrrbbubgbgrrbbrwguwgbbgbwggwuuurrwgwbwrgwwuuw -wururbruwwwwurwgurwbwbuburrgruuwrbuguggwgubrgrruwwgwbbg -ugrwrrrwguwgrgwruwurbrrgruwubbubrwbwuwwrbbwbbggggr -rwuuguburgwruwrgbbuwggugbwrwuubrugrrruuwgggubbuwbrugrwuu -bgwubwuurwurbgugbuugbgrrugwrbwgrwrrwbgwwwgrguwwububuwbg -urbgbbgrrbuwrrguwrwuwrbbwgubwurugguwugururwruuubbgurrbg -grruugrurgwwbbrgugbburrwrrgwwrggwwrbwwbbwururwrbgguu -uubrwgwuubgbbgwgwuggbuggwguggwgrguwbugwwuubwwb -bbgubwurgurgguwrwrbbubbggwubwgbbwggwuuwugbg -guwbbwguurgwurbrgugwbwwbgugbgwwugubbggwugwrwgrb -wrruwbubwgwgbrwrbbbwuuuuurbwrbgwubrrugubwwrugb -gbuwwbubrrbggrrbugrgruwbrruurrburrgbggwbgwgbbggwggggbgrg -rwrbbbwbggrubuwgrugggbrbgbuwgrbrrbrrbwgwgrbuubgw -burbgruuwbbwuburbgrbuuuuurbuwbububgwwgwbrguubrguugwbbwbw -ubrrrgubrgrgbuuwgrrrwwbruuugbrrwbgbrwgrgww -uuuubwwwuwwbguwwbwgbwrwuwrwgrggrbgrbugbwgbrggwgruwrw -grwgruggbrrwuwrwbggwwgbrrwrwruuggbrurrbubur -uggbrrggwbwbrbwgurbbbrbbgwbrgbgwrbwubrurgw -ururbbrwrrwwbgubrbbuurguuwwgruwgruuurwbbwruurggru -grbwbrubbrgrwgbwubgbuwwuuwwrubruugwwwugguwrgurgrgu -wbwwugggwwurwrbugbbbrrgbgbuwggrggbbgrburbguurb -brwbbgwbgbrbbgwbrruwugwbguurubgwwgurubgrwuwrbguwuwrrgbwubu -rwugwrbgguwuggwgwgrbwbwwgwbwrrgrbbbwubgwggwrwurgwrwb -urrbwwgrruwwwrbrbwrgbrggwbggwrbbwwrggrgbbg -wurwwgwuurbwwgrrbbubbbbgugwwurrggrurbwrbuurbbbb -wggwrgurburuurwgrrurgrbubgrrgbbbwwrgwrurwrwwrgubuugwur -wrgubgbbwbbwruwrrgwgbrruubwgrurgwgrbugbgbggguwbrwuu -bgrwuwbggwwgrwbbugwuuwwwbrgugbbrubgugwbgugrbuwgrrbbubbwrrr -bwuwgwgugggrbwgruugbwruruwwbguggrbgggrggggwwuuuwugbuwuwgu -ruuugrurrrbrrbwuwbubrugwrrbgugbrwuurruwuwrbrbrwubwbwgur -rwugrbuwgwrwrbubggwugbrrgwwubbguuwbgbwuggrrrrggwrbrr -wbbrrruwuwubrgbrgbggrbgbburbugbwrrrubbbbggrurrrwb -ggruwrgubbururbrggurburuwrrwubwbuwwruruwbwuubwbrwwwrwr -wwuurwuwrwbwguuwwrbwgbuurgbbrgrbgwgwggwrgwgwwuuwgrwbuwrgbu -wuburbrwbgwrruurbrrrgwgbgrwgbwwwbbgrugubbrwuwububbrgbw -gwbwwwgrubwrguugbrbrbggguguuuugggwrbgwguwbrwwuuwggw -ubrbruwbururrrgwurrrbrrubbgbwrrggubbuburgwruwggurbrwb -rbrbrwwgwwurburubwgugwwbwuubuwbrwrrgugguwrbrrgbrrbrbw -grgubrrwbbwwwbrbbwbwwbgbbwrwrggbrrrbwwbwgbrgugguwuwubub -rurbrbrggruurgwguugugrrwrbuuwbwrubbbuburrwgruubu -ubrwguwgruuwwbbuwbrubugrgrurwrbwbwgbwrbubrgg -uuwgubuugwrbggbrrwurbbuwrurbubbbruwgrrrbrbwwwg -ububuuwuwwrugrrwrrbgurbrrrggwuwrubbgwwwurbb -bwugrrrgwurwgrbrwurbbbwbrurrwwgwwugbgbwgwuu -bbwgugurwurwbugugrgwburggurwrbbbbgwwbuubububurwuurggwubg -wuugbgbbwuubbbrrgbgubbgrrrbrgugrbwguuwgburrwrguuwgrbg -urbguwwwuugbgwwubwurubrrwbruwwugrgwwburrugugwbwbbu -uguugwgrgwburrrugbwuwgwrbwurgbbbbbwurbbgubwr -wuwrrrwwwwbwburbuburrrbgwuuubbwggrbwuwwgbrbrbwrw -wwbwbuwggbrgbrbwrwgguggwbugggrbwgwrgrgbgrrgbuurwubbr -rugbgwgugrgrugwwgwruurwbrwuwggbbrbrrggwwgwbubbug -wwrgubrgbwbbbrbuubuurbwbgbuugbwgguwrwbugbwrbwuwwrgb -bbrrwurbggbguwgwggrwbbgguubuuurbruwwrwuburbrrg -wuurugrubwrrbbrbbwbubbgburrrbugwuwwrgrrrwwbwg -uwgbugbuugrrwrwwuuuwwwrrgbubwugruubrwburgbbbbruwwgubrugb -wrwwuuwguruwrgrwgurwgrurwggubugrrugwggrbgbuu -guguugwrruwurugwgrbbwrbwwurwgggubugrugruuwrubbbgggwuubgrrr -gwuggrwbrgwuuurrbgbwbwrbrggguuwbubbrbrurwwuwugrubrwrwubwgw -ggrrwwrrggwuguuwgbgbgrbbbbgbwrrgguwgwggurubbugbgw -rbggurrgrrgrrbrbrgrbuggwubwwburrrrgbbwuuuuuwrbwbbgbrbwbwwb -bwugwbwububgbgwrbuuuwrruwgubbgruggburwburbrrwg -urrrbrwbguugwgbwrubguwwrruuguuwrbgwgwrbugwbrggbgrbuguubb -ururrgbbruuuwuubugubugbgwgwbruwgwwgwbrbgbubgwwgurgwb -wbwbrbgwurbgwbuwwbbbrrbbbuwrrgbwgurwugwburrrruwrgb -bbrrbgrrwbwuuuwwruwurwwuwgrwbgwugbgwrrwwwuubggrgrgrgrbwbrb -guguguwguwbggubbgurbugrwruguururuuuuggbrgrwguwubbwww -gwgurbrwguubuuuggwgwrurruwbuwrgwuuwugrrgrgrwrwurubuuuwgwg -rbuguuubrgwwugurgugbuugrrgwbbgubuuurguurruwrurbrrgwgrurrw -bgbbgrbgggwggbwwuggbrrbbgguurgrwuwurwrgwgugwbwwgrgubbb -rrrurgbggwgrrugurbrubbgwwrwuugwuurgrwurwrwbuugwuurgggwbrww -bburbwwrrwuuwuwuwubbwurwbwwrbwrubwugruruguwbu -rwbrwugruuruuwgugbbrrgwurrrburwrbugrubbbrg -rurugubuggrugbwrwwuwrggbrwruuggurrrgwgbgbwugrgbrurr -rrbuuruwrgubbubbgbruubgrrgwrrwwwgubwbuuburwurgurruwwrbbrw -gbggubwgrwwgwbgugbwrwgbwgubbbugggwwwrrbbggbwbwr -uruuugbubwuwrubwgbbrggrwwbguurgwgugbuwrgwbbwru -wuurrrwburwbbugubwwrgruwrrbgrwrrwwbwbbrruggbwuug -bggrwbgbwbbbbwwrurgwbrwuuuubwwbbububrbrgwgrwbrrrbrugrrrgrw -bguguurrgbugrrrwugrgggrbguwgruuwbuwubrurrrgb -ggwgrgbwrrrwuugbwbgbwgbbbburbrwbrwbrrrwggurbwrrrbbbgrbwuu -uugggwruuuururgrggbrwuggruwbgbuguuwwubrbbgwbrgubrgubrgbbww -uubwuuwrgbbrbwrbrbbugbbrbgwwrwwgwggbubwwgwuguwububgbu -gugbwwrwuuwrwrgrubwrwgbrgrguburwbrwwrbbgwuuggwggu -wwwwubbgrbubbwuwgbrgbgwubwubwgrrurwgrrggbgubburwgurgwb -grrrrwugwurbgrgwubbgrwrwbbuwguwgbbggbwuuguuwggrubwwuwggg -rrugggwburrwgbrbwbgwgwuwbubugwwrrwugwrrrwwbub -rbrbgwuwbggggwrbgwgwbgburwgurguguurbguguguwguuwggwgwr -wbbgrwbrrrrrbrurgrbugbuwrubwuwrgrwgurbgruuggurrrw -wrgrgbggrwgugbggrrgwuurrwbgrwgbubrbwrrubrggbrbgrrwuu -wuurbbrgubwrgurrugbwubbrbubruwbugrrbrwuwbbbbbbbwuwuw -wwrggrbbrgbuwgrrgwbugrubguuggugurgwbuuwgbguurgrr -wbwrgugurrwuuwbrrguwbgwurwwbbbgbgrgrwgbbuuwurburrbub -ggrbgwuubgrbgwbbbubugwruubuwwwrbgbwrggggggbubgrbwrw -bugrwrrgbwgugrgbrwburgrgbwbbrrwbgguwrbgwug -wwbrbbrruuwbgwrurgwrrguugwgrbbgbgguugubuwbgwubuwgbruuburw -gbugbuggrggbuwruuwbwbbrggrbubwbbwrrrbwgrguburrbwguwugu -ubgwggubbgguugguruubbugwuuwrbwgugbuuruwgwgwubugr -rguwbrgwbubwggbuubrrwgggggruwuuggwbbrwbgwg -ggbugubrbbrbwbruwwrguwbgruruuuwruugwbuwgwrgwurgwugwwbggub -gwuwburguwwgbrgbguguwwrbwgwurbbgruuuubwuubbwubgbu -bguwwrugrgbbuguwbwrbubbrwbbubuggwbgbbwwwrugbrgwrbwggu -wwwrbuuwuwgwrbwruwuggubrgbgwbuwwrrgguugbruuubrwg -wuuuugrgugugguwwrgurwurbbbrwbwwrgwuuwubgwru -uruuwrwrugrwwwwwrgbbwgbgbrwrwgrwrbbbrggurrrw -bggbbggbrbbrrgrgwurggrwbggrgggwbrbwwuguugb -bbrugbgrurwugwbgbbgrwggbrgbuwubgbrrwbbubwbrb -uruwbbugbwrrrgggbwbrrwgrrbwrgwgbgurrbbgwrrgwbuwgw -wrrrrugwbrgrgwbguwrbbubrwubwbwwwwwwbburbuwgwwbubrugbwguug -wuugrwrwwrwbbgwgugugurrwbbwwwwugwwbuuurbwgwrbbggugwwwwbgur -uuubbrbrrubwgbwbugguwrwbgwrubwbgbbubgrwugbgrwurubgrgbwrr -rbuguwurbrgwbubwwuwggrwuwgrbgburgubrggrgrbwwwbwbu -grrbgwgrbwbrwwbbwgbgbbgrbguurbrwwwgugrgubububbwwbuwugrbbr -wggguwwbwrrburbuwbwgbwbugbwgrurrrbrgubwbwug -uuwugrrwwbguuugrbrrrbuwuubrguwwgrggwrgubbb -ugrbwwgruwbrwbbbrwrruwbwgggugbrrbwwurbggwururgrgurwuw -rwgurbrbgwgugwuuuuwbggwwbbgrwrgrbgwuruuubgu -bgbrwuuuwrrgbbuuwuwwrgrgbrbrubbbbbrwubbwrbgbuuurbrubuwuurb -bwgrbrugwggubgrrgbbrugwbbubwwbwwgwrbgwgrurrrbugwguruwu -ugbggrbwrrwwbbrwuurbgwwbuggwggbugbgrrgwbrurrguwwubgwrgw -uruuwuwwugubwgrugurbggwgrwuuugrgwrrwuwgrrbwrg -wbgwuwbgbwuburguwbugwgggrrurgbgugggrrbwugugrrbbbwuguuuurbg -wgurrbuwuruguurgwgwbgugbruruwwggubwrwuuubgwrwwww -wguwuwugurbrwwuwrgurrbbrwggrrrbruuwbgrwbgwgubuwuwg -gbgugrbgruuwgbgwbgwwbwruwgbrgbggrrgrwrbubrgrbgbr -wuurbbwggrbbgwrgurbwwbuwggrurgrwrbwbrrbwbugubw -wburgrurggrugrbuuggrrbgwrgwbgububgrwbrbugggwrwrgr -ubwwgrubrrrbbwwrgrrubggubrrbgggwwrrrguggbugubrubburubw -uwwururrbubugbwugwrbuwruwwwrwurbrbwrrgguubgguubww -urbrrruwwrrrwgbwwuwubuuwuuwgubbguubwubgurwwgg -gbrbgbbrrrbgbgbgwbbgwgggbwbrwbbuugrgrbuuuwubrgbggrrgwuubw -gububrggbugrrrwrbguggwwwbwuurwggrrbgbgwwru -bbgbbgbuwrwrrubrrurgguwurbwurrbugbwbrrugrwgwbrwrggbbrwww -wuugrbgguuuuubruurgbrbrbubuuwwguwguwurrbbgruubburwwbbrb -grgrgrruwbuuubrurwwwugrrggbbrugwrwgruugburu -rrbbbbrguwrwgrwgwgrbwurgwrrwwbbgbgburbgwgggwb -rwgwbrwwgwbguguwurgwurbwwbrbgrbgbruuwbuwwrgug -wuugwwuubrwrubrbgbrwururuuburwggrurrgbwubwuggubbwbruuuwrwg -ubbgwbugrwwbuwrggrgwgrrwrwwgggurrrgbrwgrwubrwrur -bwububgwwbuugrwrggggrruguwrugwrgbguwrrbgbbbwburruwrgwrurg -rruwguuwwgrgburwrbrbubwgbugwggrurgrwbubrguwuwbbwgrbuww -rrbbrwwbrgwwuwrbwggbubbuwwwwwrbrwbrggrubwg -wrwbwwrbuubwwuubwrwrrbruuwwbwubbbgbgwguwburwuubbg -ururgrwggrgugugbwrbggwgugbrbugrwwgubugbrgburrurbrggg -gwwuwuurwrbbwuubrururruggrgrgwurrrgbrbrbguwrr -rgwwwrwbwrggruuburuugbruuugbgbgwgugwbugubuwwgrrrru -wwrgrbwugurbgrgwgruwrbwuubbwgwggrrggubbwugbwwrrrgbbwuu -gbwurggwgrrguurgwwgrggggbbbwgburwbgrgwwwwbr -ggbbgrbbwbbgwburgggwgwububrbwbguuurggbubuuuwbwggugu -bwbrwuwuuggbubggrwgguwugbgbubuurubwrugubwrurrugguuwrbr -ubrrgrbbrrugubuuubbwuwrwbggrbrbwgrrubbuubwg -uurbbubwuugwguwrbrgwrbbrrruwwgbwwubrgrwubguugrgwuwrg -wugbrwbrgbwugubwrrgurrrgurgwguubwgrwrbggurrbgg -wubwgrugruuuwuugwwrugwgbbgwwruuwuggurwwbrruw -bwrgruurugbwwwwbwrbrrrbrggwbburrwwugrruurbbwwggurbbbr -burrrgurrwrggbuwruwgrwwbwbgugwwwggwwurrbuwbuubbrrrwr -wrrrgrwgwwwrwgrbgrrwuuuwgwrguwwurrrubguwurgbrb -uwgwurwrwgwgbuwbgrrbubwwbrbuurubbrbbrrurubwb -wbrggubgbwbbwgrrurwwburbwruuruwugrbguwrwbuwuwbwwbuwbu -rgurgrwrurbwbwbrruuwgbwrwwbgwuubgwrugwbrwwbwbguwwbgrgrugw -rbggubugwbbggguugrwwbrwgwbgburggrgrbruubwbrbrbrbugguwwrgb -wruuggrbwgwwrgrwggugburwwgwgbrurwwgbgwuubrwbrgugubrwgbwgu -bggwurruuwwrggwbgwuburrwbrwrbwwrrggwuggrburgwguu -uwrrguugbwburwubwbuwbwrwgbgbwurguubbwbubbwbgrrrruub -rugguugbgrgbwrruurrbwbrbrgururrrwguurgrbrwgwu -bggbgrwgruwbugwrugwbwbubbwgubgubwbwwwwbgwrwrgwrwruwgwbuw -gurururrwguwuwbggbggbbrbbwbwgububrrubbrggrwgu -uugwubgugburrgrwurrrgwwgwwwrwubgbgurwrwuwuggbbguwrgugbgu -urbwgbbugrbrruwwwrwgbbbwggrwbbuugurwgwguug -rbrwwwrbrgwrbwbbugwugbguuggbbgbrgbuwwrgbugr -rbrubgwbwbubbgbubwwwrbgrwggbbguugwuguwwgwbbbbu -bwbgurbrbgugwrrbgbuggbrrbwwbrrgbwggrrwubbwbrgwg -grwuggugggurrbwbuuwrrwbgggwbruwwrbwugrrwrgguwwwrbgbu -rguwbbbrgbgrgbbuwurwuwbbgwburuwbugubrwgubrrbbruwbrr -uruwrbruruwbubbrgwwrruwrurbgwrurwwgwrruggrbguwurggggg -bbgbwwbwgbrggrgbgggrgrrwgwgggwgggwuuugrbwrrwbwb -grbrbbgubgbgwuwwgwrbgguuwugbrurwbbugrrbwrru -wgwwgbwgrurgwgruwugrbbbbrgbgbbugwgubwubgwwwur -wgurubbgbbguuwggwgrwbrgwbruwggrbrrwwuugbgwgwbbgggwg -uubbwggugwrwurbwwwuubgrwbbbbwbguwbgbbuwgrrburrwguguuwuuu -urwrgbrgubwwubwurwwrrbwwwgbwwrbuguuguuugrubwbbwwwubr -wwgwuurbburbwbwwwugrbwggugrrwgwugbugubububuurur -rugbwwgwwuwbbwbrguguggugrruubbwrwbrurwwwgwubbrrwwb -wuuuwrgbwruwwurrrgwwrgugwwbubgbbgbggrbrgg -wugbuwgbugwrrrgbbbgrbuuwwuugrbgbgwrgubugggrgrbugbggggwrr -wurwwwgwgbuwggbggwrwbwuwuwuguwwbgggwgrbgwbbbbg -gugrrrrrbrgwubwruwrgbruwwwbbguruggbubrwugwbwwbugbuwww -bbwgrbrggbuburgrwrbwbbbgbwurrruguggurbwbgrwwrr -uguwbbgwugbguggrruggbbrrubuugurgugwuubwbwwr -rwgbuwwbwuwwwbguwgugwgrbbuggubgwrurgrbwgbuugbrwr -wurbubbrgburwguwrrwuggwbrrrugbwbuuruubrrgrguuwwuururwrbww -rbubgwuubrrruubrbwbwuugugurrwugurwgwbwrurb -bbgrwuwwubruuwbwwgrwrbrgruruuwubuguwugbgrbgrwugrwrgbugburu -wuuuwwgrgurbgbwbwbgrrugbrwggrbrrubgwurwurgrbbrbu -rwbbuugrbbwubwubwrurggwwuurbbwggbwuurubrburuguwrrrrw -bgbgugwwubguuuwbuugrbbgwwwgbuwurbrgrgbuwug -wuugwbwgwwubwuuuwuwgwurburggbwwbrwwrwguuruwubwbguuwgw -grrbgrbbugwguwbrburrbrrwgbbrgrruwwurubbuwbgubbwgruwbgbb -bwuuwwururgugbrruugrrrugrgugugbggbbgbbguurrg -rgurgugrwurgbwwbuuwubruwgrwbububuuwruwggwrbbbbbbbwwbb -wuugrbgwwwgburbwrwgugrrgbbbgrgbrwwrgurrbbwbwuugugrgbubbrrrrg -ubrbgrwbuugrgwuurgrwbbbbrurubgurrgwubruubggwwgg -rwwubuuwrrrrwwwbruruuwbuwurwbubrbgrruuuwrwrwg -rggbgubbrgbgrrbgwwwrgwubrubwruugbwrwbbgguugubrubuwg -gbwbwwgubuubgurruwwwuwrrbuurgggurbbbbubbrbgw -gubggbgrbgwbbuwguggwuwgbwrrwwgbrwrrrgwwbgug -wuuruwgubbwuugbbburrugbggwwuruuuubbgruwbrr -gwgwruugwuurubburrrwrbgrurrwrwbbbbbwuuwbugrw -bgbwuwururguwuwbuubwbubugbwbuurwurbwbwgrgbwwwgwbuwubru -bruuwbugbbgrgubrggbggbgwuwbwwwrbwuwwwuuwgwgugrgwbbuwubbguu -wurrbbwuguuugrgurwwbwbgwbbbwbbuuwbbgurwrrbubwbbbbwubb -bwuubrguububbgrubbrgbgwwbgbbbgwbrrgwggwgggurgbwwwwuur -wgwuwbgrrurbwgwugwruwbubwgrrrwbbgrbuwubgbgw -rrbbrrbbwbbubbwrwgwrbrwwbbbbgwbguwgburwgbggr -wuugbbuguruwugwrgwbbuggbwbwwbbuwwuuugwbguwugbwggrbrr -gwgbburbguwuurrrgwbuwrurrbuwugwrgbgwrgwwwwurubbgbwr -wubugurgrbrbbbwrrwurwuuugwuwrbbbwwbrgbbrurrg -wrwugbwwbbbrguwuwugbwwuwgwubbbgrrbrwguuububbggbwwbwwrwbg -bugwuwrwuwwggwwuwrwrbruggrurgwwurrguwugwrwg -rbrgrwbwrurwbubrugwwgguwrrgwgwuwwbrrgrbrgwruwgbgbrbbru -rwwwrwruruuubwgwbgubrbgbgrwwuugruurugbrwbwuuwgbwubggugg -uuwugbbwrwbgrgwubgwwgrubbwrbbwwwbbwbbrbwrrugrgggw -wggubrrbgrggrwgguwggubwwrbrbgbgrrgugbggbgg -uwbuwrrgwguwurbwbbgbrbbrgguuggrrugrwrwbgrrurru -grrrgurgwububbuguwrguuuwrwwurbbwrwwguwwwrggbrbr -wubbgwbwbrbrgbggurgbrwgrubrurbrrrwrurgbbrwurgrrgugbwurrbg -wruwwrwgwrbwubrbwubbbrbuurwwwugwugubuubwgbbbubgrrgbrgbw -rwrrbgwurrgrbgrrrguugwwbgwwugbbgwwwuuuwgugwuwuwuubuw -rgwwugwwurgubwgrbwbwwgbbbubbrggbgrugguuubuuuugbgbgug -gruuruwbwbuururbwrwrgrwuububgwgruggwbwrgwbub -gbbwrurugbbwrurwwbgrruwgbrbrbrrgrwrbbgbgwbgwgwuwrwgrgu -wugwwgrwbgugurwurbggbrwruwuuwurwrbrwgruuubuurur -wgbuwbrbwrgrbwuwggugggguuwgbrbwgrgwrurrurbrgugrgwrb -ggwubgbwwwgrwwbbggwwrrggwguubuggubggguuwbwuwgwuuugrgbuubbb -rguuugwbrbrbwbgrggbubwrwwrrrubwwuugugwgrbuu -ggugbrggwbuwrwgrgwugurrbgruurruwwgrbwwubbuubr -ubgwwggbwbuwbbbbbbggbwrgrbgrgugurwggrubburrubrwrrggrgg \ No newline at end of file diff --git a/2024/gareth/main.go b/2024/gareth/main.go index 9ef4db9..99d93ff 100644 --- a/2024/gareth/main.go +++ b/2024/gareth/main.go @@ -1,7 +1,7 @@ package main import ( - "aoc2024/day09" + "aoc2024/day04" "fmt" "os" "time" @@ -9,11 +9,9 @@ import ( func main() { start := time.Now() - data, _ := os.ReadFile("day09/input.txt") - fmt.Printf("part 1: %d\n", day09.Part1(string(data))) - fmt.Printf("part 2: %d\n", day09.Part2(string(data))) + data, _ := os.ReadFile("day04/input.txt") + fmt.Printf("part 1: %d\n", day04.Part1(string(data))) + fmt.Printf("part 2: %d\n", day04.Part2(string(data))) elapsed := time.Since(start) fmt.Printf("Execution time: %s\n", elapsed) } - -// 6320029754031 diff --git a/2024/go/day10/day10.go b/2024/go/day10/day10.go deleted file mode 100644 index b52a587..0000000 --- a/2024/go/day10/day10.go +++ /dev/null @@ -1,103 +0,0 @@ -package day10 - -import ( - "adventofcode2024/utils" - "adventofcode2024/utils/grid2d" - "adventofcode2024/utils/inputs" - "fmt" -) - -type Position struct { - height int - summit bool -} - -func Part1(input string) int { - score := 0 - i := 0 - grid := inputs.ToGrid2D(input, "\n", "", Position{height: -1}, func(c string) Position { return Position{summit: false, height: utils.MustAtoi(c)} }) - fmt.Println(grid.StringWithFormatter(formatter)) - for y := 0; y < grid.SizeY(); y++ { - for x := 0; x < grid.SizeX(); x++ { - position := grid.Get(x, y) - if position.height != 0 { - continue - } - wipe_summit(grid) - score += getScore(x, y, 0, 0, grid) - fmt.Printf("Trailhead %d (%d,%d) paths: %d\n", i, x, y, score) - i++ - } - } - return score -} - -func Part2(input string) int { - score := 0 - i := 0 - grid := inputs.ToGrid2D(input, "\n", "", Position{height: -1}, func(c string) Position { return Position{summit: false, height: utils.MustAtoi(c)} }) - fmt.Println(grid.StringWithFormatter(formatter)) - for y := 0; y < grid.SizeY(); y++ { - for x := 0; x < grid.SizeX(); x++ { - position := grid.Get(x, y) - if position.height != 0 { - continue - } - wipe_summit(grid) - score += getScore2(x, y, 0, 0, grid) - fmt.Printf("Trailhead %d (%d,%d) paths: %d\n", i, x, y, score) - i++ - } - } - return score -} - -func formatter(p Position, x int, y int) string { - return fmt.Sprintf("%v", p.height) -} - -func wipe_summit(grid *grid2d.Grid[Position]) { - for y := 0; y < grid.SizeY(); y++ { - for x := 0; x < grid.SizeX(); x++ { - pos := grid.Get(x, y) - if pos.height == 9 && pos.summit { - pos.summit = false - grid.Set(x, y, pos) - } - } - } -} - -func getScore(x, y, level, score int, grid *grid2d.Grid[Position]) int { - directions := [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}} - for _, dir := range directions { - x1 := x + dir[0] - y1 := y + dir[1] - nposition := grid.Get(x1, y1) - if level == 8 && nposition.height == 9 { - score++ - } - if nposition.height != level+1 { - continue - } - score = getScore(x1, y1, nposition.height, score, grid) - } - return score -} - -func getScore2(x, y, level, score int, grid *grid2d.Grid[Position]) int { - directions := [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}} - for _, dir := range directions { - x1 := x + dir[0] - y1 := y + dir[1] - nposition := grid.Get(x1, y1) - if level == 8 && nposition.height == 9 { - score++ - } - if nposition.height != level+1 { - continue - } - score = getScore2(x1, y1, nposition.height, score, grid) - } - return score -} diff --git a/2024/go/day10/day10_test.go b/2024/go/day10/day10_test.go deleted file mode 100644 index 5b8f7a2..0000000 --- a/2024/go/day10/day10_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package day10 - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestPart1(t *testing.T) { - r := Part1(`89010123 -78121874 -87430965 -96549874 -45678903 -32019012 -01329801 -10456732`) - require.Equal(t, 36, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`89010123 -78121874 -87430965 -96549874 -45678903 -32019012 -01329801 -10456732`) - require.Equal(t, 81, r) -} diff --git a/2024/go/day10/input.txt b/2024/go/day10/input.txt deleted file mode 100644 index df5bfc9..0000000 --- a/2024/go/day10/input.txt +++ /dev/null @@ -1,56 +0,0 @@ -43217654309879876104563234589896761012345656543098901001 -34108903212368123233472105676787851299856567832187812652 -45677814301457014312986345589876940387765678943046543743 -56789325100876525800345276430105432456566589858956769821 -65438456912963436901236187621234501223455410767349874430 -74321067803451107898547093412012982016764323101210143561 -89412210987430210789698892102123673107895214589723652678 -78601521856521345678721743089034543212345605679854781789 -66789430545678934505430654898745672212236765434765690878 -55676545038943213216765989601654981300129870121012345969 -46543216127657804389834808762347690456789983498141456452 -65454307233456934870126712354878765565210012507230987321 -54567898332110125961015645403969234674323215616546576010 -65658983021001876854324106912452128789321308723455678901 -76543212137892965348933217832141089873410419678964987652 -89862901236543501267018363101033210565566566569873788543 -89871876544345652106529854892123521454479877654012699830 -78100703454278743212434763763014672343287778943210581021 -65210212565189858906763212654985785650198961212101432010 -54321056876012567875898708783476698763267890303215678321 -87012567988703489874345679692676543294986725456574329478 -96543498589876530365210189501987650187675216987687610569 -01234567651010921234501076401236501010564307678596789876 -10389830532329854376542345321545692323403018789455430965 -21456721013456765289031234980098783410912129670320121054 -92505432565421010109120345671107654567823451061210120123 -87615443478302341018750134543234541050765962552121234984 -34322342189219650129665234789432132021894873443010965673 -45451056077828743234574343276543032134703210523457876532 -51069987456943104545987650167898749865612309610765454101 -32678678345652210698092156756547056764303458779890363232 -43010589232781306787183045876532178965210569888211274321 -56923432101090458989254234923421369878934678898302989430 -87889211078764567876360143010030450767125986567401276589 -96676305669653478985478652102141341458076803456564345676 -45435434734522780340349760123456232349883712678178737894 -80127821821011091211299854354987101016792103549069016323 -92346940910329654304587121267807652345013401232108925412 -81055432101458765643671010871018947654324589543987432101 -76567789023467010782532346965425638945695678654986540012 -05498654110567821891047897212334721032786014345678901098 -12387013223489932346156598101549889821012823216765212387 -03456323016576542345692367210678710701296954907854323456 -12345465437895431016781450123467623654387867878985401501 -21089870124326528701670101874345634565676541045621032012 -32189210065017019632543210965236730120545632456734548743 -43498349876298903545450143050159821321234012349895699654 -34567658389101232123469052101567634489234510106786789985 -99876501276788943016578769872498105672105621215021058876 -87035432365897654107689898763343234321678789334134567655 -70129641034781089898791099854232145690569245493254321567 -63238701123654178718982387763156056781410126787655010498 -54345652321073265001073456012047189872328901098546710327 -34568543434589874132569895145438976987437812361239891210 -21879654898678013203456701236327805456546521450967890123 -30968745467654320112345210987610112345545430567856543234 diff --git a/2024/go/day11/day11.go b/2024/go/day11/day11.go deleted file mode 100644 index c040fb0..0000000 --- a/2024/go/day11/day11.go +++ /dev/null @@ -1,76 +0,0 @@ -package day11 - -import ( - "adventofcode2024/utils" - "fmt" - "strconv" - "strings" -) - -func Part1(input string) int { - stones := strings.Fields(input) - for i := 0; i < 25; i++ { - n_stones := []string{} - for _, stone := range stones { - switch { - case stone == "0": - n_stones = append(n_stones, "1") - case len(stone)%2 == 0: - d1 := strconv.Itoa(utils.MustAtoi(stone[0 : len(stone)/2])) - d2 := strconv.Itoa(utils.MustAtoi(stone[len(stone)/2:])) - n_stones = append(n_stones, d1) - n_stones = append(n_stones, d2) - - default: - n_stones = append(n_stones, fmt.Sprintf("%d", utils.MustAtoi(stone)*2024)) - } - } - stones = n_stones - } - return len(stones) -} - -func Part2(input string) int { - stones := strings.Fields(input) - smap := make(map[string]int) - smap2 := make(map[string]int) - - for _, stone := range stones { - smap[stone] = 1 - } - for i:=0;i<75;i++ { - for k, v := range smap { - switch { - case k == "0": - smap2["1"] = smap2["1"] + v - case len(k)%2 == 0: - d1 := strconv.Itoa(utils.MustAtoi(k[0 : len(k)/2])) - d2 := strconv.Itoa(utils.MustAtoi(k[len(k)/2:])) - smap2[d1] += v - smap2[d2] += v - default: - k2 := fmt.Sprintf("%d", utils.MustAtoi(k)*2024) - smap2[k2] += v - } - } - smap = CopyMap(smap2) - smap2 = make(map[string]int) - } - count := 0 - for _, v := range smap { - count += v - } - return count -} - -func CopyMap(original map[string]int) map[string]int { - // Create a new map to hold the copy - copied := make(map[string]int) - - // Copy each key-value pair from the original map to the new map - for key, value := range original { - copied[key] = value - } - - return copied -} diff --git a/2024/go/day11/day11_test.go b/2024/go/day11/day11_test.go deleted file mode 100644 index ed2a8c3..0000000 --- a/2024/go/day11/day11_test.go +++ /dev/null @@ -1,17 +0,0 @@ -package day11 - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestPart1(t *testing.T) { - r := Part1("125 17") - require.Equal(t, 55312, r) -} - -func TestPart2(t *testing.T) { - r := Part2("125 17") - require.Equal(t, 55312, r) -} diff --git a/2024/go/day11/input.txt b/2024/go/day11/input.txt deleted file mode 100644 index c42d5d7..0000000 --- a/2024/go/day11/input.txt +++ /dev/null @@ -1 +0,0 @@ -3 386358 86195 85 1267 3752457 0 741 diff --git a/2024/go/day12/day12.go b/2024/go/day12/day12.go deleted file mode 100644 index 447d522..0000000 --- a/2024/go/day12/day12.go +++ /dev/null @@ -1,146 +0,0 @@ -package day12 - -import ( - "adventofcode2024/utils/grid2d" - "adventofcode2024/utils/inputs" - "fmt" - -) - -type Plot struct { - crop string - visited bool - region int - x int - y int -} - -type Region struct { - plots []Plot - crop string - id int - area int - perimteter int - sides int -} - -func Part1(input string) int { - var val int - region_id := 0 - regions := make(map[int]Region) - grid := inputs.ToGrid2D(input, "\n", "", Plot{}, func(c string) Plot { return Plot{crop: c, region: -1} }) - fmt.Println(grid.StringWithFormatter(formatter)) - for y := 0; y < grid.SizeY(); y++ { - for x := 0; x < grid.SizeX(); x++ { - var region Region - plot := grid.Get(x, y) - if plot.visited { - continue - } - - region_id++ - region = Region{id: region_id, area: 1, crop: plot.crop, sides: 4} - plot.region = region_id - plot.visited = true - plot.x = x - plot.y = y - grid.Set(x, y, plot) - region.plots = append(region.plots, plot) - regions[region_id] = region - - try_neighours(grid, ®ion, x, y) - regions[region.id] = region - } - } - for _, region := range regions { - val += region.area * region.perimteter - } - return val -} - -func Part2(input string) int { - var val int - region_id := 0 - regions := make(map[int]Region) - grid := inputs.ToGrid2D(input, "\n", "", Plot{}, func(c string) Plot { return Plot{crop: c, region: -1} }) - fmt.Println(grid.StringWithFormatter(formatter)) - for y := 0; y < grid.SizeY(); y++ { - for x := 0; x < grid.SizeX(); x++ { - var region Region - plot := grid.Get(x, y) - if plot.visited { - continue - } - - region_id++ - region = Region{id: region_id, area: 1, crop: plot.crop} - plot.region = region_id - plot.visited = true - plot.x = x - plot.y = y - grid.Set(x, y, plot) - region.plots = append(region.plots, plot) - regions[region_id] = region - - try_neighours(grid, ®ion, x, y) - regions[region.id] = region - } - } - for _, region := range regions { - val += region.area * get_sides(grid, region) - } - return val -} - -func formatter(p Plot, x int, y int) string { - return fmt.Sprintf("%v", p.crop) -} - -func try_neighours(grid *grid2d.Grid[Plot], region *Region, x int, y int) { - - directions := [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}} - plot := grid.Get(x, y) - perimeters := 0 - - for _, dir := range directions { - x1 := x + dir[0] - y1 := y + dir[1] - nplot := grid.Get(x1, y1) - - if nplot.crop == plot.crop { - if !nplot.visited { - region.area++ - nplot.visited = true - nplot.region = plot.region - nplot.x = x1 - nplot.y = y1 - grid.Set(x1, y1, nplot) - region.plots = append(region.plots, nplot) - try_neighours(grid, region, x1, y1) - } - } else { - perimeters++ - } - } -} - -func get_sides(grid *grid2d.Grid[Plot], region Region) int { - sides := 0 - corners := [][][]int{{{-1, 0}, {0, -1}, {-1, -1}}, - {{+1, 0}, {0, -1}, {+1, -1}}, - {{-1, 0}, {0, +1}, {-1, +1}}, - {{+1, 0}, {0, +1}, {+1, +1}}} - for _, plot := range region.plots { - for _, o_corners := range corners { - c1 := grid.Get(plot.x + o_corners[0][0], plot.y + o_corners[0][1]) - c2 := grid.Get(plot.x + o_corners[1][0], plot.y + o_corners[1][1]) - c3 := grid.Get(plot.x + o_corners[2][0], plot.y + o_corners[2][1]) - if c1.crop != region.crop && c2.crop != region.crop { - sides++ - } else if c1.crop == region.crop && c2.crop == region.crop && c3.crop != region.crop { - sides++ - } - } - } - return sides -} \ No newline at end of file diff --git a/2024/go/day12/day12_test.go b/2024/go/day12/day12_test.go deleted file mode 100644 index 1602d7c..0000000 --- a/2024/go/day12/day12_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package day12 - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestPart1(t *testing.T) { - r := Part1(`RRRRIICCFF -RRRRIICCCF -VVRRRCCFFF -VVRCCCJFFF -VVVVCJJCFE -VVIVCCJJEE -VVIIICJJEE -MIIIIIJJEE -MIIISIJEEE -MMMISSJEEE`) - require.Equal(t, 1930, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`AAAA -BBCD -BBCC -EEEC`) - require.Equal(t, 80, r) -} diff --git a/2024/go/day12/input.txt b/2024/go/day12/input.txt deleted file mode 100644 index d0b3daa..0000000 --- a/2024/go/day12/input.txt +++ /dev/null @@ -1,140 +0,0 @@ -UUUUUUUUUUUUUUUUUUUDQQQQQQQOOOOOHHSSSSSYYYYYYYYGGGGNNNNNNNNTTTTTTTTTTTTTTDDDDDDDDDDDDDDDDDDNNNCCNJJJJOOHHHDDDDDDDDDDDDDDDDDDXXMBBBBMMCCCCCCC -UUUKUUUUUUUUUUUUUDDDDDDDQQQOOOOOOOOOSSSSSYYYYYYYYGGGGGNNNNTTTTTTTTTTTTTTTTTTTTDDDDDDIIDDDNNNNNCCNJJJOOOHDDDDDDDDDDXDDDDDDDMMMXMMMMMMMMCCCCCC -UUUKKUUUUUUWUUUUUUDDDDDDDDDROOOOOOOWWSSSSYYYYYYYGGGGGGGQNTTTTTTTTTTTTTTTTTTTTTDDDDDDDIDIINNNNLNNNNOOOOODDDDDDDDDDXXDDDDDDDMMMMMMMMMMMMCCCCCC -UUKKUUKKXUUUUUUUUDDDDDDDDDDDDOOOOOOOOYSSSSSYYYYYGGGGGGQQNNTTTTTTTTTTTTTTTTTTTTDDDDDIDIIIINNNNNNNNNNOOOODDDDDDDXDDXXDDDDDDDMMMMMMMMMMMMMMCCCC -UUKKUKKKXXUQQQQUUDDDDDDDDDDDDOOOOOOOOYYYYYYYYYYYGGGGGQQIINTTTTITTTTTTTTTTTTTTTTDDDIIIIIIIINNNNNNNNNOOODDDDDDDDXXXXXXDDDDDMMMMMMMMMMMMFFFFCCC -UKKKKKKKXKAWWWWWDDDDDDDDDDDDDOOOOUUOYYYYYYYYYYYYGGGGQQQQIIDITIIIITTTTTTTTTTTTTDDDDIIIIIIINNNNNNNNLLLLODDDDDDXXXXXXXXDXDDDMMMMMMMMMMMMFFFFCCC -KKKKKKKKKKKWWWWKDPPDDDDDDDWWWOOOOOUUYYYYYYYYYYYYYGRQQQQQIIIIIIIIITTTTTTTTTTTDDDDDDIIIIIIIIINNNNNNNLLLLLDDDDDXXXXXXXXXXDDDDDMMMMMMMMMMFFFCCCC -KKKKKKKKKKWWWWWWDDDDDDDDDSWWWOWOOOOUYYAYYYYYYYYYYYQQQQQIIIIIIIIOIITTTTTTTTTTDDDDIIIIIIIIIIINNNNNLNNNLLLDDDDDDXXXXIXYDDDDDDDMMMMMMMMMMFFFCFCC -KKKKKKKKWWWWWWWWSSDSDDDDDSSWWWWOOOOUYYAYYYYYYYYYYQQQQQQIIIIIIIIIITTTTTTTTTTDDDIIIIIIIIIIIINNNNNNLLLLLLLDDDDDDXXXXIXYDDDQDDDMMMMMMMUMFFFFFFFC -KKKKKKKWWWWWWWWWSSSSDSDSSSSWWWWWOOOUYYYYYYYYYYYYYYQQQQIIIIIIIIIIIIIXXXXXTTTTDIIIIIIIIIIIKINNLNNNLLLLZLLLLDDVDXXXXXYYDDQQDDTMMYYYMMUUUFFFFFCC -KKKKKKKKWWWWWWWWWWSSSSSSSSSSWWWWWWOUYPPPPPYYYYYYQQPQQQQAIIIIIIIIISSXXXXXXXTTDIIIIIIIIIIIIIIILLLLLLLLZZLLLDDDXXXXXXXYYDXXXYMMMYYYYMPUUFFFFFFC -KKKKKKKKWWWWWWWWWWBBBBSSSSSWWWWWWWSSPPPPWWWWWWAYPPPPQAAAAITTIIIIIXXXXXXXUTTXXXIIIIIIIIIIIIIOLLLLLLLLZZLLLLLLLLXXXXYYXXXXXXXXRPPPPPPPPPFFCCFC -KKKKKKDWWWWWWWWWWWDDBBBSSSSWWWWWWWWSSPPPPWWWWWWWPPPPPAAAAIIIIIIIIXXXXXXXXXDXXIIIIIIIIIIIIIIOLLLLLLLZZZZZZLLLLNXNNXNYYYXXXXXXPPPPPPPPPPFFCCCC -KKKKKKWWWWWWWWWWWWBBBBBBBSSSWWWWWWWSSSSPPWWWWWWWPPPPPAAAAAAIIIIIIIXXUUUUUUXXXXIIIIIIIIIIIIIILLLLLLLZZZZZZZLLLNNNNNNYYYXXXXXXPPPPPPPPPPCFCCCC -KTKQQKWWWWWWWWWWBWBBBBBBBSBSWWWWWSSSSSPPPWWWWWWWWPPPPPPAAFAIIYYYUUUUUUUUUUUXXXQQQIIIXXXXXXXXXXLLLLLZZZZZZZZZLNNNNNNYYXXXXXXXPPPPPPPPPPCCCCCC -QQKAQQWWWWWWWWWWBWBBBBBBBBBSWWWSSSSSSSSPPWWWWWWWPPPPPPPPPPYYYYYYUUUUUUUUUUUQXQQQQQQIXXXXXXXXXXLZLLEZZZZZZZZZLNNPNNNYYXXXXXPXPPPPPPPPPPPCCCCC -QQQQQQQWWWWWWWWWBBBBBBBBBBVWWWDDSSSSSSSSSPWWWPPPPPPPPPPPPPYYYYYYUUUUUUUUUUUUUUUUQQIIXXXXXXXXXXLZZZZZZZZZZZZLLUUUUUUUUXXXXXPPPPPPPPPPPPCCCCCC -QQQQQQQQWWWWWWWWBBBBMMMBBBMWWWDSSSSSSSSSSPPPPPPPPPPPPPPPYYYYYYYBYYXXXXXUUUUUUUUUOIIIIZZZZZLLLZZZZZZZZZZZZZZZZIIIIUUUUUXPPXPPPPPPPPPPYYCCCCCC -QQQQQQQQQWWZZZWMMMMMMMMMBMMWWDDSSSSSSSSSSSPPPPPPPPPPPPPPYYYYYYYYYXXXXXXUUUUUUUUUOOIIIZZZZLLLLLZZZZZFFFFFFFFFHHHIUUUUUPPPPPPPYPPYPPPYYYCCCCCC -QQQQQQLQQQWWZZZMMMMMMMMMMMHHWSSSSSSSSSSSPPPPPPPPPPPPPPYYYYYYYYYYXXXXXXXUUUUUUUUUOIIIIIZLLLLLLZZZZZZFFFFFFFFFHHHIUMUUUPPPPPPPYYYYYYYYYYYCCCYC -QQQQQLLQLLZZZZMMMMMMMMMMMMMMWSSSSSSSSSSSPPPPPPPPPBYPPPYYYYYYYYYYYYXXXXXUUUUUUUUUIIIIIIIILLZZZZZZZZZFFFFFFFFFHHFFFFQUULLPPPPPQYYYYYRYYYYYYYYY -QQQLLLLLLLLZZZMMMMMMMMMMMMMMNMSSSSSSSSSSVVPPPPPPBBYYYYYYYYYYYYYYYYYXXXXUUUUUUUUUOIIIIILLLLZZZZZZZZZFFFFFFFFFFFFFFFFUUMMPPPPPYYYYYYYYYYYYYYAA -QQQLLLLLLLLZZZZMMMMMMMMMMMMMMMSSSSSSSSSSVVPPPBBBBBBYYYGGGGGGGGGYYYYYYYYUUUUUUUUUIIIIILLLLZZZZZZZZZZFFFFFFFFFFFFFFFFMMMOPPPPGYYYYYYYYYYYYYYYA -QQLLLLLLLLZZZZMMMMMMMMMMMMMMMSSSSSSSSRRSVVVVVVBBBBBYYYGGGGGGGGGYYYYYYYXUUUUUUUUUIIIIILLLLLZZZZZZZZZZZHHZZHHFFFFFFFFMMMMMPPPYYYYYYYYYYYYYYYYY -QQLLLLLLLLLZZZMMMMMMMMMMMMMMMSSSSSSRRRRSVVVVVBBBBBBBYYGGGGGGGGGYYYYYYEEUUUUUUUUUIIIIILLLLLBZZZZZZZZZZHHHHHHFFFFFFFFMMMMMMPIIYYYYYYYYYYYYYYYY -QQQLLLLLLZZZZZZMMMMMMMMMMMMMFSSSSSSRRRRRRVVVVVVVVBBYGGGGGGGGGGGYYXYYYEEEEEEEEEEEIEIILLLLLLZZZZZZZZZZZZHHHHHFFFFFFFFMMMMMMPPIIYYYYYYYYYUUYYYU -QQQQQQGLLLLPPPMMMMMMMMMMMMMMMSRSSSRRRRRRVVVVVVVVBBBQGGGGGGGGGGGGGGYXXXEEEEEEEEEEEEELLLLLHZZZZZZZZZZZXZHHHHHFFFFFFFFMMMMIIIIIYYYYYYYYYYUUUUYU -QQQQQQQQQLKPPPPIIMMMMMMMMMUUUURRSRRRURRRVVVVVVVVVBQQGGGGGGGGGGGGGGXXXXXEEEEEEEEEJEELLLHHHHHHHHHZZDDZZZHHHHHFFFFFFFFQMMMQQIIIIYUUUUYYYYUUUUUU -JJQQQTQQQKKKPPPPPQQMUUMUUUUUURRRSRUUURRRUUUVVVUVVVQQGGGGGGGGGGGGGGXXXXXEEEEEEEEEJJJLLHHTTHHHHHHYYYDDDZHHHHHFFFFFFFFQMMMQQQQQUUUUUUUUUUUUUUUU -JJJJQTTQKKKPPPPPPQQQUUUUUUUCURRRRRRUUURRUUUVUUUUVVQQGGGGGGGGGGGGGGXXXXZEEEEEEEEEJJJJJHTTTTHHHHHHYDDDDHHHHHHMMQQQHQQQQMQQQQQUUUUUUUUUUUUUUUUU -JJJJJTTTPKKPPPPPPPQUUUUUUUUUUURRRRRRUUUUUUUVUUUUUVVQGGGGGGGGGGGGGGXXXXZEZZZZEEEJJJJJTTTTTTTTHHHHYYYMMHHHMHHMMMQQQQQQQQQQQQQUUUUUUUUUUUVUUUUU -JJJJJTTPPPPPPPPPPPPUUUUUUUUUURRRRRRUUUUUUUUUUUUUUVVUGGGGGGGGGGGGGGXXRRZZZZZZEEDDDJJTTTTTTTTHHHHHYMMMMHMHMMMMMMMQLLLQLQQQQQQUUUUUUUUUVUVVUUUU -JJJJJJJPPPPPPPPPPPUUUUUUUUUUURRRRPRRRUUUUUUUUUUUUVVUGGGGGGGGGGGGGGZRRRRRRRDDDDDDDJJJZTTTTTTTHHYYYYMMMMMHHMMMMMLLLLLLLLQQSQQSSUUUUBBBVVVVVUUU -JJJJJBBPPPPPPPPPPPUUUUUUUUUUUURRRPPCCUUUUUUUUUUUUUUUGGGGGGGGGGGGZZRRRRRRRBDDDDDDDJJJTTTTTTTTYHYYYYYYUMMMHMMMMLLLLLLLLLLLSSSSUUUUBVVVVVVZVUUU -JJJJBBBBPPPPPPPPPPUUUUUUUUUUUURRPPPCCGUUUUUUUUUUUUUUUGGGGGGGGGGGZZZRRRRRRRYDDDDDDJJTTTTTTTTTYYYYYYYYYMMMMMMMMMMMLLLLLLLSSSSSSUUUBVVVVVVVVVUU -JJJJBBBBPPPPPPPPPPUUUUUUUUUUUURUPPPCCCCCCUUUUUUUUUUUUGGGGGGGGGGGZZZRRRRRRRRRRRRDDDJTTTTTTTTYYYYYYYYYMMMMMMMMMMMLLLLLLLLSSSSSSSSSEEEEVVVVVVVU -JJJJBBBBQQQPPPPPPPUUUUUUUUUUUUUUPPCCCCCCCUUUUUUUUUUUUGGGGGGGGGGGZZZRRRRRRRRRRRRDDDTTTTTTTTTTYYYYYYYOYMMMMMMMMMMMMMLLLLLLSSSSSSEEUEEEVEEVQQVQ -JJJJJBBBBQQQPPPPUUUUUUUUUUUUUUPPPPCCCCCCCCCFFUUUUUUUQGGGGGGEEKKKKZZRRRRRRRRRDDDDHDTTTTTTTTTTTTYYYYYYYMMMMMMMMMMMMMMMSSSSSSSSSSEEEEEEEEQQQQQQ -JJJJBBBBBQQQQQPPUHHWUUUUUUUUUUPPPPCCCCCCCCCFFUUEUUMUQGGGGGGEEEKKKZRRRRRRRRRRRHDDHDDDTTBTTTTTTTYYYYYYYYMMMMMMMMMMMMSSSSSSSSSSSEEEEEEEEEEQQQQQ -JJHBBBBBQQQQQPPPPHHWWUUUUUUUUPPPPPCCCCCCCCCCAUUEUUUUQGGGGGGEKKKKPRRRRRRRRRRRRHHHHHDTTTTTNTTTTTTTXYYAAYYMMMMMMMMMMMGGSGGGOOOSOOOEEEEEEEEEQQQQ -JHHHBBBBQQQQQPPPPHHWWUUUWWWUPPPPPPPPCCCCCCAAAAAEEEUUUGGGGGGCKKKKKKKRRRRRRRRRRHHHHHDTWWTTNNNTTTXXXYAAAAMMMMMMMMMMMGGGGGGJOOOOOOEEEEEEEEEEQQQE -HHHHBBBUQQQQQPPPPWHWWWUWWWWUPPPPPPPPPPCCCCAAAAAEEEEEEGGGGGGCKKKKKKKRRRRRRRRRGGHHHHHHWWNNNNNNTXXXXXXAAAAAMMMMMMMMGGGGGGJJOOOOOOEEEEEEEEEEEQEE -HHHHHBBBBQQQPPPPWWWWWWWWWWWWWPPPPPPPPPCCCAAAAAEEEEEECCCCCCCCKKKUKKRRRRRRRRRRRGHHHHHWWDDDNNNNTTXNNNNVAAAAAMWMMMMMGGGGGGJJOOOODEEEEEEEEEEEEEEE -HHHHHHHHUQQUPPPPWWBWWWWWWWWWWPPPPPPPPPCCAAAAAAAEEEEECCCCCCCCCKKKKRRRRRRRREKKKKKDHHHWDDDDNNNNNNNNNNNNNAAAAAMMMMPMMEGGGEOOOOOOEEEEEEEEEEEEEEEE -HHHHUHHHUQQUUPPPSUUWWWWWWWWWWPPPPPPPPPPCJPBAATTTTTEEEERRCCCCRRKKKKRRRRRRRRKKKKKKNHHWDDDDDNNNNNNNNFFNNAAAAAAAAMPMEEGGGEOOOOOOVVVEEEEEEEEEEEEE -HHHHUUUUUUUUUUVVUUWWWWWWWWWWWPPPPPPPPPPPPPAATTTTTTEEEERRUCCCCRKKKKKKRRRKKKKKKDDJDDDWDDDDDNNNNNNNNNNNAAAAAAAAAMMAEEEGGEEOOOOOOVVSESSSSEEEEEEE -HHHHHUUUUUUUUUUUUUWWWWWWWWWWWPPPPPLTTPPPPPPTTTTTTTTTEERRRCCCCRRKKKKKRRKKKKKKKDDDDDDDDDDDDDDNNNNNNNNNAAAAAAAAMMAAEEEEGEEEEEOOVVSSSSSSSEEEEEEE -HHHHHHHHHUUUUUUUUUWWWWWWWWWWLLLLLLLTTPPPPPPTTTTTTTTTEERRPCERRRRRKKKKKKKKKKKMKLDDDEDDDBBBBBBBNNNNNNNNNAAAAAAAAAAAAAEEEEEEEEOOVVSSSSSSSSSSEGGE -HHHHHHHUUUUUUUUUXUWWWWWWWWWWLLLLLLLTTTPPPTTTTTTTTTTTERRRRRRRRRRRRKKKKKKKKMKMLLLDDDDDDBBBBBBBNNNNNNANAAAAAAAAAAAAAAEEEEEEEEEESSFSSSSSSSSSESGG -HHHHHHHUUUUUUUUXXXXWWWWWWLLLLLLLLLTTTTTTTTQTTTTTTTTTTRRRRRRRRRRRKKMMKKKKKMMMMMLLDDDDDBBBBBBBNNNNNNNAAAAAAAAAAAAAAAKKEEEEEEEESSSSSSSSSSSSSSGG -HHHHHUUUUUUUUUUXXXXXWWWXLLLLLLLLLLTTTTTQQQQTTTTTTTTTTTRRRRRRRRRRRKMMMKKKKMMMMMMDDDDDDBBBBBBBNNNNNNNNNAAAAAAAAAKKKKKKEEEEEEEEESSSSSSSSSQSNQGG -HHHKKUUUUKUUUWWXXXXXXXXXLLLLLLLLLLQQQTTQQHQTQQQTTTTTTRRRRRRRRRRRRMMMMKKKKMMMMMMDDDDDDBBBBBBBDNNNNNNNBBBBBBBAAAAKKKKKKKEEEEEEEESSSSSSSSQQQQGG -HHHHKKLKAKKUWWWXXXXXXXXXLLLLLLLLLLQQQTTQQHQQQQTTTTTTTRRRRRRRRRRRRMMMMMKMMMMMMMMQQDDDDBBBBBBBNNNNNNNNBBBBBBBAAAAKKKKKKEEEEEEEESSSSSSSSSQGQQGG -HHHHHKKKKKKUWWWWWXXXXXXXXLLLLLLLLLQVQQQQQQQQQQQTTTTTRRRRRRRRRRRNNMMMMMMMMMMMMMMQQZDDDBBBBBBBBBBBBBNABBBBBBBAAAAKKKKKKEEEEEENEESSSSSSQSQQQQGQ -HHHHKKKKKKKRWWWWWWXXXXXXXLLLLLLIILIQQQQQQQQQQQQQTTTTRRRRRRRRRRRNMMMMMMMMMMMMMMMQQZDDDBBBBBBBBBBBBBBBBBBBBBBAAAAKKKKKKEEEENNNNSSSSSSSQQQQQQQQ -HMHHKKKKKKKRWWWWWXXXXXXXXLLLLLLIIIIQQQQQQQQQQQQQTTTRRRGRRRRRRRRNMMMMMMMMMMMMMMZQZZDDDBBBBBBBBBBBBBBBBBBBBBBAAAAAAKKKKEEENNNNNSSSNSSSQQQQQQQQ -MMKKKKKKKKKWWWWWWXXXXXXXXLLLLLLLLIIIQQQQQQQQQQQQQQTRRRRKKRRRRRNNMMMMMMMMMMMMBBZZZZZZDBBBBBBBBBBBBBBBBBBBBBBAAIIAKKKKKKKENNNNNNNSNSSUUQQQQQQQ -NMMMMKKKKKKWWWWWWWXXXXXLLLLLLLLLLLLIIQQQQQQQQQQQQEEERRIIKRRRRNNNMMMMMMMMMMMMMBZZZZZZZBBBBBBBBBBBBBBBBBBBBBBNIIIKKKKKKKKKKNNNNNNNNSUUQVQQQQQQ -MMMKKKKKKKKWWWWWWXXXXXXXXRRRRJXXXLIIQQAQQQQQQQQQQEEEEEIIIIINNNNNNMMMMMMMMMMMBBZZZZZZZDSSBBBBBBBBBBBBBBBNNNEEIIIKKKKKIKKNNNNNNNNNNNQQQQQQQQQQ -MFMIFFKKKKKKWWWWWWXXXXXXRRRRJJJXXQQQQQQQQQQQQQQQQEEEEEEEIINNNNNNNNNNMMMMMMMBBBBBZZZZZDZZBBBBBBBBBBBBBBBNNNIIIIIKKKIKIINNNNNNNNNNNQQQQQQQQQQQ -FFBIFFFKKKKKWWWWWWXXXXXXWWRRRJJXXXXQQQQQQQQQQQQQQEEEEEIIIINNNNNNNNNNNMMMMMMMBBBCBZZZZZZZBBBBBBBBBBBNNNNNNIIIIIIIIIIIIINNNNNNNNNNNNNQQQQQQQQQ -FFBBBFFFFKKKYWWWXXXXXXVWWWRRRJXXXXXXXQQQQIQQQUQQUUEUEEIIIIIIINNINNNNMMMMMBBBBBBBBBZZZZZZZZBBBBBBBBBIINNNNIIIIIIIIIIIIIIINNNNNNNNNNNNNHQQQQQQ -FBBBBFFFFFFFFWWWXXXXXXXWWWRWWXXXXXXDDPPPQQUUUUUQUUUUIIIIIIIIIIIINNNNMMMMMBBBBBBBBBZZZZZZZZBBBBBBBBBINNNNNIIIEIIIIIIIIIIIINNNNNWNNNNNNHQZQQQQ -BBBBBFFFFFFFEEEQXXXXXXXXWWWWWXWXXXXDDPPZZUUUUUUUUUUUIIIIIIIIIIIINNNNNNMBBBBBBBBBBBBZZZZZZZBBBBBBBBBIIIIEEEEEEIIIIIIIIIIIWWWWWUWWNWNNNNQZZDDD -BBBBBFFFFFEEEEEQXNNXXXWWWWWWWWWWXDDDDQQUUUUUUUUUUUHBIIIIIIIIIIIBNNNNNNBBBBBBBBBBBBZZZZZZZZBBBBBBBBBIIIIIEEEEEIIIIIIIIIIIWWWWUWWWWWNNNNNZDDDD -BBBBBBFFFFFEEEEEENNNNWWWWWXXXXXXXXXXDDDDDDDUUUUUUBBBIIIIIIIIIIIBNNNNNBBBBBBBBBBBBDBBZZZZZZBBBBBBBBBIIIIEEEEEEEEEIIIIIIIWWWWWWWWWWWNNNZZZDDDD -BBBBBBBEFFFEEEEEENENNNWWWWXXXXXXXXXXDDDDDDDDUUUUBBBBBIIIIIIIILBBBNBNNNNBBBBBBBBBBBBZZZZZZZBBBBBIIIIIIEEEEEEEEEEEIIIIIIIWWWWWWWWWWWZZZZZZDDDD -BBBBBBEEEYEEEEEELEEENNWWWWXXXXXXXXXXDDDDDDUUUUUUUBBBBIIIIIIIIIBBBBBBBBBBBBBBBBBBBBBBZZZZZZHHHUUUIIIIIENEEEEEEEEEIIIIMMMWWWWWWWWWWWZZZZZZZZDD -BBBBBBBEEEEEEEEEEEEENWWWWWXXXXXXXXXXDDDDDDDUUUUUUBBBBIIIIIEIIBBBBBBBTTBBBBBBBBBBBBBZZZZZZZHUUUUUUUIIEEEEEEEEEEEEEMMMMMMMWWWWXXXXXWZZIJZZZZDZ -BBBBBBBBBEEEEEEEEEEEELXXXXXXXXXXXXXXDDDDDDUUUUUUUBTUBIIIIIIIBBBBBBBBTBBBBBBBBBBBBBZZZZZZZZUUUUUUUUIIIELEEEEEEEEEEMMMLWWMWXXXXXXXXXZIIIIIZZDZ -BBBBBBBBBEEEEEEEEEEEEEXXXXXXXXXXXXXXDRRDZAUUUUUUUUUUUNNNNIMBBBBBBBBBBBBBBBBBBBBOOBZZZZZZZZZUUUUUUUUUEEEEEEEEEEEEEMMMLLWWWXXXXXXXXXZIIPIZZZZZ -BBBBBBBBBBEEEEEEEEEEEWXXXXXXXXXXXXXXDRRDAAAUUUUUUUUMMMNMNNMBBBBBBBBBBBRNBBBBBVNOZZZZZZZZUUUUUUUUUUUUUEEEEEEEELELLMMLLLWWWXXXXXXXXXZIIIIIIZZZ -BBBBBBLLLLLLEEEEEEEEEEXXXXXXXXXXXXXXWVVAAARAUUUUUUUMMMMMMMMBBBBBBBBBBBRNNBBNNNNOOZZZNNZUUUUUUUUUUUUUUUUEEEEEELLLLMLLLLWWWXXXXXXXXXZIIIIIIZZZ -BBBBBBLLLLLLEEEEEEEEEEXXXXXXXXXXXXXXWVVAAAAAAUUUUUUMMMMMMMMBBBBBBBBBBRRNNNNNNNNOONZZNNZUUUUUUUUUUUUUZEEEEEEEELLLLLLLLVWWWXXXXXXXXXIIIIIIIIIZ -BBBBBBLLLLLLLLXXEEEVEKXXXXXXXXXXXXXXWVVVVVVAAAAUUUUMMMMMMMMBBMBBBBBBBBRNNNNNNNNNNNNNNUUUUUUUUUUUUUUUEEEEEEEEELLLLLLLLLLLWXXXXXXXXXIIIJZZZZZZ -BBBBBBLLLLLLLGLLEEEEEKXXXXXZZZZZZZWWVVVVVVVVVUUUUUMMMMMMMMMMMMBBBBBBBBNNNNNNNNNNINNNNUUUUUUUUUUUUUUJEEEEEEEELLLLLLLLLLLWWXXXXXXXXXJJJJJJJZZZ -BBBBBBLLLLLLLLLLLLLLLLXXXXXXXXXXXXXWVVVVVVVVVUUUUUMMMMMMMMMMMMBBBBBBBBBNNNNNNNNNNNNNNUUUUUUUUUUUUVVICCELEEEELLLLLLLLLLDDWXXXXXXXXXWWJJJJZZZZ -BLLLLLLLOOOLLLLLLLLLLLXXXXXXXXXXXXXWVVVVVVVVVVURRUFRMMMMMMMMMBBBBBBBBNNNNNNVKKNNNNNNNNNNNUUUUIVVVVVICCCEEEEELLLLLLLLLDDDDXXXXXXXXXJJJJJJJZZZ -BLLLLLLLOOOLLLLLLLLLLLCZZZXXXXXXXXXZVVVVVVVVVVRRRRRRRRMMMMMMMIIIBBBBBBBBVVVVVKYNNNNNNNNNNNUIIIIVVVIIIIEEEEELLLLLLLLLLDDDDDDXXXJJJJJJJJJJJZZZ -BLLLLLLLOOOLLLLLLLLLLLLLZZXXXXXXXXXZVVVVVVVVVRRRRRRRRRRRTTTIIIIIIIBBBYYVFVVVVVYYNNNNNNNINNNIIIIVVIIIIEEEEEEEELVLLLLGLLDDDDDXXXJJJJJJJJJJJJJZ -LLLLLLLLOOOLLLLLLLLLLLLNZZXXXXXXXXXZVVVVVVVVRRRRRRRRRRRRRRRNIIIIIBBBBYYVVVVVYYYYYYNNNNNIIIBIIIIVIIIIIBEEEDDKELVVDLLLLDDDDDDDDDJJJJJJJJJJJJJZ -LLLLLLLLOOOLLLLLLLLLLALNZZXXXXXXXXXZVVVVVVVVKRRRRRRRRRRRRRRRRIIIIBBBBBYYYYVVYYYYYYNNNIIDIIIIIIIIIIIIIIDREDVDEVVVDLLDLDDDDDDDDJJJJJJJJJJJJJJJ -LLLLLLLLOOOLLLLBBBLLAAZZZZZZZZZZZZZMVVVVVVVRRRRRRRRRRRRRRXRRIIIIIIIIBYYYYYVVYYYYYYNNNIIIIIIIIIIIIIIIIIDDDDDDDVVDDDDDDDDDDDQDDDJJJJJJJJJJTJJC -LLLLLLLLOOOLLLBBBBLLLAAAAAMZZZZMZZMMMVVVVVVRCCCRRRRRRRRRRRRRIIIIIKKYYYYYYYYYYYYYYYYYNNIIIIIIIIIIIIIIIIDDDDDDDVDDDDDDDDDDDQQDDDJJJJJJJJJTTTJC -LLLLLLLLOOOLLLLBBBLQLAAAAAMMMZZMZMMMVVVVVVVRCCCCCRRRRRRIIIRRRIIIIKKYYYYYYYYYYYYYYYYYYIIIIIIIIIIIIIIISIDDDDDDDVVDDDDDDDDDQQQDQQGJJJJJJJJGGGCC -LLLLLLLLOOOLLLBBBBBBAAAAAAMMMMMMMMMMMVVVVVVCCCCCCRRRRRRIIIIIIIIIIIKYYYYYYYYYYYYYYYOOOIIIIIIIIIIIIIIIGIDDDDDDDDDDDDWWQQQQQQQQQQGJTJJWWWWGGGCC -LLLLLLLLOOOLLLBBBBBBAAAAAAAMMMMMMMMMXXVVVVVCCCCCCCEEERJJJIIIIIIIIKKKKYYYYYYYYYYIIIIIIIIIIIIIIIIIIIIGGGDDDDDDDDDDIWWGQQQQQQQQTTJJTTGGGGWGGGGC -TLLLLLLLLLLLLLBBBBBBBAAAAAAMMMMMMMMXXXVVXVVCCCCCCCEEEEAAAAAIIIIIIKKKKYYYYYYYYYYIIIIIIIGIIIIIIIIIIFGGGGDDDDDDDSDWWWGGQQQQQQQQTTTTTGGGGGGGGCCC -TLLLLLLLLLLLLLCBBBBBBBACAAAMMMMMMMMXXXXXXXCCCCCCCCEEECAUUUUUUIIIIKKKYYYYYYYYYIIIIIIIIIGIIIIIIFFFFFGGGGDDDDDDSSSSWWWGGQQQQQQQTTTTGGGGGGGGGCCC -ZLLLLLLEELLLLLBBBBBBBUCCCMMMMMMMMMMMXXXXXCCCCIIIIIIIIIIUUUUUUHIIKKKKYYYYYYYYYYGXIIIIIIGIIIIIIGGFFFGGGGGDDDDDSSSSSGGGGGQQQQQTTTTGGGGGGGGCCCCC -ZZLLLZZLLLLLLLBBBSBBBBBCMMMMMMMMMMXXXXXXXXCCCIIIIIIIIIIUUUUUUHIIIIKKJYYYYYYYYGGGIIIIIGGGGIIIQGGFGGGGGGGSSSSSSSSSSSSGGQQQQQTTQTTTTGGGGGGCCCCC -ZZZEZZZZZLLRLLCCKCBBCCCCMMMMMMMMMMMXXXXXXXCCCIIIIIIIIIIUUUUUUHHHIIKKJYYYGGAGGGGGGFGIWGGGGIIGGGGGSSSSSSSSSSSSSSSSSSGGGQQQQQQQQQTTGGGGGGGCCCCC -ZZZZZZZZZZLLLLSCCCCCCCCCCMNNMMMMMEEXXXXXXXXCCIIIIIIIIIIUUUUUUHQHHHJJJJJYGGGGGGGGGFGGGGGGGGGGGGGGSSSSSSSSSSSSSSSSSWWWGWQQQQQQQQQTGGGGGGCCCCCC -ZZZZZZZZSSLLLSSSCCCCCCCCMMNMMMMMMMMXXXXXXCCCTIIIIIIIIIIUUUUUUHQHHJJJJJJGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSSSSSSWWWWWWWWWQWQQQQWQTTGGGGGGGGCCCC -ZZZZZZZZSSSSSSSSSCCCCCMMMMMMMMMMMMMXXXXXXCXXCIIIIIIIIIIQQQQQQQQQAJJJJJJJJJGGGGGGGGGGGGGGGGGGGGGGGGGGGGGSSSSSSSSWWWWWWWWWWQWWWQQGGGGGGGGGCCCC -ZZZZZZZSSSSSSSSSSCCCCCMMMMMMMMMMMMMXXXXXXXXXXIIIIIIIIIIIIQQQQQQAAEAJJJJJJJGGGGGGGGGGGGGGGGGGGGGGGGGGDDDSSSSSSSSWWWWWWWWWWWWQQQQQGOGGGGGGCCQC -ZZZZZZZZSTTTSSSSSCCCCCCCMMMMMMMMMMXXXXXXXXXXXXXWWIIIWAIIIQQAPQQAAAAAJJJJGGGGGGMGGGGGGGGGGGGGGGGGGGGGDDDDSSSSSSSAWHWHWWWWWWWQQQQQGGGQQGGGGCQQ -ZZZZZZZZZTTTSSSTSSCCHCCMMMMMMEMMMAXXXXXXXXXXXXWWWIIIIIIIIIAAPPPAAAAAJJJMGGGGGGMMMGGGGGGGGGBBGGGEGGGGDDBDSSSSSSSHHHHHWWWWYWWQQQQQQQQQQQQGQQQQ -ZZZZZZZOZTTTTTTTTSCCHCHMMMEEEEEMAAXXXXXXXXXXXXWIIIIIIIIIIIAUAPAAAAAAJJJMGGGMMGMMMGGGGGGGGGGGGGEEGGGGSSSSSSSSSSSHHHHHWWWYYQQQQQQQQQQQQQQQQQQX -ZZZZZZZOZZTTTTTTTTTHHHHHMEEEEEEEEAAXXGXJXXXXXXWIIIIIIIIIIIAAAAAAAAAAAMMMMMMMMMMMGGGGGGGGGGGGGWEEEEEESSSSSSSSSSSHHHHHHHWHHHHQQQQQQQQQQQQQQQQQ -ZZZZZOOOTTTTTTTTTTTTTTEHEEEEEEEEAAXXXXXJXCXXXIIIIIIIIIIIIIAAAAAAAAAAMMMMMMMMMMMMGGGGGGGGGGGGGWEEEEEESSSSSSSSSSSHHHHHHHHHHHHQQQQQQQQQQQQQQQQQ -ZZZZZOOOTTTTTTTTTTTTTTEEEEEEEEEEEAXXAAAJACCCCIIIIIIIIIIIIIAAAAAAAAAAAAMMMMMMMMMMMMMGGGGGGGGGGEEEEEEESSSSSSSSSSSHHHHHHHHHHHHQKKQQQQQQQQQQQQQQ -OOOOOOOOOOTTTTTTTTTTTUUESSSSSSSEAAAAAAAAACCCCIIIIIIIIIIIIIFAAAAAAAAAAAMMMMMMMMMMMGGGGGGUGGGEGEEEEEEESSSSSSSSHHHHHHHHHHHHHHHHKKKKQQQQQQQQQQQQ -OOOOOOOOOOTTTTTTTTTTUUUESSSSSSSEAAAAAAAAACCCCIIIIIIIIIIIIIAAAAAAAAAAAMMMMMMMMMMMMMGGGGGGGEEEEEEEEEEESSSSSSSSXXHHHHHHHHHHHHHHKKKQQQQQQQQHQQQQ -OOOOOOOOOOOTTTTTTTTTCCCESSSSSSSZEAAAAAAAEEECCSIIIIIIIIIISSAAAAAAAAAAMMMMMMMMMMMMMMGGGGOOEEEEEEEEEEEESSSSSSSSXXXHHHHHHHHHQHHHHKNPPIQQQQQHQHHH -OOOOOOOOOOTTTTTTTTTTCCCCSSSSSSSEEEAAAACEEEESSSIIIIIIIIIISSAAAMMAAAAAMMMMMMMMMMMMMMXXGGJEEEEEEEEEEEXBSSSSSSSSXXXXHHHHHHHQQHHKKKNNPIIIQIIHHHHH -OOOYYYYYOOTTTTTTTTTTBCCCSSSSSSSEHHHAAAEEEEESSSIIIIIIIIIITGGAMMMAAAMMMMMMMMMMMMVVVMXXXJJJJEEEEEEEEEXXSSSSSSSSXXXXXHHHHHHHHHKKKKKNNIIIIIIHHHHH -OOYYYYYYOTTTTTTTTTUTCCCCSSSSSSSEHHHAAAEEEEEESSIIIIIIIIIITGGAMMMAAAAAMDMMMMMMMMVVXXXXXJJJJEEEEERRREXXSSSSSSSSXXXXXHHTHTKKHHKKKKKNNTIIIIIHHHHH -OOYYYYYYOYTTTTTTTCUCCCCCSSSSSSSYYHIIIIIEEEEESSIIIIIIIIIITTTTMMMMAAADDDDMMMMMMMVVVVXXXJJJJJEEEERRRXXXBBBXXXXXXXXXHHHTTTTKKKKKKKNNNTIIIIIIHHHH -YYYYYYYYYYTTTTTTTCCCCCCCSSSSSSSYYHIIIIIIEEEEESSSSSSSSSTTTTTJTYYYAADDDDDDVVMVVVVVVVJJJJJJJJEEEEERRXXXBBXXXXXXXXXXGGGTTTTTKKKNNNNNIIIIIIIIIHHH -YYYYYYYYYYYYTTTYYYCCCCCCSSSSSSSSSPIIIIIEEEEEESSSSSSSTSTTTTTTTTYYYADDDDDDVVVVVVVVVVJJJJJJJJEEEERRRXXXXXXXXXXXVXVVVVGTTTUTKNNNNNNNIIIIIIIIIHHH -YYYYYYYYIIYYYYYYYCCCCCCCCCSSSSSSSIIIIIIIEEEEEEESSSSSTTTTTTTTTTTYYYDDDDDDVVVVVVVVVVVVVJJJJJEEERRRRRRXXXXXXXXXVVVVVGGTTTTMNNNNNNNNIIIIIIIIIHHH -YYYYYYYYHHHHHHYYYYCCCCCCCCSSSSSSSIIIIIIEEEEESESSSSSSTJTTTTTTTTYYYYYDDDDDDVVVVVVVVVVJJJJJJJEEERRRRRRRRXXXXXXXVVVVVVVVATTNNNNNNNNNIIIIIIIIHHHH -YYYYYYYYYHHHHHHYYYCCCCCCCCSSSSSSSIIIIIGEEEEESSSSSSSSSYTTYTYYYYYYYYYDDDDDDDDVVVVVVVVJVVVVJEEERRRRRRRRRXRRXXXXVVVVVVVVAAAANNNNNNNNNIIIIIIIIHHH -YYYYYYYDYHHHHHYYYYCCCCCCCCSSSSSSSIIIGGGEEEEEESSSSSSSSYYYYYYYYYDDDYYYDDDDSDDDVVVVVVVVVVVVVEEERRRRRRRRRRRRXXXXVVVVVVVVAAAANNNNNNNNNNIIIIUUIIHH -YYYYYYYYHHHHHYYYYYCCCCCCCCSSSSSSSIIIIIIIPEEEEESSSSSYYYYYYYYYYYDDDDSSDSSSSVVVVVVVVVVVVVVVEEEERRRRRRRRRREEXXXVVNVVVVVVAAAANNNNNNNNNNIIIUUUUUHH -SYSSSSYYHHHHHHYYYYCCCYCHCCSSSSSSSSSSSIHPPEEEEEEESSSYYYYYYYYDDYDDDDSSSSSSSSSVVVVVVVVVVVMMMMMMKMRRRRRRRRTEXXXXTVVVVVVAAAAAANNNNNNNNNNUIUUUUUUH -SYSSSSYYHHHHHHYYYYYYCYIHHCSSSSSSSSSSSHHHHEEEEEESSSSAYYYYYYYDDDDDDDFSSSSSSSSSVVVVSVVMMMMMMMMMKMMRRRRRRTTEETTTTTTVVVAAAAAAANNNNNNNNNNUUUUUUUUU -SSSSSSSSSHHHHHYYYYYYYYYHHHHSSSSSSSSSSHHHHEEEEEEAASSSHYYYYYYDDDDDFFFSSSSSSSSSSVVVSVVMMMMMMMMMMMMRTRRRRTTTTTTTTTTVAAAAAAAAANNNNNNNNNNUUUUUUUMU -SSSSSSSHHHHHHHHHYYYYYYYYHHHSSSSHHIIIHHHHEEEEEAAAAASHHHHSYYYDDDFFFFSSSSSSSSSSSSSSSVVMMMMMMMMMMMAATRRRTTTTTTTTTTUVAAAAAAAANNNNNNNNNNNUUUUUUUUF -SSASSSSSSHHHNHHHZZJJYTYHHHHHHHHHHHIIHHHHHHEEEAAAAAAATHXXXYYADDFFFFSSRSSSSSSSSSSSVVVMMMMMMMMMMMAATTTTTTTTTTTTTTTAAAAAAAAAAUNNNNNUNUUUUUUUBBBF -SSASSSSSSHHHHJHZZJJJYYYHHHHHHHHHHHHHHHHHHHGEEAAAAAAAAXXXXYYAAAAAAAASASSSSSSSSSSSSSVVMMMMMMMMMAATTTTTTTTTTTTTTTAAAAAAAAAAUUNNUNUUUUUUUUUBBBBB -SAAAASSSSBHHVJHHJJJJYYHHHHHHHYYHHHHHHHHHHHGAAAAAAAAAAXXXXXYYAAAAAAAAAAASSSSSSSSSVVVMMMMMMMMMMAATTTTDTTTTTTTTTTTAAAAAAAAAUUUUUNUUUUUUUUBBBBBB -SAAAAASBBBBJJJJHJJJJYYHHHHHHYYYYYHHHHHHHHAAAAAAAAAAAAXKXXXIRAAAAAAAAASSSSSGASSSSVVVTMMMMMMMMAAAATTMDTTTTTTTXZTTAAAAAAVAAVVUUUUUXUXUUUUUHHBBH -AAAAAASSSBJJJJJJJJJHHHHHHHHYYYYYYYYYHHHHHAAAAAAAAAAAAXXXNIIRRAAAAAAAAAAAASSAASSSSVTTMSMMMMMMMAAATTMMMMTTTXTXXTXAAAAAAVVVVEUUUUUXXXUUUUUUHHHH -AAAAAJRJJJJJJJJJJJJHHHHHHHYYYYYYYYYYHHHHHAAAAAAAAAAAAJIIIIIRAAAAAAAAAAAAAASAAATSRVTTMMMMMMMXXXAAATPMMMKXXXXXXXXXAAAAAVVVVUUUUUXXXXXXXUUUHHHH -AAAAARRTTJAAJJJJJJJJHHHHHHHYYYYYYYYYHHHAAAAAAAAAAAAAAJIIIIIIIIIAAAAAAAAAAAAAATTTVVTTMMMGMZZXXXXAAMMMMXXXXXXXXXXXAAAVVVVVVUUUUXXXXXXXXXHHHHHH -AAAAARRRJJAJJJJJJJJJHHHUUUUUYYYYYYYYYYEAAAAAAAAAAAAAAAYYIIIIIIIIAAAAAAAAAAAAAATTTTTTWMMMMZZXXXAAAAMMMXXXXXXXXXXXAAAVVVVVVUVVUXXXXXXXXXXHHHHH -AAAAAAARJAAJJJJJJJJJMPPUUUUUYYYYYYYYYYAAAAAAAAAAAAAAAAAAIIIIIIIAAAAAAAAAAAAAAATTTTTWWDDDMXXXXXXXAAAXXXXXXXXXXXXXAAVVVVVVVVVVUXXXXXXXXHHHHHHH -AAAAAARRRAAAJJJJJJJJPPPUUUUUYYYYYYYYYYAANNAAAAAAAAAAAIAIIIIIIIIAAISAIIIAAAATAATWWTWWWWDDXXXXXXXXXXXXXXXXXXXXXKKKAAVVVVVVVVVVUXXXXXXXXHHHHHHH -AAAAAGGRRAAAAAJJPPPJJPPUUUUUYYYYYYYYYYYOOOOROSSAAAIAAIIIIIIIIFIIAIIIIIIAAOOOAATTWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXKAAKVVVVVVVVVVVTXXXXXIIXXHHHHH -AAAAAGGGRRRAAAAAAPPPPPPPPPYYYYYYYYYYYYOOOOOOOSSSSAGGGGGIIIIIFFIIIIIIIIAAOOOOOOTTWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXKKKKKKVVVVVVVVVVXXXXXXXEXXHHHH -AAAAAGGARAAAAAAPPPPPPPPPPPPPYYYYYYOYYYOOOOOOOSSSSGGGGGIIIIIIIFIIIIIIIIAAOOOOOOOOWWWWWWIIXHXXXXXXXXXXXXXXXXXXXXKVVVVVVVVVVVVVVVXXXXXXXEXXHHHH -AAAAAGGAAAAAAAAPPPPPPPPPPPPPPPYYOOOOOYOOOOOOOOOSSGGGGGGIIIIIIIIIIIIIIIOOOOOOHHHHWWWWWWIIXHXXXXXXXXXLXXXXXXXXXXXZZVVVVVVVVVVVVVVXXXXXXXXXHHHH -AAAGGGAAAAAAAAPPPPPPNNNPPPPPPPPPPOOOOOOOOOOOOOCGGGGGGGGGIIIIIIIIIIIIIIIQIOOOHHHHHWWWWWWIJHHXXXXXXXXXXXXXXXXXXHXZZVVVVVVVVVVVVVVXXXXXYYXXHHHH -GAAGGGGAAAAAAAAAPJJNNNNPNPPPPPPPNOOOOOOOOOOOOOCGGGGGGGGGGGIIIIIIIIIIIIIIIOHHHHHHHWIWIIIIJHHXXXXXXXXXXXXXXXZZXXZZZVVVVVVVVVVVVVVYXYYYYYYYEEHH -GGGGGGGGAAAAAAAAAJJNNNNNNPPPPPPPPOOOOOOOOOOUOOOGGGGGGGGGGINIIIIIIIIIIIIIIIIHHHHHHHIIIIJJJHHXXXXXXJXXXXXXXXXZZZZZVVVVVSSSZVVZVVVYYYYYYEEEEHHH -GGGGGGGGGAAAAAAAAJJNNNNNNPPPPPPPPPPOOOOOOOOUUUGGGGGGGGGGGIIIIIIIIIIIIIIIIHHHHHHHHIIIIIIJJJHXXXXXXXWXXFXXXXZZZZZZVZZVVVVVZZZZZVYYYYEYYEEAEHHH -GGGGGGGGAAAAAAAAAAJNNNNNNNPNPPPPXXXOOOOOOOOOUUGGGGGGGGGGGGIIIIIIIIIIIIHHIIHHHHHHHHHIIIIJJJHXXXXXXXWXFFFXXXXZZZZZZZZZZZVZZZZZZZYYYYEEEEEEHHHH -GGGGGGGGGGGAAAJJJJJNNNNNNNNNPPPXXXXOOXXOOOOOGGGGGGGGGGGGGGGGIIIIIIIIIIIHHHHHHHHHHHHHHHHHHHHHXXXXXXXXXFFFFXXZZZZZZZZZZZZZZZZZZZZZYYEEEEEHHHHH diff --git a/2024/go/day13/day13.go b/2024/go/day13/day13.go deleted file mode 100644 index 5f90897..0000000 --- a/2024/go/day13/day13.go +++ /dev/null @@ -1,58 +0,0 @@ -package day13 - -import ( - "adventofcode2024/utils" - _ "adventofcode2024/utils/grid2d" - _ "adventofcode2024/utils/inputs" - "regexp" - _ "fmt" - "strings" -) - -func Part1(input string) int { - val := 0 - machines := strings.Split(input, "\n\n") - pattern := `Button A: X\+(\d+), Y\+(\d+)\sButton B: X\+(\d+), Y\+(\d+)\sPrize: X=(\d+), Y=(\d+)` - re := regexp.MustCompile(pattern) - for _, machine := range machines { - matches := re.FindStringSubmatch(machine) - a := utils.MustAtoi(matches[1]) - b := utils.MustAtoi(matches[2]) - c := utils.MustAtoi(matches[3]) - d := utils.MustAtoi(matches[4]) - X := utils.MustAtoi(matches[5]) - Y := utils.MustAtoi(matches[6]) -// fmt.Println(matches) - B := (Y*a - X*b)/(a*d - c*b) - A := (X - c*B)/a -// fmt.Printf("A: %d B: %d\n", A, B) - if (A*a + B*c == X && A*b + B*d == Y) { - val += A*3 + B - } - } - return val -} - -func Part2(input string) int { - val := 0 - machines := strings.Split(input, "\n\n") - pattern := `Button A: X\+(\d+), Y\+(\d+)\sButton B: X\+(\d+), Y\+(\d+)\sPrize: X=(\d+), Y=(\d+)` - re := regexp.MustCompile(pattern) - for _, machine := range machines { - matches := re.FindStringSubmatch(machine) - a := utils.MustAtoi(matches[1]) - b := utils.MustAtoi(matches[2]) - c := utils.MustAtoi(matches[3]) - d := utils.MustAtoi(matches[4]) - X := utils.MustAtoi(matches[5]) + 10000000000000 - Y := utils.MustAtoi(matches[6]) + 10000000000000 -// fmt.Println(matches) - B := (Y*a - X*b)/(a*d - c*b) - A := (X - c*B)/a -// fmt.Printf("A: %d B: %d\n", A, B) - if (A*a + B*c == X && A*b + B*d == Y) { - val += A*3 + B - } - } - return val -} \ No newline at end of file diff --git a/2024/go/day13/day13_test.go b/2024/go/day13/day13_test.go deleted file mode 100644 index 5778833..0000000 --- a/2024/go/day13/day13_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package day13 - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestPart1(t *testing.T) { - r := Part1(`Button A: X+94, Y+34 -Button B: X+22, Y+67 -Prize: X=8400, Y=5400 - -Button A: X+26, Y+66 -Button B: X+67, Y+21 -Prize: X=12748, Y=12176 - -Button A: X+17, Y+86 -Button B: X+84, Y+37 -Prize: X=7870, Y=6450 - -Button A: X+69, Y+23 -Button B: X+27, Y+71 -Prize: X=18641, Y=10279`) - require.Equal(t, 480, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`Button A: X+94, Y+34 -Button B: X+22, Y+67 -Prize: X=8400, Y=5400 - -Button A: X+26, Y+66 -Button B: X+67, Y+21 -Prize: X=12748, Y=12176 - -Button A: X+17, Y+86 -Button B: X+84, Y+37 -Prize: X=7870, Y=6450 - -Button A: X+69, Y+23 -Button B: X+27, Y+71 -Prize: X=18641, Y=10279`) - require.Equal(t, 480, r) -} diff --git a/2024/go/day13/input.txt b/2024/go/day13/input.txt deleted file mode 100644 index 3b53baf..0000000 --- a/2024/go/day13/input.txt +++ /dev/null @@ -1,1279 +0,0 @@ -Button A: X+17, Y+68 -Button B: X+62, Y+15 -Prize: X=4507, Y=17764 - -Button A: X+19, Y+95 -Button B: X+59, Y+23 -Prize: X=6550, Y=10174 - -Button A: X+20, Y+58 -Button B: X+60, Y+11 -Prize: X=3140, Y=4691 - -Button A: X+92, Y+31 -Button B: X+49, Y+87 -Prize: X=6599, Y=2717 - -Button A: X+46, Y+72 -Button B: X+29, Y+12 -Prize: X=18754, Y=13304 - -Button A: X+42, Y+33 -Button B: X+19, Y+81 -Prize: X=3531, Y=6144 - -Button A: X+80, Y+13 -Button B: X+20, Y+75 -Prize: X=1860, Y=3818 - -Button A: X+79, Y+14 -Button B: X+56, Y+66 -Prize: X=6740, Y=3830 - -Button A: X+18, Y+85 -Button B: X+70, Y+36 -Prize: X=5358, Y=5861 - -Button A: X+42, Y+44 -Button B: X+52, Y+14 -Prize: X=6310, Y=4870 - -Button A: X+56, Y+90 -Button B: X+88, Y+41 -Prize: X=9208, Y=8572 - -Button A: X+95, Y+67 -Button B: X+13, Y+71 -Prize: X=3065, Y=6799 - -Button A: X+70, Y+22 -Button B: X+13, Y+57 -Prize: X=17469, Y=5153 - -Button A: X+36, Y+65 -Button B: X+79, Y+27 -Prize: X=5764, Y=4394 - -Button A: X+20, Y+46 -Button B: X+67, Y+29 -Prize: X=4637, Y=10139 - -Button A: X+47, Y+72 -Button B: X+42, Y+20 -Prize: X=1495, Y=10984 - -Button A: X+37, Y+96 -Button B: X+70, Y+53 -Prize: X=3563, Y=6029 - -Button A: X+20, Y+59 -Button B: X+62, Y+13 -Prize: X=5550, Y=18133 - -Button A: X+16, Y+52 -Button B: X+70, Y+61 -Prize: X=2400, Y=5136 - -Button A: X+70, Y+32 -Button B: X+22, Y+53 -Prize: X=320, Y=18668 - -Button A: X+47, Y+78 -Button B: X+78, Y+17 -Prize: X=6317, Y=6323 - -Button A: X+48, Y+33 -Button B: X+20, Y+89 -Prize: X=4296, Y=7017 - -Button A: X+17, Y+53 -Button B: X+43, Y+14 -Prize: X=19634, Y=5590 - -Button A: X+41, Y+95 -Button B: X+78, Y+30 -Prize: X=6816, Y=6900 - -Button A: X+14, Y+75 -Button B: X+65, Y+12 -Prize: X=10103, Y=12239 - -Button A: X+84, Y+69 -Button B: X+23, Y+95 -Prize: X=6178, Y=11620 - -Button A: X+57, Y+88 -Button B: X+70, Y+33 -Prize: X=4926, Y=6479 - -Button A: X+84, Y+34 -Button B: X+29, Y+78 -Prize: X=6138, Y=2882 - -Button A: X+32, Y+60 -Button B: X+62, Y+29 -Prize: X=13264, Y=10848 - -Button A: X+81, Y+69 -Button B: X+13, Y+61 -Prize: X=7893, Y=11217 - -Button A: X+98, Y+12 -Button B: X+85, Y+85 -Prize: X=8352, Y=3708 - -Button A: X+22, Y+91 -Button B: X+73, Y+39 -Prize: X=1457, Y=4186 - -Button A: X+38, Y+56 -Button B: X+97, Y+16 -Prize: X=9339, Y=3480 - -Button A: X+46, Y+13 -Button B: X+36, Y+71 -Prize: X=14918, Y=17793 - -Button A: X+27, Y+74 -Button B: X+64, Y+13 -Prize: X=11637, Y=3584 - -Button A: X+18, Y+58 -Button B: X+35, Y+16 -Prize: X=13544, Y=2948 - -Button A: X+32, Y+99 -Button B: X+99, Y+16 -Prize: X=7159, Y=4441 - -Button A: X+86, Y+49 -Button B: X+12, Y+49 -Prize: X=13188, Y=6269 - -Button A: X+19, Y+72 -Button B: X+37, Y+27 -Prize: X=1001, Y=3114 - -Button A: X+80, Y+39 -Button B: X+36, Y+55 -Prize: X=3848, Y=4797 - -Button A: X+32, Y+77 -Button B: X+82, Y+21 -Prize: X=4120, Y=4977 - -Button A: X+41, Y+64 -Button B: X+41, Y+16 -Prize: X=1829, Y=5360 - -Button A: X+67, Y+45 -Button B: X+13, Y+29 -Prize: X=19806, Y=5416 - -Button A: X+84, Y+13 -Button B: X+37, Y+55 -Prize: X=2852, Y=3792 - -Button A: X+70, Y+37 -Button B: X+21, Y+52 -Prize: X=8089, Y=10953 - -Button A: X+16, Y+57 -Button B: X+81, Y+38 -Prize: X=18875, Y=17714 - -Button A: X+91, Y+87 -Button B: X+24, Y+97 -Prize: X=3019, Y=5182 - -Button A: X+48, Y+60 -Button B: X+75, Y+17 -Prize: X=3267, Y=937 - -Button A: X+78, Y+26 -Button B: X+54, Y+95 -Prize: X=10638, Y=9706 - -Button A: X+21, Y+90 -Button B: X+65, Y+18 -Prize: X=5264, Y=4320 - -Button A: X+14, Y+58 -Button B: X+41, Y+33 -Prize: X=931, Y=983 - -Button A: X+22, Y+45 -Button B: X+55, Y+23 -Prize: X=18987, Y=18336 - -Button A: X+24, Y+61 -Button B: X+75, Y+29 -Prize: X=5127, Y=5758 - -Button A: X+49, Y+84 -Button B: X+38, Y+11 -Prize: X=3463, Y=3446 - -Button A: X+32, Y+75 -Button B: X+54, Y+11 -Prize: X=10780, Y=933 - -Button A: X+18, Y+84 -Button B: X+75, Y+31 -Prize: X=2577, Y=2137 - -Button A: X+16, Y+53 -Button B: X+66, Y+24 -Prize: X=12502, Y=7650 - -Button A: X+46, Y+75 -Button B: X+46, Y+20 -Prize: X=7598, Y=5780 - -Button A: X+97, Y+57 -Button B: X+40, Y+75 -Prize: X=6896, Y=6936 - -Button A: X+87, Y+49 -Button B: X+17, Y+61 -Prize: X=2245, Y=5687 - -Button A: X+89, Y+43 -Button B: X+38, Y+88 -Prize: X=8665, Y=7181 - -Button A: X+39, Y+94 -Button B: X+34, Y+26 -Prize: X=2237, Y=5112 - -Button A: X+57, Y+12 -Button B: X+40, Y+71 -Prize: X=5110, Y=6395 - -Button A: X+92, Y+13 -Button B: X+29, Y+88 -Prize: X=6278, Y=4411 - -Button A: X+94, Y+81 -Button B: X+13, Y+64 -Prize: X=3211, Y=5882 - -Button A: X+49, Y+34 -Button B: X+14, Y+65 -Prize: X=1939, Y=3778 - -Button A: X+32, Y+73 -Button B: X+50, Y+12 -Prize: X=12774, Y=12247 - -Button A: X+34, Y+97 -Button B: X+78, Y+59 -Prize: X=1364, Y=1602 - -Button A: X+13, Y+44 -Button B: X+70, Y+41 -Prize: X=13681, Y=7491 - -Button A: X+72, Y+44 -Button B: X+13, Y+56 -Prize: X=1078, Y=1716 - -Button A: X+56, Y+30 -Button B: X+27, Y+58 -Prize: X=3425, Y=5100 - -Button A: X+99, Y+18 -Button B: X+40, Y+83 -Prize: X=9389, Y=6175 - -Button A: X+44, Y+14 -Button B: X+17, Y+66 -Prize: X=7836, Y=16974 - -Button A: X+16, Y+58 -Button B: X+79, Y+29 -Prize: X=1201, Y=18041 - -Button A: X+60, Y+19 -Button B: X+52, Y+73 -Prize: X=5560, Y=5718 - -Button A: X+13, Y+51 -Button B: X+69, Y+26 -Prize: X=7423, Y=7244 - -Button A: X+40, Y+14 -Button B: X+42, Y+60 -Prize: X=6320, Y=5836 - -Button A: X+73, Y+29 -Button B: X+20, Y+54 -Prize: X=12274, Y=12544 - -Button A: X+12, Y+64 -Button B: X+89, Y+95 -Prize: X=8072, Y=9640 - -Button A: X+26, Y+49 -Button B: X+70, Y+26 -Prize: X=2276, Y=3442 - -Button A: X+68, Y+47 -Button B: X+29, Y+69 -Prize: X=7480, Y=8499 - -Button A: X+13, Y+28 -Button B: X+86, Y+21 -Prize: X=1826, Y=1141 - -Button A: X+97, Y+85 -Button B: X+25, Y+88 -Prize: X=5021, Y=6647 - -Button A: X+24, Y+50 -Button B: X+85, Y+17 -Prize: X=1952, Y=2786 - -Button A: X+21, Y+71 -Button B: X+59, Y+21 -Prize: X=18503, Y=12693 - -Button A: X+94, Y+58 -Button B: X+42, Y+85 -Prize: X=12332, Y=12395 - -Button A: X+93, Y+49 -Button B: X+13, Y+40 -Prize: X=9332, Y=7370 - -Button A: X+58, Y+44 -Button B: X+32, Y+84 -Prize: X=6696, Y=10216 - -Button A: X+18, Y+77 -Button B: X+56, Y+51 -Prize: X=2952, Y=5840 - -Button A: X+13, Y+76 -Button B: X+46, Y+11 -Prize: X=14558, Y=6711 - -Button A: X+46, Y+20 -Button B: X+45, Y+70 -Prize: X=6149, Y=5750 - -Button A: X+92, Y+39 -Button B: X+54, Y+97 -Prize: X=10056, Y=10488 - -Button A: X+25, Y+48 -Button B: X+80, Y+50 -Prize: X=2260, Y=1542 - -Button A: X+12, Y+52 -Button B: X+39, Y+20 -Prize: X=2225, Y=10452 - -Button A: X+25, Y+62 -Button B: X+42, Y+15 -Prize: X=2596, Y=12552 - -Button A: X+11, Y+39 -Button B: X+67, Y+17 -Prize: X=2192, Y=12338 - -Button A: X+90, Y+59 -Button B: X+19, Y+57 -Prize: X=5277, Y=7602 - -Button A: X+50, Y+34 -Button B: X+33, Y+80 -Prize: X=1245, Y=1710 - -Button A: X+11, Y+63 -Button B: X+83, Y+12 -Prize: X=4173, Y=15554 - -Button A: X+52, Y+97 -Button B: X+91, Y+13 -Prize: X=13091, Y=10469 - -Button A: X+23, Y+57 -Button B: X+69, Y+36 -Prize: X=8771, Y=6614 - -Button A: X+21, Y+40 -Button B: X+67, Y+40 -Prize: X=15512, Y=5120 - -Button A: X+20, Y+47 -Button B: X+66, Y+22 -Prize: X=9426, Y=16922 - -Button A: X+15, Y+37 -Button B: X+49, Y+14 -Prize: X=2334, Y=3915 - -Button A: X+25, Y+51 -Button B: X+44, Y+17 -Prize: X=4718, Y=4386 - -Button A: X+77, Y+30 -Button B: X+16, Y+78 -Prize: X=7755, Y=7758 - -Button A: X+55, Y+87 -Button B: X+64, Y+15 -Prize: X=10939, Y=9456 - -Button A: X+64, Y+17 -Button B: X+24, Y+78 -Prize: X=312, Y=3577 - -Button A: X+15, Y+68 -Button B: X+73, Y+12 -Prize: X=708, Y=6800 - -Button A: X+71, Y+66 -Button B: X+12, Y+42 -Prize: X=7143, Y=8028 - -Button A: X+70, Y+24 -Button B: X+22, Y+66 -Prize: X=1930, Y=10706 - -Button A: X+52, Y+28 -Button B: X+29, Y+47 -Prize: X=19597, Y=3007 - -Button A: X+11, Y+24 -Button B: X+51, Y+24 -Prize: X=2230, Y=1200 - -Button A: X+23, Y+80 -Button B: X+55, Y+15 -Prize: X=2251, Y=1130 - -Button A: X+20, Y+42 -Button B: X+75, Y+48 -Prize: X=15760, Y=14762 - -Button A: X+63, Y+12 -Button B: X+32, Y+77 -Prize: X=1622, Y=1319 - -Button A: X+11, Y+20 -Button B: X+54, Y+22 -Prize: X=10462, Y=1050 - -Button A: X+24, Y+72 -Button B: X+53, Y+12 -Prize: X=5360, Y=10304 - -Button A: X+99, Y+52 -Button B: X+12, Y+52 -Prize: X=8937, Y=5928 - -Button A: X+62, Y+25 -Button B: X+57, Y+95 -Prize: X=10249, Y=10110 - -Button A: X+40, Y+99 -Button B: X+91, Y+13 -Prize: X=3050, Y=1182 - -Button A: X+26, Y+60 -Button B: X+71, Y+38 -Prize: X=9324, Y=9448 - -Button A: X+60, Y+88 -Button B: X+73, Y+32 -Prize: X=8559, Y=7824 - -Button A: X+59, Y+21 -Button B: X+59, Y+75 -Prize: X=4602, Y=2070 - -Button A: X+14, Y+48 -Button B: X+47, Y+19 -Prize: X=4601, Y=3977 - -Button A: X+64, Y+22 -Button B: X+29, Y+65 -Prize: X=12970, Y=19186 - -Button A: X+28, Y+19 -Button B: X+18, Y+43 -Prize: X=2002, Y=2005 - -Button A: X+24, Y+17 -Button B: X+12, Y+30 -Prize: X=14612, Y=12593 - -Button A: X+34, Y+54 -Button B: X+88, Y+12 -Prize: X=9576, Y=2688 - -Button A: X+22, Y+35 -Button B: X+51, Y+17 -Prize: X=6367, Y=4806 - -Button A: X+28, Y+53 -Button B: X+91, Y+44 -Prize: X=5194, Y=3932 - -Button A: X+31, Y+11 -Button B: X+30, Y+69 -Prize: X=14791, Y=1482 - -Button A: X+46, Y+94 -Button B: X+26, Y+17 -Prize: X=3028, Y=3514 - -Button A: X+79, Y+29 -Button B: X+13, Y+52 -Prize: X=16594, Y=6031 - -Button A: X+76, Y+36 -Button B: X+32, Y+80 -Prize: X=5908, Y=3836 - -Button A: X+20, Y+41 -Button B: X+59, Y+28 -Prize: X=4243, Y=10632 - -Button A: X+72, Y+32 -Button B: X+22, Y+58 -Prize: X=15972, Y=11444 - -Button A: X+53, Y+28 -Button B: X+28, Y+58 -Prize: X=3946, Y=10646 - -Button A: X+19, Y+69 -Button B: X+61, Y+22 -Prize: X=9244, Y=17018 - -Button A: X+20, Y+71 -Button B: X+64, Y+18 -Prize: X=17356, Y=9567 - -Button A: X+28, Y+89 -Button B: X+69, Y+50 -Prize: X=5623, Y=5174 - -Button A: X+62, Y+17 -Button B: X+11, Y+73 -Prize: X=1851, Y=10184 - -Button A: X+60, Y+22 -Button B: X+18, Y+38 -Prize: X=3728, Y=6252 - -Button A: X+58, Y+32 -Button B: X+28, Y+94 -Prize: X=5286, Y=6844 - -Button A: X+53, Y+80 -Button B: X+58, Y+14 -Prize: X=8236, Y=5886 - -Button A: X+15, Y+49 -Button B: X+46, Y+18 -Prize: X=11211, Y=18229 - -Button A: X+21, Y+96 -Button B: X+27, Y+29 -Prize: X=2448, Y=7697 - -Button A: X+42, Y+85 -Button B: X+93, Y+37 -Prize: X=5364, Y=5412 - -Button A: X+56, Y+32 -Button B: X+16, Y+31 -Prize: X=3368, Y=3389 - -Button A: X+14, Y+66 -Button B: X+81, Y+66 -Prize: X=7042, Y=11088 - -Button A: X+12, Y+54 -Button B: X+76, Y+37 -Prize: X=5280, Y=15420 - -Button A: X+37, Y+24 -Button B: X+12, Y+44 -Prize: X=4537, Y=5804 - -Button A: X+55, Y+14 -Button B: X+24, Y+85 -Prize: X=4477, Y=3743 - -Button A: X+70, Y+92 -Button B: X+73, Y+17 -Prize: X=5044, Y=2840 - -Button A: X+13, Y+51 -Button B: X+40, Y+38 -Prize: X=2505, Y=5665 - -Button A: X+63, Y+24 -Button B: X+22, Y+55 -Prize: X=6942, Y=6141 - -Button A: X+30, Y+75 -Button B: X+62, Y+22 -Prize: X=14496, Y=6211 - -Button A: X+87, Y+43 -Button B: X+30, Y+75 -Prize: X=3153, Y=6312 - -Button A: X+77, Y+37 -Button B: X+14, Y+45 -Prize: X=11197, Y=3283 - -Button A: X+48, Y+25 -Button B: X+49, Y+96 -Prize: X=1254, Y=1076 - -Button A: X+14, Y+77 -Button B: X+53, Y+55 -Prize: X=1972, Y=5170 - -Button A: X+32, Y+19 -Button B: X+18, Y+39 -Prize: X=3720, Y=3681 - -Button A: X+36, Y+13 -Button B: X+39, Y+75 -Prize: X=5181, Y=6196 - -Button A: X+34, Y+23 -Button B: X+11, Y+35 -Prize: X=14981, Y=13421 - -Button A: X+83, Y+28 -Button B: X+11, Y+47 -Prize: X=5038, Y=15145 - -Button A: X+44, Y+98 -Button B: X+78, Y+26 -Prize: X=7832, Y=4444 - -Button A: X+18, Y+11 -Button B: X+19, Y+44 -Prize: X=15969, Y=15082 - -Button A: X+14, Y+81 -Button B: X+39, Y+34 -Prize: X=1722, Y=1914 - -Button A: X+29, Y+94 -Button B: X+75, Y+55 -Prize: X=9696, Y=14311 - -Button A: X+41, Y+79 -Button B: X+58, Y+19 -Prize: X=4374, Y=5367 - -Button A: X+47, Y+14 -Button B: X+35, Y+66 -Prize: X=17301, Y=1534 - -Button A: X+68, Y+29 -Button B: X+21, Y+98 -Prize: X=6996, Y=5833 - -Button A: X+16, Y+61 -Button B: X+72, Y+15 -Prize: X=10896, Y=9927 - -Button A: X+69, Y+16 -Button B: X+17, Y+99 -Prize: X=4411, Y=2924 - -Button A: X+16, Y+73 -Button B: X+43, Y+42 -Prize: X=2463, Y=4299 - -Button A: X+54, Y+16 -Button B: X+21, Y+43 -Prize: X=4187, Y=10273 - -Button A: X+49, Y+13 -Button B: X+49, Y+83 -Prize: X=6076, Y=4902 - -Button A: X+40, Y+19 -Button B: X+17, Y+31 -Prize: X=18121, Y=6893 - -Button A: X+22, Y+89 -Button B: X+62, Y+33 -Prize: X=3470, Y=2929 - -Button A: X+24, Y+51 -Button B: X+51, Y+11 -Prize: X=13013, Y=7760 - -Button A: X+40, Y+72 -Button B: X+94, Y+29 -Prize: X=10730, Y=8799 - -Button A: X+85, Y+18 -Button B: X+64, Y+86 -Prize: X=3858, Y=4222 - -Button A: X+99, Y+11 -Button B: X+18, Y+71 -Prize: X=1530, Y=722 - -Button A: X+69, Y+12 -Button B: X+93, Y+98 -Prize: X=11136, Y=9792 - -Button A: X+95, Y+75 -Button B: X+21, Y+96 -Prize: X=917, Y=1677 - -Button A: X+22, Y+57 -Button B: X+46, Y+17 -Prize: X=7332, Y=17866 - -Button A: X+55, Y+19 -Button B: X+27, Y+67 -Prize: X=8606, Y=17118 - -Button A: X+42, Y+92 -Button B: X+77, Y+50 -Prize: X=3416, Y=2736 - -Button A: X+13, Y+64 -Button B: X+92, Y+86 -Prize: X=5175, Y=6030 - -Button A: X+56, Y+18 -Button B: X+20, Y+46 -Prize: X=4068, Y=5212 - -Button A: X+78, Y+11 -Button B: X+19, Y+79 -Prize: X=6081, Y=10602 - -Button A: X+19, Y+87 -Button B: X+84, Y+35 -Prize: X=3342, Y=3765 - -Button A: X+57, Y+33 -Button B: X+19, Y+43 -Prize: X=8062, Y=8686 - -Button A: X+93, Y+60 -Button B: X+14, Y+72 -Prize: X=1229, Y=2556 - -Button A: X+55, Y+24 -Button B: X+14, Y+94 -Prize: X=1871, Y=6002 - -Button A: X+13, Y+19 -Button B: X+37, Y+15 -Prize: X=11560, Y=7340 - -Button A: X+97, Y+92 -Button B: X+68, Y+14 -Prize: X=12918, Y=8566 - -Button A: X+64, Y+16 -Button B: X+19, Y+58 -Prize: X=15227, Y=15866 - -Button A: X+12, Y+62 -Button B: X+63, Y+17 -Prize: X=11813, Y=12953 - -Button A: X+72, Y+28 -Button B: X+20, Y+52 -Prize: X=1284, Y=4264 - -Button A: X+76, Y+17 -Button B: X+23, Y+38 -Prize: X=8199, Y=4101 - -Button A: X+84, Y+38 -Button B: X+17, Y+47 -Prize: X=7592, Y=6422 - -Button A: X+76, Y+26 -Button B: X+33, Y+61 -Prize: X=7100, Y=3622 - -Button A: X+53, Y+45 -Button B: X+14, Y+48 -Prize: X=3495, Y=4737 - -Button A: X+14, Y+57 -Button B: X+95, Y+13 -Prize: X=2193, Y=4817 - -Button A: X+91, Y+24 -Button B: X+39, Y+44 -Prize: X=8905, Y=4776 - -Button A: X+36, Y+95 -Button B: X+54, Y+14 -Prize: X=6570, Y=8985 - -Button A: X+47, Y+26 -Button B: X+27, Y+45 -Prize: X=9856, Y=1870 - -Button A: X+70, Y+23 -Button B: X+33, Y+80 -Prize: X=6705, Y=3932 - -Button A: X+93, Y+22 -Button B: X+72, Y+97 -Prize: X=13317, Y=8748 - -Button A: X+68, Y+56 -Button B: X+12, Y+82 -Prize: X=3792, Y=5070 - -Button A: X+91, Y+19 -Button B: X+50, Y+58 -Prize: X=7149, Y=4917 - -Button A: X+17, Y+85 -Button B: X+62, Y+56 -Prize: X=6472, Y=11278 - -Button A: X+71, Y+18 -Button B: X+16, Y+75 -Prize: X=7574, Y=7170 - -Button A: X+13, Y+78 -Button B: X+64, Y+76 -Prize: X=3350, Y=6856 - -Button A: X+65, Y+14 -Button B: X+16, Y+42 -Prize: X=8942, Y=19674 - -Button A: X+37, Y+19 -Button B: X+20, Y+33 -Prize: X=15445, Y=3074 - -Button A: X+12, Y+40 -Button B: X+76, Y+26 -Prize: X=1848, Y=19728 - -Button A: X+86, Y+16 -Button B: X+11, Y+96 -Prize: X=7116, Y=9216 - -Button A: X+62, Y+14 -Button B: X+49, Y+69 -Prize: X=5138, Y=6722 - -Button A: X+44, Y+63 -Button B: X+42, Y+17 -Prize: X=10920, Y=3470 - -Button A: X+51, Y+26 -Button B: X+35, Y+55 -Prize: X=11198, Y=1063 - -Button A: X+85, Y+11 -Button B: X+11, Y+72 -Prize: X=507, Y=16765 - -Button A: X+50, Y+17 -Button B: X+28, Y+55 -Prize: X=2500, Y=4978 - -Button A: X+17, Y+41 -Button B: X+60, Y+38 -Prize: X=11731, Y=5537 - -Button A: X+31, Y+41 -Button B: X+91, Y+36 -Prize: X=9013, Y=6353 - -Button A: X+62, Y+21 -Button B: X+15, Y+59 -Prize: X=1794, Y=13288 - -Button A: X+41, Y+14 -Button B: X+26, Y+49 -Prize: X=7670, Y=3910 - -Button A: X+24, Y+99 -Button B: X+95, Y+54 -Prize: X=8639, Y=10971 - -Button A: X+13, Y+80 -Button B: X+93, Y+52 -Prize: X=4898, Y=7248 - -Button A: X+97, Y+73 -Button B: X+31, Y+83 -Prize: X=6926, Y=10702 - -Button A: X+21, Y+86 -Button B: X+90, Y+65 -Prize: X=7887, Y=8317 - -Button A: X+37, Y+42 -Button B: X+83, Y+27 -Prize: X=7887, Y=3105 - -Button A: X+19, Y+68 -Button B: X+67, Y+25 -Prize: X=3042, Y=7375 - -Button A: X+30, Y+51 -Button B: X+80, Y+15 -Prize: X=2140, Y=2670 - -Button A: X+87, Y+22 -Button B: X+49, Y+91 -Prize: X=6983, Y=3338 - -Button A: X+74, Y+42 -Button B: X+14, Y+40 -Prize: X=8560, Y=1180 - -Button A: X+98, Y+11 -Button B: X+53, Y+87 -Prize: X=4734, Y=3125 - -Button A: X+36, Y+60 -Button B: X+94, Y+15 -Prize: X=6512, Y=2070 - -Button A: X+36, Y+11 -Button B: X+33, Y+57 -Prize: X=15008, Y=16375 - -Button A: X+79, Y+51 -Button B: X+18, Y+46 -Prize: X=12284, Y=18892 - -Button A: X+25, Y+63 -Button B: X+66, Y+18 -Prize: X=12741, Y=16919 - -Button A: X+11, Y+54 -Button B: X+76, Y+33 -Prize: X=4920, Y=6683 - -Button A: X+23, Y+71 -Button B: X+55, Y+17 -Prize: X=15713, Y=18075 - -Button A: X+92, Y+85 -Button B: X+72, Y+14 -Prize: X=11088, Y=6988 - -Button A: X+90, Y+31 -Button B: X+15, Y+41 -Prize: X=8280, Y=5217 - -Button A: X+16, Y+52 -Button B: X+72, Y+24 -Prize: X=15496, Y=13792 - -Button A: X+17, Y+24 -Button B: X+76, Y+16 -Prize: X=8548, Y=3760 - -Button A: X+21, Y+42 -Button B: X+56, Y+20 -Prize: X=3955, Y=3034 - -Button A: X+57, Y+15 -Button B: X+16, Y+20 -Prize: X=3915, Y=1125 - -Button A: X+64, Y+16 -Button B: X+25, Y+70 -Prize: X=12199, Y=10666 - -Button A: X+13, Y+57 -Button B: X+36, Y+13 -Prize: X=12196, Y=1889 - -Button A: X+50, Y+70 -Button B: X+29, Y+13 -Prize: X=19005, Y=11065 - -Button A: X+58, Y+87 -Button B: X+76, Y+34 -Prize: X=6738, Y=7227 - -Button A: X+79, Y+62 -Button B: X+24, Y+88 -Prize: X=2126, Y=1876 - -Button A: X+29, Y+89 -Button B: X+70, Y+22 -Prize: X=7399, Y=4003 - -Button A: X+61, Y+36 -Button B: X+12, Y+47 -Prize: X=7624, Y=15339 - -Button A: X+16, Y+27 -Button B: X+43, Y+14 -Prize: X=15461, Y=6925 - -Button A: X+53, Y+14 -Button B: X+17, Y+53 -Prize: X=1833, Y=2085 - -Button A: X+12, Y+46 -Button B: X+76, Y+33 -Prize: X=17232, Y=7631 - -Button A: X+23, Y+15 -Button B: X+11, Y+32 -Prize: X=2079, Y=2051 - -Button A: X+14, Y+61 -Button B: X+79, Y+31 -Prize: X=19076, Y=19749 - -Button A: X+67, Y+97 -Button B: X+95, Y+39 -Prize: X=12736, Y=11344 - -Button A: X+14, Y+23 -Button B: X+35, Y+11 -Prize: X=6444, Y=17109 - -Button A: X+14, Y+40 -Button B: X+32, Y+17 -Prize: X=5020, Y=6220 - -Button A: X+53, Y+14 -Button B: X+14, Y+42 -Prize: X=17332, Y=3966 - -Button A: X+43, Y+16 -Button B: X+12, Y+25 -Prize: X=2577, Y=12758 - -Button A: X+26, Y+12 -Button B: X+24, Y+47 -Prize: X=17828, Y=3061 - -Button A: X+99, Y+66 -Button B: X+43, Y+91 -Prize: X=6135, Y=8391 - -Button A: X+13, Y+41 -Button B: X+63, Y+12 -Prize: X=6296, Y=12458 - -Button A: X+18, Y+42 -Button B: X+88, Y+22 -Prize: X=2486, Y=1034 - -Button A: X+35, Y+80 -Button B: X+52, Y+37 -Prize: X=5416, Y=8041 - -Button A: X+81, Y+32 -Button B: X+21, Y+50 -Prize: X=3750, Y=1690 - -Button A: X+90, Y+27 -Button B: X+17, Y+82 -Prize: X=3355, Y=6005 - -Button A: X+35, Y+14 -Button B: X+35, Y+48 -Prize: X=13850, Y=6312 - -Button A: X+94, Y+82 -Button B: X+14, Y+41 -Prize: X=4962, Y=6027 - -Button A: X+18, Y+86 -Button B: X+36, Y+31 -Prize: X=2826, Y=8849 - -Button A: X+24, Y+42 -Button B: X+57, Y+26 -Prize: X=4289, Y=16742 - -Button A: X+15, Y+59 -Button B: X+76, Y+27 -Prize: X=12775, Y=18008 - -Button A: X+64, Y+27 -Button B: X+20, Y+65 -Prize: X=19348, Y=11874 - -Button A: X+27, Y+55 -Button B: X+85, Y+14 -Prize: X=2653, Y=1903 - -Button A: X+90, Y+12 -Button B: X+47, Y+90 -Prize: X=681, Y=342 - -Button A: X+13, Y+29 -Button B: X+18, Y+13 -Prize: X=2527, Y=8550 - -Button A: X+71, Y+34 -Button B: X+25, Y+59 -Prize: X=10411, Y=6369 - -Button A: X+78, Y+26 -Button B: X+61, Y+98 -Prize: X=7284, Y=3360 - -Button A: X+49, Y+78 -Button B: X+47, Y+11 -Prize: X=8090, Y=8347 - -Button A: X+65, Y+29 -Button B: X+23, Y+59 -Prize: X=3886, Y=2806 - -Button A: X+13, Y+58 -Button B: X+82, Y+33 -Prize: X=17126, Y=1844 - -Button A: X+15, Y+46 -Button B: X+52, Y+29 -Prize: X=14512, Y=8557 - -Button A: X+51, Y+19 -Button B: X+17, Y+57 -Prize: X=4573, Y=2565 - -Button A: X+16, Y+84 -Button B: X+43, Y+29 -Prize: X=2326, Y=2374 - -Button A: X+21, Y+80 -Button B: X+52, Y+12 -Prize: X=2872, Y=11268 - -Button A: X+16, Y+56 -Button B: X+42, Y+20 -Prize: X=1218, Y=17444 - -Button A: X+43, Y+14 -Button B: X+25, Y+38 -Prize: X=2364, Y=11092 - -Button A: X+34, Y+16 -Button B: X+42, Y+65 -Prize: X=19300, Y=16358 - -Button A: X+12, Y+47 -Button B: X+68, Y+29 -Prize: X=17592, Y=3390 - -Button A: X+38, Y+11 -Button B: X+55, Y+70 -Prize: X=4021, Y=1867 - -Button A: X+33, Y+13 -Button B: X+14, Y+52 -Prize: X=8642, Y=16058 - -Button A: X+74, Y+27 -Button B: X+12, Y+54 -Prize: X=5318, Y=5265 - -Button A: X+28, Y+44 -Button B: X+38, Y+11 -Prize: X=11126, Y=12365 - -Button A: X+34, Y+56 -Button B: X+44, Y+20 -Prize: X=14102, Y=5556 - -Button A: X+75, Y+85 -Button B: X+53, Y+16 -Prize: X=6607, Y=5549 - -Button A: X+81, Y+20 -Button B: X+35, Y+57 -Prize: X=2908, Y=3281 - -Button A: X+13, Y+30 -Button B: X+41, Y+19 -Prize: X=10899, Y=10340 - -Button A: X+11, Y+25 -Button B: X+64, Y+22 -Prize: X=18766, Y=8966 - -Button A: X+57, Y+15 -Button B: X+17, Y+42 -Prize: X=14691, Y=8777 - -Button A: X+19, Y+29 -Button B: X+72, Y+16 -Prize: X=7014, Y=3194 - -Button A: X+22, Y+57 -Button B: X+44, Y+21 -Prize: X=15632, Y=19217 - -Button A: X+48, Y+94 -Button B: X+86, Y+37 -Prize: X=11514, Y=11115 - -Button A: X+11, Y+53 -Button B: X+57, Y+22 -Prize: X=8712, Y=5709 - -Button A: X+92, Y+23 -Button B: X+12, Y+81 -Prize: X=7868, Y=7661 - -Button A: X+52, Y+79 -Button B: X+63, Y+22 -Prize: X=5604, Y=2322 - -Button A: X+20, Y+51 -Button B: X+95, Y+41 -Prize: X=9500, Y=8125 - -Button A: X+24, Y+85 -Button B: X+68, Y+46 -Prize: X=7808, Y=9339 - -Button A: X+16, Y+58 -Button B: X+83, Y+72 -Prize: X=2007, Y=4300 - -Button A: X+86, Y+16 -Button B: X+31, Y+75 -Prize: X=7780, Y=5186 - -Button A: X+21, Y+59 -Button B: X+89, Y+41 -Prize: X=2578, Y=3062 - -Button A: X+62, Y+13 -Button B: X+34, Y+86 -Prize: X=5006, Y=6334 - -Button A: X+75, Y+86 -Button B: X+80, Y+11 -Prize: X=6665, Y=1749 - -Button A: X+20, Y+55 -Button B: X+59, Y+47 -Prize: X=2643, Y=3004 diff --git a/2024/go/day14/day14.go b/2024/go/day14/day14.go deleted file mode 100644 index 2ed2ef6..0000000 --- a/2024/go/day14/day14.go +++ /dev/null @@ -1,149 +0,0 @@ -package day14 - -import ( - "adventofcode2024/utils" - grid "adventofcode2024/utils/grid2d" - "fmt" - "regexp" - "strings" -) - -type Robot struct { - velocity [2]int -} - -const SIZE_X = 101 -const SIZE_Y = 103 - -func Part1(input string) int { - grid := grid.NewGrid(SIZE_X, SIZE_Y, []Robot{}) - pattern := `p=(-?\d+),(-?\d+) v=(-?\d+),(-?\d+)` - re := regexp.MustCompile(pattern) - lines := strings.Split(input, "\n") - for _, line := range lines { - matches := re.FindStringSubmatch(line) - fmt.Println(matches) - x := utils.MustAtoi(matches[1]) - y := utils.MustAtoi(matches[2]) - x1 := utils.MustAtoi(matches[3]) - y1 := utils.MustAtoi(matches[4]) - robots := grid.Get(x, y) - grid.Set(x, y, append(robots, Robot{velocity: [2]int{x1, y1}})) - } - fmt.Println(grid.StringWithFormatter(formatter)) - ng := ticks(grid, 100) - fmt.Println(ng.StringWithFormatter(formatter)) - - return get_saftey(ng) -} - -func Part2(input string) int { - min_safe := 240096000 - min_i := 0 - max_safe := 0 - max_i := 0 - grid := grid.NewGrid(SIZE_X, SIZE_Y, []Robot{}) - pattern := `p=(-?\d+),(-?\d+) v=(-?\d+),(-?\d+)` - re := regexp.MustCompile(pattern) - lines := strings.Split(input, "\n") - for _, line := range lines { - matches := re.FindStringSubmatch(line) - fmt.Println(matches) - x := utils.MustAtoi(matches[1]) - y := utils.MustAtoi(matches[2]) - x1 := utils.MustAtoi(matches[3]) - y1 := utils.MustAtoi(matches[4]) - robots := grid.Get(x, y) - grid.Set(x, y, append(robots, Robot{velocity: [2]int{x1, y1}})) - } - fmt.Println(grid.StringWithFormatter(formatter)) - max_safe = get_saftey(grid) - for i:=0;i<7380;i++ { - ng := ticks(grid, 1) - safe := get_saftey(ng) - if safe > max_safe { - max_safe = safe - max_i = i - } - if safe < min_safe { - min_safe = safe - min_i = i - } - grid = ng - } - for i:=7380;i<7390;i++{ - ng := ticks(grid, 1) - fmt.Println(ng.StringWithFormatter(formatter)) - grid = ng - } - fmt.Println(grid.StringWithFormatter(formatter)) - fmt.Printf("max_safe: %d max_i: %d min_safe: %d min_i:%d", max_safe, max_i, min_safe, min_i) - return get_saftey(grid) -} - -func formatter(robots []Robot, x int, y int) string { - if len(robots) == 0 { - return " " - } - return "*" -} - -func ticks(g *grid.Grid[[]Robot], seconds int) *grid.Grid[[]Robot] { - ng := grid.NewGrid(SIZE_X, SIZE_Y, []Robot{}) - for y := 0; y < g.SizeY(); y++ { - for x := 0; x < g.SizeX(); x++ { - for _, robot := range g.Get(x, y) { - nx := x + ((robot.velocity[0] * seconds) % SIZE_X) - if nx < 0 { - nx = g.SizeX() + nx - } - if nx >= g.SizeX() { - nx = nx - g.SizeX() - } - ny := y + ((robot.velocity[1] * seconds) % SIZE_Y) - if ny < 0 { - ny = g.SizeY() + ny - } - if ny >= g.SizeY() { - ny = ny - g.SizeY() - } - robots := ng.Get(nx, ny) - ng.Set(nx, ny, append(robots, robot)) - } - } - } - return ng -} - -func get_saftey(grid *grid.Grid[[]Robot]) int { - robots := 0 - val := 1 - for y := 0; y < grid.SizeY()/2; y++ { - for x := 0; x < grid.SizeX()/2; x++ { - robots += len(grid.Get(x, y)) - } - } - val *= robots - robots = 0 - for y := 0; y < grid.SizeY()/2; y++ { - for x := grid.SizeX()/2 + 1; x < grid.SizeX(); x++ { - robots += len(grid.Get(x, y)) - } - } - val *= robots - robots = 0 - for y := grid.SizeY()/2 + 1; y < grid.SizeY(); y++ { - for x := grid.SizeX()/2 + 1; x < grid.SizeX(); x++ { - robots += len(grid.Get(x, y)) - } - } - val *= robots - robots = 0 - for y := grid.SizeY()/2 + 1; y < grid.SizeY(); y++ { - for x := 0; x < grid.SizeX()/2; x++ { - robots += len(grid.Get(x, y)) - } - } - val *= robots - return val -} \ No newline at end of file diff --git a/2024/go/day14/day14_test.go b/2024/go/day14/day14_test.go deleted file mode 100644 index 791e1d9..0000000 --- a/2024/go/day14/day14_test.go +++ /dev/null @@ -1,527 +0,0 @@ -package day14 - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestPart1(t *testing.T) { - r := Part1(`p=0,4 v=3,-3 -p=6,3 v=-1,-3 -p=10,3 v=-1,2 -p=2,0 v=2,-1 -p=0,0 v=1,3 -p=3,0 v=-2,-2 -p=7,6 v=-1,-3 -p=3,0 v=-1,-2 -p=9,3 v=2,3 -p=7,3 v=-1,2 -p=2,4 v=2,-3 -p=9,5 v=-3,-3`) - require.Equal(t, 12, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`p=80,75 v=69,72 -p=88,10 v=-28,-23 -p=79,61 v=79,59 -p=37,102 v=92,-43 -p=12,22 v=-5,-95 -p=60,13 v=-30,-42 -p=3,59 v=-96,-88 -p=85,33 v=-43,-41 -p=44,14 v=63,45 -p=6,6 v=-34,-86 -p=47,102 v=12,42 -p=36,88 v=-88,-93 -p=78,27 v=-18,52 -p=96,64 v=-62,-34 -p=49,99 v=-78,-15 -p=57,31 v=-80,21 -p=25,57 v=8,-84 -p=69,20 v=81,61 -p=80,5 v=-11,-30 -p=2,35 v=-85,77 -p=9,12 v=-4,36 -p=37,68 v=12,-69 -p=47,88 v=-8,-90 -p=72,68 v=59,-86 -p=55,38 v=-68,-94 -p=60,58 v=41,37 -p=76,87 v=-1,-18 -p=89,9 v=38,92 -p=100,67 v=17,-53 -p=83,73 v=80,32 -p=77,19 v=-54,-20 -p=10,86 v=-65,36 -p=13,88 v=-64,-84 -p=50,29 v=-17,-29 -p=79,38 v=89,-57 -p=55,57 v=-68,22 -p=71,82 v=-80,52 -p=37,83 v=-68,-43 -p=25,5 v=81,-22 -p=83,54 v=-32,-75 -p=27,95 v=-77,-55 -p=70,97 v=-72,-4 -p=3,84 v=-60,-60 -p=16,29 v=-35,99 -p=39,39 v=37,-38 -p=76,94 v=90,60 -p=18,21 v=-86,-26 -p=22,84 v=-16,66 -p=45,83 v=-40,-43 -p=35,52 v=54,3 -p=30,21 v=14,36 -p=69,61 v=69,-66 -p=52,22 v=-28,33 -p=9,21 v=-85,-73 -p=87,32 v=79,52 -p=28,85 v=-35,85 -p=32,58 v=-49,89 -p=22,75 v=85,44 -p=45,19 v=-88,61 -p=97,59 v=98,-75 -p=70,81 v=82,7 -p=97,102 v=-23,-8 -p=92,68 v=89,72 -p=24,42 v=-63,-97 -p=21,64 v=-45,-47 -p=58,3 v=-69,51 -p=33,68 v=19,-20 -p=27,6 v=-89,-21 -p=28,81 v=-67,-8 -p=59,83 v=-66,-82 -p=3,14 v=-3,-1 -p=19,65 v=15,-25 -p=57,37 v=53,-29 -p=36,84 v=-4,-84 -p=55,96 v=82,-21 -p=68,101 v=51,51 -p=68,8 v=-90,-30 -p=78,51 v=-51,-63 -p=4,55 v=-63,97 -p=100,60 v=76,-13 -p=7,91 v=-96,-73 -p=97,17 v=-54,33 -p=85,60 v=69,-3 -p=20,39 v=96,-85 -p=24,12 v=86,-84 -p=34,7 v=-7,-36 -p=30,69 v=-67,97 -p=65,17 v=20,33 -p=39,101 v=-7,-83 -p=38,51 v=-90,-4 -p=99,61 v=-13,59 -p=30,1 v=-67,-96 -p=1,89 v=-85,-83 -p=8,1 v=68,4 -p=89,89 v=-52,85 -p=81,5 v=-55,71 -p=99,60 v=-94,-72 -p=68,70 v=-10,78 -p=81,18 v=89,-95 -p=47,61 v=-39,56 -p=91,71 v=85,59 -p=28,66 v=44,-28 -p=10,64 v=-59,-4 -p=84,10 v=-32,-11 -p=29,52 v=-37,34 -p=78,43 v=-92,12 -p=85,3 v=-71,4 -p=37,85 v=-46,-84 -p=56,21 v=21,-32 -p=17,17 v=15,17 -p=26,87 v=45,-93 -p=57,21 v=-6,40 -p=95,48 v=-33,59 -p=38,59 v=65,-72 -p=59,85 v=-50,-99 -p=17,21 v=86,-45 -p=53,3 v=-28,-46 -p=1,40 v=-54,-91 -p=61,13 v=-40,83 -p=33,35 v=-72,-96 -p=40,14 v=33,-8 -p=29,89 v=53,-59 -p=74,0 v=-22,-42 -p=12,32 v=-65,-4 -p=82,89 v=-12,20 -p=35,71 v=-40,20 -p=14,5 v=95,83 -p=46,44 v=39,92 -p=25,54 v=-66,-47 -p=91,78 v=64,53 -p=14,9 v=25,67 -p=39,29 v=-29,8 -p=20,100 v=95,51 -p=59,41 v=92,-82 -p=15,92 v=93,-73 -p=42,93 v=3,-86 -p=82,93 v=-21,-96 -p=50,9 v=12,-39 -p=81,22 v=-13,99 -p=72,81 v=-51,-93 -p=88,19 v=-72,-14 -p=8,93 v=-85,-15 -p=54,2 v=61,8 -p=44,81 v=66,41 -p=78,10 v=90,8 -p=19,53 v=68,4 -p=80,43 v=9,46 -p=11,38 v=-66,88 -p=31,3 v=4,-2 -p=49,28 v=-74,21 -p=27,15 v=54,-88 -p=96,87 v=-50,-67 -p=94,94 v=-5,-97 -p=16,89 v=73,23 -p=93,32 v=-53,93 -p=47,17 v=-29,92 -p=10,78 v=16,35 -p=55,33 v=-60,-17 -p=55,73 v=-68,-22 -p=100,62 v=17,-69 -p=67,91 v=-49,45 -p=68,53 v=-42,-41 -p=35,73 v=54,47 -p=20,63 v=-85,-12 -p=23,16 v=-87,33 -p=70,55 v=50,-16 -p=92,6 v=41,-59 -p=9,97 v=-37,47 -p=48,48 v=42,40 -p=96,37 v=-90,32 -p=66,13 v=-60,91 -p=62,46 v=-50,18 -p=11,15 v=98,77 -p=42,78 v=1,47 -p=10,40 v=15,-48 -p=88,44 v=7,-75 -p=27,53 v=-70,-9 -p=21,7 v=-56,96 -p=92,81 v=-22,69 -p=57,65 v=92,-34 -p=85,63 v=77,11 -p=92,2 v=-30,21 -p=59,16 v=73,-70 -p=16,11 v=86,-89 -p=82,16 v=80,-36 -p=41,30 v=-49,19 -p=13,6 v=14,73 -p=67,99 v=-91,51 -p=37,20 v=-65,-37 -p=85,16 v=99,-14 -p=1,39 v=-44,56 -p=37,29 v=74,5 -p=44,51 v=-18,93 -p=43,9 v=-55,-84 -p=5,10 v=-65,26 -p=51,90 v=-59,-96 -p=55,98 v=-9,23 -p=0,94 v=88,-49 -p=91,43 v=-14,-72 -p=93,43 v=-69,-94 -p=84,100 v=-12,54 -p=23,46 v=85,78 -p=79,37 v=39,-10 -p=1,23 v=99,-79 -p=73,50 v=-51,84 -p=78,58 v=-31,-16 -p=75,44 v=69,71 -p=27,5 v=-87,14 -p=95,91 v=-33,63 -p=22,94 v=-5,-37 -p=36,11 v=-5,-60 -p=18,3 v=-64,-27 -p=44,14 v=24,-92 -p=96,40 v=65,-92 -p=47,1 v=84,25 -p=93,22 v=68,-48 -p=14,32 v=-24,37 -p=99,17 v=78,-89 -p=53,36 v=10,58 -p=44,44 v=-78,-60 -p=15,28 v=-96,-20 -p=96,61 v=-81,-45 -p=58,87 v=-9,7 -p=20,43 v=84,-22 -p=50,42 v=-18,68 -p=74,23 v=-12,42 -p=12,57 v=-94,-94 -p=49,49 v=-89,40 -p=47,98 v=-67,-8 -p=84,17 v=-62,11 -p=31,6 v=-57,-42 -p=28,67 v=66,-81 -p=0,3 v=-88,-13 -p=51,76 v=82,76 -p=67,81 v=87,-14 -p=84,78 v=39,41 -p=39,74 v=72,35 -p=30,10 v=64,-77 -p=10,31 v=11,-4 -p=6,90 v=-4,76 -p=90,24 v=-2,-23 -p=8,39 v=-57,-27 -p=31,69 v=93,-25 -p=79,38 v=39,-35 -p=69,31 v=70,30 -p=1,16 v=7,73 -p=46,9 v=-99,-70 -p=53,16 v=-94,-84 -p=32,60 v=33,-69 -p=62,22 v=-99,-4 -p=66,3 v=98,20 -p=4,76 v=46,-75 -p=50,71 v=-90,22 -p=57,12 v=31,-15 -p=59,84 v=-50,-65 -p=33,0 v=76,-48 -p=58,76 v=-30,44 -p=6,69 v=6,35 -p=74,91 v=-61,-43 -p=36,92 v=-58,60 -p=2,78 v=-48,-98 -p=43,91 v=53,76 -p=34,101 v=-77,79 -p=40,44 v=-68,28 -p=71,64 v=47,-48 -p=54,7 v=84,15 -p=54,75 v=-60,-31 -p=14,40 v=86,12 -p=80,29 v=-92,-26 -p=8,47 v=-33,-69 -p=2,41 v=12,-9 -p=39,60 v=-38,59 -p=13,22 v=86,-20 -p=25,12 v=-57,11 -p=60,47 v=96,96 -p=50,51 v=-48,-82 -p=85,40 v=89,74 -p=99,4 v=-94,-21 -p=75,7 v=29,-73 -p=28,58 v=-80,24 -p=46,94 v=-9,56 -p=24,65 v=-76,62 -p=50,2 v=-20,70 -p=85,55 v=-5,66 -p=38,11 v=43,36 -p=53,54 v=53,24 -p=18,45 v=65,96 -p=94,22 v=16,80 -p=79,28 v=75,-69 -p=30,38 v=-15,-29 -p=5,23 v=-4,49 -p=8,98 v=96,-99 -p=7,60 v=-14,47 -p=96,17 v=88,-73 -p=48,23 v=-41,35 -p=17,31 v=-26,-23 -p=13,52 v=66,37 -p=58,19 v=41,55 -p=25,9 v=-77,-89 -p=3,92 v=55,-80 -p=74,95 v=20,-77 -p=26,70 v=43,72 -p=54,4 v=96,-18 -p=63,8 v=-97,49 -p=23,51 v=87,-75 -p=24,18 v=85,36 -p=8,52 v=6,-13 -p=97,50 v=17,-72 -p=47,66 v=-25,6 -p=38,78 v=3,-93 -p=62,6 v=5,77 -p=56,74 v=-70,-6 -p=94,99 v=9,34 -p=19,92 v=-18,26 -p=35,54 v=-47,-69 -p=92,8 v=-13,42 -p=47,86 v=12,-90 -p=12,83 v=-68,2 -p=0,18 v=-75,-89 -p=11,99 v=-99,14 -p=88,20 v=62,21 -p=27,53 v=53,-47 -p=17,44 v=-5,-91 -p=57,10 v=66,-65 -p=66,95 v=-71,-12 -p=38,21 v=23,95 -p=68,69 v=-31,35 -p=87,71 v=50,72 -p=98,12 v=47,33 -p=94,21 v=66,51 -p=53,97 v=-16,-93 -p=59,35 v=6,39 -p=12,88 v=-86,88 -p=85,16 v=39,8 -p=38,85 v=35,80 -p=44,9 v=-48,11 -p=71,18 v=-82,39 -p=85,14 v=-74,-73 -p=88,22 v=-42,36 -p=8,6 v=-58,38 -p=21,58 v=-66,9 -p=25,17 v=-68,95 -p=89,16 v=-34,-86 -p=33,54 v=64,-88 -p=57,8 v=54,51 -p=40,18 v=-98,58 -p=91,22 v=-34,-53 -p=75,81 v=-70,26 -p=89,70 v=-2,69 -p=62,6 v=-1,-92 -p=78,24 v=-82,-42 -p=47,7 v=-75,83 -p=86,8 v=-63,95 -p=80,64 v=-36,-79 -p=69,95 v=-30,29 -p=46,86 v=85,20 -p=76,35 v=-82,-51 -p=33,15 v=-17,55 -p=40,58 v=-2,-11 -p=76,31 v=39,2 -p=46,82 v=-15,-45 -p=14,53 v=36,-16 -p=98,66 v=68,-3 -p=83,38 v=35,-87 -p=41,9 v=53,70 -p=35,33 v=-68,-68 -p=53,66 v=62,97 -p=75,80 v=49,-62 -p=66,70 v=-50,47 -p=78,80 v=7,64 -p=82,16 v=85,-81 -p=58,25 v=11,-70 -p=36,72 v=33,72 -p=66,92 v=-91,10 -p=24,52 v=-98,22 -p=74,7 v=-36,-79 -p=46,26 v=-61,-90 -p=52,24 v=53,-88 -p=92,26 v=31,78 -p=60,52 v=80,-81 -p=82,78 v=-81,-49 -p=10,3 v=-15,-55 -p=91,31 v=99,77 -p=75,50 v=-91,40 -p=49,71 v=93,91 -p=1,94 v=-54,54 -p=96,50 v=39,18 -p=0,3 v=-53,33 -p=34,9 v=-17,-8 -p=96,28 v=68,-63 -p=25,4 v=66,21 -p=94,74 v=82,-89 -p=47,66 v=-17,87 -p=58,23 v=63,83 -p=13,82 v=-74,75 -p=29,85 v=40,79 -p=57,7 v=50,83 -p=7,88 v=-37,-16 -p=81,61 v=-10,34 -p=6,32 v=33,-60 -p=63,7 v=1,98 -p=59,29 v=-31,-85 -p=85,91 v=19,-18 -p=22,39 v=21,90 -p=25,13 v=75,89 -p=14,100 v=-27,30 -p=33,6 v=97,-53 -p=84,83 v=-22,38 -p=100,69 v=77,-38 -p=2,67 v=-14,-25 -p=71,71 v=-53,73 -p=9,43 v=-52,98 -p=55,76 v=-60,94 -p=49,91 v=-35,-95 -p=77,68 v=26,12 -p=41,91 v=-17,-15 -p=1,69 v=-44,72 -p=32,61 v=4,59 -p=94,12 v=-33,30 -p=1,35 v=96,49 -p=72,64 v=-61,-53 -p=76,93 v=38,-37 -p=97,9 v=33,61 -p=60,32 v=80,18 -p=16,68 v=15,-29 -p=99,72 v=66,44 -p=99,18 v=56,99 -p=42,11 v=-88,11 -p=57,69 v=-2,-2 -p=39,57 v=26,-51 -p=34,15 v=73,42 -p=56,55 v=-61,-75 -p=89,1 v=67,-27 -p=21,100 v=5,70 -p=85,11 v=-35,63 -p=16,35 v=47,-63 -p=98,0 v=93,-2 -p=51,89 v=-9,85 -p=50,32 v=84,-42 -p=29,63 v=78,-76 -p=92,86 v=89,10 -p=27,11 v=-77,51 -p=65,21 v=-59,68 -p=84,68 v=20,-50 -p=19,2 v=-24,-36 -p=25,78 v=25,-85 -p=90,92 v=59,-87 -p=70,100 v=10,-52 -p=48,78 v=3,54 -p=85,81 v=30,44 -p=53,65 v=41,-67 -p=13,95 v=82,-29 -p=5,19 v=95,75 -p=37,96 v=-68,26 -p=83,16 v=-5,-9 -p=31,17 v=4,-20 -p=83,34 v=-83,-76 -p=50,88 v=93,-5 -p=66,36 v=-30,58 -p=11,29 v=-44,83 -p=31,31 v=-77,-51 -p=26,85 v=14,-18 -p=8,76 v=65,69 -p=60,70 v=-40,47 -p=69,70 v=22,64 -p=85,53 v=18,12 -p=97,93 v=-58,-57 -p=52,83 v=92,-9 -p=20,92 v=30,50 -p=88,73 v=32,3 -p=83,16 v=-42,-14 -p=57,89 v=-29,20 -p=50,19 v=73,8 -p=8,101 v=-94,-68 -p=12,77 v=-4,-84 -p=63,28 v=-84,91 -p=46,25 v=13,-95 -p=93,21 v=88,-26 -p=10,54 v=-24,72 -p=69,16 v=-92,-30 -p=26,68 v=21,97 -p=56,30 v=-90,-51 -p=62,69 v=-1,-50 -p=7,6 v=55,-39 -p=63,78 v=76,92 -p=57,55 v=-51,-19 -p=70,62 v=18,37 -p=88,26 v=-61,82 -p=80,50 v=-73,99 -p=40,1 v=-78,86 -p=35,85 v=81,-12 -p=17,74 v=56,47 -p=36,99 v=64,-15 -p=56,18 v=-29,-14 -p=42,44 v=-18,46 -p=84,4 v=-63,-2 -p=97,75 v=27,-62 -p=47,71 v=54,-50 -p=26,101 v=-67,-83 -p=30,74 v=-57,66`) - require.Equal(t, 0, r) -} diff --git a/2024/go/day14/input.txt b/2024/go/day14/input.txt deleted file mode 100644 index 179e1e7..0000000 --- a/2024/go/day14/input.txt +++ /dev/null @@ -1,500 +0,0 @@ -p=80,75 v=69,72 -p=88,10 v=-28,-23 -p=79,61 v=79,59 -p=37,102 v=92,-43 -p=12,22 v=-5,-95 -p=60,13 v=-30,-42 -p=3,59 v=-96,-88 -p=85,33 v=-43,-41 -p=44,14 v=63,45 -p=6,6 v=-34,-86 -p=47,102 v=12,42 -p=36,88 v=-88,-93 -p=78,27 v=-18,52 -p=96,64 v=-62,-34 -p=49,99 v=-78,-15 -p=57,31 v=-80,21 -p=25,57 v=8,-84 -p=69,20 v=81,61 -p=80,5 v=-11,-30 -p=2,35 v=-85,77 -p=9,12 v=-4,36 -p=37,68 v=12,-69 -p=47,88 v=-8,-90 -p=72,68 v=59,-86 -p=55,38 v=-68,-94 -p=60,58 v=41,37 -p=76,87 v=-1,-18 -p=89,9 v=38,92 -p=100,67 v=17,-53 -p=83,73 v=80,32 -p=77,19 v=-54,-20 -p=10,86 v=-65,36 -p=13,88 v=-64,-84 -p=50,29 v=-17,-29 -p=79,38 v=89,-57 -p=55,57 v=-68,22 -p=71,82 v=-80,52 -p=37,83 v=-68,-43 -p=25,5 v=81,-22 -p=83,54 v=-32,-75 -p=27,95 v=-77,-55 -p=70,97 v=-72,-4 -p=3,84 v=-60,-60 -p=16,29 v=-35,99 -p=39,39 v=37,-38 -p=76,94 v=90,60 -p=18,21 v=-86,-26 -p=22,84 v=-16,66 -p=45,83 v=-40,-43 -p=35,52 v=54,3 -p=30,21 v=14,36 -p=69,61 v=69,-66 -p=52,22 v=-28,33 -p=9,21 v=-85,-73 -p=87,32 v=79,52 -p=28,85 v=-35,85 -p=32,58 v=-49,89 -p=22,75 v=85,44 -p=45,19 v=-88,61 -p=97,59 v=98,-75 -p=70,81 v=82,7 -p=97,102 v=-23,-8 -p=92,68 v=89,72 -p=24,42 v=-63,-97 -p=21,64 v=-45,-47 -p=58,3 v=-69,51 -p=33,68 v=19,-20 -p=27,6 v=-89,-21 -p=28,81 v=-67,-8 -p=59,83 v=-66,-82 -p=3,14 v=-3,-1 -p=19,65 v=15,-25 -p=57,37 v=53,-29 -p=36,84 v=-4,-84 -p=55,96 v=82,-21 -p=68,101 v=51,51 -p=68,8 v=-90,-30 -p=78,51 v=-51,-63 -p=4,55 v=-63,97 -p=100,60 v=76,-13 -p=7,91 v=-96,-73 -p=97,17 v=-54,33 -p=85,60 v=69,-3 -p=20,39 v=96,-85 -p=24,12 v=86,-84 -p=34,7 v=-7,-36 -p=30,69 v=-67,97 -p=65,17 v=20,33 -p=39,101 v=-7,-83 -p=38,51 v=-90,-4 -p=99,61 v=-13,59 -p=30,1 v=-67,-96 -p=1,89 v=-85,-83 -p=8,1 v=68,4 -p=89,89 v=-52,85 -p=81,5 v=-55,71 -p=99,60 v=-94,-72 -p=68,70 v=-10,78 -p=81,18 v=89,-95 -p=47,61 v=-39,56 -p=91,71 v=85,59 -p=28,66 v=44,-28 -p=10,64 v=-59,-4 -p=84,10 v=-32,-11 -p=29,52 v=-37,34 -p=78,43 v=-92,12 -p=85,3 v=-71,4 -p=37,85 v=-46,-84 -p=56,21 v=21,-32 -p=17,17 v=15,17 -p=26,87 v=45,-93 -p=57,21 v=-6,40 -p=95,48 v=-33,59 -p=38,59 v=65,-72 -p=59,85 v=-50,-99 -p=17,21 v=86,-45 -p=53,3 v=-28,-46 -p=1,40 v=-54,-91 -p=61,13 v=-40,83 -p=33,35 v=-72,-96 -p=40,14 v=33,-8 -p=29,89 v=53,-59 -p=74,0 v=-22,-42 -p=12,32 v=-65,-4 -p=82,89 v=-12,20 -p=35,71 v=-40,20 -p=14,5 v=95,83 -p=46,44 v=39,92 -p=25,54 v=-66,-47 -p=91,78 v=64,53 -p=14,9 v=25,67 -p=39,29 v=-29,8 -p=20,100 v=95,51 -p=59,41 v=92,-82 -p=15,92 v=93,-73 -p=42,93 v=3,-86 -p=82,93 v=-21,-96 -p=50,9 v=12,-39 -p=81,22 v=-13,99 -p=72,81 v=-51,-93 -p=88,19 v=-72,-14 -p=8,93 v=-85,-15 -p=54,2 v=61,8 -p=44,81 v=66,41 -p=78,10 v=90,8 -p=19,53 v=68,4 -p=80,43 v=9,46 -p=11,38 v=-66,88 -p=31,3 v=4,-2 -p=49,28 v=-74,21 -p=27,15 v=54,-88 -p=96,87 v=-50,-67 -p=94,94 v=-5,-97 -p=16,89 v=73,23 -p=93,32 v=-53,93 -p=47,17 v=-29,92 -p=10,78 v=16,35 -p=55,33 v=-60,-17 -p=55,73 v=-68,-22 -p=100,62 v=17,-69 -p=67,91 v=-49,45 -p=68,53 v=-42,-41 -p=35,73 v=54,47 -p=20,63 v=-85,-12 -p=23,16 v=-87,33 -p=70,55 v=50,-16 -p=92,6 v=41,-59 -p=9,97 v=-37,47 -p=48,48 v=42,40 -p=96,37 v=-90,32 -p=66,13 v=-60,91 -p=62,46 v=-50,18 -p=11,15 v=98,77 -p=42,78 v=1,47 -p=10,40 v=15,-48 -p=88,44 v=7,-75 -p=27,53 v=-70,-9 -p=21,7 v=-56,96 -p=92,81 v=-22,69 -p=57,65 v=92,-34 -p=85,63 v=77,11 -p=92,2 v=-30,21 -p=59,16 v=73,-70 -p=16,11 v=86,-89 -p=82,16 v=80,-36 -p=41,30 v=-49,19 -p=13,6 v=14,73 -p=67,99 v=-91,51 -p=37,20 v=-65,-37 -p=85,16 v=99,-14 -p=1,39 v=-44,56 -p=37,29 v=74,5 -p=44,51 v=-18,93 -p=43,9 v=-55,-84 -p=5,10 v=-65,26 -p=51,90 v=-59,-96 -p=55,98 v=-9,23 -p=0,94 v=88,-49 -p=91,43 v=-14,-72 -p=93,43 v=-69,-94 -p=84,100 v=-12,54 -p=23,46 v=85,78 -p=79,37 v=39,-10 -p=1,23 v=99,-79 -p=73,50 v=-51,84 -p=78,58 v=-31,-16 -p=75,44 v=69,71 -p=27,5 v=-87,14 -p=95,91 v=-33,63 -p=22,94 v=-5,-37 -p=36,11 v=-5,-60 -p=18,3 v=-64,-27 -p=44,14 v=24,-92 -p=96,40 v=65,-92 -p=47,1 v=84,25 -p=93,22 v=68,-48 -p=14,32 v=-24,37 -p=99,17 v=78,-89 -p=53,36 v=10,58 -p=44,44 v=-78,-60 -p=15,28 v=-96,-20 -p=96,61 v=-81,-45 -p=58,87 v=-9,7 -p=20,43 v=84,-22 -p=50,42 v=-18,68 -p=74,23 v=-12,42 -p=12,57 v=-94,-94 -p=49,49 v=-89,40 -p=47,98 v=-67,-8 -p=84,17 v=-62,11 -p=31,6 v=-57,-42 -p=28,67 v=66,-81 -p=0,3 v=-88,-13 -p=51,76 v=82,76 -p=67,81 v=87,-14 -p=84,78 v=39,41 -p=39,74 v=72,35 -p=30,10 v=64,-77 -p=10,31 v=11,-4 -p=6,90 v=-4,76 -p=90,24 v=-2,-23 -p=8,39 v=-57,-27 -p=31,69 v=93,-25 -p=79,38 v=39,-35 -p=69,31 v=70,30 -p=1,16 v=7,73 -p=46,9 v=-99,-70 -p=53,16 v=-94,-84 -p=32,60 v=33,-69 -p=62,22 v=-99,-4 -p=66,3 v=98,20 -p=4,76 v=46,-75 -p=50,71 v=-90,22 -p=57,12 v=31,-15 -p=59,84 v=-50,-65 -p=33,0 v=76,-48 -p=58,76 v=-30,44 -p=6,69 v=6,35 -p=74,91 v=-61,-43 -p=36,92 v=-58,60 -p=2,78 v=-48,-98 -p=43,91 v=53,76 -p=34,101 v=-77,79 -p=40,44 v=-68,28 -p=71,64 v=47,-48 -p=54,7 v=84,15 -p=54,75 v=-60,-31 -p=14,40 v=86,12 -p=80,29 v=-92,-26 -p=8,47 v=-33,-69 -p=2,41 v=12,-9 -p=39,60 v=-38,59 -p=13,22 v=86,-20 -p=25,12 v=-57,11 -p=60,47 v=96,96 -p=50,51 v=-48,-82 -p=85,40 v=89,74 -p=99,4 v=-94,-21 -p=75,7 v=29,-73 -p=28,58 v=-80,24 -p=46,94 v=-9,56 -p=24,65 v=-76,62 -p=50,2 v=-20,70 -p=85,55 v=-5,66 -p=38,11 v=43,36 -p=53,54 v=53,24 -p=18,45 v=65,96 -p=94,22 v=16,80 -p=79,28 v=75,-69 -p=30,38 v=-15,-29 -p=5,23 v=-4,49 -p=8,98 v=96,-99 -p=7,60 v=-14,47 -p=96,17 v=88,-73 -p=48,23 v=-41,35 -p=17,31 v=-26,-23 -p=13,52 v=66,37 -p=58,19 v=41,55 -p=25,9 v=-77,-89 -p=3,92 v=55,-80 -p=74,95 v=20,-77 -p=26,70 v=43,72 -p=54,4 v=96,-18 -p=63,8 v=-97,49 -p=23,51 v=87,-75 -p=24,18 v=85,36 -p=8,52 v=6,-13 -p=97,50 v=17,-72 -p=47,66 v=-25,6 -p=38,78 v=3,-93 -p=62,6 v=5,77 -p=56,74 v=-70,-6 -p=94,99 v=9,34 -p=19,92 v=-18,26 -p=35,54 v=-47,-69 -p=92,8 v=-13,42 -p=47,86 v=12,-90 -p=12,83 v=-68,2 -p=0,18 v=-75,-89 -p=11,99 v=-99,14 -p=88,20 v=62,21 -p=27,53 v=53,-47 -p=17,44 v=-5,-91 -p=57,10 v=66,-65 -p=66,95 v=-71,-12 -p=38,21 v=23,95 -p=68,69 v=-31,35 -p=87,71 v=50,72 -p=98,12 v=47,33 -p=94,21 v=66,51 -p=53,97 v=-16,-93 -p=59,35 v=6,39 -p=12,88 v=-86,88 -p=85,16 v=39,8 -p=38,85 v=35,80 -p=44,9 v=-48,11 -p=71,18 v=-82,39 -p=85,14 v=-74,-73 -p=88,22 v=-42,36 -p=8,6 v=-58,38 -p=21,58 v=-66,9 -p=25,17 v=-68,95 -p=89,16 v=-34,-86 -p=33,54 v=64,-88 -p=57,8 v=54,51 -p=40,18 v=-98,58 -p=91,22 v=-34,-53 -p=75,81 v=-70,26 -p=89,70 v=-2,69 -p=62,6 v=-1,-92 -p=78,24 v=-82,-42 -p=47,7 v=-75,83 -p=86,8 v=-63,95 -p=80,64 v=-36,-79 -p=69,95 v=-30,29 -p=46,86 v=85,20 -p=76,35 v=-82,-51 -p=33,15 v=-17,55 -p=40,58 v=-2,-11 -p=76,31 v=39,2 -p=46,82 v=-15,-45 -p=14,53 v=36,-16 -p=98,66 v=68,-3 -p=83,38 v=35,-87 -p=41,9 v=53,70 -p=35,33 v=-68,-68 -p=53,66 v=62,97 -p=75,80 v=49,-62 -p=66,70 v=-50,47 -p=78,80 v=7,64 -p=82,16 v=85,-81 -p=58,25 v=11,-70 -p=36,72 v=33,72 -p=66,92 v=-91,10 -p=24,52 v=-98,22 -p=74,7 v=-36,-79 -p=46,26 v=-61,-90 -p=52,24 v=53,-88 -p=92,26 v=31,78 -p=60,52 v=80,-81 -p=82,78 v=-81,-49 -p=10,3 v=-15,-55 -p=91,31 v=99,77 -p=75,50 v=-91,40 -p=49,71 v=93,91 -p=1,94 v=-54,54 -p=96,50 v=39,18 -p=0,3 v=-53,33 -p=34,9 v=-17,-8 -p=96,28 v=68,-63 -p=25,4 v=66,21 -p=94,74 v=82,-89 -p=47,66 v=-17,87 -p=58,23 v=63,83 -p=13,82 v=-74,75 -p=29,85 v=40,79 -p=57,7 v=50,83 -p=7,88 v=-37,-16 -p=81,61 v=-10,34 -p=6,32 v=33,-60 -p=63,7 v=1,98 -p=59,29 v=-31,-85 -p=85,91 v=19,-18 -p=22,39 v=21,90 -p=25,13 v=75,89 -p=14,100 v=-27,30 -p=33,6 v=97,-53 -p=84,83 v=-22,38 -p=100,69 v=77,-38 -p=2,67 v=-14,-25 -p=71,71 v=-53,73 -p=9,43 v=-52,98 -p=55,76 v=-60,94 -p=49,91 v=-35,-95 -p=77,68 v=26,12 -p=41,91 v=-17,-15 -p=1,69 v=-44,72 -p=32,61 v=4,59 -p=94,12 v=-33,30 -p=1,35 v=96,49 -p=72,64 v=-61,-53 -p=76,93 v=38,-37 -p=97,9 v=33,61 -p=60,32 v=80,18 -p=16,68 v=15,-29 -p=99,72 v=66,44 -p=99,18 v=56,99 -p=42,11 v=-88,11 -p=57,69 v=-2,-2 -p=39,57 v=26,-51 -p=34,15 v=73,42 -p=56,55 v=-61,-75 -p=89,1 v=67,-27 -p=21,100 v=5,70 -p=85,11 v=-35,63 -p=16,35 v=47,-63 -p=98,0 v=93,-2 -p=51,89 v=-9,85 -p=50,32 v=84,-42 -p=29,63 v=78,-76 -p=92,86 v=89,10 -p=27,11 v=-77,51 -p=65,21 v=-59,68 -p=84,68 v=20,-50 -p=19,2 v=-24,-36 -p=25,78 v=25,-85 -p=90,92 v=59,-87 -p=70,100 v=10,-52 -p=48,78 v=3,54 -p=85,81 v=30,44 -p=53,65 v=41,-67 -p=13,95 v=82,-29 -p=5,19 v=95,75 -p=37,96 v=-68,26 -p=83,16 v=-5,-9 -p=31,17 v=4,-20 -p=83,34 v=-83,-76 -p=50,88 v=93,-5 -p=66,36 v=-30,58 -p=11,29 v=-44,83 -p=31,31 v=-77,-51 -p=26,85 v=14,-18 -p=8,76 v=65,69 -p=60,70 v=-40,47 -p=69,70 v=22,64 -p=85,53 v=18,12 -p=97,93 v=-58,-57 -p=52,83 v=92,-9 -p=20,92 v=30,50 -p=88,73 v=32,3 -p=83,16 v=-42,-14 -p=57,89 v=-29,20 -p=50,19 v=73,8 -p=8,101 v=-94,-68 -p=12,77 v=-4,-84 -p=63,28 v=-84,91 -p=46,25 v=13,-95 -p=93,21 v=88,-26 -p=10,54 v=-24,72 -p=69,16 v=-92,-30 -p=26,68 v=21,97 -p=56,30 v=-90,-51 -p=62,69 v=-1,-50 -p=7,6 v=55,-39 -p=63,78 v=76,92 -p=57,55 v=-51,-19 -p=70,62 v=18,37 -p=88,26 v=-61,82 -p=80,50 v=-73,99 -p=40,1 v=-78,86 -p=35,85 v=81,-12 -p=17,74 v=56,47 -p=36,99 v=64,-15 -p=56,18 v=-29,-14 -p=42,44 v=-18,46 -p=84,4 v=-63,-2 -p=97,75 v=27,-62 -p=47,71 v=54,-50 -p=26,101 v=-67,-83 -p=30,74 v=-57,66 diff --git a/2024/go/day15/day15.go b/2024/go/day15/day15.go deleted file mode 100644 index 349865b..0000000 --- a/2024/go/day15/day15.go +++ /dev/null @@ -1,119 +0,0 @@ -package day15 - -import ( - _ "adventofcode2024/utils" - _ "adventofcode2024/utils/grid2d" - _ "adventofcode2024/utils/grid2d" - "adventofcode2024/utils/inputs" - "fmt" - _ "regexp" - "strings" - - _ "github.com/deckarep/golang-set/v2" -) - -type Loc struct { - x int - y int -} - -type Queue struct { - elements []Loc -} - -// Push adds an element to the end of the queue -func (q *Queue) Push(value Loc) { - q.elements = append(q.elements, value) -} - -// Pop removes an element from the front of the queue -func (q *Queue) Pop() (Loc, bool) { - if len(q.elements) == 0 { - return Loc{}, false // Return zero and false if the queue is empty - } - value := q.elements[0] - q.elements = q.elements[1:] // Remove the first element - return value, true -} - -// IsEmpty checks if the queue is empty -func (q *Queue) IsEmpty() bool { - return len(q.elements) == 0 -} - -func Part1(input string) int { - var val int - var rloc Loc - in := strings.Split(input, "\n\n") - dirs := map[rune][2]int{ - '<': {-1, 0}, - '>': {1, 0}, - '^': {0, -1}, - 'v': {0, 1}, - } - grid := inputs.ToGrid2D(in[0], "\n", "", ',', func(c string) rune { return rune(c[0]) }) - directions := strings.ReplaceAll(in[1], "\n", "") - fmt.Printf("%v\n", grid.StringWithFormatter(formatter)) - fmt.Printf("%v\n", directions) - found := false - for x := 0; x < grid.SizeX(); x++ { - if found { - break - } - for y := 0; y < grid.SizeY(); y++ { - if grid.Get(x, y) == '@' { - rloc = Loc{x: x, y: y} - found = true - break - } - } - } - fmt.Printf("Robot: %v\n", rloc) - for _, dir := range directions { - q := &Queue{} - x := rloc.x - y := rloc.y - Loop: - for { - x += dirs[dir][0] - y += dirs[dir][1] - switch grid.Get(x, y) { - case 'O': - q.Push(Loc{x: x, y: y}) - case '.': - for !q.IsEmpty() { - grid.Set(x, y, 'O') - loc, _ := q.Pop() - fmt.Printf("%d,%d\n", loc.x, loc.y) - // grid.Set(loc.x, loc.y, 'O') - x -= dirs[dir][0] - y -= dirs[dir][1] - } - grid.Set(rloc.x, rloc.y, '.') - rloc.x = x - rloc.y = y - grid.Set(rloc.x, rloc.y, '@') - break Loop - case '#': - break Loop - } - } - // fmt.Printf("%v\n", grid.StringWithFormatter(formatter)) - } - for x := 0; x < grid.SizeX(); x++ { - for y := 0; y < grid.SizeY(); y++ { - if grid.Get(x, y) == 'O' { - val += (100 * y) + x - } - } - } - return val -} - -func Part2(input string) int { - return 0 -} - -func formatter(p rune, x int, y int) string { - return string(p) -} diff --git a/2024/go/day15/day15_test.go b/2024/go/day15/day15_test.go deleted file mode 100644 index 3abc33f..0000000 --- a/2024/go/day15/day15_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package day15 - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestPart1(t *testing.T) { - r := Part1(`########## -#..O..O.O# -#......O.# -#.OO..O.O# -#..O@..O.# -#O#..O...# -#O..O..O.# -#.OO.O.OO# -#....O...# -########## - -^v>^vv^v>v<>v^v<<><>>v^v^>^<<<><^ -vvv<<^>^v^^><<>>><>^<<><^vv^^<>vvv<>><^^v>^>vv<>v<<<^<^^>>>^<>vv>v^v^<>><>>>><^^>vv>v<^^^>>v^v^<^^>v^^>v^<^v>v<>>v^v^v^^<^^vv< -<>^^^^>>>v^<>vvv^>^^^vv^^>v<^^^^v<>^>vvvv><>>v^<<^^^^^ -^><^><>>><>^^<<^^v>>><^^>v>>>^v><>^v><<<>vvvv>^<><<>^>< -^>><>^v<><^vvv<^^<><^v<<<><<<^^<^>>^<<<^>>^v^>>^v>vv>^<<^v<>><<><<>v<^vv<<<>^^v^>^^>>><<^v>>v^v><^^>>^<>vv^ -<><^^>^^^<>^vv<<^><<><<><<<^^<<<^<<>><<><^^^>^^<>^>v<> -^^>vv<^v^v^<>^^^>>>^^vvv^>vvv<>>>^<^>>>>>^<<^v>^vvv<>^<>< -v^^>>><<^^<>>^v^v^<<>^<^v^v><^<<<><<^vv>>v>v^<<^`) - require.Equal(t, 10092, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`########## -#..O..O.O# -#......O.# -#.OO..O.O# -#..O@..O.# -#O#..O...# -#O..O..O.# -#.OO.O.OO# -#....O...# -########## - -^v>^vv^v>v<>v^v<<><>>v^v^>^<<<><^ -vvv<<^>^v^^><<>>><>^<<><^vv^^<>vvv<>><^^v>^>vv<>v<<<^<^^>>>^<>vv>v^v^<>><>>>><^^>vv>v<^^^>>v^v^<^^>v^^>v^<^v>v<>>v^v^v^^<^^vv< -<>^^^^>>>v^<>vvv^>^^^vv^^>v<^^^^v<>^>vvvv><>>v^<<^^^^^ -^><^><>>><>^^<<^^v>>><^^>v>>>^v><>^v><<<>vvvv>^<><<>^>< -^>><>^v<><^vvv<^^<><^v<<<><<<^^<^>>^<<<^>>^v^>>^v>vv>^<<^v<>><<><<>v<^vv<<<>^^v^>^^>>><<^v>>v^v><^^>>^<>vv^ -<><^^>^^^<>^vv<<^><<><<><<<^^<<<^<<>><<><^^^>^^<>^>v<> -^^>vv<^v^v^<>^^^>>>^^vvv^>vvv<>>>^<^>>>>>^<<^v>^vvv<>^<>< -v^^>>><<^^<>>^v^v^<<>^<^v^v><^<<<><<^vv>>v>v^<<^`) - require.Equal(t, 0, r) -} diff --git a/2024/go/day15/input.txt b/2024/go/day15/input.txt deleted file mode 100644 index 923444c..0000000 --- a/2024/go/day15/input.txt +++ /dev/null @@ -1,71 +0,0 @@ -################################################## -#...O.#..O....##O..OO.#O..#.#.......OO...#O.#OO..# -#O#..OO...O..O.O.....O.O.O....OO#.....O#.O.OO..O.# -#........O....#...O......O.OO...#..O.O.#O#....O..# -#..O.OO..O..O.#..O.O.OO.O...O...O......#O.....O..# -#..OO.....O.OO.O#.......O.........O.....O.O.O....# -#.O.#.O.O#......OO........O.O.....OO..O.O.O.#.#O.# -#........#.....#.##O....O.O..OOO.......OOO.#O....# -#.O#.#...OO.....#.......O...O...#O.O.......OO..OO# -#.O...O..#O...#O..O.........O.O..OO..O.......O.OO# -#O.O......O.OO..O.O.......O.OO#O.##...#....#O.O.O# -#.O...O.OO.O....O..O.O...O...#.O....OO..O.O#O#OO.# -#.....O.O..#O.....O.O..##O.O#OO...O...O.O.O......# -##..O...O..OO.O.O.O..OO........#.##.........O.O..# -#..O...O.OO..OOO.O...#..#.........#.O....OO......# -#O....OOO.OO...O##.O.OO..O.O.....O.O.OOO....O.O.O# -#O.O..OO.O..OO............O....O....O..OO...OO..## -#.O...O.O.O.....O..O.O...O.#.......OOO...........# -#O.O...O.....#..O..#O...O.O.O....O#...#.###.....O# -#.O...O.O..#O.#.OO.......O.OO.O...O...........O..# -##O.#O....O.#............O..O..O.....O..O..OO....# -##..#.OO.O.OO.#.O....O...#........#........O.O...# -#..O.OO...O....#..OO.O...........OOOO#..OO#O.....# -#OO.O#...#..#...O#........O.OOO...OO....#O.OO#OOO# -#...OOO............#O.#.@...O.....O#.#.O...O..O..# -#...O...OO.#..O......O..............#OOO......OOO# -#..#OO...O.#O......O..OO.O#...O....OO..O...O.O#O.# -#.#.##...#O........#.O.....#O#.O.OO..OOO..#..O...# -#.#....#...O..O#O..OOO.....#....#......O...O...#.# -#....O....O......O.O.O..........O.O..O.O......O..# -#.#OO#O.OO............O##.##O.O#.O...O#.........O# -##.O.#..........#......#OOOO.OO.#.O.O.O.....O..#.# -#O.....#OO.....O..............#...O.O..O.....OO#.# -#O.O.O..O#OO.O.O....O..O......O..O........OO.....# -##O....O...............................#.O.....O## -##..O...#...O.........O#...#O...O.OO......OO.O..O# -#O..OO.....OOOO.#......O.#OO..O.O...O.O...O.O.O#.# -#..O.....O.O........O.....O.....O#....OO##OOO..#O# -#O..##....OOO..O#.O....O.#...O.....O.O.O......O.O# -#..OO.#O.......O.OO.O#O.O.....O.....OO..OO.OOOO..# -#.#.#OO.O..O.O........O#.#...#..O.O.O.#.O..OO.O.O# -#..O#.OO.O.#.....O...O..OO#..O...O.O#...O.....#.O# -#.OO.OO....O.O..O..#OO.....#......#.#OO..#.#O.O#.# -#...O....#..#......O....O..O#O...O....OO.......O.# -#.#.....O#.......O..O..#O.OOOO..........O.O......# -#.O.O.....OO.O.O.O..#O.O.O..O.OO....O....##.....## -#O..#.OOO##....O.O..OOOO.O...O..O#..........O....# -##.O##...O.O.....O.O#...O.........#...........OOO# -#O#O.....#..O.OOO...O..OO.....OOO............#O..# -################################################## - -^^<^>^^<<^v>^><^^^^^<><^v>v<^vv>^v<^>>v>^vv<>>>>>v^>v>^>^v<^v^>^^>v<<>>^v^v>^>v^>^^^<^^v>>v>^>v<^^vvv<>vvv<^v<>v><><^^<>v^^<^><>>^^>v^>^<><<^><<>v>>vvv<^^v^v^>>v^^>^vv<^<^<^<><>>>^>>^<><^v<^<^v<^^>^<><<^<<^vv^^v^<^^vv>>^v>^v>^<^>^><>^v<>v>^^^<^vv^^<^v><^^^v<<>>>^<^^>^v>>^^<^^>^>><<^>>vv<>v^^<<>^<><>^^v<^v<<>vv><^>><^<^>>^^>v<^>v^>^<<^^^^v^<>^>^v^^vv<><<vv^v>>>v>>>>>^v>^<><<<><>v<>^vv>v<>^v^<>>v>>v^>^vv^vvv^^<<>vv>^>^v>>v^^vv<^v>^^vv<>^v>^>v^^<>^^>^^v<>^^^<^^<>^>^v><<>>^<>>v>>^><^>v<>v^v<>^<<>>v>^v<>^v<^>^^v>v>>^<^^^<<<<>vvv^v><<^^^v^^^>v><<^^v>vv^v>^>^v<>>vv<<^v<>v><^><>>^vv><>><><<>>v>><>v^^<^v<>^<^<^>v^^^>>v<^^<^^^>^^>^>^>^^<>v>vvv^v^>^<^<>v>^^>v<^>v>v>><> -^vv>>>^vv><^v^<>v>^><^^^>^v>><>>^>^<<^^v^^vv>^v^<^v^>vv<<>^>vvv>v>^vvv>>vv^>v^^v^^vv^^<><<<^^><<^>>>^<>v>>^v>v>><>v><<^v^><>v>v>^>>^^><>v>^>^v>^>><<<^vv<>^<<^><^<<><>vv^^v<<>v>v^vvv>^>^>^<>v<>vv>^>>v^^v<>><>>v<>>^^<>v^vvv<><^^v^>vv<^^>>>v>^>^^><<^v>^^>>^^>v<<<><<><>vv^>v>v^>vv><^<>><<>^>vv<<>v><^^^>v^^<^v>v^<>^<<>^^vvv>vvv><<><^><>>><<>>^><^>^><><^^vv<^>^vvv<^>>><<^>><^v<<^>v>^v>v>>^vv^>>><^>v^<>>v>v^v^><^v^v^<^v<>^><^>>v^^>v<^^^v>v>^^^<^^><><^>>v<>v<^v>^^<>v^>^vv<<^<^v^^^>v^vv<>vv>^^<<><^>><<^v<^>v>>^>><<^<>vv^>v><>^vv^^v>v<<>^<><^^>^^><^>>^v>vvvv>^>v><<^^><^v^<^v><^>vvv><^v<>><<^^>^<^<<<v>^v^>^>vv^<><><>^^<^v^^>^^^^^vv<<<^vv<<<>><>v>vv>^^^<^><><<><<>><^vv^^<v<>^^^^<><^^^<>^^<><<>>>^<>v^^>^^>>^v>v^ -^>>v<><<<<v<<<<^v<>v<<^vv<^vv<^^>>v^>^v^>^<>>>v<^<<^^>>vv^^<^^^>^><>>>vv<>vv<>^^>vv^vvvvvv^v>^^<<^<<<>v>^<^v>vv<>^^>^>><^^^v<>^<^v>^><><<<^><>^>^^vv^>^<<<^>^v>^v<<<>^^<^^<<^<^^<>^<<<^v^<>^>vvv><<<^vv^<^><>><><>v^^>v<^<^vv<>><^>v>^v<><>>^v^^^^v^<<><^^v>><>^v^<>>^v>v^^v<^v><>>v><^^<<^v<>v<<^^>><<<^>>vv>^<^>^<^v^<^v>>>>>><^vv<^>v>>v^>>vvv^vvvvvvv>^^>>>^v<>><>^<<<>^><^^v^v<>><^>^>v><>>v^>^<^<^><<^<>vv^^v^<>v<<<^>>vvv^>><<^<^^><^^>>>v>^^^>^vv^<<>^^^<^v>><>>>>v^<>>^^^<>v^^v^>><<>v>>^>^vvv><>^v>vv^v>>^><>^>v<<^>><^^v><^>^^>^>vv><<<^vvvvv<^<^<^<^^<>v^^>^v<^^v<>v>^>^>vv^>v>^^<^<^^v><^<^^v^v<>>^>v^v<^v>>><^v<^<<^v<^vv^^><>^v<><^>v<>vvv^^^>^^^^^v<^^^^v<><<>>>v^v<>v^^^>^vv>v>v>>><>v>vvvv>v>>vvv>^v<>^^v^<^vv^^>^^>>vv<><^vv>^<^>><<>>v>vv^vv<^<<<<>^v<<>>^v<>>>^v><<<><^<^><>>>>v^>v<><^v>v^>^^v^^>v<v<^v^^<<<^v^^vv^vv>vv^>^^vv^<^^<^>>>>^><<>^>^v^<^v>v^v><<>v^<>>v^^^><<^>^>^<^vvv>>^<^><^v>^^<><^^^>^><^^>>v^vvv><^<v>>^<<<<>^vv^>^<^<<>><^>vvv>v>>v^><><>vv>>^vv>>vv<^<>^^^>^>v>^v><^v^>v^^v^>^>vvvvvv<<^^<^<>^^^v><>><<<^^<>v<>vv<^<^v^v>v>v^vv^v<^v^<<<<^^<<>v<<<<<>v<^vv<>^<>><><^<^^<^<>v<>^<<<>vv<^vv<>^^<>v><><<<^<^>v^vv>vvvv^>v<^^^v<<<>>^>>^>>vv>>>v>v^<<>^^v>v^>^<^^<^^>><^^>v>v>^^>v>>>^<>^^v^v>^^<^v>^v><<v^>v^vvv><<^>>v^^>>>^vvvv^>^^v^^>vvv>^v^^^v^<^>v>>>^^<><>vv>^vvv<<>>v^<>^<^<vv^<v>v><^^>^>vv<^^<^^v<>^vvv^^v^vv>>^>v>v<^^<>vv>^<<>^^^>^<^<^>v>vv^^><>^>^v>>^<> -^<^^<^>v<^<^>^^>><<<>v<^^><>>^^<^^>^v^^><^v^^<^vv><>>v<^v^>>>^<>>^>^>^<>^^^<^v<>vv^v^^<^>v>^>><<>>v<><^<<<>v>>^<>>>>v>^v^<<<>^vv<<^>vv>vv>><^><><<>v><^<>v>>>><><>^vv<^v^vv><<^>v>v<<><>^>^v<^>v>v<>v<<>^vv>v><>><<<>>^^^<^^^^<>^>>vv>^v<^>>vv>^^v>^vv^^^v>v>>><<<>>>v>vv<^>^v>vv^^^<><>v<^>><^vv>^<<^<>><<<<^^>^^<><>v><<^v<<<<<^v>v<^^v<<^<>^><<<>>v<<^v>v>>>v<>>v><><^vv<^^<v>vv^<>^^>>>><<<>^^^^v>v>>>>^v><<^^>v^<v<>>^^v>^><^v>^>^^vvvvv>^>v>v>v>v^^^>^<><<^^^^<>^<^v>^>>>>vv>>>v^>^><^^v>>^>>vv<^^<>>vv^^v^<>>>vvv<>^>vv^<<^<^<>vv>^>v>v<^<<><^v^<^^^<^^^^vv^>^^>^^>><>^<^>v>v<^>>^^^^>^^><>vv><^^>v>^^^^v>^v>^v<^v^>v>^>^^^>v>v^^v^v>^v<^^^>^>vv^^vv>vv>v^v<^<^vv^>^^v>^vvvv<>^^v<>><<v<^>><><^><>>^< -^><^v>v^>vvv^^v^vv<>>>v>>vv^^>v^><^^<>v^><>^v^>v>^^>><<^><>v><^v>>>><<<>v^><<<>><<>^v^^^^<^^><><>^^vv^<^v^>>^>^><>vv^>>>>v^<>vv^>>v^<>vv>>><^><^>^vvvv><<^vvv^<>>v^v>><^^^><>>v^>^<^^><<<>vvv^^^v>^v<>v^>v<>v>v<>^v>vvvv<^>^^^v^^<>^<^^v>>^^^><>v^>><^>vv>><^^^v>><^<<^><<>^>^<>vv>vv^^^^<^>^v<>>^v>>>^v<>v<^v<<^v^v<<<^>>v^v^v<<^^v>vv^>v><>v>^vv>^v>>^<<^><>v>^>v>^<<^<>>^^v<>^>v^<>^v>vvv<><<>>^<^^>^<<>^<>vv^^v^^<<>v<<><^<^^<>>><<^v<<^>v<>vv>^>>>>>vv<<><^^vv^>v^<>v<<<>^>^v>vv^^<^v>v<^<>>^vv>v^<>^v^<>^>><><>v>>v>^><^><^>v><<>>^^^<<^v>v>^vv^>>>^^<>v<^<^>>^v^>v<><^>>>vvv^^^^>vv>^>>>><^<>^>v^v>v<^>>>><^^vv><<>vv<>v<>>^>^^<>>vv>>><<>vvv<<>>vv>^<^^v>>v>^<<<><^v^v^>^v^><<>^v><>>^^>v>>>^^>>v<>>>^v>^v^<<^<<<><>vv^>vvv>^^v>v<^v^v^><^v<>^v>^<>><<^v>vv^ -^>v<>>^vvv>>v^vvv>>v^><>><^v<>vv^>^^><<>><^<^>^v<>v>>v^<>>^<<^vv<^^<>^v><<>>^^<<^vv^v>^>^<>v>>>^<^<^<>v<^><<^><<>>vv><<><>^>>v^^>>>^v<^^<v><>><^<<^v>>^vv^v<>^>><>>>^<>>v><>>^^v>>^><^^^>^^>^>^>^vvvvv<^^>>>>v>vv>v>^vv^v<^v>^>^>vv>v<>v<><<>v^v<>><<<v<<>^v^><>v<><^v>^>^><^^^>v<>vvv<<^^v>^vv^<^>v>>>v>^^><^>^v>^v^^>^^v><>>^<^><^^v^^vv<^>^^>^>>vv<^>vv<<<>><><<^^v><^<^<>v^v>^v^<<v^<<<<v^<>v<^^<<^>^v<<><>><><<<^^>v>^^<^^>v>v<^v>^>>v>>v>v><^v^v<^v>^vv^><^v>><<^<^^^^^^>>v>v^<>v>>v<>v^>v><<<^v^<^<^<>^>>v>>>v>^vv>^^<>v^v>v><^v^>v>>^<^v>>>v>v>vv>^^^>vvvv^><^>^^^v<^><>^^<<^<<^^<^^>^<>^<^<^^v<^^<<>>>^v>^^^^^^^^<>v><^<^v><^>^v^^v>v^^<>vv^<^^v<>v^>^v>v<<<<>><>^<^<^<<><>>^<><<^^<>v^>>^vvv^<^^v^^v<<><^>vv>>^v<^^>^^>^>> -^>vv>^^>v^>>^><>>^<>v><<>v>v^^^>>v>>vv^^<<<>v^^v<<>v>>^<>^v<^^^<><^<<>^<>>v^vvv^v^<^>v^<^^<<^^<<^v<><^v^^v^v^v^^>v^><^>vv>>^><^<v>v>><>^v>^^<^>>v^<<>v<v^>vv>vv^>v^vvv^<>^v><<<>v^vv>vv<>^><^<><^v>>v<<^^^><^>^<>v^^v^^><^^>>v^^<>v>><>v<<^^^^^<<><>^vv^<><<>v>>>^><<^<><>^^v^vv>>v^vvv<>><><>^vv^v>^<^<^v>>>><^>>v>^v><<>^^<>^v^<>vv^<^<>^<<>v><^<^^^^>^<>^^^^<^^>v<<<v>v>>^vv>vvv^>v^vv>v^>vv^v<>>>vv>^>>^^^>><^^v^^<^^>vv<^v>v^vv<<^^<>^vv<^vv>vv<>>^<<>^<<>v<<>v<>v^^<>vv>^^>^vv^v>^<>v^v^>vv^^^>^>><>v><>>>v>>>v>v^v^v>v<^>^<^^>v<>>^><^^<^^<^v^v>vvv<^vv<^<><>^<v^>vv^^^>^>^>><<^>>^v^>v^^^v<^^^<^>>v^v<>^<><v><^^v^<^>>^^v^>>^<<<>v<^^^^<<^^v^^^^^>vv^>>v<^><<<>v^<>v>^ -^^<<>^<^<<<>v^^v>v>>^^^^^^<><^^<<^^v<>^^<^>^v>>>><><<<^^v^<><<<><<^v<<^v>vvv>><^>^>^><^>^>>>v^<<<<^>>v^><^^vv>vv<^>><^^v^^vv<>^^v<>^>>^^vv^^>>v^>>><v<^v^vvv>vvv>^v>^^^<><>v>v><<><^v>>>^<<^vv^^>>^<^^v^>v^<><<^>v>^v^<<><><>v^>>>v>><<^^v^vv^v<><^vvvv^>^><>>>>v^>>^vvv^<><^v>vv<>^><><^>v>vvvv>^^>vvv><^>^v>>^>v>^v<>>>>^^>^>v>^^>^^>>><^<^^v^^^^>^v>v<v^vvv>>v^<^v^v<^v^v<^<<>^v^<>>v>v>^^vv>^v><>^^<<<>v<>v>v><<<<^vv>^>>v><v<^v>v<<>><<>^><<^>>vvvv^<^v^^>>vv>><^vv<^^^>>>v^>^v>vvvv^>>v^><<^<^>^>^>v><><<<^<^vv^<<<>^<<^^<<>v<>><<<>>>>^>v>^^><>^><v>^>^v<^v^v>^<^v^^><<<>v>>v^vv>^^^^v><^>><><<^^<>vv^v^<>^>^<>v<^^>>>^>^>><<<><^>>^v><<>vv>><<>v^^>v>vv<^v<^>v^v>>^v<><<<>^v^<><^v<<vv>>^>^>^>>v>^<^v<<<>^v^v>^v<>v>v>><^<<><>v^^^v^<<^v>>><^^^v>vv>v<>v<>^^> ->^^<^v>v<<^<>^^>^<>vv>v^>^<^v^^>^>vv^<>><<>^v>^>v^v<^^^>v<>v>>>vvv<>^^^vv<^v<^v^<^<>>v<>^><<^<^><^<vv^>><<>>^vv>vv^^>v^^vv<>><>^vv^>v>>^^<^^v^>^^v<>^<<<<^v^^v>>v^^v>^^<^<^>>v^v>^<^v<>>^vvv<^vv>^<<<>^^^<^^^vv^^^<>^^v>>>><^>vvv<^><>^<><>^^>>^<<^>^^<>vv^vv<>v<^>vvv><^<^v>vv<^^^>v>>vv<>><^^v^^vv>^<<^<<^>v^>v^<>^<>v^v<>v><^>>^^<><>>v^vv^^<^>v<>>>^>>><<><>>^v>^^>>v><<^^v<>^<<><>>>>^>><><^>>>v^vvv^^^<><>^<^v<>>v^>>vvv>^<>^vv<>^v>><>><>v^v>^^>vv<^<<^^^v<><^<^v>vv>^<>v<<^vv^^vvv>><>>v<>v^^vv^>^<<^^v<^>v<^^<<^vv><>>^v>^^vvvv>^<^v^^vv><^^^v<>>v^v^^>v^^^^^^^>^v<<><<<^vv<<^vv^<<^<<>>><<><<><>vv>>^^>>>>^^v^^v<<>>^<>>>^^<>>>vv><<>>>^<^<>vv>>v^>v>^>>>^>^>>>>>>^>>><^^v><<><^vvv^>^v^>^>>^v>v^v<>^><^>v -^^^<^vv>^<<^<<><^<<>v^<^^vv><^<>^v>v<>^v^^vvv<^<>vvv^>><^vvv<>^>><>>^>v<>>>>>v^^<^<>^>^<^<<^^<>^>^>^v^v<<>v>^v>>>>^>v>>^v<>><>^>^>v<^<^<^<^<<<>^^>>^<>vvv<<>><>^>vv^>^^v^^>v<^^>>>v^v<><^^vvv>v<<^<^>^^<<^v>>><^^<^^v<>v^><>^v^<<>v>>v>^^>><^<<<^><^^vvv^>^>v<^v^>^><<^v<>>^><>^<>>vv<><>v^<>v^<^>>vv><^v^v<<<>v>^<^v^v<<<^<>>vv^<^^>>^v^<v<^vvv<>v^v>><^v>>^v^^^><<^<^<^>^vvvv<^v>^>>>^v<<><<^>><^^v^^^v^>vvv^^>^v<^>vv^^^v>><<>vv>>^^<>^v>v^v<<^^^>>^vv<>>v>vvv<^v<<>^^v<^>v>^>v>^<>v^v<>>>^vvv^v^<>>>>^v^<<>>>>v<>>^^^^><<^^^^<>^>^<>><<^<<>>^>>vvvvvv^><^^>^^^>^>v<^^^^>>v>v<><^<^^>>^>>^v>vv^vv^v<>>v<<<><vv^<^v>v><>^v>v<^<>>^>>v<<<>^vvv>v^<<^^>^<>vv><>^^^v>v^>vv<^^<>^<>v>vvv<^><<<>^>>^^>v^v<<>^v>> -v^^v<v>>><<>^>^>^v><^^v<^^^^^v^^<>><>>>^<<><^<<^>^<^^^<>>>>v<<>>>vvvv^v^<>v^^>>^>>^<^^v^>v<>^>vv<>>>>vvv>v^v^vv>v<>>vv^<>v^<>>v<<>vv<<>^>vv<>v>^<><^v^>>^<^<<>v^<<^><><>^^><><<>>v<^vv<>^>>v<><^>^<<>^>v^><><>^v>^<>v<^>^v>^>>^>^<<><<^>^><><^v^><^vvvv><>^v>^>vv<^v><^^^^>><^v<<><>v^^^^^^^vvv>^<<<<>v^<<^><<^>vv<^><^vv^>^vvv^>>>><<<^^vv><^><^>>v^^>^^><^vvv<<^vv^^<^>^>v^vv<><^>v>v><>>^>>^^^^^v<>^^>v^>^>^^<^<^^vv^^vv^>vv>vvvv<>v^>^<^^v>^>^vv>v^v<<><^v>>>vvv^^<<>><^^>^vvv^>v<^>v>>^<>^<>v><^<>><<<>><<<^>>>v>vvv^>><>>>>^>v>>v>^>^>>><>^><<^<^>v^^v^>^^>^>^<>^v^>^v<>v^<<>v^v>v><^>>v>><<>v><<>vvv>><^^v<>>v>v^>>vv>^<^>^<>v<<^vv<^>v^v<^<<^<^v<^v><^vvv>^<>^vv^>>><^^<^v<^^<^v^vv<<<>^v>v<<>v>>< -<>>vv^v>v<^<^^v^v^<^>>><^^<<<^<<^<^<<>v^^^^^<^>v^>vvv^>><^<<>>v^<><><<^^<^^><<>>v^v^v>><^^>>v>v<^<><^^><<>^<^v^^v>^^<^v^^v^<^v>^<><>^>^^^^<><^^<<>v>^<><^<><^v^^<^^<^><^<<^^^>v<<>^>>>>>>v>^>^>><^^>>^v>^v>><^vv^v<<^^^<^v^v^>v^v>^<<^vvvv>v>^^>><<<<>^v^v^><><><<<>><^<^^^^vv<>>>>>^v>>>>>v^<^<>vv^<^^v^^>>^^<^<^<><>>^><^>^<^^>v<^^>><^<^vv^v^<<^>>>v<<^>><<^v<^<^<>v<^vv^^^v<^v<^^vv>^vv>>>v^^^>><>v^>><<>v>^^^<^^<<>><>v>>v^v<^>vvvv^^^^vv><>v>^v>v^v><<>^vv^v>>^<>^^^^^v^v>^^vv>v>>>v>^^^vvvv^^>^^><^vv><><>^v^>>v>v^><><^^^^<^vv>^^v>^^>^vvv^^>^>^^v^<^>v^vv<>vv^<<><>^>vv^^v>vv^^<<>>^v^^<<^>^><>v>>^<<v>^v<<<<>^v>^^^>>v<^^v>>v^>v>>>^vv^>><<><><^^^v<^>>vv>>>^^^vv>>v><^^>v><>>^>v>v^<>vv<<^vv>>^>^vv>vvv^>>vv^^<>><>v^>^v>v^v>^>>v<^v^<><>^v<>>><<>^v><>v^vvv>vvvv>^<< -^^><<<^^v>^v<<^<^v<^v^v><^v<^>^v<><^^<<^>><>vv^vvv^v>v<>v<<>vv><>vvv<><^vv^^<<^<^v<>^<^<><<>^>>^v>>^v^>><^>^><^vv>>>>^>vv^v^<<>^^<^v^<v>>^<v^v>v>v><^>^vv>v<^v^vv<>>^>>^>v^^^^^><<>vv^vv<^^>^>^<<^^^>v<>vv<^^<^v>^>>><^<<>^<>^v<<>^>v^>vv^^^<>^^<>^>>^^v^v>vv<<<^>>>v>>^^^>^^v^<^^>^>^>>>><^^>^<^^>v<<^v>^^^v>^^^>^<^^>v<<^v>vv>v^^>^>v>^vv>>v^v<<<>^<^^v><^^<^^v<<^vv>>v>vvv>^v>vvv>^<><>^><<<^v^^^^v^^>v>^>v<^v<<^>^vv^^<>>^<^<v>^<^^<>>><>><v<>><^vvv>v>>>^>v<^^>v^^vv>v^^<><^vv^^v><^^<>^>v>>vv<>>^<<^^vv>vv<^^vv^<<^v<>>v<>>>>^^v>v>>^<^v>vv<^>^<<><<^<>>^<^><>^>v^<>^^<^<>v^v<>v><<>^<^^^v>^<^<^>>>><>^><v>^^<^>^<>v>^^<<^v^<><^v<>^v<<<<<<^^<^>v<<>^v^>^v^v>^<^>^<^>v<v^v>^v>>^v<>v<^vv<>>^^^<>v><><>><>v>^>v^v -vv<<>>vv<^>^^<<^>v>^v<<^^<<^^>^>>vv<<>^v><>>>^^<<^vv>vvv<<><<>v^v>v>vv^>v>^v^>^>>^v>><>^<^><<><>>>vv<>>v>><>vv<<>>vv>^^vv<>^^<<<^^v<>v^^<<<><>v<^^>v<>^vv>^v>>^^^<><<^^^<<>>^v^>vvv^v>v<^v<<>>^v^^v^<^<>^^<>v><>><><<^v<v<^<<>>><>>vv^>^<<>^^v>^>^<<^v>^>v^>^vv<^v><^^v^<>v^<^>>^v<^^^^^v^^>^<v<><^><^v<^<>v<^v^v>^>v><^><><^v^<<>^>^>^^v^<^<>^>vvvv^v^v^v^v><><><>v^^v^<>>vvv^<>^<^^vv^^<<<^v^>>>>>^^>>^>>^^>^v>vvv<^^v>^^v^v^^<<^>>v>v>^^>^<<^><>>^v^><>^^>v>^<<>^^><^v>^>>^^^<>>><<^^^<>>v^<><><>v^v>><^<^<^v^>v^vvvv^v>>vv^>v<<^^^<<>>^<>vv><^>^v>v^<^^^v^>v^>^<>^v^v^v<<<^>^<>^>v<^>>>vv<<>>^vv<>^>^vvvv>v<v^v<^vv<^^^v<^<>^><>>v>^><<^<>><^^>^v^^<^^vv^<<>>v<^v>>><<^^v>^<^v^^^v>^^^^<^^^<^>v<^<>>^<^>vvv<^><>v<^^>><^><^v<><<<^^v^^><^v<<>v -^vv<>v>^v>^<>^v><>><><^>^^^^<v^<>^><>^v<<vv>>v^<>v><>v>v^^<<<>>^v>^vvv<^^^><^v>>v^vv<<>><>v<>>v<<<^<<<^<><<<<<>>^v^vvvvvv^v^<>v<v<>vv<><<^v><>>><^v^v>v>v>>v><^v><>^vv>v^v^^>>>v>v^v>vvv<<<>>>v^v><<<>v>>^><<^vv<>><^>^vvv>v<<<<>^>v<^^<><^<^>>^vv<^v>^v^>^^>^^><^vv<<^<><<<^<<^v^v^>^>>>^v^><<>>^^v^<<^<>>v^>vv><>^^<^>^^v^v<<>^^^v<>>><<^^^<>^^>^>v^^>^v^^<^>^^>vv>vvvv<^v>v^v<>^v<<^>>v>>^^v>^^v>v><^^v<<<vv^<>><<>vv^<<><^<<^^^v>^<<<<^>v>^v^^><>^<^vv>v>>^^>>^><^>^<^v^>^>>^>v<<>><^^<<>vv><^<<<>v>^^v>vvvv>v<>>><^^>^>^vvvv^vvvv<>v<^v^^^^v<>^^>v^^<^^<<^<>^v<^v>>v^<<^<>v^^v^^<^>>v<>^<>>^<><^^^>><>v^<^><^v^^>>v<^<>v^<>^vv>v<^^<^vv<>vv>>^vv>^v<<^>>^^>vv^><^>><^>^>v^v^vv>v<^>><^>v>v>v><>>^<<><^v<^^>v>>>^v><<>^v>>v>^ ->^^>^><<<>v>>^><<><>^<><>>^>>>v^vv^<<>^>^v<>>>>v<v<>v^>>v<<<<>vv^v^<v^>^>>vvv<>>^vv>^v^><^^^v<>>v^vv^v^<^^v>>>v<>^v^<^vvv<><>>vv^>v<<<<>>vv<>^v>><^><^^^>v<<>>>v>^v^<^>v^^<v>v>>>v>^>^v<^<^^<^vv>^<>^v>vv>^^>><^v^v>v<<>v^^^>^^>^<>^>v>>v>>>>vv><>>^v^>>v^^v^><>^><>^^>>>v^<>>>v^>v^^>>>>v>v<^v>>^v^><>^^<>^<<<>^<>>>>>v><>^v^v^<<<^<<<<>v<^^^v><><>^^v^v<^^^^>^<^^^<>vvv<^v^>^v><>v^v^^<>>^v><<<vv^^>v<^^<><<<>>>>><<<^<>>^v>vvv<>v<<^>>v>v<>>^>^^v>><^<^<^^^vv^<><^^v<^<^<>^>^v>vv^v>^v<>v^^<<<^^<>^v<>^<^v^><>v<>^v>^vv^v^>>v>^v<<^>v<<^^v^v>^v<^^>>>>v><>^>vv>^vv<^v>^>v>v<^^<>v^>^v^>>v^^>^v^>v<^vv^^^v<><>^^^>v^^>^<^^><^v^>><^^v>^^^v^>>><><<<>><<<<>v>^>>>^^^v<^^^><<>>>^v<><>v<^vvvv>^<><>^<<<>v^^v^^>vv -<><^>^v^>v^^^<>^^^<><>>>>vv<^v>v>^^><<>v>^<^v^vv^<>>^^^^^v^>vv^><^>>^v^v^^vvvv>><<vvv><><^^>v^>><>^<>^^v^^v>^>^^v^^>v^><^^v<^><>vv^<^^^>>vv^^<<<>>^^v^>v<^<^v>>>v>>><<>><>v^^v<>v>^v<<^^vv^<>v^v>^<<<>>v^<>v^>vv>v^^>v<>v>v>><>^<<^v^<^<^<^vv>>^>vv^^>>^<><>^>>vvv^>v^^>vv^vv<<>v><vv><<>>>^<^v<<<>v^<<>^<>>>v<>>^<^<^v^<^v>>v<v^<<<^<>^v<^^>v>^v<^^>v^v^>>v>v<<^>v^>v^>^^<<^^v<<^v<<^vvv^>^^>>><>^>^^>><v>>>^v>^>>v<^^v<>^vvv>^^>>>v^>v<<^<^v><^v>^^>^v>^<>v^^<>vv>v><><^v^>^^<<<<>><<>^^<<>v^>^^>^^vv<^^v^^>^>vv>>^<>v><v>v^^^vv^vv>vvv^>vv>vv^>>>v<^^><^>>vv>^><<><^><v>><>vv^<><<^<^<>^>v>v^v<<>v^><^^v<>^>vv^v>>>^^^v>>>^><<<^<^<^^v<<<>><>^^vvv>^vv>>^v<><^v<>v>^v^><>^v<v^^^><^>v^vv<<vv>v><^v<^^^><^^ -<^<^v>vvv^v<^v^^>vv^><><>vvv><>vv^^^>^<^^<<^v^v>^v^<<^>>v<^^<><^v^<>>>>^<<>^v^<<>><^<^><<>v^>^>v>vv^<vv^^^^vv>^>vv>^^v<^<>>><>vv>>vvv><^v>^v^v^<^>^vv><^<^>^><^<><<^^vv>>^>v^^^v<><^v^<><^>>v^^v<^>v>^^<>v<<^vv^v><^v^v<^vv^><><^^<>v^<<^^vv^<<>^v^^^<<<><<>>^>^>v><<>v^<<>v<^v^<><<^^<>vv>^vv^^v^v>^><^vvvv^v^>^<^^vvvv^<^v<^<<<>v>><>>^v^^><>^v>^v><<<^^^^^<<^><v^>v>v>v^^^^v><^>>^>^><>v>vv<<>>^><>v<><^<>>^^<^>^^^v^^<<>>vv>><^<<<<>^v<<^v^v<<>^>^vv>><>v<^^<>v^>v>>vv<^vv>>>>v<<>v><><^<<^<^><<<<>v>>v><>v<>v<^vv><<>v>>v>vv><^>><>>>^^^>v>^<>v<>v^<^v<>v^^^vvv^^v^vvv>vvv^v>>^<^>^v<^>>>^<>>^v<<>v<^<<^><>>>^<><^v^^><>><^>vv>^>vv<^v^>v^^v^>^<^>^vvv>>vv^^vv^><^^<<><^>^v^v>>^<^<^^^<<^>v>>^vvv>v>><^>^<^v><^v>^v^^<<^>^^<<>>vv^^<^ -<<<^<^v<^v>>v^^>><><^>vv>^^^vvv<<>^>v>^><<<<^vv^v>^>><<^vv>^^<>v>>>>><><^vv<>v<^><^>>>v<^>>v^<^>>>^>^>v^>vv>^>^vv<^^<^vv^<^><^<^^v^<><<^><^>>^^<^>^>^^<^v^>><^>>><><^^>v^v>vv^^v>^><<^<<<><<<^v>>>><<<>v<>^>^v^<>^><>^>><<<>>^v^vv^v^<^<<>^^<<^^>^^v<>^vv>v>v^^v^>^v<^^v>^<^v><<>^<^^v<^^v^<><<>^^<v>vv>><^>v>v<>^v>v<<<>v^<>vv<>^<^>vv^^<^<^>>><v^^vv><<^<>^<<<>v>vv^><^>><>><^^><^v>v>><>>v>>v^^<<>>v>vv^>^v>v<^>><>>vvv<^>^>^^^>^>^>^><>v><^>>vv><^v>>^>>v^<^<<>>v<>v>v^^v^<>><>><>^>v><^<>^><>v><<<^v<<>>^^<^^>v^>^>^>>v^v^>^^v>vv^v<vvv><>^^>vvv^>vvvv>^^^>^<^^>v<^vvv<<>^<<<>^>^v>v>v^><><^>>>>^>^<^^^><>vvvvv^vv>^>^>>v^v^vv^>^>>v>>^^v>>^^><>v<^<<>>^>>^^><^>>v><^>v^^><^>v^<<>^><^^>>^><vv>>^^<<>>>^><<^v>v<v^>v<<>v diff --git a/2024/go/day16/day16.go b/2024/go/day16/day16.go deleted file mode 100644 index cbf3814..0000000 --- a/2024/go/day16/day16.go +++ /dev/null @@ -1,225 +0,0 @@ -package day16 - -import ( - "adventofcode2024/utils/dijkstra" - "adventofcode2024/utils/grid2d" - "adventofcode2024/utils/inputs" - "fmt" - _ "strings" -) - -type ( - Vec struct{ x, y int } - Dir struct{ x, y int } - Cell rune - Move struct { - p Vec - d Dir - } - Maze struct { - height, width int - start Vec - end Vec - grid *grid2d.Grid[Cell] - } -) - -const ( - WALL Cell = '#' - CORRIDOR Cell = '.' - START Cell = 'S' - END Cell = 'E' - PATH Cell = '*' -) - -var ( - NORTH = Dir{0, -1} - EAST = Dir{1, 0} - SOUTH = Dir{0, 1} - WEST = Dir{-1, 0} - DIRECTIONS = []Dir{NORTH, EAST, SOUTH, WEST} -) - -func Part1(input string) int { - maze := Maze{}.Parse(input) - fmt.Println(maze) - data := inputGraph(*maze) - graph := dijkstra.CreateGraph(data) - data.From.Label = "EAST" - path, dist := dijkstra.GetShortestPath(data.From, data.To, graph) - for _, p := range path { - maze.grid.Set(p.X, p.Y, PATH) - } - fmt.Println(maze) - return dist -} -func Part2(input string) int { - maze := Maze{}.Parse(input) - fmt.Println(maze) - data := inputGraph(*maze) - graph := dijkstra.CreateGraph(data) - data.From.Label = "START" - data.To.Label = "NORTH" - paths, _ := dijkstra.GetAllShortestPaths(data.From, data.To, graph) - bestPaths := make(map[Vec]struct{}) - for _, path := range paths { - for _, node := range path { - bestPaths[Vec{x: node.X, y: node.Y}] = struct{}{} - } - } - return len(bestPaths) -} - -func inputGraph(maze Maze) dijkstra.InputGraph { - data := dijkstra.InputGraph{} - data.From = dijkstra.Point{X: maze.start.x, Y: maze.start.y, Label: "START"} - data.To = dijkstra.Point{X: maze.end.x, Y: maze.end.y, Label: "END"} - for y := 0; y < maze.height; y++ { - for x := 0; x < maze.width; x++ { - if maze.grid.Get(x, y) == WALL { - continue - } - for _, dir := range DIRECTIONS { - nx, ny := x+dir.x, y+dir.y - if nx < 0 || ny < 0 || nx >= maze.width || ny >= maze.height { - continue - } - if maze.grid.Get(nx, ny) == WALL { - continue - } - for _, d := range getAllowedDirections(dir) { - ss := dirToString(dir) - ds := dirToString(d) - data.Graph = append(data.Graph, dijkstra.InputData{ - Source: dijkstra.Point{X: x, Y: y, Label: ss}, - Destination: dijkstra.Point{X: nx, Y: ny, Label: ds}, - Weight: func() int { - if dir == d { - return 1 - } else { - return 1001 - } - }(), - }) - } - } - } - } - - data.Graph = append(data.Graph, dijkstra.InputData{ - Source: dijkstra.Point{X: maze.end.x, Y: maze.end.y, Label: "END"}, - Destination: dijkstra.Point{X: maze.end.x, Y: maze.end.y, Label: dirToString(EAST)}, - Weight: 0, - }) - data.Graph = append(data.Graph, dijkstra.InputData{ - Source: dijkstra.Point{X: maze.end.x, Y: maze.end.y, Label: "END"}, - Destination: dijkstra.Point{X: maze.end.x, Y: maze.end.y, Label: dirToString(WEST)}, - Weight: 0, - }) - data.Graph = append(data.Graph, dijkstra.InputData{ - Source: dijkstra.Point{X: maze.end.x, Y: maze.end.y, Label: "END"}, - Destination: dijkstra.Point{X: maze.end.x, Y: maze.end.y, Label: dirToString(NORTH)}, - Weight: 0, - }) - data.Graph = append(data.Graph, dijkstra.InputData{ - Source: dijkstra.Point{X: maze.end.x, Y: maze.end.y, Label: "END"}, - Destination: dijkstra.Point{X: maze.end.x, Y: maze.end.y, Label: dirToString(SOUTH)}, - Weight: 0, - }) - - data.Graph = append(data.Graph, dijkstra.InputData{ - Source: dijkstra.Point{X: maze.start.x, Y: maze.start.y, Label: "START"}, - Destination: dijkstra.Point{X: maze.start.x, Y: maze.start.y, Label: dirToString(EAST)}, - Weight: 0, - }) - data.Graph = append(data.Graph, dijkstra.InputData{ - Source: dijkstra.Point{X: maze.start.x, Y: maze.start.y, Label: "START"}, - Destination: dijkstra.Point{X: maze.start.x, Y: maze.start.y, Label: dirToString(WEST)}, - Weight: 2000, - }) - data.Graph = append(data.Graph, dijkstra.InputData{ - Source: dijkstra.Point{X: maze.start.x, Y: maze.start.y, Label: "START"}, - Destination: dijkstra.Point{X: maze.start.x, Y: maze.start.y, Label: dirToString(NORTH)}, - Weight: 1000, - }) - data.Graph = append(data.Graph, dijkstra.InputData{ - Source: dijkstra.Point{X: maze.start.x, Y: maze.start.y, Label: "START"}, - Destination: dijkstra.Point{X: maze.start.x, Y: maze.start.y, Label: dirToString(SOUTH)}, - Weight: 1000, - }) - - data.Graph = append(data.Graph, dijkstra.InputData{ - Source: dijkstra.Point{X: maze.start.x, Y: maze.start.y, Label: "EAST"}, - Destination: dijkstra.Point{X: maze.start.x, Y: maze.start.y, Label: "NORTH"}, - Weight: 1000, - }) - - return data -} - -func dirToString(dir Dir) string { - switch dir { - case NORTH: - return "NORTH" - case EAST: - return "EAST" - case SOUTH: - return "SOUTH" - case WEST: - return "WEST" - default: - return "UNKNOWN" - } -} - -func getAllowedDirections(direction Dir) []Dir { - switch direction { - case NORTH: - return []Dir{NORTH, EAST, WEST} - case SOUTH: - return []Dir{SOUTH, EAST, WEST} - case WEST: - return []Dir{WEST, NORTH, SOUTH} - case EAST: - return []Dir{EAST, NORTH, SOUTH} - } - return []Dir{} -} - -func (m Maze) Parse(input string) *Maze { - m.grid = inputs.ToGrid2D(input, "\n", "", '?', func(c string) Cell { return Cell(c[0]) }) - m.height, m.width = m.grid.SizeY(), m.grid.SizeX() - for y := 0; y < m.height; y++ { - for x := 0; x < m.width; x++ { - c := m.grid.Get(x, y) - switch c { - case WALL, CORRIDOR: - m.grid.Set(x, y, c) - case START: - m.grid.Set(x, y, CORRIDOR) - m.start = Vec{x, y} - case END: - m.grid.Set(x, y, CORRIDOR) - m.end = Vec{x, y} - } - } - } - return &m -} - -func (m *Maze) String() string { - s := "" - for y := 0; y < m.height; y++ { - for x := 0; x < m.width; x++ { - if y == m.start.y && x == m.start.x { - s += string(START) - } else if y == m.end.y && x == m.end.x { - s += string(END) - } else { - s += string(m.grid.Get(x, y)) - } - } - s += "\n" - } - return s -} diff --git a/2024/go/day16/day16_test.go b/2024/go/day16/day16_test.go deleted file mode 100644 index 426b7b5..0000000 --- a/2024/go/day16/day16_test.go +++ /dev/null @@ -1,47 +0,0 @@ -package day16 - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestPart1(t *testing.T) { - r := Part1(`############### -#.......#....E# -#.#.###.#.###.# -#.....#.#...#.# -#.###.#####.#.# -#.#.#.......#.# -#.#.#####.###.# -#...........#.# -###.#.#####.#.# -#...#.....#.#.# -#.#.#.###.#.#.# -#.....#...#.#.# -#.###.#.#.#.#.# -#S..#.....#...# -###############`) - require.Equal(t, 7036, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`################# -#...#...#...#..E# -#.#.#.#.#.#.#.#.# -#.#.#.#...#...#.# -#.#.#.#.###.#.#.# -#...#.#.#.....#.# -#.#.#.#.#.#####.# -#.#...#.#.#.....# -#.#.#####.#.###.# -#.#.#.......#...# -#.#.###.#####.### -#.#.#...#.....#.# -#.#.#.#####.###.# -#.#.#.........#.# -#.#.#.#########.# -#S#.............# -#################`) - require.Equal(t, 64, r) -} diff --git a/2024/go/day16/input.txt b/2024/go/day16/input.txt deleted file mode 100644 index 67000f9..0000000 --- a/2024/go/day16/input.txt +++ /dev/null @@ -1,141 +0,0 @@ -############################################################################################################################################# -#.....#.....#...#.................#...#.......#.........#...#.......#...#.......#.......#...#...#.....#...#.......................#...#....E# -#.###.#.#.#.###.#.###.###.#######.#.#.#.#.###.#.###.###.#.#.#.###.#.###.#.#.#####.###.#.###.#.#.#.#.#.#.#.#.#####.#.###.#.#######.#.#.#.###.# -#...#.#.#.#...#.....#...#.#.....#...#...#.#...#.#...#...#.#.#...#.#...#.#.#...#...#...#.....#.#.#.#.#...#...#.....#.#.#.....#.....#.#.#...#.# -#.#.###.#.###.#.#####.#.#.###.###########.#.#####.###.###.###.###.###.#.#.#.#.#.###.#######.#.#.#.#.#########.#####.#.#.#####.#####.#.###.#.# -#.#.....#.#.#.#...#...#.#...#.....#.....#.#.....#.#.#.#.........................#.#.......#.#.#...#.....#...#.#...#.....#...#.#...#.#.....#.# -#.#######.#.#.#.###.#.#.###.#.#.#.#.#.###.#####.#.#.#.#.###.###.###.#.###.#.#.#.#.#######.###.#.#####.#.#.#.#.###.###.#.#.#.#.#.#.#.#######.# -#...#...#.#...#.#...#.#...#.#.#.#...#.#.......#...#...#...#...#.#.....#...#.#...#.......#...#...#.....#...#.#.....#...#...#...#.#.........#.# -###.#.###.#.#####.###.###.#.###.#.#####.###.#.#####.###.#.###.#.###.###.###.#####.#########.#.#.###.#.###.#.#####.#.###.#######.###########.# -#...#...#.#.#.....#...#...#.#...#.#...#.#...#.#...#...#.#.....#...#...#.#...........#.........#.#...#.#...#.........#.#.#.......#...........# -#.#####.#.#.#.#######.#.###.#.###.#.#.#.#.###.#.#####.#########.#.#.###.#.#####.###.#.#####.#.#.#.###.###.###.#####.#.#.#.#######.#########.# -#.#.....#.#...#.......#...#.#.#.....#.#...#.#.#...............................#...#.#...#...#...#.#.#.....#.#.....#...#.#.#.....#.......#...# -#.#.###.#.#####.#.###.###.#.#.#.#.###.#.###.#.###############.#.#.#.#.#####.#.#####.###.#####.#.#.#.#####.#.#####.###.#.#.#.###.#######.###.# -#.#...#.#.....#.#.....#...#...#.#...#.#.....#.#.....#.................................#...#...#...#...#...................#...#...#...#...#.# -#.###.#.#####.###.#.#.#.#####.#.#.#.#.#######.#.###.#.#######.###.#.#.#.#.###.#.#########.#.#.#.#.#.###.#.#####.#.###.#.#.###.#.#.###.###.#.# -#.#...............#.#...#...#.#...#.........#.....#.#.#.......#...#.#.#.#.#...#.#.....#...#.#.....#.....#.....#.#.....#.#.#...#.#...#...#...# -#.#.#####.#.#####.#.#####.#.#.###.#########.#.#####.#.#.#######.###.#.###.#.###.#.###.#.#.#.#.#########.#.###.#########.#.#####.###.###.###.# -#.#.#.....#.....#.#.#.....#.....#.....#...#.#.#.....#.#.#.......#.#.#.....#.#...#.#...#.#.#.#.........#...#.#.........#.#.........#...#...#.# -#.#.#.#####.#####.#.###.#######.#####.###.#.###.#####.#.#####.###.#.#######.#.#.#.#.#.#.###.#.#######.#.###.###.#.###.#.#########.###.#.#.#.# -#.#.......#...#...#...#...#...#.....#...#.#.#...#.#.....#.....#.....#...#...#.#...#.#.#.....#.#.......#.#.......#...#.#.....#.......#.#.....# -#.#######.###.#.#####.#.###.#.#########.#.#.#.###.#.#####.###.#######.#.#.#########.#.###.###.#.#######.#.#####.###.#.#####.#.###.###.#.#.#.# -#.....#...#...#...#.#.#.#...#.#.........#.#...#...#...#...#.#.#.......#...#.......#.#.#.......#.........#.........#.#...#.#.#...#.....#.#.#.# -#####.###.#.#.###.#.#.###.###.#.#########.#####.#####.#.#.#.#.#.#############.###.#.#.###########.#######.#######.#.#.#.#.#.###.#######.#.#.# -#...#...#.#.#.#...#.......#.#.#.#.......#.......#.....#.#.#...#.............#.#...#.#...#.......#.........#...#...#...#...#...#...#.....#.#.# -#.#.###.#.#.#.#.###########.#.#.###.###.#.#.#####.#####.#.#####.#.#########.#.#.###.###.#.###.#.###########.###.#####.###.#.#####.#.#####.#.# -#.#.#.#.#.#.#.#.....#.....#...#...#.#.....#.#.....#.#...#.....#.#.#.......#.#.#...#.#.....#...#.#.....#.....#...#.......#.#.................# -#.#.#.#.###.#.#####.#.###.#.#####.#.#######.#.#####.#.#####.#.#.#.#####.###.#.###.#.#########.#.#.###.#.###.#.###.#####.#.###.###.###.#.###.# -#.....#.#...#.....#...#...#...#...#.#.....#.#...#.#...#.....#...#.#.....#...#.#...#...#.......#...#...#...#.#.#...#.....#.#.#.........#...#.# -#.#####.#.#######.#####.#####.#.###.#.###.#####.#.#.#####.#.#####.#.#####.###.#.#####.#.###.#######.#######.#.###.#.#####.#.###############.# -#.#.....#...#...#...#...#.....#.#...#.#.#.......#.#.......#.....#.#.....#.#...#.......#.#...#.......#.....#.#.....#.....#.......#.........#.# -#.#.#######.#.#.###.#.#######.#.#.###.#.#########.#############.#.#.###.#.#.###.#########.#.#.#########.#.#.#####.#####.#####.###.#######.#.# -#...#.....#...#...#.#.......#...#...#...#.........#.......#...#...#...#.#.#...#.#...#...#.#.#.#.....#...#.#.....#.....#.....#.#...#.....#...# -#.###.#.#.#.#####.#########.###.###.###.###.###.#.#.###.#.#.#.#########.#.#.#.###.#.#.#.#.###.#.###.#.###.#.#.#######.#####.#.#.###.#.#####.# -#.#.....#.#.#...#...#.......#.............#.#.#.#.#.#...#...#.#.........#.#.#.....#.#.#.#.#.....#.....#.#.#.#...........#...#.#...#.#.#...#.# -#.#.#.###.###.#.###.#.#########.#####.###.#.#.#.#.#.#.#########.#.#####.#.#########.#.#.#.#.#######.###.#.###########.###.###.###.#.###.#.#.# -#...#...#.....#.....#.#.........#.....#...#.....#.#.#.#.....#...#.#...#.#.#.......#...#.#...#.#...#...#...#.............#.#...#...#.....#.#.# -#####.#.#######.#####.#.#.#############.#####.#.###.#.#.###.#.###.#.#.###.#.#####.#####.#.###.#.#.#.#.#.###.###########.#.###.#.###.#####.#.# -#.#...#.......#.#.....#.#.#...#.............#.#.#...#.....#.....#...#...#.#...#.#...#...#.#...#.#.#.#.#...#.#...#.....#.#.#.....#...#...#...# -#.#.#.###.#####.#.#####.###.#.#.###########.###.#.#############.#######.#.###.#.###.#.###.#.###.#.#.#.#.#.#.#.#.#.#####.#.#.#.###.###.#.##### -#...#...#...#...#.#.#.......#.#.#.......#.....#.....#.........#.........#...#.#.....#...#...#...#.#.#.#.....#.#.#.........#.#.#...#...#.#...# -#.###.#.###.#.###.#.#.#######.#.#.#####.#####.#.#####.#######.#.#####.#.###.#.#.#######.###.#.###.#.###.###.#.#.#.#########.#.#.#####.#.#.#.# -#.......#...#...#.#.........#...#...#.#.....#.#...#...#.#.....#.#.....#...#...#...#...#.....#...#.#.....#.....#.#.#.........#.#.......#.#.#.# -#.###.#.#.###.#.#.###.#########.###.#.#####.#.#####.###.#.#######.#######.#######.#.#.#.###.###.#.#.#####.#####.#.#.#########.#########.#.### -#.#.....#.....#.#...#.#.......#.#...#.....#.#.......#.....#.......#...#.....#...#...#.#.#...#...#.#.#.....#...#.#.#.#.........#.....#...#...# -#.#.#.#######.#.#.#.###.#.###.###.###.#####.#.#.###.#.#########.#.#.#.#.#####.#.###.#.###.#.#.###.###.#####.#.#.###.#.#####.###.###.#.###.#.# -#.#.#.....#...#.#.#.#...#...#.#...#.....#...#.........#.........#.#.#.#.#.....#.....#.#...#...#.#...........#.#...#.#.#...#.......#.#...#.#.# -#.#.#.###.#.#.#.#.#.#.#####.#.#.#######.#.###.#########.#.###.#####.#.###.#####.#####.#.###.###.#######.#########.#.###.#.#####.#.#.###.###.# -#.#.#.....#.#.#.#.#.#.......#.#.#...#...#.#.#...#.#.....#.#...#.........#...#...#...#.#.#...#...#.....#.#.....#...#.....#.#.....#.#.........# -#.#.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.###.#.###.#.#.#####.#####.###.###.###.#.###.#.#.#.#.###.#.#.###.###.###.#.#.#####.#.#.###.#.#########.# -#.#.......#.#.#...#.#.#.#.#.#.#...#.#.#...#.#...#...#...#.#...#...#...#...#.#.....#.#.#.#.#...#.#.#...#...#.#.#.#.........#...#.#.....#...#.# -#.#######.#.#.###.#.#.#.#.###.#####.#.#.###.#.#####.#.#.#.#.#.###.###.###.#.#######.#.#.#.#.#####.#.###.###.#.#.#####.#.#####.#.#######.#.#.# -#.#.......#.#...#.#.#...#...#.#.......#.#...#.....#.#.#...#.#...#.....#.#.#.......#...#.....#.....#...#.#.....#.....#.#.#.....#.........#.#.# -#.#.#####.#.###.#.#.#.#.###.#.#.#######.#.#.#####.#.#.###.#.###.#.###.#.#.#######.###########.#######.#.#.#########.###.#.###############.#.# -#.#...#...#.#...#.#...#.#...#...#.#.....#.#.#.....#.#.#...#...#.........#...................#.#.....#.#.#.........#...#...#.......#.......#.# -#.###.#.#.#.#####.###.###.#.#####.#.#####.#.#.#####.#.#.#####.#########.###################.#.#.#####.#.###.###.#.###.#####.#######.#######.# -#...#...#...#.....#.......#.....#.#.#.....#...#.........#...#...#.....#...#...........#.#.....#.......#...#.....#.......#...#.....#.#.....#.# -###.###.#.###.#####.###########.#.#.#.###########.#.#####.#.###.#.###.###.#.#########.#.#.#######.#####.#.###########.#.#.#.#.###.#.###.###.# -#...#...#...........#.#.....#.....#.#.#.......#...#.#.....#.....#.#.#.#...#.#.#.....#.#.....#...#.....#.#.................#.#.#.#.#...#.....# -#.#.#.#####.###.#####.#.###.#.###.#.#.###.###.#.#####.#######.###.#.#.#####.#.#.#.###.#.#####.#.#####.#####.#########.#####.#.#.#.#.#.###.### -#.#.#.#...#.#.......#.....#.....#.#.#.#...#.#.#.......#.....#...#.#.#...#.......#.....#...#...#.#...#.....#.........#...#...#.#...#.#...#...# -#.###.#.#.###.###.#.###########.#.#.#.#.###.#.#.#.#####.###.###.#.#.###.#.#########.#######.###.###.#####.#########.###.#.###.#.#######.##### -#.#...#.#.....#...#.#.........#...#.#...#...#.#.....#...#...#...#.#.#...#.........#.........#.#.#...#...#...#.....#...#.#...#.#...#...#.....# -#.#.###.#.#####.#.#.#.#######.#.###.#####.###.#.###.#.###.#######.#.#.###.#######.###########.#.#.###.#.###.#.#####.###.#####.###.#.#.#.###.# -#...#...#.....#.#...#.#.....#.#.#...#.....#...#.....#...#.........#.#.#.........#.......#...#...#.....#...#.#...........#...#...#...#.......# -#####.###.#.###.#####.#.#.###.###.###.#####.#######.###.###.#######.#.#########.#.#.###.###.#.#########.###.#########.###.#.###.#######.###.# -#.....#...#.....#.....#.#.......................#...#...#.........#.#.......#...#.#...#...#.#.......#...#...#.........#...#...#.......#.....# -#.#####.#.#######.#################.#########.#.#.###.###.#####.#.#.#######.#####.###.###.#.#.#.###.#.#.#.###.###.#####.#####.#######.#.##### -#.#.#...#...#.................#.#...#.........#.......#.#.#.#...#...#...#...#...#.......#.#.#.#...#...#.#.....#...#...#...#.........#.......# -#.#.#.#.#.###.###.###########.#.#.###.#################.#.#.#.#####.#.#.#.###.#.#########.#.#.###.#####.#######.###.#.###.#########.###.###.# -#.#.#...#.........#.....#.....#.#.#.....#...#.............#.#.#.....#.#.......#.........#.#.#...#.........#.......#.#...#...#.....#.#.....#.# -#.#.###.#.#######.#####.#.#####.#.#.###.#.#.###.###.###.#.#.#.#######.#################.#.#.###.#.#.#####.#.#######.###.###.#.###.#.#.###.#.# -#.#...#.#.....#.........#.#.....#.#.#...#.#...#...#...#.#.....#.......#.........#.......#.#...#.#.#.....#.#.#...#...#...#...#...#.#...#.#.#.# -#.#.###.#.###.###########.#.###.#.###.###.###.#######.###.#.#.#.###############.#.#######.#.#.#.###.###.#.#.#.#.#.###.#.#.#####.#.#####.#.#.# -#.#.....#.#...............#.#...#...#...#...#.#.....#.......#...........#.....#.#.#.......#.#.#.....#.#.#.#...#.#.#.......#.....#.......#...# -#.#.###.#.#.#################.###.#.#.#.###.#.#.###.#######.###########.#.###.#.#.#.###.#.###.###.#.#.#.###.#####.#.###########.#.#####.###.# -#.#...#...#.#...#...#.........#...#.#.#...#.#...#.#.#.....#.#.....#...#.#...#...#...#.#...#...#...#...#.....#.....#.....#.......#.....#...#.# -#.###.#.#####.#.#.#.#####.#.###.#.#.###.#.#.#####.#.#.###.###.###.#.#.#.###.#########.#####.#.#.#####.###.#.#.#######.###.#####.#####.###.#.# -#.#...#.......#.#.#...#...#.#...#...#.....#...#...#...#.#.....#.#...#.#...#.#.#.......#.......#.....#.......#.#.#.....#...#...#.#.....#...#.# -#.#.###.###.###.#.###.#.###.#.#######.#.#####.#.#.#####.#######.#####.###.#.#.#.###.#.#.#####.#####.#########.#.#.#####.###.#.#.###.###.#.#.# -#.#.#.....#.....#.#.....#.#.#.........#.......#.#.........#.............#.#.#.....#.#.#.#.....#.....#.......#.#...#...#.#...#.#...#...#.#.#.# -#.#.#.#.#.#.#####.#######.#.#####.#####.#.#########.###.#.#.#####.#####.#.#.#######.#.###.###.#.#.###.#####.#.###.#.#.#.###.#.#.#.#.#.#.#.#.# -#.#...#.#...#...............#...#.#...#.#.#.......#...#.#.#...#.......#.#.#.#.......#.#...#.#.#.#.......#...#.......#.......#...#.#.#...#.#.# -#.#####.#.#.###.#######.#####.#.#.#.#.###.#.#####.#####.#.#.#.#.#.###.#.#.#.#.#######.#.###.#.#.#######.#.###.###########.#####.#.#.#######.# -#.....#...#...#.#...#...#.....#...#.#.#...#.#...........#.#...#.#...#.#.#.#.#...#...#...#.#...#.........#.#.....#...#.............#.#.......# -#.#.#.#.###.#.###.#.#.###.#.#######.#.#.###.#.#.#########.#.#.#.###.#.#.#.#.#.#.#.#.#####.#.#########.###.#.#####.#.#.#########.###.#.####### -#.#.#.......#.#...#.#.....#.......#.#...#...#.#.#.......#...#.#.#...#...#.#...#...#.#.........#.......#...#...#...#.#.#...#.....#...#...#...# -#.#.###.#####.#.###.#.#########.###.#######.#.###.#####.###.###.#.###.#######.#####.#.#######.###.#.###.#####.#.###.#.#.###.###.#.#.###.###.# -#...#...........#.#.#...........#...#.......#.........#.....#...#...#.#.....#.....#.......#...#...#.#...#.....#.#.....#...#...#.#.#...#.....# -#.###.#.###.#.#.#.#.###########.#.###.#.#################.###.#####.#.#.###.#####.#.#####.#.###.###.#.#####.###.#######.#.###.#.#.###.#####.# -#.....#.....#.....#.......#.....#...#.#...#.............#...#.....#.#.#...#.....#.#.....#.#.....#...#.#...#...#.....#...#.....#.#.#.#.....#.# -#.#######.###########.###.#.#######.#.###.#.###.#.#####.#########.#.#.###.###.#.#.###.###.#######.###.#.#.#.#######.#.#########.#.#.###.#.#.# -#.#.....#.......#...#...#.#...#.........#...#.#...#...#...........#.....#...#.....#...#...#.........#...#.#.#.......#.#.#.....#...#...#.#.#.# -#.#.###.#########.#.###.#.###.#.#######.#####.#.###.#########.#.#.#########.#######.###.###.#######.#####.###.#######.#.#.###.#.###.#.#.###.# -#.#.#.#...........#.#...#.#...#...#...#...........#.....#...#.#.#...#.....#.....#.....#.#.....#...#.#...#.....#.....#.#.....#.......#.#.#...# -#.#.#.#############.#####.#.#####.#.###.#.#########.###.#.#.#.#####.#.#.#####.#.#######.###.###.#.#.#.#.#######.###.#.#############.###.#.### -#.#.#...#...#.......#.....#.#.#...#.#...#.......#.....#.#.#.#.....#...#.....#...#.....#.....#...#.#...#...#.....#...#.............#...#...#.# -###.#.###.#.#.#######.#####.#.#.#.#.#.#####.###.#.###.#.#.#.#.#.#########.#.#.###.###.###.#.#.###.#.#####.###.###.###############.###.#####.# -#...#...#.#.#...#...#.........#.#.........#...#...#...#.#.#.#.#.............#.....#.#...#.#...#...#.#...#.....#...#.......#.....#...#.......# -#.###.#.#.#.#.#.#.#.###.#####.#.#########.#.#.#####.#.#.#.#.#######.###.#.#########.###.#.#####.#.###.#.#######.###.#####.#.#.#.###.#.#####.# -#.................#...#.....#.#.....#.#...#.#.....#.#.#.#.#.........#...#.....#.......#.#.#.....#.#...#.#.........#.....#.#...#.#.#...#...#.# -#.#.#.#.#####.#.#.###.#####.#######.#.#.###.#####.#.#.#.#.#########.#######.#.#.#####.#.#.#.#####.#.###.#.#.#####.#####.###.#.#.#.#####.###.# -#...........#...#.#.........#...#...#.#...#.....#...#.#.#...#.....#.#.....#.#...#.#...#.#.#.#.....#.#.#.#.#.#...............#.#.......#.....# -#.###.#.###.#.###.#########.#.#.#.###.###.#####.#####.#.###.#####.#.#.###.#.###.#.#.#.#.#.#.#.#####.#.#.###.#.###########.###.#########.##### -#.#.........#.....#.........#.#.#.#.#.....#...#...#.#.....#.....#...#.#...#.#.....#...#.#.#.#.#.....#.#...#.#.#...#.......#.#...#.......#...# -#.###.#.#.###.###.#.#####.###.#.#.#.#.#####.#.#.#.#.#####.#####.#.###.#.###.#.###.###.#.###.#.#.#####.###.#.#.#.###.#######.###.#.#########.# -#.......#...#.......#...#.#...#.#.#...#.....#.#.#.#.....#.#...#.#...#.#.#...#...#...#.#...#.#.#.#.......#.#.....#...#.....#...#...#.#.......# -#####.#.###.#.#####.#.###.#.###.#.###.###.###.###.#.###.#.#.#.#.###.#.#.###.###.#####.###.#.#.#.#.#.###.#.#######.#####.#.###.#####.#.###.#.# -#.......#.....#.....#...#.#.#...#...#.....#.#.#...#...#.#.#.#.#.#...#.#.......#.#.....#...#.#.#.#.#...#.#...#.....#.....#...#...#.......#...# -#.#####.#######.#####.#.#.#.#.#####.#######.#.#.#####.#.#.###.#.#####.#.#.###.#.#.#####.###.###.###.#.#.###.#.#####.#######.#.###.#########.# -#.#.....#.......#.....#.#.#.#.......#...........#...#.#.#.....#.....#...#.....#.#.....#.#.#...#.....#.....#.........#.....#.#.....#.....#...# -#.#.###.#.#######.#.###.#.#.#########.###########.#.#.#.#####.#####.###.#######.#.#####.#.#.#.#######.#####.###.#.###.#.###.#.#.###.###.#.#.# -#.#.#.....#.....#.#...#.#.#.....#...#...#...#.#...#.#.#.....#.#.......#.....#.....#...#.#.#.#.........#.....#.#.#...#.#.....#...#...#.#...#.# -#.#.#.#.###.#####.#.#.#.#.#####.#.#.#####.#.#.#.###.#.###.###.#.###.#.#####.#######.#.#.#.#.###.#####.#.###.#.#.#.#.#.###.#.###.#.###.#####.# -#.#.#.#.....#...#...#.#.#.....#...#.......#.#.#.#.#.#.#.#.....#.#.......#.#.#.....#.#.....#.#.......#.#.#...#.#.#...#...#.#...#...#.......#.# -#.#.#.#.#####.#.#.#.#.#.###.###.###########.#.#.#.#.#.#.#######.#.#####.#.#.#.###.#.#####.#.#.#####.#.#.#.###.#.#.#.#####.###.#.###.#####.#.# -#...#.#.......#.#...#.#.....#...#.........#.#.#...#.#.......#.#.#.#...#...#...#...#...#...#.#.....#...#.#.....#.#.#.....#...#...#.#.#.......# -#.###.#.#######.#####.###.#.#.#.#.#####.###.#.###.#.#######.#.#.###.#.###.#####.#.###.#.#.#.###.#.###.#.#####.#.#.#####.#.#.###.#.#.#.#.###.# -#.#...#.#...#...#...#...#.#...#.#.....#.....#.....#.......#...#.....#.#.#.#.....#...#.#.#...#...#.#.......#...#.#.....#.#.........#.#.#.....# -#.#.###.#.#.#.#.#.#.###.#.#####.#.#.#.#######.#####.#.#####.#.#######.#.#.#.#########.#.#####.#.#.#.#####.#.#.#.#####.#.###.#.#.###.#.#####.# -#.#.#...#.#.#.#.#.#.....#...#...#...#.#.......#...#.#.#.....#...#...#.#...#.....#...#.#.......#.#.........#.#.#.......#...#.#...#...#.......# -#.#.#.###.#.#.#.#.#######.###.#.#####.#########.#.###.#.#####.#.###.#.#########.#.#.#.###.#.#####.#########.#.#######.#.#.#####.#.#########.# -#...#.....#.#.#.#...#...#...#.#.....#.........#.#...#.#.#.....#.....#.#.........#.#...#.#.#.....#.#...#.....#.......#.#.#...#...#.#.....#...# -###########.#.#.###.#.#.###.#.###.###########.#.###.#.#.#.#######.###.#.#######.#.#####.#.#.###.#.#.###.###.#######.#.#.###.#.#.#.#.#.#.#.#.# -#.#.......#.#.#...#.#.#...#.#.....#.......#.#.#.......#.#.........#...#.........#.....#...#.#.....#.#.....#.......#.#.#...#.#.#...#.#.#.#.#.# -#.#.#####.#.#.###.#.#.#.#.#.#####.#.#.###.#.#.#.#.###.#.###.###.#.#.#.#######.#####.#.#.###.###.###.#.#####.#####.#.#.###.#.#.#.#####.#.#.#.# -#.......#.#.#...#.#.#.#.#.#...#.....#...#...#.#.#.#...#...#...#...#.#.#.....#.#.........#.#...........#...#...#.#...#.#...#.#.......#.#...#.# -#########.#.###.#.#.#.#.#.#.#.#.#####.#.#.###.#.#.#######.#.#.#####.#.#.#.###.#.#####.###.#####.#######.#.###.#.#####.#.###.#######.#.#####.# -#.......#...#...#.#.#.#.#.#.#.........#...#...#.#.#...#...#.#.....#.#.#.#...#...#...#.#...#...#.......#.#.#.........#.#...#...#.#...........# -#.#####.#####.###.#.#.#.###.#########.###.#.#####.#.#.#.#########.#.#.#.###.#####.#.#.#.#.#.#.#.#####.#.#.###########.#######.#.#.###.#.##### -#...#.........#...#.#.#...#.#.......#...#...#.....#.#...#.........#.#.#...#.#.....#.#.#.#.#.#.......#.#.#.........#...#.....#.#.............# -#.#.###########.###.###.#.#.#######.#.#.#####.#####.#####.#######.#.#.#.#.#.#.###.#.#.#.#.#.#######.#.#.#########.#.###.###.#.#.#.#####.###.# -#.#.#.......#.............#.....#...#.....#.......#.#.....#...#...#.#.#...........#.#.#.#.#.#...#...#...#.#.......#.#...#.......#.........#.# -###.#.#####.###.#.###.###.###.#.#.###.#.###.#####.#.#.###.#.#.#.###.#.#.#######.###.#.###.#.###.#.#######.#.#######.#.#.#######.#######.#.#.# -#...#.....#...#.....#.#...#...#.#.....#...#...#...#.#.#...#.#.#...#.#.#...#.#...#...#...#.#.....#.....#.......................#...#.....#.#.# -#.#######.###.#.###.#.#.#.#.#.#.#.###.#.#.###.#.###.#.#.###.#.###.#.#.###.#.#.#########.#.###.#####.#.###.#.#.###.#.#########.#.#.#.###.#.#.# -#.......#.#.#...#...#...#...........................#.#.#...#.#...#.#...#...#.....#...#.#.....#.....#...#.#.#...................#.#.#...#...# -#.#.###.#.#.###.#.#.#########.#.###.#.#.###.#.#########.#.#.###.###.#######.#####.#.#.#.#.#####.#######.#.#.###.#.#########.#.#.###.#.#.###.# -#.#.#.#...#...#.#.#.......................#.#.#.........#.#.#...#.#.#.....#.#...#...#...#...#...#.......#.#.....#...#.......#.#.#...#.....#.# -#.#.#.#####.#.#.###.###########.#########.#.#.#####.#####.#.#.###.#.#.#.###.#.#.#############.###.#######.#########.#.#######.#.#.#####.#.#.# -#S..........#.#...........................#.........#.....#.......#...#.......#...............#...................#...........#.........#...# -############################################################################################################################################# diff --git a/2024/go/day17/day17.go b/2024/go/day17/day17.go deleted file mode 100644 index 312b2d7..0000000 --- a/2024/go/day17/day17.go +++ /dev/null @@ -1,91 +0,0 @@ -package day17 - -import ( - "encoding/json" - "fmt" - "regexp" - "strings" - "golang.org/x/exp/slices" - - - "adventofcode2024/utils" - -) - -type Opcode int - -const ( - adv Opcode = 0 - bxl Opcode = 1 - bst Opcode = 2 - jnx Opcode = 3 - bxc Opcode = 4 - out Opcode = 5 - bdv Opcode = 6 - cdv Opcode = 7 - -) - -func Part1(input string) string { - m := regexp.MustCompile(`[\d,]+`).FindAllString(input, -1) - a := utils.MustAtoi(m[0]) - b := utils.MustAtoi(m[1]) - c := utils.MustAtoi(m[2]) - - var pgm []int - json.Unmarshal([]byte("["+m[3]+"]"), &pgm) - - fmt.Printf("%d %d %d %v\n", a, b, c, pgm) - out := fmt.Sprint(run(a, b, c, pgm)) - out = fmt.Sprint(strings.Trim(strings.ReplaceAll(out, " ", ","), "[]")) - return out -} - -func Part2(input string) int { - m := regexp.MustCompile(`[\d,]+`).FindAllString(input, -1) - b := utils.MustAtoi(m[1]) - c := utils.MustAtoi(m[2]) - - var pgm []int - json.Unmarshal([]byte("["+m[3]+"]"), &pgm) - - fmt.Printf("%d %d %v\n", b, c, pgm) - - a := 0 - for n := len(pgm) - 1; n >= 0; n-- { - a <<= 3 - for !slices.Equal(run(a, b, c, pgm), pgm[n:]) { - a++ - } - } - return a -} - -func run(a, b, c int, pgm []int) (output []int) { - for ip := 0; ip < len(pgm); ip += 2 { - operand := pgm[ip+1] - combo := []int{0, 1, 2, 3, a, b, c}[operand] - - switch pgm[ip] { - case int(adv): - a >>= combo - case int(bxl): - b ^= operand - case int(bst): - b = combo % 8 - case int(jnx): - if a != 0 { - ip = operand - 2 - } - case int(bxc): - b ^= c - case int(out): - output = append(output, combo%8) - case int(bdv): - b = a >> combo - case int(cdv): - c = a >> combo - } - } - return output -} \ No newline at end of file diff --git a/2024/go/day17/day17_test.go b/2024/go/day17/day17_test.go deleted file mode 100644 index ba2ffcc..0000000 --- a/2024/go/day17/day17_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package day17 - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestPart1(t *testing.T) { - r := Part1(`Register A: 729 -Register B: 0 -Register C: 0 - -Program: 0,1,5,4,3,0`) - require.Equal(t, "4,6,3,5,6,3,5,2,1,0", r) -} - -func TestPart2(t *testing.T) { - r := Part2(`Register A: 2024 -Register B: 0 -Register C: 0 - -Program: 0,3,5,4,3,0`) - require.Equal(t, 117440, r) -} diff --git a/2024/go/day17/input.txt b/2024/go/day17/input.txt deleted file mode 100644 index 9d9d9cd..0000000 --- a/2024/go/day17/input.txt +++ /dev/null @@ -1,5 +0,0 @@ -Register A: 61156655 -Register B: 0 -Register C: 0 - -Program: 2,4,1,5,7,5,4,3,1,6,0,3,5,5,3,0 diff --git a/2024/go/day18/day18.go b/2024/go/day18/day18.go deleted file mode 100644 index 9faee97..0000000 --- a/2024/go/day18/day18.go +++ /dev/null @@ -1,126 +0,0 @@ -package day18 - -import ( - "adventofcode2024/utils" - "adventofcode2024/utils/dijkstra" - "adventofcode2024/utils/grid2d" - "fmt" - "strings" -) - -type ( - Vec struct{ x, y int } - Dir struct{ x, y int } - Cell rune - Move struct { - p Vec - d Dir - } - Maze struct { - height, width int - start Vec - end Vec - grid *grid2d.Grid[Cell] - } -) - -const ( - WALL Cell = '#' - CORRIDOR Cell = '.' - START Cell = 'S' - END Cell = 'E' - PATH Cell = '*' -) - -var ( - NORTH = Dir{0, -1} - EAST = Dir{1, 0} - SOUTH = Dir{0, 1} - WEST = Dir{-1, 0} - DIRECTIONS = []Dir{NORTH, EAST, SOUTH, WEST} -) - -func Part1(input string) int { - maze := Maze{}.Parse(input, 1024) - fmt.Println(maze) - data := inputGraph(*maze) - graph := dijkstra.CreateGraph(data) - path, dist := dijkstra.GetShortestPath(data.From, data.To, graph) - for _, p := range path { - maze.grid.Set(p.X, p.Y, PATH) - } - fmt.Println(maze) - return dist -} -func Part2(input string) int { - maze := Maze{}.Parse(input, 2877) - fmt.Println(maze) - data := inputGraph(*maze) - graph := dijkstra.CreateGraph(data) - _, count := dijkstra.GetShortestPath(data.From, data.To, graph) - return count -} - -func inputGraph(maze Maze) dijkstra.InputGraph { - data := dijkstra.InputGraph{} - data.From = dijkstra.Point{X: maze.start.x, Y: maze.start.y} - data.To = dijkstra.Point{X: maze.end.x, Y: maze.end.y} - for y := 0; y < maze.height; y++ { - for x := 0; x < maze.width; x++ { - if maze.grid.Get(x, y) == WALL { - continue - } - for _, dir := range DIRECTIONS { - nx, ny := x+dir.x, y+dir.y - if nx < 0 || ny < 0 || nx >= maze.width || ny >= maze.height { - continue - } - if maze.grid.Get(nx, ny) == WALL { - continue - } - data.Graph = append(data.Graph, dijkstra.InputData{ - Source: dijkstra.Point{X: x, Y: y}, - Destination: dijkstra.Point{X: nx, Y: ny}, - Weight: 1, - }) - } - } - } - - return data -} - -func (m Maze) Parse(input string, bytes int) *Maze { - m.grid = grid2d.NewGrid(71, 71, CORRIDOR) - for _, line := range strings.Split(input, "\n") { - if bytes == 0 { - break - } - in := strings.Split(line, ",") - x := utils.MustAtoi(in[0]) - y := utils.MustAtoi(in[1]) - m.grid.Set(x, y, WALL) - bytes-- - } - m.start = Vec{0, 0} - m.end = Vec{70, 70} - m.height, m.width = m.grid.SizeY(), m.grid.SizeX() - return &m -} - -func (m *Maze) String() string { - s := "" - for y := 0; y < m.height; y++ { - for x := 0; x < m.width; x++ { - if y == m.start.y && x == m.start.x { - s += string(START) - } else if y == m.end.y && x == m.end.x { - s += string(END) - } else { - s += string(m.grid.Get(x, y)) - } - } - s += "\n" - } - return s -} diff --git a/2024/go/day18/day18_test.go b/2024/go/day18/day18_test.go deleted file mode 100644 index aec55d5..0000000 --- a/2024/go/day18/day18_test.go +++ /dev/null @@ -1,6915 +0,0 @@ -package day18 - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestPart1(t *testing.T) { - r := Part1(`2,5 -20,1 -63,59 -21,29 -37,59 -33,63 -14,33 -70,15 -21,34 -62,5 -45,54 -45,60 -48,53 -33,58 -23,35 -22,3 -33,0 -63,62 -44,67 -52,55 -5,19 -42,55 -45,0 -57,3 -15,45 -41,62 -1,39 -63,19 -39,59 -39,3 -48,7 -61,65 -31,1 -54,51 -11,14 -53,62 -67,68 -65,16 -17,45 -21,24 -55,3 -30,15 -4,39 -69,19 -69,57 -41,57 -43,24 -19,11 -18,27 -3,48 -8,13 -41,66 -67,67 -61,62 -5,37 -18,19 -29,64 -13,14 -42,57 -33,67 -0,19 -67,53 -47,59 -19,3 -51,54 -53,69 -42,5 -7,26 -59,65 -50,69 -3,27 -26,9 -43,3 -17,7 -15,11 -12,31 -43,5 -50,65 -9,5 -29,3 -21,6 -65,15 -43,57 -15,37 -50,53 -67,51 -29,1 -47,7 -55,54 -52,51 -47,54 -17,26 -12,43 -65,51 -1,27 -15,22 -63,15 -7,37 -69,49 -57,59 -7,36 -60,7 -66,7 -18,35 -13,36 -21,19 -15,3 -46,9 -30,3 -53,7 -8,7 -66,3 -49,69 -35,65 -48,5 -33,6 -1,31 -26,5 -44,59 -68,13 -45,67 -9,16 -51,55 -57,5 -2,33 -57,64 -31,2 -1,19 -5,12 -19,37 -40,67 -10,19 -21,12 -3,31 -51,1 -4,29 -52,65 -47,5 -17,19 -70,47 -11,19 -57,10 -54,55 -39,53 -61,56 -49,55 -28,37 -21,30 -9,45 -43,69 -57,19 -29,10 -60,63 -19,32 -66,5 -53,45 -53,49 -47,57 -26,1 -17,34 -65,7 -7,28 -41,63 -6,1 -69,69 -0,13 -5,28 -10,1 -38,67 -37,13 -3,7 -39,12 -2,15 -54,65 -35,53 -63,20 -13,30 -52,47 -13,3 -69,55 -55,61 -37,4 -7,35 -57,4 -35,69 -5,3 -63,64 -40,69 -59,5 -32,61 -66,61 -43,64 -40,1 -49,3 -68,65 -3,38 -21,4 -49,56 -18,29 -23,12 -7,11 -16,29 -8,11 -10,25 -39,67 -59,60 -3,19 -26,31 -7,9 -51,58 -49,67 -53,65 -65,59 -67,9 -43,58 -55,51 -69,7 -6,39 -49,59 -10,37 -4,43 -54,5 -3,28 -69,16 -67,7 -4,37 -37,1 -27,2 -62,59 -45,70 -25,35 -65,53 -31,7 -53,59 -1,10 -67,10 -65,67 -30,67 -17,1 -67,59 -31,61 -59,59 -65,69 -51,59 -61,66 -13,15 -29,65 -27,1 -65,65 -68,53 -53,11 -5,17 -20,35 -43,68 -3,30 -59,7 -3,39 -45,63 -7,31 -3,13 -51,5 -23,39 -20,3 -67,0 -37,3 -46,61 -65,70 -15,1 -17,11 -66,63 -32,23 -51,0 -3,1 -17,3 -13,6 -59,3 -19,31 -1,24 -41,3 -4,49 -40,57 -63,6 -16,17 -22,25 -39,60 -11,34 -56,7 -38,57 -55,53 -35,66 -1,11 -64,19 -50,3 -9,38 -19,8 -64,61 -3,17 -8,33 -13,1 -5,9 -50,7 -1,34 -41,65 -48,57 -14,13 -17,31 -56,1 -6,15 -24,25 -23,2 -69,13 -45,52 -15,23 -15,27 -27,28 -60,3 -31,30 -19,35 -42,53 -19,27 -61,1 -65,50 -53,2 -52,61 -15,20 -42,7 -67,20 -11,23 -29,54 -6,17 -41,53 -47,63 -68,51 -21,21 -19,6 -53,61 -23,29 -53,9 -19,29 -21,10 -2,41 -10,3 -49,9 -42,59 -12,1 -45,7 -19,28 -3,35 -69,6 -43,4 -17,21 -47,3 -52,7 -65,22 -45,62 -16,5 -51,3 -48,11 -7,33 -40,3 -26,35 -37,63 -49,68 -11,26 -54,67 -64,23 -21,17 -5,49 -63,65 -23,13 -58,1 -61,54 -69,56 -47,60 -11,7 -9,35 -57,58 -45,66 -1,23 -7,21 -17,12 -11,17 -34,3 -25,25 -22,35 -57,65 -17,17 -1,5 -12,33 -36,63 -19,15 -7,38 -53,55 -21,25 -42,1 -17,23 -35,67 -33,3 -56,63 -56,59 -3,2 -42,67 -65,56 -45,5 -5,33 -21,22 -9,42 -3,14 -21,14 -59,53 -64,53 -33,25 -11,35 -9,1 -63,16 -47,49 -53,60 -47,55 -39,1 -63,60 -35,63 -9,31 -55,68 -57,57 -68,15 -11,39 -62,69 -41,45 -55,57 -5,13 -9,14 -1,32 -17,5 -19,19 -19,30 -1,29 -55,56 -6,35 -21,8 -13,0 -4,25 -16,33 -69,9 -53,67 -67,17 -52,67 -41,59 -24,1 -51,7 -54,7 -3,22 -7,13 -41,61 -45,3 -21,33 -37,53 -11,13 -45,8 -48,1 -43,13 -17,46 -1,33 -41,69 -22,19 -19,38 -19,12 -45,57 -53,6 -15,36 -35,68 -9,21 -43,65 -5,41 -7,7 -68,61 -60,1 -7,23 -21,28 -23,34 -63,69 -7,40 -51,64 -66,51 -43,61 -49,63 -69,11 -50,51 -53,13 -17,24 -47,65 -32,67 -4,15 -38,1 -58,63 -23,21 -61,59 -15,21 -11,27 -33,65 -2,1 -20,25 -11,3 -55,67 -5,31 -43,53 -63,66 -3,29 -65,55 -36,69 -64,1 -3,23 -11,6 -52,57 -61,4 -63,17 -61,69 -3,33 -65,4 -21,16 -27,11 -1,3 -5,39 -69,54 -63,47 -1,36 -27,27 -33,61 -25,37 -61,14 -15,26 -55,1 -7,17 -29,11 -11,12 -2,19 -66,55 -45,59 -29,29 -26,39 -8,17 -45,65 -11,37 -2,39 -0,29 -5,27 -16,31 -67,65 -68,63 -26,25 -9,30 -3,36 -48,65 -59,51 -63,1 -7,41 -23,28 -1,15 -18,1 -4,41 -43,63 -21,27 -67,22 -52,69 -7,18 -68,49 -3,12 -18,17 -9,41 -19,13 -1,17 -3,26 -59,61 -57,66 -53,63 -39,69 -3,3 -67,69 -50,57 -9,19 -1,13 -55,58 -49,6 -7,3 -47,1 -12,37 -59,63 -61,67 -8,45 -41,1 -8,1 -39,63 -8,27 -15,19 -1,25 -61,57 -47,66 -46,5 -0,39 -4,3 -67,8 -9,43 -64,67 -49,47 -63,14 -51,57 -0,47 -8,3 -21,15 -63,57 -46,3 -5,21 -15,31 -57,12 -13,18 -21,23 -67,15 -21,7 -23,14 -67,55 -63,63 -21,13 -67,58 -51,49 -25,26 -2,31 -56,51 -32,69 -55,7 -31,62 -65,57 -55,65 -5,24 -7,20 -11,15 -19,14 -65,21 -5,1 -67,5 -67,63 -67,49 -68,57 -19,21 -37,65 -11,1 -47,61 -33,7 -28,3 -12,21 -47,68 -41,70 -65,1 -69,23 -5,25 -47,11 -49,61 -1,35 -59,57 -1,37 -33,1 -53,57 -59,1 -49,65 -27,15 -60,11 -61,63 -5,34 -69,15 -9,20 -66,65 -49,62 -35,3 -55,5 -4,19 -21,20 -47,67 -59,68 -24,27 -41,5 -67,3 -21,3 -47,9 -65,17 -9,47 -23,3 -41,67 -65,63 -15,29 -55,49 -3,6 -69,17 -22,17 -48,51 -33,64 -51,65 -9,27 -58,55 -25,21 -69,24 -9,22 -64,63 -19,1 -9,36 -17,27 -54,49 -38,69 -8,5 -46,67 -60,57 -68,11 -0,7 -19,17 -39,65 -27,3 -9,40 -64,57 -17,25 -3,25 -19,9 -47,8 -58,61 -23,22 -21,11 -41,7 -18,9 -11,45 -51,67 -52,3 -8,43 -9,25 -69,8 -67,11 -2,27 -63,51 -65,61 -53,5 -7,19 -18,3 -67,18 -45,9 -55,63 -15,15 -47,64 -54,3 -13,31 -19,5 -41,64 -15,16 -37,67 -53,52 -12,9 -15,4 -25,34 -43,59 -2,17 -23,33 -57,8 -16,15 -57,67 -29,0 -66,69 -19,7 -42,61 -66,15 -67,61 -51,63 -36,7 -1,16 -2,23 -66,59 -67,2 -61,64 -56,65 -56,5 -15,2 -19,33 -15,28 -49,53 -5,35 -12,3 -65,18 -69,53 -11,33 -37,2 -47,69 -57,69 -11,5 -34,7 -3,45 -63,5 -15,33 -35,1 -17,20 -23,11 -6,31 -17,35 -50,61 -51,4 -64,3 -62,55 -3,9 -49,60 -13,35 -68,69 -21,37 -44,63 -2,9 -15,7 -49,5 -67,13 -9,39 -9,33 -9,24 -2,11 -5,23 -46,55 -17,22 -9,23 -48,3 -45,13 -47,58 -60,59 -5,18 -14,3 -24,11 -56,69 -43,55 -57,63 -55,10 -17,33 -53,47 -36,3 -13,16 -5,32 -64,7 -32,3 -51,51 -10,17 -13,37 -40,59 -11,31 -13,19 -19,10 -49,1 -34,1 -10,27 -42,9 -61,2 -58,57 -13,33 -25,3 -43,2 -23,31 -24,37 -59,66 -12,29 -7,10 -31,65 -19,23 -39,64 -22,39 -18,5 -55,62 -23,18 -39,62 -53,50 -21,31 -40,55 -58,5 -23,40 -67,66 -69,59 -23,25 -39,61 -1,7 -21,1 -21,5 -57,61 -51,53 -53,51 -5,29 -69,47 -30,27 -5,14 -10,45 -18,23 -7,29 -55,60 -40,7 -49,7 -14,31 -15,25 -68,19 -57,49 -12,23 -7,30 -60,49 -50,9 -16,1 -22,9 -57,55 -15,24 -65,49 -69,25 -59,69 -28,69 -4,21 -23,36 -58,69 -69,61 -23,8 -5,8 -43,1 -9,37 -55,69 -3,11 -66,53 -70,59 -14,19 -15,17 -9,13 -59,55 -36,65 -69,67 -8,23 -23,32 -3,8 -65,3 -69,65 -29,5 -9,15 -61,61 -13,34 -1,1 -3,4 -68,45 -45,56 -33,69 -67,48 -38,65 -6,21 -0,3 -63,68 -50,67 -15,13 -63,58 -9,34 -67,1 -48,63 -60,69 -69,51 -57,47 -70,67 -51,47 -59,54 -57,7 -43,67 -4,45 -59,67 -45,2 -67,57 -62,1 -69,52 -31,63 -69,21 -31,15 -27,9 -3,37 -19,25 -63,55 -6,3 -53,3 -20,21 -13,17 -23,30 -6,23 -43,7 -17,29 -57,2 -21,32 -51,69 -7,1 -44,5 -57,1 -33,66 -45,69 -59,8 -9,3 -13,23 -11,22 -65,5 -1,9 -24,17 -61,3 -49,57 -12,19 -13,28 -69,12 -10,51 -53,53 -13,47 -31,69 -24,43 -69,63 -20,17 -67,21 -44,55 -33,68 -7,15 -45,1 -39,55 -39,4 -69,60 -23,27 -45,61 -51,61 -25,1 -63,3 -37,69 -33,5 -17,15 -9,32 -7,39 -63,54 -65,47 -29,19 -53,43 -60,33 -57,45 -5,6 -47,27 -39,25 -48,47 -53,36 -43,18 -49,21 -41,21 -23,19 -52,35 -39,45 -55,17 -29,39 -57,51 -55,45 -54,27 -33,26 -40,19 -44,17 -57,20 -37,45 -27,64 -31,13 -41,13 -5,7 -9,57 -10,69 -23,47 -1,51 -0,69 -49,12 -3,58 -15,9 -21,53 -53,27 -45,11 -63,42 -27,56 -6,11 -27,12 -27,31 -23,41 -35,41 -15,61 -61,27 -21,43 -41,43 -17,56 -11,66 -41,28 -51,37 -41,27 -38,59 -39,47 -59,41 -11,41 -26,59 -59,16 -29,35 -1,45 -33,41 -55,29 -65,39 -47,50 -28,5 -39,43 -35,21 -54,25 -43,16 -51,43 -31,17 -23,53 -37,21 -43,22 -22,55 -57,17 -15,49 -36,57 -11,48 -56,27 -36,39 -53,35 -8,51 -29,46 -61,29 -67,37 -31,35 -42,47 -63,41 -37,18 -43,36 -52,21 -63,9 -57,48 -29,36 -39,27 -35,59 -55,41 -25,53 -45,47 -19,66 -29,44 -61,5 -49,23 -14,59 -27,59 -19,58 -16,13 -44,51 -29,24 -13,7 -26,19 -37,20 -41,40 -28,27 -65,38 -41,47 -47,19 -49,49 -46,39 -38,55 -13,65 -53,44 -31,49 -36,5 -68,5 -42,45 -3,5 -4,63 -59,23 -23,56 -15,59 -37,52 -67,35 -11,11 -1,63 -11,25 -19,47 -31,33 -61,36 -27,46 -35,44 -46,21 -9,56 -5,59 -27,41 -35,37 -28,13 -39,20 -61,23 -36,15 -35,9 -7,8 -52,15 -14,39 -51,21 -65,25 -35,12 -58,15 -66,35 -23,7 -35,62 -63,25 -68,1 -23,64 -68,33 -65,28 -44,29 -19,67 -29,43 -47,51 -25,67 -2,45 -55,21 -37,43 -32,21 -58,51 -69,33 -13,29 -41,11 -47,23 -65,35 -23,45 -31,64 -41,50 -1,65 -25,39 -42,39 -44,47 -67,39 -32,35 -43,38 -51,29 -9,6 -41,24 -3,67 -57,31 -41,44 -53,19 -19,41 -14,61 -15,41 -46,49 -39,35 -62,51 -51,23 -32,9 -23,60 -1,47 -49,27 -57,36 -19,52 -43,49 -49,35 -21,50 -49,39 -53,38 -51,19 -21,57 -43,45 -33,38 -45,41 -1,56 -39,22 -21,63 -48,49 -47,30 -37,39 -4,61 -34,13 -26,51 -47,39 -19,45 -31,59 -3,52 -17,54 -69,45 -15,35 -49,11 -17,69 -55,13 -64,39 -57,33 -45,40 -28,21 -11,9 -64,29 -33,19 -21,60 -32,19 -47,25 -57,53 -31,4 -17,61 -69,5 -19,39 -46,15 -60,51 -9,50 -27,40 -63,29 -59,36 -11,55 -25,61 -30,55 -35,25 -27,69 -23,1 -9,65 -43,37 -27,42 -19,49 -56,45 -13,49 -35,7 -33,47 -43,11 -38,33 -35,49 -63,39 -41,20 -13,48 -1,60 -43,30 -7,45 -55,19 -65,19 -53,15 -33,53 -29,49 -51,45 -13,50 -34,23 -20,55 -10,11 -12,39 -17,53 -11,65 -27,37 -8,53 -65,24 -65,45 -61,45 -7,65 -59,37 -27,21 -39,39 -31,67 -45,23 -53,10 -59,22 -25,42 -1,57 -54,45 -13,10 -43,23 -37,51 -51,13 -40,35 -48,45 -36,27 -1,59 -39,51 -57,32 -31,5 -35,5 -8,69 -25,29 -39,9 -19,53 -29,40 -61,43 -7,62 -39,17 -3,54 -27,57 -67,43 -23,49 -53,17 -29,47 -25,41 -9,62 -61,35 -27,38 -23,9 -67,38 -41,49 -22,45 -43,15 -25,17 -13,69 -31,52 -29,68 -29,37 -30,37 -7,63 -37,27 -55,39 -65,13 -50,23 -59,11 -25,11 -25,65 -26,15 -55,37 -47,18 -20,69 -12,69 -8,47 -61,17 -53,12 -54,41 -9,69 -33,59 -57,37 -47,47 -61,39 -40,13 -69,3 -18,55 -22,47 -65,41 -31,45 -21,9 -38,27 -61,30 -61,55 -3,57 -51,11 -20,57 -41,51 -61,15 -40,37 -53,23 -49,38 -22,69 -1,61 -16,59 -20,65 -17,63 -51,17 -26,45 -24,31 -61,49 -38,41 -22,51 -29,16 -11,52 -34,35 -30,61 -37,33 -58,19 -9,29 -29,17 -61,9 -2,51 -7,59 -49,51 -35,55 -8,59 -29,41 -37,47 -23,67 -30,53 -15,69 -33,27 -49,31 -69,29 -59,43 -3,41 -43,10 -59,19 -35,27 -61,11 -27,25 -49,30 -28,57 -15,53 -39,29 -45,46 -16,41 -28,9 -27,61 -37,15 -29,18 -15,47 -17,57 -25,19 -37,25 -11,64 -45,12 -61,46 -14,67 -6,51 -19,65 -32,17 -21,65 -46,29 -51,28 -25,6 -19,51 -35,61 -47,41 -45,45 -39,49 -36,25 -19,59 -32,25 -25,47 -30,41 -62,19 -39,50 -41,41 -44,43 -53,37 -33,14 -40,51 -62,47 -19,48 -55,43 -63,13 -68,43 -65,29 -53,25 -23,59 -39,11 -54,17 -59,35 -63,53 -13,11 -35,58 -12,5 -63,21 -25,20 -45,37 -34,47 -24,55 -3,53 -11,67 -46,33 -25,31 -56,23 -36,43 -8,65 -61,19 -37,41 -41,31 -31,27 -37,23 -64,49 -6,67 -9,17 -11,40 -17,13 -26,11 -67,41 -23,57 -13,52 -50,17 -21,35 -33,51 -59,40 -27,5 -36,33 -3,62 -35,60 -58,43 -13,56 -24,67 -17,37 -29,53 -63,23 -20,51 -24,39 -13,12 -2,55 -62,41 -28,49 -39,44 -20,47 -52,27 -35,39 -59,25 -35,32 -49,29 -65,31 -35,52 -54,47 -29,51 -37,9 -13,13 -53,31 -45,39 -9,7 -39,13 -17,65 -37,31 -24,5 -30,5 -2,65 -28,7 -49,17 -55,55 -37,24 -13,5 -3,68 -49,13 -56,15 -21,49 -41,37 -43,26 -57,25 -3,47 -29,21 -47,43 -29,42 -55,11 -35,19 -6,55 -53,34 -23,17 -31,12 -4,69 -15,43 -66,33 -59,33 -13,57 -17,42 -10,67 -59,13 -50,37 -33,45 -35,40 -38,7 -21,41 -9,63 -53,1 -33,37 -13,66 -50,15 -1,55 -19,36 -18,47 -61,26 -49,25 -59,38 -5,43 -37,62 -11,61 -22,67 -61,18 -33,55 -18,61 -25,9 -62,49 -56,29 -65,44 -59,29 -33,39 -55,9 -49,37 -13,55 -35,22 -41,39 -48,19 -30,21 -13,9 -21,39 -37,61 -29,15 -27,52 -19,55 -47,35 -51,33 -8,55 -63,7 -35,46 -11,54 -29,69 -15,52 -31,46 -25,62 -63,43 -41,26 -61,41 -7,64 -43,35 -47,33 -40,33 -45,36 -57,41 -57,23 -57,27 -11,29 -5,69 -63,37 -7,25 -34,9 -57,24 -23,5 -59,18 -23,55 -48,41 -11,47 -16,57 -60,25 -60,23 -20,53 -66,47 -56,33 -30,11 -15,46 -26,33 -64,33 -51,10 -35,13 -5,55 -33,21 -10,55 -35,11 -9,53 -23,44 -63,11 -69,1 -21,45 -6,47 -42,17 -32,41 -17,49 -61,12 -35,45 -31,51 -55,20 -31,25 -7,51 -41,15 -45,31 -31,8 -29,13 -3,43 -27,70 -59,21 -43,41 -67,45 -59,46 -56,43 -5,66 -18,39 -39,10 -1,22 -68,25 -15,48 -68,41 -2,67 -37,46 -15,44 -25,69 -43,47 -61,28 -61,31 -43,20 -48,37 -19,44 -24,9 -27,16 -37,29 -51,40 -38,25 -62,31 -31,23 -47,21 -13,53 -12,61 -37,8 -5,47 -17,67 -49,44 -31,19 -25,57 -13,67 -3,65 -63,8 -3,69 -29,63 -11,63 -27,60 -31,37 -29,61 -25,27 -32,13 -1,53 -52,31 -57,35 -36,35 -67,32 -33,30 -4,57 -23,43 -39,31 -46,47 -5,61 -43,51 -51,9 -10,43 -5,63 -69,41 -7,60 -53,21 -45,35 -34,25 -37,35 -33,40 -64,9 -37,7 -9,49 -13,59 -70,43 -11,46 -43,34 -36,49 -29,9 -46,13 -31,38 -41,23 -65,33 -47,28 -54,37 -23,58 -33,33 -1,43 -7,67 -6,43 -63,33 -27,17 -49,41 -15,40 -43,21 -50,1 -61,21 -5,5 -51,48 -37,10 -44,49 -1,64 -55,31 -13,54 -47,31 -31,57 -45,49 -57,50 -52,25 -48,33 -61,13 -27,29 -31,28 -19,69 -23,15 -45,20 -65,42 -24,63 -55,47 -61,20 -40,29 -45,55 -11,59 -48,35 -25,5 -33,29 -15,10 -59,44 -41,29 -24,23 -43,27 -69,31 -37,38 -45,15 -51,15 -65,11 -5,46 -41,33 -62,37 -62,35 -53,20 -59,31 -9,67 -31,44 -46,37 -22,59 -27,19 -41,16 -25,4 -11,8 -31,9 -16,7 -28,61 -49,45 -45,21 -57,15 -50,25 -30,7 -14,69 -43,14 -33,49 -42,33 -67,36 -21,62 -51,38 -37,49 -62,9 -58,13 -35,43 -1,49 -57,46 -25,43 -5,67 -31,53 -59,9 -8,67 -13,63 -43,32 -33,42 -30,49 -0,63 -1,50 -21,59 -19,63 -36,55 -23,37 -67,27 -10,61 -5,56 -31,31 -47,13 -20,45 -28,31 -1,67 -15,62 -34,19 -55,40 -62,23 -2,47 -67,31 -39,5 -7,57 -15,70 -33,57 -28,53 -55,27 -7,5 -66,25 -47,22 -11,51 -23,51 -53,28 -61,33 -23,69 -65,37 -11,53 -31,3 -64,45 -7,69 -13,42 -31,34 -4,65 -68,21 -55,15 -41,55 -15,56 -39,33 -45,34 -25,15 -19,61 -21,67 -37,48 -24,53 -7,49 -37,30 -43,31 -5,15 -37,36 -31,41 -27,65 -25,13 -0,53 -37,57 -45,43 -15,65 -25,45 -33,48 -15,42 -15,38 -45,51 -3,55 -29,7 -39,23 -13,39 -20,63 -31,56 -45,27 -64,31 -27,39 -33,16 -25,14 -61,25 -21,55 -55,23 -43,39 -18,65 -15,67 -43,9 -30,59 -26,29 -41,17 -60,15 -25,23 -57,9 -24,15 -10,57 -17,59 -65,27 -52,45 -58,29 -70,31 -15,39 -55,35 -43,33 -17,55 -29,45 -55,14 -9,59 -53,16 -31,43 -15,5 -17,43 -62,43 -17,47 -59,28 -10,29 -67,29 -61,37 -69,36 -22,53 -43,43 -29,57 -48,15 -29,67 -61,47 -33,35 -51,31 -35,23 -27,13 -34,55 -27,18 -25,49 -25,63 -34,37 -39,38 -60,39 -55,25 -31,32 -53,39 -37,17 -39,21 -33,50 -68,27 -50,47 -26,53 -56,41 -15,51 -51,42 -11,43 -21,47 -35,33 -50,41 -31,11 -45,32 -31,29 -33,28 -15,57 -69,28 -23,63 -35,47 -55,22 -29,27 -29,59 -62,15 -27,67 -13,43 -53,24 -6,5 -29,50 -44,41 -10,63 -36,37 -1,58 -59,27 -39,37 -26,23 -25,33 -39,16 -15,50 -60,21 -3,63 -45,19 -46,41 -42,11 -5,57 -5,45 -4,53 -42,49 -49,33 -10,59 -21,69 -3,61 -30,19 -28,33 -21,42 -30,23 -69,37 -16,37 -33,17 -65,23 -38,53 -54,13 -43,19 -16,9 -34,61 -70,3 -38,49 -39,7 -37,42 -31,47 -15,54 -70,41 -50,21 -15,55 -61,44 -47,29 -54,9 -13,24 -18,69 -25,55 -45,10 -17,51 -52,13 -3,59 -27,53 -22,43 -45,25 -5,53 -39,19 -32,7 -13,51 -33,11 -13,61 -33,15 -59,39 -54,31 -63,31 -30,33 -50,35 -28,29 -22,65 -14,7 -13,64 -13,41 -35,30 -37,14 -27,63 -21,51 -23,23 -57,26 -66,29 -29,48 -35,50 -27,49 -51,35 -13,45 -69,35 -27,44 -13,27 -20,61 -37,19 -2,61 -33,9 -53,32 -61,53 -65,43 -44,13 -51,39 -35,17 -24,47 -27,55 -56,53 -31,36 -50,45 -51,30 -17,68 -29,33 -59,48 -47,45 -34,53 -41,19 -42,29 -45,44 -7,43 -63,45 -34,17 -51,25 -3,51 -37,12 -29,31 -3,42 -63,61 -66,13 -7,48 -27,43 -61,32 -59,49 -15,63 -3,15 -40,47 -35,31 -29,55 -26,57 -1,69 -65,10 -5,11 -24,21 -57,21 -41,25 -38,15 -37,5 -51,27 -41,30 -11,57 -63,26 -67,25 -29,23 -39,18 -17,39 -52,41 -57,39 -51,41 -25,50 -21,61 -35,15 -9,51 -69,30 -56,39 -49,20 -61,51 -27,23 -25,51 -49,16 -67,19 -63,35 -17,41 -56,17 -65,46 -63,40 -6,53 -37,28 -7,47 -32,53 -47,37 -59,45 -70,21 -49,32 -25,7 -26,67 -25,60 -65,26 -59,17 -9,55 -6,45 -11,21 -18,13 -25,68 -39,40 -11,50 -67,46 -45,33 -37,54 -7,58 -35,29 -55,33 -29,14 -23,61 -21,38 -57,11 -15,66 -38,45 -25,59 -40,43 -37,37 -51,18 -67,47 -18,51 -56,35 -49,43 -7,27 -13,44 -46,17 -31,39 -27,33 -5,51 -13,46 -68,39 -61,7 -39,26 -45,53 -43,29 -34,33 -39,15 -7,53 -33,44 -69,39 -62,11 -23,65 -59,15 -41,42 -55,59 -27,7 -50,33 -69,43 -32,59 -58,23 -29,58 -41,36 -49,24 -45,17 -55,34 -33,31 -16,61 -7,55 -31,21 -23,48 -46,45 -6,63 -41,14 -4,59 -35,57 -59,47 -49,28 -57,38 -63,27 -41,22 -13,21 -5,50 -47,26 -57,43 -53,22 -36,17 -57,13 -9,61 -66,39 -55,30 -16,67 -46,25 -13,25 -43,17 -9,11 -53,33 -35,20 -37,55 -58,33 -10,9 -44,23 -45,29 -33,10 -37,11 -63,67 -1,41 -64,35 -33,23 -19,43 -53,29 -47,17 -31,55 -13,58 -33,13 -59,42 -6,69 -43,25 -11,69 -47,15 -41,9 -25,64 -27,47 -47,42 -17,64 -47,53 -17,9 -20,67 -18,59 -13,26 -53,41 -29,26 -59,30 -33,56 -44,27 -26,47 -27,66 -3,21 -49,26 -29,66 -12,59 -41,35 -25,48 -33,32 -27,35 -39,57 -15,64 -37,22 -39,6 -5,65 -11,49 -65,9 -29,25 -49,15 -9,9 -66,41 -55,18 -41,52 -38,31 -59,52 -69,34 -27,51 -27,45 -59,10 -3,49 -29,22 -7,61 -35,35 -32,49 -67,33 -63,48 -20,41 -19,40 -1,21 -1,44 -57,29 -64,13 -49,14 -17,44 -40,9 -19,57 -69,27 -67,23 -63,49 -62,25 -47,24 -17,50 -35,51 -50,11 -32,47 -33,43 -49,19 -39,41 -67,30 -61,34 -43,60 -12,46 -70,22 -38,20 -14,44 -41,38 -22,52 -12,67 -2,7 -58,46 -34,30 -34,70 -6,46 -20,68 -7,24 -9,18 -33,20 -60,42 -67,24 -37,6 -0,61 -12,18 -20,10 -39,54 -69,0 -16,65 -40,63 -14,10 -34,21 -54,56 -16,21 -62,12 -23,24 -48,61 -70,29 -30,16 -0,66 -70,6 -6,52 -30,62 -35,14 -62,36 -48,58 -13,8 -28,60 -22,26 -66,17 -62,54 -40,53 -12,53 -23,54 -61,40 -43,66 -0,34 -15,68 -32,66 -22,10 -42,48 -28,6 -38,38 -55,28 -46,23 -16,68 -52,54 -5,52 -4,64 -57,42 -2,49 -38,12 -64,38 -28,52 -68,31 -68,52 -21,70 -16,16 -8,31 -9,66 -4,55 -11,68 -36,14 -42,16 -32,39 -54,64 -18,58 -52,46 -68,22 -7,0 -29,62 -0,44 -35,8 -18,67 -23,52 -58,42 -26,2 -32,57 -8,66 -30,20 -0,30 -12,6 -46,1 -49,2 -34,56 -16,52 -2,2 -48,24 -25,38 -41,34 -46,28 -32,26 -53,48 -34,69 -11,28 -3,64 -62,8 -12,48 -19,22 -4,11 -24,30 -22,31 -32,45 -19,68 -12,60 -7,32 -22,38 -25,58 -55,42 -47,70 -18,28 -66,62 -34,41 -44,57 -4,10 -53,64 -38,34 -12,22 -37,70 -0,42 -30,31 -35,54 -61,48 -58,34 -36,38 -66,43 -54,52 -39,66 -43,62 -60,52 -37,44 -42,22 -53,0 -70,25 -18,40 -69,20 -53,58 -21,18 -25,12 -0,67 -25,44 -22,14 -48,32 -48,38 -18,15 -52,30 -34,15 -52,43 -52,52 -46,63 -2,22 -10,21 -22,64 -37,58 -10,31 -21,64 -6,40 -0,58 -36,42 -24,2 -65,20 -0,1 -2,58 -21,26 -0,68 -62,26 -8,32 -38,17 -11,56 -19,18 -31,20 -43,70 -0,5 -3,10 -14,38 -14,37 -32,33 -18,44 -62,53 -6,29 -70,30 -42,21 -18,37 -23,38 -14,60 -46,59 -34,22 -10,48 -8,63 -68,20 -50,58 -44,32 -4,67 -40,14 -22,34 -6,25 -38,52 -38,48 -32,30 -38,54 -26,49 -5,30 -34,48 -45,28 -56,58 -17,60 -10,38 -44,70 -24,49 -7,12 -42,38 -38,13 -52,48 -40,2 -52,59 -20,52 -21,68 -44,44 -2,70 -10,6 -24,52 -40,48 -48,20 -70,20 -36,23 -36,58 -20,27 -58,4 -2,8 -26,38 -4,38 -36,60 -12,57 -34,49 -30,29 -48,50 -18,60 -22,21 -64,62 -31,50 -20,37 -20,33 -5,40 -34,46 -12,12 -17,32 -2,29 -44,28 -58,45 -32,63 -54,30 -12,42 -16,28 -8,16 -66,42 -12,49 -12,63 -26,68 -18,25 -44,21 -17,6 -34,34 -36,67 -2,13 -26,3 -70,0 -39,58 -17,14 -18,12 -43,50 -16,25 -2,34 -8,50 -62,6 -26,41 -50,40 -30,56 -18,49 -4,32 -16,60 -22,8 -15,6 -21,36 -4,58 -29,28 -47,40 -36,62 -34,14 -33,60 -8,44 -43,8 -60,55 -39,30 -24,24 -36,11 -47,48 -38,32 -22,58 -31,10 -38,60 -16,46 -10,5 -23,50 -0,14 -4,60 -10,64 -20,22 -66,37 -28,51 -27,26 -38,21 -30,43 -19,20 -0,28 -16,54 -40,46 -34,5 -56,42 -8,34 -41,68 -61,8 -50,63 -27,14 -36,8 -26,36 -30,70 -36,20 -70,33 -41,2 -70,19 -5,22 -38,10 -10,40 -28,42 -42,41 -46,42 -0,23 -70,46 -24,40 -16,39 -38,56 -26,50 -22,5 -40,56 -34,57 -52,64 -46,70 -8,26 -3,34 -32,52 -70,44 -12,24 -8,10 -28,50 -14,16 -20,56 -9,60 -8,20 -37,34 -49,22 -27,24 -17,10 -68,30 -22,62 -22,15 -58,35 -69,44 -14,20 -48,22 -48,25 -51,2 -26,21 -6,30 -12,26 -33,12 -5,60 -60,56 -0,70 -4,56 -56,50 -58,47 -46,0 -50,22 -52,68 -4,4 -32,36 -34,60 -30,17 -36,56 -62,42 -28,23 -3,50 -35,28 -39,34 -38,3 -30,12 -20,7 -18,57 -52,60 -6,50 -52,49 -4,13 -56,56 -8,70 -44,8 -70,1 -28,62 -42,42 -60,12 -50,28 -47,38 -60,43 -50,54 -51,50 -55,12 -31,18 -47,32 -18,16 -16,6 -62,32 -24,69 -2,54 -62,27 -40,32 -38,68 -8,36 -59,70 -52,16 -68,37 -24,18 -53,8 -14,70 -31,60 -32,4 -33,36 -64,14 -52,22 -31,22 -12,51 -16,38 -30,1 -48,40 -57,56 -69,40 -25,32 -50,60 -49,4 -30,64 -46,22 -28,48 -42,56 -2,43 -46,6 -6,41 -43,46 -20,59 -54,6 -58,64 -0,59 -41,10 -54,42 -62,63 -30,57 -4,17 -22,40 -60,44 -52,42 -28,30 -7,2 -0,15 -22,27 -70,38 -30,68 -5,64 -35,38 -0,20 -17,62 -55,70 -5,4 -56,60 -34,42 -60,61 -40,27 -38,44 -5,16 -14,51 -18,26 -46,46 -69,26 -48,14 -32,43 -10,28 -27,22 -54,20 -14,48 -67,26 -57,0 -4,70 -59,12 -51,6 -40,10 -59,20 -32,8 -34,2 -20,18 -62,44 -64,46 -20,58 -56,31 -54,69 -28,14 -0,17 -22,12 -52,0 -20,44 -34,8 -32,29 -65,30 -56,3 -26,52 -4,47 -22,1 -13,38 -62,65 -0,31 -44,42 -42,15 -42,10 -24,38 -10,62 -26,64 -48,64 -48,21 -43,56 -8,46 -4,7 -9,0 -30,14 -56,61 -68,34 -56,55 -13,40 -50,62 -8,2 -50,39 -18,68 -0,37 -4,5 -47,36 -14,24 -44,58 -56,25 -24,62 -6,13 -11,2 -20,5 -18,11 -51,16 -56,6 -53,70 -32,0 -34,51 -37,56 -18,41 -42,70 -24,20 -22,44 -28,46 -20,38 -36,34 -10,56 -43,44 -0,60 -1,70 -37,0 -58,12 -68,17 -66,14 -70,40 -61,58 -53,40 -60,19 -14,4 -3,20 -6,38 -53,18 -24,8 -14,43 -42,43 -50,4 -57,30 -7,50 -37,40 -64,65 -36,47 -66,34 -16,27 -70,34 -20,14 -60,27 -32,31 -66,48 -43,28 -64,28 -67,54 -13,70 -50,38 -42,58 -52,26 -24,29 -20,48 -17,30 -66,67 -68,64 -68,9 -14,68 -70,24 -38,5 -60,47 -11,60 -67,12 -0,43 -1,12 -56,16 -38,22 -24,68 -51,8 -38,63 -60,22 -36,54 -38,61 -66,45 -46,27 -48,8 -6,0 -27,30 -8,40 -32,60 -5,62 -62,67 -64,32 -52,37 -60,5 -70,64 -10,18 -63,52 -18,20 -34,39 -1,62 -51,34 -40,49 -28,38 -51,62 -8,54 -45,58 -5,10 -12,15 -68,8 -26,22 -35,34 -58,32 -32,34 -10,10 -6,7 -38,42 -62,57 -52,6 -40,22 -62,70 -58,6 -50,48 -41,46 -52,18 -60,2 -25,70 -5,0 -50,6 -39,2 -2,4 -62,45 -48,23 -57,34 -55,66 -18,14 -9,52 -24,22 -54,60 -49,52 -12,54 -54,14 -63,44 -56,64 -4,0 -20,50 -18,64 -1,18 -14,41 -16,35 -29,2 -66,52 -12,50 -42,68 -34,24 -56,57 -66,32 -57,60 -28,8 -22,66 -32,32 -52,58 -50,42 -4,36 -16,32 -65,58 -56,20 -42,0 -17,4 -34,68 -49,36 -32,58 -68,50 -19,16 -6,70 -40,38 -60,37 -50,49 -34,40 -51,70 -1,38 -13,32 -53,66 -6,32 -65,32 -32,22 -14,55 -38,30 -44,26 -66,8 -50,30 -48,31 -5,36 -52,19 -29,30 -24,50 -55,36 -46,69 -64,18 -44,0 -27,10 -68,32 -60,13 -12,17 -10,34 -18,18 -70,52 -10,8 -12,38 -16,70 -8,9 -58,65 -64,21 -70,4 -5,48 -22,49 -36,2 -18,30 -41,6 -10,44 -48,48 -60,14 -23,42 -46,36 -18,56 -40,18 -36,40 -24,59 -64,64 -40,11 -59,50 -14,57 -25,46 -65,0 -32,16 -24,4 -40,34 -50,36 -38,50 -20,30 -66,38 -14,40 -70,62 -6,58 -12,28 -62,60 -68,28 -36,29 -58,37 -45,68 -22,22 -40,65 -49,64 -24,65 -40,8 -0,12 -40,64 -70,66 -23,62 -66,49 -28,32 -47,44 -10,12 -29,8 -26,18 -28,16 -49,50 -7,6 -30,54 -52,10 -32,10 -1,0 -40,28 -7,52 -18,54 -5,42 -58,10 -54,40 -41,4 -10,22 -24,56 -44,36 -39,14 -12,2 -65,48 -20,16 -10,4 -56,66 -40,68 -16,19 -45,42 -20,43 -50,18 -40,15 -0,6 -18,62 -14,2 -51,44 -35,48 -54,68 -7,4 -30,25 -27,36 -48,9 -42,46 -57,54 -68,55 -34,59 -58,16 -70,65 -70,14 -24,12 -46,12 -30,39 -55,2 -38,8 -62,22 -3,70 -60,40 -7,44 -9,44 -16,58 -64,2 -22,46 -40,45 -23,0 -62,30 -46,18 -23,6 -27,48 -31,66 -66,30 -52,9 -29,20 -36,21 -69,10 -24,41 -8,38 -44,34 -37,66 -68,4 -34,28 -21,44 -28,70 -42,30 -35,42 -46,16 -6,8 -36,48 -8,61 -14,26 -62,0 -28,45 -46,7 -7,68 -32,40 -61,24 -32,1 -40,12 -58,2 -62,58 -0,2 -42,60 -13,68 -48,59 -6,18 -36,28 -61,0 -63,28 -58,8 -44,33 -59,6 -64,6 -12,62 -30,32 -39,56 -70,32 -67,44 -56,11 -38,6 -2,36 -60,50 -55,26 -58,66 -55,8 -48,17 -56,2 -64,0 -60,41 -64,24 -42,52 -30,13 -16,20 -30,44 -1,26 -47,34 -24,54 -56,8 -16,0 -2,32 -62,38 -70,56 -18,50 -9,28 -63,38 -30,18 -10,70 -44,25 -57,40 -28,26 -54,0 -36,12 -32,24 -44,62 -52,23 -19,54 -45,30 -51,68 -8,8 -48,62 -40,60 -48,6 -48,69 -22,36 -61,10 -62,28 -51,66 -14,18 -53,56 -29,52 -63,4 -46,50 -26,69 -52,56 -21,54`) - require.Equal(t, 304, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`2,5 -20,1 -63,59 -21,29 -37,59 -33,63 -14,33 -70,15 -21,34 -62,5 -45,54 -45,60 -48,53 -33,58 -23,35 -22,3 -33,0 -63,62 -44,67 -52,55 -5,19 -42,55 -45,0 -57,3 -15,45 -41,62 -1,39 -63,19 -39,59 -39,3 -48,7 -61,65 -31,1 -54,51 -11,14 -53,62 -67,68 -65,16 -17,45 -21,24 -55,3 -30,15 -4,39 -69,19 -69,57 -41,57 -43,24 -19,11 -18,27 -3,48 -8,13 -41,66 -67,67 -61,62 -5,37 -18,19 -29,64 -13,14 -42,57 -33,67 -0,19 -67,53 -47,59 -19,3 -51,54 -53,69 -42,5 -7,26 -59,65 -50,69 -3,27 -26,9 -43,3 -17,7 -15,11 -12,31 -43,5 -50,65 -9,5 -29,3 -21,6 -65,15 -43,57 -15,37 -50,53 -67,51 -29,1 -47,7 -55,54 -52,51 -47,54 -17,26 -12,43 -65,51 -1,27 -15,22 -63,15 -7,37 -69,49 -57,59 -7,36 -60,7 -66,7 -18,35 -13,36 -21,19 -15,3 -46,9 -30,3 -53,7 -8,7 -66,3 -49,69 -35,65 -48,5 -33,6 -1,31 -26,5 -44,59 -68,13 -45,67 -9,16 -51,55 -57,5 -2,33 -57,64 -31,2 -1,19 -5,12 -19,37 -40,67 -10,19 -21,12 -3,31 -51,1 -4,29 -52,65 -47,5 -17,19 -70,47 -11,19 -57,10 -54,55 -39,53 -61,56 -49,55 -28,37 -21,30 -9,45 -43,69 -57,19 -29,10 -60,63 -19,32 -66,5 -53,45 -53,49 -47,57 -26,1 -17,34 -65,7 -7,28 -41,63 -6,1 -69,69 -0,13 -5,28 -10,1 -38,67 -37,13 -3,7 -39,12 -2,15 -54,65 -35,53 -63,20 -13,30 -52,47 -13,3 -69,55 -55,61 -37,4 -7,35 -57,4 -35,69 -5,3 -63,64 -40,69 -59,5 -32,61 -66,61 -43,64 -40,1 -49,3 -68,65 -3,38 -21,4 -49,56 -18,29 -23,12 -7,11 -16,29 -8,11 -10,25 -39,67 -59,60 -3,19 -26,31 -7,9 -51,58 -49,67 -53,65 -65,59 -67,9 -43,58 -55,51 -69,7 -6,39 -49,59 -10,37 -4,43 -54,5 -3,28 -69,16 -67,7 -4,37 -37,1 -27,2 -62,59 -45,70 -25,35 -65,53 -31,7 -53,59 -1,10 -67,10 -65,67 -30,67 -17,1 -67,59 -31,61 -59,59 -65,69 -51,59 -61,66 -13,15 -29,65 -27,1 -65,65 -68,53 -53,11 -5,17 -20,35 -43,68 -3,30 -59,7 -3,39 -45,63 -7,31 -3,13 -51,5 -23,39 -20,3 -67,0 -37,3 -46,61 -65,70 -15,1 -17,11 -66,63 -32,23 -51,0 -3,1 -17,3 -13,6 -59,3 -19,31 -1,24 -41,3 -4,49 -40,57 -63,6 -16,17 -22,25 -39,60 -11,34 -56,7 -38,57 -55,53 -35,66 -1,11 -64,19 -50,3 -9,38 -19,8 -64,61 -3,17 -8,33 -13,1 -5,9 -50,7 -1,34 -41,65 -48,57 -14,13 -17,31 -56,1 -6,15 -24,25 -23,2 -69,13 -45,52 -15,23 -15,27 -27,28 -60,3 -31,30 -19,35 -42,53 -19,27 -61,1 -65,50 -53,2 -52,61 -15,20 -42,7 -67,20 -11,23 -29,54 -6,17 -41,53 -47,63 -68,51 -21,21 -19,6 -53,61 -23,29 -53,9 -19,29 -21,10 -2,41 -10,3 -49,9 -42,59 -12,1 -45,7 -19,28 -3,35 -69,6 -43,4 -17,21 -47,3 -52,7 -65,22 -45,62 -16,5 -51,3 -48,11 -7,33 -40,3 -26,35 -37,63 -49,68 -11,26 -54,67 -64,23 -21,17 -5,49 -63,65 -23,13 -58,1 -61,54 -69,56 -47,60 -11,7 -9,35 -57,58 -45,66 -1,23 -7,21 -17,12 -11,17 -34,3 -25,25 -22,35 -57,65 -17,17 -1,5 -12,33 -36,63 -19,15 -7,38 -53,55 -21,25 -42,1 -17,23 -35,67 -33,3 -56,63 -56,59 -3,2 -42,67 -65,56 -45,5 -5,33 -21,22 -9,42 -3,14 -21,14 -59,53 -64,53 -33,25 -11,35 -9,1 -63,16 -47,49 -53,60 -47,55 -39,1 -63,60 -35,63 -9,31 -55,68 -57,57 -68,15 -11,39 -62,69 -41,45 -55,57 -5,13 -9,14 -1,32 -17,5 -19,19 -19,30 -1,29 -55,56 -6,35 -21,8 -13,0 -4,25 -16,33 -69,9 -53,67 -67,17 -52,67 -41,59 -24,1 -51,7 -54,7 -3,22 -7,13 -41,61 -45,3 -21,33 -37,53 -11,13 -45,8 -48,1 -43,13 -17,46 -1,33 -41,69 -22,19 -19,38 -19,12 -45,57 -53,6 -15,36 -35,68 -9,21 -43,65 -5,41 -7,7 -68,61 -60,1 -7,23 -21,28 -23,34 -63,69 -7,40 -51,64 -66,51 -43,61 -49,63 -69,11 -50,51 -53,13 -17,24 -47,65 -32,67 -4,15 -38,1 -58,63 -23,21 -61,59 -15,21 -11,27 -33,65 -2,1 -20,25 -11,3 -55,67 -5,31 -43,53 -63,66 -3,29 -65,55 -36,69 -64,1 -3,23 -11,6 -52,57 -61,4 -63,17 -61,69 -3,33 -65,4 -21,16 -27,11 -1,3 -5,39 -69,54 -63,47 -1,36 -27,27 -33,61 -25,37 -61,14 -15,26 -55,1 -7,17 -29,11 -11,12 -2,19 -66,55 -45,59 -29,29 -26,39 -8,17 -45,65 -11,37 -2,39 -0,29 -5,27 -16,31 -67,65 -68,63 -26,25 -9,30 -3,36 -48,65 -59,51 -63,1 -7,41 -23,28 -1,15 -18,1 -4,41 -43,63 -21,27 -67,22 -52,69 -7,18 -68,49 -3,12 -18,17 -9,41 -19,13 -1,17 -3,26 -59,61 -57,66 -53,63 -39,69 -3,3 -67,69 -50,57 -9,19 -1,13 -55,58 -49,6 -7,3 -47,1 -12,37 -59,63 -61,67 -8,45 -41,1 -8,1 -39,63 -8,27 -15,19 -1,25 -61,57 -47,66 -46,5 -0,39 -4,3 -67,8 -9,43 -64,67 -49,47 -63,14 -51,57 -0,47 -8,3 -21,15 -63,57 -46,3 -5,21 -15,31 -57,12 -13,18 -21,23 -67,15 -21,7 -23,14 -67,55 -63,63 -21,13 -67,58 -51,49 -25,26 -2,31 -56,51 -32,69 -55,7 -31,62 -65,57 -55,65 -5,24 -7,20 -11,15 -19,14 -65,21 -5,1 -67,5 -67,63 -67,49 -68,57 -19,21 -37,65 -11,1 -47,61 -33,7 -28,3 -12,21 -47,68 -41,70 -65,1 -69,23 -5,25 -47,11 -49,61 -1,35 -59,57 -1,37 -33,1 -53,57 -59,1 -49,65 -27,15 -60,11 -61,63 -5,34 -69,15 -9,20 -66,65 -49,62 -35,3 -55,5 -4,19 -21,20 -47,67 -59,68 -24,27 -41,5 -67,3 -21,3 -47,9 -65,17 -9,47 -23,3 -41,67 -65,63 -15,29 -55,49 -3,6 -69,17 -22,17 -48,51 -33,64 -51,65 -9,27 -58,55 -25,21 -69,24 -9,22 -64,63 -19,1 -9,36 -17,27 -54,49 -38,69 -8,5 -46,67 -60,57 -68,11 -0,7 -19,17 -39,65 -27,3 -9,40 -64,57 -17,25 -3,25 -19,9 -47,8 -58,61 -23,22 -21,11 -41,7 -18,9 -11,45 -51,67 -52,3 -8,43 -9,25 -69,8 -67,11 -2,27 -63,51 -65,61 -53,5 -7,19 -18,3 -67,18 -45,9 -55,63 -15,15 -47,64 -54,3 -13,31 -19,5 -41,64 -15,16 -37,67 -53,52 -12,9 -15,4 -25,34 -43,59 -2,17 -23,33 -57,8 -16,15 -57,67 -29,0 -66,69 -19,7 -42,61 -66,15 -67,61 -51,63 -36,7 -1,16 -2,23 -66,59 -67,2 -61,64 -56,65 -56,5 -15,2 -19,33 -15,28 -49,53 -5,35 -12,3 -65,18 -69,53 -11,33 -37,2 -47,69 -57,69 -11,5 -34,7 -3,45 -63,5 -15,33 -35,1 -17,20 -23,11 -6,31 -17,35 -50,61 -51,4 -64,3 -62,55 -3,9 -49,60 -13,35 -68,69 -21,37 -44,63 -2,9 -15,7 -49,5 -67,13 -9,39 -9,33 -9,24 -2,11 -5,23 -46,55 -17,22 -9,23 -48,3 -45,13 -47,58 -60,59 -5,18 -14,3 -24,11 -56,69 -43,55 -57,63 -55,10 -17,33 -53,47 -36,3 -13,16 -5,32 -64,7 -32,3 -51,51 -10,17 -13,37 -40,59 -11,31 -13,19 -19,10 -49,1 -34,1 -10,27 -42,9 -61,2 -58,57 -13,33 -25,3 -43,2 -23,31 -24,37 -59,66 -12,29 -7,10 -31,65 -19,23 -39,64 -22,39 -18,5 -55,62 -23,18 -39,62 -53,50 -21,31 -40,55 -58,5 -23,40 -67,66 -69,59 -23,25 -39,61 -1,7 -21,1 -21,5 -57,61 -51,53 -53,51 -5,29 -69,47 -30,27 -5,14 -10,45 -18,23 -7,29 -55,60 -40,7 -49,7 -14,31 -15,25 -68,19 -57,49 -12,23 -7,30 -60,49 -50,9 -16,1 -22,9 -57,55 -15,24 -65,49 -69,25 -59,69 -28,69 -4,21 -23,36 -58,69 -69,61 -23,8 -5,8 -43,1 -9,37 -55,69 -3,11 -66,53 -70,59 -14,19 -15,17 -9,13 -59,55 -36,65 -69,67 -8,23 -23,32 -3,8 -65,3 -69,65 -29,5 -9,15 -61,61 -13,34 -1,1 -3,4 -68,45 -45,56 -33,69 -67,48 -38,65 -6,21 -0,3 -63,68 -50,67 -15,13 -63,58 -9,34 -67,1 -48,63 -60,69 -69,51 -57,47 -70,67 -51,47 -59,54 -57,7 -43,67 -4,45 -59,67 -45,2 -67,57 -62,1 -69,52 -31,63 -69,21 -31,15 -27,9 -3,37 -19,25 -63,55 -6,3 -53,3 -20,21 -13,17 -23,30 -6,23 -43,7 -17,29 -57,2 -21,32 -51,69 -7,1 -44,5 -57,1 -33,66 -45,69 -59,8 -9,3 -13,23 -11,22 -65,5 -1,9 -24,17 -61,3 -49,57 -12,19 -13,28 -69,12 -10,51 -53,53 -13,47 -31,69 -24,43 -69,63 -20,17 -67,21 -44,55 -33,68 -7,15 -45,1 -39,55 -39,4 -69,60 -23,27 -45,61 -51,61 -25,1 -63,3 -37,69 -33,5 -17,15 -9,32 -7,39 -63,54 -65,47 -29,19 -53,43 -60,33 -57,45 -5,6 -47,27 -39,25 -48,47 -53,36 -43,18 -49,21 -41,21 -23,19 -52,35 -39,45 -55,17 -29,39 -57,51 -55,45 -54,27 -33,26 -40,19 -44,17 -57,20 -37,45 -27,64 -31,13 -41,13 -5,7 -9,57 -10,69 -23,47 -1,51 -0,69 -49,12 -3,58 -15,9 -21,53 -53,27 -45,11 -63,42 -27,56 -6,11 -27,12 -27,31 -23,41 -35,41 -15,61 -61,27 -21,43 -41,43 -17,56 -11,66 -41,28 -51,37 -41,27 -38,59 -39,47 -59,41 -11,41 -26,59 -59,16 -29,35 -1,45 -33,41 -55,29 -65,39 -47,50 -28,5 -39,43 -35,21 -54,25 -43,16 -51,43 -31,17 -23,53 -37,21 -43,22 -22,55 -57,17 -15,49 -36,57 -11,48 -56,27 -36,39 -53,35 -8,51 -29,46 -61,29 -67,37 -31,35 -42,47 -63,41 -37,18 -43,36 -52,21 -63,9 -57,48 -29,36 -39,27 -35,59 -55,41 -25,53 -45,47 -19,66 -29,44 -61,5 -49,23 -14,59 -27,59 -19,58 -16,13 -44,51 -29,24 -13,7 -26,19 -37,20 -41,40 -28,27 -65,38 -41,47 -47,19 -49,49 -46,39 -38,55 -13,65 -53,44 -31,49 -36,5 -68,5 -42,45 -3,5 -4,63 -59,23 -23,56 -15,59 -37,52 -67,35 -11,11 -1,63 -11,25 -19,47 -31,33 -61,36 -27,46 -35,44 -46,21 -9,56 -5,59 -27,41 -35,37 -28,13 -39,20 -61,23 -36,15 -35,9 -7,8 -52,15 -14,39 -51,21 -65,25 -35,12 -58,15 -66,35 -23,7 -35,62 -63,25 -68,1 -23,64 -68,33 -65,28 -44,29 -19,67 -29,43 -47,51 -25,67 -2,45 -55,21 -37,43 -32,21 -58,51 -69,33 -13,29 -41,11 -47,23 -65,35 -23,45 -31,64 -41,50 -1,65 -25,39 -42,39 -44,47 -67,39 -32,35 -43,38 -51,29 -9,6 -41,24 -3,67 -57,31 -41,44 -53,19 -19,41 -14,61 -15,41 -46,49 -39,35 -62,51 -51,23 -32,9 -23,60 -1,47 -49,27 -57,36 -19,52 -43,49 -49,35 -21,50 -49,39 -53,38 -51,19 -21,57 -43,45 -33,38 -45,41 -1,56 -39,22 -21,63 -48,49 -47,30 -37,39 -4,61 -34,13 -26,51 -47,39 -19,45 -31,59 -3,52 -17,54 -69,45 -15,35 -49,11 -17,69 -55,13 -64,39 -57,33 -45,40 -28,21 -11,9 -64,29 -33,19 -21,60 -32,19 -47,25 -57,53 -31,4 -17,61 -69,5 -19,39 -46,15 -60,51 -9,50 -27,40 -63,29 -59,36 -11,55 -25,61 -30,55 -35,25 -27,69 -23,1 -9,65 -43,37 -27,42 -19,49 -56,45 -13,49 -35,7 -33,47 -43,11 -38,33 -35,49 -63,39 -41,20 -13,48 -1,60 -43,30 -7,45 -55,19 -65,19 -53,15 -33,53 -29,49 -51,45 -13,50 -34,23 -20,55 -10,11 -12,39 -17,53 -11,65 -27,37 -8,53 -65,24 -65,45 -61,45 -7,65 -59,37 -27,21 -39,39 -31,67 -45,23 -53,10 -59,22 -25,42 -1,57 -54,45 -13,10 -43,23 -37,51 -51,13 -40,35 -48,45 -36,27 -1,59 -39,51 -57,32 -31,5 -35,5 -8,69 -25,29 -39,9 -19,53 -29,40 -61,43 -7,62 -39,17 -3,54 -27,57 -67,43 -23,49 -53,17 -29,47 -25,41 -9,62 -61,35 -27,38 -23,9 -67,38 -41,49 -22,45 -43,15 -25,17 -13,69 -31,52 -29,68 -29,37 -30,37 -7,63 -37,27 -55,39 -65,13 -50,23 -59,11 -25,11 -25,65 -26,15 -55,37 -47,18 -20,69 -12,69 -8,47 -61,17 -53,12 -54,41 -9,69 -33,59 -57,37 -47,47 -61,39 -40,13 -69,3 -18,55 -22,47 -65,41 -31,45 -21,9 -38,27 -61,30 -61,55 -3,57 -51,11 -20,57 -41,51 -61,15 -40,37 -53,23 -49,38 -22,69 -1,61 -16,59 -20,65 -17,63 -51,17 -26,45 -24,31 -61,49 -38,41 -22,51 -29,16 -11,52 -34,35 -30,61 -37,33 -58,19 -9,29 -29,17 -61,9 -2,51 -7,59 -49,51 -35,55 -8,59 -29,41 -37,47 -23,67 -30,53 -15,69 -33,27 -49,31 -69,29 -59,43 -3,41 -43,10 -59,19 -35,27 -61,11 -27,25 -49,30 -28,57 -15,53 -39,29 -45,46 -16,41 -28,9 -27,61 -37,15 -29,18 -15,47 -17,57 -25,19 -37,25 -11,64 -45,12 -61,46 -14,67 -6,51 -19,65 -32,17 -21,65 -46,29 -51,28 -25,6 -19,51 -35,61 -47,41 -45,45 -39,49 -36,25 -19,59 -32,25 -25,47 -30,41 -62,19 -39,50 -41,41 -44,43 -53,37 -33,14 -40,51 -62,47 -19,48 -55,43 -63,13 -68,43 -65,29 -53,25 -23,59 -39,11 -54,17 -59,35 -63,53 -13,11 -35,58 -12,5 -63,21 -25,20 -45,37 -34,47 -24,55 -3,53 -11,67 -46,33 -25,31 -56,23 -36,43 -8,65 -61,19 -37,41 -41,31 -31,27 -37,23 -64,49 -6,67 -9,17 -11,40 -17,13 -26,11 -67,41 -23,57 -13,52 -50,17 -21,35 -33,51 -59,40 -27,5 -36,33 -3,62 -35,60 -58,43 -13,56 -24,67 -17,37 -29,53 -63,23 -20,51 -24,39 -13,12 -2,55 -62,41 -28,49 -39,44 -20,47 -52,27 -35,39 -59,25 -35,32 -49,29 -65,31 -35,52 -54,47 -29,51 -37,9 -13,13 -53,31 -45,39 -9,7 -39,13 -17,65 -37,31 -24,5 -30,5 -2,65 -28,7 -49,17 -55,55 -37,24 -13,5 -3,68 -49,13 -56,15 -21,49 -41,37 -43,26 -57,25 -3,47 -29,21 -47,43 -29,42 -55,11 -35,19 -6,55 -53,34 -23,17 -31,12 -4,69 -15,43 -66,33 -59,33 -13,57 -17,42 -10,67 -59,13 -50,37 -33,45 -35,40 -38,7 -21,41 -9,63 -53,1 -33,37 -13,66 -50,15 -1,55 -19,36 -18,47 -61,26 -49,25 -59,38 -5,43 -37,62 -11,61 -22,67 -61,18 -33,55 -18,61 -25,9 -62,49 -56,29 -65,44 -59,29 -33,39 -55,9 -49,37 -13,55 -35,22 -41,39 -48,19 -30,21 -13,9 -21,39 -37,61 -29,15 -27,52 -19,55 -47,35 -51,33 -8,55 -63,7 -35,46 -11,54 -29,69 -15,52 -31,46 -25,62 -63,43 -41,26 -61,41 -7,64 -43,35 -47,33 -40,33 -45,36 -57,41 -57,23 -57,27 -11,29 -5,69 -63,37 -7,25 -34,9 -57,24 -23,5 -59,18 -23,55 -48,41 -11,47 -16,57 -60,25 -60,23 -20,53 -66,47 -56,33 -30,11 -15,46 -26,33 -64,33 -51,10 -35,13 -5,55 -33,21 -10,55 -35,11 -9,53 -23,44 -63,11 -69,1 -21,45 -6,47 -42,17 -32,41 -17,49 -61,12 -35,45 -31,51 -55,20 -31,25 -7,51 -41,15 -45,31 -31,8 -29,13 -3,43 -27,70 -59,21 -43,41 -67,45 -59,46 -56,43 -5,66 -18,39 -39,10 -1,22 -68,25 -15,48 -68,41 -2,67 -37,46 -15,44 -25,69 -43,47 -61,28 -61,31 -43,20 -48,37 -19,44 -24,9 -27,16 -37,29 -51,40 -38,25 -62,31 -31,23 -47,21 -13,53 -12,61 -37,8 -5,47 -17,67 -49,44 -31,19 -25,57 -13,67 -3,65 -63,8 -3,69 -29,63 -11,63 -27,60 -31,37 -29,61 -25,27 -32,13 -1,53 -52,31 -57,35 -36,35 -67,32 -33,30 -4,57 -23,43 -39,31 -46,47 -5,61 -43,51 -51,9 -10,43 -5,63 -69,41 -7,60 -53,21 -45,35 -34,25 -37,35 -33,40 -64,9 -37,7 -9,49 -13,59 -70,43 -11,46 -43,34 -36,49 -29,9 -46,13 -31,38 -41,23 -65,33 -47,28 -54,37 -23,58 -33,33 -1,43 -7,67 -6,43 -63,33 -27,17 -49,41 -15,40 -43,21 -50,1 -61,21 -5,5 -51,48 -37,10 -44,49 -1,64 -55,31 -13,54 -47,31 -31,57 -45,49 -57,50 -52,25 -48,33 -61,13 -27,29 -31,28 -19,69 -23,15 -45,20 -65,42 -24,63 -55,47 -61,20 -40,29 -45,55 -11,59 -48,35 -25,5 -33,29 -15,10 -59,44 -41,29 -24,23 -43,27 -69,31 -37,38 -45,15 -51,15 -65,11 -5,46 -41,33 -62,37 -62,35 -53,20 -59,31 -9,67 -31,44 -46,37 -22,59 -27,19 -41,16 -25,4 -11,8 -31,9 -16,7 -28,61 -49,45 -45,21 -57,15 -50,25 -30,7 -14,69 -43,14 -33,49 -42,33 -67,36 -21,62 -51,38 -37,49 -62,9 -58,13 -35,43 -1,49 -57,46 -25,43 -5,67 -31,53 -59,9 -8,67 -13,63 -43,32 -33,42 -30,49 -0,63 -1,50 -21,59 -19,63 -36,55 -23,37 -67,27 -10,61 -5,56 -31,31 -47,13 -20,45 -28,31 -1,67 -15,62 -34,19 -55,40 -62,23 -2,47 -67,31 -39,5 -7,57 -15,70 -33,57 -28,53 -55,27 -7,5 -66,25 -47,22 -11,51 -23,51 -53,28 -61,33 -23,69 -65,37 -11,53 -31,3 -64,45 -7,69 -13,42 -31,34 -4,65 -68,21 -55,15 -41,55 -15,56 -39,33 -45,34 -25,15 -19,61 -21,67 -37,48 -24,53 -7,49 -37,30 -43,31 -5,15 -37,36 -31,41 -27,65 -25,13 -0,53 -37,57 -45,43 -15,65 -25,45 -33,48 -15,42 -15,38 -45,51 -3,55 -29,7 -39,23 -13,39 -20,63 -31,56 -45,27 -64,31 -27,39 -33,16 -25,14 -61,25 -21,55 -55,23 -43,39 -18,65 -15,67 -43,9 -30,59 -26,29 -41,17 -60,15 -25,23 -57,9 -24,15 -10,57 -17,59 -65,27 -52,45 -58,29 -70,31 -15,39 -55,35 -43,33 -17,55 -29,45 -55,14 -9,59 -53,16 -31,43 -15,5 -17,43 -62,43 -17,47 -59,28 -10,29 -67,29 -61,37 -69,36 -22,53 -43,43 -29,57 -48,15 -29,67 -61,47 -33,35 -51,31 -35,23 -27,13 -34,55 -27,18 -25,49 -25,63 -34,37 -39,38 -60,39 -55,25 -31,32 -53,39 -37,17 -39,21 -33,50 -68,27 -50,47 -26,53 -56,41 -15,51 -51,42 -11,43 -21,47 -35,33 -50,41 -31,11 -45,32 -31,29 -33,28 -15,57 -69,28 -23,63 -35,47 -55,22 -29,27 -29,59 -62,15 -27,67 -13,43 -53,24 -6,5 -29,50 -44,41 -10,63 -36,37 -1,58 -59,27 -39,37 -26,23 -25,33 -39,16 -15,50 -60,21 -3,63 -45,19 -46,41 -42,11 -5,57 -5,45 -4,53 -42,49 -49,33 -10,59 -21,69 -3,61 -30,19 -28,33 -21,42 -30,23 -69,37 -16,37 -33,17 -65,23 -38,53 -54,13 -43,19 -16,9 -34,61 -70,3 -38,49 -39,7 -37,42 -31,47 -15,54 -70,41 -50,21 -15,55 -61,44 -47,29 -54,9 -13,24 -18,69 -25,55 -45,10 -17,51 -52,13 -3,59 -27,53 -22,43 -45,25 -5,53 -39,19 -32,7 -13,51 -33,11 -13,61 -33,15 -59,39 -54,31 -63,31 -30,33 -50,35 -28,29 -22,65 -14,7 -13,64 -13,41 -35,30 -37,14 -27,63 -21,51 -23,23 -57,26 -66,29 -29,48 -35,50 -27,49 -51,35 -13,45 -69,35 -27,44 -13,27 -20,61 -37,19 -2,61 -33,9 -53,32 -61,53 -65,43 -44,13 -51,39 -35,17 -24,47 -27,55 -56,53 -31,36 -50,45 -51,30 -17,68 -29,33 -59,48 -47,45 -34,53 -41,19 -42,29 -45,44 -7,43 -63,45 -34,17 -51,25 -3,51 -37,12 -29,31 -3,42 -63,61 -66,13 -7,48 -27,43 -61,32 -59,49 -15,63 -3,15 -40,47 -35,31 -29,55 -26,57 -1,69 -65,10 -5,11 -24,21 -57,21 -41,25 -38,15 -37,5 -51,27 -41,30 -11,57 -63,26 -67,25 -29,23 -39,18 -17,39 -52,41 -57,39 -51,41 -25,50 -21,61 -35,15 -9,51 -69,30 -56,39 -49,20 -61,51 -27,23 -25,51 -49,16 -67,19 -63,35 -17,41 -56,17 -65,46 -63,40 -6,53 -37,28 -7,47 -32,53 -47,37 -59,45 -70,21 -49,32 -25,7 -26,67 -25,60 -65,26 -59,17 -9,55 -6,45 -11,21 -18,13 -25,68 -39,40 -11,50 -67,46 -45,33 -37,54 -7,58 -35,29 -55,33 -29,14 -23,61 -21,38 -57,11 -15,66 -38,45 -25,59 -40,43 -37,37 -51,18 -67,47 -18,51 -56,35 -49,43 -7,27 -13,44 -46,17 -31,39 -27,33 -5,51 -13,46 -68,39 -61,7 -39,26 -45,53 -43,29 -34,33 -39,15 -7,53 -33,44 -69,39 -62,11 -23,65 -59,15 -41,42 -55,59 -27,7 -50,33 -69,43 -32,59 -58,23 -29,58 -41,36 -49,24 -45,17 -55,34 -33,31 -16,61 -7,55 -31,21 -23,48 -46,45 -6,63 -41,14 -4,59 -35,57 -59,47 -49,28 -57,38 -63,27 -41,22 -13,21 -5,50 -47,26 -57,43 -53,22 -36,17 -57,13 -9,61 -66,39 -55,30 -16,67 -46,25 -13,25 -43,17 -9,11 -53,33 -35,20 -37,55 -58,33 -10,9 -44,23 -45,29 -33,10 -37,11 -63,67 -1,41 -64,35 -33,23 -19,43 -53,29 -47,17 -31,55 -13,58 -33,13 -59,42 -6,69 -43,25 -11,69 -47,15 -41,9 -25,64 -27,47 -47,42 -17,64 -47,53 -17,9 -20,67 -18,59 -13,26 -53,41 -29,26 -59,30 -33,56 -44,27 -26,47 -27,66 -3,21 -49,26 -29,66 -12,59 -41,35 -25,48 -33,32 -27,35 -39,57 -15,64 -37,22 -39,6 -5,65 -11,49 -65,9 -29,25 -49,15 -9,9 -66,41 -55,18 -41,52 -38,31 -59,52 -69,34 -27,51 -27,45 -59,10 -3,49 -29,22 -7,61 -35,35 -32,49 -67,33 -63,48 -20,41 -19,40 -1,21 -1,44 -57,29 -64,13 -49,14 -17,44 -40,9 -19,57 -69,27 -67,23 -63,49 -62,25 -47,24 -17,50 -35,51 -50,11 -32,47 -33,43 -49,19 -39,41 -67,30 -61,34 -43,60 -12,46 -70,22 -38,20 -14,44 -41,38 -22,52 -12,67 -2,7 -58,46 -34,30 -34,70 -6,46 -20,68 -7,24 -9,18 -33,20 -60,42 -67,24 -37,6 -0,61 -12,18 -20,10 -39,54 -69,0 -16,65 -40,63 -14,10 -34,21 -54,56 -16,21 -62,12 -23,24 -48,61 -70,29 -30,16 -0,66 -70,6 -6,52 -30,62 -35,14 -62,36 -48,58 -13,8 -28,60 -22,26 -66,17 -62,54 -40,53 -12,53 -23,54 -61,40 -43,66 -0,34 -15,68 -32,66 -22,10 -42,48 -28,6 -38,38 -55,28 -46,23 -16,68 -52,54 -5,52 -4,64 -57,42 -2,49 -38,12 -64,38 -28,52 -68,31 -68,52 -21,70 -16,16 -8,31 -9,66 -4,55 -11,68 -36,14 -42,16 -32,39 -54,64 -18,58 -52,46 -68,22 -7,0 -29,62 -0,44 -35,8 -18,67 -23,52 -58,42 -26,2 -32,57 -8,66 -30,20 -0,30 -12,6 -46,1 -49,2 -34,56 -16,52 -2,2 -48,24 -25,38 -41,34 -46,28 -32,26 -53,48 -34,69 -11,28 -3,64 -62,8 -12,48 -19,22 -4,11 -24,30 -22,31 -32,45 -19,68 -12,60 -7,32 -22,38 -25,58 -55,42 -47,70 -18,28 -66,62 -34,41 -44,57 -4,10 -53,64 -38,34 -12,22 -37,70 -0,42 -30,31 -35,54 -61,48 -58,34 -36,38 -66,43 -54,52 -39,66 -43,62 -60,52 -37,44 -42,22 -53,0 -70,25 -18,40 -69,20 -53,58 -21,18 -25,12 -0,67 -25,44 -22,14 -48,32 -48,38 -18,15 -52,30 -34,15 -52,43 -52,52 -46,63 -2,22 -10,21 -22,64 -37,58 -10,31 -21,64 -6,40 -0,58 -36,42 -24,2 -65,20 -0,1 -2,58 -21,26 -0,68 -62,26 -8,32 -38,17 -11,56 -19,18 -31,20 -43,70 -0,5 -3,10 -14,38 -14,37 -32,33 -18,44 -62,53 -6,29 -70,30 -42,21 -18,37 -23,38 -14,60 -46,59 -34,22 -10,48 -8,63 -68,20 -50,58 -44,32 -4,67 -40,14 -22,34 -6,25 -38,52 -38,48 -32,30 -38,54 -26,49 -5,30 -34,48 -45,28 -56,58 -17,60 -10,38 -44,70 -24,49 -7,12 -42,38 -38,13 -52,48 -40,2 -52,59 -20,52 -21,68 -44,44 -2,70 -10,6 -24,52 -40,48 -48,20 -70,20 -36,23 -36,58 -20,27 -58,4 -2,8 -26,38 -4,38 -36,60 -12,57 -34,49 -30,29 -48,50 -18,60 -22,21 -64,62 -31,50 -20,37 -20,33 -5,40 -34,46 -12,12 -17,32 -2,29 -44,28 -58,45 -32,63 -54,30 -12,42 -16,28 -8,16 -66,42 -12,49 -12,63 -26,68 -18,25 -44,21 -17,6 -34,34 -36,67 -2,13 -26,3 -70,0 -39,58 -17,14 -18,12 -43,50 -16,25 -2,34 -8,50 -62,6 -26,41 -50,40 -30,56 -18,49 -4,32 -16,60 -22,8 -15,6 -21,36 -4,58 -29,28 -47,40 -36,62 -34,14 -33,60 -8,44 -43,8 -60,55 -39,30 -24,24 -36,11 -47,48 -38,32 -22,58 -31,10 -38,60 -16,46 -10,5 -23,50 -0,14 -4,60 -10,64 -20,22 -66,37 -28,51 -27,26 -38,21 -30,43 -19,20 -0,28 -16,54 -40,46 -34,5 -56,42 -8,34 -41,68 -61,8 -50,63 -27,14 -36,8 -26,36 -30,70 -36,20 -70,33 -41,2 -70,19 -5,22 -38,10 -10,40 -28,42 -42,41 -46,42 -0,23 -70,46 -24,40 -16,39 -38,56 -26,50 -22,5 -40,56 -34,57 -52,64 -46,70 -8,26 -3,34 -32,52 -70,44 -12,24 -8,10 -28,50 -14,16 -20,56 -9,60 -8,20 -37,34 -49,22 -27,24 -17,10 -68,30 -22,62 -22,15 -58,35 -69,44 -14,20 -48,22 -48,25 -51,2 -26,21 -6,30 -12,26 -33,12 -5,60 -60,56 -0,70 -4,56 -56,50 -58,47 -46,0 -50,22 -52,68 -4,4 -32,36 -34,60 -30,17 -36,56 -62,42 -28,23 -3,50 -35,28 -39,34 -38,3 -30,12 -20,7 -18,57 -52,60 -6,50 -52,49 -4,13 -56,56 -8,70 -44,8 -70,1 -28,62 -42,42 -60,12 -50,28 -47,38 -60,43 -50,54 -51,50 -55,12 -31,18 -47,32 -18,16 -16,6 -62,32 -24,69 -2,54 -62,27 -40,32 -38,68 -8,36 -59,70 -52,16 -68,37 -24,18 -53,8 -14,70 -31,60 -32,4 -33,36 -64,14 -52,22 -31,22 -12,51 -16,38 -30,1 -48,40 -57,56 -69,40 -25,32 -50,60 -49,4 -30,64 -46,22 -28,48 -42,56 -2,43 -46,6 -6,41 -43,46 -20,59 -54,6 -58,64 -0,59 -41,10 -54,42 -62,63 -30,57 -4,17 -22,40 -60,44 -52,42 -28,30 -7,2 -0,15 -22,27 -70,38 -30,68 -5,64 -35,38 -0,20 -17,62 -55,70 -5,4 -56,60 -34,42 -60,61 -40,27 -38,44 -5,16 -14,51 -18,26 -46,46 -69,26 -48,14 -32,43 -10,28 -27,22 -54,20 -14,48 -67,26 -57,0 -4,70 -59,12 -51,6 -40,10 -59,20 -32,8 -34,2 -20,18 -62,44 -64,46 -20,58 -56,31 -54,69 -28,14 -0,17 -22,12 -52,0 -20,44 -34,8 -32,29 -65,30 -56,3 -26,52 -4,47 -22,1 -13,38 -62,65 -0,31 -44,42 -42,15 -42,10 -24,38 -10,62 -26,64 -48,64 -48,21 -43,56 -8,46 -4,7 -9,0 -30,14 -56,61 -68,34 -56,55 -13,40 -50,62 -8,2 -50,39 -18,68 -0,37 -4,5 -47,36 -14,24 -44,58 -56,25 -24,62 -6,13 -11,2 -20,5 -18,11 -51,16 -56,6 -53,70 -32,0 -34,51 -37,56 -18,41 -42,70 -24,20 -22,44 -28,46 -20,38 -36,34 -10,56 -43,44 -0,60 -1,70 -37,0 -58,12 -68,17 -66,14 -70,40 -61,58 -53,40 -60,19 -14,4 -3,20 -6,38 -53,18 -24,8 -14,43 -42,43 -50,4 -57,30 -7,50 -37,40 -64,65 -36,47 -66,34 -16,27 -70,34 -20,14 -60,27 -32,31 -66,48 -43,28 -64,28 -67,54 -13,70 -50,38 -42,58 -52,26 -24,29 -20,48 -17,30 -66,67 -68,64 -68,9 -14,68 -70,24 -38,5 -60,47 -11,60 -67,12 -0,43 -1,12 -56,16 -38,22 -24,68 -51,8 -38,63 -60,22 -36,54 -38,61 -66,45 -46,27 -48,8 -6,0 -27,30 -8,40 -32,60 -5,62 -62,67 -64,32 -52,37 -60,5 -70,64 -10,18 -63,52 -18,20 -34,39 -1,62 -51,34 -40,49 -28,38 -51,62 -8,54 -45,58 -5,10 -12,15 -68,8 -26,22 -35,34 -58,32 -32,34 -10,10 -6,7 -38,42 -62,57 -52,6 -40,22 -62,70 -58,6 -50,48 -41,46 -52,18 -60,2 -25,70 -5,0 -50,6 -39,2 -2,4 -62,45 -48,23 -57,34 -55,66 -18,14 -9,52 -24,22 -54,60 -49,52 -12,54 -54,14 -63,44 -56,64 -4,0 -20,50 -18,64 -1,18 -14,41 -16,35 -29,2 -66,52 -12,50 -42,68 -34,24 -56,57 -66,32 -57,60 -28,8 -22,66 -32,32 -52,58 -50,42 -4,36 -16,32 -65,58 -56,20 -42,0 -17,4 -34,68 -49,36 -32,58 -68,50 -19,16 -6,70 -40,38 -60,37 -50,49 -34,40 -51,70 -1,38 -13,32 -53,66 -6,32 -65,32 -32,22 -14,55 -38,30 -44,26 -66,8 -50,30 -48,31 -5,36 -52,19 -29,30 -24,50 -55,36 -46,69 -64,18 -44,0 -27,10 -68,32 -60,13 -12,17 -10,34 -18,18 -70,52 -10,8 -12,38 -16,70 -8,9 -58,65 -64,21 -70,4 -5,48 -22,49 -36,2 -18,30 -41,6 -10,44 -48,48 -60,14 -23,42 -46,36 -18,56 -40,18 -36,40 -24,59 -64,64 -40,11 -59,50 -14,57 -25,46 -65,0 -32,16 -24,4 -40,34 -50,36 -38,50 -20,30 -66,38 -14,40 -70,62 -6,58 -12,28 -62,60 -68,28 -36,29 -58,37 -45,68 -22,22 -40,65 -49,64 -24,65 -40,8 -0,12 -40,64 -70,66 -23,62 -66,49 -28,32 -47,44 -10,12 -29,8 -26,18 -28,16 -49,50 -7,6 -30,54 -52,10 -32,10 -1,0 -40,28 -7,52 -18,54 -5,42 -58,10 -54,40 -41,4 -10,22 -24,56 -44,36 -39,14 -12,2 -65,48 -20,16 -10,4 -56,66 -40,68 -16,19 -45,42 -20,43 -50,18 -40,15 -0,6 -18,62 -14,2 -51,44 -35,48 -54,68 -7,4 -30,25 -27,36 -48,9 -42,46 -57,54 -68,55 -34,59 -58,16 -70,65 -70,14 -24,12 -46,12 -30,39 -55,2 -38,8 -62,22 -3,70 -60,40 -7,44 -9,44 -16,58 -64,2 -22,46 -40,45 -23,0 -62,30 -46,18 -23,6 -27,48 -31,66 -66,30 -52,9 -29,20 -36,21 -69,10 -24,41 -8,38 -44,34 -37,66 -68,4 -34,28 -21,44 -28,70 -42,30 -35,42 -46,16 -6,8 -36,48 -8,61 -14,26 -62,0 -28,45 -46,7 -7,68 -32,40 -61,24 -32,1 -40,12 -58,2 -62,58 -0,2 -42,60 -13,68 -48,59 -6,18 -36,28 -61,0 -63,28 -58,8 -44,33 -59,6 -64,6 -12,62 -30,32 -39,56 -70,32 -67,44 -56,11 -38,6 -2,36 -60,50 -55,26 -58,66 -55,8 -48,17 -56,2 -64,0 -60,41 -64,24 -42,52 -30,13 -16,20 -30,44 -1,26 -47,34 -24,54 -56,8 -16,0 -2,32 -62,38 -70,56 -18,50 -9,28 -63,38 -30,18 -10,70 -44,25 -57,40 -28,26 -54,0 -36,12 -32,24 -44,62 -52,23 -19,54 -45,30 -51,68 -8,8 -48,62 -40,60 -48,6 -48,69 -22,36 -61,10 -62,28 -51,66 -14,18 -53,56 -29,52 -63,4 -46,50 -26,69 -52,56 -21,54`) - require.Equal(t, 0, r) -} diff --git a/2024/go/day18/input.txt b/2024/go/day18/input.txt deleted file mode 100644 index 3b8f63e..0000000 --- a/2024/go/day18/input.txt +++ /dev/null @@ -1,3450 +0,0 @@ -2,5 -20,1 -63,59 -21,29 -37,59 -33,63 -14,33 -70,15 -21,34 -62,5 -45,54 -45,60 -48,53 -33,58 -23,35 -22,3 -33,0 -63,62 -44,67 -52,55 -5,19 -42,55 -45,0 -57,3 -15,45 -41,62 -1,39 -63,19 -39,59 -39,3 -48,7 -61,65 -31,1 -54,51 -11,14 -53,62 -67,68 -65,16 -17,45 -21,24 -55,3 -30,15 -4,39 -69,19 -69,57 -41,57 -43,24 -19,11 -18,27 -3,48 -8,13 -41,66 -67,67 -61,62 -5,37 -18,19 -29,64 -13,14 -42,57 -33,67 -0,19 -67,53 -47,59 -19,3 -51,54 -53,69 -42,5 -7,26 -59,65 -50,69 -3,27 -26,9 -43,3 -17,7 -15,11 -12,31 -43,5 -50,65 -9,5 -29,3 -21,6 -65,15 -43,57 -15,37 -50,53 -67,51 -29,1 -47,7 -55,54 -52,51 -47,54 -17,26 -12,43 -65,51 -1,27 -15,22 -63,15 -7,37 -69,49 -57,59 -7,36 -60,7 -66,7 -18,35 -13,36 -21,19 -15,3 -46,9 -30,3 -53,7 -8,7 -66,3 -49,69 -35,65 -48,5 -33,6 -1,31 -26,5 -44,59 -68,13 -45,67 -9,16 -51,55 -57,5 -2,33 -57,64 -31,2 -1,19 -5,12 -19,37 -40,67 -10,19 -21,12 -3,31 -51,1 -4,29 -52,65 -47,5 -17,19 -70,47 -11,19 -57,10 -54,55 -39,53 -61,56 -49,55 -28,37 -21,30 -9,45 -43,69 -57,19 -29,10 -60,63 -19,32 -66,5 -53,45 -53,49 -47,57 -26,1 -17,34 -65,7 -7,28 -41,63 -6,1 -69,69 -0,13 -5,28 -10,1 -38,67 -37,13 -3,7 -39,12 -2,15 -54,65 -35,53 -63,20 -13,30 -52,47 -13,3 -69,55 -55,61 -37,4 -7,35 -57,4 -35,69 -5,3 -63,64 -40,69 -59,5 -32,61 -66,61 -43,64 -40,1 -49,3 -68,65 -3,38 -21,4 -49,56 -18,29 -23,12 -7,11 -16,29 -8,11 -10,25 -39,67 -59,60 -3,19 -26,31 -7,9 -51,58 -49,67 -53,65 -65,59 -67,9 -43,58 -55,51 -69,7 -6,39 -49,59 -10,37 -4,43 -54,5 -3,28 -69,16 -67,7 -4,37 -37,1 -27,2 -62,59 -45,70 -25,35 -65,53 -31,7 -53,59 -1,10 -67,10 -65,67 -30,67 -17,1 -67,59 -31,61 -59,59 -65,69 -51,59 -61,66 -13,15 -29,65 -27,1 -65,65 -68,53 -53,11 -5,17 -20,35 -43,68 -3,30 -59,7 -3,39 -45,63 -7,31 -3,13 -51,5 -23,39 -20,3 -67,0 -37,3 -46,61 -65,70 -15,1 -17,11 -66,63 -32,23 -51,0 -3,1 -17,3 -13,6 -59,3 -19,31 -1,24 -41,3 -4,49 -40,57 -63,6 -16,17 -22,25 -39,60 -11,34 -56,7 -38,57 -55,53 -35,66 -1,11 -64,19 -50,3 -9,38 -19,8 -64,61 -3,17 -8,33 -13,1 -5,9 -50,7 -1,34 -41,65 -48,57 -14,13 -17,31 -56,1 -6,15 -24,25 -23,2 -69,13 -45,52 -15,23 -15,27 -27,28 -60,3 -31,30 -19,35 -42,53 -19,27 -61,1 -65,50 -53,2 -52,61 -15,20 -42,7 -67,20 -11,23 -29,54 -6,17 -41,53 -47,63 -68,51 -21,21 -19,6 -53,61 -23,29 -53,9 -19,29 -21,10 -2,41 -10,3 -49,9 -42,59 -12,1 -45,7 -19,28 -3,35 -69,6 -43,4 -17,21 -47,3 -52,7 -65,22 -45,62 -16,5 -51,3 -48,11 -7,33 -40,3 -26,35 -37,63 -49,68 -11,26 -54,67 -64,23 -21,17 -5,49 -63,65 -23,13 -58,1 -61,54 -69,56 -47,60 -11,7 -9,35 -57,58 -45,66 -1,23 -7,21 -17,12 -11,17 -34,3 -25,25 -22,35 -57,65 -17,17 -1,5 -12,33 -36,63 -19,15 -7,38 -53,55 -21,25 -42,1 -17,23 -35,67 -33,3 -56,63 -56,59 -3,2 -42,67 -65,56 -45,5 -5,33 -21,22 -9,42 -3,14 -21,14 -59,53 -64,53 -33,25 -11,35 -9,1 -63,16 -47,49 -53,60 -47,55 -39,1 -63,60 -35,63 -9,31 -55,68 -57,57 -68,15 -11,39 -62,69 -41,45 -55,57 -5,13 -9,14 -1,32 -17,5 -19,19 -19,30 -1,29 -55,56 -6,35 -21,8 -13,0 -4,25 -16,33 -69,9 -53,67 -67,17 -52,67 -41,59 -24,1 -51,7 -54,7 -3,22 -7,13 -41,61 -45,3 -21,33 -37,53 -11,13 -45,8 -48,1 -43,13 -17,46 -1,33 -41,69 -22,19 -19,38 -19,12 -45,57 -53,6 -15,36 -35,68 -9,21 -43,65 -5,41 -7,7 -68,61 -60,1 -7,23 -21,28 -23,34 -63,69 -7,40 -51,64 -66,51 -43,61 -49,63 -69,11 -50,51 -53,13 -17,24 -47,65 -32,67 -4,15 -38,1 -58,63 -23,21 -61,59 -15,21 -11,27 -33,65 -2,1 -20,25 -11,3 -55,67 -5,31 -43,53 -63,66 -3,29 -65,55 -36,69 -64,1 -3,23 -11,6 -52,57 -61,4 -63,17 -61,69 -3,33 -65,4 -21,16 -27,11 -1,3 -5,39 -69,54 -63,47 -1,36 -27,27 -33,61 -25,37 -61,14 -15,26 -55,1 -7,17 -29,11 -11,12 -2,19 -66,55 -45,59 -29,29 -26,39 -8,17 -45,65 -11,37 -2,39 -0,29 -5,27 -16,31 -67,65 -68,63 -26,25 -9,30 -3,36 -48,65 -59,51 -63,1 -7,41 -23,28 -1,15 -18,1 -4,41 -43,63 -21,27 -67,22 -52,69 -7,18 -68,49 -3,12 -18,17 -9,41 -19,13 -1,17 -3,26 -59,61 -57,66 -53,63 -39,69 -3,3 -67,69 -50,57 -9,19 -1,13 -55,58 -49,6 -7,3 -47,1 -12,37 -59,63 -61,67 -8,45 -41,1 -8,1 -39,63 -8,27 -15,19 -1,25 -61,57 -47,66 -46,5 -0,39 -4,3 -67,8 -9,43 -64,67 -49,47 -63,14 -51,57 -0,47 -8,3 -21,15 -63,57 -46,3 -5,21 -15,31 -57,12 -13,18 -21,23 -67,15 -21,7 -23,14 -67,55 -63,63 -21,13 -67,58 -51,49 -25,26 -2,31 -56,51 -32,69 -55,7 -31,62 -65,57 -55,65 -5,24 -7,20 -11,15 -19,14 -65,21 -5,1 -67,5 -67,63 -67,49 -68,57 -19,21 -37,65 -11,1 -47,61 -33,7 -28,3 -12,21 -47,68 -41,70 -65,1 -69,23 -5,25 -47,11 -49,61 -1,35 -59,57 -1,37 -33,1 -53,57 -59,1 -49,65 -27,15 -60,11 -61,63 -5,34 -69,15 -9,20 -66,65 -49,62 -35,3 -55,5 -4,19 -21,20 -47,67 -59,68 -24,27 -41,5 -67,3 -21,3 -47,9 -65,17 -9,47 -23,3 -41,67 -65,63 -15,29 -55,49 -3,6 -69,17 -22,17 -48,51 -33,64 -51,65 -9,27 -58,55 -25,21 -69,24 -9,22 -64,63 -19,1 -9,36 -17,27 -54,49 -38,69 -8,5 -46,67 -60,57 -68,11 -0,7 -19,17 -39,65 -27,3 -9,40 -64,57 -17,25 -3,25 -19,9 -47,8 -58,61 -23,22 -21,11 -41,7 -18,9 -11,45 -51,67 -52,3 -8,43 -9,25 -69,8 -67,11 -2,27 -63,51 -65,61 -53,5 -7,19 -18,3 -67,18 -45,9 -55,63 -15,15 -47,64 -54,3 -13,31 -19,5 -41,64 -15,16 -37,67 -53,52 -12,9 -15,4 -25,34 -43,59 -2,17 -23,33 -57,8 -16,15 -57,67 -29,0 -66,69 -19,7 -42,61 -66,15 -67,61 -51,63 -36,7 -1,16 -2,23 -66,59 -67,2 -61,64 -56,65 -56,5 -15,2 -19,33 -15,28 -49,53 -5,35 -12,3 -65,18 -69,53 -11,33 -37,2 -47,69 -57,69 -11,5 -34,7 -3,45 -63,5 -15,33 -35,1 -17,20 -23,11 -6,31 -17,35 -50,61 -51,4 -64,3 -62,55 -3,9 -49,60 -13,35 -68,69 -21,37 -44,63 -2,9 -15,7 -49,5 -67,13 -9,39 -9,33 -9,24 -2,11 -5,23 -46,55 -17,22 -9,23 -48,3 -45,13 -47,58 -60,59 -5,18 -14,3 -24,11 -56,69 -43,55 -57,63 -55,10 -17,33 -53,47 -36,3 -13,16 -5,32 -64,7 -32,3 -51,51 -10,17 -13,37 -40,59 -11,31 -13,19 -19,10 -49,1 -34,1 -10,27 -42,9 -61,2 -58,57 -13,33 -25,3 -43,2 -23,31 -24,37 -59,66 -12,29 -7,10 -31,65 -19,23 -39,64 -22,39 -18,5 -55,62 -23,18 -39,62 -53,50 -21,31 -40,55 -58,5 -23,40 -67,66 -69,59 -23,25 -39,61 -1,7 -21,1 -21,5 -57,61 -51,53 -53,51 -5,29 -69,47 -30,27 -5,14 -10,45 -18,23 -7,29 -55,60 -40,7 -49,7 -14,31 -15,25 -68,19 -57,49 -12,23 -7,30 -60,49 -50,9 -16,1 -22,9 -57,55 -15,24 -65,49 -69,25 -59,69 -28,69 -4,21 -23,36 -58,69 -69,61 -23,8 -5,8 -43,1 -9,37 -55,69 -3,11 -66,53 -70,59 -14,19 -15,17 -9,13 -59,55 -36,65 -69,67 -8,23 -23,32 -3,8 -65,3 -69,65 -29,5 -9,15 -61,61 -13,34 -1,1 -3,4 -68,45 -45,56 -33,69 -67,48 -38,65 -6,21 -0,3 -63,68 -50,67 -15,13 -63,58 -9,34 -67,1 -48,63 -60,69 -69,51 -57,47 -70,67 -51,47 -59,54 -57,7 -43,67 -4,45 -59,67 -45,2 -67,57 -62,1 -69,52 -31,63 -69,21 -31,15 -27,9 -3,37 -19,25 -63,55 -6,3 -53,3 -20,21 -13,17 -23,30 -6,23 -43,7 -17,29 -57,2 -21,32 -51,69 -7,1 -44,5 -57,1 -33,66 -45,69 -59,8 -9,3 -13,23 -11,22 -65,5 -1,9 -24,17 -61,3 -49,57 -12,19 -13,28 -69,12 -10,51 -53,53 -13,47 -31,69 -24,43 -69,63 -20,17 -67,21 -44,55 -33,68 -7,15 -45,1 -39,55 -39,4 -69,60 -23,27 -45,61 -51,61 -25,1 -63,3 -37,69 -33,5 -17,15 -9,32 -7,39 -63,54 -65,47 -29,19 -53,43 -60,33 -57,45 -5,6 -47,27 -39,25 -48,47 -53,36 -43,18 -49,21 -41,21 -23,19 -52,35 -39,45 -55,17 -29,39 -57,51 -55,45 -54,27 -33,26 -40,19 -44,17 -57,20 -37,45 -27,64 -31,13 -41,13 -5,7 -9,57 -10,69 -23,47 -1,51 -0,69 -49,12 -3,58 -15,9 -21,53 -53,27 -45,11 -63,42 -27,56 -6,11 -27,12 -27,31 -23,41 -35,41 -15,61 -61,27 -21,43 -41,43 -17,56 -11,66 -41,28 -51,37 -41,27 -38,59 -39,47 -59,41 -11,41 -26,59 -59,16 -29,35 -1,45 -33,41 -55,29 -65,39 -47,50 -28,5 -39,43 -35,21 -54,25 -43,16 -51,43 -31,17 -23,53 -37,21 -43,22 -22,55 -57,17 -15,49 -36,57 -11,48 -56,27 -36,39 -53,35 -8,51 -29,46 -61,29 -67,37 -31,35 -42,47 -63,41 -37,18 -43,36 -52,21 -63,9 -57,48 -29,36 -39,27 -35,59 -55,41 -25,53 -45,47 -19,66 -29,44 -61,5 -49,23 -14,59 -27,59 -19,58 -16,13 -44,51 -29,24 -13,7 -26,19 -37,20 -41,40 -28,27 -65,38 -41,47 -47,19 -49,49 -46,39 -38,55 -13,65 -53,44 -31,49 -36,5 -68,5 -42,45 -3,5 -4,63 -59,23 -23,56 -15,59 -37,52 -67,35 -11,11 -1,63 -11,25 -19,47 -31,33 -61,36 -27,46 -35,44 -46,21 -9,56 -5,59 -27,41 -35,37 -28,13 -39,20 -61,23 -36,15 -35,9 -7,8 -52,15 -14,39 -51,21 -65,25 -35,12 -58,15 -66,35 -23,7 -35,62 -63,25 -68,1 -23,64 -68,33 -65,28 -44,29 -19,67 -29,43 -47,51 -25,67 -2,45 -55,21 -37,43 -32,21 -58,51 -69,33 -13,29 -41,11 -47,23 -65,35 -23,45 -31,64 -41,50 -1,65 -25,39 -42,39 -44,47 -67,39 -32,35 -43,38 -51,29 -9,6 -41,24 -3,67 -57,31 -41,44 -53,19 -19,41 -14,61 -15,41 -46,49 -39,35 -62,51 -51,23 -32,9 -23,60 -1,47 -49,27 -57,36 -19,52 -43,49 -49,35 -21,50 -49,39 -53,38 -51,19 -21,57 -43,45 -33,38 -45,41 -1,56 -39,22 -21,63 -48,49 -47,30 -37,39 -4,61 -34,13 -26,51 -47,39 -19,45 -31,59 -3,52 -17,54 -69,45 -15,35 -49,11 -17,69 -55,13 -64,39 -57,33 -45,40 -28,21 -11,9 -64,29 -33,19 -21,60 -32,19 -47,25 -57,53 -31,4 -17,61 -69,5 -19,39 -46,15 -60,51 -9,50 -27,40 -63,29 -59,36 -11,55 -25,61 -30,55 -35,25 -27,69 -23,1 -9,65 -43,37 -27,42 -19,49 -56,45 -13,49 -35,7 -33,47 -43,11 -38,33 -35,49 -63,39 -41,20 -13,48 -1,60 -43,30 -7,45 -55,19 -65,19 -53,15 -33,53 -29,49 -51,45 -13,50 -34,23 -20,55 -10,11 -12,39 -17,53 -11,65 -27,37 -8,53 -65,24 -65,45 -61,45 -7,65 -59,37 -27,21 -39,39 -31,67 -45,23 -53,10 -59,22 -25,42 -1,57 -54,45 -13,10 -43,23 -37,51 -51,13 -40,35 -48,45 -36,27 -1,59 -39,51 -57,32 -31,5 -35,5 -8,69 -25,29 -39,9 -19,53 -29,40 -61,43 -7,62 -39,17 -3,54 -27,57 -67,43 -23,49 -53,17 -29,47 -25,41 -9,62 -61,35 -27,38 -23,9 -67,38 -41,49 -22,45 -43,15 -25,17 -13,69 -31,52 -29,68 -29,37 -30,37 -7,63 -37,27 -55,39 -65,13 -50,23 -59,11 -25,11 -25,65 -26,15 -55,37 -47,18 -20,69 -12,69 -8,47 -61,17 -53,12 -54,41 -9,69 -33,59 -57,37 -47,47 -61,39 -40,13 -69,3 -18,55 -22,47 -65,41 -31,45 -21,9 -38,27 -61,30 -61,55 -3,57 -51,11 -20,57 -41,51 -61,15 -40,37 -53,23 -49,38 -22,69 -1,61 -16,59 -20,65 -17,63 -51,17 -26,45 -24,31 -61,49 -38,41 -22,51 -29,16 -11,52 -34,35 -30,61 -37,33 -58,19 -9,29 -29,17 -61,9 -2,51 -7,59 -49,51 -35,55 -8,59 -29,41 -37,47 -23,67 -30,53 -15,69 -33,27 -49,31 -69,29 -59,43 -3,41 -43,10 -59,19 -35,27 -61,11 -27,25 -49,30 -28,57 -15,53 -39,29 -45,46 -16,41 -28,9 -27,61 -37,15 -29,18 -15,47 -17,57 -25,19 -37,25 -11,64 -45,12 -61,46 -14,67 -6,51 -19,65 -32,17 -21,65 -46,29 -51,28 -25,6 -19,51 -35,61 -47,41 -45,45 -39,49 -36,25 -19,59 -32,25 -25,47 -30,41 -62,19 -39,50 -41,41 -44,43 -53,37 -33,14 -40,51 -62,47 -19,48 -55,43 -63,13 -68,43 -65,29 -53,25 -23,59 -39,11 -54,17 -59,35 -63,53 -13,11 -35,58 -12,5 -63,21 -25,20 -45,37 -34,47 -24,55 -3,53 -11,67 -46,33 -25,31 -56,23 -36,43 -8,65 -61,19 -37,41 -41,31 -31,27 -37,23 -64,49 -6,67 -9,17 -11,40 -17,13 -26,11 -67,41 -23,57 -13,52 -50,17 -21,35 -33,51 -59,40 -27,5 -36,33 -3,62 -35,60 -58,43 -13,56 -24,67 -17,37 -29,53 -63,23 -20,51 -24,39 -13,12 -2,55 -62,41 -28,49 -39,44 -20,47 -52,27 -35,39 -59,25 -35,32 -49,29 -65,31 -35,52 -54,47 -29,51 -37,9 -13,13 -53,31 -45,39 -9,7 -39,13 -17,65 -37,31 -24,5 -30,5 -2,65 -28,7 -49,17 -55,55 -37,24 -13,5 -3,68 -49,13 -56,15 -21,49 -41,37 -43,26 -57,25 -3,47 -29,21 -47,43 -29,42 -55,11 -35,19 -6,55 -53,34 -23,17 -31,12 -4,69 -15,43 -66,33 -59,33 -13,57 -17,42 -10,67 -59,13 -50,37 -33,45 -35,40 -38,7 -21,41 -9,63 -53,1 -33,37 -13,66 -50,15 -1,55 -19,36 -18,47 -61,26 -49,25 -59,38 -5,43 -37,62 -11,61 -22,67 -61,18 -33,55 -18,61 -25,9 -62,49 -56,29 -65,44 -59,29 -33,39 -55,9 -49,37 -13,55 -35,22 -41,39 -48,19 -30,21 -13,9 -21,39 -37,61 -29,15 -27,52 -19,55 -47,35 -51,33 -8,55 -63,7 -35,46 -11,54 -29,69 -15,52 -31,46 -25,62 -63,43 -41,26 -61,41 -7,64 -43,35 -47,33 -40,33 -45,36 -57,41 -57,23 -57,27 -11,29 -5,69 -63,37 -7,25 -34,9 -57,24 -23,5 -59,18 -23,55 -48,41 -11,47 -16,57 -60,25 -60,23 -20,53 -66,47 -56,33 -30,11 -15,46 -26,33 -64,33 -51,10 -35,13 -5,55 -33,21 -10,55 -35,11 -9,53 -23,44 -63,11 -69,1 -21,45 -6,47 -42,17 -32,41 -17,49 -61,12 -35,45 -31,51 -55,20 -31,25 -7,51 -41,15 -45,31 -31,8 -29,13 -3,43 -27,70 -59,21 -43,41 -67,45 -59,46 -56,43 -5,66 -18,39 -39,10 -1,22 -68,25 -15,48 -68,41 -2,67 -37,46 -15,44 -25,69 -43,47 -61,28 -61,31 -43,20 -48,37 -19,44 -24,9 -27,16 -37,29 -51,40 -38,25 -62,31 -31,23 -47,21 -13,53 -12,61 -37,8 -5,47 -17,67 -49,44 -31,19 -25,57 -13,67 -3,65 -63,8 -3,69 -29,63 -11,63 -27,60 -31,37 -29,61 -25,27 -32,13 -1,53 -52,31 -57,35 -36,35 -67,32 -33,30 -4,57 -23,43 -39,31 -46,47 -5,61 -43,51 -51,9 -10,43 -5,63 -69,41 -7,60 -53,21 -45,35 -34,25 -37,35 -33,40 -64,9 -37,7 -9,49 -13,59 -70,43 -11,46 -43,34 -36,49 -29,9 -46,13 -31,38 -41,23 -65,33 -47,28 -54,37 -23,58 -33,33 -1,43 -7,67 -6,43 -63,33 -27,17 -49,41 -15,40 -43,21 -50,1 -61,21 -5,5 -51,48 -37,10 -44,49 -1,64 -55,31 -13,54 -47,31 -31,57 -45,49 -57,50 -52,25 -48,33 -61,13 -27,29 -31,28 -19,69 -23,15 -45,20 -65,42 -24,63 -55,47 -61,20 -40,29 -45,55 -11,59 -48,35 -25,5 -33,29 -15,10 -59,44 -41,29 -24,23 -43,27 -69,31 -37,38 -45,15 -51,15 -65,11 -5,46 -41,33 -62,37 -62,35 -53,20 -59,31 -9,67 -31,44 -46,37 -22,59 -27,19 -41,16 -25,4 -11,8 -31,9 -16,7 -28,61 -49,45 -45,21 -57,15 -50,25 -30,7 -14,69 -43,14 -33,49 -42,33 -67,36 -21,62 -51,38 -37,49 -62,9 -58,13 -35,43 -1,49 -57,46 -25,43 -5,67 -31,53 -59,9 -8,67 -13,63 -43,32 -33,42 -30,49 -0,63 -1,50 -21,59 -19,63 -36,55 -23,37 -67,27 -10,61 -5,56 -31,31 -47,13 -20,45 -28,31 -1,67 -15,62 -34,19 -55,40 -62,23 -2,47 -67,31 -39,5 -7,57 -15,70 -33,57 -28,53 -55,27 -7,5 -66,25 -47,22 -11,51 -23,51 -53,28 -61,33 -23,69 -65,37 -11,53 -31,3 -64,45 -7,69 -13,42 -31,34 -4,65 -68,21 -55,15 -41,55 -15,56 -39,33 -45,34 -25,15 -19,61 -21,67 -37,48 -24,53 -7,49 -37,30 -43,31 -5,15 -37,36 -31,41 -27,65 -25,13 -0,53 -37,57 -45,43 -15,65 -25,45 -33,48 -15,42 -15,38 -45,51 -3,55 -29,7 -39,23 -13,39 -20,63 -31,56 -45,27 -64,31 -27,39 -33,16 -25,14 -61,25 -21,55 -55,23 -43,39 -18,65 -15,67 -43,9 -30,59 -26,29 -41,17 -60,15 -25,23 -57,9 -24,15 -10,57 -17,59 -65,27 -52,45 -58,29 -70,31 -15,39 -55,35 -43,33 -17,55 -29,45 -55,14 -9,59 -53,16 -31,43 -15,5 -17,43 -62,43 -17,47 -59,28 -10,29 -67,29 -61,37 -69,36 -22,53 -43,43 -29,57 -48,15 -29,67 -61,47 -33,35 -51,31 -35,23 -27,13 -34,55 -27,18 -25,49 -25,63 -34,37 -39,38 -60,39 -55,25 -31,32 -53,39 -37,17 -39,21 -33,50 -68,27 -50,47 -26,53 -56,41 -15,51 -51,42 -11,43 -21,47 -35,33 -50,41 -31,11 -45,32 -31,29 -33,28 -15,57 -69,28 -23,63 -35,47 -55,22 -29,27 -29,59 -62,15 -27,67 -13,43 -53,24 -6,5 -29,50 -44,41 -10,63 -36,37 -1,58 -59,27 -39,37 -26,23 -25,33 -39,16 -15,50 -60,21 -3,63 -45,19 -46,41 -42,11 -5,57 -5,45 -4,53 -42,49 -49,33 -10,59 -21,69 -3,61 -30,19 -28,33 -21,42 -30,23 -69,37 -16,37 -33,17 -65,23 -38,53 -54,13 -43,19 -16,9 -34,61 -70,3 -38,49 -39,7 -37,42 -31,47 -15,54 -70,41 -50,21 -15,55 -61,44 -47,29 -54,9 -13,24 -18,69 -25,55 -45,10 -17,51 -52,13 -3,59 -27,53 -22,43 -45,25 -5,53 -39,19 -32,7 -13,51 -33,11 -13,61 -33,15 -59,39 -54,31 -63,31 -30,33 -50,35 -28,29 -22,65 -14,7 -13,64 -13,41 -35,30 -37,14 -27,63 -21,51 -23,23 -57,26 -66,29 -29,48 -35,50 -27,49 -51,35 -13,45 -69,35 -27,44 -13,27 -20,61 -37,19 -2,61 -33,9 -53,32 -61,53 -65,43 -44,13 -51,39 -35,17 -24,47 -27,55 -56,53 -31,36 -50,45 -51,30 -17,68 -29,33 -59,48 -47,45 -34,53 -41,19 -42,29 -45,44 -7,43 -63,45 -34,17 -51,25 -3,51 -37,12 -29,31 -3,42 -63,61 -66,13 -7,48 -27,43 -61,32 -59,49 -15,63 -3,15 -40,47 -35,31 -29,55 -26,57 -1,69 -65,10 -5,11 -24,21 -57,21 -41,25 -38,15 -37,5 -51,27 -41,30 -11,57 -63,26 -67,25 -29,23 -39,18 -17,39 -52,41 -57,39 -51,41 -25,50 -21,61 -35,15 -9,51 -69,30 -56,39 -49,20 -61,51 -27,23 -25,51 -49,16 -67,19 -63,35 -17,41 -56,17 -65,46 -63,40 -6,53 -37,28 -7,47 -32,53 -47,37 -59,45 -70,21 -49,32 -25,7 -26,67 -25,60 -65,26 -59,17 -9,55 -6,45 -11,21 -18,13 -25,68 -39,40 -11,50 -67,46 -45,33 -37,54 -7,58 -35,29 -55,33 -29,14 -23,61 -21,38 -57,11 -15,66 -38,45 -25,59 -40,43 -37,37 -51,18 -67,47 -18,51 -56,35 -49,43 -7,27 -13,44 -46,17 -31,39 -27,33 -5,51 -13,46 -68,39 -61,7 -39,26 -45,53 -43,29 -34,33 -39,15 -7,53 -33,44 -69,39 -62,11 -23,65 -59,15 -41,42 -55,59 -27,7 -50,33 -69,43 -32,59 -58,23 -29,58 -41,36 -49,24 -45,17 -55,34 -33,31 -16,61 -7,55 -31,21 -23,48 -46,45 -6,63 -41,14 -4,59 -35,57 -59,47 -49,28 -57,38 -63,27 -41,22 -13,21 -5,50 -47,26 -57,43 -53,22 -36,17 -57,13 -9,61 -66,39 -55,30 -16,67 -46,25 -13,25 -43,17 -9,11 -53,33 -35,20 -37,55 -58,33 -10,9 -44,23 -45,29 -33,10 -37,11 -63,67 -1,41 -64,35 -33,23 -19,43 -53,29 -47,17 -31,55 -13,58 -33,13 -59,42 -6,69 -43,25 -11,69 -47,15 -41,9 -25,64 -27,47 -47,42 -17,64 -47,53 -17,9 -20,67 -18,59 -13,26 -53,41 -29,26 -59,30 -33,56 -44,27 -26,47 -27,66 -3,21 -49,26 -29,66 -12,59 -41,35 -25,48 -33,32 -27,35 -39,57 -15,64 -37,22 -39,6 -5,65 -11,49 -65,9 -29,25 -49,15 -9,9 -66,41 -55,18 -41,52 -38,31 -59,52 -69,34 -27,51 -27,45 -59,10 -3,49 -29,22 -7,61 -35,35 -32,49 -67,33 -63,48 -20,41 -19,40 -1,21 -1,44 -57,29 -64,13 -49,14 -17,44 -40,9 -19,57 -69,27 -67,23 -63,49 -62,25 -47,24 -17,50 -35,51 -50,11 -32,47 -33,43 -49,19 -39,41 -67,30 -61,34 -43,60 -12,46 -70,22 -38,20 -14,44 -41,38 -22,52 -12,67 -2,7 -58,46 -34,30 -34,70 -6,46 -20,68 -7,24 -9,18 -33,20 -60,42 -67,24 -37,6 -0,61 -12,18 -20,10 -39,54 -69,0 -16,65 -40,63 -14,10 -34,21 -54,56 -16,21 -62,12 -23,24 -48,61 -70,29 -30,16 -0,66 -70,6 -6,52 -30,62 -35,14 -62,36 -48,58 -13,8 -28,60 -22,26 -66,17 -62,54 -40,53 -12,53 -23,54 -61,40 -43,66 -0,34 -15,68 -32,66 -22,10 -42,48 -28,6 -38,38 -55,28 -46,23 -16,68 -52,54 -5,52 -4,64 -57,42 -2,49 -38,12 -64,38 -28,52 -68,31 -68,52 -21,70 -16,16 -8,31 -9,66 -4,55 -11,68 -36,14 -42,16 -32,39 -54,64 -18,58 -52,46 -68,22 -7,0 -29,62 -0,44 -35,8 -18,67 -23,52 -58,42 -26,2 -32,57 -8,66 -30,20 -0,30 -12,6 -46,1 -49,2 -34,56 -16,52 -2,2 -48,24 -25,38 -41,34 -46,28 -32,26 -53,48 -34,69 -11,28 -3,64 -62,8 -12,48 -19,22 -4,11 -24,30 -22,31 -32,45 -19,68 -12,60 -7,32 -22,38 -25,58 -55,42 -47,70 -18,28 -66,62 -34,41 -44,57 -4,10 -53,64 -38,34 -12,22 -37,70 -0,42 -30,31 -35,54 -61,48 -58,34 -36,38 -66,43 -54,52 -39,66 -43,62 -60,52 -37,44 -42,22 -53,0 -70,25 -18,40 -69,20 -53,58 -21,18 -25,12 -0,67 -25,44 -22,14 -48,32 -48,38 -18,15 -52,30 -34,15 -52,43 -52,52 -46,63 -2,22 -10,21 -22,64 -37,58 -10,31 -21,64 -6,40 -0,58 -36,42 -24,2 -65,20 -0,1 -2,58 -21,26 -0,68 -62,26 -8,32 -38,17 -11,56 -19,18 -31,20 -43,70 -0,5 -3,10 -14,38 -14,37 -32,33 -18,44 -62,53 -6,29 -70,30 -42,21 -18,37 -23,38 -14,60 -46,59 -34,22 -10,48 -8,63 -68,20 -50,58 -44,32 -4,67 -40,14 -22,34 -6,25 -38,52 -38,48 -32,30 -38,54 -26,49 -5,30 -34,48 -45,28 -56,58 -17,60 -10,38 -44,70 -24,49 -7,12 -42,38 -38,13 -52,48 -40,2 -52,59 -20,52 -21,68 -44,44 -2,70 -10,6 -24,52 -40,48 -48,20 -70,20 -36,23 -36,58 -20,27 -58,4 -2,8 -26,38 -4,38 -36,60 -12,57 -34,49 -30,29 -48,50 -18,60 -22,21 -64,62 -31,50 -20,37 -20,33 -5,40 -34,46 -12,12 -17,32 -2,29 -44,28 -58,45 -32,63 -54,30 -12,42 -16,28 -8,16 -66,42 -12,49 -12,63 -26,68 -18,25 -44,21 -17,6 -34,34 -36,67 -2,13 -26,3 -70,0 -39,58 -17,14 -18,12 -43,50 -16,25 -2,34 -8,50 -62,6 -26,41 -50,40 -30,56 -18,49 -4,32 -16,60 -22,8 -15,6 -21,36 -4,58 -29,28 -47,40 -36,62 -34,14 -33,60 -8,44 -43,8 -60,55 -39,30 -24,24 -36,11 -47,48 -38,32 -22,58 -31,10 -38,60 -16,46 -10,5 -23,50 -0,14 -4,60 -10,64 -20,22 -66,37 -28,51 -27,26 -38,21 -30,43 -19,20 -0,28 -16,54 -40,46 -34,5 -56,42 -8,34 -41,68 -61,8 -50,63 -27,14 -36,8 -26,36 -30,70 -36,20 -70,33 -41,2 -70,19 -5,22 -38,10 -10,40 -28,42 -42,41 -46,42 -0,23 -70,46 -24,40 -16,39 -38,56 -26,50 -22,5 -40,56 -34,57 -52,64 -46,70 -8,26 -3,34 -32,52 -70,44 -12,24 -8,10 -28,50 -14,16 -20,56 -9,60 -8,20 -37,34 -49,22 -27,24 -17,10 -68,30 -22,62 -22,15 -58,35 -69,44 -14,20 -48,22 -48,25 -51,2 -26,21 -6,30 -12,26 -33,12 -5,60 -60,56 -0,70 -4,56 -56,50 -58,47 -46,0 -50,22 -52,68 -4,4 -32,36 -34,60 -30,17 -36,56 -62,42 -28,23 -3,50 -35,28 -39,34 -38,3 -30,12 -20,7 -18,57 -52,60 -6,50 -52,49 -4,13 -56,56 -8,70 -44,8 -70,1 -28,62 -42,42 -60,12 -50,28 -47,38 -60,43 -50,54 -51,50 -55,12 -31,18 -47,32 -18,16 -16,6 -62,32 -24,69 -2,54 -62,27 -40,32 -38,68 -8,36 -59,70 -52,16 -68,37 -24,18 -53,8 -14,70 -31,60 -32,4 -33,36 -64,14 -52,22 -31,22 -12,51 -16,38 -30,1 -48,40 -57,56 -69,40 -25,32 -50,60 -49,4 -30,64 -46,22 -28,48 -42,56 -2,43 -46,6 -6,41 -43,46 -20,59 -54,6 -58,64 -0,59 -41,10 -54,42 -62,63 -30,57 -4,17 -22,40 -60,44 -52,42 -28,30 -7,2 -0,15 -22,27 -70,38 -30,68 -5,64 -35,38 -0,20 -17,62 -55,70 -5,4 -56,60 -34,42 -60,61 -40,27 -38,44 -5,16 -14,51 -18,26 -46,46 -69,26 -48,14 -32,43 -10,28 -27,22 -54,20 -14,48 -67,26 -57,0 -4,70 -59,12 -51,6 -40,10 -59,20 -32,8 -34,2 -20,18 -62,44 -64,46 -20,58 -56,31 -54,69 -28,14 -0,17 -22,12 -52,0 -20,44 -34,8 -32,29 -65,30 -56,3 -26,52 -4,47 -22,1 -13,38 -62,65 -0,31 -44,42 -42,15 -42,10 -24,38 -10,62 -26,64 -48,64 -48,21 -43,56 -8,46 -4,7 -9,0 -30,14 -56,61 -68,34 -56,55 -13,40 -50,62 -8,2 -50,39 -18,68 -0,37 -4,5 -47,36 -14,24 -44,58 -56,25 -24,62 -6,13 -11,2 -20,5 -18,11 -51,16 -56,6 -53,70 -32,0 -34,51 -37,56 -18,41 -42,70 -24,20 -22,44 -28,46 -20,38 -36,34 -10,56 -43,44 -0,60 -1,70 -37,0 -58,12 -68,17 -66,14 -70,40 -61,58 -53,40 -60,19 -14,4 -3,20 -6,38 -53,18 -24,8 -14,43 -42,43 -50,4 -57,30 -7,50 -37,40 -64,65 -36,47 -66,34 -16,27 -70,34 -20,14 -60,27 -32,31 -66,48 -43,28 -64,28 -67,54 -13,70 -50,38 -42,58 -52,26 -24,29 -20,48 -17,30 -66,67 -68,64 -68,9 -14,68 -70,24 -38,5 -60,47 -11,60 -67,12 -0,43 -1,12 -56,16 -38,22 -24,68 -51,8 -38,63 -60,22 -36,54 -38,61 -66,45 -46,27 -48,8 -6,0 -27,30 -8,40 -32,60 -5,62 -62,67 -64,32 -52,37 -60,5 -70,64 -10,18 -63,52 -18,20 -34,39 -1,62 -51,34 -40,49 -28,38 -51,62 -8,54 -45,58 -5,10 -12,15 -68,8 -26,22 -35,34 -58,32 -32,34 -10,10 -6,7 -38,42 -62,57 -52,6 -40,22 -62,70 -58,6 -50,48 -41,46 -52,18 -60,2 -25,70 -5,0 -50,6 -39,2 -2,4 -62,45 -48,23 -57,34 -55,66 -18,14 -9,52 -24,22 -54,60 -49,52 -12,54 -54,14 -63,44 -56,64 -4,0 -20,50 -18,64 -1,18 -14,41 -16,35 -29,2 -66,52 -12,50 -42,68 -34,24 -56,57 -66,32 -57,60 -28,8 -22,66 -32,32 -52,58 -50,42 -4,36 -16,32 -65,58 -56,20 -42,0 -17,4 -34,68 -49,36 -32,58 -68,50 -19,16 -6,70 -40,38 -60,37 -50,49 -34,40 -51,70 -1,38 -13,32 -53,66 -6,32 -65,32 -32,22 -14,55 -38,30 -44,26 -66,8 -50,30 -48,31 -5,36 -52,19 -29,30 -24,50 -55,36 -46,69 -64,18 -44,0 -27,10 -68,32 -60,13 -12,17 -10,34 -18,18 -70,52 -10,8 -12,38 -16,70 -8,9 -58,65 -64,21 -70,4 -5,48 -22,49 -36,2 -18,30 -41,6 -10,44 -48,48 -60,14 -23,42 -46,36 -18,56 -40,18 -36,40 -24,59 -64,64 -40,11 -59,50 -14,57 -25,46 -65,0 -32,16 -24,4 -40,34 -50,36 -38,50 -20,30 -66,38 -14,40 -70,62 -6,58 -12,28 -62,60 -68,28 -36,29 -58,37 -45,68 -22,22 -40,65 -49,64 -24,65 -40,8 -0,12 -40,64 -70,66 -23,62 -66,49 -28,32 -47,44 -10,12 -29,8 -26,18 -28,16 -49,50 -7,6 -30,54 -52,10 -32,10 -1,0 -40,28 -7,52 -18,54 -5,42 -58,10 -54,40 -41,4 -10,22 -24,56 -44,36 -39,14 -12,2 -65,48 -20,16 -10,4 -56,66 -40,68 -16,19 -45,42 -20,43 -50,18 -40,15 -0,6 -18,62 -14,2 -51,44 -35,48 -54,68 -7,4 -30,25 -27,36 -48,9 -42,46 -57,54 -68,55 -34,59 -58,16 -70,65 -70,14 -24,12 -46,12 -30,39 -55,2 -38,8 -62,22 -3,70 -60,40 -7,44 -9,44 -16,58 -64,2 -22,46 -40,45 -23,0 -62,30 -46,18 -23,6 -27,48 -31,66 -66,30 -52,9 -29,20 -36,21 -69,10 -24,41 -8,38 -44,34 -37,66 -68,4 -34,28 -21,44 -28,70 -42,30 -35,42 -46,16 -6,8 -36,48 -8,61 -14,26 -62,0 -28,45 -46,7 -7,68 -32,40 -61,24 -32,1 -40,12 -58,2 -62,58 -0,2 -42,60 -13,68 -48,59 -6,18 -36,28 -61,0 -63,28 -58,8 -44,33 -59,6 -64,6 -12,62 -30,32 -39,56 -70,32 -67,44 -56,11 -38,6 -2,36 -60,50 -55,26 -58,66 -55,8 -48,17 -56,2 -64,0 -60,41 -64,24 -42,52 -30,13 -16,20 -30,44 -1,26 -47,34 -24,54 -56,8 -16,0 -2,32 -62,38 -70,56 -18,50 -9,28 -63,38 -30,18 -10,70 -44,25 -57,40 -28,26 -54,0 -36,12 -32,24 -44,62 -52,23 -19,54 -45,30 -51,68 -8,8 -48,62 -40,60 -48,6 -48,69 -22,36 -61,10 -62,28 -51,66 -14,18 -53,56 -29,52 -63,4 -46,50 -26,69 -52,56 -21,54 \ No newline at end of file diff --git a/2024/go/day19/day19.go b/2024/go/day19/day19.go deleted file mode 100644 index e4e19bd..0000000 --- a/2024/go/day19/day19.go +++ /dev/null @@ -1,87 +0,0 @@ -package day19 - -import ( - "sort" - "strings" -) - -func Part1(input string) int { - in := strings.Split(input, "\n\n") - towels := strings.Split(in[0], ", ") - patterns := strings.Split(in[1], "\n") - // fmt.Println(towels, patterns) - count := 0 - not_possibles := make(map[string]bool) - for _, pattern := range patterns { - if isPossible(towels, pattern, not_possibles) { - // fmt.Println(count, pattern) - count++ - } - } - return count -} - -func Part2(input string) int { - in := strings.Split(input, "\n\n") - towels := strings.Split(in[0], ", ") - sort.Strings(towels) - patterns := strings.Split(in[1], "\n") - // fmt.Println(towels, patterns) - count := 0 - memo := make(map[string]int) - for _, pattern := range patterns { - count += countPossible(sortStringsByPrefix(towels), pattern, memo) - } - return count -} - -func isPossible(towels []string, pattern string, not_possibles map[string]bool) bool { - if pattern == "" { - return true - } - if not_possibles[pattern] { - return false - } - for _, towel := range towels { - if strings.HasPrefix(pattern, towel) { - if isPossible(towels, pattern[len(towel):], not_possibles) { - return true - } - } - } - not_possibles[pattern] = true - return false -} - -func countPossible(towels map[byte][]string, pattern string, memo map[string]int) int { - if pattern == "" { - return 1 - } - - //If memo has key - if val, ok := memo[pattern]; ok { - return val - } - - count := 0 - for _, towel := range towels[pattern[0]] { - if strings.HasPrefix(pattern, towel) { - count += countPossible(towels, pattern[len(towel):], memo) - } - } - - memo[pattern] = count - - return count -} - -func sortStringsByPrefix(slice []string) map[byte][]string { - result := make(map[byte][]string) - for _, str := range slice { - result[str[0]] = append(result[str[0]], str) - } - for _, t := range result { - sort.Strings(t) - } - return result -} diff --git a/2024/go/day19/day19_test.go b/2024/go/day19/day19_test.go deleted file mode 100644 index fa99ba2..0000000 --- a/2024/go/day19/day19_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package day19 - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestPart1(t *testing.T) { - r := Part1(`r, wr, b, g, bwu, rb, gb, br - -brwrr -bggr -gbbr -rrbgbr -ubwu -bwurrg -brgr -bbrgwb`) - require.Equal(t, 6, r) -} - -func TestPart2(t *testing.T) { - r := Part2(`r, wr, b, g, bwu, rb, gb, br - -brwrr -bggr -gbbr -rrbgbr -ubwu -bwurrg -brgr -bbrgwb`) - require.Equal(t, 16, r) -} - -func TestPart2Long(t *testing.T) { - r := Part2(`rrgwru, gwubwg, wgbbw, bwb, ugrgw, uwgguuw, wuggb, bgwb, ubrr, grruuub, rwbwgbub, wwwggg, uuw, gubuu, urwb, bubg, bubb, rruruuu, ubgr, uw, urugg, wubuu, brwb, buw, bgug, wgbwwrb, rwrgrr, gwgr, rrwrg, wwbwgbw, gguu, rgg, bwg, ruurrwg, wbu, ggg, wrw, brbw, wbb, rrbgg, gbb, gwwrubwu, rwgu, grgwwu, wguu, rwg, wbwug, rbur, gwg, wbrugu, wbwwgu, wbbuw, rwrg, rgru, rgb, bwwrg, bwur, rrubwu, gwb, ugwur, wbguwb, rbu, ubrwgw, ruwbr, wbbu, rrbwbg, rgub, rwgb, urwg, bbw, bugg, rugwg, rwbrwww, wuru, guu, brwbg, ug, ruuwruw, bguww, wwrgrurg, rrbgr, uubwurb, brrrwgg, bur, urg, rbg, wruw, gr, ugb, wwrbgrg, wbuuw, bbugu, uug, rrbb, rrbw, bgr, wwwru, rgu, urr, rg, wbgbru, brrgu, gubu, rurgr, wwbrgg, ruurwgwg, rbb, rbrugwb, gwwrbg, bwuuwrg, wu, b, bgwrb, uwggr, rgbb, rww, wgwb, gwgwr, uwbb, uww, gu, ubwuu, wbwwwug, rurwru, rr, rrg, uggr, bgwu, wbgbu, urggw, br, gubgugr, wgrb, bbgrrbu, brbg, wrg, bgrb, rwbwwur, uwr, bubu, grwb, ubb, wr, bbbgwr, bug, uwgwuwu, grb, bgw, uuu, ugr, wgbbgu, gbg, bgwub, urbgrw, rbruwg, gb, bbwgwur, uwbgwrr, ggrb, wbrrwrbu, gbbugrb, ub, rwb, gwr, ruwu, gurgu, rru, uuwwgwuw, bw, ruwbbb, rbgrgu, wuwu, grrugr, wgr, rbbr, rugr, rrrrbww, bwrr, wrbbr, uuwgr, gug, wwb, rgur, brbrr, gguw, grwubrg, rrrr, uwb, wuwwrrwg, gwbggr, rwrub, wuur, gub, rbgb, urrbubrr, uwubu, brbb, bwbr, bww, ruuubwu, ugbbbr, bub, rrug, wub, gruu, uu, bbu, gbbr, urrg, buwu, grw, grbbbu, bgb, ugubg, uwww, urw, wwubruww, buurb, www, bguurr, wwgu, wgb, ruwub, wggggbg, urrb, gbwuw, ubrrg, wrr, gbubgg, gw, wuw, wuug, wwrb, wgg, rgugrru, rgwrbr, guurrg, bgu, rurgb, gwggb, bwgbbw, ggwb, ubwgw, bbg, rbr, wgru, urwr, brr, rgbr, rgr, wwg, guwuru, uuggg, rrw, buu, urb, guwg, ugwwbuwb, rubb, brbuww, rwugru, ubu, wwub, bgwgb, wrug, rug, w, brgg, wwugwruw, ggrwb, bbwuwuu, uub, rrr, ggbrr, wbur, wurbru, wgu, brb, urbbb, gburbww, wbrgruru, rbugr, gubw, wgwgg, rwr, ugw, gggg, gwrwrg, rrub, gbwgg, grg, uwuur, gbwbbb, guw, gbwbb, uwu, ruw, bwr, rwgub, rbw, ggbwr, u, gwu, rrurrb, gwgg, uugwrbr, brw, ugburg, rwu, wwu, wbr, ruwgr, gbwbur, rwgr, rwbww, rbgr, rgbub, rbbuw, ruu, bwgw, bbwg, ubr, gurr, wwr, wwwguu, gbw, ggw, gru, wug, rubwrbrr, wbrrrr, uru, wbgw, wgur, uurgg, bbb, rbwgwbur, wwbwur, bbgubw, gww, brg, ugu, rgrgw, wwrrgugu, rrrwuww, uwwrb, wrb, rrgg, wubgrrb, bwwgrbww, gbr, gwrwu, brgwwbu, urrwub, rbru, bwrgrr, brwuwrb, guuur, wb, bbrb, brww, wuwrww, bu, rgw, rwbwug, bbug, urrgr, bg, bgg, wbgwbgru, wbrru, uwbbr, wbg, gwwur, gur, ubwb, gubbb, bb, wrugr, grur, rb, uwubrg, bwgrw, gbug, g, wuwubgw, ubw, urgu, rrrg, uwg, bbww, uwgrug, ww, ggu, gwbuwu, rgggwgr, wugw, gbrrg, ugg, bwu, ubuur, uurrw, uwwug, bgww, ubg, rw, gwgbwrg, wuu, rbgbg, buwbur, rub, ugbwwrgu, gbww, wbw, gurbwu, bruw, rggrbrgw, wguwu, ubwbwr, ru, uwur, ggb, uurwg, wguubgr, wru, rbrbr, rbwr, wwwrbb, urww, rur, bru, bbbwrw, uwrwrr, ruww, ububbgr, rrb, bggrwg, bbr, wrwrb, bwgwrbg, grbuwg, gg, ubuurwg, uur, guguwb, rugurgbw, bbuwbb - -wrbwgruugbbgwwurggwrgrrrurbgwbgggwbbgwgbrwggwur`) - require.Equal(t, 16, r) -} diff --git a/2024/go/day19/input.txt b/2024/go/day19/input.txt deleted file mode 100644 index f06b5fa..0000000 --- a/2024/go/day19/input.txt +++ /dev/null @@ -1,402 +0,0 @@ -rrgwru, gwubwg, wgbbw, bwb, ugrgw, uwgguuw, wuggb, bgwb, ubrr, grruuub, rwbwgbub, wwwggg, uuw, gubuu, urwb, bubg, bubb, rruruuu, ubgr, uw, urugg, wubuu, brwb, buw, bgug, wgbwwrb, rwrgrr, gwgr, rrwrg, wwbwgbw, gguu, rgg, bwg, ruurrwg, wbu, ggg, wrw, brbw, wbb, rrbgg, gbb, gwwrubwu, rwgu, grgwwu, wguu, rwg, wbwug, rbur, gwg, wbrugu, wbwwgu, wbbuw, rwrg, rgru, rgb, bwwrg, bwur, rrubwu, gwb, ugwur, wbguwb, rbu, ubrwgw, ruwbr, wbbu, rrbwbg, rgub, rwgb, urwg, bbw, bugg, rugwg, rwbrwww, wuru, guu, brwbg, ug, ruuwruw, bguww, wwrgrurg, rrbgr, uubwurb, brrrwgg, bur, urg, rbg, wruw, gr, ugb, wwrbgrg, wbuuw, bbugu, uug, rrbb, rrbw, bgr, wwwru, rgu, urr, rg, wbgbru, brrgu, gubu, rurgr, wwbrgg, ruurwgwg, rbb, rbrugwb, gwwrbg, bwuuwrg, wu, b, bgwrb, uwggr, rgbb, rww, wgwb, gwgwr, uwbb, uww, gu, ubwuu, wbwwwug, rurwru, rr, rrg, uggr, bgwu, wbgbu, urggw, br, gubgugr, wgrb, bbgrrbu, brbg, wrg, bgrb, rwbwwur, uwr, bubu, grwb, ubb, wr, bbbgwr, bug, uwgwuwu, grb, bgw, uuu, ugr, wgbbgu, gbg, bgwub, urbgrw, rbruwg, gb, bbwgwur, uwbgwrr, ggrb, wbrrwrbu, gbbugrb, ub, rwb, gwr, ruwu, gurgu, rru, uuwwgwuw, bw, ruwbbb, rbgrgu, wuwu, grrugr, wgr, rbbr, rugr, rrrrbww, bwrr, wrbbr, uuwgr, gug, wwb, rgur, brbrr, gguw, grwubrg, rrrr, uwb, wuwwrrwg, gwbggr, rwrub, wuur, gub, rbgb, urrbubrr, uwubu, brbb, bwbr, bww, ruuubwu, ugbbbr, bub, rrug, wub, gruu, uu, bbu, gbbr, urrg, buwu, grw, grbbbu, bgb, ugubg, uwww, urw, wwubruww, buurb, www, bguurr, wwgu, wgb, ruwub, wggggbg, urrb, gbwuw, ubrrg, wrr, gbubgg, gw, wuw, wuug, wwrb, wgg, rgugrru, rgwrbr, guurrg, bgu, rurgb, gwggb, bwgbbw, ggwb, ubwgw, bbg, rbr, wgru, urwr, brr, rgbr, rgr, wwg, guwuru, uuggg, rrw, buu, urb, guwg, ugwwbuwb, rubb, brbuww, rwugru, ubu, wwub, bgwgb, wrug, rug, w, brgg, wwugwruw, ggrwb, bbwuwuu, uub, rrr, ggbrr, wbur, wurbru, wgu, brb, urbbb, gburbww, wbrgruru, rbugr, gubw, wgwgg, rwr, ugw, gggg, gwrwrg, rrub, gbwgg, grg, uwuur, gbwbbb, guw, gbwbb, uwu, ruw, bwr, rwgub, rbw, ggbwr, u, gwu, rrurrb, gwgg, uugwrbr, brw, ugburg, rwu, wwu, wbr, ruwgr, gbwbur, rwgr, rwbww, rbgr, rgbub, rbbuw, ruu, bwgw, bbwg, ubr, gurr, wwr, wwwguu, gbw, ggw, gru, wug, rubwrbrr, wbrrrr, uru, wbgw, wgur, uurgg, bbb, rbwgwbur, wwbwur, bbgubw, gww, brg, ugu, rgrgw, wwrrgugu, rrrwuww, uwwrb, wrb, rrgg, wubgrrb, bwwgrbww, gbr, gwrwu, brgwwbu, urrwub, rbru, bwrgrr, brwuwrb, guuur, wb, bbrb, brww, wuwrww, bu, rgw, rwbwug, bbug, urrgr, bg, bgg, wbgwbgru, wbrru, uwbbr, wbg, gwwur, gur, ubwb, gubbb, bb, wrugr, grur, rb, uwubrg, bwgrw, gbug, g, wuwubgw, ubw, urgu, rrrg, uwg, bbww, uwgrug, ww, ggu, gwbuwu, rgggwgr, wugw, gbrrg, ugg, bwu, ubuur, uurrw, uwwug, bgww, ubg, rw, gwgbwrg, wuu, rbgbg, buwbur, rub, ugbwwrgu, gbww, wbw, gurbwu, bruw, rggrbrgw, wguwu, ubwbwr, ru, uwur, ggb, uurwg, wguubgr, wru, rbrbr, rbwr, wwwrbb, urww, rur, bru, bbbwrw, uwrwrr, ruww, ububbgr, rrb, bggrwg, bbr, wrwrb, bwgwrbg, grbuwg, gg, ubuurwg, uur, guguwb, rugurgbw, bbuwbb - -wrbwgruugbbgwwurggwrgrrrurbgwbgggwbbgwgbrwggwur -bururbrguwurbguwrubbbbbuburuuuwbgbgrwggbugrwrwurwwbrb -wgwgwbwuggbbwbrbgrwwgwbrbwbrbggrrgburbubwwur -wguwuugubwggburwwbbbbwrgwbrwuubgbbrugrbrrbrrugwuwguwrwwwur -rubwururuggurrgbgrburbrgbuuuuurwgubbbrbuwwbgbwgwrb -rwrwguwuwgbruwurgbwbgrugwgrggwwrrgrbwrurrrrgbrgbbgwggwb -buggrbwwurwuwbwrrwgubuwgburrrwbwubugugwurrbwgwburwubuurwbb -ggwgwrrwbrbgggbubwgwgguurbwwwggbuwbrubuubrrwur -uugugbrwbbwuugwwuwugurbuugbrugrrgbwgugggrgggrgrur -bwrubgugbuugbwrwbbubbgbugbbgruubwrwgubwguubbbugu -wrgrwwgbgubrrwbbgbwuurgbbwrrgwrrwuugrgubwrgrwbwbbbwrgrbb -rwbwwwgrgbrbgwurwbwwrrguwbrbwgrubrubguwurg -rbggguwguwrbgbbruruwgguuwwwrwbugwbbbbrrwgwb -wburgubbbrbgugwurbgrrwgbbuggbrggbrbubrwbrrwur -wgwrwurgrbwgwwuwrgwwbubwbubwbubggwbwgbwwgr -bgbbbgwwgbggrububrubbwwwguruurbbwwububwugwwuburgwurgrwr -rugwgbugbwbbrbgbwrbgwgurbuuwbbwbwbwbguugruwbrrrugwwu -rwbgruguuurwbubwrbrbwwrwurguwuwbbgggrurbgbgbwwwggwu -ubwubgbbrgbbbbgwwurgbuwuubgurwrggrrrgrbbbgggbrbb -wuuruwbwubrwgwuurugbrbwgubruuwwurwgwrbrugwrrbuuuww -ugwgbwrggrwwuwbgwwrubwuubrbrbwgbbwgbubburuguwguww -grbguwwuwgrburgggguugubwwgwguuwbwuwuwgugwggggwurrubwgbbwrb -buwbuwubrrugrrurwrwwbbbrugurgwguwugwwbrurrwbrgrg -gwwgggurwbwggwwbwrrgwwgurubrubbrbuuruurwur -rruguggbrrgwgwgrwbwwwugrbrubgruugrgwgubrgwbubwbrw -grbbbwrrugwrwwurwguugugguwuwggruubrgubguuurubrgrrruwub -wwrwguwwurbwuwwrrwgwggbgwruugbbrgruubwrwur -bgbwwwbbubrugwgubbgbggburrwggbbggbrbgwrrrbrgurwur -gwbwurgrwwbrgrubwgruubbrugbruruwuwgrubugwg -uguugbrbuuugbwwrgubrwgwrgggwrrgbrrbwbuwwwwbgbuwurbrbr -ugbggbwuwrgwugurggrugbrgwbwwbgbrwugubgrwrbuuwgrurwgguugwwwur -uwrwuggbuwwbururwgbrggwgwubburwwggguwwrrggwu -grrwwwrugbwuubrggrwgrwuuuwgwrwrbugrrrwubgwggwbguurbw -rgbuuwbgwgwuwurrgwrgugruwgwbgggbuugugbbwwrwugwrurubwr -gwguwrwgbbruuwrbbubburwgrrrrrwburrwuwrwgwgwur -bgbbuuguggrgrwugruwrbuuuuurwgbwbbubwrrggwrbw -rwwurubruwuwbrbwugrwbgwwuwwuuwuwurwwgwbrwgubgrruuurugwgg -wbwguwbrruruuwubggrbggwggugurgwgbrbugbwwbrbwuguuugr -uguuwrrbrwugrwwbbuwwrgbrwgbwubbubgwwbuuwgrwuwggbwr -wguwwrbbggrugbwrugbububgurrubggbwwugubbubuuguggrwur -uuurbwwwguurrbrgrrrbwgbwuuuwurwbuwgurwguugwrwggb -urrgwwwbuuwrwugrurgwgggrgbwuugruruuwwubruwwbru -wugugbguguwugbwgrgbrugrwwgrbwrgwwubruwwrggggwur -brubbgbwubwugbrruwububuuwbbwbrugwrbbrrggrgwrugrrwbbrrub -gwwruubbrrbbrwuubrwrrgwuwrgbuuwgggbburgwurrwbuuuub -wbugwuwbbwwwggrwwbgwuggbwuuwwgwuwbrubwrgubwurwwrguur -urgrgwrurbwggguubwuuwrbbwrgggggugurgggbbwbbwgwuu -wwgubrruggbgrwbggwbrubwggbwuuuwbbrwgbgbbbrbwruwwwwurw -wuurrggguwwbgbgubugrbwgwgggrwbwgbubuwwbbrwbuurwgwguwgurwur -rgrggggggbwrrbgggguurbbbubugbururrgrrrbbgwugbwrbgubb -rbburbururrbrurrwgrwrruwubwbgrrurgrubuwwur -bgguburbbruwugrurubbubgbggwgbgrrgwgwbguguwgubrrgwrbrwur -rrrwrbgwwrubwuwurgrrwbruwuwbgwbuguurgbrbrgwur -rrgbbgrurgrgrbrwggbubbbubbwgbuuwwugbrwgwrgwbru -bwggrguguburbbrwurrbgrgbgwwrwrrrwuwgwgbggwrggubwbgubbwurbb -gbwuwwgggrgwbbrrbuuruwubwrubgubwwbgwbgrbgurbg -bbwgrbbgwurwbrgbggwbwgwurburbburgugurbbbwbbbggrbu -urwgrwgguuuwruuwrbuggggwurbrbgwrbwbggwur -wbgrurwuwgugbuwgrwrwbbgrbbburwggugugrrgbrbbwrbbrruuwgwur -ubbuggwrwrgggrugwuwwuwrgruwwbrwruuugwgrrurgurrrbbugbr -uuugrwugwuuwurgwbrgwgugrrwbrrwrbuururubguuwrbwugrbbrgwur -ubrwgrruuugwgbrgbgwgugrbwwurgbwrbgwuubbuwrbgwwwwur -gguubbgggggwwwwrrrbwwubggwuggubguuuubwwugrrrgguwrbwrwwrwur -bgwuuuggwgbbbgwugwuuuwububgurgbwbbwbuwrbuwgrgg -buwwrrurugrgbgbubuwbgwgurbrrguwuwwurwwgrurrwrbwggrrbrrgrg -urggwurbbubbrubrggwgbbwbuubgggbggrwbwrrwburubg -rbuurgbbrrgbuwwrwgurrbgbrurwgbbrrbgbwbgbbwwuwwb -ugbggurgguuurggguuubgurrgurbuwrrgbgwwgbwwbwwrgbggrwwrbrbrb -wbwbubbrwubwggwuugrgubbuguwgurruugrrbwbbuwbgb -ubuggruwrwgwbubuuuubuwwgwrbuurbuwgwgruwgrgrurwrrrwgwbuwg -bwuuwubuwrwbwbubwgbwwwbwubgugugrugwrrrwgwbgw -ruwurrbgbuwrwrbwrbguwbgrbrrubugbubbwugrrbgubggbrugw -wggrwwgwurbgggbgubgrwggwbwbrbggwwbrrurwbbguwurgb -bwbgbbuwwruggbgrrrbbwbgrbbuwuuuugbwgggwwwgbwbbbwubwu -wrrbgbbbguwgrwrrrgbbugrruuuwbgwgbgwurbbuwrugg -bggrbrgwgrurwgubgwwwwuwbbuururugwwrbrgrbubwwur -ubbwwrwrwurwgbwrwwggwgggburbgggbuwrwbbwrubrubgugbrwwuw -rbguwwbrgrrbbwuuwwgurbwbrwbbbuuubrwrggwwubbgrrwgrrwuwu -wurrurgbwbgbwbrrubbrggbwgbwrwbuubgrbuwuwrbgrgrbw -rrbgbrurwrwugbgwwrggbrgbwugurwrbwwrubugubwru -guwbrgbuuurrguurgugwgwwrwwbrgbgwwwgbbgguwwwur -gggbrwguwguwgwurrgurruuuubrruggwrgbubugurrbububgrw -ggrburwwubbwwrwgbgggurrbgggwgrrbrbbbbwugbwrbrwubur -bbbgrugwwgwggbruwrgwwbgrbbuubuguwbggwwugbuugwbwrubgguuwwg -guwgwbggruuwgrwgrbwgrrwurwgbgwwurgubrubgbuubrwwwuw -rguwrbbrbubuguurbgwburguwbwbwgwggbgwgwwuwubrwruu -uguggubuwrwrugrwwuuuguguwwrwrbgwbwbwwggurbbggbrbguwwgubwwur -bggwbuuwurgbwbrbwbbrrgwwgugrrugubbrbggbrrwug -bwrruwuguwwgbwwrrbbgrrrrrrgugbwwrrgbuuwuwrwr -bgwbugbuwwrwwrwburwwgbgbwubrbrwgbugrruuugbbbrgurbwub -ruguuwgbrrguuuwbbwwbgbgrbwgwgbwbwwrbruubrw -rguwwwggbrwbruuwwbubbbbgbbwgrwgwggggrggwbgg -ruwrugwwbuwbwwwbrwbggwburrwwururguruuguguwgrbu -bgugbrbgggbbwugwbwuurbubruwwbrbbbgrgwrgrgggrbwrg -wbrgrgbrwbwbrwuuwbrbbwrwrrwbgwggubrbrbwrrgrbuwwr -grwuwgugrwbgrgwwbwwbggwgrwrgubgrrruuburrurwwrwbrrggwgwwbgwur -ubwbwbrrbgrgwuuwgwubgggrgurwuwbrwggurrgrgurrwubrubbw -rbrgwuwggbbubruruuuubbggwrgurrwrwwuwrgguurr -urgurgubgrgubwgugwrbuugrwrgwbgwwwwubrwwbguggrrrrrb -grrurbuubrwguguurrbrguwrrggwwwgburgrrrwbgwwbbrwrwrwgwub -uruwwwbgbbbbggbbbbuwwgubburwwuugburguurwur -gwurgwwwrgrurgbbrrrwrbggbgrwgbrgugruruuwwgrgwwwwrwuwubugbu -rugguwwgwrruurwbgwuguuruuuwbgbgubbubrrrbgwbwwwwbbbb -wbbwgwrgbwwburuurgrugbwggrwbgrgubbrbwurggbggbwwwrgggbr -ugrrurbugbwwrguugwugggrrugwgururwbbubgbrwrwur -rugbrrbwbbrrwbrgwuwbgugggruuubburgbrbububrrbubwuurub -wgurrbuugubgwwbruubrrwbwwubbgrububguwgbrrwwuwuwuuw -ubrruwbuguurgbbrrrwuggbggwbrrgwgubgwbruugwuuurgubrbwugwwb -wuwrrbuwuwbburgwurwggwugggbgrwrwgburgurgbg -uwwburubuwrrubbuwgwbugwrwbgugwgbbggwbugbwuwwbruggwur -bgrubrbwruwuuuwwrgrwubrggbbgbuubbgugubrrburbgu -bgrgrgbugrurwburwbbrruwrwbburwbwbggguwburrrwuggurbbrbgrbu -bguwuggrguwbrgruuuguwwgrbgrwbuugwrbrbgburwbwwbwrb -wggbwwbwwwbbggggurbbwuubgrbrgbbrrwuuwburrugwwubgru -rbgburuuggwwwguwwrbrggbrwuwgbrgbrwwbgrugwuubguwbu -gbrbuububuububrbgrgwurbbwbuugwbrwrururgugwgbwwgggbbgbwurgwur -ruurwgwggwbbwrbgrrurguwgwwrurgrgggrgguubgguwuwrw -uwbubgwguuubbbgbrrgwwrbbrururwgurrgbbrbgubwwgbgwuguuwurub -wrwrugugguwbuwwwwgrwrbgrbwuwburbbwwgubugwuguwuwwur -urbrbwwuggwurgwbrrbgrbwrbugbugbbbwuuguwrrwurrwur -rbrbubrrruggbrrwrwbruwburrwuwgwrrwgubbgguug -gubrurwwgwwuwbrrgurggrgbwwrrgbbruurgbuubrwgr -bbrwuugubuugwwwwgbrgubbbrgbrrguwrggrurrwgbrggbugbbwwbwrrgu -uugbbwwwgwgurgggrugubgbrwwrwrwrrurugrwwur -guwgwbwgrbwbrrwrbugbbwuugwbbwgwwbrwrwubbbrb -bbbrurugrugbwuguuwwrgbrbwbwwuwwbrwbrwurgbgbggrgruuuru -ubuubgbgbuwugugurbbwuubrrgbwwubuggwbururggrrrgr -ubgwwbgurbruggwwrubwggubbuubggbggbwwwwwwgubwgu -gburuwbbrrrbwwbgbugugguugbbbwbubbguwrbrgbbgwgburrugr -gbgwbgruwrgwrrurwuugrwugruwrgubwbrrbugubugugbbwu -burbubrgbwgrwwrwbbrbuururggwbwubugrwruruuwbuuggrwbgb -bbbwgubrburwbubwwbruubguugrgwrgguuruubbwbb -guwggggrgrrugrbbrwururugbbrwrurwgbwgrrrguwwrrbbbwuwuug -bgwrrrgwruwrbbuwgbrugruugwrrrugwwuubbugubbubgggubrrrwwg -bbgbrwrwrbwbbrgwwgbugugugrrbwbbbbrbgguwrbugrbwgwrbru -rrbwwggrgwurbuwbwbggbrrbggurugwgubgggbrrbwwrugrwgurbugur -ggburugbwruugbburgrbugrgrwbbwbruubgubgbgubugubbbgrrbrgrg -rwuwrgbwgwubwubrrbgbrrbwrrwgugwgguubbrbbwguwwwwur -wuwwgbbbwrgwrrbrrgwbwwubbwrwrrrwwuuburuubwbuubuwwbbgg -wbbgwrgbrbubwggbuwwuwwggrugwwrugrgwuubbwuugrggbbrgubwrrgu -burrbwgrgbrgrruugwbwruugwbbbburwbbuwgrwuguwrbgwur -bbwbwuwwwbwbrgwwwrrwggbwgruurrbrgwggbrbbbrrbgbbgrrrwrugg -wwwbbgwgbwwrbugurgugrrggbuguugrbbgwrguugggbwwugrugu -gurbrggwrwugwgrggrbrgwugbrbuugrwurrwgrbwurwuuruwuggwruwr -guuwgguwwubrbwwguubugurbwbrrwwwbbwgggrwururgg -wubuuuurbuwbrrrurbggbgrwbbwrbuwwbwwbrbrggrwgggwwwur -wgwrwugbrwgubguguuugwbubuwbbrwgbbgrgubrruuuuuuu -wbrgwggwruuwruwwrbruubuwgwwwbuuugbwububbgwbgwbgbg -wwwwgwwwugrwgrgrgwbbuwgbgruwugrrwuugbrbrurrrguubwwur -bgbubwrwwrgrwrbuwgurrguwbruuwgguwrurwrurrwgugggbwrbwwggw -rwwurgwuwgbbwggwwuurbwbbwrwrbwbrwrgbrbbrwbr -wrugbbrgbbugrrwbrwgwuggrbrwwwgbgbbuuurwuwubbggubbg -grrwurgburgruuurgrbuurgwgwurubgbbubbubuwwwbwbuuubbbrrwur -uguuguurrwbbwgwrwgruubgguubgwggbburbuwwgbrwruururwbgrgrrgu -gugbrwwwbguggrubbuwbbbwggbgurruruwubrwggruurwbggrrruurwbb -grgrbwuurwwwuwuwwwgbuubwbuuruwwwgguubwbruggbrgub -gwruurrugubbwbbwrggrgurbwuugbgbgbubbugbgugbwbwuu -wuubwrgrruwwrurwgwwurbugrgbrbuggbuwwbwrrrbrwr -urwbwrrbbgbbwwuwbwubrbruwgubruuuguguwubguwugurubr -rrwbbrwrbbuwbwrwwwrrguwrbgrwbubwuurugurgbwrru -wwrbgbubrrruubrggbrrgugbwuwgrbgbburbbgwur -gwuwggbbrbgbbgubgbwburbguuggugrrwrbubruuurggwrw -rurruwgrrrurwwwbbuuuwbrbrbrugrgwgrrrwbbgrgwguguubg -bwgwrwggwggrwbwbbrbbbrgrwbbuubrugbwbrbwggbwb -bwwwbugwbgubgrruwrbubggwurwwuuggbrugrrururggrbwbbggbrwgug -uugwuuggrrbgugbwuubwwugwruubbbrrwbwgbbruuggggwuurgrw -bwrururgwugwrwuwbbrgwgugrurwgrwbwwwwrbgwur -ugrrrurbggwwugubwrggwgrggrrbuggrurbbbrrugwurubbbguruwbuwb -uwbgubgrrwrbgrgurubgrurrrguwbbuurbuwbgwbgruwrggwur -rwurbubbwububgbbubbugubrbbuuwwwuuuruwwrwruwwbwbwwgwbrggbg -bwgrguuruwwbwrbubwrbbbbuburwwugwbwurggwguurguguurww -wwruuguwbgurrgwrubbbwurgubguuuwrwgwugwgrrwwwrgurrurrbgrbrwur -grurwwuwwububrrggbwrgrgbuggrwrbruubwbggggrbbwrwbwwrugr -brbuguuwuubuuwurrrburrgbbuwgwbwwwrrgwrwwuwuwbguurbrr -wgrbuurrbubrrgbgbbbbbrrwrurrwgbgwbrrrwrbubruubuubwrbbbwwur -wruuuggbrburwrbbwrwbwrbwrbrurbbgggggguuwgbbgrguggwruuuww -bgubgggbruwwrggrwubbbgbrbbrwrgbruugwruggguwwur -bbgrbgruburguuwwruubrbbbwwrrrgugbgururgbgwggrbwrwur -ubwubwwubbuurwuuruwrgwwwwwbbwgwrggbwrwbbubwgubbuwru -bbuguuwuuwururbgubrruruguwwwugwruwbwgwrwbgwur -wuwrugbugwbubwwwrrugbbrruwgwgruuugbgrurbwwrwg -ubgwwwwgrbbrrgwwwbugrubwwwrurbbgbbwrbbgubwbruurbuurwr -gguggugrbwrwuubgrurbgbgrgugbgrurbuwguburbuwbrwbrwgubgu -uubgrwbgwuurrwwuubwburbruwgrrrgubuwwwwrgwu -wwrbwwwgubgubrguugrwbubwgrbuuurrgrwruwbgubwuuwuwggwububrgwur -brgrgwbgrbbbgwgbugwwubgruruubgguuwrwuwwrwbbbgbururw -rrgwguwuuubrurwwwrrugbwugrubrrwurrbrrrbggrb -ugwgwbbbrggbwugbrrbruuubrggwugruguugugwbggwrgrw -wurbrrgbbwwrwgwwgugwwbbbgbwwbrwbbggrgbggbwru -ubwwwrurbubbwbggbbwrwbrrwgwwubguggwwggbggwur -bgwgwwuurwgbbrugrgrgubrguwwrugwwwgrbuuwbrbwbrwgwwwbwurwg -wrrbubuuguruwrbggbugbgwwruuwgbwubwbruwgbwwwwrguwbwwur -urrrrbugwrwrurgubrwubbrrwbrgwuururbuwrgrggugrw -gggubrggugbbbwbwgrgwwruwwwbuwbuwgggbbbgwubuguuurwbgu -uruuruugbrggruwbuguwbggbrgwbbburuwbwwuwrgbw -bwwuwgrggrgrurwwbbbbgwwuwbwwrwwbggrrguugbgruuuubwuwugu -gwbububrubrgwubrbwrwgwubrgrwrwbrrubggwbgbuuwrwubrwwwrggg -wbggbrrbrggbuwwwbrurbbgrbuuuwrrbuguruwurwgr -brubbuwubbbwgbgrwuggbgggbrbbguuwuuwrgubbrugbbbgugrrwur -gruuubwuggbbggugrbbgbwrwgwwgwgwuwwbruuugbugrrru -wwbwwuwrguubrwugrbrgggbwuwwgbrbwguurbrbwguuwwrbgwwubwwuwbu -grrbgrwwwugbwbguwgrgrrbubgwrwwgrggwuwuwrgggbugrbugg -wuuwgbggburgggrgubbrugbgrbruubruwguuggwwuwbgggwuwwgu -wurubwgrgurrgbgrgbbwbgggwwuwbbgbrruugggruguggbwruwru -gbrugrbuwrgwrrurrrurrwuwgwgbbgwrwgugwbwrbbwrrbrrub -ugbwrugbruwwurwwrwgbuwrgrrgwrugbruggrrbwbuwbburwur -guuuwuwbuurggburbbuugwgwrgguugrguguubbbbuug -rrgubrbbwuggurbrrgrbbbwwwrgrrbgwgubruwguruurwgwgbwgbrwur -wuggruwburuwbubuwuwbwwrrwrbwgwwubuwrugbggwgbwbuuwg -wwrrbwgubbrrwuwbggrwwrbubbuggwrrwwrrgugurguurwrrwbbwgbw -grggruubbgubugwgugbwgbuuwugrwwrrwrggwurwuguuurgrwuwrbwrwwr -wrguwwubrgrgbuuurggwubbwgwubgbgrrburbgwururbbgwrburr -gwbgguuwwgrbbbrwbuwgrrgwubwgurbwrruwrggbugrwwwur -wrbrwrgrurrugwuggbbrrurburubwrrbuugubrrrrbugwrrwgbuwrgbbr -rbuggurgwgwwuuwuuwubbbrguugbubrurwrrwuuwugubwugrugbrrwur -brgwburbwbrbrwgwruwwggbbgrwrbguguugugubgrgwgwwr -wrbbbrwgwbrgggrrwbwgbbwbrggrwrburrbgbgrbbuugwg -uggbwubwrwwbrgrwwruuwwrggbwrbuwurwgurgbuguwuugbwbg -brgwbgbuggbbgrguggbwggrgrwrubururuwubrgwwbbgwrwugwugwr -buruuuuwgugwbgbrwrbururbrurwwbburuurbwuuugbbbwwuwrugugbrg -rrgrrrgwggguuwugrwwguubbbuggrwrbruuuguwgwg -ugbgruuwruwbwbgrgggbwugbwbbwurugwgwuurbuwrg -bwuwugbbubggwwrwubuubwgrrbrrbugrurubrrguwrbr -rguwwugwruwrgbwwgbgugrwubrwrbbwwrbggubugubwgwrbrwuuubu -wgbwggggrgrgrbgurwbuugwuwwrbwbbbugruwgubwwgrrgwur -ugrgwgguuuwbrgrgrugbruwrbbbrguwuurgurgugurrgbubuwgubuwbwu -ggwwwbgwgwguwrrruwuubwgbrubgruuurrrubuurrrgbguurw -grwrwuubrwwurbwgbggwrwuuruwguuurrgbwguwubwbuurgwbgugwuwbwr -bbwuuwrrwgrrbgrgbruurguuubuwrwguwuwbbggwrubbug -rrbbruwbbrbbrbbbwbubbgwurrbubrrbrrubbwugubr -burrubrururbguwwgrubwwbgwugrrwgbbgwgrwbubgurgug -wuwubwwburgugwwbgwurbbwwgrwguguwwbgwggubgbwbbrgrurrbbr -buruwbrugwrwbrgruurbrwbbrggbwgugwbuwgrgbwwwruugrggrg -wrgurwwgwwrbrubuwrbrruurrbbgggwuwgugwwurbwgurgwbbbrwr -buubbgbrrbwgwwwbgwrubwrugruurgggwrbugubrgwrrgbu -bwrbbuguugbgurbruwgbbruuwubwbggbrbrbugggubbbwwwbbguggwwgrg -burggrbrgwrwbwwbrbuwuguwwwwbrbbrbrbbwwur -uwbrggwrbwuruubggbwuurubrrbwubrwwgugwruwgugguu -grbgggbwbbwwuwbrggrurwwgbrruwgbwgbruwwruwubrruwwbbwuuw -wbrrgrrguwbuuugbrrrgggurbrwbwwgwrwbrurwggubbuwuwgwgwbbbbb -brbgubgrwrbbuwwwbwrguwwwuggurrubrugruwrguuwwubgru -rrbbrguwrrugwuubrwgwwrubrubuwbuwbrgwbrwuruuguwuuwrgrgur -rgwrbggrbwuwwwggrggrgrwwgwgrbbgrubuwugbrrwrbgwb -wwwugwuggbgwwrrbuwwrrwuuguggbgbwwrrbggwrbwwguur -ugugbrwrgwbrrrbbrwrrrbuugubrwgwrrgugwbwgbguuwwwruguwgrwg -gwgrbgguuurbwbwbwuuguubgbrgrrguwrbubgwwrug -gubwwbrwrruwbwwrwwwbrgwbugrrbuwubruuwbrwbbwubrw -uggwgbwrguwwubbugbgrwurgubggugwwwwbwuburwgub -uwrrgwrrrwrwbgwruuugbwbgwggwrrrwwgurrrrrgurwwwgruruwgw -urrubgggbbwgbbrbrbwrrwgrwwgrggwbbbrrurgrrurgubwbwu -grurubrburbbwwuuwrubbbbwrwbbwrgwrbggwgguwuuwwur -bwbbwbrgrbwrwbbwugrugurruruububburwuwgugguwrwur -rbrrbgubwbgwuwuuwwwrubgggwwuuugggubbrrbbggwrwb -gbwrugrgubwbrwwurbbgwgrrbuubrrubuwubguuuwgu -bggbwuuubgwrgwuwbbuguwrburrrurbbubrgwrwrwgrg -wgurrrrbbggwbbruwbwbrbguuubwwrbuurbrurrurwur -gwbgbgwbruuruwuurrrrurrwbgrbbwguwgbgrwgrrwuwwwgbbrr -rubburrrwggbwuwrbggrubrgurgwbgwbwurgbgwrbgwg -uubuwbubrggrwwwuurgburbuguuugrbguuwugubwbgwrgrggu -uwurgbguubbuuwrubbgubggurrgrrbbrrrwwugwruwr -uwwgwugguugrugbubbrwwgubwubbwrwguwbwguwggrgugrwguggubrwb -bgrbggwgbbgrggwwrbbubwwugbwgrurrurbuuurbrbburbruur -rubwrbrrwwgwuwbbbubrguggwwbuwrrguwbwrgggwburbwuurwb -rrgbbwwwbwbubwbwrugbugguwbuwrubuwrubbgwbgwgwrbgurrurruu -gbuwwwwgrguwgwbgrugrrwbwuuguubgrbbugbbgrgbrgbb -rwrwbgruwbrbgbrbgwwrbwubbwwuwbrbbbburuwrugggr -buubbrbubwwuggurrwwuguuuwbrbwbrgggrubwbbrgbwurugrwgrrwwgb -rrgbuwbwuuwwwbwuugrurggwbrbwwuruwwwuruwur -grrbrwwbguwbbggguuwwugugrugrgwwwbrgrgbguggwrr -rbgrwugbgggbubugwrburgggrbwbrruuuubrrrguugruwwrbgrbwg -urgrbrrrgwuwwgguwuwuuubwwrugwrgbwrbuwuwbgwbwurwwwrgbrrggb -rgrwwwwwugbgugbugrgbuwrgwrwgburuwrrgrbwbuubwguwwwugbrg -wbbbggwwuuwwgwwuguuuwuwwugrwwwubgugurrrugubwgw -brbuwwwgwgurwgbwrrbrgruguwgbrbwububbrgrbuwrugrwwur -uubuuggbguurwbrwgrburbbbwburubgurguugbbruruur -grrrwbuwuwruwgbwwwgbbgwbbguwbwurrugwwbuwbuuurrurwur -ruruwrwuuwbrgbugwwgwgbrbwwrrrwrbrburrgruwrwwbbbugubwwgrbww -bgwruugguuwuurbubgwgrgruwbuwwwwguwwwrbgrwrurwbggrguw -wuwwwwuuburggurgwrgruuwggbguurwbggrwbuugrwbggurbgrgb -rugwbbuwrgruubgggwuwwrggbgwwbuubrguwugbburrbgrrbwrru -gubgwgwuubwuubrbrbbwwbwrbguruuurgrgrggurbuguwbgr -ubbwgruubgbuwuurrguwrbuwwgubbrgwrruggurbuguwrbrbbwgur -wgggurbbwuubrbwrgwuurrbwgwburrwrbuuwbwurwur -gwgbwwrubwugbrgrwbgwbgruwugbwubbbbbwubbubg -ugubrbguubwgbgwugbwgwrrgruugbbbbruwugwrurugrgrwwrbw -urgurgubwuugbgbgurbbrrgggggwuwgrwbwgbubwuruuwbub -rrrruwwgwgubwbubbggrbruuururugbwwgwwugwgggwguggg -uggbbuubrurwubuuwrurrbwwuuwubrbgwrbrrrrwbrbgwggwuruur -rbbbwbgrurugbbwguurrugubrbgbgggrbuguwrgwwbgrrw -wrgwrugruwbgrwbgbbguwgubwwbugubrgbrgwgburguubbbbuwrwwur -rwbuurbrbgrgrgbgbbbrgbrrgggrbbrgrruuubrguubbrgrwwwwuwrubgr -bubwrwwbrruwrbuuugggrrrruuwrbwwbggwrwbuuguwwbgurgbu -uwwrwwgbbwrugruuuuruuwuwgrwbwrbgubwwrbbwgbgbgwg -buuwrguuuurguwbrbrrwguubrrubgggwwrbbwgbgrr -uuwwgwuwgbgwruwuuubrrbwuwrrurrwbgwbuwbwurwur -ubgurwwbwgwruurwwubrwuwrbugggruurwugurruwguwgbrgrugr -uguuguwubgrgbrbgbwgwuwwwubbwrgrbuguuugrwur -rrwbrrrbuwwgwgrggwrwbrrubwrbrrbbwubrrwwur -ubugrwwbbrgugburbgrrwwwuugbwrugbgurgrwrgubur -bgwbgguwrgwruwgwwrwrugurrugbrggubwbbgwwwwrbwwrugggbrwggrrw -wurrguggggwgbuwwguwbbbbgwburwwbrrwrrgwur -gbrwwgrguuwwrrgugubwbgwuuugwgrwbbwrwbgurugruurwuuubrwur -rrrwugwrrwwruwbggwrruuwgrbuwbbgbbggruwwbgruwggburwg -brbwwggbgwwbgruwubbbbggwwubrgubbuwububuwurwbbwwbwu -gbbggrbwwuuwuugrwuugwbrurrruububggwrwggrgurwwur -rgbwwrruugbgruruwuburgrwrwbbuwgrggguugugurwggwggrgugggrg -brbbwrruuubuwurrrwburbrbwgwurrbrgbrwrbgguruuwuuurbgbbg -gwbrwbguugbbwrgrgrbgbruwgwruwbrwugrrgbwwgb -wuurgwugrugguwwwbwwubwuubgwubuuubrwuuububrugwbgggrruggrrr -rggbuwwggruugruwugggrgrbwbwrggrgugwubrrgrwgwrwuru -uguguwwwgugrgbrwgbubwwuurbgguwubrrugrruruwrgrwwubgwg -gbbbrwurrubrugwrgwrbugwggugrwuubuwbgrurbuwbgbbbgw -wrgwuwbwrbbrgrbwbrbuggbuwbrgurwggwbbgrwwuwbbgwrrrgrubbb -bbubbrgwrgbbbrgguurggrurwuwubgwuwubburbgwrgw -urggrwbgbggrwbwburbbubggbrgbgwbrururrgwgbbuwbu -urggbbbrbubbwubbbbrbgubrwrrwbuwbbbbrguwrubbuwuwgg -ugugbubbugggwwbbruggwwrugbrurguugbrwbgwuuwbbwuguggb -wrbwrrbgrurbuwwrwwwrrrbrbuuwbuwbggwgggwuuwwuwbrwwrwbrrrrrwur -ggubgbruuuwbgrubwbbubgruwwwuurbrwbgwrrwbrbrgu -bwbbrgwgburwwbgrrwgbururwrwggguwgbwwbgwuuggwuggrbg -ugwwgugbuwruuggugggwrbuguuugggwbrwrbubguuuubwbwgwg -buugrgrruurbbrbgguubgbgbbuuuwuwgwbrrgwur -gwbbguuwwbburguugubrwgwwwubbubrgwruurwwruruwu -guuwbugrurwbbugrbrwuwbgwbrgruruwugwwbrrgrwgrwrugggbwwur -grurbgrrubwwwbwrrurwbwbgurwuwgwruwwwurwrwwrrugw -bwgbuwurrugwwrurbrurwgwubrrrrbuwwbruuggwbrubbrgur -ugwuwgrubrrgbbrwwgwggbwubgrbrbwwbgwbgrbuwuwwrrwg -ubbuwubugwwrgwrrwwubguurgbgwrbubwwbrwrwbbburuuruuurbuubu -wrbrgwubgrruuwbgguwbubwbbggrbgwbwrgwwrrgrgrbgbugubwg -wrugubgwbruwgrgrbgrugggwwwrwrwuwbururgrwrggwwrubuwbbbggbu -wugubugbbrrwwwrguburwrguwrugubwgugrbbguwrgwwwbgggubrrwgbgwur -rwrbgwguwurbrrbbbrrwrugrbggggwruubwruwbgbwrrrwbg -brrgrrugggggwgurgububrgbuuwgubugbgbgbuggwbburbgugugbw -gbbugurwwrbrbwbwwgbbrrruuwbubwwwgrbubuwgrw -wgubburbrubrwwugugwrburrbgurbgbruuurwgubgwb -ubwubwbgwrgwwuwbugbrwgbgrwgrwuwbrbububguguwrgwrwwwur -uwgwrwguwrbrgguwbgubrbwrurrwubbwbggbwbbbwburrruwbruugu -bwbwwbrwwwuwrrbugrgrrbwwgrugurwuubwbwgguwgbwwgwuwrbrb -wurrwgubuuwrrbbbuggwbwugrbgwwbrurwwuwwuruur -wgggrgrurbbbrbuurubgububwuwrgbbuuugbwwwbgurbruwbugubr -rurrubrwrwubrgurbbbgwrrbubwggbwwbbwgguugwrwwubuw -wwuggububbrrbbwrbwrwburwbrgwwgwugguwgrbwuwbuurrwwugbwr -ggrwbrwrbwwbwwwbgbgbbgwurrbwwbgubwbgrgubugr -rbbbbgrggurwuguurugugrruugwrwgrwgrbwbbwgrbrurggr -wrubwggwbuwrbggwbuwggwbwgwrruguwrbubrggbrwur -gwgbwrwugbwuwubwwwgrbrrbwubbwbwrubbbrwuuuwuw -bgwgubbuuugurwrbubrurburggwbrguwbggbgbbbbg -gwurgbbburbrrubgwwruwrwugbwwwwruuggwgguwuuuwuuurubgru -bgrwbuugwwrgggrggwrgrbbggrgbwrrwubwububurrrbgwggg -bbwuwrurwgbrrurguggrgwgggwuurbrrrurguwurrwgwruwbbgb -guwugbwrwwbgrrrugwuwurubwbwurgbwubwubbrwgwugb -uwrurbgwubuwruuggburburggwguwwbwgggwgbrgrwwrrrgww -ggwwbgrbuwrruurugggwrbwwgrgrwburgrwwwwrwbrbrrwrgurggrgwur -wurbwgrugbwugrbugbrrwugruwrgubuuwuwgrgbwgggb -wwuubuuuwrguuwwugbuwuububwubbguubgbubgrrbugbrgrwrbwrb -wwbrbwgbggbuubrwwgrguubbrbbwbbuwurbggubrrrrw -ggrugurgbwggwwwrwwbbgbuubuuubbwrurbubwbgbrwur -wgbrwgurwwgbbwwurugwgwugrggwurgrgbbbbrrbrbrgwuur -urwrbrgrwgwuurgubugbburugbgbguwbubgbwugbuubu -bwgwwuugrrrgrbwbggwuuwwurugbwbwgubgbwrubwgrw -brurrbbgubrrrurwwwwbubbgwgwgrugubbggwbggwubuuug -uwbwgrubgbbgrrrrubrgrgrbrbgurrbrgwrrbwgrwrgrgwgrrubbuuwu -wgbbrwurubuuwgruwgubrwwwubgbggrburruggbbrrwwruwwwwur -uwurruwrugbgbwrrbgwrwuwwuubruwrubrwwbwrwgggwugbrrrrwur -bbuggwgbbruurubuuwgbbwbrbrrbggggrrbuubrububbubugu -brbguwururwguwbrgrrwbbbwbgrgbgwgwgwgrrggrwrbbrburrur -gwbbrrwwrggwrrgwwrwwwurrggbuugubbrwbbggwur -rgguburbuggbbbrgurrwrwrggbrgrbuwbrgwwbwrurbugbbbu -buwuwwbuwugrrgrwuugbrgwurwwgguwgbggrrurbwgrurrwur -uugubgwggruuuggwgrbuwbrbuuwbgugwbuugwbgbgwuuuwgruwu -rwwubbrgwbuwbbguugwgbwburrwubruubbuwwwwwgbbbbruwuuurwur -rrrrwwguwgrurbubgbrgbrurwwgubwuuwuwbbwruwwur -bbubuubgbwgbruwugggurrwguggbwbbbbbgrbwggubwgwubgbwrwur -bubgwubbwrrbbwgurwrubrrubgurwwgrubbbugrgub -rbwgrbubbubwwrbgbgbwgrbubguurwwgguwgubbrrbubwr -guugbrgwbubububrbrwurrgwurbwrggbgbrbwwrbbuggugwgubrwrwbbbb -grrbguguwwwuwurruubggguububgwurbubrrurwrwguggbrwrwgugb -rgbgbugubuwrbbrwwuwubbububgwbugwurruwrbrgwg -bwbwgubgwbwwurrubgbrgurugugwwrwrrbwwbbwggrb -uuwwrgrurgbwgruuuubbugrrwbwgrbggwbubwbwbwgwuubugbrwur -bbwrbrwrrrrwwbbguwrbruwgbbrwurwrwuugbwgugurwwugrrurgugubu -urgwrrgrgggrguggbgrbggwuuburbwrwgwgrgbwrgg -ruuuwrwubrwwuguurrwgbrbbgggrrrgrbuwuuwwrrguu -grwwrrrrggbuwurwbugugugrrwwuwwgggrbrwwrbwuwbwgw -rrwbbruwuwwwuggwrwbrgwwgggrbrrgwrbgbwbbrwrbubgrrggwrwgrg -uwwwbwwuurrguuwwubwrbbuubbwwgrbwwbbwwwurwbuuwrwrwggwur -grrgwbgubwrbubrwubguburrggbbugwwwwruuwwuggbg -grbwwuwubbgggwbbuggrgwburwwrruruugrgwwwgwwwrgrbuwbrgb -ggrggrrgbgggrrgrbrurwgbgrrwbgruwwbbggbgwwbubwrggwgr -wgrubwrwbbrgbwuurwbwwuubwgbuubbwrugugurbgwrbwrbuwgguurww -rbwbwbgwuubrrrgrrubbbbburbbwuwwubbbguubgwwwur -buuuwrwwbuuguurwwbuwwgrgrgrrrugwrggbggwbgubw -wwuwwwwbrrwbwgwuuwwwgwguwgwubuwwgwuggrbwbrr -gbbgbwbbrbrgwrwburbrbwrburrgwwuguruubrgubgrgrwugb -urbgbwwrrwguurugruurbuwbruwrguuburguwwuuruwbggbwuwggb -bwrwwuurugugggwuuwrbrgbuugbuwbuubrgrrrrbwgbgwgbu -ubwrugrgrwruwggbwruuggbubwguguubwrrbggbgwggrww -uwbubuuwbgbuwbguwuwwgbggugwwubrbubgbuwrrbuwbuwrwbubgbrgru -bbruurgrwuwbrgruruwwuwbwuugwurbbrwgugrrrurbubgrgw -wbgwwrrwgwrugwurgbggbgwwgbwrbrbwwrrwugwrwbuuugguww diff --git a/2024/go/go.mod b/2024/go/go.mod index 14e4a5c..42db796 100644 --- a/2024/go/go.mod +++ b/2024/go/go.mod @@ -13,6 +13,6 @@ require github.com/spf13/pflag v1.0.5 // indirect require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/stretchr/testify v1.10.0 // indirect + github.com/stretchr/testify v1.10.0 // direct gopkg.in/yaml.v3 v3.0.1 // indirect )