aboutsummaryrefslogtreecommitdiff
path: root/2021
diff options
context:
space:
mode:
Diffstat (limited to '2021')
-rw-r--r--2021/13/example21
-rw-r--r--2021/13/first.go108
-rw-r--r--2021/13/input916
-rw-r--r--2021/13/second.go98
4 files changed, 1143 insertions, 0 deletions
diff --git a/2021/13/example b/2021/13/example
new file mode 100644
index 0000000..282114c
--- /dev/null
+++ b/2021/13/example
@@ -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
diff --git a/2021/13/first.go b/2021/13/first.go
new file mode 100644
index 0000000..34ab6fd
--- /dev/null
+++ b/2021/13/first.go
@@ -0,0 +1,108 @@
+package main
+
+import (
+ "bufio"
+ "fmt"
+ "os"
+ "strconv"
+ "strings"
+)
+
+var (
+ dots [][]bool
+ width = -1
+ height = -1
+)
+
+func min(a, b int) int {
+ if a < b {
+ return a
+ }
+ return b
+}
+
+func foldx(n int) {
+ for y := 0; y < height; y++ {
+ if len(dots[y]) < n {
+ continue
+ }
+ if len(dots[y]) < width {
+ dots[y] = append(dots[y], make([]bool, width-len(dots[y])+1)...)
+ }
+ for i := 1; i <= n; i++ {
+ if dots[y][n+i] {
+ dots[y][n-i] = true
+ }
+ }
+ }
+ width = n
+}
+
+func foldy(n int) {
+ for i := 1; i <= n; i++ {
+ dots[n-i] = append(dots[n-i], make([]bool, width-len(dots[n-i])+1)...)
+ for x := 0; x < len(dots[n+i]); x++ {
+ if dots[n+i][x] {
+ dots[n-i][x] = true
+ }
+ }
+ }
+ height = n
+}
+
+func main() {
+ scanner := bufio.NewScanner(os.Stdin)
+ for scanner.Scan() {
+ line := strings.Split(scanner.Text(), ",")
+ if len(line) < 2 {
+ break
+ }
+ x, _ := strconv.Atoi(line[0])
+ y, _ := strconv.Atoi(line[1])
+ if y >= height {
+ dots = append(dots, make([][]bool, y-height+1)...)
+ height = y + 1
+ }
+ if x >= len(dots[y]) {
+ dots[y] = append(dots[y], make([]bool, x-len(dots[y])+1)...)
+ if x >= width {
+ width = x + 1
+ }
+ }
+ dots[y][x] = true
+ }
+ for scanner.Scan() {
+ line := strings.Split(scanner.Text(), "=")
+ letter := line[0][11]
+ n, _ := strconv.Atoi(line[1])
+ if letter == 'y' {
+ foldy(n)
+ } else {
+ foldx(n)
+ }
+ for y := 0; y < height; y++ {
+ w := min(width, len(dots[y]))
+ for x := 0; x < w; x++ {
+ if dots[y][x] {
+ fmt.Printf("#")
+ } else {
+ fmt.Printf(".")
+ }
+ }
+ fmt.Println()
+ }
+ fmt.Println()
+ fmt.Println("---")
+ break
+ }
+ score := 0
+ for y := 0; y < height; y++ {
+ w := min(width, len(dots[y]))
+ for x := 0; x < w; x++ {
+ if dots[y][x] {
+ score++
+ }
+ }
+ }
+ fmt.Println(score)
+}
diff --git a/2021/13/input b/2021/13/input
new file mode 100644
index 0000000..aef0a4a
--- /dev/null
+++ b/2021/13/input
@@ -0,0 +1,916 @@
+1213,736
+1158,890
+626,303
+98,10
+878,268
+1208,143
+112,400
+865,894
+1218,179
+1089,418
+535,886
+726,515
+1263,786
+589,270
+80,518
+288,322
+1101,483
+989,308
+1002,707
+467,18
+1036,364
+552,591
+445,280
+912,40
+1268,761
+984,47
+883,574
+815,784
+719,236
+865,166
+836,581
+656,735
+228,264
+23,466
+1099,515
+1284,665
+432,268
+195,493
+1001,308
+430,222
+1294,537
+427,646
+574,381
+1116,829
+1143,808
+950,578
+293,579
+28,751
+169,341
+326,159
+257,721
+773,670
+1231,556
+306,436
+454,520
+1267,522
+85,309
+1273,358
+1019,208
+870,504
+647,175
+408,544
+1310,386
+912,854
+512,10
+674,770
+273,742
+626,584
+112,10
+736,420
+1198,884
+214,620
+139,751
+448,782
+771,646
+709,796
+755,460
+179,838
+360,578
+274,364
+656,401
+810,61
+194,310
+584,515
+773,238
+184,241
+932,661
+105,333
+1096,838
+959,838
+252,341
+1237,338
+112,884
+746,812
+735,556
+45,75
+815,838
+654,719
+1225,309
+1226,892
+453,465
+783,520
+987,446
+348,458
+976,175
+487,392
+1307,558
+1279,882
+145,509
+909,444
+1310,389
+626,527
+356,527
+363,774
+142,130
+246,581
+1064,581
+925,837
+166,842
+529,877
+124,341
+709,546
+651,490
+372,16
+537,614
+1004,213
+1198,661
+1240,40
+701,504
+1103,120
+638,462
+857,351
+269,794
+1099,122
+624,360
+1284,217
+902,26
+102,672
+691,208
+850,287
+1083,698
+636,770
+475,539
+1280,735
+495,712
+1273,655
+217,854
+1109,687
+345,565
+939,43
+902,203
+803,241
+35,838
+169,624
+206,236
+413,718
+617,599
+729,786
+372,430
+467,242
+771,324
+924,268
+574,854
+167,502
+141,738
+166,52
+659,336
+1240,123
+672,462
+902,581
+883,320
+37,655
+209,0
+897,875
+823,630
+1074,264
+385,794
+1131,838
+1151,504
+1294,357
+1260,396
+1228,768
+209,57
+1225,360
+1111,710
+333,586
+996,371
+954,140
+790,367
+843,348
+1058,877
+252,509
+181,385
+1218,267
+1123,428
+191,98
+1039,372
+214,504
+274,260
+359,751
+1109,753
+659,359
+10,674
+835,56
+730,490
+378,1
+0,539
+35,182
+276,661
+469,626
+1061,533
+783,432
+656,847
+281,707
+187,428
+1275,568
+716,143
+938,878
+663,117
+738,254
+954,86
+467,796
+966,761
+405,311
+209,651
+38,98
+1233,824
+430,837
+1290,841
+865,280
+1123,18
+985,170
+182,859
+1164,245
+656,607
+979,784
+634,10
+460,829
+768,172
+1126,317
+1000,805
+1198,830
+629,536
+208,542
+1193,747
+328,60
+1123,751
+1004,10
+1056,571
+254,571
+1086,57
+192,815
+1287,204
+1012,754
+838,411
+1225,361
+380,310
+616,117
+621,243
+1165,509
+706,781
+564,530
+905,311
+162,763
+354,889
+975,103
+10,226
+326,847
+184,317
+1261,143
+1310,65
+310,462
+1208,672
+402,17
+85,361
+129,847
+1020,486
+16,462
+618,856
+440,102
+686,381
+925,794
+453,65
+1287,639
+180,656
+507,91
+460,65
+893,271
+344,581
+609,208
+246,432
+781,246
+185,268
+311,696
+736,488
+346,707
+875,708
+38,565
+420,267
+433,18
+1101,651
+159,222
+420,627
+1245,446
+905,361
+954,527
+909,450
+495,392
+755,434
+179,429
+1230,868
+1129,621
+932,681
+211,122
+344,313
+52,530
+602,288
+947,326
+433,113
+634,557
+529,17
+647,117
+1253,324
+331,502
+580,205
+1111,184
+359,143
+52,36
+32,409
+1280,584
+112,661
+1143,392
+1228,126
+32,485
+28,310
+768,436
+1000,761
+281,502
+753,214
+443,646
+1213,680
+97,515
+939,820
+112,172
+1068,674
+371,43
+1089,642
+1064,82
+1131,429
+947,840
+684,751
+420,264
+1082,660
+965,553
+52,82
+795,751
+351,98
+1143,726
+815,224
+80,656
+900,605
+897,360
+706,333
+880,57
+676,841
+119,877
+938,16
+393,176
+1001,586
+507,388
+31,194
+405,182
+35,470
+185,716
+1310,57
+733,70
+391,658
+815,182
+31,65
+868,866
+356,140
+628,229
+841,492
+691,712
+1195,696
+634,287
+523,65
+345,138
+310,49
+663,623
+474,581
+520,639
+224,57
+1287,428
+328,579
+323,392
+351,504
+1287,255
+815,360
+194,136
+207,269
+542,436
+432,178
+110,634
+878,716
+201,829
+897,718
+52,726
+328,159
+1258,502
+1307,87
+1129,733
+979,315
+323,427
+1002,187
+351,639
+938,430
+527,520
+870,176
+1069,639
+1307,467
+36,856
+23,31
+413,534
+402,341
+687,65
+619,120
+634,884
+1258,858
+18,203
+542,885
+604,781
+1282,758
+5,553
+1294,385
+378,437
+1096,56
+835,838
+23,876
+1111,278
+1011,33
+308,707
+117,798
+331,763
+470,241
+830,732
+1265,691
+982,287
+950,709
+755,196
+691,694
+776,12
+1290,765
+619,40
+738,640
+1121,88
+938,464
+951,143
+537,208
+736,518
+405,126
+453,543
+365,694
+157,329
+385,57
+37,358
+482,341
+442,28
+870,457
+984,336
+693,239
+917,176
+45,158
+892,264
+1258,812
+1113,534
+303,7
+1004,661
+569,869
+281,158
+378,681
+569,534
+16,509
+435,708
+373,840
+1192,542
+721,606
+1041,794
+1151,392
+343,646
+684,143
+1064,740
+552,751
+1151,182
+1143,616
+698,313
+1064,812
+446,800
+564,812
+1191,717
+452,105
+85,360
+947,504
+380,82
+937,483
+319,551
+922,815
+1213,515
+984,607
+73,556
+309,852
+50,661
+1181,847
+1300,535
+448,560
+291,854
+447,8
+0,91
+1191,625
+932,233
+371,689
+361,131
+865,798
+1169,738
+446,94
+966,581
+110,309
+74,404
+1000,49
+1,842
+798,354
+20,884
+1233,406
+1230,243
+492,267
+867,248
+346,187
+1245,472
+736,406
+656,287
+962,590
+572,640
+544,260
+927,522
+841,786
+1029,392
+169,278
+378,445
+420,630
+488,52
+626,751
+927,372
+691,854
+803,355
+3,87
+1230,26
+154,341
+612,313
+823,560
+802,245
+216,137
+987,427
+207,120
+775,877
+897,176
+1266,654
+541,191
+159,110
+1275,182
+678,268
+1153,565
+1274,856
+991,656
+15,696
+172,341
+691,504
+310,705
+1275,470
+574,243
+448,637
+1111,262
+951,751
+619,390
+539,324
+626,143
+733,809
+656,281
+0,837
+529,429
+862,180
+1279,194
+947,568
+227,574
+378,400
+418,364
+556,182
+969,481
+500,61
+947,774
+761,333
+1012,136
+1258,530
+574,518
+666,311
+326,558
+512,130
+870,718
+689,682
+1104,658
+1101,614
+187,876
+1237,556
+313,861
+222,716
+676,884
+201,375
+336,28
+1058,509
+469,492
+1081,232
+361,763
+42,761
+1183,462
+1148,110
+1273,239
+905,712
+863,438
+905,518
+736,474
+1034,445
+1088,716
+1022,677
+117,224
+1265,686
+1171,751
+862,112
+0,165
+1123,546
+1310,508
+49,143
+880,837
+976,719
+684,361
+1233,70
+28,478
+82,126
+1053,721
+131,625
+900,289
+1193,278
+373,65
+1272,796
+490,617
+1016,633
+413,176
+82,96
+1116,584
+469,786
+867,646
+843,652
+1118,815
+775,886
+624,829
+166,500
+555,574
+385,837
+455,278
+487,840
+65,446
+1139,819
+1211,460
+1169,114
+1101,894
+624,381
+227,250
+119,269
+1029,56
+616,98
+905,126
+937,449
+1096,504
+1141,624
+1099,772
+201,687
+1116,65
+217,40
+708,136
+787,65
+1273,648
+1155,338
+659,87
+201,207
+402,161
+1091,708
+440,722
+447,269
+1022,572
+939,205
+497,329
+1058,553
+542,661
+863,886
+155,338
+622,857
+92,715
+612,133
+962,458
+634,159
+28,30
+288,677
+1028,878
+1183,520
+169,176
+23,428
+1292,203
+754,182
+555,320
+35,208
+701,75
+1022,322
+684,533
+320,623
+857,95
+18,770
+214,50
+7,777
+398,406
+261,176
+783,462
+709,98
+1123,815
+440,457
+708,168
+447,625
+359,418
+1278,485
+1012,143
+159,504
+38,796
+1230,332
+418,530
+877,255
+654,505
+28,136
+912,406
+1193,320
+485,46
+351,838
+1265,75
+758,143
+1300,226
+1282,527
+612,761
+575,556
+979,763
+77,70
+654,607
+688,261
+766,585
+145,385
+363,504
+676,287
+788,607
+857,465
+1128,35
+574,513
+1200,309
+10,668
+169,553
+654,57
+1064,868
+191,796
+45,686
+982,159
+795,79
+413,361
+761,863
+473,273
+0,401
+1017,579
+840,808
+99,434
+79,556
+162,784
+459,418
+798,10
+195,418
+651,404
+520,527
+959,887
+965,565
+288,217
+730,404
+1282,478
+602,364
+803,315
+962,304
+820,617
+741,534
+549,333
+862,714
+363,326
+102,222
+348,436
+1156,553
+1064,463
+97,214
+609,691
+214,722
+827,208
+372,688
+453,519
+385,401
+622,633
+70,40
+455,616
+949,763
+693,599
+194,758
+512,541
+1169,786
+617,536
+1086,837
+112,494
+910,161
+984,495
+959,56
+977,586
+454,262
+1141,341
+609,203
+748,19
+1143,560
+656,508
+541,703
+1181,495
+1183,246
+542,102
+736,189
+433,866
+661,756
+659,490
+331,446
+236,630
+610,688
+3,467
+446,268
+694,117
+308,35
+537,350
+1101,243
+951,418
+127,432
+979,110
+802,705
+741,86
+787,829
+1198,233
+808,890
+1279,12
+50,396
+1183,14
+23,255
+636,124
+448,714
+1236,205
+1193,798
+1103,625
+945,694
+1139,108
+522,287
+624,513
+997,33
+1190,658
+35,56
+1275,406
+773,208
+1125,716
+69,621
+1093,518
+1310,837
+1125,268
+865,448
+1102,94
+306,10
+373,483
+442,866
+858,105
+602,168
+624,159
+334,719
+480,162
+870,172
+602,736
+0,508
+1064,154
+1056,712
+582,161
+1261,591
+661,308
+35,200
+92,19
+214,390
+
+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
diff --git a/2021/13/second.go b/2021/13/second.go
new file mode 100644
index 0000000..978d521
--- /dev/null
+++ b/2021/13/second.go
@@ -0,0 +1,98 @@
+package main
+
+import (
+ "bufio"
+ "fmt"
+ "os"
+ "strconv"
+ "strings"
+)
+
+var (
+ dots [][]bool
+ width = -1
+ height = -1
+)
+
+func min(a, b int) int {
+ if a < b {
+ return a
+ }
+ return b
+}
+
+func foldx(n int) {
+ for y := 0; y < height; y++ {
+ if len(dots[y]) < n {
+ continue
+ }
+ for i := 1; i <= n; i++ {
+ if dots[y][n+i] {
+ dots[y][n-i] = true
+ }
+ }
+ }
+ width = n
+}
+
+func foldy(n int) {
+ for i := 1; i <= n; i++ {
+ for x := 0; x < len(dots[n+i]); x++ {
+ if dots[n+i][x] {
+ dots[n-i][x] = true
+ }
+ }
+ }
+ height = n
+}
+
+func main() {
+ scanner := bufio.NewScanner(os.Stdin)
+ for scanner.Scan() {
+ line := strings.Split(scanner.Text(), ",")
+ if len(line) < 2 {
+ break
+ }
+ x, _ := strconv.Atoi(line[0])
+ y, _ := strconv.Atoi(line[1])
+ if y >= height {
+ dots = append(dots, make([][]bool, y-height+1)...)
+ height = y + 1
+ }
+ if x >= len(dots[y]) {
+ dots[y] = append(dots[y], make([]bool, x-len(dots[y])+1)...)
+ if x >= width {
+ width = x + 1
+ }
+ }
+ dots[y][x] = true
+ }
+ for y := 0; y < height; y++ {
+ if len(dots[y]) <= width {
+ dots[y] = append(dots[y], make([]bool, width-len(dots[y])+1)...)
+ }
+ }
+ for scanner.Scan() {
+ line := strings.Split(scanner.Text(), "=")
+ letter := line[0][11]
+ n, _ := strconv.Atoi(line[1])
+ if letter == 'y' {
+ foldy(n)
+ } else {
+ foldx(n)
+ }
+ }
+ for y := 0; y < height; y++ {
+ w := min(width, len(dots[y]))
+ for x := 0; x < w; x++ {
+ if dots[y][x] {
+ fmt.Printf("#")
+ } else {
+ fmt.Printf(".")
+ }
+ }
+ fmt.Println()
+ }
+ fmt.Println()
+ fmt.Println("---")
+}