solutions for day 16, 17, 18 19, 20

This commit is contained in:
Patrick Michl 2021-12-20 22:12:26 +01:00
parent 9b26d17786
commit 028097d209
10 changed files with 666 additions and 0 deletions

1
data/day_16.txt Normal file
View File

@ -0,0 +1 @@
020D78804D397973DB5B934D9280CC9F43080286957D9F60923592619D3230047C0109763976295356007365B37539ADE687F333EA8469200B666F5DC84E80232FC2C91B8490041332EB4006C4759775933530052C0119FAA7CB6ED57B9BBFBDC153004B0024299B490E537AFE3DA069EC507800370980F96F924A4F1E0495F691259198031C95AEF587B85B254F49C27AA2640082490F4B0F9802B2CFDA0094D5FB5D626E32B16D300565398DC6AFF600A080371BA12C1900042A37C398490F67BDDB131802928F5A009080351DA1FC441006A3C46C82020084FC1BE07CEA298029A008CCF08E5ED4689FD73BAA4510C009981C20056E2E4FAACA36000A10600D45A8750CC8010989716A299002171E634439200B47001009C749C7591BD7D0431002A4A73029866200F1277D7D8570043123A976AD72FFBD9CC80501A00AE677F5A43D8DB54D5FDECB7C8DEB0C77F8683005FC0109FCE7C89252E72693370545007A29C5B832E017CFF3E6B262126E7298FA1CC4A072E0054F5FBECC06671FE7D2C802359B56A0040245924585400F40313580B9B10031C00A500354009100300081D50028C00C1002C005BA300204008200FB50033F70028001FE60053A7E93957E1D09940209B7195A56BCC75AE7F18D46E273882402CCD006A600084C1D8ED0E8401D8A90BE12CCF2F4C4ADA602013BC401B8C11360880021B1361E4511007609C7B8CA8002DC32200F3AC01698EE2FF8A2C95B42F2DBAEB48A401BC5802737F8460C537F8460CF3D953100625C5A7D766E9CB7A39D8820082F29A9C9C244D6529C589F8C693EA5CD0218043382126492AD732924022CE006AE200DC248471D00010986D17A3547F200CA340149EDC4F67B71399BAEF2A64024B78028200FC778311CC40188AF0DA194CF743CC014E4D5A5AFBB4A4F30C9AC435004E662BB3EF0

1
data/day_17.txt Normal file
View File

@ -0,0 +1 @@
target area: x=156..202, y=-110..-69

100
data/day_18.txt Normal file
View File

