diff --git a/src/day13/day13.go b/src/day13/day13.go new file mode 100644 index 0000000..dcc5560 --- /dev/null +++ b/src/day13/day13.go @@ -0,0 +1,100 @@ +package main + +import ( + "AOC2021/src/helper" + "fmt" + "os" + "strconv" + "strings" +) + +type foldingInfo struct { + alignment string + length int +} + +func main() { + args := os.Args[1:] + input, err := helper.GetInput(args[0]) + if err != nil { + fmt.Println(err) + } + var points [][2]int + var folds []foldingInfo + for _, row := range input { + if helper.ContainsCharacter(row, ",") { + splitRow, _ := helper.MapToNumber(strings.Split(row, ",")) + xValue := splitRow[0] + yValue := splitRow[1] + points = append(points, [2]int{xValue, yValue}) + } + if helper.ContainsCharacter(row, "=") { + splitRow := strings.Split(row[10:], "=") + aligment := splitRow[0][1:] + length, _ := strconv.Atoi(splitRow[1]) + folds = append(folds, foldingInfo{aligment, length}) + } + } + part1(points, folds) + part2(points, folds) +} + +func part1(points [][2]int, folds []foldingInfo) { + step1 := foldPaper(points, folds[0]) + set := make(map[[2]int]struct{}) + for _, point := range step1 { + set[point] = struct{}{} + } + fmt.Println(len(set)) +} +func part2(points [][2]int, folds []foldingInfo) { + for _, fold := range folds { + points = foldPaper(points, fold) + } + printPaper(points) +} + +func foldPaper(points [][2]int, fold foldingInfo) [][2]int{ + var newPaper [][2]int + for _, point := range points { + newPaper = append(newPaper, foldPoint(point, fold)) + } + return newPaper +} + +func foldPoint(inputPoint [2]int, fold foldingInfo) [2]int { + direction := 1 + if fold.alignment == "x" { + direction = 0 + } + + if inputPoint[direction] > fold.length { + inputPoint[direction] = fold.length - (inputPoint[direction] - fold.length) + } + return inputPoint +} + +func printPaper(points [][2]int) { + maxX := 0 + maxY := 0 + for _, point := range points { + if point[0] > maxX { + maxX = point[0] + } + if point[1] > maxY { + maxY = point[1] + } + } + paper := make([][]rune, maxY+1) + for i := 0; i <= maxY; i++ { + for j := 0; j <= maxX; j++ { + paper[i] = append(paper[i], ' ') + } + } + for _, point := range points { + paper[point[1]][point[0]] = '#' + } + for _, row := range paper { + fmt.Println(string(row)) + } +} diff --git a/src/day13/day13Input.txt b/src/day13/day13Input.txt new file mode 100644 index 0000000..4ccb817 --- /dev/null +++ b/src/day13/day13Input.txt @@ -0,0 +1,860 @@ +609,754 +1101,140 +1129,317 +622,327 +967,218 +661,789 +661,127 +1183,596 +649,280 +932,693 +1288,157 +1111,372 +781,219 +994,236 +1145,770 +1153,395 +755,289 +502,406 +850,126 +902,58 +907,5 +268,700 +646,436 +1108,523 +443,343 +932,201 +1115,105 +1191,278 +1241,203 +1000,252 +1290,403 +144,597 +927,448 +782,630 +131,705 +333,367 +38,613 +1285,294 +872,93 +492,759 +986,203 +70,740 +378,693 +1004,319 +731,235 +479,875 +1210,389 +1215,215 +214,122 +599,660 +500,254 +8,478 +120,29 +70,809 +373,248 +1235,441 +1293,345 +454,686 +985,469 +1101,478 +765,287 +1029,309 +667,203 +1220,800 +508,285 +65,675 +1078,663 +592,677 +236,122 +462,564 +1042,418 +748,852 +810,254 +718,229 +386,22 +1191,728 +432,872 +392,28 +972,259 +336,416 +1096,480 +415,871 +1241,427 +165,441 +510,673 +750,313 +1255,779 +194,854 +639,107 +281,585 +679,519 +611,644 +497,171 +326,730 +882,456 +403,453 +454,630 +726,227 +383,502 +574,528 +1120,593 +214,256 +165,422 +425,115 +795,323 +673,602 +5,827 +1009,619 +364,194 +75,390 +870,122 +654,449 +62,665 +999,228 +611,508 +87,660 +677,880 +656,449 +681,336 +499,70 +870,638 +119,728 +1185,498 +28,406 +1,796 +334,210 +803,445 +17,345 +58,194 +1310,162 +661,827 +276,649 +679,883 +164,506 +990,236 +82,327 +999,485 +498,208 +1228,119 +529,732 +252,544 +579,403 +808,592 +251,665 +912,602 +502,722 +85,75 +440,122 +755,12 +898,766 +878,22 +924,22 +679,277 +1191,616 +1278,775 +1148,871 +229,37 +957,854 +987,448 +1285,518 +1252,476 +1295,857 +822,285 +731,627 +199,74 +82,775 +1186,299 +954,488 +753,508 +1232,593 +1216,663 +529,284 +795,571 +1118,226 +467,617 +691,36 +181,317 +994,658 +651,894 +1101,754 +763,603 +1088,872 +45,528 +937,224 +1042,470 +1066,648 +1131,95 +738,434 +283,60 +994,302 +1268,865 +795,287 +75,179 +1011,425 +741,75 +773,659 +373,700 +201,479 +649,614 +328,893 +1103,728 +1144,285 +468,45 +857,591 +69,203 +401,339 +579,659 +502,172 +584,891 +802,609 +644,359 +679,11 +1260,201 +194,505 +507,485 +738,350 +170,882 +84,511 +1203,123 +1240,533 +811,70 +736,687 +856,686 +698,417 +726,592 +572,544 +1144,609 +629,376 +1039,840 +455,148 +580,224 +848,778 +684,45 +1265,304 +681,406 +15,228 +172,814 +637,549 +617,610 +1185,610 +1250,275 +107,291 +186,261 +1247,299 +467,123 +350,582 +782,432 +38,505 +843,617 +1184,630 +304,712 +373,221 +534,865 +743,402 +857,620 +671,857 +70,361 +692,252 +338,658 +1121,144 +1258,266 +1058,843 +773,211 +1129,516 +1088,22 +15,86 +343,676 +70,1 +55,794 +691,91 +982,893 +1300,628 +656,162 +262,362 +850,854 +617,284 +977,280 +373,640 +654,221 +484,882 +251,235 +103,639 +1293,292 +1150,525 +758,432 +480,124 +1235,504 +1293,549 +60,275 +1036,317 +512,231 +599,794 +783,148 +350,518 +45,252 +1265,140 +979,448 +706,878 +1203,686 +288,837 +180,138 +572,431 +199,148 +530,408 +711,794 +1302,682 +497,295 +36,549 +201,415 +1009,432 +94,663 +1150,77 +1096,638 +803,87 +211,775 +320,12 +166,609 +629,558 +572,366 +1226,766 +295,789 +195,105 +99,712 +507,87 +242,383 +55,354 +681,558 +1135,313 +192,226 +895,871 +508,609 +1146,394 +281,588 +714,312 +567,234 +283,834 +455,893 +45,140 +691,673 +763,123 +75,715 +820,506 +1285,40 +242,712 +475,1 +453,722 +965,793 +475,212 +201,610 +333,280 +934,103 +570,488 +1126,10 +380,404 +256,332 +818,311 +1179,257 +725,19 +131,49 +947,283 +84,128 +402,798 +544,68 +835,1 +637,345 +846,77 +117,445 +599,107 +755,371 +596,582 +216,93 +32,775 +999,409 +50,693 +184,231 +343,436 +768,17 +507,409 +880,379 +1000,700 +1266,824 +529,675 +119,278 +284,477 +1305,280 +226,582 +353,854 +1238,360 +1048,476 +1079,887 +960,518 +619,445 +530,75 +863,390 +972,770 +759,191 +1235,390 +813,218 +775,728 +199,1 +1283,649 +800,221 +1183,416 +10,87 +199,809 +1272,505 +1099,775 +730,574 +803,436 +10,135 +1118,330 +1186,150 +1200,600 +179,95 +1228,648 +1218,673 +731,403 +780,744 +763,238 +1258,765 +209,140 +572,618 +631,211 +1081,115 +584,592 +432,868 +787,413 +700,518 +555,12 +1265,670 +350,312 +599,659 +90,823 +678,312 +99,523 +455,1 +851,49 +743,660 +714,694 +102,14 +1183,484 +870,548 +242,800 +759,255 +200,712 +110,404 +1190,865 +441,553 +427,289 +577,819 +1198,521 +1022,57 +946,252 +852,117 +535,166 +1146,871 +937,130 +1009,294 +855,746 +301,619 +908,798 +1255,100 +1047,236 +1004,127 +683,649 +596,312 +189,592 +584,85 +107,603 +734,705 +1255,794 +671,37 +316,816 +1183,148 +599,802 +999,555 +131,845 +842,630 +1094,435 +684,493 +1038,257 +17,292 +1208,14 +58,582 +503,691 +338,684 +1225,75 +818,759 +227,289 +649,815 +835,95 +447,838 +468,630 +196,119 +1228,366 +155,70 +927,18 +145,129 +488,285 +1255,660 +338,236 +684,401 +1123,501 +244,210 +44,70 +972,322 +964,333 +190,301 +1260,878 +555,289 +738,17 +574,687 +821,322 +294,119 +1124,261 +8,864 +97,633 +741,560 +401,107 +560,313 +1252,200 +1273,508 +803,485 +25,294 +1193,449 +266,520 +927,100 +848,668 +1300,135 +430,379 +398,809 +1285,376 +70,533 +800,673 +869,553 +552,432 +736,207 +227,658 +202,523 +1096,414 +1300,807 +611,386 +1124,40 +194,768 +786,789 +428,134 +125,610 +301,723 +637,154 +1114,119 +1166,597 +1253,276 +373,757 +842,854 +447,56 +338,592 +1186,819 +412,766 +1042,700 +529,50 +932,130 +914,469 +766,765 +1274,549 +253,555 +55,787 +142,630 +567,423 +1054,292 +584,816 +870,775 +530,744 +560,761 +376,791 +127,746 +142,679 +383,354 +1213,185 +147,458 +619,449 +17,549 +1292,113 +830,115 +1290,711 +579,627 +594,744 +459,49 +17,101 +960,312 +1114,103 +962,331 +510,221 +960,648 +808,40 +1158,854 +453,31 +445,757 +972,722 +82,648 +84,766 +252,350 +656,673 +994,572 +242,576 +438,93 +972,684 +930,765 +810,366 +1245,219 +796,630 +912,85 +851,553 +590,362 +522,768 +1223,471 +912,187 +1000,194 +455,61 +1140,882 +142,862 +440,548 +310,194 +579,267 +335,527 +52,129 +338,572 +52,317 +249,334 +428,456 +1240,592 +649,127 +1235,715 +720,532 +976,236 +855,820 +58,694 +1019,803 +1016,119 +338,302 +360,441 +631,277 +360,119 +388,374 +1054,332 +398,292 +1240,361 +781,675 +199,746 +338,266 +1068,94 +1144,733 +1191,838 +1293,101 +190,593 +572,17 +187,393 +35,673 +604,878 +960,376 +1285,742 +1153,767 +907,229 +1236,171 +74,798 +529,844 +304,742 +1111,509 +1186,75 +330,789 +902,836 +507,807 +594,150 +1150,824 +350,648 +460,374 +637,602 +443,775 +1029,585 +1006,152 +855,74 +989,367 +945,308 +654,673 +599,115 +1148,388 +1185,442 +972,266 +1247,485 +57,618 +1068,383 +160,525 +1006,182 +82,528 +542,877 +189,144 +515,607 +950,329 +335,367 +927,502 +808,722 +790,513 +147,893 +1211,630 +117,683 +1247,261 +380,577 +338,628 +1240,85 +966,194 +85,819 +229,331 +1115,789 +100,57 +534,641 +857,722 +867,551 +15,779 +1226,847 +1101,11 +701,590 +1111,522 +410,246 +679,375 +1275,673 +161,453 +1208,822 +1163,458 +244,684 +169,767 +490,506 +25,40 +1111,677 +20,403 +271,115 +1094,660 +527,333 +92,673 +838,745 +1039,100 +950,791 +1279,161 +401,787 +291,49 +883,68 +644,583 +1138,528 +858,696 +323,448 +840,231 +1150,593 +165,472 +885,709 +1171,123 +1275,91 +410,210 +664,10 +200,182 +363,283 +529,610 +1216,399 +992,478 +1266,70 +194,40 +681,376 +753,277 +857,303 +1006,742 +609,670 +842,712 +1131,767 +579,665 +1109,610 +80,239 +1240,816 +69,427 +557,386 +781,284 +494,824 +160,77 +36,252 +838,149 +325,469 +611,610 +599,0 +612,635 +979,446 +887,887 +974,478 +609,130 +551,479 +345,101 +343,781 +880,462 +726,533 +164,871 +1300,124 +780,408 +627,649 +1246,362 +1200,404 +398,1 +172,528 +994,322 +572,528 +360,775 +380,490 +783,522 +27,649 +1278,329 +1255,110 +27,245 +679,617 +64,362 +58,418 +1230,574 +281,254 +408,126 +701,140 +659,448 +971,721 +766,129 +671,115 +1252,582 +271,840 +957,40 +570,406 +110,490 +634,543 +304,152 +699,610 +1131,212 +1226,511 +296,598 +773,30 +1223,660 +693,586 +84,847 +1208,72 +338,722 +164,785 +924,418 +1240,740 +75,504 +330,105 +455,746 +842,264 +818,358 + +fold along x=655 +fold along y=447 +fold along x=327 +fold along y=223 +fold along x=163 +fold along y=111 +fold along x=81 +fold along y=55 +fold along x=40 +fold along y=27 +fold along y=13 +fold along y=6 \ No newline at end of file diff --git a/src/day13/day13Test.txt b/src/day13/day13Test.txt new file mode 100644 index 0000000..32a8563 --- /dev/null +++ b/src/day13/day13Test.txt @@ -0,0 +1,21 @@ +6,10 +0,14 +9,10 +0,3 +10,4 +4,11 +6,0 +6,12 +4,1 +0,13 +10,12 +3,4 +3,0 +8,4 +1,10 +2,14 +8,10 +9,0 + +fold along y=7 +fold along x=5 \ No newline at end of file