Add day 13
This commit is contained in:
parent
4da3dc4a8b
commit
4904505f69
|
@ -0,0 +1,795 @@
|
|||
241,142
|
||||
57,889
|
||||
1131,239
|
||||
1076,828
|
||||
495,612
|
||||
656,775
|
||||
977,665
|
||||
65,627
|
||||
1004,401
|
||||
1245,627
|
||||
567,750
|
||||
1197,194
|
||||
654,822
|
||||
214,644
|
||||
25,738
|
||||
256,784
|
||||
1044,485
|
||||
957,102
|
||||
291,673
|
||||
271,715
|
||||
400,182
|
||||
415,245
|
||||
1083,777
|
||||
995,486
|
||||
932,695
|
||||
951,590
|
||||
376,184
|
||||
1200,879
|
||||
234,156
|
||||
276,807
|
||||
1019,221
|
||||
1110,171
|
||||
764,54
|
||||
594,317
|
||||
706,711
|
||||
348,485
|
||||
567,751
|
||||
835,360
|
||||
239,425
|
||||
169,634
|
||||
1205,131
|
||||
628,159
|
||||
363,682
|
||||
664,124
|
||||
1096,26
|
||||
1126,849
|
||||
309,217
|
||||
341,509
|
||||
612,365
|
||||
787,878
|
||||
1096,560
|
||||
378,599
|
||||
956,112
|
||||
1222,178
|
||||
947,682
|
||||
514,750
|
||||
542,876
|
||||
706,560
|
||||
514,144
|
||||
721,175
|
||||
355,511
|
||||
736,513
|
||||
1260,560
|
||||
20,746
|
||||
28,211
|
||||
721,681
|
||||
604,199
|
||||
589,715
|
||||
140,555
|
||||
967,550
|
||||
877,565
|
||||
1004,605
|
||||
157,649
|
||||
797,514
|
||||
157,612
|
||||
376,262
|
||||
726,336
|
||||
239,701
|
||||
1126,798
|
||||
1197,700
|
||||
1290,596
|
||||
390,607
|
||||
226,791
|
||||
254,182
|
||||
1059,565
|
||||
195,464
|
||||
95,462
|
||||
1064,494
|
||||
656,248
|
||||
1201,159
|
||||
1191,843
|
||||
157,359
|
||||
105,439
|
||||
1125,346
|
||||
470,350
|
||||
840,361
|
||||
475,655
|
||||
1159,486
|
||||
982,241
|
||||
515,301
|
||||
415,469
|
||||
557,175
|
||||
179,534
|
||||
850,632
|
||||
1310,653
|
||||
25,828
|
||||
469,794
|
||||
768,196
|
||||
179,140
|
||||
776,528
|
||||
1265,348
|
||||
1049,136
|
||||
82,494
|
||||
1103,639
|
||||
57,5
|
||||
706,199
|
||||
1131,140
|
||||
1010,782
|
||||
956,782
|
||||
1069,752
|
||||
1135,178
|
||||
760,109
|
||||
30,400
|
||||
214,71
|
||||
221,539
|
||||
915,880
|
||||
105,91
|
||||
751,432
|
||||
1131,886
|
||||
803,803
|
||||
194,794
|
||||
668,386
|
||||
475,136
|
||||
738,809
|
||||
485,604
|
||||
900,520
|
||||
1305,306
|
||||
1258,186
|
||||
490,184
|
||||
276,711
|
||||
1140,198
|
||||
1155,556
|
||||
393,345
|
||||
349,156
|
||||
74,682
|
||||
716,409
|
||||
835,463
|
||||
537,585
|
||||
343,550
|
||||
642,386
|
||||
264,607
|
||||
445,809
|
||||
353,102
|
||||
147,136
|
||||
654,72
|
||||
1159,408
|
||||
716,317
|
||||
1153,535
|
||||
1153,649
|
||||
1246,523
|
||||
1201,761
|
||||
77,599
|
||||
214,876
|
||||
85,711
|
||||
882,551
|
||||
594,577
|
||||
17,117
|
||||
808,464
|
||||
102,485
|
||||
181,117
|
||||
930,193
|
||||
485,148
|
||||
522,411
|
||||
88,548
|
||||
82,641
|
||||
415,873
|
||||
430,261
|
||||
850,140
|
||||
841,346
|
||||
661,761
|
||||
1066,465
|
||||
80,381
|
||||
612,529
|
||||
604,830
|
||||
922,633
|
||||
557,271
|
||||
982,38
|
||||
105,117
|
||||
773,757
|
||||
1064,752
|
||||
1228,641
|
||||
176,50
|
||||
682,159
|
||||
947,660
|
||||
278,126
|
||||
1071,425
|
||||
1282,379
|
||||
1083,565
|
||||
75,730
|
||||
830,883
|
||||
1215,350
|
||||
989,540
|
||||
50,707
|
||||
30,259
|
||||
888,11
|
||||
1201,180
|
||||
632,773
|
||||
897,752
|
||||
1096,868
|
||||
1039,715
|
||||
841,548
|
||||
604,560
|
||||
1228,361
|
||||
604,407
|
||||
542,606
|
||||
781,614
|
||||
716,45
|
||||
321,164
|
||||
1305,588
|
||||
378,466
|
||||
1262,38
|
||||
523,430
|
||||
1015,142
|
||||
1250,577
|
||||
321,87
|
||||
455,451
|
||||
301,794
|
||||
1201,831
|
||||
87,751
|
||||
1078,459
|
||||
227,777
|
||||
818,870
|
||||
708,260
|
||||
1207,44
|
||||
967,136
|
||||
1071,693
|
||||
1230,694
|
||||
554,287
|
||||
937,285
|
||||
1275,862
|
||||
1096,879
|
||||
868,40
|
||||
728,264
|
||||
1255,120
|
||||
1258,193
|
||||
898,31
|
||||
485,232
|
||||
493,432
|
||||
8,882
|
||||
244,353
|
||||
50,560
|
||||
649,596
|
||||
914,211
|
||||
1009,550
|
||||
162,248
|
||||
765,266
|
||||
1029,197
|
||||
999,662
|
||||
1116,262
|
||||
922,200
|
||||
1258,813
|
||||
549,551
|
||||
132,754
|
||||
1004,289
|
||||
1228,494
|
||||
1148,248
|
||||
266,409
|
||||
507,310
|
||||
87,591
|
||||
1148,465
|
||||
1282,211
|
||||
676,298
|
||||
1213,773
|
||||
1076,724
|
||||
192,95
|
||||
586,871
|
||||
813,130
|
||||
422,883
|
||||
1203,395
|
||||
994,435
|
||||
835,136
|
||||
835,239
|
||||
408,513
|
||||
321,535
|
||||
1026,814
|
||||
278,38
|
||||
721,715
|
||||
684,543
|
||||
1210,103
|
||||
1062,129
|
||||
795,301
|
||||
80,246
|
||||
547,296
|
||||
266,697
|
||||
109,133
|
||||
1260,793
|
||||
433,565
|
||||
1288,121
|
||||
31,128
|
||||
422,11
|
||||
343,214
|
||||
537,137
|
||||
113,418
|
||||
663,786
|
||||
584,269
|
||||
428,551
|
||||
821,880
|
||||
475,491
|
||||
773,533
|
||||
1236,660
|
||||
396,211
|
||||
589,213
|
||||
848,543
|
||||
900,429
|
||||
818,24
|
||||
109,581
|
||||
105,791
|
||||
880,261
|
||||
1096,242
|
||||
602,81
|
||||
151,520
|
||||
363,221
|
||||
7,338
|
||||
840,466
|
||||
507,214
|
||||
316,710
|
||||
1101,796
|
||||
639,662
|
||||
565,502
|
||||
934,574
|
||||
803,584
|
||||
922,493
|
||||
261,758
|
||||
1091,395
|
||||
766,879
|
||||
1245,267
|
||||
1124,681
|
||||
654,418
|
||||
1245,696
|
||||
266,493
|
||||
1207,626
|
||||
646,124
|
||||
1076,211
|
||||
1277,712
|
||||
1054,784
|
||||
5,456
|
||||
594,409
|
||||
103,268
|
||||
929,210
|
||||
1211,329
|
||||
731,255
|
||||
181,777
|
||||
647,556
|
||||
572,494
|
||||
962,401
|
||||
788,698
|
||||
1052,423
|
||||
363,212
|
||||
633,380
|
||||
801,565
|
||||
856,378
|
||||
1208,25
|
||||
1245,715
|
||||
348,849
|
||||
760,561
|
||||
731,117
|
||||
502,235
|
||||
266,485
|
||||
691,227
|
||||
523,878
|
||||
1310,241
|
||||
877,833
|
||||
363,225
|
||||
221,61
|
||||
903,73
|
||||
656,822
|
||||
1019,212
|
||||
1011,623
|
||||
55,774
|
||||
1283,271
|
||||
962,267
|
||||
687,80
|
||||
408,142
|
||||
1223,751
|
||||
691,480
|
||||
716,401
|
||||
1289,828
|
||||
1206,675
|
||||
1131,360
|
||||
967,214
|
||||
566,794
|
||||
214,375
|
||||
162,86
|
||||
1148,86
|
||||
301,290
|
||||
681,290
|
||||
396,683
|
||||
268,101
|
||||
455,443
|
||||
1284,560
|
||||
1236,234
|
||||
199,443
|
||||
490,486
|
||||
869,700
|
||||
684,473
|
||||
768,197
|
||||
1021,726
|
||||
311,680
|
||||
803,399
|
||||
856,516
|
||||
467,334
|
||||
1066,30
|
||||
92,514
|
||||
184,849
|
||||
572,137
|
||||
574,513
|
||||
1235,117
|
||||
870,252
|
||||
769,194
|
||||
661,92
|
||||
97,719
|
||||
525,294
|
||||
328,241
|
||||
95,350
|
||||
470,361
|
||||
1230,246
|
||||
972,177
|
||||
1205,803
|
||||
373,285
|
||||
142,25
|
||||
475,534
|
||||
502,883
|
||||
1011,63
|
||||
594,401
|
||||
594,849
|
||||
1253,889
|
||||
1096,625
|
||||
162,808
|
||||
708,708
|
||||
807,374
|
||||
1071,21
|
||||
621,854
|
||||
432,449
|
||||
761,509
|
||||
1268,529
|
||||
619,862
|
||||
185,346
|
||||
989,140
|
||||
333,730
|
||||
1287,789
|
||||
167,730
|
||||
430,633
|
||||
378,295
|
||||
315,486
|
||||
1143,612
|
||||
266,633
|
||||
619,480
|
||||
237,54
|
||||
1034,183
|
||||
768,249
|
||||
321,428
|
||||
284,814
|
||||
53,12
|
||||
492,248
|
||||
773,85
|
||||
803,455
|
||||
989,428
|
||||
1260,606
|
||||
266,381
|
||||
447,502
|
||||
890,66
|
||||
807,626
|
||||
826,646
|
||||
721,719
|
||||
1298,386
|
||||
1260,334
|
||||
639,232
|
||||
984,241
|
||||
761,131
|
||||
75,164
|
||||
1036,641
|
||||
1216,883
|
||||
333,665
|
||||
888,256
|
||||
388,872
|
||||
549,385
|
||||
1146,520
|
||||
522,262
|
||||
408,400
|
||||
843,334
|
||||
194,100
|
||||
151,486
|
||||
151,626
|
||||
65,719
|
||||
972,688
|
||||
407,73
|
||||
475,808
|
||||
353,100
|
||||
788,632
|
||||
917,345
|
||||
740,98
|
||||
1071,193
|
||||
1153,282
|
||||
420,549
|
||||
1044,513
|
||||
129,600
|
||||
604,549
|
||||
545,628
|
||||
258,311
|
||||
251,565
|
||||
590,523
|
||||
584,558
|
||||
1116,885
|
||||
75,117
|
||||
924,793
|
||||
985,350
|
||||
336,98
|
||||
412,31
|
||||
803,758
|
||||
929,628
|
||||
972,733
|
||||
604,194
|
||||
415,425
|
||||
1277,40
|
||||
1101,85
|
||||
545,266
|
||||
1215,462
|
||||
798,86
|
||||
661,298
|
||||
1049,399
|
||||
1235,526
|
||||
855,451
|
||||
604,269
|
||||
840,533
|
||||
1129,117
|
||||
412,191
|
||||
945,278
|
||||
246,374
|
||||
1293,117
|
||||
698,365
|
||||
378,428
|
||||
623,80
|
||||
276,421
|
||||
411,381
|
||||
1248,567
|
||||
489,14
|
||||
50,101
|
||||
351,105
|
||||
661,596
|
||||
634,596
|
||||
1078,11
|
||||
187,782
|
||||
52,365
|
||||
1103,502
|
||||
21,290
|
||||
261,399
|
||||
70,522
|
||||
768,700
|
||||
547,395
|
||||
1168,18
|
||||
1170,144
|
||||
1131,207
|
||||
1034,635
|
||||
224,633
|
||||
1198,697
|
||||
1123,334
|
||||
74,234
|
||||
1034,259
|
||||
132,632
|
||||
460,754
|
||||
179,8
|
||||
142,186
|
||||
157,805
|
||||
169,164
|
||||
26,560
|
||||
363,669
|
||||
1257,882
|
||||
234,828
|
||||
1084,607
|
||||
219,403
|
||||
788,483
|
||||
475,86
|
||||
738,757
|
||||
551,268
|
||||
999,214
|
||||
720,371
|
||||
731,777
|
||||
184,798
|
||||
1305,802
|
||||
1056,264
|
||||
1062,765
|
||||
1287,341
|
||||
300,782
|
||||
589,457
|
||||
194,306
|
||||
351,119
|
||||
879,44
|
||||
1158,435
|
||||
333,754
|
||||
686,35
|
||||
807,38
|
||||
1201,628
|
||||
604,569
|
||||
179,136
|
||||
513,514
|
||||
264,119
|
||||
207,502
|
||||
918,75
|
||||
386,793
|
||||
103,626
|
||||
281,53
|
||||
416,614
|
||||
557,623
|
||||
678,121
|
||||
898,191
|
||||
562,784
|
||||
291,3
|
||||
23,229
|
||||
112,698
|
||||
83,513
|
||||
1091,499
|
||||
604,625
|
||||
929,511
|
||||
917,121
|
||||
306,858
|
||||
567,303
|
||||
60,409
|
||||
284,80
|
||||
1038,168
|
||||
1290,298
|
||||
417,840
|
||||
475,239
|
||||
365,278
|
||||
10,357
|
||||
460,710
|
||||
1273,278
|
||||
914,722
|
||||
276,635
|
||||
107,395
|
||||
326,38
|
||||
232,11
|
||||
274,813
|
||||
52,36
|
||||
761,551
|
||||
105,803
|
||||
97,47
|
||||
837,777
|
||||
1134,760
|
||||
142,96
|
||||
738,400
|
||||
922,175
|
||||
1032,768
|
||||
646,434
|
||||
877,329
|
||||
179,758
|
||||
378,487
|
||||
1034,421
|
||||
162,429
|
||||
60,241
|
||||
460,306
|
||||
1246,371
|
||||
689,854
|
||||
349,548
|
||||
289,616
|
||||
175,178
|
||||
1233,599
|
||||
1257,133
|
||||
574,648
|
||||
1159,520
|
||||
1086,633
|
||||
914,683
|
||||
691,526
|
||||
706,700
|
||||
239,245
|
||||
1287,229
|
||||
175,716
|
||||
276,183
|
||||
820,856
|
||||
837,117
|
||||
1103,703
|
||||
1170,555
|
||||
1260,288
|
||||
1034,199
|
||||
1260,707
|
||||
410,80
|
||||
1141,306
|
||||
567,591
|
||||
348,401
|
||||
169,306
|
||||
276,259
|
||||
251,789
|
||||
1302,460
|
||||
706,382
|
||||
807,520
|
||||
989,164
|
||||
1021,840
|
||||
989,730
|
||||
435,296
|
||||
1115,464
|
||||
1110,826
|
||||
816,415
|
||||
736,246
|
||||
507,584
|
||||
776,366
|
||||
299,271
|
||||
1289,290
|
||||
894,614
|
||||
813,425
|
||||
325,350
|
||||
321,354
|
||||
1001,217
|
||||
957,100
|
||||
1285,828
|
||||
764,840
|
||||
392,819
|
||||
529,614
|
||||
1200,431
|
||||
1049,267
|
||||
1280,259
|
||||
316,206
|
||||
580,660
|
||||
207,639
|
||||
5,306
|
||||
137,603
|
||||
706,247
|
||||
184,45
|
||||
550,333
|
||||
50,869
|
||||
289,168
|
||||
1043,492
|
||||
10,296
|
||||
1303,108
|
||||
184,533
|
||||
303,105
|
||||
679,889
|
||||
934,618
|
||||
649,438
|
||||
462,351
|
||||
23,553
|
||||
894,728
|
||||
1201,714
|
||||
1004,858
|
||||
880,421
|
||||
1250,689
|
||||
666,849
|
||||
272,726
|
||||
214,652
|
||||
316,733
|
||||
485,341
|
||||
1258,529
|
||||
42,813
|
||||
484,198
|
||||
763,403
|
||||
306,401
|
||||
381,658
|
||||
863,278
|
||||
763,499
|
||||
28,351
|
||||
388,633
|
||||
1287,889
|
||||
35,227
|
||||
929,658
|
||||
232,435
|
||||
773,585
|
||||
721,457
|
||||
343,758
|
||||
671,232
|
||||
922,694
|
||||
1088,667
|
||||
661,754
|
||||
803,491
|
||||
1032,38
|
||||
567,865
|
||||
494,415
|
||||
507,491
|
||||
1148,696
|
||||
1116,588
|
||||
1223,469
|
||||
869,28
|
||||
5,140
|
||||
667,38
|
||||
195,528
|
||||
|
||||
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
|
|
@ -0,0 +1,123 @@
|
|||
#![feature(test)]
|
||||
extern crate test;
|
||||
use aoc2021::common::*;
|
||||
use itertools::Itertools;
|
||||
|
||||
const DAY: usize = 13;
|
||||
type Parsed = (Vec<Vec<bool>>, Vec<Fold>);
|
||||
|
||||
enum Fold {
|
||||
X(usize),
|
||||
Y(usize),
|
||||
}
|
||||
|
||||
impl Fold {
|
||||
fn fold(&self, grid: &mut Vec<Vec<bool>>) {
|
||||
match *self {
|
||||
Fold::X(at) => {
|
||||
for x in 0..at {
|
||||
for y in 0..grid[x].len() {
|
||||
grid[x][y] |= grid[at + at - x][y];
|
||||
}
|
||||
}
|
||||
grid.truncate(at);
|
||||
}
|
||||
Fold::Y(at) => {
|
||||
for ys in grid {
|
||||
for y in 0..at {
|
||||
ys[y] |= *ys.get(at + at - y).unwrap_or(&false);
|
||||
}
|
||||
ys.truncate(at);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_input(raw: &str) -> Parsed {
|
||||
let (points, folds) = raw.split_once("\n\n").unwrap();
|
||||
let points: Vec<(usize, usize)> =
|
||||
points.lines().map(|line| line.split_once(',').unwrap()).map(|(x, y)| (parse_num(x), parse_num(y))).collect();
|
||||
let mut grid = vec![vec![false; points.iter().map(|&(_, y)| y).max().unwrap() + 1]; points.iter().map(|&(x, _)| x).max().unwrap() + 1];
|
||||
println!("allocated x {} and y {}", grid.len(), grid[0].len());
|
||||
for (x, y) in points {
|
||||
grid[x][y] = true;
|
||||
}
|
||||
let folds = folds
|
||||
.lines()
|
||||
.map(|line| {
|
||||
if let Some(x) = line.strip_prefix("fold along x=") {
|
||||
Fold::X(parse_num(x))
|
||||
} else if let Some(y) = line.strip_prefix("fold along y=") {
|
||||
Fold::Y(parse_num(y))
|
||||
} else {
|
||||
unreachable!("{}", line)
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
(grid, folds)
|
||||
}
|
||||
|
||||
fn part1((grid, folds): &Parsed) -> usize {
|
||||
let mut folded = grid.to_owned();
|
||||
folds[0].fold(&mut folded);
|
||||
folded.into_iter().flatten().filter(|&b| b).count()
|
||||
}
|
||||
|
||||
fn part2((grid, instructions): &Parsed) -> String {
|
||||
let mut paper = grid.to_owned();
|
||||
for instruction in instructions {
|
||||
instruction.fold(&mut paper); // :thanking:
|
||||
}
|
||||
paper.into_iter().map(|ys| ys.into_iter().map(|b| if b { '#' } else { ' ' }).collect::<String>()).join("\n")
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let input = parse_input(&read_file(DAY));
|
||||
println!("Part 1: {}", part1(&input));
|
||||
println!("Part 2: {}", part2(&input));
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use aoc2021::*;
|
||||
|
||||
const TEST_INPUT: &str = "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";
|
||||
|
||||
test!(part1() == 17);
|
||||
// test!(part2() == 0);
|
||||
bench!(part1() == 661);
|
||||
// bench!(part2() == 0);
|
||||
bench_input!(input_len_for_bench => 1323);
|
||||
|
||||
#[bench]
|
||||
fn bench_part2(b: &mut test::Bencher) {
|
||||
let parsed = parse_input(&read_file(DAY));
|
||||
b.iter(|| assert_eq!(part2(&parsed).len(), 279));
|
||||
}
|
||||
|
||||
fn input_len_for_bench((grid, folds): &Parsed) -> usize {
|
||||
grid.len() + folds.len()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user