@ -0,0 +1,100 @@
[[[[4,9],[1,7]],[9,8]],[[7,9],[7,9]]]
[[[1,[1,5]],9],[[[8,0],[8,8]],[[7,2],[4,6]]]]
[[3,7],[[7,[4,6]],[[8,0],[7,8]]]]
[[[[0,1],2],4],[[9,[2,8]],7]]
[[[[9,0],9],7],[[1,0],8]]
[[4,[[1,2],1]],1]
[[[[6,1],[0,2]],[[2,3],4]],[[9,1],8]]
[[[5,9],[1,0]],[[7,0],3]]
[[9,1],[[4,7],[5,[8,6]]]]
[[5,[[3,2],[1,9]]],[[[3,8],9],3]]
[[0,[[5,6],2]],9]
[6,[2,[[4,2],6]]]
[[[[8,2],[9,1]],[9,1]],7]
[9,1]
[[[[9,8],[5,3]],5],[[6,9],[9,[6,8]]]]
[0,[[2,[2,5]],2]]
[[2,6],[[[2,8],1],[[0,2],[0,7]]]]
[[[[7,8],[8,5]],[[3,2],[4,0]]],[2,[[1,0],[2,6]]]]
[[[7,[7,0]],[[1,9],9]],7]
[[[[5,1],[0,9]],4],[[0,[9,7]],[8,[6,8]]]]
[[8,2],[2,[6,0]]]
[[2,6],[[[4,0],6],2]]
[[9,[7,[0,1]]],8]
[[[[3,8],[4,3]],[7,[0,6]]],[[[5,5],[0,4]],[[8,2],0]]]
[[[[9,1],[9,3]],[1,[0,1]]],[[[9,6],8],[9,6]]]
[[[[2,3],[7,1]],[[6,8],6]],[[[6,0],0],0]]
[[7,[[5,0],4]],[[[8,8],[6,2]],[8,2]]]
[[[0,[3,8]],[[0,0],[6,1]]],[[4,5],[[3,9],[5,8]]]]
[4,[[1,[9,6]],[8,2]]]
[[9,[[9,2],3]],[[[5,6],2],[1,[0,9]]]]
[[9,9],[[0,[9,6]],[[8,6],3]]]
[[4,[[8,3],2]],[[[9,9],9],[2,[2,0]]]]
[[[[7,3],[4,2]],7],[4,6]]
[[[2,6],[[4,0],[0,8]]],[[5,0],[3,5]]]
[[[[9,3],[0,3]],[[0,0],[1,1]]],[3,[[8,4],[8,6]]]]
[[[[3,6],8],1],[[4,[4,1]],[[5,1],[3,0]]]]
[[[[8,1],[2,0]],[5,[2,1]]],[[9,[0,0]],[[7,2],[1,0]]]]
[[[6,6],[2,3]],[[7,6],[[9,8],2]]]
[[[0,9],3],[[[9,5],5],[[6,8],[0,4]]]]
[[[0,3],9],[5,[5,[0,5]]]]
[[0,[[9,1],4]],[2,4]]
[[[9,7],[0,[7,8]]],[[[3,3],5],[[0,9],[1,5]]]]
[[0,[[8,0],[5,2]]],[[[1,8],[1,2]],[3,8]]]
[5,[0,[[9,8],9]]]
[[6,[[9,2],[3,5]]],[[[2,3],9],3]]
[1,[1,1]]
[[6,[[0,0],1]],[[7,[4,9]],7]]
[[3,[[3,5],3]],[[[9,9],6],[[5,0],8]]]
[1,5]
[[0,4],[8,7]]
[[7,[[9,2],1]],5]
[[[[6,8],[6,5]],0],4]
[[[4,1],[9,0]],[[[4,3],6],[5,9]]]
[[8,[[1,9],[5,4]]],[[[9,0],4],[5,5]]]
[[0,9],[[[5,5],[7,7]],6]]
[[8,[8,5]],[8,[2,6]]]
[[[[8,4],4],0],[[3,[2,6]],[6,6]]]
[[5,[[5,2],6]],[[[2,3],[5,0]],[[2,9],0]]]
[[[[5,9],6],[[8,9],[5,7]]],[0,[8,[2,5]]]]
[[[[9,0],7],1],2]
[[[9,3],6],[[[6,6],[9,6]],1]]
[[[2,0],[0,[4,6]]],[[[5,7],6],[9,5]]]
[[[3,[4,3]],8],[[[6,3],[0,5]],2]]
[[[[2,8],8],[5,[2,4]]],[[3,7],[2,1]]]
[[1,[[2,7],4]],7]
[[2,[4,[5,9]]],[[[7,0],6],[4,[9,1]]]]
[[[9,[3,5]],[[9,5],[5,2]]],[[2,[4,3]],[[0,5],[1,9]]]]
[[1,[9,0]],[[[0,9],[9,3]],0]]
[[[[7,8],[3,6]],3],[[[2,6],[2,9]],[[1,3],[1,3]]]]
[[[7,[1,4]],[4,7]],[[[0,7],[0,6]],5]]
[[[6,0],[3,[2,3]]],6]
[[0,[3,[1,3]]],[[2,3],9]]
[[[8,6],[0,2]],[[[8,9],[7,0]],9]]
[[[[4,9],6],2],[[[8,9],[1,5]],[9,3]]]
[[[1,5],[6,[2,7]]],[7,[1,7]]]
[5,[3,[9,1]]]
[[[7,5],[1,5]],1]
[2,[[[5,0],[4,0]],[[3,7],5]]]
[[[5,9],1],[[[3,9],4],6]]
[[3,[[5,2],[9,2]]],[4,[[3,6],[8,9]]]]
[[[5,4],[8,8]],1]
[[[[8,9],[5,8]],0],[[9,5],[6,[7,1]]]]
[[[4,[8,8]],[[9,5],4]],3]
[[6,[6,[4,3]]],[[7,[3,9]],[4,8]]]
[[5,[[4,2],[7,3]]],[[[9,0],[0,1]],[[5,8],0]]]
[[[[6,1],6],[9,[0,8]]],[9,9]]
[[4,0],[[[1,4],4],[4,4]]]
[[7,[[0,0],[1,6]]],7]
[[6,3],[5,[[2,7],5]]]
[[1,[7,5]],[0,[4,1]]]
[[[3,7],3],[[3,[0,2]],2]]
[[[0,8],[[7,0],[9,8]]],[[[0,3],4],[[6,0],6]]]
[[[[4,6],[1,7]],[[6,4],[1,5]]],[3,[9,9]]]
[[[2,[1,7]],[9,9]],[[0,[7,8]],[0,[9,6]]]]
[[9,8],[5,[6,[1,8]]]]
[[[7,2],[[0,6],[2,6]]],[[9,[0,4]],[9,[5,8]]]]
[[[8,[6,8]],[[5,5],[9,9]]],[[[2,0],6],[8,1]]]
[[[[0,8],4],[3,4]],[[0,[0,8]],[[7,5],2]]]
[7,[[[3,4],[5,4]],8]]
[[[2,8],[0,2]],6]

