day9,10,11
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
package day08
|
package day08
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "fmt"
|
"fmt"
|
||||||
_ "adventofcode2023/utils"
|
_ "adventofcode2023/utils"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -22,6 +22,7 @@ func Part1(input string) int {
|
|||||||
|
|
||||||
func Part2(input string) int {
|
func Part2(input string) int {
|
||||||
instructions, nexts, network := parseInput2(input)
|
instructions, nexts, network := parseInput2(input)
|
||||||
|
fmt.Println(nexts)
|
||||||
ans := 1
|
ans := 1
|
||||||
for _, next := range nexts {
|
for _, next := range nexts {
|
||||||
ans = lcm(ans, getSteps(next, instructions, network, false))
|
ans = lcm(ans, getSteps(next, instructions, network, false))
|
||||||
@@ -91,6 +92,7 @@ func getSteps(next string, instructions []rune, network Network, partOne bool) i
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if next[2] == 'Z' {
|
if next[2] == 'Z' {
|
||||||
|
fmt.Println(next)
|
||||||
return steps
|
return steps
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
71
2023/go/day09/day09.go
Normal file
71
2023/go/day09/day09.go
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
package day09
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"adventofcode2023/utils/inputs"
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
func Part1(input string) int {
|
||||||
|
ins := parseInput(input)
|
||||||
|
ans := 0
|
||||||
|
for _, in := range ins {
|
||||||
|
ans += f1(in)
|
||||||
|
}
|
||||||
|
return ans
|
||||||
|
}
|
||||||
|
|
||||||
|
func Part2(input string) int {
|
||||||
|
ins := parseInput(input)
|
||||||
|
ans := 0
|
||||||
|
for _, in := range ins {
|
||||||
|
reverse(in)
|
||||||
|
ans += f1(in)
|
||||||
|
}
|
||||||
|
return ans}
|
||||||
|
|
||||||
|
func f1(in []int) int {
|
||||||
|
out := []int{}
|
||||||
|
for i:=0;i<len(in)-1;i++{
|
||||||
|
out = append(out, in[i+1] - in[i])
|
||||||
|
}
|
||||||
|
if allZero(out) {
|
||||||
|
return in[len(in) -1]
|
||||||
|
} else {
|
||||||
|
return in[len(in) -1] + f1(out)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func reverse(nums []int) {
|
||||||
|
for i, j := 0, len(nums)-1; i < j; i, j = i+1, j-1 {
|
||||||
|
nums[i], nums[j] = nums[j], nums[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func allZero(in []int) bool {
|
||||||
|
for _, v := range in {
|
||||||
|
if v != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func diff(in []int) []int {
|
||||||
|
out := []int{}
|
||||||
|
for i:=0;i<len(in)-1;i++{
|
||||||
|
out = append(out, in[i+1] - in[i])
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseInput(input string) ([][]int) {
|
||||||
|
lines := strings.Split(input, "\n")
|
||||||
|
out := [][]int{}
|
||||||
|
for _, line := range lines {
|
||||||
|
out = append(out, inputs.ToInts(line, " "))
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
23
2023/go/day09/day09_test.go
Normal file
23
2023/go/day09/day09_test.go
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
package day09
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestPart1(t *testing.T) {
|
||||||
|
r := Part1(
|
||||||
|
`0 3 6 9 12 15
|
||||||
|
1 3 6 10 15 21
|
||||||
|
10 13 16 21 30 45`)
|
||||||
|
require.Equal(t, 114, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPart2(t *testing.T) {
|
||||||
|
r := Part2(
|
||||||
|
`0 3 6 9 12 15
|
||||||
|
1 3 6 10 15 21
|
||||||
|
10 13 16 21 30 45`)
|
||||||
|
require.Equal(t, 2, r)
|
||||||
|
}
|
||||||
200
2023/go/day09/input.txt
Normal file
200
2023/go/day09/input.txt
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
12 20 25 35 64 137 305 670 1420 2874 5537 10165 17840 30055 48809 76712 117100 174160 253065 360119 502912
|
||||||
|
4 13 35 72 138 283 626 1388 2906 5608 9961 16503 26276 42338 73621 143357 305888 678423 1499107 3231106 6746590
|
||||||
|
-6 -9 -13 -18 -24 -31 -39 -48 -58 -69 -81 -94 -108 -123 -139 -156 -174 -193 -213 -234 -256
|
||||||
|
18 36 73 131 225 404 773 1526 3020 5945 11675 22920 44839 86819 165175 307081 556102 979762 1679653 2804665 4567997
|
||||||
|
17 31 46 67 109 199 385 775 1650 3729 8722 20406 46627 102917 218904 449526 894459 1731467 3273058 6061549 11026301
|
||||||
|
2 6 26 71 146 246 345 385 290 59 36 1541 8237 29022 84081 217384 522055 1190948 2615907 5580283 11629317
|
||||||
|
12 21 26 32 65 187 511 1216 2562 4905 8712 14576 23231 35567 52645 75712 106216 145821 196422 260160 339437
|
||||||
|
19 40 72 106 141 209 426 1095 2907 7321 17258 38315 80781 162797 315036 587344 1058110 1848293 3145159 5247819 8660620
|
||||||
|
13 13 23 70 203 501 1092 2208 4327 8488 16904 34050 68520 136271 266715 515104 988950 1904948 3709702 7328655 14662978
|
||||||
|
24 39 54 69 84 99 114 129 144 159 174 189 204 219 234 249 264 279 294 309 324
|
||||||
|
7 23 56 125 258 487 856 1466 2597 4971 10261 22027 47409 100206 206569 415728 820556 1597628 3086552 5949705 11498367
|
||||||
|
3 4 13 37 81 153 291 637 1607 4241 10866 26285 59856 129126 266300 530120 1028523 1963486 3722239 7065077 13510923
|
||||||
|
14 24 57 142 319 639 1167 1988 3216 5006 7569 11190 16249 23245 32823 45804 63218 86340 116729 156270 207219
|
||||||
|
0 3 18 73 223 574 1330 2878 5932 11776 22703 42884 80178 149892 282329 537277 1030620 1981333 3791768 7181107 13402261
|
||||||
|
1 2 7 22 71 206 514 1121 2193 3934 6581 10396 15655 22634 31592 42751 56273 72234 90595 111170 133591
|
||||||
|
10 23 53 118 259 555 1140 2226 4144 7426 12968 22337 38311 65782 113288 195931 341930 608937 1125228 2190007 4505341
|
||||||
|
8 24 59 130 257 463 774 1219 1830 2642 3693 5024 6679 8705 11152 14073 17524 21564 26255 31662 37853
|
||||||
|
-5 -1 24 79 168 290 439 604 769 913 1010 1029 934 684 233 -470 -1481 -2861 -4676 -6997 -9900
|
||||||
|
15 30 63 114 187 312 590 1276 2932 6720 14984 32418 68369 141221 286394 570321 1113889 2130302 3984201 7281214 12999963
|
||||||
|
14 33 65 120 219 398 725 1342 2547 4946 9746 19341 38473 76428 150937 294658 565256 1060083 1936163 3435442 5913859
|
||||||
|
13 23 49 105 201 338 503 664 765 721 413 -317 -1671 -3900 -7309 -12262 -19187 -28581 -41015 -57139 -77687
|
||||||
|
17 32 46 59 69 68 32 -100 -463 -1324 -3166 -6803 -13531 -25320 -45052 -76810 -126223 -200872 -310762 -468865 -691739
|
||||||
|
14 17 25 48 110 259 586 1269 2665 5480 11054 21805 41883 78092 141145 247324 420624 695467 1120079 1760630 2706244
|
||||||
|
14 8 9 30 85 189 358 609 960 1430 2039 2808 3759 4915 6300 7939 9858 12084 14645 17570 20889
|
||||||
|
16 43 85 156 281 496 848 1395 2206 3361 4951 7078 9855 13406 17866 23381 30108 38215 47881 59296 72661
|
||||||
|
19 44 91 172 296 466 677 924 1251 1918 3844 9613 25529 65528 158335 360406 779575 1619184 3262021 6431310 12498130
|
||||||
|
0 4 12 44 135 335 709 1337 2314 3750 5770 8514 12137 16809 22715 30055 39044 49912 62904 78280 96315
|
||||||
|
16 24 46 91 161 248 338 441 691 1595 4568 13006 34383 84308 194283 426251 899158 1835982 3644382 7050745 13316497
|
||||||
|
7 29 70 137 240 394 619 949 1478 2503 4891 10937 26256 63759 151635 348678 772493 1649381 3399400 6776661 13093860
|
||||||
|
4 4 5 13 34 74 139 235 368 544 769 1049 1390 1798 2279 2839 3484 4220 5053 5989 7034
|
||||||
|
4 -4 -7 8 59 169 365 671 1095 1624 2264 3194 5144 10157 22954 53189 118958 252012 505219 962924 1754969
|
||||||
|
26 42 74 139 263 487 877 1543 2672 4587 7863 13560 23658 41777 74239 131622 231718 407726 733983 1402568 2931267
|
||||||
|
11 33 70 131 245 486 1027 2238 4843 10151 20376 39061 71621 126020 213597 350056 556635 861469 1301162 1922583 2784901
|
||||||
|
23 36 60 110 212 411 788 1488 2763 5049 9135 16554 30434 57184 109535 211570 406399 766978 1410118 2512830 4328616
|
||||||
|
9 21 53 112 202 321 466 654 967 1629 3123 6356 12880 25177 47016 83890 143541 236581 377217 584088 881222
|
||||||
|
1 12 44 109 239 501 1018 1996 3753 6743 11566 18954 29723 44682 64492 89471 119345 152950 187896 220211 243991
|
||||||
|
5 8 15 37 102 271 668 1537 3347 6972 13982 27113 51102 94431 173443 322385 617316 1230502 2548499 5417988 11639807
|
||||||
|
22 32 42 52 62 72 82 92 102 112 122 132 142 152 162 172 182 192 202 212 222
|
||||||
|
26 52 91 142 204 276 357 446 542 644 751 862 976 1092 1209 1326 1442 1556 1667 1774 1876
|
||||||
|
24 49 87 138 202 279 369 472 588 717 859 1014 1182 1363 1557 1764 1984 2217 2463 2722 2994
|
||||||
|
9 19 42 78 127 189 264 352 453 567 694 834 987 1153 1332 1524 1729 1947 2178 2422 2679
|
||||||
|
-3 -2 3 24 99 302 758 1676 3415 6612 12449 23248 43805 84286 166263 334878 682850 1397511 2853324 5795757 11710724
|
||||||
|
4 16 41 95 214 468 975 1915 3544 6208 10357 16559 25514 38068 55227 78171 108268 147088 196417 258271 334910
|
||||||
|
11 15 29 64 141 299 617 1259 2547 5059 9732 17919 31299 51465 78912 111010 138371 138799 67743 -156150 -672167
|
||||||
|
5 1 3 18 62 174 431 964 1975 3755 6703 11346 18360 28592 43083 63092 90121 125941 172619 232546 308466
|
||||||
|
26 51 99 184 339 632 1182 2174 3872 6638 10991 17798 28811 48009 84666 159878 319614 659405 1368755 2807428 5631043
|
||||||
|
15 31 66 141 300 634 1325 2728 5517 10935 21220 40345 75348 138842 254046 465448 862165 1629328 3158970 6281548 12730658
|
||||||
|
15 25 35 45 55 65 75 85 95 105 115 125 135 145 155 165 175 185 195 205 215
|
||||||
|
13 28 56 103 181 308 508 811 1253 1876 2728 3863 5341 7228 9596 12523 16093 20396 25528 31591 38693
|
||||||
|
6 14 37 87 177 324 552 895 1400 2130 3167 4615 6603 9288 12858 17535 23578 31286 41001 53111 68053
|
||||||
|
7 8 24 73 191 441 920 1764 3151 5302 8480 12987 19159 27359 37968 51374 67959 88084 112072 140189 172623
|
||||||
|
-2 -2 12 49 123 269 565 1156 2284 4356 8142 15299 29577 59291 121951 252342 515850 1029450 1993520 3738533 6791719
|
||||||
|
4 18 57 143 320 671 1342 2569 4699 8191 13578 21366 31841 44750 58817 71050 75790 63448 18871 -80727 -268338
|
||||||
|
20 38 71 128 214 335 513 809 1360 2467 4852 10383 23936 57774 141126 339947 795762 1798994 3922635 8258484 16823056
|
||||||
|
8 23 43 72 128 263 609 1478 3558 8273 18421 39274 80432 158922 304459 568717 1042388 1887535 3399479 6123936 11073736
|
||||||
|
-2 11 49 137 313 643 1251 2364 4372 7903 13913 23791 39479 63607 99643 152058 226506 330019 471217 660533 910453
|
||||||
|
20 31 52 97 178 300 456 622 752 773 580 31 -1058 -2918 -5832 -10140 -16244 -24613 -35788 -50387 -69110
|
||||||
|
-5 3 17 38 76 154 313 628 1253 2518 5099 10262 20122 37721 66459 107930 156415 187029 132637 -158066 -992728
|
||||||
|
8 8 4 -5 -7 36 201 617 1478 3056 5714 9919 16255 25436 38319 55917 79412 110168 149744 199907 262645
|
||||||
|
10 31 59 95 157 308 702 1659 3795 8256 17136 34198 66064 124095 227245 406244 709544 1211549 2023745 3309449 5303007
|
||||||
|
25 52 96 157 230 305 367 396 367 250 10 -393 -1004 -1873 -3055 -4610 -6603 -9104 -12188 -15935 -20430
|
||||||
|
18 37 77 154 307 616 1230 2412 4621 8671 16030 29344 53288 95854 170181 297010 507804 848505 1383803 2201662 3417681
|
||||||
|
9 20 38 68 119 223 484 1169 2848 6589 14224 28739 54945 100848 180737 322294 582607 1082858 2080310 4111590 8267015
|
||||||
|
16 18 33 83 206 461 946 1857 3630 7218 14557 29273 57696 110321 204066 366139 641204 1105050 1890401 3234215 5561242
|
||||||
|
14 39 80 138 211 310 503 1012 2395 5849 13675 29974 61745 120819 227613 418689 761752 1384239 2525270 4625678 8477307
|
||||||
|
19 45 82 127 174 220 274 368 586 1153 2671 6688 17013 42674 104354 247812 570611 1273115 2752498 5772143 11763838
|
||||||
|
28 38 42 49 77 148 287 540 1031 2078 4381 9279 19046 37156 68392 118602 193814 298310 431124 580269 713811
|
||||||
|
11 21 27 29 29 29 33 66 233 867 2865 8396 22316 54917 127224 281225 599691 1244513 2530267 5063511 10002115
|
||||||
|
12 24 40 58 72 67 23 -54 -55 377 2098 6907 18400 43773 97860 212323 456296 981519 2117896 4569227 9801250
|
||||||
|
24 32 39 42 29 -11 -65 -47 306 1640 5357 14241 33467 72245 146671 285119 539198 1006862 1881469 3554582 6826371
|
||||||
|
0 10 24 38 55 91 181 385 794 1536 2782 4752 7721 12025 18067 26323 37348 51782 70356 93898 123339
|
||||||
|
10 8 6 4 2 0 -2 -4 -6 -8 -10 -12 -14 -16 -18 -20 -22 -24 -26 -28 -30
|
||||||
|
23 36 57 99 187 369 743 1519 3140 6491 13242 26420 51424 97971 184086 344653 650095 1247110 2446146 4905196 10007393
|
||||||
|
6 3 1 0 0 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136
|
||||||
|
3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63
|
||||||
|
27 44 63 84 107 132 159 188 219 252 287 324 363 404 447 492 539 588 639 692 747
|
||||||
|
-1 -7 1 47 173 448 984 1975 3790 7182 13743 26886 53965 110835 231521 488214 1031309 2166751 4500097 9195505 18426041
|
||||||
|
5 17 35 67 143 330 753 1622 3265 6167 11015 18749 30619 48248 73701 109560 159005 225901 314891 431495 582215
|
||||||
|
-6 -2 7 21 40 64 93 127 166 210 259 313 372 436 505 579 658 742 831 925 1024
|
||||||
|
5 0 -4 -3 7 30 70 131 217 332 480 665 891 1162 1482 1855 2285 2776 3332 3957 4655
|
||||||
|
-2 9 35 94 215 440 844 1582 2973 5640 10750 20449 38679 72726 136138 254178 473924 882791 1642073 3046724 5629899
|
||||||
|
10 14 30 70 158 349 763 1655 3561 7584 15905 32613 64946 125058 232597 419003 736198 1276697 2222168 3959477 7350468
|
||||||
|
26 35 42 44 33 -4 -85 -233 -476 -847 -1384 -2130 -3133 -4446 -6127 -8239 -10850 -14033 -17866 -22432 -27819
|
||||||
|
8 4 13 52 139 289 508 786 1087 1337 1434 1368 1675 4707 17679 59383 174380 462612 1141265 2674334 6042821
|
||||||
|
10 23 36 49 62 75 88 101 114 127 140 153 166 179 192 205 218 231 244 257 270
|
||||||
|
5 7 9 13 27 82 254 695 1695 3828 8282 17539 36659 75535 152627 300855 576537 1072501 1936783 3398649 5804051
|
||||||
|
4 12 35 82 161 278 436 634 866 1120 1377 1610 1783 1850 1754 1426 784 -268 -1841 -4062 -7075
|
||||||
|
-6 -8 -10 -12 -14 -16 -18 -20 -22 -24 -26 -28 -30 -32 -34 -36 -38 -40 -42 -44 -46
|
||||||
|
13 22 42 92 218 505 1089 2169 4019 7000 11572 18306 27896 41171 59107 82839 113673 153098 202798 264664 340806
|
||||||
|
16 13 21 55 130 261 463 751 1140 1645 2281 3063 4006 5125 6435 7951 9688 11661 13885 16375 19146
|
||||||
|
18 27 47 88 160 273 437 662 958 1335 1803 2372 3052 3853 4785 5858 7082 8467 10023 11760 13688
|
||||||
|
7 6 17 58 155 342 661 1162 1903 2950 4377 6266 8707 11798 15645 20362 26071 32902 40993 50490 61547
|
||||||
|
11 13 24 50 109 246 543 1125 2175 3985 7097 12658 23281 45058 92042 195689 423683 915597 1947414 4043610 8164997
|
||||||
|
6 0 5 31 87 200 455 1071 2540 5886 13167 28475 59942 123730 251825 506902 1009910 1989788 3870441 7418499 13987325
|
||||||
|
-2 8 27 55 92 138 193 257 330 412 503 603 712 830 957 1093 1238 1392 1555 1727 1908
|
||||||
|
13 22 31 40 49 58 67 76 85 94 103 112 121 130 139 148 157 166 175 184 193
|
||||||
|
14 35 68 128 246 470 871 1568 2805 5143 9869 19770 40471 82590 165018 319686 598232 1081027 1889058 3199196 5263396
|
||||||
|
15 24 35 58 111 227 481 1046 2297 5016 10835 23231 49728 106580 228292 486215 1023782 2122091 4321254 8645623 17024708
|
||||||
|
12 19 40 83 160 292 519 913 1602 2837 5172 9879 19786 40806 84519 172277 341424 654359 1211320 2167931 3758732
|
||||||
|
18 36 68 124 214 348 536 788 1114 1524 2028 2636 3358 4204 5184 6308 7586 9028 10644 12444 14438
|
||||||
|
12 20 33 45 47 24 -54 -236 -556 -887 -527 2807 15236 51518 144801 365619 857408 1900374 4022237 8183901 16081297
|
||||||
|
11 22 33 49 89 203 511 1293 3174 7478 16893 36733 77363 158858 319822 633666 1237753 2383938 4523501 8445701 15497657
|
||||||
|
11 27 54 110 220 428 835 1670 3410 6992 14206 28422 55898 108100 205914 387755 726239 1363956 2591066 5011451 9889470
|
||||||
|
25 33 54 116 273 627 1364 2810 5519 10416 19034 33905 59191 101672 172244 288121 475981 776347 1249550 1983682 3105013
|
||||||
|
4 5 10 23 64 183 481 1157 2623 5768 12514 26902 57092 118886 241719 478527 921458 1725895 3145362 5578917 9629452
|
||||||
|
13 18 25 38 72 159 357 772 1610 3302 6805 14297 30695 66820 145791 315686 674243 1416334 2923593 5930084 11821362
|
||||||
|
9 22 35 48 61 74 87 100 113 126 139 152 165 178 191 204 217 230 243 256 269
|
||||||
|
9 32 76 153 275 454 702 1031 1453 1980 2624 3397 4311 5378 6610 8019 9617 11416 13428 15665 18139
|
||||||
|
20 31 45 59 80 140 311 720 1564 3125 5785 10041 16520 25994 39395 57830 82596 115195 157349 211015 278400
|
||||||
|
13 34 81 180 383 779 1505 2757 4801 7984 12745 19626 29283 42497 60185 83411 113397 151534 199393 258736 331527
|
||||||
|
11 5 -4 -6 24 128 377 921 2123 4846 10990 24409 52376 107807 212503 401722 730451 1281811 2178096 3595020 5779824
|
||||||
|
18 33 65 129 254 496 951 1774 3217 5699 9911 16936 28325 46012 71871 106613 147588 184893 194989 130795 -93048
|
||||||
|
8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 53 56 59 62 65 68
|
||||||
|
22 27 35 57 123 295 675 1408 2681 4714 7734 11938 17521 25028 36693 60269 118556 271189 661633 1614015 3824955
|
||||||
|
-5 -5 -2 13 74 258 712 1704 3727 7703 15360 29910 57292 108555 204579 385428 728331 1380599 2616414 4928519 9165614
|
||||||
|
6 18 41 74 113 150 183 257 568 1674 4869 12788 30323 65942 133515 254763 462458 804514 1349121 2191086 3459557
|
||||||
|
12 32 70 144 289 562 1047 1860 3154 5124 8012 12112 17775 25414 35509 48612 65352 86440 112674 144944 184237
|
||||||
|
4 7 26 89 233 513 1028 1982 3817 7474 14867 29724 59116 116351 226576 437541 839650 1601693 3031396 5672739 10454035
|
||||||
|
7 11 21 37 59 87 121 161 207 259 317 381 451 527 609 697 791 891 997 1109 1227
|
||||||
|
-7 2 36 105 233 474 929 1764 3229 5678 9590 15591 24477 37238 55083 79466 112113 155050 210632 281573 370977
|
||||||
|
19 22 21 20 27 60 160 405 916 1850 3392 5794 9570 16048 28609 55115 112249 232766 476991 950304 1828829
|
||||||
|
6 5 0 -6 0 51 230 744 2075 5250 12281 26835 55203 107646 200205 357071 613620 1020227 1646982 2589440 3975546
|
||||||
|
12 37 74 122 181 253 357 565 1076 2385 5694 13877 33581 79455 182089 402060 853572 1742597 3426234 6502268 11940701
|
||||||
|
4 10 11 11 21 59 153 358 813 1892 4560 11162 27101 64273 147816 328805 707113 1470932 2962722 5786321 10978172
|
||||||
|
2 -4 -14 -18 12 132 452 1185 2736 5872 12053 24061 47144 91002 173091 323920 595278 1072668 1893660 3274424 5547388
|
||||||
|
23 41 67 100 149 247 471 965 1969 3883 7451 14250 27840 56227 116812 245915 516543 1070717 2176959 4330256 8422019
|
||||||
|
-8 -1 26 83 188 387 799 1712 3775 8367 18292 39066 81247 164533 324739 625287 1175530 2159111 3876662 6808509 11704702
|
||||||
|
16 38 75 146 286 563 1110 2172 4168 7768 13985 24282 40694 65965 103700 158532 236304 344266 491287 688082 947454
|
||||||
|
3 13 24 47 116 313 808 1918 4203 8640 16944 32132 59444 107734 191412 332941 565755 937247 1511160 2368277 3603724
|
||||||
|
2 16 51 124 266 545 1099 2180 4216 7907 14378 25406 43703 73161 118865 186656 282365 412201 589508 861747 1389619
|
||||||
|
5 18 39 68 105 150 203 264 333 410 495 588 689 798 915 1040 1173 1314 1463 1620 1785
|
||||||
|
1 12 50 141 322 641 1157 1940 3071 4642 6756 9527 13080 17551 23087 29846 37997 47720 59206 72657 88286
|
||||||
|
4 16 50 124 269 540 1042 1983 3766 7129 13340 24457 43668 75726 127504 208826 334362 529529 849438 1435283 2668205
|
||||||
|
15 35 66 111 173 255 360 491 651 843 1070 1335 1641 1991 2388 2835 3335 3891 4506 5183 5925
|
||||||
|
13 21 53 130 286 580 1111 2043 3651 6395 11024 18730 31461 52741 89851 159160 297973 588757 1205355 2496214 5127228
|
||||||
|
8 8 25 87 239 540 1055 1842 2934 4316 5897 7477 8709 9056 7743 3704 -4476 -18624 -41047 -74605 -122789
|
||||||
|
-7 -9 -1 35 138 374 851 1761 3471 6696 12810 24386 46095 86118 158201 284361 497961 846321 1391101 2203233 3347012
|
||||||
|
6 25 62 140 292 567 1043 1842 3136 5122 7923 11332 14243 13482 1523 -37788 -136855 -357062 -808189 -1674217 -3239703
|
||||||
|
19 45 92 165 260 365 468 573 730 1101 2119 4861 11861 28749 67333 151061 324229 666861 1317902 2510261 4622346
|
||||||
|
-5 -2 2 2 -11 -53 -145 -295 -444 -333 813 5032 17356 49671 128921 313695 726202 1611289 3441257 7095887 14162940
|
||||||
|
9 10 21 64 187 481 1104 2321 4569 8551 15353 26563 44351 71444 110900 165550 236937 323536 417989 503034 545747
|
||||||
|
13 11 9 7 5 3 1 -1 -3 -5 -7 -9 -11 -13 -15 -17 -19 -21 -23 -25 -27
|
||||||
|
20 27 27 32 64 150 317 587 972 1469 2055 2682 3272 3712 3849 3485 2372 207 -3373 -8796 -16560
|
||||||
|
8 12 17 29 59 128 272 546 1040 1949 3795 8014 18355 43992 106087 251024 576095 1277813 2740616 5697006 11513670
|
||||||
|
13 23 39 67 110 168 238 314 387 445 473 453 364 182 -120 -572 -1207 -2061 -3173 -4585 -6342
|
||||||
|
15 30 54 93 161 295 578 1180 2445 5079 10538 21785 44698 90622 181037 356507 695002 1351447 2644938 5249563 10601080
|
||||||
|
15 30 49 72 99 130 165 204 247 294 345 400 459 522 589 660 735 814 897 984 1075
|
||||||
|
0 2 10 36 96 215 444 911 1953 4421 10323 24086 54908 121006 257211 528674 1056138 2063596 3969400 7560556 14322468
|
||||||
|
19 48 92 151 225 314 418 537 671 820 984 1163 1357 1566 1790 2029 2283 2552 2836 3135 3449
|
||||||
|
19 29 38 54 96 194 391 747 1345 2299 3764 5948 9126 13656 19997 28729 40575 56425 77362 104690 139964
|
||||||
|
-10 -15 -20 -25 -30 -35 -40 -45 -50 -55 -60 -65 -70 -75 -80 -85 -90 -95 -100 -105 -110
|
||||||
|
20 35 62 113 200 345 611 1160 2344 4842 9886 19707 38540 74949 146995 293023 592748 1206017 2440198 4861569 9471136
|
||||||
|
15 18 23 39 98 273 696 1582 3277 6368 11928 22026 40718 75857 142225 266705 496483 911606 1643629 2902569 5014954
|
||||||
|
0 -1 8 38 103 226 448 850 1612 3147 6362 13112 26927 54106 105286 197608 357616 625039 1057620 1737170 2777039
|
||||||
|
9 16 34 87 224 535 1183 2463 4899 9399 17522 31996 57798 104412 190375 351970 659005 1242114 2338026 4361877 8019004
|
||||||
|
4 0 6 35 101 219 405 676 1050 1546 2184 2985 3971 5165 6591 8274 10240 12516 15130 18111 21489
|
||||||
|
10 27 60 117 212 385 745 1542 3286 6958 14400 29028 57084 109730 206389 379855 683826 1203661 2071324 3485655 5739300
|
||||||
|
5 7 22 60 131 245 412 642 945 1331 1810 2392 3087 3905 4856 5950 7197 8607 10190 11956 13915
|
||||||
|
18 30 43 52 47 21 -14 9 296 1369 4407 11874 28661 64160 136010 276761 545454 1047184 1965179 3611880 6508043
|
||||||
|
22 46 92 168 282 442 656 932 1278 1702 2212 2816 3522 4338 5272 6332 7526 8862 10348 11992 13802
|
||||||
|
8 13 20 44 110 253 518 960 1644 2645 4048 5948 8450 11669 15730 20768 26928 34365 43244 53740 66038
|
||||||
|
-3 1 10 24 43 67 96 130 169 213 262 316 375 439 508 582 661 745 834 928 1027
|
||||||
|
13 39 85 169 321 590 1056 1847 3161 5293 8667 13873 21709 33228 49790 73119 105365 149171 207745 284937 385321
|
||||||
|
5 14 36 83 195 464 1065 2288 4561 8450 14618 23721 36215 52044 70175 87942 100157 97942 67232 -13105 -173589
|
||||||
|
15 19 30 62 145 335 724 1453 2731 4863 8290 13644 21821 34075 52136 78355 115879 168859 242694 344314 482505
|
||||||
|
2 11 44 125 296 629 1253 2418 4645 9063 18123 37017 76329 156717 316782 625734 1203028 2247827 4081966 7211053 12409462
|
||||||
|
11 35 81 170 335 621 1094 1881 3275 5959 11445 22918 46892 96576 198907 409378 843048 1738176 3583686 7367983 15052310
|
||||||
|
22 31 41 57 91 170 363 840 1989 4657 10673 23996 53165 116277 250554 529758 1094371 2201726 4306420 8185830 15132182
|
||||||
|
-1 7 15 33 92 259 668 1582 3518 7495 15514 31474 62920 124397 243884 474989 919525 1767999 3369645 6349039 11792984
|
||||||
|
9 6 4 22 93 267 617 1248 2307 3990 6549 10333 15971 24949 41114 74263 148526 322161 734795 1719395 4061142
|
||||||
|
17 28 42 71 134 259 488 894 1635 3095 6196 13008 27836 59024 121786 242453 464613 857718 1528838 2638357 4420530
|
||||||
|
20 33 55 105 212 427 857 1727 3474 6875 13209 24451 43494 74393 122623 195341 301640 452781 662387 946581 1324048
|
||||||
|
-2 -6 -6 16 84 227 476 858 1392 2102 3076 4617 7550 13765 27086 54555 108202 207330 381270 672446 1139424
|
||||||
|
11 28 58 105 175 280 442 697 1099 1724 2674 4081 6111 8968 12898 18193 25195 34300 45962 60697 79087
|
||||||
|
6 6 4 10 50 174 461 1020 1989 3537 5877 9301 14251 21443 32064 48065 72576 110472 169122 259356 396688
|
||||||
|
9 33 72 143 291 617 1321 2757 5491 10347 18432 31172 50503 79595 124911 201104 341341 617245 1174920 2296653 4502083
|
||||||
|
1 -3 -6 6 57 181 422 834 1481 2437 3786 5622 8049 11181 15142 20066 26097 33389 42106 52422 64521
|
||||||
|
20 45 92 183 353 648 1120 1828 2877 4577 7895 15519 34068 78280 178405 392536 826242 1662637 3206942 5950687 10661971
|
||||||
|
9 20 49 105 197 326 471 562 423 -334 -2454 -7125 -15718 -28520 -41047 -34951 42817 325984 1127851 3148993 7902215
|
||||||
|
4 13 22 31 40 49 58 67 76 85 94 103 112 121 130 139 148 157 166 175 184
|
||||||
|
3 18 39 62 84 110 166 321 721 1638 3537 7164 13658 24690 42632 70759 113487 176650 267819 396666 575376
|
||||||
|
23 33 49 79 132 217 335 464 539 441 41 -595 -643 2719 16711 57254 156427 375417 827593 1720891 3437190
|
||||||
|
7 24 50 85 142 258 514 1069 2207 4385 8261 14704 24907 41055 68751 123960 250328 558763 1312713 3104284 7206249
|
||||||
|
-7 -1 21 79 208 466 962 1919 3787 7421 14339 27075 49642 88120 151384 251987 407213 640315 981953 1471847 2160660
|
||||||
|
-7 -4 0 6 17 40 94 224 527 1208 2702 5922 12723 26708 54544 108004 207005 383972 689924 1202750 2038221
|
||||||
|
18 29 55 112 225 446 901 1884 4033 8657 18343 38083 77387 154338 303618 592833 1156238 2264577 4468621 8890194 17802535
|
||||||
|
13 27 43 70 138 306 667 1350 2519 4369 7119 11002 16252 23088 31695 42202 54657 68999 85027 102366 120430
|
||||||
|
1 14 48 125 277 551 1022 1814 3129 5284 8756 14235 22685 35413 54146 81116 119153 171786 243352 339113 465381
|
||||||
|
-1 8 23 44 71 104 143 188 239 296 359 428 503 584 671 764 863 968 1079 1196 1319
|
||||||
|
19 43 77 127 215 395 790 1669 3597 7724 16343 33959 69302 139053 274682 535059 1030155 1966898 3740787 7123974 13657889
|
||||||
|
18 45 91 164 275 438 677 1048 1684 2871 5163 9544 17645 32024 56517 96668 160246 257857 403659 616188 919303
|
||||||
|
6 22 59 136 291 594 1160 2162 3844 6534 10657 16748 25465 37602 54102 76070 104786 141718 188535 247120 319583
|
||||||
|
23 37 65 118 212 377 687 1329 2735 5816 12367 25768 52224 103069 199356 381630 731614 1420871 2818778 5726452 11868843
|
||||||
|
13 24 32 38 55 126 345 876 1970 3996 7534 13631 24400 44252 82197 155837 297907 566504 1060484 1941908 3467885
|
||||||
|
9 11 8 7 38 173 559 1479 3462 7483 15333 30296 58341 110127 204263 372559 668647 1182699 2067602 3586753 6201896
|
||||||
|
18 44 92 182 354 678 1272 2352 4352 8165 15568 29905 57112 107177 196136 348713 601718 1008322 1643332 2609592 4045638
|
||||||
|
-6 -2 12 37 85 189 422 952 2183 5066 11718 26576 58470 124296 255549 510096 993680 1899506 3581116 6685619 12394363
|
||||||
|
10 18 40 85 167 323 635 1262 2502 4919 9598 18672 36477 72155 145400 298517 620281 1290667 2661351 5397302 10725062
|
||||||
|
8 7 10 36 112 276 581 1096 1900 3059 4565 6212 7427 7257 5226 4991 25352 128511 485816 1520388 4200090
|
||||||
|
6 1 -4 -9 -14 -19 -24 -29 -34 -39 -44 -49 -54 -59 -64 -69 -74 -79 -84 -89 -94
|
||||||
306
2023/go/day10/day10.go
Normal file
306
2023/go/day10/day10.go
Normal file
@@ -0,0 +1,306 @@
|
|||||||
|
package day10
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"adventofcode2023/utils"
|
||||||
|
"adventofcode2023/utils/grid2d"
|
||||||
|
"adventofcode2023/utils/inputs"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Coord struct {
|
||||||
|
x int
|
||||||
|
y int
|
||||||
|
}
|
||||||
|
|
||||||
|
type Direction struct {
|
||||||
|
dir string
|
||||||
|
x int
|
||||||
|
y int
|
||||||
|
}
|
||||||
|
|
||||||
|
func Part1(input string) int {
|
||||||
|
grid := inputs.ToGrid2D(input, "\n", "", ".", func(c string) string { return c})
|
||||||
|
start, _ := findStart(grid)
|
||||||
|
tunnel := findTunnel(grid, start)
|
||||||
|
fmt.Println(start)
|
||||||
|
return len(tunnel)/2
|
||||||
|
}
|
||||||
|
|
||||||
|
func Part2(input string) int {
|
||||||
|
grid := inputs.ToGrid2D(input, "\n", "", ".", func(c string) string { return c})
|
||||||
|
start, _ := findStart(grid)
|
||||||
|
tunnel := findTunnel(grid, start)
|
||||||
|
maskJunkPipes(grid, tunnel)
|
||||||
|
bigGrid := expand(grid)
|
||||||
|
floodFill(bigGrid, Coord{0,0})
|
||||||
|
return countTiles(bigGrid, tunnel)
|
||||||
|
}
|
||||||
|
|
||||||
|
func floodFill(grid *grid2d.Grid[string], coord Coord) {
|
||||||
|
// Base cases to stop recursion
|
||||||
|
if coord.x < 0 || coord.x >= grid.SizeX() || coord.y < 0 || coord.y >= grid.SizeY() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if grid.Get(coord.x, coord.y) != "." || grid.Get(coord.x, coord.y) == "O" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Change the color of the current pixel
|
||||||
|
grid.Set(coord.x, coord.y, "O")
|
||||||
|
|
||||||
|
// Recursively call floodFill for neighboring pixels
|
||||||
|
floodFill(grid, Coord{coord.x+1, coord.y})
|
||||||
|
floodFill(grid, Coord{coord.x-1, coord.y})
|
||||||
|
floodFill(grid, Coord{coord.x, coord.y+1})
|
||||||
|
floodFill(grid, Coord{coord.x, coord.y-1})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Magnify grid
|
||||||
|
|
||||||
|
// +-
|
||||||
|
// F => |
|
||||||
|
//
|
||||||
|
// L => |
|
||||||
|
// +-
|
||||||
|
//
|
||||||
|
// |
|
||||||
|
// | => |
|
||||||
|
// |
|
||||||
|
|
||||||
|
|
||||||
|
func findTunnel(grid *grid2d.Grid[string], start Coord) []Coord {
|
||||||
|
directions := []Direction{{"s", 0, 1}, {"n", 0, -1}, {"e", 1, 0}, {"w", -1, 0}}
|
||||||
|
steps := 0
|
||||||
|
current := start
|
||||||
|
last := Direction{}
|
||||||
|
tunnel := []Coord{}
|
||||||
|
tunnel = append(tunnel, start)
|
||||||
|
for {
|
||||||
|
for _, dir := range directions {
|
||||||
|
if dir == oposite(last) { continue }
|
||||||
|
x := current.x + dir.x
|
||||||
|
y := current.y + dir.y
|
||||||
|
if x < 0 || x >= grid.SizeX() || y < 0 || y >= grid.SizeY() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if ! possible(dir, grid.Get(current.x, current.y) ) { continue }
|
||||||
|
pipe := grid.Get(x, y)
|
||||||
|
if pipe == "S" {
|
||||||
|
return tunnel
|
||||||
|
}
|
||||||
|
switch dir.dir {
|
||||||
|
case "n":
|
||||||
|
if pipe == "|" || pipe == "F" || pipe == "7" {
|
||||||
|
current = Coord{x, y}
|
||||||
|
steps++
|
||||||
|
last = dir
|
||||||
|
tunnel = append(tunnel, current)
|
||||||
|
if current == start { return tunnel }
|
||||||
|
}
|
||||||
|
case "s":
|
||||||
|
if pipe == "|" || pipe == "L" || pipe == "J" {
|
||||||
|
current = Coord{x, y}
|
||||||
|
steps++
|
||||||
|
last = dir
|
||||||
|
tunnel = append(tunnel, current)
|
||||||
|
if current == start { return tunnel }
|
||||||
|
}
|
||||||
|
case "e":
|
||||||
|
if pipe == "-" || pipe == "J" || pipe == "7" {
|
||||||
|
current = Coord{x, y}
|
||||||
|
steps++
|
||||||
|
last = dir
|
||||||
|
tunnel = append(tunnel, current)
|
||||||
|
if current == start { return tunnel }
|
||||||
|
}
|
||||||
|
case "w":
|
||||||
|
if pipe == "-" || pipe == "F" || pipe == "L" {
|
||||||
|
current = Coord{x, y}
|
||||||
|
steps++
|
||||||
|
last = dir
|
||||||
|
tunnel = append(tunnel, current)
|
||||||
|
if current == start { return tunnel }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func expand(grid *grid2d.Grid[string]) *grid2d.Grid[string] {
|
||||||
|
bigGrid := grid2d.NewGrid(grid.SizeX() * 3, grid.SizeY() * 3, ".")
|
||||||
|
for y:=0;y<grid.SizeY();y++ {
|
||||||
|
for x:=0;x<grid.SizeX();x++ {
|
||||||
|
switch grid.Get(x, y) {
|
||||||
|
case "F":
|
||||||
|
bigGrid.Set(x*3+1,y*3+1,"+")
|
||||||
|
bigGrid.Set(x*3+2,y*3+1,"-")
|
||||||
|
bigGrid.Set(x*3+1,y*3+2,"|")
|
||||||
|
case "L":
|
||||||
|
bigGrid.Set(x*3+1,y*3,"|")
|
||||||
|
bigGrid.Set(x*3+1,y*3+1,"+")
|
||||||
|
bigGrid.Set(x*3+2,y*3+1,"-")
|
||||||
|
case "|":
|
||||||
|
bigGrid.Set(x*3+1,y*3,"|")
|
||||||
|
bigGrid.Set(x*3+1,y*3+1,"|")
|
||||||
|
bigGrid.Set(x*3+1,y*3+2,"|")
|
||||||
|
case "7":
|
||||||
|
bigGrid.Set(x*3,y*3+1,"-")
|
||||||
|
bigGrid.Set(x*3+1,y*3+1,"+")
|
||||||
|
bigGrid.Set(x*3+1,y*3+2,"|")
|
||||||
|
case "-":
|
||||||
|
bigGrid.Set(x*3,y*3+1,"-")
|
||||||
|
bigGrid.Set(x*3+1,y*3+1,"-")
|
||||||
|
bigGrid.Set(x*3+2,y*3+1,"-")
|
||||||
|
case "J":
|
||||||
|
bigGrid.Set(x*3+1,y*3,"|")
|
||||||
|
bigGrid.Set(x*3+1,y*3+1,"+")
|
||||||
|
bigGrid.Set(x*3,y*3+1,"-")
|
||||||
|
case "X":
|
||||||
|
bigGrid.Set(x*3+1,y*3+1,"X")
|
||||||
|
case "S":
|
||||||
|
bigGrid.Set(x*3+1,y*3+1,"*")
|
||||||
|
default:
|
||||||
|
bigGrid.Set(x*3+1,y*3+1,".")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bigGrid
|
||||||
|
}
|
||||||
|
func maskJunkPipes(grid *grid2d.Grid[string], tunnel []Coord) {
|
||||||
|
for y:=0;y<grid.SizeY();y++ {
|
||||||
|
for x:=0;x<grid.SizeX();x++ {
|
||||||
|
if ! containsCoord(Coord{x, y}, tunnel) && grid.Get(x, y) != "." {
|
||||||
|
grid.Set(x, y, ".")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func countTiles(grid *grid2d.Grid[string], tunnel []Coord) int {
|
||||||
|
count := 0
|
||||||
|
tiles := []Coord{}
|
||||||
|
directions := []Coord{{0,1}, {0,-1},{1,0}, {-1, 0},{1,1},{1,-1},{-1,1},{-1,-1}}
|
||||||
|
for y:=0;y<grid.SizeY();y=y+3 {
|
||||||
|
for x:=0;x<grid.SizeX();x=x+3 {
|
||||||
|
coord := Coord{x, y}
|
||||||
|
if coord.x == 0 || coord.x == grid.SizeX() - 1 || coord.y == 0 || coord.y == grid.SizeY() - 1 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
found := true
|
||||||
|
if grid.Get(coord.x, coord.y) == "." {
|
||||||
|
for _, dir := range directions {
|
||||||
|
if grid.Get(coord.x+dir.x, coord.y+dir.y) != "." {
|
||||||
|
found = false
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if found {
|
||||||
|
count++
|
||||||
|
tiles = append(tiles, coord)
|
||||||
|
grid.Set(coord.x, coord.y, "I")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// fmt.Println(grid.StringWithFormatter(func(c string, x int, y int) string { return c}))
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
func containsCoord(coord Coord, tunnel []Coord) bool {
|
||||||
|
for _, v := range tunnel {
|
||||||
|
if v == coord {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func maxX(tunnel []Coord) int {
|
||||||
|
max := 0
|
||||||
|
for _, v := range tunnel {
|
||||||
|
if v.x > max {
|
||||||
|
max = v.x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return max
|
||||||
|
}
|
||||||
|
func minX(tunnel []Coord) int {
|
||||||
|
min := utils.MaxInt
|
||||||
|
for _, v := range tunnel {
|
||||||
|
if v.x < min {
|
||||||
|
min = v.x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return min
|
||||||
|
}
|
||||||
|
func maxY(tunnel []Coord) int {
|
||||||
|
max := 0
|
||||||
|
for _, v := range tunnel {
|
||||||
|
if v.y > max {
|
||||||
|
max = v.y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return max
|
||||||
|
}
|
||||||
|
func minY(tunnel []Coord) int {
|
||||||
|
min := utils.MaxInt
|
||||||
|
for _, v := range tunnel {
|
||||||
|
if v.y < min {
|
||||||
|
min = v.y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return min
|
||||||
|
}
|
||||||
|
|
||||||
|
func possible(dir Direction, pipe string) bool {
|
||||||
|
v := false
|
||||||
|
if pipe == "S" { return true }
|
||||||
|
switch dir.dir {
|
||||||
|
case "n":
|
||||||
|
if pipe == "|" || pipe == "L" || pipe == "J" {
|
||||||
|
v = true
|
||||||
|
}
|
||||||
|
case "s":
|
||||||
|
if pipe == "|" || pipe == "F" || pipe == "7" {
|
||||||
|
v = true
|
||||||
|
}
|
||||||
|
case "e":
|
||||||
|
if pipe == "-" || pipe == "F" || pipe == "L" {
|
||||||
|
v = true
|
||||||
|
}
|
||||||
|
case "w":
|
||||||
|
if pipe == "-" || pipe == "J" || pipe == "7" {
|
||||||
|
v = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
func findStart(grid *grid2d.Grid[string]) (Coord, error) {
|
||||||
|
// for j := 0; j < grid.SizeY(); j++ {
|
||||||
|
// for i := 0; i < grid.SizeX(); i++ {
|
||||||
|
// if grid.Get(i, j) == "S" {
|
||||||
|
// return Coord{i, j}, nil
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return Coord{}, fmt.Errorf("S not found")
|
||||||
|
return Coord{x:74, y:95}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func oposite(dir Direction) Direction {
|
||||||
|
switch dir.dir {
|
||||||
|
case "n":
|
||||||
|
return Direction{"s", 0, 1}
|
||||||
|
case "s":
|
||||||
|
return Direction{"n", 0, -1}
|
||||||
|
case "e":
|
||||||
|
return Direction{"w", -1, 0}
|
||||||
|
case "w":
|
||||||
|
return Direction{"e", 1, 0}
|
||||||
|
}
|
||||||
|
return Direction{}
|
||||||
|
}
|
||||||
32
2023/go/day10/day10_test.go
Normal file
32
2023/go/day10/day10_test.go
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
package day10
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestPart1(t *testing.T) {
|
||||||
|
r := Part1(
|
||||||
|
`..F7.
|
||||||
|
.FJ|.
|
||||||
|
SJ.L7
|
||||||
|
|F--J
|
||||||
|
LJ...`)
|
||||||
|
require.Equal(t, 8, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPart2(t *testing.T) {
|
||||||
|
r := Part2(
|
||||||
|
`.F----7F7F7F7F-7....
|
||||||
|
.|F--7||||||||FJ....
|
||||||
|
.||.FJ||||||||L7....
|
||||||
|
FJL7L7LJLJ||LJ.L-7..
|
||||||
|
L--J.L7...LJF7F-7L7.
|
||||||
|
....F-J..F7FJ|L7L7L7
|
||||||
|
....L7.F7||L7|.L7L7|
|
||||||
|
.....|FJLJ|FJ|F7|.LJ
|
||||||
|
....FJL-7.||.||||...
|
||||||
|
....L---J.LJ.LJLJ...`)
|
||||||
|
require.Equal(t, 8, r)
|
||||||
|
}
|
||||||
140
2023/go/day10/input.txt
Normal file
140
2023/go/day10/input.txt
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
FL7L-F7FJF-7FFF7FF|-F-F|JF--|.|-J-7.F--FJF|-7.F.-FF7.-F7-L-|FF-F-|-7.-F7-FF-|7J-J.F-J7.FF7..L7F|7F-7JF-L7F.|--FL7F---|.FFF-L7FL--L777L-.FF7F
|
||||||
|
7FFJ.FLJF-.FJ||F-FJJJJ||F|-F7FLJ.7-F7J||-FFF7.L7-FJL7.F|||-J7JJ.LL77F|LF7LJJ||L7--|-7F-F|F-7JLJ.LJL--F-|LLJ|7J|L|-|7|FF|7|J.LJFFJ7.|-J.F.|L|
|
||||||
|
L-77.L77JF-JF7.||||.F7FFF7-|-7L.L--|.FF.|F-JL77.|L-7|F7|-|7F|-.-7L-F7--JJ|.||L7L-.|JF|.|JL-77F-|J-L|JL--FLJLJ7JF|7||7.FJL|7--L|---7|.|FF-J-|
|
||||||
|
LF7--FFJFLJLFL|J|.77---J-F-|F7-7.|7.L|J--L--7L7F7F7|LJL7-77-L.--J7LL-7.|LF-J--.F-J7-F--L7|-F7LFJ--77-7.77LJJ.7FL.J-JFJJ|F|J|LF|7||F|7FFJL|LJ
|
||||||
|
L|J7.-JJ-.|F|FJJJL||FL77LJ.|FJ7|FL7F.L7JJFLFJFJ|LJLJF--J-F7...FF||.FJL.-7L|.FL7JJLL-JJ.|||F||.L7|JFJ.|FJ7|--7JJ-|7LLF-FJ-F.--FJF|-LJFLJ-J.FJ
|
||||||
|
FJF-L-|.LF-F||J-7.-7|FF7-77J-7|LLJ|JJLJ--7-L7|JL-7F-JF-7.||7F-JJF7.J7.||L.--JJ.---77L7--777||7FLJFJJ-|7||F-L|-J7LJ-FJL|J.|.F77.L|F|JFJ|7.FF7
|
||||||
|
|-FJ.-F7.F..L|LF|7---LL77|L7FJJ.L.|LF-JFF|-FJ|F--JL-7|FJFJ|-7JLL||F7FL.JLLJ..F.L--LF7L.LF-7|L77J.FL7.FFLF--FF.L|7|.J|FJFL|-|7-7|F|7-J..777|F
|
||||||
|
F77.F|L77LFF-|LJ-L7|-LJ|F|.--7|.L--F-|7-L7.L7|L--7F-J|L-JFJFJJ-|JFF-7---FJ..-77||7.F7||-L7LJFJ77F7JLFF7L|7|||L7||7-J-|7-.|.L|.LJ.|LJJ.FLL-L7
|
||||||
|
|.|--F-J-7L7-FF|---7-|.J7JF.LFL-J.||LF-J.F--J|LF-JL7FJF7FJ77|F7--FL7|-L7-77F7F---7-||F7F7L-7|JLF77-L|||F-7-|JLJJLL7FF...JL-J.77|FJ.|.77|L-|J
|
||||||
|
-F7FLJ|LF7.|.L-LJ.LJ..F|..F.L-|.F-J77|F-7L--7L7L--7LJFJ|L7F777J|.F-JL7LJ---L7L--7|FJ||||L7FJL7.|L7-F7|||FJ7L|J.L|LJ7JF77L.|FLJ7-7FF7|77|.F-7
|
||||||
|
J.-77LF7||F77FJ-7.|L7F-7-.F7.|F7JJ-F7J7LF7F7L7L7F7|F7L7L-J||F7-JFL7F7|--7L|LF---J||FJ||L7|L7FJF|FJF|LJLJL-7L7|F7|FLL7LLJ77LJ7|.FJ-J||L7J.JF-
|
||||||
|
|.LL-.LLL-|L-7|---L-7.LL.FL7.FJ||.F-7|F7||||JL7|||||L-JFF-J|||.F7FJ|LJ7F7-JLL7F-7|||FJL7|L7|L--JL-7L-7F---JF|7LF-LJFL-J-LLJF---FJ.F|LJJ.JJLJ
|
||||||
|
L||L|7.L7LL77LJ.F|J7|7||7|7J|.|--FL7L-JLJ|||F7|||LJ|F7F7L7FJ||FJ|L7L7F7|L7J-FLJFJLJLJF-J|FJ|F--7F-JF-JL--7L--L7JFJ.L|L|FL7.JJ-||J-7-|JFJ.FF|
|
||||||
|
|JF7LL-.|7-|77.-F|LF--FJ-JF7F77FFLJL----7LJLJLJ|L7FJ||||FJL7|LJFJ-|FJ|||FJ|--LFJF---7|F7|L7|L7-LJF7|F--7FJ.JJ7F7|.J-J7-7-F-|..FJF-.J.LJJ-F7.
|
||||||
|
F7.|-|.FF7L|.L7||..|.|.JFF|LJ|F7J-F-7F7JL-----7L-JL-J||||F-JL-7L7FJ|FJ|||F77.LL-JF--JLJLJFJL7L-7-||LJF7||F7|.F||77|.|L7L-L.F-F-LLJ7.FF-|.L--
|
||||||
|
L7FF-FF-LJ.7-FJJ|JFL-L7FJLL-7|||F7L7LJL-7F77F7L--7F--J||||F7F7L7||FJ|FJ|||||F7F77L---7F--JF7|F-JFJ|F7|||LJL77F||F7J--.|F|LF|.L-.|FF--J7LF-||
|
||||||
|
.J-J.|JLF|F|7F|.JLJ|.F-7|FF-J||LJ|JL-7F7LJ|FJ|F--JL7|FJ||||||L7|LJ|FJ|FJ||L7|LJL-7F7FJL7JFJLJL-7|FJ|||||F--JF7||||JFL-J-J.-7-|F-|-|7L-F.J--J
|
||||||
|
FJL-7|FF-FFL--7-LFJ7-J.---|F7LJF-JF-7LJL-7|L7LJF7F7L7L7|||||L7|L7FJL7||FJ|FJL---7LJ|L-7L7L---7FJ||FJ||||L-7FJ||||L7F7LF|.|-LL|-||-LFF-JF.F|7
|
||||||
|
|7LF77-J-L-.|L||.L7|-|F|-LLJL-7L77L7|F-7L|||L-7|||L7L-J||||L-JL-JL-7|||L7|L-7LF7L-7L--JFJF7|FJL7|||FJ|||F-JL7||||FJ|L--777J.F---J7L|J7-7-FJ7
|
||||||
|
LFFL|J|..F.FJ|F-7.LJFF|7.LF7F7|FJF7|||FJFJL--7LJLJ.|F--J|||F--7F7F7||LJFJ|F-JFJ|F7|F--7L7|L-JF-J|||L7||||.F7|||LJL-JF--J7.|FJ.FL7L-7-77||J.J
|
||||||
|
|F7-JFJ-FLFJ.FJL-7J--LJ|FF|LJLJL7|LJ||L7L---7|.F7-FJL7F7|||L7FJ|LJLJL-7|-||F7L7|||LJF7L7|L--7|F7||L7||||L7|||||F---7|F7F-777.77L|J7L-J-FF--J
|
||||||
|
LJ|7.FJ.|.F7F|.77|J.F|J|--|F---7LJF-J|FJ7F7FJ|FJ|FJF7LJ||||FJL7|F7|F7FJL7|LJ|FJ||L--JL-JL7F7|||||L-JLJLJFJ||||||LF7LJ|LJFJL7-7JL|LFJF|LFJ7|7
|
||||||
|
F-|JF|JFLJJ-77.L|J|F|-F7FFLJF7LL-7L7J|L7FJ|L7|L7|L-J|F7||LJL77LJ||FJ|L7FJ|F-JL7|L-------7LJLJLJLJF------JF|LJLJL-J|F7|F7L-7JF|7.7JF-FJ||F-JL
|
||||||
|
F-J7L.F|J7.|L-7F-J-7JFJ|F7F-J|F-7L7L7|FJL7L-JL7||F--J|LJL7F7L-7F|||FJFJL7|L7F7||F-7F-7F7L---7F---JF7F-7F-7|F--7F--J||||L--J|FJF-7-J-|JLJJ-7J
|
||||||
|
L7L-7.J7--.|--77F7FL-L7|||L-7LJFJ|L7LJ|JJL---7|||L--7L7F7||L--JFJ|||JL-7LJFJ|LJ|L7|L7|||F-7-|L---7||L7||FJ||F7LJFF7||||F--7FJ-|FJ|J.|.L|J.|7
|
||||||
|
L-JF--FFJ.F|7FLLJJ|JLF|LJ|F7L-7|F-7L-7L7F7F7FJ||L7-FJFJ|LJL--7F|FJ|L7|FJF-J.L-7L7|L-JLJ||FJFJF---J||FJLJL7|LJL7F7|||||||F-J--||L-7LL77.F--FJ
|
||||||
|
-JJ|J.|J7-F-JJL||-JF-7L7FJ|L7FJ||FJF7|FJ||||L7LJFJFJFJFJF---7|FJL7|FJFJFJF7FF7L7|L--7F7LJL7L7L-7F-J|L7F7FJ|F--J|||||LJLJ|F7J.FJF-JF||7LL-LJ|
|
||||||
|
....-.|F|.LJ.FFFF7.|--FJL7|FJL7LJL7||||FJ|||7L-7L7L7|F|FJF-7LJL-7|||FJFJFJL7||FJ|F-7LJL--7|FJF-JL-7L7LJ||FJL-7FJ||||F7F-J||.FJFJJ-7L-J||.|L-
|
||||||
|
-F77LFJFJ-7|F|LFJ|-F7.L-7|||F7L--7LJ|||L7LJL7F7L7L7|L7|L7L7L77F7||||L7L7L7FJ|||FJ|FJF7F7FJLJFJ7F7|L7|F7||L7F-J|FJ|LJ|LJF7|L7|FJ7FF77J|FFF.|.
|
||||||
|
|LL-F|.FJ-7L|J-L7|J||F--J||||L7F7L-7||||L-7FJ|L-JFJ|FJ|FJ.|FJFJ||LJL-JFJFJL-J||L7|L7|LJ|L-7FJ.FJL7FJ||||L7||F-JL-JF7L7-|||FJ||L|||L7LJ-7J77-
|
||||||
|
JJL7FL.L..|.7FF7||FJ|L7F7|||L7||L7FJ||L7F-JL7L--7|FJL-JL-7||FJFJL-7F--JFL-7F-J|FJL7|L-7L7-|L-7L-7|L7||||FJ|||F--7FJL-JFJ|||FJL--7JJLFL-JL-..
|
||||||
|
..FLJL|L|J|-JFJLJ|L7|JLJ|||||||L7|L7|L7|L--7L-7FJ||F7F---J|||FJF77|L7F7F7FJL7-|L7FJ|F7L7L-JF-JF-JL7||||||FJLJL-7LJF7F7L7||LJF---JF-JL||.F|L.
|
||||||
|
F-L|7.-7|LJLFL--7L-JL7F7|LJ|FJ|FJ|FJL7||-F-JF-JL7|||LJF7F-J||L7||FJFJ||||L-7L7|FJ|FJ||FL--7|F7|F7FJ||||||L7F---JF-JLJL7|||F-J7LJJL77FLF.LLL|
|
||||||
|
.|-|-7L--L.FFF--JF--7|||L-7|L7|L7|L-7LJL7L-7L7F7|LJ|F7||L-7||FJ|||FJL||||F-JFJ|L7|L7||F7F7|LJ|||||FJ||||L-JL--7|L7F---J|LJL--7-JL|-FF..7L|L|
|
||||||
|
-LFJ.7|L-..FFL---JF-J|||F-JL7|L7||F7L7F-JF7|FJ||L7FJ||||F7||||-||||F7||||L7FJJL7||FJ||||||L7FJLJ||L7||||F-----JF7||F7F-JF7F-7|77FFF-77-L-7-7
|
||||||
|
L||LJJ7.L-7JJF----JF7LJ||F7FJL7||LJL-JL7FJ||L7|L7||FJLJ||||||L7|||||LJ||L7|L7F7||||FJ|||||FJL-7FJL7|||LJL-----7|||||||F-JLJ.LJF7F7|FJ7JFL|F|
|
||||||
|
.LJ|7|F-JJ||-L-----JL7FJLJ|||FJ|L----7-||FJL7|L7|||L-7FJ|LJ|L7|||||L7||L7|L7||LJ||||F||LJ||F7FJ|F7||||F------7||||||LJL-7F7F77|||||L77||FFLJ
|
||||||
|
F7-|J-7|J.F7.L-F-----J|F7FJL-JFJ|F7F7L7|||F7||FJLJL7FJL7|F7|FJ|||||FJFJFJ|FJ||-FJ|||FJL-7|LJ||FJ|LJ||||F---7LLJ|||||F---J||||FJLJ|L7|F7|LFJ.
|
||||||
|
FJF|JJLL--JF7LFJF7F7F7LJLJF7F7L--JLJL7|||LJLJLJF---JL7J|LJ|LJFJ|||LJFJFJFJL7|L7|FJ||L7F7||F7||L7|F7|LJLJF--JF-7|LJLJL-7F7|||||F--JFJLJ|-JL7F
|
||||||
|
.F-J|F.L-LFJL7L-JLJLJL---7|||L7F-7F-7LJ|L-----7L7F7F7|FJF7L-7L-J|L-7L7|FJF7||FJ||FJ|FJ|||||LJ|FJLJLJFF-7L7F7L7LJF-7F--J|LJLJLJL7F7|F--JF7-F7
|
||||||
|
F|LFF.7.7|L-7|LF--7F7F7F-J|LJFJ|FJ|FJF7L----7FJFJ|LJ||L7||F-JF--JF7L7|||FJ|||L7LJ|FJL-J|||L7FJ|F----7L7|FLJL7|F-J|LJF7FL7F-----J|LJL7F77F7--
|
||||||
|
-J-JJ7|7LJJL|L7L-7LJLJLJF7L7FJFJL-JL-JL----7LJJ|FJF-J|-|||L-7L-7FJ|FJ||||FJ|L7|F-JL---7|||FJL7|L7F-7L-JL---7LJL-----JL7FJL------JF--J|L-J|7|
|
||||||
|
|J..LJF|FJLFJFJF7L---7F-J|FJL7|F-----7F-7F7L--7||FJF7|FJ||F-J7FJ|FJL7||LJ|FJFJ|L7F7F7FJLJ|L7FJL7||FJF7F--7.L---7F7F7F-J|F-----7F-JF7FJF--JF7
|
||||||
|
|-FF.FLJJ|-L7L-JL-7F7LJF-J|F7LJ|F7F7.LJLLJ|F--J||L-JLJL7|LJ-F-JFJL7FJ|L-7LJFJFJJ||||LJF-7|FJL7FJLJL7|LJF-JF-7F7LJ||LJF7||-F--7LJF7||L7L--7||
|
||||||
|
-7FJ-J.|L77.L----7||L--JF-J||F7LJLJL----7FJL--7|L7F--7F|L--7L-7|F-JL7|F7L7.L7L-7LJ|L-7L7LJL-7|L7F-7LJ7FJF7L7||L-7LJF-JLJL-JF7L7||||L-JF-7LJ|
|
||||||
|
FLJJL7--F--------J|L----JF-JLJ|-F-----7FJL7F7FJL-JL-7L-JF--JF-J||F7FJ||L-JF7|F-JF-JF-JFJF7F-J|FJL7L--7L-JL-JLJF-JF7L7F----7|L7L-JLJF7FJFJF-J
|
||||||
|
FL-...|.L7F7F7F7F7|F-----JF7F7L7L--7F7||F7LJ|L--7F--JF-7L-7FJF7|||||FJ|7F7|LJL77L-7L7FJFJ|L-7||F7|F-7|F7F-----JF-JL-JL---7LJFJF7F7FJLJFJFJ||
|
||||||
|
|-FFF-7-LLJLJLJLJ||L------J||L7L7F7LJ||LJ|F7L7F7||F7FJFJF7|L7|||||||L7|FJLJF-7L--7|FJL7|JL7FJ||||LJFJ|||L------JF--7F7F-7L-7|FJLJ|L--7L7L7F|
|
||||||
|
J-|-J|.LJ7|LL|F--JL-------7LJ-L7LJL--JL--J|L7LJLJ||||FJFJ||FJ|||||||FJ|L7F7L7|F--J||F7||F-J|FJ|||F7L7|||FF--7F-7L-7LJLJLL7FJ||F--JF-7L7L-J-7
|
||||||
|
|-J|FFL---J-F-JF---------7|F--7L7F-7F7|F--JFJF-7-LJLJ|FJLLJ|FJ||||LJL7|L||L7||L--7LJ|LJ|L7FJ|FJ|LJL-JLJL-JF7LJL|F7L-----7|L7||L7F7L7L7L-7JL-
|
||||||
|
.LJF7LL-J7||L-7|-F-------J|L-7|JLJFLJL-JF-7L-JFJF7F--JL---7||FJ||||F7||FJ|FJ|L7F-JF-JF7L7||FJ|.L7F7F------JL--7LJL---7F-J|FJLJ-LJ|FJ7L-7|7LL
|
||||||
|
|7JFL77.||-J.L||FJF------7|F-J|F-------7L7|F--JFJLJF-7F7F-JLJL7||L7||||L7||FJFJ|F-JF7||FJLJL-JF-J|LJF---7F-7F7L-7F--7LJF-JL7F7FF7|L--7.LJJ7|
|
||||||
|
|J-LL.7--||J-FLJL-JF----7||L-7|L----7F7|FJ|L7F7L7F7|7|||L--7F-J||FJ||LJFJ||L7L-JL--J|||L7F7F-7L-7|F-JF-7LJ.LJL-7LJF7|F7L-7FJ||FJLJF7FJF|LFL-
|
||||||
|
LFF7J-LJFJJ-F7F77F7L---7LJL--JL-7F7FJ||LJFL7LJL7LJ|L7||L7F-JL-7||L-JL7FJFJL7L7F-----J||FJ|LJFJF7LJL-7|FJF77F--7L7FJLJ|L-7LJFJ|L7F7|LJ7FJ.7J7
|
||||||
|
||LJJ7J7||L-|LJL-J|F7F7L---7F7F7LJLJ||L--7-L7F-J.FJFJ|L7|L7JF7||L7F7FJ|FJ|FJFJ|F7F-7FJ|L7|F7L-JL7F--J|L-JL-JF-J||L---JF-JF7|FJ7LJ|L-7-|JF|FJ
|
||||||
|
F|-JFFFFJ7|.L----7||LJL--7LLJLJL-7F--JF--JF7LJF-7|FJFJFJ|FJFJLJ|F||LJFJ|F7L7L7||LJJLJ|L-JLJL-7F7LJF7FJ7F--7FJ.F7|F7F-7|JFJ|||F--7|F7L7--J.|J
|
||||||
|
LLJFJ--L-J-FJF7F-JLJF7F-7L7F-----J|F--JFF-JL--JFJLJJL-J.|L7L7F-JFJL-7L7LJ|F|FJ||.F7-F77F7F7F7LJ|F7|LJF7L-7|L--J|LJ||FJL7|FJ|LJF-J||L7|JJ|-J|
|
||||||
|
LL7LJ|L-7|||FJLJF---JLJ-L7LJF7F7F7|L---7|F--7F-JF-7F7F-7|FJ-LJF-JF7FJFJF7|FJ||||FJL-JL-JLJ|||F7LJLJF7|L--JL---7L-7|||F7LJL-JF7L-7LJL||-F|L-7
|
||||||
|
FL7JL7---7F-JF--JF77F7F--JF7|LJLJLJF7F7LJL7LLJF7L7||||FJLJF7F7L-7|||FL7|LJL7L7||L7F7F7F7F7LJLJL7F--JLJF-----7|L--JLJLJL7F7F-JL--JJ|JLJ-FL-L7
|
||||||
|
77LF-FF-L-L--JF--JL-JLJF7FJLJF7F7F-JLJL---JF7FJ|FJLJLJL-77|||L--J||L-7|L-7FJFJLJFJ|||LJ|||F-7F7LJF----JF7F-7L--------7F|||L------7JJFLF7|JLF
|
||||||
|
|L-77.J.L7JF-7L-----7F-JLJF7FJLJLJF--7F-7F7|||FJL--7F-7FJFJ|L--7FJ|F7|L--JL7|J|.|FJ||F-J||L7LJ|F7|F----JLJJL-----7F--JFJ||F-----7|.FFFFJ|J-F
|
||||||
|
LJL|77-FFF7L7|F7F7F7|L7F--JLJF--7FJF-J|FJ|LJLJ|LF-7|L7LJL|FJLF-J|FJ||L7J7F-J|F-7LJ-LJL--JL-JF7|||||F--7F--------7|L--7L7||L----7LJ.LL.JFJ-FJ
|
||||||
|
L|--.|F-FJL-JLJLJ|||L7|L-7F7FJF-JL7L--JL-JF7F7L7L7||FJF-7||.FJF7|L7|L-J|FL-7||FJF----7F-----J|LJLJLJF7||F-------JL-7FJJLJL7F7F-JL|-FFJ.|J.F7
|
||||||
|
-|J-7|J-L-7F7F7F7LJL7LJF7LJLJ.L---JF-7F---JLJL7|FJLJL7L7||L7|FJ|L7||JFFF..FJLJ|JL---7|L-----7L-7F7F7||LJL---------7|L---7J|||L-7F7|FFJ7J.-FL
|
||||||
|
|L77L|.7FLLJ||||L7F-JF7|L---7FF7JF-JFLJF7F---7LJ|F--7|FJLJFJLJ.L7|||J|7LF-L7F7|J.LLFJ|F7F7F7L-7LJLJLJL----7F------J|F7F7L7|||F7LJ|7L-JL-7|||
|
||||||
|
JJ||.LF|7.F7LJLJFJL-7||L7F7FJFJL-JF7F7FJLJF--JF7|L-7LJ|F7FJF7F-7||LJ-JLF--LLJLJ77-FL7||LJ|||F7|F----7F---7|L------7LJLJ|FJ||LJ|F7|J7L7-L.FFL
|
||||||
|
LFJFF---F-J|J.F7L--7|||-LJ||FJF---JLJLJF-7|JF-JLJF-JF-J|LJFJLJFJ||J|L--7.|7|.FLJ--|F|LJF7LJLJ|LJF--7LJF--JL--7F7F7L--7LLJFJL7JLJLJ77LJ7L-F|.
|
||||||
|
L77LL7||L-7L7FJL---JLJL---JLJFJF--7F7F-JFJL-JF7F-JF7|F-JF7|F--JLLJF-77.L.7-.L7LLJ-F7L--JL-7F7|F7L-7L-7L-----7LJLJL7F7L--7L--JF777|.J77F-FFF7
|
||||||
|
FJF7LL--L-L7LJF7F-----7F7F7F7|JL-7LJ|L-7|F7F7||L--JLJL7-|LJL---7LJ7L|77.F|JFLJ7-FFJ|F7-F--J||LJL-7L7FJ-F7F-7L-7F-7||L--7|F7F7|L--7JF7JL7FLJF
|
||||||
|
|-7J7FLF77LL7FJLJF----J|LJ||||F--JF7L--JLJ||||L7F--7F7L7|F----7L7FJJLL7-FF.7.|7FLL7LJL7L---JL---7L-JL-7|LJ-L-7LJFJ|L7F7LJ|||||F--J||JJJLFJ7|
|
||||||
|
7F|FLJ7FF7F-J||F-JF-7F7L7LLJLJL--7|L-----7|||L7|L-7LJL7LJL---7L7L77F77|7F-FJ7|F|.LL--7L-7|F-----JF7F-7LJF7LF7L--J-L-J||F7||||||J||-FJ7.F|-J.
|
||||||
|
--JFJFLF|LJF7|FJF7L7LJL-JF7F7F7F7||F--7F7|LJL-J|F-J-F-JF-7F-7L7L7|-L77|LF.|--JLJFJJF-JF7L7L---7F-J|L7L7FJL-JL7F---7F-JLJLJLJLJL7F7F77-|-|J.|
|
||||||
|
L|--.|.FJF-JLJL-JL-JJF7-FJLJLJLJ|LJL-7LJLJF7F-7|L--7|F7|-|L7L-JLLJ-JF--J|F-7JFLF7JFL--JL7L-7F7LJF7L-J-LJF----J|F-7|L7F---7F7F-7LJLJL7.LF7.F|
|
||||||
|
.7FJ.J.L-J|-F-----77FJL7L----7F7L-7F7L--7L|||FJL--7|||||FJFJJ.F77L|JJ.|FLJFLF7.JJF------JF7LJL-7||.F7FF7L-----JL7LJFJL--7LJLJ|L7F-7FJ7F7JFJ.
|
||||||
|
F-JFJJF|-L|.L--7F7|FJF7L-7|F-J||F7LJL--7L7|||L7F77LJ||||L-J.F-JL7L|-.7JLL-JJ.J7||L--7F7F7|L7F-7LJL-JL-JL-------7L--JF7F7|F7LF7|LJ7LJF-J|-|J7
|
||||||
|
|7L|F|-|.LLFF-7LJ||L-J|F7L7|F7|LJL----7L-J||L7LJL--7||||F7F7L-7FJF7J-|7.L---..F7LJLFJ|LJ||FJ|FJF--7F----------7L--7FJLJ|||L7|L7F7F7FJF-J7LF|
|
||||||
|
7J-FJ7.J7LLFL7L--JL---J|L7LJ|||F------JJF-JL-JF7F--JLJLJ|LJL7-|||||F-|-F7F7-77FLJLLL7|F7||L7|L7|F-J|F--------7L7F7|L--7LJ|FJL7LJLJ||FJJFJ7|7
|
||||||
|
L-F7JJ7.7-FFJL7F-7F7F7FJ|L7FJLJL-7F--7FFJF7F--J||F7F7-F7|F--JFJL-J|7J|F777JF-77JJFLLLJ||LJ-LJ7LJL--JL----7F-7L-J||L---JF7||F7|F---J|L77|J|L|
|
||||||
|
||||L-J|LF-|-LLJ7LJLJ|L--7LJF7F7FLJF7L7L7|LJF7.LJ|LJL-JLJL7F7|F7F7L-7-LF7FF7|F77FJ.||FJL-----7FF--7LF----J|FJF--J|F7F--JLJLJLJL----JFJFL.JJ|
|
||||||
|
J-|F-L-F7L-|FF7F7F---JF--JF7||||F7FJL7L-JL--JL--7|F7F----7|||||LJ|F-JFL|L7||FJL7LJFF7L-----7FJFJF7L7L-----JL-JF-7||LJF--7F7F7F--7F-7|F7--.F.
|
||||||
|
.LLJLLFJ-J-FFJLJLJF-7FJLF-J|||||||L-7L--7F7F7F-7LJ|LJF--7LJ|LJL-7LJF77JL7||||F-J7JFJL-7F---JL7L-JL7|FF7LF----7L7|LJF7L-7|||||L-7LJ7LJ-|7..F7
|
||||||
|
|.|7F-JJ.J--L7F7F-JFJ|F-JF7LJLJLJ|F-JF7LLJLJ||JL--JF7L7FJF7|F---J.FJ|F77|LJ|||JF7JL--7|L7F7F7L----JL-JL7L---7L7||F7|L7FJLJ|||F7|F--77|L--7L.
|
||||||
|
L-JL|7777FF||LJLJF7L7||F7|L-----7|L--J|F---7|L-----JL-JL7|LJL-7F7FL7||L7|F7|||FJL7F--JL7LJLJL7F7F-7F7F7L----JJLJLJ|L7|L-7FJ||||||F-J7JF-F-77
|
||||||
|
FJFLJL|7-L-F-----JL7LJLJ||F-----JL----J|F--JL--7F--7F7F7LJF-7FJ||F-J||FJLJ|||LJF7|L--7FJF---7LJLJFJ||||F-7F7.F---7|FJL--JL-JLJLJ||F7J.FL--77
|
||||||
|
J7|7|JLJ7JLL------7L7F77LJL----7F------JL----7F||F7LJLJL7FJ|LJFJ|L-7|||F7FJ||F-JLJ7F7|L7L--7|-F--JFJLJLJFLJL7|F--J|L---7F7F7F7|FJLJL-7JJ-F||
|
||||||
|
FF|-L.|7L7|L7|FF7L|FJ||F7F-7F-7||F---7F----7FJFJLJL----7|L-7F7|FJF7||||||L7||L7F7F7||L7L7F7|L-JF-7|F--7F7F7FJ||F7||F---J|||LJL-JF7F7FJJ.-F77
|
||||||
|
F7F-L7L-7JF--LFJL-JL-J|||L7|L7|LJL--7|L---7|L7|F7F7F7F-JL--J|LJ|FJ||LJ|||FJ|L7||LJ||L7L7LJ|L--7|FJ|L-7||LJLJJ|||L7LJF-7FJLJF7F7FJ||LJJF|.L|7
|
||||||
|
J7L77F|L|.JJF|L------7|||FJ|FJL-----JL---7|L-J||||||LJF7|F-7|F-JL7|L7FJ|LJFJ.|LJF-JL7|7L-7L7F7LJL-JF-JLJF7|F-JLJFJF7|FJL7F-JLJLJLLJJ..FJL.L7
|
||||||
|
L|.LLJF-JF|7FF--7F7F7||||L7|L7F7F-------7|L--7||||LJF7|L7|FJ||F-7|L-JL7L-7|F7L-7|-F-J|F7FJFJ|L7F--7L--7FJL-JF7F7L7|LJL7FJL-----7|LF-7-|7|.7|
|
||||||
|
7||7LLLJ-FJF7L-7LJLJLJLJL-JL7LJLJF------JL---JLJLJF7|||FJ|||||L7|L---7L77|LJL7FJL-JF7||LJFJFL7||F-JF--J|F---J|||FJ|F--J|F--7F-7|F7|FJ7|FF|LJ
|
||||||
|
L-L7.|.7.FFJ|F7L-----7F--7F7L7LF7L---------7F-7-F7|||||L7|L7||FJ|F7F7L7L-JF--JL-7F-JLJL-7|F7FJ|||F7L---JL7FF7LJLJF|L---J|LFJL7LJ|LJL7FF7L7-7
|
||||||
|
|.FF-7-FFFL7LJL----7LLJF-J|L7L-JL7F----7F--J|FJFJ||||||FJL7||||FJ||||JL--7L7F7F-JL7F7F7F|LJ|L7LJ|||F7F7F7L-JL-----JF7F-7L7L-7L--JF-7L-JL7J-J
|
||||||
|
77|L7L.||LFJF--7F-7L-7FJF7L7L7F7FJL---7|L---JL7L7|||||||F7|||||L7|||L-7F7|FJ||L7F7|||||FJF7L7|F7LJLJLJ|||F-7F7F7F-7||L7L7L-7L----JFJF--7|J-7
|
||||||
|
--L-JF|LJ.L7|J7LJFJF7LJFJ|FJ-LJ|L-----JL------JFJ|||||||||||||L7LJ||F-J|||L7|L7LJ|||||||FJL-JLJL-----7|||L7|||||L7LJL-J7L--JF----7L7L7.LJJF7
|
||||||
|
|-J-J-F-J7JLJFF7-L-J|F-JFLJF7F-JF7F--------7F-7L7||LJ||LJLJ|||7L-7|||F7|LJFJ|FJFFJLJ||LJ|F77F---7F7LFJLJ|FJLJ||L7L---------7|F---JJL-J77L7F7
|
||||||
|
F7.FL7J.FF-LLFJ|F7F-JL7F---J|L--JLJF-----7FJ|FJFJ||F7||F---J|L-77||||||L-7L7||F7|F-7||F-J|L7L--7|||FJF-7LJF7-LJFJF7F7F--7F7LJL--7-FL-|.7F|JL
|
||||||
|
L|7F7|.F|LF7FL7|||L-7FJL-7F7L-7F--7L7F--7LJFJ|LL7|LJ|||L---7L-7|FJLJ|||F-JFJ|LJ|LJ-|LJ|F7L7|F-7||||L-J||F7||F7.L-JLJ|L-7|||F7F-7L7L|---L7|.|
|
||||||
|
F-J|J.FFF-J|F-J||L--JL--7LJL-7|L-7L-J|F-JF7L7L7FJL-7|LJF---JF7||L-7FJ||L-7|J|F7L7F7|F7LJL-J|L7||LJL--7FJ|LJLJL7F7F7JL--JLJLJ|L7L-JL--|.LF77.
|
||||||
|
-JJL.FLLL-7|L-7LJF---7F7|7F7FJ|F7L---JL--JL7|FJL7F-JL-7|FF7F|LJ|F7||FJL7FJL7LJL7|||LJL-7F--JFJ|L--7F-JL-JF-7F7LJ|||F-------7L7L--77.FF-F.L77
|
||||||
|
FLFJ-J.LLFJL--JF7|F--J|||FJ|L7|||F---------J|L-7|L7-F7|L7|L7L7FJ|LJ|L-7|L7FJF-7|LJL7F--J|F7FJFJF--J|F7F--JJLJ|F-J|LJF---7F7L7|F7FJ-L-J|.F.L7
|
||||||
|
|-7J.J...L-7F7FJ|||F7FJLJL7L-JLJ|L------7F7-|F-JL7L7|||FJ|FJFJL7L7FJ|FJL7|L7|FJL7F-JL-7FJ||L7||L--7|||L-----7LJF7|F-JF7-LJL-J|||||.L|FJ7L-7|
|
||||||
|
|FJ..|-7FLLLJLJ.LJLJLJF-7-L7F7F7L---7F--J||FJ|F7FJFJ|||L7||FJF-J7||F7L-7LJFJ||F7|L-7F7||FJL7||F7F-JLJ|7F7F-7L-7|||L--JL-----7LJ|L-7-LF-L..77
|
||||||
|
F-JJ-|.FFF--7F-7JF---7L7|F7||LJL-7F7LJLF7|||FJ||L7L7|||FJ||L7|JF7||||F7|F-JJ||||L-7|||||L7FJ||||L--7FJFJ|L7|F7LJLJF-----7F--JF7L--J7.J-|7..|
|
||||||
|
7JJ-7J7FFJF7|L7|FJF-7L-JLJLJ|F--7LJ|F--J||LJL7||LL7|||||FJ|FJ|FJ||||||||L-7FJ|||F7|||||L7|L7|LJ|F7FJ|-L7L-JLJL---7L7F--7LJF7FJL-7JJL7.L7J7-L
|
||||||
|
LF-FF---JFJ|L7||L-J-L-----7FJ|F7L--J|F--JL7F-J||F7||||||L7|L7|L7||||||||F-JL7||||||||||FJ|FJ|F-J||L7|F7L--7-F--7LL-J|F-JJ-|||F--J7||77LJ||7|
|
||||||
|
7|FFL7F7FJ.L7LJL-7F7JF77F-J|JLJL7F-7||F7F7|L7FJ||||||LJ|FJL7|L7||||||||||F-7||||||||||||FJL7|L7FJ|FJ||L7F7L7|F-JF---JL-7FFJ|||F-7J-.FJ-LJ7-J
|
||||||
|
L-7--LJLJF--JF7F7LJL-JL-JF7|F---J|FJ|||||||FJL7LJ|||L-7||F7|L7||||||||||||FJ|||||||||||LJF-JL7||FJ|FJ|-||L7LJL--JF--7F7L7|FJ|LJFJ.L-J--F|L|.
|
||||||
|
.|||7.||-L---J||L7F7F-7F7|||L-7F7|L7|||||||L7FJF7||L7FJLJ|LJFJ||LJLJ||||||L7|LJ||||||||F7L---JLJL7|L7|FJL7L7F7F--JF7||L7LJL-JF-JJJF|JFF.J-FF
|
||||||
|
|J|-7F|FF--7F7||.LJLJFJ|||LJF-J|||FJ||||||L7|L7|LJL7||F--JF-JFJL7LF7LJ||||.|L-7||LJLJ|LJL--7F---7||F|||F7|FJ||L7|FJ|||FJF-7F7L--7JJLL|JL-F|J
|
||||||
|
|FJ||7LFJF7LJ|LJF7-F7L7|LJF-JF7|||L7|||LJL7|L7|L7F-JLJL-7FJJFJF7L7||F-J|||FJF-JLJLF7FJF-7F7LJF-7|||FJ|||||L7|L7L-JFJLJL7|F||L---JJ|..|-|FL77
|
||||||
|
F--|L-JL-J|F7L--JL-JL-JL7FJF7|LJ|L7||LJF--JL7||FJL---7F7||F-JFJL7LJ|L7FJLJL7|.F77FJLJFJ-||L-7L7LJ||L7|||||L||FL---JJF77|L7|L7F7JF7J---7F7|L7
|
||||||
|
FJJLJ.FF7|LJL------7F7F-J|FJ||F-JFJ||F-JF7F7|||L7F7F7||LJ||F7L-7|F7|FJ|F---JL7|L7|F7FJF-JL-7|FJF7LJFJ|LJLJFJL-------JL7L7|L7LJL-J||JL|-LJ-LF
|
||||||
|
-JFL.F7|L--7F------J||L-7LJ|LJL7FJ-LJ|F7|LJLJ|L7||||||L-7|||L7FJLJLJL-JL--7F7LJFJLJ|L7|F7F7||L-JL7.|FJF---JF7F----7F-7L7LJFJF7F--J77-|||7..|
|
||||||
|
|L|LFJ|L--7|L---7F-7||F7|F---7FJL7F7FJ||L7F--JFJLJ||||F-J||L7|L----7F-----J||F7|F--JFJLJ||LJL7F-7L7|L7|F7F7||L---7LJ7L7L-7L-J||F|.F77.-L-7F-
|
||||||
|
L7-FL7L---JL----J|FJ||||||F-7LJF-J|LJFJ|FJL-7FJF7LLJ|||F7|L7|L7F-7FJL--7F7FJ||||L7F7L7|FJL77FJL7L-JL-JLJLJLJL7F--JF7F7L-7L--7|L777JLF7FJLF|J
|
||||||
|
|.LJ.L----7F7F--7||FJ||||||FL-7L-7L7FJ|||F--JL-JL7F7||||||FJ|-|L7|L7F-7|||||||||FJ|L7L7|F7L7|F7L----7F7F7F---JL---JLJL7J|F7FJ|FJL-.FL.L7.|L7
|
||||||
|
-JFL.|7FLFJ|LJF-J|||FJ||||L7-FJF-J.|L-7||L--7F7F7||LJ|||LJL7L7|FJ|FJL7LJ||L7LJ||L7L7L7|LJL-JLJ|F-7F7LJLJ||F--7F7F7F7F7L7||LJL||-F.F||-L-F|-.
|
||||||
|
JF-JFL-7-L7|F-JF-JLJL7||||FJFJFJF--JF7|||F--J|LJLJL7FJLJF--JFJLJJ||F-JF7|L7L7FJL7L-JJ|L-----7FJ|FJ||F7F7|||F-J|||||LJ|FJ|L--7LJJ|---F-J7-JFF
|
||||||
|
J7.L-7.-F-J||F7L--7F7||||LJLL7|FJF7FJ|||||F-7L--7F-JL7F-JF-7L---7LJL7FJ||LL-J|F7L-7F-JF---7FJL-JL7|LJLJ||LJ|F7||||L-7LJFJF7FJ-|7L-JJ..||.LFJ
|
||||||
|
F|-FJ---|F7|LJ|F--J|LJ|||JF--J||FJ||LLJ||LJ-|F7FJL7F7|L7FJFJF7F7|-F-J|FJL7F--J|L7FJL-7L-7|LJ|.F--JL--7FJ|F-J|||||L7FJF7L-JLJ.||F-JJ.-7L|7--7
|
||||||
|
FL-F7FJFLJ||F-JL-7LL7FJLJ.L--7|||7|L-7FJ|F--J||L-7||||FJL7L7|LJLJFJF7|L7FJ|F-7L7||LF-JF7L---7FJF7F7F7|L7|L-7|||LJ-|L-JL----7-|L7-||FLJ7L|7|J
|
||||||
|
-.FL||-FJ||||F-7FJ.LLJJF|-J|LLJ||FJF7|L7||F7FJ|F-J||||L--J7|L---7L-JLJFJL7||F|FJ|L7L-7|L----JL7|LJ||LJJLJF-J||L--7L7F7F-7F-J7JF---JLJ-|7LF77
|
||||||
|
L-7JLL.-JFLJ||||L7FLL|-J.|JLF--J|L7|LJFJ||||L7|L-7||||F----JF-7FJ|F---JF-J|L7||JL-JFFJL---7F-7|L-7|L---7FL7FJL7F-JL||||FJL7.F----J|F-7J--J|7
|
||||||
|
|--.7JF77.LFJL7L-J7|F|||77|.L7F7|FJL-7L7|LJL7||F7|LJ|||F---7L7||F-JF7F7|F-JFJLJF----JF7F--J|FJL-7||F---JF-J|F-J|F-7||LJL7FJ.|LJJ|JFL-JJ77F-J
|
||||||
|
F7-7|-F7-|JL-7L7LF7-L|JJL||-LLJLJL7F7|LLJ|F-J|||LJJFJ|||F--JFJLJ|F7|LJ|||F7L--7L-7F7FJ|L---JL--7LJ||F7|FJF7||F7LJFJ||JJJ||-77J.-7F7L7.LFLJ7|
|
||||||
|
||FF|7L7-|-|-|FJ-LJ.FJJ.F7|7.|7L-|LJLJ7JF7L-7||L--7|FJLJL-7FJF7-|||L-7||||L7F-JLFJ||L7L7F7F7F-7|F-JLJL7|FJ||||L7FJ|LJ--FJL7|FJFLJF7-|7J.L7L|
|
||||||
|
L-J|..FJL7.J.LJ|-L7J77.F|J7F-77|.F7LJ|L-|L--J||F7FJ|L7F---JL-J|FJ||F7|LJ|L7|L-7F|FJL-JFJ||||L7||L7F7F7|||-||||FJL-7.LFLL7FJJ|-F.-FJ7FL.F7|.|
|
||||||
|
|J-F7-77-LJLJ|J7-7JL|FJ-||-7LLJ-JLJ|||.LL7F7FJLJ|L7L7|L-7F7F-7|L-J||LJF-JFJ|F7|FJL--7FL-J|||FJ|L7||||LJ|L7LJ||L7F-JFFJJJLJ.||LLJLL-J.LJJ-L-7
|
||||||
|
|.7---L|-|F7J|-77|--.J|F77.|.L|..|-|-LJJ-LJ|L7|FJFJJLJF-J||L7LJ|7LLJ7FJF7L7LJLJL7F--JF---J||L7L-JLJ|L-7L7L7.LJ.|L7|F77|J|J7FL7L|7LF-L-|J.7-L
|
||||||
|
F77.|F7.FJ-J.JJLJ|JL|LLL-J.FF.|F-L7J7LJ77|-L-JFJFJJLF-JF7|L7L7L|J-|FFJFJ|FJ7F-7FJL7F-JF7F7|L7L---7FJF-JFJFJFJ-LL7|J77FJ.LJLJFL-FJ.F7.L7.FL-J
|
||||||
|
FLF-|JL7||FL-JL||F..JJFJ.L.|L.F|J-F-|7L-|F-JJLL-JJLFL7FJLJFJFJ.|--J-|FJFJ|F7L7LJF-J|F7|||LJ7|F7F-JL7L7FJFJ.|7.LLLJL--FJF||L77|.|FF--7.JF-|F|
|
||||||
|
L.|-77LFFF7JL7-LJ|--7F7-L77-.7.|..JJ.L7|.LJF7J|FJ|F|LLJ7L-L7||-|-JFFLJ-L7LJ|FJF7|-FJ||||L-7FJ|||-|FL-JL7|J7LLJ.F|.||J|FLJ-|LJ.FLFJ.|FFJL7J||
|
||||||
|
.FL-J--||LF-|-F-|7|JF-JLLJJ7.LFFJ7J..FF--.FF7.L|LL||-LLJL7JLJ7FL-.FL..F-JF7|L7|LJJL7|LJL7FJ|FJ||FLLJ||-LJ.F-|L7J|F7L.LF|7-L|7FLL|J---L-L7F|J
|
||||||
|
FJJ7.|-F|7JF|LLF-L77..|7.FF7-.LF7JLFJ|L7J..FJ-J..|||77||.||L.LJJ.F|.F-L-7|LJFJ|J|7.||.F-JL7LJL|L7||F|7.L|-LF--F-7LJ.L.F.|.||-JLLJ.-.|7J|L7J7
|
||||||
|
|JJF7.L|LJ.LL77|J-|J7-J|FFLJ7.JLJL7J|7LL7.F|7-L-L-LJL7-|7L7|.|7--JFF|.LLLJJLL-J.L|-LJFJF-7L7JFL7L7LJLF7FF-77LLJJLJ.7J-L-7.L7L|7L7FLFF77|F|JL
|
||||||
|
L7FJF-7F.LFJ|JL--7|-|FL-FJ7-|.L--L|--|7F-7|JL7-JJF|-FJ.LJ.-F7|--L7LJ|7-J7-F7-L-7LJ.|L|FJFJFJ.|.L-J.|7L7|||LJ-F77FJ-J-FLJ|F-7.|7-|JL-J.7-J..|
|
||||||
|
.JJJ|JFL7F|FJ7..LL|-|7FFL-J||JFL-J.F||.L.L-77|F---J|JFJ.L7LFJJ7LJLF7|7.LF-FJ7LF|7FJ7JLJLL7|JJ--JJ7.F|-|77F||JLL-|...FJ7F|7-|F|7L|.7|F-|J.FF7
|
||||||
|
J-LF|.|7|7|L-F-77-L-.|LJL7LLF.|JJ.L--J7JJ|LJFLF777LL-J-F.|-7JFJ.|FJ|L-7F7||-|7|---J7.||J7LJ.FL.L7LL7|-|L7-J|..|7J7.7J7F.L|J|7LL-7-L-J-|7FFJJ
|
||||||
|
LF.FJF7-|-L--FL7L-7|-F.F-JL|.LF7F7L7-7JJFLLFFJ.LJ7-L|FF|F|.|7|.7J7...|LLL-F-7J.JFFF-7F.LFJJ-7.|7L7JLF7|F|J.|F7FJ...J||JJFF7LJF.FL7L-J.L-77|7
|
||||||
|
F--JJL-7J|LJLJJLF-L7---J-|.J-.JLJJLL7JL7JJ.7.L|LLJ-.L-J-7J-L7LLJ---FJ-LJJ..JLL7.L-JLLLL-7-FJLF77L---7JJLJ.LFJL--F-F-JJ.LLJ|-F7-JJ.JJ.JJF7--7
|
||||||
146
2023/go/day11/day11.go
Normal file
146
2023/go/day11/day11.go
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
package day11
|
||||||
|
|
||||||
|
import (
|
||||||
|
"adventofcode2023/utils"
|
||||||
|
_ "fmt"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Galaxy struct {
|
||||||
|
x int
|
||||||
|
y int
|
||||||
|
}
|
||||||
|
|
||||||
|
func Part1(input string) int {
|
||||||
|
galaxies := []Galaxy{}
|
||||||
|
lines := strings.Split(input, "\n")
|
||||||
|
var expand_rows []int
|
||||||
|
var expand_cols []int
|
||||||
|
for y,line := range lines {
|
||||||
|
for x,char := range line {
|
||||||
|
if char == '#' {
|
||||||
|
galaxies = append(galaxies, Galaxy{x, y})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// fmt.Println(galaxies)
|
||||||
|
for y,line := range lines {
|
||||||
|
no_galaxy := true
|
||||||
|
for _,char := range line {
|
||||||
|
if char != '.' {
|
||||||
|
no_galaxy = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if no_galaxy {
|
||||||
|
expand_rows = append(expand_rows, y)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for x:=0;x<len(lines[0]);x++ {
|
||||||
|
no_galaxy := true
|
||||||
|
for _,line := range lines {
|
||||||
|
if line[x] != '.' {
|
||||||
|
no_galaxy = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if no_galaxy {
|
||||||
|
expand_cols = append(expand_cols, x)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
galaxies = expand_row(expand_rows, galaxies, true)
|
||||||
|
galaxies = expand_col(expand_cols, galaxies, true)
|
||||||
|
// fmt.Printf("r: %v c: %v\n%v\n", expand_rows, expand_cols, galaxies)
|
||||||
|
dist := 0
|
||||||
|
for i:=0;i<len(galaxies)-1;i++{
|
||||||
|
g1 := galaxies[i]
|
||||||
|
for _, g2 := range galaxies[i+1:] {
|
||||||
|
dist = dist + distance(g1, g2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dist
|
||||||
|
}
|
||||||
|
|
||||||
|
func Part2(input string) int {
|
||||||
|
galaxies := []Galaxy{}
|
||||||
|
lines := strings.Split(input, "\n")
|
||||||
|
var expand_rows []int
|
||||||
|
var expand_cols []int
|
||||||
|
for y,line := range lines {
|
||||||
|
for x,char := range line {
|
||||||
|
if char == '#' {
|
||||||
|
galaxies = append(galaxies, Galaxy{x, y})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// fmt.Println(galaxies)
|
||||||
|
for y,line := range lines {
|
||||||
|
no_galaxy := true
|
||||||
|
for _,char := range line {
|
||||||
|
if char != '.' {
|
||||||
|
no_galaxy = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if no_galaxy {
|
||||||
|
expand_rows = append(expand_rows, y)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for x:=0;x<len(lines[0]);x++ {
|
||||||
|
no_galaxy := true
|
||||||
|
for _,line := range lines {
|
||||||
|
if line[x] != '.' {
|
||||||
|
no_galaxy = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if no_galaxy {
|
||||||
|
expand_cols = append(expand_cols, x)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
galaxies = expand_row(expand_rows, galaxies, false)
|
||||||
|
galaxies = expand_col(expand_cols, galaxies, false)
|
||||||
|
// fmt.Printf("r: %v c: %v\n%v\n", expand_rows, expand_cols, galaxies)
|
||||||
|
dist := 0
|
||||||
|
for i:=0;i<len(galaxies)-1;i++{
|
||||||
|
g1 := galaxies[i]
|
||||||
|
for _, g2 := range galaxies[i+1:] {
|
||||||
|
dist = dist + distance(g1, g2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dist
|
||||||
|
}
|
||||||
|
|
||||||
|
func expand_row(rows []int, galaxies []Galaxy, partOne bool) []Galaxy {
|
||||||
|
new := []Galaxy{}
|
||||||
|
for _,galaxy := range galaxies {
|
||||||
|
new = append(new, Galaxy{galaxy.x, galaxy.y + howMany(rows, galaxy.y, partOne)})
|
||||||
|
}
|
||||||
|
return new
|
||||||
|
}
|
||||||
|
|
||||||
|
func expand_col(cols []int, galaxies []Galaxy, partOne bool) []Galaxy {
|
||||||
|
new := []Galaxy{}
|
||||||
|
for _,galaxy := range galaxies {
|
||||||
|
new = append(new, Galaxy{galaxy.x + howMany(cols, galaxy.x, partOne), galaxy.y})
|
||||||
|
}
|
||||||
|
return new
|
||||||
|
}
|
||||||
|
|
||||||
|
func howMany(xs []int, a int, partOne bool) int {
|
||||||
|
count := 0
|
||||||
|
incr := 1
|
||||||
|
if !partOne { incr = 1000000 - 1 }
|
||||||
|
for _,x := range xs {
|
||||||
|
if x < a {
|
||||||
|
count = count + incr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
func distance(g1 Galaxy, g2 Galaxy) int {
|
||||||
|
val := utils.Abs(g1.x - g2.x) + utils.Abs(g1.y - g2.y)
|
||||||
|
// fmt.Printf("%v - %v = %v\n", g1, g2, val)
|
||||||
|
return val
|
||||||
|
}
|
||||||
38
2023/go/day11/day11_test.go
Normal file
38
2023/go/day11/day11_test.go
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package day11
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestPart1(t *testing.T) {
|
||||||
|
r := Part1(
|
||||||
|
`...#......
|
||||||
|
.......#..
|
||||||
|
#.........
|
||||||
|
..........
|
||||||
|
......#...
|
||||||
|
.#........
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
.......#..
|
||||||
|
#...#.....`)
|
||||||
|
require.Equal(t, 374, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPart2(t *testing.T) {
|
||||||
|
r := Part2(
|
||||||
|
`...#......
|
||||||
|
.......#..
|
||||||
|
#.........
|
||||||
|
..........
|
||||||
|
......#...
|
||||||
|
.#........
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
.......#..
|
||||||
|
#...#.....`)
|
||||||
|
require.Equal(t, 8410, r)
|
||||||
|
require.Equal(t, 0, r)
|
||||||
|
}
|
||||||
140
2023/go/day11/input.txt
Normal file
140
2023/go/day11/input.txt
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
.......#...........................................................................#........................................................
|
||||||
|
.............#...........#..................#.............................................................#..............#.......#..........
|
||||||
|
..................................................................#.........#......................................#........................
|
||||||
|
.................#...........................................................................................................#..............
|
||||||
|
.............................................................#..............................................................................
|
||||||
|
......................#.....................................................................#............................................#..
|
||||||
|
.....#...........................................#..........................................................................................
|
||||||
|
............................#..........................................#...............................#....................................
|
||||||
|
...........#......................................................................................#......................#..................
|
||||||
|
....................................................#.....#................................................#......................#.........
|
||||||
|
#..................................................................#.............#...........................................#..............
|
||||||
|
......................................#..................................................#...............................................#..
|
||||||
|
.................................#..........................................................................................................
|
||||||
|
...............#........#..............................................#...............................................#....................
|
||||||
|
.......#....................................................................................................................................
|
||||||
|
............................................................................#...................#..................#.......#.........#......
|
||||||
|
...................#......................#......#.......#.......#..........................................................................
|
||||||
|
............#...........................................................................#................#..................................
|
||||||
|
.....................................................#..................#................................................................#..
|
||||||
|
.............................#.....#..........................................................................#...................#.........
|
||||||
|
...#.......................................................#...............................#................................................
|
||||||
|
............................................#........................................................#......................................
|
||||||
|
...................................................................#..................................................................#.....
|
||||||
|
..........................................................................................................................#.................
|
||||||
|
#.......................#............................#.......................................#..............................................
|
||||||
|
..........................................#.................#.....................................#................................#........
|
||||||
|
..................#............................................................#........................#..............#....................
|
||||||
|
............................................................................................................................................
|
||||||
|
......#........................................................................................#.............................#..............
|
||||||
|
...............#........................#.........#.....#......#...................#..............................#.........................
|
||||||
|
.........................#.....#..........................................#.................................................................
|
||||||
|
.................................................................................................................................#..........
|
||||||
|
...........................................................#..................................................#..........#............#.....
|
||||||
|
.............#.................................................................#............................................................
|
||||||
|
.....................#............#..............#.......................................#..................................................
|
||||||
|
#..........................#...........................#..................................................#.................................
|
||||||
|
.............................................................#....................................................................#.......#.
|
||||||
|
......................................................................................................................#.....................
|
||||||
|
............#..................#...........#........#...............................#..............#...........#............................
|
||||||
|
.......#..............................#.....................................................................................................
|
||||||
|
........................#...............................................................#..............#.................#.............#....
|
||||||
|
.#..........................................................................................................#...............................
|
||||||
|
.........................................................#.....................#.................................................#..........
|
||||||
|
..........................................#..........................................#...........................#.........................#
|
||||||
|
.....#..........................#.................#..........#........#.....................................................................
|
||||||
|
..........#...........#.................................................................................#...................................
|
||||||
|
.............................................................................................................................#.......#......
|
||||||
|
..........................................................#.................#............#..................................................
|
||||||
|
.....................................................#..........................................#...........#...............................
|
||||||
|
.......................................#...............................#.............................#......................................
|
||||||
|
..................................#...............................................#........................................#.............#..
|
||||||
|
.......#.......#.......#..........................................#.........................................................................
|
||||||
|
.............................................#...............#..............................................................................
|
||||||
|
............................#................................................................#..............................................
|
||||||
|
........................................................#..................#.............................#........................#.........
|
||||||
|
...................................................................................................#..........#.............................
|
||||||
|
......#............................................................................#....................................#..................#
|
||||||
|
..................#.....#...............#.....#......#...................................#.....................................#............
|
||||||
|
..................................................................#...........#.............................................................
|
||||||
|
#.............#..........................................#...............#...................#.........#....................................
|
||||||
|
........#.............................................................................................................#.............#.......
|
||||||
|
......................#......................................#............................................................................#.
|
||||||
|
..............................#....................................................#........................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
...............#.............................................................................................#..............................
|
||||||
|
........................#............#............................#................................................................#........
|
||||||
|
...#.....................................................#................#..............#...................................#..............
|
||||||
|
.............................................#..............................................................................................
|
||||||
|
...........................#................................................................................................................
|
||||||
|
.....................................................#......#....................................................#.....#....................
|
||||||
|
.....#....................................#.....#...........................#...................#...........................................
|
||||||
|
..............#.....................#...................................................................#...................................
|
||||||
|
#........................................................................................#..................................................
|
||||||
|
.....................#........................................................................................#.............................
|
||||||
|
..........................#.......................#..................................................................................#......
|
||||||
|
.........#................................................#.........#.......................................................#...............
|
||||||
|
...............................#................................................................#.....#.....................................
|
||||||
|
...................#..........................#.................#..................#..............................................#.........
|
||||||
|
......#......#..............................................................................................................................
|
||||||
|
............................#......................................................................#........#...............................
|
||||||
|
....................................................................................................................#.......................
|
||||||
|
................................................#...........#.................#........................#....................................
|
||||||
|
.................#..........................................................................................................................
|
||||||
|
..........................#......................................................................................#..........#..........#....
|
||||||
|
#...............................................................................................#.....................#.....................
|
||||||
|
............#......................#...................#.................................#.........................................#........
|
||||||
|
............................................................................................................................................
|
||||||
|
....................................................................#.......................................................................
|
||||||
|
.....#........................................#...........................................................#...................#.............
|
||||||
|
..........................................................#..................................#..............................................
|
||||||
|
.............................#............................................#.................................................................
|
||||||
|
......................#............................................................................................................#........
|
||||||
|
..#.....................................................................................................................................#...
|
||||||
|
...........#..........................#............................................................................#........................
|
||||||
|
..............................................#.................#....................#...............#........#.............................
|
||||||
|
...........................#...........................#......................................#...........................#.....#...........
|
||||||
|
.........................................................................................................#..................................
|
||||||
|
.........#......#................................................................................................#........................#.
|
||||||
|
...#.....................................................................#..............#...................................................
|
||||||
|
.............................#......#...............................#................................................#......................
|
||||||
|
.........................................#............................................................................................#.....
|
||||||
|
.....................#............................#............#.................#...........................#...............#..............
|
||||||
|
.............#..........................................#...................................#...............................................
|
||||||
|
..#.............................#...........................................#.....................#................#........................
|
||||||
|
...........................................#...........................#.................................................#..............#...
|
||||||
|
........#...........................#.......................#.......................#.......................................................
|
||||||
|
...........................#.............................................................................#.......................#..........
|
||||||
|
............................................................................................................................................
|
||||||
|
...............#...............................................................................#..........................................#.
|
||||||
|
............................................................................................................................................
|
||||||
|
#...............................................#......#.......#...............#............................................................
|
||||||
|
.........#.................................#...........................................................#....................................
|
||||||
|
......................................#............................#...............................................#........................
|
||||||
|
......................#.........#.............................................................................#.............................
|
||||||
|
....................................................................................#............#..........................................
|
||||||
|
..........................................................................#...............#.................................................
|
||||||
|
...........#.....#................................#.........................................................................#...............
|
||||||
|
..................................................................#.......................................#.........................#.......
|
||||||
|
.........................#................................#........................................................#........................
|
||||||
|
........#...................................................................................#......#....................................#...
|
||||||
|
...............................................................#...............#............................................................
|
||||||
|
.............................................#.........................#.....................................#..............................
|
||||||
|
...................#...............#........................................................................................................
|
||||||
|
..........................#..............................#....................................#..................................#..........
|
||||||
|
...........#.....................................................................#.....#....................................................
|
||||||
|
...#.................................................#...............................................#...........#...........#..............
|
||||||
|
...............#........................#................................................................................................#..
|
||||||
|
....................#..............................................#.....................................#..................................
|
||||||
|
..................................#.....................#................................#..................................................
|
||||||
|
............................................#...................................................#.............#.............................
|
||||||
|
........................................................................................................................#.....#......#.....#
|
||||||
|
...........................................................#..................#......................#......................................
|
||||||
|
...................#.........#....................................#.........................#...............................................
|
||||||
|
....................................................#...............................................................#.......................
|
||||||
|
.............#........................#....................................................................................#................
|
||||||
|
....................................................................................#...................................................#...
|
||||||
|
.......#................................................#................#..................................................................
|
||||||
|
.#.................................................................#..............................................................#.........
|
||||||
|
...................#.....#...................................................................#.........#.........#..........................
|
||||||
|
............................................#.....#............#..................................#.........#................#..............
|
||||||
@@ -15,6 +15,12 @@ import (
|
|||||||
"adventofcode2023/day06"
|
"adventofcode2023/day06"
|
||||||
"adventofcode2023/day07"
|
"adventofcode2023/day07"
|
||||||
"adventofcode2023/day08"
|
"adventofcode2023/day08"
|
||||||
|
"adventofcode2023/day09"
|
||||||
|
"adventofcode2023/day10"
|
||||||
|
"adventofcode2023/day11"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
)
|
)
|
||||||
// Usage: go run main.go <NN>
|
// Usage: go run main.go <NN>
|
||||||
// assumes input is in day<NN>/input.txt
|
// assumes input is in day<NN>/input.txt
|
||||||
@@ -47,6 +53,15 @@ func main() {
|
|||||||
case 8:
|
case 8:
|
||||||
fmt.Printf("part 1: %d\n", day08.Part1(utils.Readfile(d)))
|
fmt.Printf("part 1: %d\n", day08.Part1(utils.Readfile(d)))
|
||||||
fmt.Printf("part 2: %d\n", day08.Part2(utils.Readfile(d)))
|
fmt.Printf("part 2: %d\n", day08.Part2(utils.Readfile(d)))
|
||||||
|
case 9:
|
||||||
|
fmt.Printf("part 1: %d\n", day09.Part1(utils.Readfile(d)))
|
||||||
|
fmt.Printf("part 2: %d\n", day09.Part2(utils.Readfile(d)))
|
||||||
|
case 10:
|
||||||
|
fmt.Printf("part 1: %d\n", day10.Part1(utils.Readfile(d)))
|
||||||
|
fmt.Printf("part 2: %d\n", day10.Part2(utils.Readfile(d)))
|
||||||
|
case 11:
|
||||||
|
fmt.Printf("part 1: %d\n", day11.Part1(utils.Readfile(d)))
|
||||||
|
fmt.Printf("part 2: %d\n", day11.Part2(utils.Readfile(d)))
|
||||||
default:
|
default:
|
||||||
panic(fmt.Errorf("no such day: %d", d))
|
panic(fmt.Errorf("no such day: %d", d))
|
||||||
}
|
}
|
||||||
@@ -54,7 +69,7 @@ func main() {
|
|||||||
|
|
||||||
// Reads day from os.Args.
|
// Reads day from os.Args.
|
||||||
func day() int {
|
func day() int {
|
||||||
latest := 7
|
latest := 10
|
||||||
if len(os.Args) == 1 {
|
if len(os.Args) == 1 {
|
||||||
return latest
|
return latest
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user