@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
965842 9159 3372473 311 0 6 86213 48
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
@@ -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]
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"aoc2024/day09"
|
"aoc2024/day04"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
@@ -9,11 +9,9 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
data, _ := os.ReadFile("day09/input.txt")
|
data, _ := os.ReadFile("day04/input.txt")
|
||||||
fmt.Printf("part 1: %d\n", day09.Part1(string(data)))
|
fmt.Printf("part 1: %d\n", day04.Part1(string(data)))
|
||||||
fmt.Printf("part 2: %d\n", day09.Part2(string(data)))
|
fmt.Printf("part 2: %d\n", day04.Part2(string(data)))
|
||||||
elapsed := time.Since(start)
|
elapsed := time.Since(start)
|
||||||
fmt.Printf("Execution time: %s\n", elapsed)
|
fmt.Printf("Execution time: %s\n", elapsed)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6320029754031
|
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
3 386358 86195 85 1267 3752457 0 741
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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...#
|
|
||||||
##########
|
|
||||||
|
|
||||||
<vv>^<v^>v>^vv^v>v<>v^v<v<^vv<<<^><<><>>v<vvv<>^v^>^<<<><<v<<<v^vv^v>^
|
|
||||||
vvv<<^>^v^^><<>>><>^<<><^vv^^<>vvv<>><^^v>^>vv<>v<<<<v<^v>^<^^>>>^<v<v
|
|
||||||
><>vv>v^v^<>><>>>><^^>vv>v<^^^>>v^v^<^^>v^^>v^<^v>v<>>v^v^<v>v^^<^^vv<
|
|
||||||
<<v<^>>^^^^>>>v^<>vvv^><v<<<>^^^vv^<vvv>^>v<^^^^v<>^>vvvv><>>v^<<^^^^^
|
|
||||||
^><^><>>><>^^<<^^v>>><^<v>^<vv>>v>>>^v><>^v><<<<v>>v<v<v>vvv>^<><<>^><
|
|
||||||
^>><>^v<><^vvv<^^<><v<<<<<><^v<<<><<<^^<v<^^^><^>>^<v^><<<^>>^v<v^v<v^
|
|
||||||
>^>>^v>vv>^<<^v<>><<><<v<<v><>v<^vv<<<>^^v^>^^>>><<^v>>v^v><^^>>^<>vv^
|
|
||||||
<><^^>^^^<><vvvvv^v<v<<>^v<v>v<<^><<><<><<<^^<<<^<<>><<><^^^>^^<>^>v<>
|
|
||||||
^^>vv<^v^v<vv>^<><v<^v>^^^>>>^^vvv^>vvv<>>>^<^>>>>>^<<^v>^vvv<>^<><<v>
|
|
||||||
v^^>>><<^^<>>^v^<v^vv<>v^<<>^<^v^v><^<<<><<^<v><v<>vv>>v><v^<vv<>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...#
|
|
||||||
##########
|
|
||||||
|
|
||||||
<vv>^<v^>v>^vv^v>v<>v^v<v<^vv<<<^><<><>>v<vvv<>^v^>^<<<><<v<<<v^vv^v>^
|
|
||||||
vvv<<^>^v^^><<>>><>^<<><^vv^^<>vvv<>><^^v>^>vv<>v<<<<v<^v>^<^^>>>^<v<v
|
|
||||||
><>vv>v^v^<>><>>>><^^>vv>v<^^^>>v^v^<^^>v^^>v^<^v>v<>>v^v^<v>v^^<^^vv<
|
|
||||||
<<v<^>>^^^^>>>v^<>vvv^><v<<<>^^^vv^<vvv>^>v<^^^^v<>^>vvvv><>>v^<<^^^^^
|
|
||||||
^><^><>>><>^^<<^^v>>><^<v>^<vv>>v>>>^v><>^v><<<<v>>v<v<v>vvv>^<><<>^><
|
|
||||||
^>><>^v<><^vvv<^^<><v<<<<<><^v<<<><<<^^<v<^^^><^>>^<v^><<<^>>^v<v^v<v^
|
|
||||||
>^>>^v>vv>^<<^v<>><<><<v<<v><>v<^vv<<<>^^v^>^^>>><<^v>>v^v><^^>>^<>vv^
|
|
||||||
<><^^>^^^<><vvvvv^v<v<<>^v<v>v<<^><<><<><<<^^<<<^<<>><<><^^^>^^<>^>v<>
|
|
||||||
^^>vv<^v^v<vv>^<><v<^v>^^^>>>^^vvv^>vvv<>>>^<^>>>>>^<<^v>^vvv<>^<><<v>
|
|
||||||
v^^>>><<^^<>>^v^<v^vv<>v^<<>^<^v^v><^<<<><<^<v><v<>vv>>v><v^<vv<>v^<<^`)
|
|
||||||
require.Equal(t, 0, r)
|
|
||||||
}
|
|
||||||
@@ -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^>^^<><^v>v<^vv>^v<^>>v>^vv<<vv>>>>>>v^>v>^>^v<^v^<v^<^v>>^^>v<<>>^v^<v<v>v<v<v^<>>^>v^>^^^<^<v<v<<<v<^vv>^v>>v<v^>><vvv>^>v<^^vvv<>vvv<^v<>v><><^^<>v^^<^><v^><>>^^>v^<v>>^<><<^><<>v>>vvv<^^v^v^><vv>>v^^><v^<<^v>^vv<^<^<^<><>>>^><vv>>^<v^<><><^v<^<^v<^^>^<><<^<<^vv^^v<vv^^>^<^<v^v^^<v^>^v<vvv^vv<^^<^^>v>>^v>^v><v^^^v>^<^<v<^>>^><>^v<>v>^^^<^vv^^<^v<vv>><^^^v<<>>>^<^^>^<v>v>><v^v<<<v>^<vv<^<v^>^<^<v^<>^><v<>^>><<^><vv>>vv<>v^<vvv^<v><v^vv>^<<><vvv>^<><>^^v<^v<<>vv><^>><^<<v<^>^>>^^>v<^>v^>^<vv><v><<^^^^v^<>^>^v^^v<v^<v>v<><<<v>vv^v><vv^>>>v>>>>><v<vvvv<<^v>^v>^<><<<><>v<vv<v><>^vv>v<>^v^<>>v<v>>>v^>^<vv^^<v<^<^>vv^vvv^^<<>vv>^>^v>>v^^vv<^v>^^vv<>^v>^>v^^<>^^><vvvvvv<^^>^^v<>^^^<^^<>^>^v><v><<>>^<>>v>>^><^>v<v><>v^v<v><>^<<>>v>^v<vv><>^v<^>^^v>v>>^<^^^<<vvv><<v><<>vvv^v><<v^vv><^^^v^^^>v><<^^v>vv^v><v>^>^v<>>vv<<^v<v><>v><^><>>^vv><>><<vv^v<^^>><<>>v>><><vv>v^^<^<v<<^vv^<^^<v^<vv<<v<>v<>^<^<^>v^^^>>v<^^<^^^>^^>^>^>^^<><vvv>v>v<vv<^v<^>vv^<vv>v^>^<^<>v>^^>v<^>v>v>><>
|
|
||||||
^vv>>>^vv><^v^<>v>^><<v>^^<v^v<v^>^>^v>><>>^>^<<^^v^^vv>^v^<<v>^v^>v<v>v<<>^>vvv>v>^vvv>>vv^>v^^v^^v<v^v>v^^<><<<^^><<^<vv<>>>>^<>v><v>>^v<v<<vv>>v>><>v><<^v^><>v><v^^<>v>^>>^^><>v<v<^vv<^v>>^><v>^v>^>><<<^vv<>^<<^><^<<><>vv^^v<<>v>v^vvv<v^>>^>^>^<>v<>vv>^><vv>>v<v<>^^v<>><>>v<>>^^<>v^<v^v^v>vvv<><^^v^>vv<<v>^^>>>v>^>^^><<^v><v^>^^>>^^>v<<<v^><><<><>vv^>v>v^>vv><^<v^><>><<>^>vv<<<v>>v><^^<v^><v>^>v^^<^v>v^<<v^>><v^>^<<>^^vvv>vvv><<><^><>>><<>>^><v<<v><^<v<>>^><><^^vv<^>^vvv<^>>><<^>><^v<v^<vv<v><<v^^v^<><^>v>^v>v<v<<>>><v>^vv^>>><v^><^>v^<>>v>v^v^><^<vv>v^v^<^v<>^><^>>v^^>v<^^^<v^^v>v>v>^^^<^^><v<vv<^vv^<vv<<<><><^>>v<>v<^v>^^<>v^>^v<v^<vv^v>v<<<v>^<^v^^^>v^vv<>vv>^^<<><^><vv>><<^v<^>v>>^>><<^<>vv^>v><>^vv^^v>v<<>^<><^^>^^><^>>^v>vvvv>^>v><<^<v^v<^<<^^<>^><^v^<<v<>^v><^>vvv><^v<>><<^^>^<^<<v^^^<^v><<<v<<>v>^v^>^>vv^<><v^^<><><>^^<^v^^>^^^^^vv<<<v^<vv<<<v^^<v<^<<v><vv^<<<<<<^^^vv><^vv<<<>><>v>vv>^^^<^><><<><<v<><>><^vv^^<<v^<^^^>v<>^^^^<><^^^<vv><>^^<><<>><vv>>^<>v<v^v<<vv^>^^>^^>>^v>v^
|
|
||||||
^>>v<><<<vvv^^^<vv><<<vvv>v<<<<^v<>v<<^vv<^vv<^^>>v^>^v^>^<>>>v<^<<^^>>vv^^<^^^>^><vv<v<v^^v<vv^<<^v<<^v<v<v><>>>vv<>vv<>^^>vv^vvvv<v>vv<vv^^>^<v<vvvv^>v>^^<<^<<<>v>^<^<v>v>vv<<v<^vv>>^^<v<v<v<>>^>><^<v<<>^^v<>^<^v>^><><<vv<^><<^><>^>^^vv^>^<<<^>^v>^v<<<>^^<^^<<^<v><^^<>^<<<^v^<>^>vv<vvv>v><<<^vv^<^><>><><>v^^>v<^<^vv<>><^>v>^v<><>>^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>>>>>><^vv<v<v^<^v^<<><^>v>>v<vv>^<vv<<v^v>>>vvv<v<vv<<<^v<v<>^vvvvvvv>^^>>>^v<>><>^<<<>^><^^v^v<>><^>^>v><<v>>>v^>^<^<^<v^vv>><<^<>vv^^v^<>v<<<^>>v<v>vv^>><<^<^^><^^>>>v>^^^>^v<v>v<v^<v^>^<<>^^^<^v>><>>>>v^<>>^^^<>v^^v^>><<>v>>^>^vvv<v>><>^v>vv^v>><vvvvv^>^><>^>v<<^>><^^v><^<v^^>>^^>^>vv><<<^vvvvv<^<^<<vv>^<^^<>v^^>^v<^^v<>v>^>^>vv^>v>^<vvv<<^<>^<^<^^v><^<^^v^<vv>v<>>^>v^v<^v>>><^v<^<<^v<^vv^^><>^v<><^><v^v>v<>vvv^^^>^^^^^v<^^^<v^<^>^v<<v<^^v<^v^<<^>><<>>>v^v<>v^^^>^vv>v>v>>><><v^<v><vv<>v>vvvv>v>>vvv><v<v^<^<v<^vvv>^<v<>v<>^^v^<^vv^^>^^>>vv<><^vv><v<
|
|
||||||
<^^>^<^>><<>>v>vv^vv<^<<<<>^v<<>>^v<>>>^v><<<><^<^><>>><vv<v<v^<>>v^>v<><v^><^v>v^>^^v^^>v<<v<<v^^^<>v<^v^^<<<^v^^vv^v<v>v>vv^>^^v<vv^<<^>v^<^^<vvv><^>>>>^><<>^><vvv>^v^<^v>v^v><<>v^<>>v^^^<v>><<^>^>^<^vvv>><v<<>^<^><<v>^v>^^<><^^^>^><vvvv><^^><v>>v^vvv><vvv<^^v^v<v<><^<<v^>v>>^<<<<>^v<v>v^>^<^<<>><^>vvv>v>>v^><><>vv>>^vv>>vv<^<>^^^>^>v>^v><^v^>v^<v^v^^^>^v^>^>vv<vvv^<<^<>vvv<vv^<vv<<<v^^>v<<^^<^<>^^^v<v<^>><>><<<^^<>v<>vv<^<^v^v>v>v^vv^v<<v<^>^v<v^^v>^<<<<^^<<>v<<<<<>v<^<v>vv<>^<><v^^v^^<v^^<<vv<v^vv^>><><^<^^<^<>v<>^<<<<v^<<^<<vv<v<>>vv<<vv>^vv<>^^<>v><<v>><vv^^^^><<<^<^>v^vv>vvvv^>v<<v<>^^^v<<<><v<v^^><v^v>>^>>^>><v<<>vv>>>v>v^<<<v<^<<>>^^<v^vv<^^<v<v^^<>v>v^<vv<v<<>>^<^^<^^>><^^>v>v>^^>v>>>^<>^^v^v>^^<^v>^v><<<vv>v^>v^<v^><v^<^>vvv><<^>>v^^>>>^<v^v^>vvv<v<>v^>^^v^^>vvv>^v^^<v^<<v^<<<>^v^<^<vvv<<<<<v<<vv^<v>>v>>><v>^^<><>v<vv^>v>^vvv<<>>v<v<>^<>^<^<<v<<vv^<v^^<<^<^v<^<^>vv^<<vv^<^vv>v>v><^^>^><vv>vv<^<v<>^<^^v<><vvv<<>^vvv^^v<v<v<^<>^vv>>^>v>v<^^<>vv>^<<>^^^>^<^<^>v>vv^^><>^>^v>>^<>
|
|
||||||
^<^^<^>v<^<^>^^>><<<>v<^^><>>^^<^^>^v^^><^v^^<^vv><>>v<^v^>>>^<>>^>^>^<<v>>^^^<^v<>vv^v^^<^>v>^>><<>>v<><^<<v<v><<>v>>^<><v<v<>>>>v>^v^<<<>^vv<<v><^>vv>vv>><v^v^^v<<<^<<<^vv><^><><<>v><vv<><^<<v<<vv^vv<^>>v>>>><><>^<v^^>vv<^v^vv><<^>v>v<<><>^>^v<^>v>v<>v<<>^vv<vv>>v><>><<<>>^^^<^^^^<<v^<<v><v<v<v>>^>>vv>^v<^>>vv>^^v>^vv^<v<^^v>^<v<v>^v><v>v>>><<<>>>v>vv<^>^v>v<vv^^v<^<v^^v<^v><v^>v^^^<><>v<^>><^vv>^<<^<>><<<<^<vv^<v<<v^>^>^^<v^<^vvvv<<v^><><>v><<^v<<<<<^v<v><v<<^<<v<>>v<^^v<<^<>^><<v^v^><<>>v<<^v>v>>>v<>>v><><^vv<vv><^^<<v^vv<^>v>v<v^<<<<v>v^<>^^>>>><<<>^^^^v>v>>>>^v><<^^<vv>>v^<<v^^<^v^v>v<>>^^v>^><^v>^>^^vvvvv<v>>^>v<v<^<>>v><vvv>v>v^^<v>^>^<><<^^^^<<v^<v>>^<^<vv<<^^^v>v>^>><v>>><v<>vv>>>v^>^><^^v>>^>>vv<^^<>><v>vv^^v<v<>^<>>>vvv<>^>vv^<<^<^<>vv>^>v>v<^<<><<vv^<<>^v^<^^^<^^^^vv^>^^>^^>><>^<^>v>v<^>>^^^^>^^><<v><v>>vv><^<vv^<v^v^vv>^>v>^^^^v><v>^v>^v<^v^>v>^<v<^v<v><v<<v^>>^^^>v>v^^v^<v>v>^v<^<v^^^v^>^^>^>vv^^vv>vv>v^v<^<^vv^><v^vv<<^>^^<v>v>^vvvv<>^^v<><vv>><<<vv>v<^>><><^><>>^<v^<><
|
|
||||||
^><^v>v^><v^<>vvv^^v^v<v^>v<>>>v>>vv^^>v^><^^<>v^><<v<<v^<<v>>^v^<v^v^^^^^<^v<v^<^^<^>><v^^^>v>^^>><<<v>^><>v><^v><vv^>>>><<<><v>v^><<<>><<>^v^^^^<^^><><>^^vv^<^v<v>^>>^>^><>vv^>>>>v^<>vv^>>v^<>vv<v^^>>>><v><^><^>^vvvv><<^vvv^<>>v^v>><^^^><>>v^<v<v<v><v^^vv<v>>^<^^><<<>vvv^^^v>^v<>v^>v<<v^v>>v>v<>^v>vvvv<^>^^^v^^<v><>^<vv<><^^<vv<^<v<>v>>^^^><>v^>><^>vv>><^^^v>><^<<^><<>^>^<>v<v<^<<>v>vv^^^^<^>^v<>>^v>>>^v<>v<^v<<^v^v<<<v^vv^><^>><v^>v^v^v<<^^v>vv<v^^v<v^^<<<^v<^>^>v><>v>^vv>^v>><v^^>^<<^><>v>^>v>^<v><<^<>>^<v^^<<>^v<>^>v^<>^v><v<><v<vv>vvv<><<>>^<^^>^<<>^<>vv^^v^^<<>v<<><^<<v<><v<<>^^<>>><<^<v<v<>v<<^>v<v^^v<><<v>><v<^v>vv>^>>>>>vv<<><^^vv^>v^<>v<<vvvv><<>^>^<v^<>v>vv^^<^v>v<^<<v^>>>^vv>v^<>^v^<>^>><><>v>>v>^><^><^>v><<>>^^^<vv<<<v^v^<<><<^v>v>^vv^>><v>>^^<vv^v<^^vv><>v<^<^>>^v^>v<><^>>>vvv^^^^>vv>^>>>><^<>^>v^v<v<^v>>v<^<v^v<>>>>><^^vv><<>vv<>v<>>^>^^<>>vv>>><<>vvv<<>>vv>^<^^v>>v>^<<<><^v^v^>^v^><<>^v><>>^^>v>>>^<v<>^>>v<>>>^v>^v^<<<vv^>^<<<><>vv^>vvv>^^v>v<^v^v^><^v<>^v>^<>><<^v>vv^
|
|
||||||
^>v<>>^vvv>>v<v<^>^vvv>>v^><>><^v<><vv>vv^<v<^>>^^><<>><^<^>^v<>v>>v^<>>^<<^vv<^^<>^v><<>>^^<<<v>^vv^v>^>^<>v>>>^<^<^<>v<^><<^><<>>vv><<><v<><>^<v^^<^>>>v^<v>^<v>>>>^v<^^<<vv^v<v<^^<<>v><>><^<<<vv^>^v>>^vv^v<><v<vv<>^>><<v<<>>>>^<v<v^v<^v><>>v><>>^^v>>^><^^^>^^>^>^>^<vv>vvvvv<^^>>>>v>vv>v>^vv^v<^v>^>^>vv>v<>v<><<>v^v<>><<<<v<<^vv>v<<>^v^><<v^^v>>v<><<v<v>^v>^>^><^^^>v<<v<^<v<^<>>vvv<<^^<vv^v<^^v>v>^vv^<^>v>>>v>^^><^>^v>^v^^>^^<v^^><v<vv^^>v><>><v<>^<^><^^v^^vv<^>^^>^>>vv<^<vv>><v>vv<<<v<^vvv<<<><>><><<^^v><vv^v><^<^<>v^v>^v^<<<v^>v^<<<<<vv>v^<>v<^^<<^>^v<<><>><v><><<<^^>v>^^<^^<v^v<vv>><v<<>v>v<^v>^>>v>>v>v<vv<>><^v^v<^v>^vv^><^v>><v<><<^<^^^^^^>>v>v^<>v>>v<vvv><>v^>v><<<^v^<^<^<>^>>v>>>v><v>^vv>^^<>v^<v>v>v><^v<v>^>v>>^<vvv><^v>>>v>v>vv>^^^>vvv<v^<v>v^><^>^^^v<^><>^^<<^<<^^<^^>^<>^<^<^<v<v^>^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^>>^vvv<v^<<v>^<^^v^^v<<><^>vv>>^v<^^<v^^<>>^<v>^>^<v<<<^<^v^^vv<>>>
|
|
||||||
^>vv>^^>v^>>^<vv^>><>>^<>v><<>v>v^^^>>v>>vv^^<<<>v^^<vvvv<>v<v><<>v<vv^^>>>^<>^v<<v>^<v^vv<^vvv>^^<><^<<>^<>>v^vv<v>v^<v<^^v<<><vv<^^<^<<v<^>v<v>^<v<^^v><^<v<<v<^^<v^<^>>v^<^^<<^^<<^v<><^v^^v^v^v^^>v^><^>vv>>^><^<<v<>v>v>><>^<vv<<^^>v>^<v><vv^v>^<^>>v^<v<><<>v<<v^v>v^>v<v^^<^^>v>vv^><vv>v^vvv^<>^v<v<<^<>><<vv<><<>v^vv>vv<><v^v>^><^<><^v>>v<<^^^><^>^<>v^^v^^><^^>>v^^<>v>><<vv^^v^>>v<<v<v<<^><<vv>^^^^^<<><>^vv^<><<>v>>>^><<<v>^<><>^^v^vv>>v^vvv<>><><><v<<v>^vv^v>^<^<^v>>>><^>>v>^v><<>^^<>^v^<>vv^<^<vv^vv><>^<<>v><^<^^<v<^<v^^v<>^^>^<>^^^^<^^>v<<<<v^>v>v>>^vv>vv<v^vv>v^>v^vv>v^>vv<v^>^v<>>>vv>^>>^^^>><^^v^^<^^>vv<^v>v^vv<<vv^<<vv^^<><^<v^>^<>^vv<<v^^v>^vv>vv<v><><v<>>^<<><v<v>^<<v><>v<v<^<^vv^^<^<><<>v<>v^^<>vv>^^>^vv^v<v^v^^>>^<>v^v^>vv^^^>^>><>v><>>>v>>>v>v^v^v>v<^>^<^^>v<>>^><<v^>^^<^^<^v^v>vv<v>v<^vv<v^<<v><^<<v^v^^^vv>><>^<<v^<>v^>vv^^<vv^^^^>^>^>^>><<^>>^<v>v^>v^^^v<^^^<^>>v^v<>^<><<v<v<vvv^^<^<>v><^^v^<^>>^^v^>>^<<v<<^<<v><<>v<^^^^<<^<v<>^v^^^^^>vv^>>v<^><<<v<<^<v><><v^v<vv>v^<>v>^
|
|
||||||
^<v>^<<>^<^<<<>v^^v>v>>^^^^^^<><^^<<^^v<>^^<v^v><^>^v><v<^^^>>>><><<<^^v^<><<<><<v><^v<<^v>vvv>><^>^>^><^>^>>>v^<v><<<<<vvvv^v>^>>v^><^<vv<^>^vv>vv<^>><^^v^^vv<>^^v<>^<v>>>^^vv^^>>v^>>><<vv>v<^v^vvv>vvv>^v>^^^<><>v>v<v<>><<><^v>>>^<<^vv^^>>^<^^v^>v^<><<^>v>^v^<<><><>v^>>>v>><<^^v^vv^v<><<v^vv^>^vvvv^>^><><v^<^^^v^vv<<v>>>>v^>>^vvv^<><^v>vv<>^><><^>v>vvvv>^^><v>vvv<v>><^>^v>>^>v>^v<>>>>^^>^>v>^<vvv^^<vv<>^>^^>>><^<^^v<v<^v<^^v^>^^^^>^v>v<<v>v^vvv>><v>v^<^v^v<^v^v<^<<>^v^<>>v>v>^^<v<>vv>^v<v>><v><>^^<v><<<>v<>v>v><<<<^vv>^>>v><<v<vv<<>v<^v>v<<>><<>^><<^>>vvvv^<^v^^>>vv>><^vv<^^^>>>v^>^v>vvvv^>>v^><<^<^>^>^<v<>>v><v<><><<<^<^vv^<<<>^<<^^<<>v<>><<<>>>>^>v><vv<^>^^><><v>^><<v>v>^><vv^v<>^v<^v^v>^<^v^^><<<>v>>v^vv>^^^^v><^>><><<<v^^^<<<^<v^>^^<>vv^v^<><v>^>^<>v<^^<vv<^>>>>^>^><v<vv^^>><v><<<><^>>^v<v<^v^^vv<<v^<^<>><<>vv>><<>v^^>v>vv<^<v<^<<vv>v<^>v^v<v^<<v<v<v<^>>>^v<><<<>^v<v>^<><^v<<<v<v<<^<^^<^^>vv>>^>^>^>>v>^<^v<<<>^v^v>^<vv^v<^^^v>v<>v>v>><^<<<v>><>v^^^v^<<vv<<><^v>>><^^^v>vv>v<>v<>^^>
|
|
||||||
>^^<^v>v<<^<v><>^^>^<>v<v^v>v>v^>^<^v^<v^<v>^>^>vv^<>><<>^v>^><vv^<<^>v^v<^^^>v<>v>><v><vv>><vv>vvv<>^^^vv<^v<^v^<^<>>v<>^<vv<>><vv<^<><<<vvvv>^<^><^<<v<v^vv>vv^>><vv^<><<<vv^<>>>^vv>v<v^v<v^<<>v^^>v^^vv<>><>^vv^<vv>>v>>^^<^^v<v<<>^>^^v<>^<vv^vvv^<<^^v^><<<<^v^^v><v<>>v^^v>^^<^<^>>v^v>^<<v<<>^v<>>^vvv<<v^^^v^v>^vv>^<<<>^^^<^^<v<<<>^vv^^^<>^^v>>><v>><<v^v>^>v<v<<^v<v^v>vv<^><>^<><>^^<v>>>^<<^>^^<>vv^vv<>v<<v>^>vvv><^<^v><v^>vv<^^^>v>>vv<>><^^<v>v^^vv>^<<^<<^>v^>v^<>^<>v^v<v^vv<><>v><^><v^<<>>^<v>^<><>>v^vv^<v<>^<^>v<>>>^>>><<><>>^<vvv^>v>^^>>v><<^^v<v><>^<<><>>>><vv^^^<<v^<<v>^>><><^>>>v^vvv^^^<><>^<^v<>>v^>>vvv>^<><v<v<^>^vv<>^v>><>><>v^v>^^>vv<^<<<v<^<^>^^^v<><^<^v>vv>^<>v<<^vv^^vvv>><>>v<<v^v<>>v^^vv^>^<<<vv>^^v<<v<<^>^>v<^^<<^vv><>>^v>^^vvvv>^<^<v^<^>v^<vv<^v<<<v>^v<v^<^>v><^^^v<>>v^v^^>v^^^^^<v<^v<>^^>^v<<><<<^vv<<^v<v<<v^v>v^<vv^><<^<<>>><<><v><<><><vv<<vvv^>vv>>^^>>>>^<v>^v^^v<vv<><<>>^<<vvv>>>>^^<>>>vv><<>>><v<v>^<^<>vv>>v^>v>^>>>^>^>>>>>>^>>><^^v><<><^vvv^>^v^>^>>^v>v^v<>^><^>v
|
|
||||||
^^^<^vv>^<<^<<><^<<>v^<^^vv><^<vv<^^<^v^^><>^v>v<>^v^^vvv<v><^<>vvv<v^<>^>><^vvv<v<^><>^>><>>^>v<>>>>>v^^<^<>^>^<^<<^^<>^>^>^v^v<v<^v<<^<vv><<>v>^v>>>><v<>^>v>>^v<>><>^>^>v<^<^<^<^<<<v^<<^<^vvv<^^<v<v><>^^>><v<>^<>vvv<<><vv<^<v>><>^>vv^>^^v^^><vv>v<^^>>>v^v<><^^<v^<vv>vv<v<^v>v>v<<^<^>^^<v><<^v>>><^^<^^v<>v^><<vv^>>^v^<<>v>>v>^^>><<v>^<<<^><^^vvv^>^>v<^v<v<>^>^><<^v<>>^><>^<v<><>>vv<><>v^<>v^<^>>vv><^v^v<<<>v><v^vvv<>^<vv^v<><^v^v<<<^<>>vv^<^^>>^v^<<v>v<^vvv<>v^v>><^v>>^v^^^><<^<<v><v<v^>^<^>^vvvv<^v>^>>><vv<^vv^v>^v<<><v<^v><<^>><^^<v^>v^^^v^>vv<vv^>v^^>^v<<v>^>vv^^^v>><<>vv>>^<v^<>^<>^v>v^v<v^v><<^^^>>^vv<>>v>vvv<v<^vv^<^v^^<v^v<v^^v<^><^v<<>^^v<^>v>^>v>^<>v^<v>v<><vvv<<v^v^v>>>^vvv^v^<>>>>^v^<<>>>>v<>>^^^^><<^^^^<>^<v<v<^<v>>^<>><<^<<>>^>>vvvvvv^><^^>^^^>^>v<^^<vvv^v<<vv>^^>>v>v<><^<^^>>^>>^v><v<v^^^v<v<vvv<vv>vv^vv<v<>^v<vv^vv<^<vvv<<><>>v<<<><<v<v^>vv^<^<v^<vv^^^<v<>v>v><>^v>v<^<>>^>>v<<<>^<v^v^^v>vvv<v<^>>v^<<^^>^<>vv><>^^<vv>^v>v^>vv<^^<>^<>v<v^<vvv^<>>vvv<^><<<>^>>^^>v^v<<>^v>>
|
|
||||||
v^^v<<v>v>><v>><<>^>^>^v><^^v<^^^^^v^^<>><>>>^<<><^<<^<v<>>^<^^^<>>>>v<<>>>vvv<vvv>v^<v<>v^<><v<>v^^>>^>>^<^^v^>v<>^>vv<>>>>vv<v>v>v^v^vv>v<vv><>>vv^<>v^<>><v<<<<v<<<<^<<>v<<>vv<<>^>vv<><vv^<>v>^<vvvv<^^><><^v^>>^<^<<>v^<<^<v<^vv>><><>^^><v><><<>>v<<v^v^^^<v>^vv<>^>>v<><^>^<<>^>v^><><>^<v>v>^<v><>v<<v^^v^vv>^>^v>^>>^>^<<><<^>^><><^v^><^vvv<v<>v><>^v>^>vv<^v<v<>><^<vvvv>^^^>><<v<>^v<<><>v^^^^^^<v<v<<v^^vv<>^vvv>^<<<<>v^<<^><<^>vv<^><^v<v<^<<>v<v<v<^vv^^<v^^v<v>^>^v<vv^<v>vv^<v^>>>>><<<^^vv><^<v<<<>><^>>v^^>^^><^vvv<<^vv^^<^>^>v^vv<v<<vv><><v<v<><^>v>v><>>^>>^^^^^v<>^^>v^>^>^^<^<^<v>^vv^^vv^>v<v<<>v>vvvv<>v^>^<^^v>^>^v<v^v<<>v>v^v<v><<><^v>>>vvv^^<<>><^<vv>^>^<v^v^v><v^vvv>vvv^>v<^><vv^>v>>^<>^<vv^^<^v<><>v><^<>><<<>><<<^<vv<>>>>v>vvv^>><<v^^vv>><v>>>>^>v>>v>^>^>>><><v<<<^>^><<^<^>v^^v^>^^>^>^<>^v^>^v<v^^><>v^<<>v^v>v><vv<><^>>v>><v><<>v<v>><<>vvv>><^^v<>>v>v^>>vv>^<^>^<><v<v<><v<vv>v<v^v^<><<v<<^vv<v^><^<v>vv<^>v^v<^<<^<^v<^v><^vv<v^>v><v<<<v<>^<>^vv^>>><^^<^v<^^<^<v>v^vv<<<>^v>v<<>v>><
|
|
||||||
<>>vv^v>v<^<^^v^v^<^>>><^^<<<^<<^<^<<>v^^^^^<^>v^>vvv^>><^<<>>v^<><<v^v>><<^^<^^><<><vv>>v^v^v><v<^<^v<<>><^^><v>>v>v<^<><^^><<>^<<vv<v>^v^^v>^^<^<v>v^^v^<^v>^<><<v^^^^<><vvvv<v<<<^^v^<><v<<><v<^>>^<v<v>>^^^<v<<>^<><^^<<>v>^<v^^^><><^<><^v<v<>^^<v><^^<^><vv><^<<^^^>v<<>^><vv^>>>>>>v>^>^>><<vv^<<<>^^>>^v>^v>><^vv^v<<^^^<^v^v^>v^v<v>>^<<^vvvv>v>^^>><<<<<vv>>^v^v^><vvvvv^<^vvv<><><><<<>><^<^^^^vv<>><v>>>><vv>^v>>>>>v^<^<>vv^<^^v^^>>^<v^^<>^<^<^<><>>^><^>^<<v^v>^^>v<^^>><^<^vv^v^<<^>>>v<<vvvvv><^>><<^v<^<^<>v<^vv^^^v<^v<^^vv<v^^v>>^vv<vvvv>>>>v^^^>><>v^>><<>v>^^<v<<>^<^^<<>><>v>>v^v<^>vvvv^^^^vv><>v>^v>v^v><<>^vv^v>>^<>^^^^^v^v>^^vv>v>>>v>^<v>^^vvvv^^>^^><^vv><><>^v^>>v>v^><><^^^^<^vv>^^v>^^>^vv<v>v^^>^>^^v^<^>v^vv<>vv^<<><>^>vv^^v>vv^^<<>>^v^^<<^>^><>v>>^<<<v>v>^<v<vv<>v<<<vvv<<v^v><<vv^vv<^^><>^v>^^^>>v<^^v>>v^>v>>>^vv^>><<><<vvvv<<>><v^vv><^^^v<^>>vv>>>^^<v^<v<^^<^<>^vv>>v<v>><^^>v><><v>>^>v>v^<>vv<<^vv>>^>^vv><v^^>vvv<v>^>>vv^^<>><>v^>^v>v^v>^>>v<^v^<><v<><>^v<>>><<>^v><>v^vvv>vvvv>^<<
|
|
||||||
^^><<<^^v>^v<<^<^v<^v^v><^v<vv^><^>^v<<vv<>><^^<<^>><>vv^vvv^v<vv<<^v^^v<>>v<>v<<>vv><>vvv<><^vv^^<<^<^v<>^<^<><<v<v<><><vv>^>>^v>>^v^>><^><vv>^><^vv>>><v<>>^>vv^v^<<v><>^^<^v^<<v<<>v>>^<<v>v^v>v><v^>v><^<v^>>^<vv^>vv>v<^v^vv<>>^>>^>v^^^^^><<>vv^vv<^^>^>^<<^^^>v<>vv<^^<<v^<<v<>^<v<^v<<^^^>v>^>>><^<<>^<>^v<<>^>v^>vv^^^<>^^<><v>^><v^^>>^^v^<v^v><v>v>vv<<<^>>><v<^vv>v>>^^^>^^v^<^^>^>^>>>><^^>^<^^><v>v<<^v><v<>^^^v>^^^>^<^^>v<<^v>v<v>v>v^^>^>v>^vv>>v^<v<^^>v<<<><vvv<^>^<^^v><^^<^<v<<^>^v<<^vv>>v>vvv>^v>vvv<vv^^^vvv^^>>^<><><v<<vvv>^><<<^v^^^^v^^>v>^>v<^v<<^>^vv^<v^^>^<>>^<^<<vvv>v>^<^^<>>><>><<v^<>v<>><^vvv>v>><v>>^>v<^^>v^^vv>v^^<><^v<v^^>v^^v><^^<>^>v>>vv<v<><>>^<<^^vv>v<v<^v^<<^^^>v<^^v<v^v^>v<v^^>^<<^v<>>v<>>>>^^v>v>>^<^v>vv<^>^<<><<^<><v^>>^<<v^^v^^^<<<>^><>^<vv><v^>>v^<>^^<^<>v<v>^v<>v><<>^<^^^v><vvv>^<^<^><v^^>>>><>^><<v<>v>^^<^>^<><v><vv>v<vv<v^>>^^<<^v^<><^v<>^v<<v^v^v<><<<<<^^<^>v<v<><<>^v^>^v^v>^<^>^<v><^>v<<vv<<<<v^<^vv<>v^v>^v>>^v<>v<^vv<>>^^^<>v><><>><>v>^<vv^^^<^>>v^<v<vv<>v
|
|
||||||
vv<<>>vv<^>^^<<^>v>^v<<^^<v<><v^><<^^><vv>^>>vv<<>^v><>>>^^<<<v<<>^vv>vvv<<><<><v^^>v^<v^^>v>v>vv^>v>^v<v<<<vv>^<v><v<^>>^>>^v>><>^<^><<><>>>vv<<vv>>>v>><>vv<<>>v<vv^>v>^<vvv^^v>^vv<><vv^>^^<<<^^v<>v^^<<<><>v<^^>v<>^vv>^v>>^^^<><<^^^<<<v>>>^v^>vvv^v>v<^v<<>>^<v<<^>v^^v^<v<<><^<>^<vv^^v<>^<<v>>v><>><><<^v<<vv<<>v<^<<>>><>>vv^>^<<>^^v>^><v>^<<^v>^>v^>^vv<^v><^^v^<>v^<^>>^v<<v>^^^^^v^^>^<<v<<>v<v^^<<<><><^><^v<^<>v<^v^v>^<v^vvv>>v><^><><v<^^><^v^<<><v>^>^>^^v^<v<^<><<v<>^<>^>vvvv^v^v^v^v><><><>v^<v^v<<>^v^<v^^^v^<v^v<<v^<><<v<>>>vvv^<>^<^^vv^^<<<^v^>>>>>^^>>^>>^^>^v>vvv<<v<v^^<<<v<v^^^<>^^v>^<v^v<v^>^v<vv>^v^^<<^><vv>>v>v>^^>^<<^><>>^v^><>^^>v>^<<>^^><<v^<vvv>^v>^>>^^^<>>><<^^^<>>v^<><><>v^v>><v<^vvv><^<^<^v^>v^vvvv^v>>vv^>v<<^^^<<>>^<>vv><^><v^v<v^vvv^v^v>^v>v^<^^^v^>v^>^<>^v^v^v<<<^>^<>^>v<^>>>vv<<>>^vv<>^><v>^vvvv>v<<v>v^v<^vv<^^^v<^<>^><>>v>^><<^<>><^^<v^v>>^<v>v^^<^^vv^<<>><v<vv^^^>v<^v>>><<^^v><vv<v>^<^v^^^v<vv>>^^^^<^^^<^>v<^<>>^<^>vvv<^<v>><>v<^^>><^><^v<vvv^v^^><><<<^^v^^><^v<<>v
|
|
||||||
^vv<>v>^v>^<><vv^<>^v><vv^vv^^v^<<<v><>><><^>^^^^<<vv>v^<>^><>^v<<<v^^><v^<v^v^v^>vv<v<^>>>v^<<v>>v<v^>><>v>v^^<<<>>^v>^vvv<v^><vv^><^^^><^v>>v^vv<<>><>v<>>v<<<^<<<^<><<<<v><<v<v<><>>^v^vvvvvv^v^<<v^<^<>>v<<v^>v<>vv<><<<v>^v><><v^>>><^v^v>v<v<<<><vv>>v>>v><^v><<v>>^vv>v^v<v>^^>>>v>v^v>vvv<<<>>>v^v><<<>v>>^><<^vv<>><vvv><^>^vvv>v<<<<>^>v<^^<><v><^<^>>^vv<^v>^<v^<<>v^>^^>^^><^vv<<^<><<<v><^<<^v<vvv^>^v^>^><v^>>>^v^><<>>^^v^<<^<>>v^>vv><>^^<^>^^v^v<<>^^<v^<v^<<^<v>^v<>>><v<<^vv<><<^^^<>^^>^>v^^>^v^^<^>^^>vv>vvvv<^v>v<v^<^^v<v^^>^v<>^v<<^>>v>>^^v>^^v><vvv<>v><^^v<<<<v>vv^<><v>><<>vv^<<><^<<^^^<v<^>v>^<<<<^>v>^v^^><>^<^vv><vv>v>>^^>>^><^>^<^v^>^<v<^<^<^>>>^>v<<>><^^<<>vv><^<<<>v>^^v>v<v^^>vvv>v<>>><^^>^>^vvvv^vvvv<>v<^v^^^^v<>^^>v^^<^^<<^<>^v<^v>>v^<<^<>v^^v^^<vv><v<v^<^v<<^^v^<<<v<><^><vv^^^v>>v<>^<v^vv><>>^<><<v<<^v>^^^>><>v^<v<^^^v<v><^><^v^^>>v<<vv<<vv^<>^<>v^<>^vv>v<^^<^vv<>vv>>^vv>^v<<^>>^^>vv^><^><v^<^<^^>><v><vv^<<^<vv<v<v><^>^>v^v^vv>v<^>><^>v>v>v><>>^<<><^v<^^>v><v>>>^v><<>^v>>v>^
|
|
||||||
<v^>>^^>^><<<>v>>^><<><v<<^><>^<><>>^>>>v^vv<v<^v>^<<>^>^<vv^<^vv^>v<>>><v<v>>v<<vv^vv^>v<>v^>>v<<<<<v>>v<vv^v>v^v^<<v^^>v^>^>>vvv<>>^vv>^v^><<v<<>^^^<v<v>v<>>v^vv<v>^v^<^^v>>>v<>^v^<^vvv<><>>vv^>v<<<<>>vv<<vvv^^vvv^v^>>^v<v>>><^><^^^<vv^>>v<vv^<><<>>>v>^v^<^<vv>>v^^<v^v<<<><<vv^vvv^>v>v>>>v>^>^<vv>v<^<^^<^vv<v<>>^<>^v>vv>^<v^vv^>^>><^v^v>v<<v><<v<<>>v^^^>^^>^<>^>v>>v>><v<^<>>><v>vv><vv><>>^v^>>v^^v^><>^><>^^>>>v^<>>>v<v^>^>v^^>>>>v>v<^v>><v<>^v^><>^^<>^<<<>^<>>><v>>>v><>^v^v^<<<<v^^^^>^<<<<>v<^^^v><><>^^v^v<^^^<v<vvv<<^>^>^<^^<v<>^<<v^><v>>vvv<^v^>^v><>v^v^^<>>^v><<v<<<^v><v><<<v<v>vv^^>v<^^<><<<>>>>><<v><<^<>>^v<vvv>>vvv<<v^<^v^<>>v<<^><v^^<>>v>v<>><vv<<^v>^>^^v>><^<^<^^^v<v^vv>v^<><v<^vv><^^v<^<^<>^>^<v<^^>v>vv^v>^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<^v>^><vv<>v>v<^^<>v<v^^^<^<^^<v>^><v>^v^>>v^^>^v<v<>^>v<^vv^^^v<><v^vvv><>^^^>v^^>^<^^><^v^>><^^v>^^^v^>>><><v><<<>><<<<>v>^>>>^^^v<^^^><<>>>^v<><>v<^vvvv>^<><>^<<<>v^^v^^>vv
|
|
||||||
<><^>^v^>v^^^<>^^^<><>>>>vv<<v>^v><v^v^^^>v>^^><<>v>^<^v^vv^<vvvv<><>>^<v<<>^^^<v<^vv^v<^v>^v^>vv^><^><v<^^^>>^v^v^^vvvv>><<<v<<vvvv<>vvv><><^^>v^>><>^<>^^v^^v>^<v^<>>^^v<vv>^^>v^><^^v<^><>vv^<^^^>>vv^^<<<>>^^v^>v<^<^v>>>v>>><<vvvv<v<^^><>><><v^vvv>v^^v<>v>^v<<^^<v<<v<v<>vv^<<v<<^>>v^v>^<<<>>v^<>v^>vv>v^^>v<>v>v<v^^>>><>^<<^v^<v^v<^v^^v<><^<^<^vv>>^>vv^^>>^<><>^<v>>>vvv^>v^^>vv^vv<<>v><v<<^vvv><<v<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<v<^<>^v<<^v<v<v^^<<vv^^v<>vv^>^^<v>>>><>^>^^<v^v>>><<vv<<^>v>>>^v>^>>v<^^v<>^vv<v^>v>^^>>>v^>v<<v<^^^^><^<^v><^v>^^>^v>^<>v^<vv^><v<>^<>vv>v><><v><v^<vv><^v^>^^<<<<>><<><vvv<vvv>^^<<>v^><v^<^>^^>^^vv<^^v^^>^>vv>>^<>v><<v>v>v^^<v>^vv^vv>vvv^>vv>vv^<v>>>>v<^^><^>>vv>^><<><^><<v>v>><<v>>vv^<><<^<^<>^><v<<<>v>v^v<<v<^><>v^><<v^<>^^v<>^>vv^v<v<^<<v<vv<>>>>^^^v>>>^><<<^<^<^^v<<<v^<<^<><>><>^^vvv>^vv>>^v<v^^><><^v<><vv>v>^v^><>^v<<v>v^^^><^>v^vv<<<v<>vv>v<v^<<vv>><^v<^<v<vv>^^><^^<v>
|
|
||||||
<v^v><^<^v>vvv^v<^v^^>vv^><><>vvv<v<><v>><>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>^>vv<v^<>>^^v<^<>>><>vv>>vvv><^v>^v^v^<^>^vv><^<^>^<v<^>><^<><<^^vv<vv^<v><v^<>>>^>v^^^v<<v<v^<<^^^>><v^^^<^^><<vv^^<>^v^<><v^><^>>v^<v<v^^>^v<^>v>^<v<>^<>v<<^vv^v><^v^v<^vv^><><^^<<v^<^v^v>>v^<<^^vv^<<>^v^^^<<<><<>>^>^>v><<>v^<<>v<^v^<v^><><<v^^><^^<>vv>^vv^^v^v>^><^vvvv^v^<v<<vv<<^<v^>>^<^^vvvv^<^<v<<v>v<^<<<v><>v>><>>^<vv>v^^><>^v>^v><<<^^^^^<<^><<v^v<v>v^>v<v^<>>v>v^^^^v><^><vvv>>^>^><>v>vv<<<v^v<^<vv^<>>>^><>v<><^<><v^<>>^^<^>^^^v^^<<>>vv>><^<<v><<<>^v<<^v^v<<>^>^vv>><>v<<vv^>^^<>v^>v>>vv<^vv<v>>>>>v<<vvv<v><>v><><^<<^<^><<<<>v<v<<vv^v>>>v><>v<>v<^vv><<>v>><v^>v>vv><^>><>>>^^^>v>^<>v<v^v<><>v^<^v<>v^^^vvv^^v^vvv>vvv^v>>^<^>^v<^>>>^<>>^v<<>v<^<<^><<v^^>>>>^<><^v^^><>><^>vv>^>vv<^v^>v^^v^>^<^<v^>>^vvv>>vv^^vv^><<v>^^<<><^>^v^v>>^<v<><^<^^^<<^>v>>^vvv>v>><^>^<^v><v<<v><^v>^<v<vvvv>v<vv<v^^><v<^>^^<<^>^^<<>>vv^^<^
|
|
||||||
<<<^<^v<^v>>v<v<<>^^>><><^>v<vvvvv>v>^^^vvv<<<v^<^^<^^v<>>^>v>^><<<<v^v><^v<v<^>v<v<^>^v>^>><<^vv>^^<>v>>><v^>>><><^vv<>v<^><^>>>v<^>>v^<^>>>^>^>v^>vv>^>^<v<vv<<<<^^><v<>vv<v^<><<v^v>^^<^vv^<^><^<^<vv>^v^<<v^<v^<v^<^v<>><<^><^>>^<v^>^<^>^>^^<^v^>><^>>><><^^>v^v>vv^^v>^><<^<<<><<<^v>><vv^>>><<<>v<>^>^v^<>^><>^>><<<>>^v^vv^v^<^<<>^^<<^^>^^v<>^vv>v>v^^v^<vv^>><v<^>^v<^^v><v<^>^<^v><<>^<^^v<^^v^<><<>^<vv<^vv^^^>^<<v<>v>vv>><^>v>v<vv<vv^^><>^v>v<<<><vv<<^<v>v^<>vv<>^<^>vv^^<^<^>>><<vv<>v^^vv><<^<>^<<<>v><v>vv^><^>><>><^^><^v>v>><>><v^<v^v>v>>v^<vv>^<<>>v>vv^>^v>v<^>><>>vvv<<vv>^>^>^<vvv^v><vvv>^^>^>^>^><>v><^<v^^^<<<<<v^^<<^<<^^>>>vv><v<><^v>>^>>v^<^<<>>v<>v>v^^v^<>><>><>^>v><^<>^><>v><<<^v<<>>^^<^^>v^>^>^><v>>v^v^>^^v>vv^v<<v^^^v<>vvv><>^^>vvv^>vvvv>^^^>^<^^>v<^<vv>vvv<<>^<<<>^<vv^v>>^v>v>v^><><^>><v<^vvv>>>^>^<^^^<vvv>><>vvvvv<v^>^v<v<>v>^>^>>v^v^vv^>^>>v>>^^v>>^^><>v<^<<>>^>><vvvv>^^><^<vv>>>v><^>v^^><<v^v<<^<>^>v^<<>^><vvv^<><^^>>^><<vvv<v<>vv>>^^<<><vv<<>>>^><<v^^^><<v>^v>v<<v>v^>v<<>v
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -1,141 +0,0 @@
|
|||||||
#############################################################################################################################################
|
|
||||||
#.....#.....#...#.................#...#.......#.........#...#.......#...#.......#.......#...#...#.....#...#.......................#...#....E#
|
|
||||||
#.###.#.#.#.###.#.###.###.#######.#.#.#.#.###.#.###.###.#.#.#.###.#.###.#.#.#####.###.#.###.#.#.#.#.#.#.#.#.#####.#.###.#.#######.#.#.#.###.#
|
|
||||||
#...#.#.#.#...#.....#...#.#.....#...#...#.#...#.#...#...#.#.#...#.#...#.#.#...#...#...#.....#.#.#.#.#...#...#.....#.#.#.....#.....#.#.#...#.#
|
|
||||||
#.#.###.#.###.#.#####.#.#.###.###########.#.#####.###.###.###.###.###.#.#.#.#.#.###.#######.#.#.#.#.#########.#####.#.#.#####.#####.#.###.#.#
|
|
||||||
#.#.....#.#.#.#...#...#.#...#.....#.....#.#.....#.#.#.#.........................#.#.......#.#.#...#.....#...#.#...#.....#...#.#...#.#.....#.#
|
|
||||||
#.#######.#.#.#.###.#.#.###.#.#.#.#.#.###.#####.#.#.#.#.###.###.###.#.###.#.#.#.#.#######.###.#.#####.#.#.#.#.###.###.#.#.#.#.#.#.#.#######.#
|
|
||||||
#...#...#.#...#.#...#.#...#.#.#.#...#.#.......#...#...#...#...#.#.....#...#.#...#.......#...#...#.....#...#.#.....#...#...#...#.#.........#.#
|
|
||||||
###.#.###.#.#####.###.###.#.###.#.#####.###.#.#####.###.#.###.#.###.###.###.#####.#########.#.#.###.#.###.#.#####.#.###.#######.###########.#
|
|
||||||
#...#...#.#.#.....#...#...#.#...#.#...#.#...#.#...#...#.#.....#...#...#.#...........#.........#.#...#.#...#.........#.#.#.......#...........#
|
|
||||||
#.#####.#.#.#.#######.#.###.#.###.#.#.#.#.###.#.#####.#########.#.#.###.#.#####.###.#.#####.#.#.#.###.###.###.#####.#.#.#.#######.#########.#
|
|
||||||
#.#.....#.#...#.......#...#.#.#.....#.#...#.#.#...............................#...#.#...#...#...#.#.#.....#.#.....#...#.#.#.....#.......#...#
|
|
||||||
#.#.###.#.#####.#.###.###.#.#.#.#.###.#.###.#.###############.#.#.#.#.#####.#.#####.###.#####.#.#.#.#####.#.#####.###.#.#.#.###.#######.###.#
|
|
||||||
#.#...#.#.....#.#.....#...#...#.#...#.#.....#.#.....#.................................#...#...#...#...#...................#...#...#...#...#.#
|
|
||||||
#.###.#.#####.###.#.#.#.#####.#.#.#.#.#######.#.###.#.#######.###.#.#.#.#.###.#.#########.#.#.#.#.#.###.#.#####.#.###.#.#.###.#.#.###.###.#.#
|
|
||||||
#.#...............#.#...#...#.#...#.........#.....#.#.#.......#...#.#.#.#.#...#.#.....#...#.#.....#.....#.....#.#.....#.#.#...#.#...#...#...#
|
|
||||||
#.#.#####.#.#####.#.#####.#.#.###.#########.#.#####.#.#.#######.###.#.###.#.###.#.###.#.#.#.#.#########.#.###.#########.#.#####.###.###.###.#
|
|
||||||
#.#.#.....#.....#.#.#.....#.....#.....#...#.#.#.....#.#.#.......#.#.#.....#.#...#.#...#.#.#.#.........#...#.#.........#.#.........#...#...#.#
|
|
||||||
#.#.#.#####.#####.#.###.#######.#####.###.#.###.#####.#.#####.###.#.#######.#.#.#.#.#.#.###.#.#######.#.###.###.#.###.#.#########.###.#.#.#.#
|
|
||||||
#.#.......#...#...#...#...#...#.....#...#.#.#...#.#.....#.....#.....#...#...#.#...#.#.#.....#.#.......#.#.......#...#.#.....#.......#.#.....#
|
|
||||||
#.#######.###.#.#####.#.###.#.#########.#.#.#.###.#.#####.###.#######.#.#.#########.#.###.###.#.#######.#.#####.###.#.#####.#.###.###.#.#.#.#
|
|
||||||
#.....#...#...#...#.#.#.#...#.#.........#.#...#...#...#...#.#.#.......#...#.......#.#.#.......#.........#.........#.#...#.#.#...#.....#.#.#.#
|
|
||||||
#####.###.#.#.###.#.#.###.###.#.#########.#####.#####.#.#.#.#.#.#############.###.#.#.###########.#######.#######.#.#.#.#.#.###.#######.#.#.#
|
|
||||||
#...#...#.#.#.#...#.......#.#.#.#.......#.......#.....#.#.#...#.............#.#...#.#...#.......#.........#...#...#...#...#...#...#.....#.#.#
|
|
||||||
#.#.###.#.#.#.#.###########.#.#.###.###.#.#.#####.#####.#.#####.#.#########.#.#.###.###.#.###.#.###########.###.#####.###.#.#####.#.#####.#.#
|
|
||||||
#.#.#.#.#.#.#.#.....#.....#...#...#.#.....#.#.....#.#...#.....#.#.#.......#.#.#...#.#.....#...#.#.....#.....#...#.......#.#.................#
|
|
||||||
#.#.#.#.###.#.#####.#.###.#.#####.#.#######.#.#####.#.#####.#.#.#.#####.###.#.###.#.#########.#.#.###.#.###.#.###.#####.#.###.###.###.#.###.#
|
|
||||||
#.....#.#...#.....#...#...#...#...#.#.....#.#...#.#...#.....#...#.#.....#...#.#...#...#.......#...#...#...#.#.#...#.....#.#.#.........#...#.#
|
|
||||||
#.#####.#.#######.#####.#####.#.###.#.###.#####.#.#.#####.#.#####.#.#####.###.#.#####.#.###.#######.#######.#.###.#.#####.#.###############.#
|
|
||||||
#.#.....#...#...#...#...#.....#.#...#.#.#.......#.#.......#.....#.#.....#.#...#.......#.#...#.......#.....#.#.....#.....#.......#.........#.#
|
|
||||||
#.#.#######.#.#.###.#.#######.#.#.###.#.#########.#############.#.#.###.#.#.###.#########.#.#.#########.#.#.#####.#####.#####.###.#######.#.#
|
|
||||||
#...#.....#...#...#.#.......#...#...#...#.........#.......#...#...#...#.#.#...#.#...#...#.#.#.#.....#...#.#.....#.....#.....#.#...#.....#...#
|
|
||||||
#.###.#.#.#.#####.#########.###.###.###.###.###.#.#.###.#.#.#.#########.#.#.#.###.#.#.#.#.###.#.###.#.###.#.#.#######.#####.#.#.###.#.#####.#
|
|
||||||
#.#.....#.#.#...#...#.......#.............#.#.#.#.#.#...#...#.#.........#.#.#.....#.#.#.#.#.....#.....#.#.#.#...........#...#.#...#.#.#...#.#
|
|
||||||
#.#.#.###.###.#.###.#.#########.#####.###.#.#.#.#.#.#.#########.#.#####.#.#########.#.#.#.#.#######.###.#.###########.###.###.###.#.###.#.#.#
|
|
||||||
#...#...#.....#.....#.#.........#.....#...#.....#.#.#.#.....#...#.#...#.#.#.......#...#.#...#.#...#...#...#.............#.#...#...#.....#.#.#
|
|
||||||
#####.#.#######.#####.#.#.#############.#####.#.###.#.#.###.#.###.#.#.###.#.#####.#####.#.###.#.#.#.#.#.###.###########.#.###.#.###.#####.#.#
|
|
||||||
#.#...#.......#.#.....#.#.#...#.............#.#.#...#.....#.....#...#...#.#...#.#...#...#.#...#.#.#.#.#...#.#...#.....#.#.#.....#...#...#...#
|
|
||||||
#.#.#.###.#####.#.#####.###.#.#.###########.###.#.#############.#######.#.###.#.###.#.###.#.###.#.#.#.#.#.#.#.#.#.#####.#.#.#.###.###.#.#####
|
|
||||||
#...#...#...#...#.#.#.......#.#.#.......#.....#.....#.........#.........#...#.#.....#...#...#...#.#.#.#.....#.#.#.........#.#.#...#...#.#...#
|
|
||||||
#.###.#.###.#.###.#.#.#######.#.#.#####.#####.#.#####.#######.#.#####.#.###.#.#.#######.###.#.###.#.###.###.#.#.#.#########.#.#.#####.#.#.#.#
|
|
||||||
#.......#...#...#.#.........#...#...#.#.....#.#...#...#.#.....#.#.....#...#...#...#...#.....#...#.#.....#.....#.#.#.........#.#.......#.#.#.#
|
|
||||||
#.###.#.#.###.#.#.###.#########.###.#.#####.#.#####.###.#.#######.#######.#######.#.#.#.###.###.#.#.#####.#####.#.#.#########.#########.#.###
|
|
||||||
#.#.....#.....#.#...#.#.......#.#...#.....#.#.......#.....#.......#...#.....#...#...#.#.#...#...#.#.#.....#...#.#.#.#.........#.....#...#...#
|
|
||||||
#.#.#.#######.#.#.#.###.#.###.###.###.#####.#.#.###.#.#########.#.#.#.#.#####.#.###.#.###.#.#.###.###.#####.#.#.###.#.#####.###.###.#.###.#.#
|
|
||||||
#.#.#.....#...#.#.#.#...#...#.#...#.....#...#.........#.........#.#.#.#.#.....#.....#.#...#...#.#...........#.#...#.#.#...#.......#.#...#.#.#
|
|
||||||
#.#.#.###.#.#.#.#.#.#.#####.#.#.#######.#.###.#########.#.###.#####.#.###.#####.#####.#.###.###.#######.#########.#.###.#.#####.#.#.###.###.#
|
|
||||||
#.#.#.....#.#.#.#.#.#.......#.#.#...#...#.#.#...#.#.....#.#...#.........#...#...#...#.#.#...#...#.....#.#.....#...#.....#.#.....#.#.........#
|
|
||||||
#.#.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.###.#.###.#.#.#####.#####.###.###.###.#.###.#.#.#.#.###.#.#.###.###.###.#.#.#####.#.#.###.#.#########.#
|
|
||||||
#.#.......#.#.#...#.#.#.#.#.#.#...#.#.#...#.#...#...#...#.#...#...#...#...#.#.....#.#.#.#.#...#.#.#...#...#.#.#.#.........#...#.#.....#...#.#
|
|
||||||
#.#######.#.#.###.#.#.#.#.###.#####.#.#.###.#.#####.#.#.#.#.#.###.###.###.#.#######.#.#.#.#.#####.#.###.###.#.#.#####.#.#####.#.#######.#.#.#
|
|
||||||
#.#.......#.#...#.#.#...#...#.#.......#.#...#.....#.#.#...#.#...#.....#.#.#.......#...#.....#.....#...#.#.....#.....#.#.#.....#.........#.#.#
|
|
||||||
#.#.#####.#.###.#.#.#.#.###.#.#.#######.#.#.#####.#.#.###.#.###.#.###.#.#.#######.###########.#######.#.#.#########.###.#.###############.#.#
|
|
||||||
#.#...#...#.#...#.#...#.#...#...#.#.....#.#.#.....#.#.#...#...#.........#...................#.#.....#.#.#.........#...#...#.......#.......#.#
|
|
||||||
#.###.#.#.#.#####.###.###.#.#####.#.#####.#.#.#####.#.#.#####.#########.###################.#.#.#####.#.###.###.#.###.#####.#######.#######.#
|
|
||||||
#...#...#...#.....#.......#.....#.#.#.....#...#.........#...#...#.....#...#...........#.#.....#.......#...#.....#.......#...#.....#.#.....#.#
|
|
||||||
###.###.#.###.#####.###########.#.#.#.###########.#.#####.#.###.#.###.###.#.#########.#.#.#######.#####.#.###########.#.#.#.#.###.#.###.###.#
|
|
||||||
#...#...#...........#.#.....#.....#.#.#.......#...#.#.....#.....#.#.#.#...#.#.#.....#.#.....#...#.....#.#.................#.#.#.#.#...#.....#
|
|
||||||
#.#.#.#####.###.#####.#.###.#.###.#.#.###.###.#.#####.#######.###.#.#.#####.#.#.#.###.#.#####.#.#####.#####.#########.#####.#.#.#.#.#.###.###
|
|
||||||
#.#.#.#...#.#.......#.....#.....#.#.#.#...#.#.#.......#.....#...#.#.#...#.......#.....#...#...#.#...#.....#.........#...#...#.#...#.#...#...#
|
|
||||||
#.###.#.#.###.###.#.###########.#.#.#.#.###.#.#.#.#####.###.###.#.#.###.#.#########.#######.###.###.#####.#########.###.#.###.#.#######.#####
|
|
||||||
#.#...#.#.....#...#.#.........#...#.#...#...#.#.....#...#...#...#.#.#...#.........#.........#.#.#...#...#...#.....#...#.#...#.#...#...#.....#
|
|
||||||
#.#.###.#.#####.#.#.#.#######.#.###.#####.###.#.###.#.###.#######.#.#.###.#######.###########.#.#.###.#.###.#.#####.###.#####.###.#.#.#.###.#
|
|
||||||
#...#...#.....#.#...#.#.....#.#.#...#.....#...#.....#...#.........#.#.#.........#.......#...#...#.....#...#.#...........#...#...#...#.......#
|
|
||||||
#####.###.#.###.#####.#.#.###.###.###.#####.#######.###.###.#######.#.#########.#.#.###.###.#.#########.###.#########.###.#.###.#######.###.#
|
|
||||||
#.....#...#.....#.....#.#.......................#...#...#.........#.#.......#...#.#...#...#.#.......#...#...#.........#...#...#.......#.....#
|
|
||||||
#.#####.#.#######.#################.#########.#.#.###.###.#####.#.#.#######.#####.###.###.#.#.#.###.#.#.#.###.###.#####.#####.#######.#.#####
|
|
||||||
#.#.#...#...#.................#.#...#.........#.......#.#.#.#...#...#...#...#...#.......#.#.#.#...#...#.#.....#...#...#...#.........#.......#
|
|
||||||
#.#.#.#.#.###.###.###########.#.#.###.#################.#.#.#.#####.#.#.#.###.#.#########.#.#.###.#####.#######.###.#.###.#########.###.###.#
|
|
||||||
#.#.#...#.........#.....#.....#.#.#.....#...#.............#.#.#.....#.#.......#.........#.#.#...#.........#.......#.#...#...#.....#.#.....#.#
|
|
||||||
#.#.###.#.#######.#####.#.#####.#.#.###.#.#.###.###.###.#.#.#.#######.#################.#.#.###.#.#.#####.#.#######.###.###.#.###.#.#.###.#.#
|
|
||||||
#.#...#.#.....#.........#.#.....#.#.#...#.#...#...#...#.#.....#.......#.........#.......#.#...#.#.#.....#.#.#...#...#...#...#...#.#...#.#.#.#
|
|
||||||
#.#.###.#.###.###########.#.###.#.###.###.###.#######.###.#.#.#.###############.#.#######.#.#.#.###.###.#.#.#.#.#.###.#.#.#####.#.#####.#.#.#
|
|
||||||
#.#.....#.#...............#.#...#...#...#...#.#.....#.......#...........#.....#.#.#.......#.#.#.....#.#.#.#...#.#.#.......#.....#.......#...#
|
|
||||||
#.#.###.#.#.#################.###.#.#.#.###.#.#.###.#######.###########.#.###.#.#.#.###.#.###.###.#.#.#.###.#####.#.###########.#.#####.###.#
|
|
||||||
#.#...#...#.#...#...#.........#...#.#.#...#.#...#.#.#.....#.#.....#...#.#...#...#...#.#...#...#...#...#.....#.....#.....#.......#.....#...#.#
|
|
||||||
#.###.#.#####.#.#.#.#####.#.###.#.#.###.#.#.#####.#.#.###.###.###.#.#.#.###.#########.#####.#.#.#####.###.#.#.#######.###.#####.#####.###.#.#
|
|
||||||
#.#...#.......#.#.#...#...#.#...#...#.....#...#...#...#.#.....#.#...#.#...#.#.#.......#.......#.....#.......#.#.#.....#...#...#.#.....#...#.#
|
|
||||||
#.#.###.###.###.#.###.#.###.#.#######.#.#####.#.#.#####.#######.#####.###.#.#.#.###.#.#.#####.#####.#########.#.#.#####.###.#.#.###.###.#.#.#
|
|
||||||
#.#.#.....#.....#.#.....#.#.#.........#.......#.#.........#.............#.#.#.....#.#.#.#.....#.....#.......#.#...#...#.#...#.#...#...#.#.#.#
|
|
||||||
#.#.#.#.#.#.#####.#######.#.#####.#####.#.#########.###.#.#.#####.#####.#.#.#######.#.###.###.#.#.###.#####.#.###.#.#.#.###.#.#.#.#.#.#.#.#.#
|
|
||||||
#.#...#.#...#...............#...#.#...#.#.#.......#...#.#.#...#.......#.#.#.#.......#.#...#.#.#.#.......#...#.......#.......#...#.#.#...#.#.#
|
|
||||||
#.#####.#.#.###.#######.#####.#.#.#.#.###.#.#####.#####.#.#.#.#.#.###.#.#.#.#.#######.#.###.#.#.#######.#.###.###########.#####.#.#.#######.#
|
|
||||||
#.....#...#...#.#...#...#.....#...#.#.#...#.#...........#.#...#.#...#.#.#.#.#...#...#...#.#...#.........#.#.....#...#.............#.#.......#
|
|
||||||
#.#.#.#.###.#.###.#.#.###.#.#######.#.#.###.#.#.#########.#.#.#.###.#.#.#.#.#.#.#.#.#####.#.#########.###.#.#####.#.#.#########.###.#.#######
|
|
||||||
#.#.#.......#.#...#.#.....#.......#.#...#...#.#.#.......#...#.#.#...#...#.#...#...#.#.........#.......#...#...#...#.#.#...#.....#...#...#...#
|
|
||||||
#.#.###.#####.#.###.#.#########.###.#######.#.###.#####.###.###.#.###.#######.#####.#.#######.###.#.###.#####.#.###.#.#.###.###.#.#.###.###.#
|
|
||||||
#...#...........#.#.#...........#...#.......#.........#.....#...#...#.#.....#.....#.......#...#...#.#...#.....#.#.....#...#...#.#.#...#.....#
|
|
||||||
#.###.#.###.#.#.#.#.###########.#.###.#.#################.###.#####.#.#.###.#####.#.#####.#.###.###.#.#####.###.#######.#.###.#.#.###.#####.#
|
|
||||||
#.....#.....#.....#.......#.....#...#.#...#.............#...#.....#.#.#...#.....#.#.....#.#.....#...#.#...#...#.....#...#.....#.#.#.#.....#.#
|
|
||||||
#.#######.###########.###.#.#######.#.###.#.###.#.#####.#########.#.#.###.###.#.#.###.###.#######.###.#.#.#.#######.#.#########.#.#.###.#.#.#
|
|
||||||
#.#.....#.......#...#...#.#...#.........#...#.#...#...#...........#.....#...#.....#...#...#.........#...#.#.#.......#.#.#.....#...#...#.#.#.#
|
|
||||||
#.#.###.#########.#.###.#.###.#.#######.#####.#.###.#########.#.#.#########.#######.###.###.#######.#####.###.#######.#.#.###.#.###.#.#.###.#
|
|
||||||
#.#.#.#...........#.#...#.#...#...#...#...........#.....#...#.#.#...#.....#.....#.....#.#.....#...#.#...#.....#.....#.#.....#.......#.#.#...#
|
|
||||||
#.#.#.#############.#####.#.#####.#.###.#.#########.###.#.#.#.#####.#.#.#####.#.#######.###.###.#.#.#.#.#######.###.#.#############.###.#.###
|
|
||||||
#.#.#...#...#.......#.....#.#.#...#.#...#.......#.....#.#.#.#.....#...#.....#...#.....#.....#...#.#...#...#.....#...#.............#...#...#.#
|
|
||||||
###.#.###.#.#.#######.#####.#.#.#.#.#.#####.###.#.###.#.#.#.#.#.#########.#.#.###.###.###.#.#.###.#.#####.###.###.###############.###.#####.#
|
|
||||||
#...#...#.#.#...#...#.........#.#.........#...#...#...#.#.#.#.#.............#.....#.#...#.#...#...#.#...#.....#...#.......#.....#...#.......#
|
|
||||||
#.###.#.#.#.#.#.#.#.###.#####.#.#########.#.#.#####.#.#.#.#.#######.###.#.#########.###.#.#####.#.###.#.#######.###.#####.#.#.#.###.#.#####.#
|
|
||||||
#.................#...#.....#.#.....#.#...#.#.....#.#.#.#.#.........#...#.....#.......#.#.#.....#.#...#.#.........#.....#.#...#.#.#...#...#.#
|
|
||||||
#.#.#.#.#####.#.#.###.#####.#######.#.#.###.#####.#.#.#.#.#########.#######.#.#.#####.#.#.#.#####.#.###.#.#.#####.#####.###.#.#.#.#####.###.#
|
|
||||||
#...........#...#.#.........#...#...#.#...#.....#...#.#.#...#.....#.#.....#.#...#.#...#.#.#.#.....#.#.#.#.#.#...............#.#.......#.....#
|
|
||||||
#.###.#.###.#.###.#########.#.#.#.###.###.#####.#####.#.###.#####.#.#.###.#.###.#.#.#.#.#.#.#.#####.#.#.###.#.###########.###.#########.#####
|
|
||||||
#.#.........#.....#.........#.#.#.#.#.....#...#...#.#.....#.....#...#.#...#.#.....#...#.#.#.#.#.....#.#...#.#.#...#.......#.#...#.......#...#
|
|
||||||
#.###.#.#.###.###.#.#####.###.#.#.#.#.#####.#.#.#.#.#####.#####.#.###.#.###.#.###.###.#.###.#.#.#####.###.#.#.#.###.#######.###.#.#########.#
|
|
||||||
#.......#...#.......#...#.#...#.#.#...#.....#.#.#.#.....#.#...#.#...#.#.#...#...#...#.#...#.#.#.#.......#.#.....#...#.....#...#...#.#.......#
|
|
||||||
#####.#.###.#.#####.#.###.#.###.#.###.###.###.###.#.###.#.#.#.#.###.#.#.###.###.#####.###.#.#.#.#.#.###.#.#######.#####.#.###.#####.#.###.#.#
|
|
||||||
#.......#.....#.....#...#.#.#...#...#.....#.#.#...#...#.#.#.#.#.#...#.#.......#.#.....#...#.#.#.#.#...#.#...#.....#.....#...#...#.......#...#
|
|
||||||
#.#####.#######.#####.#.#.#.#.#####.#######.#.#.#####.#.#.###.#.#####.#.#.###.#.#.#####.###.###.###.#.#.###.#.#####.#######.#.###.#########.#
|
|
||||||
#.#.....#.......#.....#.#.#.#.......#...........#...#.#.#.....#.....#...#.....#.#.....#.#.#...#.....#.....#.........#.....#.#.....#.....#...#
|
|
||||||
#.#.###.#.#######.#.###.#.#.#########.###########.#.#.#.#####.#####.###.#######.#.#####.#.#.#.#######.#####.###.#.###.#.###.#.#.###.###.#.#.#
|
|
||||||
#.#.#.....#.....#.#...#.#.#.....#...#...#...#.#...#.#.#.....#.#.......#.....#.....#...#.#.#.#.........#.....#.#.#...#.#.....#...#...#.#...#.#
|
|
||||||
#.#.#.#.###.#####.#.#.#.#.#####.#.#.#####.#.#.#.###.#.###.###.#.###.#.#####.#######.#.#.#.#.###.#####.#.###.#.#.#.#.#.###.#.###.#.###.#####.#
|
|
||||||
#.#.#.#.....#...#...#.#.#.....#...#.......#.#.#.#.#.#.#.#.....#.#.......#.#.#.....#.#.....#.#.......#.#.#...#.#.#...#...#.#...#...#.......#.#
|
|
||||||
#.#.#.#.#####.#.#.#.#.#.###.###.###########.#.#.#.#.#.#.#######.#.#####.#.#.#.###.#.#####.#.#.#####.#.#.#.###.#.#.#.#####.###.#.###.#####.#.#
|
|
||||||
#...#.#.......#.#...#.#.....#...#.........#.#.#...#.#.......#.#.#.#...#...#...#...#...#...#.#.....#...#.#.....#.#.#.....#...#...#.#.#.......#
|
|
||||||
#.###.#.#######.#####.###.#.#.#.#.#####.###.#.###.#.#######.#.#.###.#.###.#####.#.###.#.#.#.###.#.###.#.#####.#.#.#####.#.#.###.#.#.#.#.###.#
|
|
||||||
#.#...#.#...#...#...#...#.#...#.#.....#.....#.....#.......#...#.....#.#.#.#.....#...#.#.#...#...#.#.......#...#.#.....#.#.........#.#.#.....#
|
|
||||||
#.#.###.#.#.#.#.#.#.###.#.#####.#.#.#.#######.#####.#.#####.#.#######.#.#.#.#########.#.#####.#.#.#.#####.#.#.#.#####.#.###.#.#.###.#.#####.#
|
|
||||||
#.#.#...#.#.#.#.#.#.....#...#...#...#.#.......#...#.#.#.....#...#...#.#...#.....#...#.#.......#.#.........#.#.#.......#...#.#...#...#.......#
|
|
||||||
#.#.#.###.#.#.#.#.#######.###.#.#####.#########.#.###.#.#####.#.###.#.#########.#.#.#.###.#.#####.#########.#.#######.#.#.#####.#.#########.#
|
|
||||||
#...#.....#.#.#.#...#...#...#.#.....#.........#.#...#.#.#.....#.....#.#.........#.#...#.#.#.....#.#...#.....#.......#.#.#...#...#.#.....#...#
|
|
||||||
###########.#.#.###.#.#.###.#.###.###########.#.###.#.#.#.#######.###.#.#######.#.#####.#.#.###.#.#.###.###.#######.#.#.###.#.#.#.#.#.#.#.#.#
|
|
||||||
#.#.......#.#.#...#.#.#...#.#.....#.......#.#.#.......#.#.........#...#.........#.....#...#.#.....#.#.....#.......#.#.#...#.#.#...#.#.#.#.#.#
|
|
||||||
#.#.#####.#.#.###.#.#.#.#.#.#####.#.#.###.#.#.#.#.###.#.###.###.#.#.#.#######.#####.#.#.###.###.###.#.#####.#####.#.#.###.#.#.#.#####.#.#.#.#
|
|
||||||
#.......#.#.#...#.#.#.#.#.#...#.....#...#...#.#.#.#...#...#...#...#.#.#.....#.#.........#.#...........#...#...#.#...#.#...#.#.......#.#...#.#
|
|
||||||
#########.#.###.#.#.#.#.#.#.#.#.#####.#.#.###.#.#.#######.#.#.#####.#.#.#.###.#.#####.###.#####.#######.#.###.#.#####.#.###.#######.#.#####.#
|
|
||||||
#.......#...#...#.#.#.#.#.#.#.........#...#...#.#.#...#...#.#.....#.#.#.#...#...#...#.#...#...#.......#.#.#.........#.#...#...#.#...........#
|
|
||||||
#.#####.#####.###.#.#.#.###.#########.###.#.#####.#.#.#.#########.#.#.#.###.#####.#.#.#.#.#.#.#.#####.#.#.###########.#######.#.#.###.#.#####
|
|
||||||
#...#.........#...#.#.#...#.#.......#...#...#.....#.#...#.........#.#.#...#.#.....#.#.#.#.#.#.......#.#.#.........#...#.....#.#.............#
|
|
||||||
#.#.###########.###.###.#.#.#######.#.#.#####.#####.#####.#######.#.#.#.#.#.#.###.#.#.#.#.#.#######.#.#.#########.#.###.###.#.#.#.#####.###.#
|
|
||||||
#.#.#.......#.............#.....#...#.....#.......#.#.....#...#...#.#.#...........#.#.#.#.#.#...#...#...#.#.......#.#...#.......#.........#.#
|
|
||||||
###.#.#####.###.#.###.###.###.#.#.###.#.###.#####.#.#.###.#.#.#.###.#.#.#######.###.#.###.#.###.#.#######.#.#######.#.#.#######.#######.#.#.#
|
|
||||||
#...#.....#...#.....#.#...#...#.#.....#...#...#...#.#.#...#.#.#...#.#.#...#.#...#...#...#.#.....#.....#.......................#...#.....#.#.#
|
|
||||||
#.#######.###.#.###.#.#.#.#.#.#.#.###.#.#.###.#.###.#.#.###.#.###.#.#.###.#.#.#########.#.###.#####.#.###.#.#.###.#.#########.#.#.#.###.#.#.#
|
|
||||||
#.......#.#.#...#...#...#...........................#.#.#...#.#...#.#...#...#.....#...#.#.....#.....#...#.#.#...................#.#.#...#...#
|
|
||||||
#.#.###.#.#.###.#.#.#########.#.###.#.#.###.#.#########.#.#.###.###.#######.#####.#.#.#.#.#####.#######.#.#.###.#.#########.#.#.###.#.#.###.#
|
|
||||||
#.#.#.#...#...#.#.#.......................#.#.#.........#.#.#...#.#.#.....#.#...#...#...#...#...#.......#.#.....#...#.......#.#.#...#.....#.#
|
|
||||||
#.#.#.#####.#.#.###.###########.#########.#.#.#####.#####.#.#.###.#.#.#.###.#.#.#############.###.#######.#########.#.#######.#.#.#####.#.#.#
|
|
||||||
#S..........#.#...........................#.........#.....#.......#...#.......#...............#...................#...........#.........#...#
|
|
||||||
#############################################################################################################################################
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
@@ -13,6 +13,6 @@ require github.com/spf13/pflag v1.0.5 // indirect
|
|||||||
require (
|
require (
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.0 // 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
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user