136
data/day_19.txt Normal file
View File

@ -0,0 +1,136 @@
--- scanner 0 ---
404,-588,-901
528,-643,409
-838,591,734
390,-675,-793
-537,-823,-458
-485,-357,347
-345,-311,381
-661,-816,-575
-876,649,763
-618,-824,-621
553,345,-567
474,580,667
-447,-329,318
-584,868,-557
544,-627,-890
564,392,-477
455,729,728
-892,524,684
-689,845,-530
423,-701,434
7,-33,-71
630,319,-379
443,580,662
-789,900,-551
459,-707,401
--- scanner 1 ---
686,422,578
605,423,415
515,917,-361
-336,658,858
95,138,22
-476,619,847
-340,-569,-846
567,-361,727
-460,603,-452
669,-402,600
729,430,532
-500,-761,534
-322,571,750
-466,-666,-811
-429,-592,574
-355,545,-477
703,-491,-529
-328,-685,520
413,935,-424
-391,539,-444
586,-435,557
-364,-763,-893
807,-499,-711
755,-354,-619
553,889,-390
--- scanner 2 ---
649,640,665
682,-795,504
-784,533,-524
-644,584,-595
-588,-843,648
-30,6,44
-674,560,763
500,723,-460
609,671,-379
-555,-800,653
-675,-892,-343
697,-426,-610
578,704,681
493,664,-388
-671,-858,530
-667,343,800
571,-461,-707
-138,-166,112
-889,563,-600
646,-828,498
640,759,510
-630,509,768
-681,-892,-333
673,-379,-804
-742,-814,-386
577,-820,562
--- scanner 3 ---
-589,542,597
605,-692,669
-500,565,-823
-660,373,557
-458,-679,-417
-488,449,543
-626,468,-788
338,-750,-386
528,-832,-391
562,-778,733
-938,-730,414
543,643,-506
-524,371,-870
407,773,750
-104,29,83
378,-903,-323
-778,-728,485
426,699,580
-438,-605,-362
-469,-447,-387
509,732,623
647,635,-688
-868,-804,481
614,-800,639
595,780,-596
--- scanner 4 ---
727,592,562
-293,-554,779
441,611,-461
-714,465,-776
-743,427,-804
-660,-479,-426
832,-632,460
927,-485,-438
408,393,-506
466,436,-512
110,16,151
-258,-428,682
-393,719,612
-211,-452,876
808,-476,-593
-575,615,604
-485,667,467
-680,325,-822
-627,-443,-432
872,-547,-609
833,512,582
807,604,487
839,-516,451
891,-625,532
-652,-548,-490
30,-46,-14

102
data/day_20.txt Normal file
View File

@ -0,0 +1,102 @@
##..#.#...##.####..#..###.#.#.#.#.####.#.##.....#####.##..#..#.#.##.......##.##.#.#...#....#.####..#.##.##....###..##.#####.##....##.#.#.#.#....####...##.#......#.#..##......##..#..###.#..####.###...##.#.##.#..##.##..#.#.#..###..##.####.#.#.#..#.##...#..##...##.#####..##.##..#...#..###.#.#...#..#..##...#.#..........#...#...#.#.#.#..#.###..##....####..#######.##.#.....#.#.###...##...###...#.##.##.##..#......#.###...#.#.#.#...##.#.#.##.#..###.#...##...##.......####.##..#.#....#.#####..#..#####.#.....#....#.#.
.##.#...##..##.#..........#####..#.##..######.##..#....#..#####.#.#####.#..#...#..#####..#.......##.
.#.#.#.#####..##.#.###..#.##.##.......#.####.#............#.#....####..#.#####.##.##.#.###..#..##...
.##.#.#...##....#.#..#...........##.#.#..#####...#..##.###..##.###..........#####..##..##.#.####....
##..####.####.###.......#....#.#####.##...#....###...##...###...#...##..####....####..#####..##..###
...###.##.....#......###.#.###..#..###...#.#..#.#######.##..#..#..#..##.##..#####.#####.###...#.###.
##.###.#....##..####.#..#.###.##.#.##..#...#...###.###.#..#..#.#.###.##.#..###.#.###....###.###.....
#.#.##..#.....#.....##....######...#........#.#.#.#.######..#...##.#.######...#.##########..#.###..#
.##.#...##.#......###..####.##.#...#..##.#.####...##..####..#####..##.###.#.###...#.#.######.#.#####
..#..##..#.#.#...####..###.#..#...#..#.#.#.#.###..####.#...#......#..#..####.#...#.#.#......#...#..#
#...###..#.#.###.#.##.##.#.#.#####....#....#.....#####...#..#..#.#####..##.....#..###.#..###.#..#...
..##.#.#..##.#.#...#...#.#.#..#.#.##....#####....#.##...#..#..#.#....###...##..#.#.##.##.#.......#.#
##.##.#######.###.#..#....#..##..#.###.....#.###..#.#..#....#.#..###.##.#.....#.#.#.##.#...#..##.#..
.....#.#.#.#.####.#..####.#....##.###.###...########.#.#....#..##.#.#####...##....##....#.......#.#.
##..#...#..#.#.####..#.#..####.#####.#####.###..#.#####.#..#...##.######.###.#..#.##.#.#..#..#.####.
#.##.##.#.####...#.#.#.#..####.#.#...###...#.#....##...####.#..#####.#.####.#..#.....###.#..#...#.#.
.#..#.##...####...##.####...###..####.##........#.#.##..#..#.##...#....##.#.#..#.#.###...##.......#.
..#..#..#.###.##...###....#.#..#..##..#...###.###...#..#.....#..#.####.#.#.#.##..###...#....##.#.###
###.##....##.#.##..####.#.###...###.###.#####..##.###.....#.#####....#.##..##.#####.##..###....#....
###..#...###..#....#..#.#...#....###.#.####.##..#.#..#.###..#..#.##.#.#.......#...#....#...###..#.##
#...#.#.#...#.####.##.#.#..#...##.....#..##....#..#.##..##.####.#.#.###..##..#.#.#.###.#.#..####..##
.###..###.##..###..#..#.##..#...#.##.#.......####.#..##.#...#.##..#..........##..####..##.###..###..
###.#.#...###..#...#####.####..#..#######.#.#.###.##.###.#.####.##.#####..###.#####.#...####.##..##.
.##..##..##.#...######.###...#.##.##....##.#...##.#####.#...##..#.#...#.#..#.##.#....##.####.#.##.#.
...####..#...#...####.#.#...#...###..#.##...####.#..######.##.....##..#...#...####.###.#..##.##..#..
#.#####.##.##..#..##.#.####..##.#.#...#..####.##..###.####.##.##...#.#...#.#.#####.####.#.###..#..#.
..#.....#..##..#...#####..##.###..##.#..##..##..####.#..#.####.###...#####.#.###.....#..#.####.#.##.
#####....###..##.#.######.#.##..##.#.#####.##########.#...##...###....###.#.....#.....###.#.#.#.##.#
##.....#.###.###.#.##.########....##.##.###...#######..##..#.#.#..#.##..####..#.###.#.###.#.#......#
..##..#...#.#.#.#.###.#..#####.#.#..#......####..#.###..###...##...##.##..#..#..#.##.#..###..##.#.#.
.#.#..#..###.##.#.#...#.#...##...#.###..#.#.##.#....#..####..#.#.##.#..#...##.#.....##...####.....#.
##.#..##...#..##.####.##....##..#####.###...#..######..#....#..#######..#..#.####.#...##.##..##..#..
..##.#.###....#..#.....#..#.#.#.#........#..##.#.#.......####.##...#.#.##.######..##..#....#.#......
.....#....#.#.##...#..######.###.###.##....##.#.##.###.....#..#.#....#####.#..##.#.....#..#.##....##
##.....#.#...####...##.##.#.##.#.##......#.#########.#.##..##...###.##.#..#....#..##.####..#######..
##...#.########.###.#....#...#..##.##.###....##...#####..##.####..##..#..#####.#..######.####...#.#.
##.####..##.#####..#..###...##.......#...#.###.#.#..#..#....#.#..##.....#.#....####.###...#.#..##.#.
#.#.#.#.###..#.#####.#...##...#.###.##..#.#####.....#...#.#.#..#...##....#...####.####.##.#.....####
..###.##.#......#######..#...##..###.##....#....#.#..###...#..###.#.#...#..##...####.###.###..#.#.##
.#..#.#.##..###########.#.#..#.###.######...###.##..#.###..##.#...#.#...###.#.##.##.#..#..#..#.#...#
.#..#.#..##....#....####.#..##....#.###.####..#.##.#.#..###.#.##.#........##.#...###.#.......##.#...
...###.#.#.##.##.##.....#.#.#..#..#.##.#######...##....#.#......##....##.#.####.####.###.#....##..#.
.#.##..#.##.##.####.....##...#..###.###.###..#..##.####..##...#.###.##..##..#####.#..###....###.##.#
#.###...#####.#..#.####...##.#..#...######.....#.#....##.#.#...##....#...........##.##.##.#...######
##..#..##.....##..#.#..##.##.#..#...####.######.......###..#..##.##..##..##..###..##.##.#.#.....#...
#......###..#####..#######.#.#..#.###..##.#..##.##.##.#..###.###..##.##.....#.#..####.#.##...##..###
.##...#..###..##..#.#####.#####.###...#.........#.##.##.###.#.#.#...###.#..###.##.##.#..#..#...###.#
#.###.###.###.#.###.#.##....##..##.......#....##.###.###.#.###..#..###.#.##.##..#.#...######.####..#
..#####.###.##.#..##.##.#..#.###..#.####....#...##.#.......#.#..##.#.......##.##.#######...######.##
#.##...###..#..##.....#.#.##.#..##...##.#####..#...##...#..#.####.#.##.##.#....##.###.#.##..##..#.#.
..#.###.#.##...#..##.#..####.###..#####.##.####.#.##..####.###..##..#...#.##...#.###....####...####.
.###.....###.#....######.#####..#..#..#.#.#..#..#.###.#........##.###...#...##..#..#...#.....#.###.#
..###.##.#.#####.#..########..##..##.#..###.#.##.#....#.###........#....#...#.#...##.#.##..#..##.##.
###.#.#.#...#..##....#.##....##.#######.#.##.#.##....#....###.#.#.....#.##..###..##..#..##..#.#..##.
.#.##..#.##..##.##.##..#.###.#..##.###.#.###.##......##.#...##.##..##...##.#...##.#..#..#.##..#.##..
####..####.###..#..#####...###.#....###.#...##........#.#...#..#.#.###..####.#.#.######...#..##.#.#.
#...#..#.##..#.#.#.#.#...##.#.##..#...#.###.###.#....##.#..##.#.###..##....#.###.#.##..#..##....#...
#.###.#.##.###.#..#...####.#....#..#.#####.#...#.###.##.##.###.###..#...#.#.####..###..........##.#.
##.##.#.###.#.##.####...###.#.###..###...####..#####.###...#.##...###.##..#.####.#.##...#....##.#.##
#....#..##.##.##......##...##.##..#####...#.##.###.##...##..##..###..#..#..#...###.##.#..#..#.#...##
###.####.....#.#....####..#.##.........#....##.....#....##.#..##.##..####..###.####.#...##....##.##.
#.......###.#..####.##..#..##...#....###...##.......##.....###.######.#..#..##..#....#.###.#..##.###
#.###.##..##..##.##...#.........####..####..#..##...##.#..#..#######.###...#......#.##.####.#..##...
#.####...##.#...#.#.###...##...#....#.##.##.####.#.#....###....#...#........##.##..#.#.####..#.#.#..
.#..###.#..#.....##..#..#.###..###.#.##...#.#.....#...#....#.##.#..#.#...#..#.#..###..#.#...###.....
.####....####....#.#.....#..#.#.##........#..#.####.##.##...#.#.####.#..#.##..##..#...#.#.##...#.#.#
#####.#...####.#.####.#...#..#...#.#.##.#..#...##..#.#...##.###.##.#.###.###.#...#..#.###.##.##...#.
#.#....#.###.##..##.##..##.#...#.###....###....###..#.####.###..#.#.##...#..####....#.####...###.#..
.#...#.###.#.####..#.#####...##...#..##........#....#..#.#.##..##.##.#######.#.#.#.##.#.#.#.##..#...
#....#....#.#.##.##.##..###..###.##..#.##.....###.###......#.#....#..#.##......#.###.#..#.#.#.#..###
#####.#####.##...#.#..#..##.####.#......######..####..##.##.##.#.......#...####..#..###.#..##.#.#.#.
#.##...##..##......###...#.#.##...#.#...#..##.###.#..#.##...#.#.#.##.###.##.#####....#...#.....##..#
..##....##..#..##..##...#..#.##.####.##........###..##.##.#.#.##..#..###...#..#...##.#.##.########.#
#...#.#####.###.#....#....#######.###..#..#.#..##..#.###.#.####.##.#..###..#....###.###....###.#..##
.......###.#.#.#..#.#..###...#.##..#..#...#..#....#..#...#.#####.#...##.#.###.###.#..#.##.#..##.....
....#.##...#.##.#.###..#####..#.######.###...###..##.#.#.##.###.##.####..#..#.....#.......#.######.#
##..####......##...##.#..#..#..#..##.#.#..##..####.#.######.#...##..#..#.##.##..###..#..#.#..#..#...
.##.#..#..##.#.##..#..#.#.#...##.##...##.#.########..##..#...#####.....#.#..###.#.##.##.###..#..#.##
..##...#.#..#.#.##.###..#....#..###...#..##....##.#..######..###.#.#####..#.###.##.###..#####...####
#.#..###.##.#...#..###..#.##.##...####.####.#.....##....###..#..#...####.####.###...#..#.#.#.#.##..#
###..##...#.#..##..#...##..###.#.....#...##.###.#..###...###.####..###.#..#.#...##.....#............
.#####..##...##....######...#..###.#.#......#...######.#..#...###.#...#..####.#......##..#..#.#...#.
.#..####.#.#..###..#.#.##.####..#.#....#.####..##...#..#.#.#..###.........##.#.#####...###...#.#..#.
.#.#....#..####..##..#########.#..#.##..###..#..#...###....##.....####...#..#.##....#######.####.##.
##.#.####..#...#..#.##.#..#....##.####..####..###.#.#...#######.#.###..###.###..#.###.##...##.##..#.
.#####.....##.#....##...##...#.#..####.##..#....##.###.#####.##.#.#.#...#...#.#.#.......##..##.##.#.
.##..#.#.###.#.#.#....##.#...#....#...#...#..#######....##.#.#.#####.#.###..#..#...#......#..#.##..#
...##.....#..#.####.###...#####.#.#....##.#.#.#.#...####.####.#..##.#.##.##.###..##...##.....#...###
####.###..###.####..###.##..#.#####.#...##.#..#.#.##.####.#..####..#..##....####.#....#...#.####.#.#
##....##.#.#.##.###..#####.##..##..#..##..##..#.#..###.##.#####...#..#.##.#.####.####..#...##..#..##
#.#..###..##..#..#..####..#..#.#..#.##...###.#.#.#.#...####.#.#...####.##..#.#.#..#.##..##..##.#....
##.#.####....##..##..####.#######..##....######.##.#....#..#...#.#..#.##.#...#.#.#.#.#..###....#.#.#
.##.###..#.###..##...####.###.#.##.###.#...#..#......######.##.##.##.####.##.##....#.#......####.#.#
#..###.####.#...#.###.###.#..##.###..#.#.#####..#.##.##.#.##.##..###.####...####..#..###...#.##.####
#...............#.##.###...#..#..#.##.##.#.##.#.#...#.#....#..#.######..#..#..##....#.##..#..#..#.##
###.###...#...#..#....##.......#.#..#...##...#....#..######..#.....##.####..#....#...##...######..##
..##..#..##.#.##..###.#...............####...##..##......#...#.....#..#....#.#...#.....##..#####..##
#.....##.#.##.###......###.#.##..###....###..#...#..###.#..#..##...#..#.##...#.#...#..#.....##...#.#
..##....#..#.#.#.####..#.#.#....#.#.#.#.##.#..#.#..#..#.#.##.####......##..#...##..#.#.##..#.....#..
.#..##....###.###..##....#####.#....####....#.#.##..#...#.###.##..#.....##........###.###.####..#.#.
.###.##..#..#...#.#.#######.##.#.#.#.#.###.#.#.#.#......#####.###.#.#.#......#.#..#.#.##..#.##.#.#.#

73
src/day_16.jl Normal file
View File

@ -0,0 +1,73 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
using Pipe: @pipe
function decode_packet(p, o, version)
version += parse(Int, p[o:o+2], base=2); o+=3
type = parse(Int, p[o:o+2], base = 2); o+=3
if type == 4
v = ""
while true
tmp = p[o:o+4]; o+=5
v *= tmp[2:end]
tmp[1] == '0' ? break : continue
end
value = parse(Int, v, base=2)
else
length_type = p[o]; o+=1
sub_values = []
if length_type == '0'
length = parse(Int, p[o:o+14], base=2); o+=15
target = o + length
while o < target
v, o, version = decode_packet(p, o, version)
push!(sub_values, v)
end
else
num = parse(Int, p[o:o+10], base=2); o+=11
for _ in 1:num
v, o, version = decode_packet(p, o, version)
push!(sub_values, v)
end
end
end
if type == 0
value = sum(sub_values)
elseif type == 1
value = prod(sub_values)
elseif type == 2
value = minimum(sub_values)
elseif type == 3
value = maximum(sub_values)
elseif type == 5
value = sub_values[begin] > sub_values[end] ? 1 : 0
elseif type == 6
value = sub_values[begin] < sub_values[end] ? 1 : 0
elseif type == 7
value = sub_values[begin] == sub_values[end] ? 1 : 0
end
return (value, o, version)
end
function p1(input::Vector{String})
packet = ""
for c in input[1]
packet *= bitstring(Int8(parse(Int, c, base = 16)))[5:end]
end
v, _, version = decode_packet(packet, 1, 0)
return version
end
function p2(input::Vector{String})
packet = ""
for c in input[1]
packet *= bitstring(Int8(parse(Int, c, base = 16)))[5:end]
end
v, _ = decode_packet(packet, 1, 0)
return v
end
@aoc(2021, 16)

38
src/day_17.jl Normal file
View File

@ -0,0 +1,38 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
using Pipe: @pipe
function solve(input)
x1, x2, y1, y2 = parse.(Int, match(r"target area: x=(-?\d+)..(-?\d+), y=(-?\d+)..(-?\d+)", input).captures)
total = 0
best = 0
for vx in isqrt(2x1)+1:x2, vy in y1:abs(y1)
x,y,maxy = 0,0,0
Δx, Δy = vx, vy
found = passed = false
while true
inside = false
x += Δx; y += Δy
Δx -= sign(Δx); Δy -= 1
y > maxy && (maxy = y)
if x in x1:x2 && y in y1:y2
inside = true
!found && (total += 1); found = true
maxy > best && (best = maxy)
end
(found && !inside) && break
y < y1 && break
end
end
return (best, total)
end
function p1(input::Vector{String})
return solve(input[1])[1]
end
function p2(input::Vector{String})
return solve(input[1])[2]
end
@aoc(2021, 17)

69
src/day_18.jl Normal file
View File

@ -0,0 +1,69 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
using Pipe: @pipe
using Combinatorics
function addn(v, n, dir)
n == nothing && (return v)
typeof(v) == Int && (return v+n)
if dir == "left"
return [addn(v[1], n, "left"), v[2]]
else
return [v[1], addn(v[2], n, "right")]
end
end
function arrexplode(v, n = 4)
typeof(v) == Int && (return (false, nothing, v, nothing))
n == 0 && (return true, v[1], 0, v[2])
l, r = v
exploded, t, l, w = arrexplode(l, n-1)
exploded && (return true, t, [l, addn(r, w, "left")], nothing)
exploded, t, r, w = arrexplode(r, n-1)
exploded && (return true, nothing, [addn(l, t, "right"), r], w)
false, nothing, v, nothing
end
function arrsplit(v)
if typeof(v) == Int
v > 9 && (return true, [v ÷ 2, Int(round(v/2, RoundUp))])
return false, v
end
l, r = v
changed, l = arrsplit(l)
changed && (return true, [l,r])
changed, r = arrsplit(r)
changed, [l,r]
end
function arradd(l, r)
sum = [l,r]
while true
changed, t, sum, w = arrexplode(sum)
changed && continue
changed, sum = arrsplit(sum)
changed && continue
break
end
sum
end
function magn(v)
typeof(v) == Int && (return v)
3*magn(v[1]) + 2*magn(v[2])
end
function p1(input::Vector{String})
numbers = [ eval(Meta.parse(x)) for x in input ]
magn(reduce(arradd, numbers))
end
function p2(input::Vector{String})
numbers = [ eval(Meta.parse(x)) for x in input ]
maximum([magn(arradd(l,r)) for (l, r) in Combinatorics.permutations(numbers, 2)])
end
@aoc(2021, 18)

86
src/day_19.jl Normal file
View File

@ -0,0 +1,86 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
using Pipe: @pipe
using Combinatorics
function prepare_input(input)
dict = []
tmp = []
for l in input
l == "" && continue
m = match(r"--- scanner (\d+) ---", l)
if m != nothing
length(tmp) != 0 && push!(dict, tmp)
tmp = []
continue
end
push!(tmp, parse.(Int, split(l, ",")))
end
dict
end
function align(a,b, negs, distances)
a2 = Set(a)
for re in 1:6, neg in negs
newb = [ neg .* collect(Combinatorics.permutations(s,3))[re] for s in b ]
for p1 in a2, p2 in newb
count = 0
remapped = []
dist = p2 .- p1
for b2 in newb
to_a = b2 .- dist
to_a in a2 && (count += 1)
push!(remapped, to_a)
end
if count >= 12
println("match $dist")
push!(distances, dist)
return true, remapped
end
end
end
return false, []
end
function p1(input::Vector{String})
@info "Something is brken. This may take 5 minutes or more to get a slightly wrong result."
negations = [
[1,1,1],
[-1,1,1],
[1,-1,1],
[1,1,-1],
[-1,-1,1],
[-1,1,-1],
[-1,-1,-1],
[1,-1,-1]
]
list = prepare_input(input)
aligned_idx = Set(1)
aligned = Dict(1 => list[1])
beacons = copy(list[1])
dont_align = Set()
distances = [[0,0,0]]
while length(aligned_idx) < length(list)
for i in 1:length(list)
i in aligned_idx && continue
for j in sort(collect(aligned_idx))
println("checking $i against $j")
(i,j) in dont_align && continue
found, remapped = align(aligned[j], list[i], negations, distances)
if found
push!(aligned_idx, i)
aligned[i] = remapped
beacons = vcat(beacons, remapped)
break
end
push!(dont_align, (i,j))
end
end
end
return length(beacons)
end
function p2(input::Vector{String})
end
@aoc(2021, 19)

60
src/day_20.jl Normal file
View File

@ -0,0 +1,60 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
using Pipe: @pipe
function prepare_input(input)
code = [ (c == '#') for c in input[1] ]
image = []
for l in input[3:end]
push!(image, [ (c == '#') for c in l ])
end
code, image
end
function neighbours(i,j)
( (i+y,j+x) for (y, x) in zip([-1,-1,-1,0,0,0,1,1,1], [-1,0,1,-1,0,1,-1,0,1]))
end
function get_value(image, y, x, bool)
( 1 <= y <= length(image) && 1 <= x <= length(image[1])) && return image[y][x]
bool
end
function apply_alg(image, code, bool)
w = length(image[1])
h = length(image)
newimage = []
for y in 0:h+1
row = []
for x in 0:w+1
values = [ get_value(image, y2, x2, bool) for (y2,x2) in neighbours(y, x)]
idx = parse(Int, join(map(b->b ? 1 : 0, values)), base=2)
push!(row, code[idx+1])
end
push!(newimage, row)
end
newimage
end
function p1(input::Vector{String})
code, image = prepare_input(input)
bool = false
for _ in 1:2
image = apply_alg(image, code, bool)
bool = !bool
end
return sum(vcat(image...))
end
function p2(input::Vector{String})
code, image = prepare_input(input)
bool = false
for _ in 1:50
image = apply_alg(image, code, bool)
bool = !bool
end
return sum(vcat(image...))
end
@aoc(2021, 20)