My attempts to solve puzzles of Advent of Code
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

day 2

+1103 -5
+2 -1
2021/AoC.lean
··· 1 - import AoC.Day1 1 + import AoC.Day1 2 + import AoC.Day2
+4 -2
2021/AoC/Day1.lean
··· 54 54 55 55 end Part2 56 56 57 - def run : IO (Nat × Nat) := do 57 + def run : IO Unit := do 58 58 let day1 := "./data/day1.txt" 59 59 let readings <- lines day1 60 60 61 61 let part1Total := totalIncr (Sum.inr "") readings 62 62 let part2Total := totalIncr (Sum.inl 0) (ys := threeWindowSums readings) 63 63 64 - return (part1Total, part2Total) 64 + IO.println (part1Total, part2Total) 65 + 66 + end Day1 65 67 66 68
+95
2021/AoC/Day2.lean
··· 1 + namespace Day2 2 + 3 + inductive Command where 4 + | forward | up | down 5 + deriving Repr 6 + 7 + structure CommandWithVal where 8 + command: Command 9 + val: Nat 10 + 11 + structure Location where 12 + horizontal: Nat 13 + depth: Nat 14 + deriving Repr 15 + 16 + structure LocationEnhanced extends Location where 17 + aim: Nat 18 + deriving Repr 19 + 20 + namespace Location 21 + 22 + def default (h: Nat := 0) (d: Nat := 0) (a: Nat := 0): Location := {horizontal := h, depth := d} 23 + 24 + def locToString (l: Location): String := 25 + s!"\{horizontal: {l.horizontal}, depth: {l.depth} }" 26 + 27 + instance : ToString Location where 28 + toString := locToString 29 + 30 + end Location 31 + 32 + namespace LocationEnhanced 33 + 34 + def default (l: Location := Location.default) (a: Nat := 0): LocationEnhanced := 35 + { horizontal := l.horizontal, depth := l.depth, aim := a} 36 + 37 + end LocationEnhanced 38 + 39 + namespace Command 40 + 41 + def fromString (s:String): OptionM Command := 42 + match s with 43 + | "forward" => some forward 44 + | "up" => some up 45 + | "down" => some down 46 + | _ => none 47 + 48 + end Command 49 + 50 + namespace CommandWithVal 51 + 52 + def fromString (s:String): OptionM CommandWithVal := 53 + let xs := s.splitOn 54 + (fun x y => {command := x, val := y}) <$> (xs.head?.bind Command.fromString) <*> xs.getLast?.map String.toNat! 55 + 56 + def operation (loc: Location) (c: CommandWithVal): Location := 57 + match c.command with 58 + | Command.forward => { horizontal := loc.horizontal + c.val, depth := loc.depth } 59 + | Command.down => { horizontal := loc.horizontal, depth := loc.depth + c.val } 60 + | Command.up => { horizontal := loc.horizontal, depth := loc.depth - c.val } 61 + 62 + def operationEnhanced (loc: LocationEnhanced) (c: CommandWithVal): LocationEnhanced := 63 + match c.command with 64 + | Command.forward => 65 + { horizontal := loc.horizontal + c.val, depth := loc.depth + (loc.aim * c.val), aim := loc.aim } 66 + | Command.down => 67 + { horizontal := loc.horizontal, depth := loc.depth, aim := loc.aim + c.val } 68 + | Command.up => 69 + { horizontal := loc.horizontal, depth := loc.depth, aim := loc.aim - c.val } 70 + 71 + end CommandWithVal 72 + 73 + def commands (xs: Array String): Array CommandWithVal := 74 + xs.filterMap CommandWithVal.fromString 75 + 76 + def solvePart1 (xs: Array CommandWithVal): Nat := 77 + let loc := xs.foldl CommandWithVal.operation Location.default 78 + loc.horizontal * loc.depth 79 + 80 + def solvePart2 (xs: Array CommandWithVal): Nat := 81 + let loc := xs.foldl CommandWithVal.operationEnhanced LocationEnhanced.default 82 + loc.horizontal * loc.depth 83 + 84 + open IO.FS 85 + def run: IO Unit := do 86 + let day2 := "./data/day2.txt" 87 + let readings <- lines day2 88 + let parsedCommands := commands readings 89 + 90 + let part1 := solvePart1 parsedCommands 91 + let part2 := solvePart2 parsedCommands 92 + 93 + IO.println (part1, part2) 94 + 95 + end Day2
+2 -2
2021/Main.lean
··· 1 1 import AoC 2 2 3 3 def main : IO Unit := do 4 - let (day1Part1, day1Part2) <- Day1.run 5 - IO.println (day1Part1, day1Part2) 4 + Day1.run 5 + Day2.run 6 6 7 7 #eval main
+1000
2021/data/day2.txt
··· 1 + forward 1 2 + down 3 3 + down 2 4 + up 1 5 + down 7 6 + down 8 7 + forward 6 8 + forward 1 9 + forward 1 10 + down 6 11 + up 3 12 + down 7 13 + down 1 14 + down 6 15 + forward 6 16 + down 6 17 + forward 3 18 + up 7 19 + forward 5 20 + down 4 21 + forward 6 22 + forward 1 23 + forward 6 24 + forward 9 25 + forward 3 26 + up 1 27 + forward 7 28 + down 9 29 + forward 2 30 + up 9 31 + down 5 32 + down 3 33 + up 1 34 + down 6 35 + down 7 36 + down 8 37 + down 7 38 + forward 7 39 + forward 3 40 + down 5 41 + down 2 42 + forward 4 43 + forward 7 44 + down 8 45 + down 4 46 + down 5 47 + down 1 48 + forward 4 49 + up 6 50 + forward 6 51 + forward 4 52 + forward 5 53 + up 3 54 + up 6 55 + down 4 56 + down 8 57 + forward 4 58 + forward 5 59 + down 3 60 + forward 1 61 + down 5 62 + down 5 63 + forward 8 64 + forward 9 65 + forward 1 66 + forward 8 67 + forward 5 68 + forward 6 69 + up 8 70 + down 3 71 + forward 8 72 + up 2 73 + down 3 74 + down 9 75 + up 9 76 + forward 5 77 + down 2 78 + forward 7 79 + forward 5 80 + forward 5 81 + down 2 82 + down 3 83 + forward 7 84 + forward 9 85 + down 9 86 + forward 3 87 + forward 3 88 + down 3 89 + forward 3 90 + up 6 91 + down 4 92 + forward 3 93 + forward 3 94 + forward 7 95 + down 4 96 + forward 8 97 + up 8 98 + down 3 99 + down 2 100 + forward 2 101 + down 6 102 + down 6 103 + up 7 104 + up 9 105 + down 4 106 + up 7 107 + up 8 108 + down 6 109 + down 1 110 + forward 6 111 + forward 9 112 + forward 1 113 + forward 8 114 + down 4 115 + up 3 116 + forward 6 117 + down 5 118 + forward 7 119 + forward 5 120 + down 2 121 + forward 7 122 + down 6 123 + forward 7 124 + up 2 125 + up 5 126 + forward 3 127 + down 6 128 + down 9 129 + down 9 130 + forward 9 131 + up 7 132 + down 6 133 + down 4 134 + down 8 135 + forward 6 136 + up 6 137 + down 2 138 + forward 5 139 + up 7 140 + forward 5 141 + down 1 142 + up 8 143 + forward 2 144 + forward 4 145 + down 5 146 + down 8 147 + up 7 148 + up 5 149 + down 2 150 + forward 8 151 + forward 4 152 + up 6 153 + forward 8 154 + down 3 155 + down 2 156 + down 2 157 + forward 4 158 + forward 2 159 + forward 9 160 + up 3 161 + up 7 162 + up 3 163 + up 5 164 + forward 5 165 + up 8 166 + forward 3 167 + forward 1 168 + down 3 169 + down 8 170 + forward 6 171 + forward 5 172 + up 5 173 + down 9 174 + down 1 175 + down 9 176 + forward 9 177 + up 3 178 + forward 7 179 + forward 6 180 + forward 1 181 + up 3 182 + forward 9 183 + forward 7 184 + down 9 185 + up 6 186 + forward 2 187 + up 9 188 + forward 6 189 + forward 4 190 + up 3 191 + forward 5 192 + down 4 193 + up 8 194 + up 4 195 + up 9 196 + down 1 197 + down 7 198 + forward 7 199 + forward 2 200 + down 9 201 + forward 7 202 + forward 2 203 + down 6 204 + down 9 205 + up 6 206 + down 7 207 + down 2 208 + down 7 209 + down 6 210 + down 4 211 + down 4 212 + forward 6 213 + forward 9 214 + forward 4 215 + down 7 216 + down 5 217 + up 6 218 + down 7 219 + forward 2 220 + down 3 221 + down 1 222 + forward 1 223 + forward 5 224 + down 4 225 + down 4 226 + down 1 227 + down 9 228 + forward 6 229 + down 3 230 + forward 5 231 + up 7 232 + forward 9 233 + down 8 234 + down 3 235 + up 2 236 + up 2 237 + forward 4 238 + down 7 239 + forward 2 240 + forward 5 241 + forward 4 242 + forward 3 243 + down 8 244 + down 6 245 + forward 9 246 + down 1 247 + forward 1 248 + down 1 249 + up 8 250 + down 2 251 + forward 2 252 + up 5 253 + down 7 254 + forward 8 255 + down 7 256 + down 4 257 + forward 2 258 + forward 6 259 + up 2 260 + forward 8 261 + forward 2 262 + forward 1 263 + up 5 264 + down 4 265 + down 8 266 + forward 4 267 + down 8 268 + up 8 269 + forward 3 270 + down 5 271 + forward 2 272 + forward 1 273 + up 3 274 + forward 9 275 + up 5 276 + forward 5 277 + forward 5 278 + up 8 279 + down 6 280 + forward 3 281 + down 4 282 + up 5 283 + forward 3 284 + up 6 285 + forward 6 286 + forward 9 287 + down 7 288 + down 7 289 + down 8 290 + down 4 291 + forward 4 292 + forward 3 293 + forward 3 294 + forward 5 295 + down 3 296 + forward 8 297 + up 5 298 + forward 1 299 + up 7 300 + down 5 301 + forward 7 302 + forward 3 303 + down 3 304 + forward 2 305 + forward 1 306 + forward 4 307 + up 2 308 + down 8 309 + forward 9 310 + forward 9 311 + down 6 312 + down 1 313 + down 5 314 + forward 4 315 + down 2 316 + forward 1 317 + up 7 318 + down 9 319 + forward 3 320 + down 5 321 + down 5 322 + up 6 323 + down 6 324 + forward 8 325 + down 1 326 + up 3 327 + down 2 328 + up 1 329 + forward 5 330 + down 4 331 + down 6 332 + forward 8 333 + down 4 334 + down 5 335 + down 2 336 + forward 5 337 + forward 8 338 + down 8 339 + up 4 340 + forward 2 341 + up 2 342 + down 9 343 + forward 6 344 + forward 1 345 + forward 5 346 + up 2 347 + down 1 348 + up 7 349 + up 3 350 + forward 3 351 + down 7 352 + forward 2 353 + forward 4 354 + up 7 355 + forward 4 356 + forward 6 357 + up 2 358 + forward 4 359 + forward 2 360 + down 6 361 + down 5 362 + down 5 363 + down 6 364 + forward 9 365 + up 4 366 + down 4 367 + down 7 368 + up 6 369 + up 9 370 + up 4 371 + down 4 372 + up 7 373 + down 9 374 + down 9 375 + forward 3 376 + down 7 377 + down 7 378 + down 7 379 + down 2 380 + up 2 381 + up 1 382 + up 6 383 + down 8 384 + up 7 385 + down 4 386 + forward 8 387 + down 7 388 + up 1 389 + down 5 390 + down 3 391 + forward 6 392 + up 1 393 + down 5 394 + forward 3 395 + forward 6 396 + forward 7 397 + forward 2 398 + down 3 399 + forward 1 400 + up 9 401 + down 5 402 + up 2 403 + up 9 404 + up 2 405 + up 2 406 + forward 1 407 + down 2 408 + forward 1 409 + down 7 410 + forward 1 411 + forward 8 412 + down 9 413 + down 1 414 + forward 9 415 + forward 7 416 + forward 7 417 + down 5 418 + down 5 419 + down 3 420 + forward 6 421 + down 7 422 + down 4 423 + forward 2 424 + up 6 425 + down 3 426 + up 4 427 + up 7 428 + forward 2 429 + forward 8 430 + forward 4 431 + down 7 432 + down 9 433 + up 1 434 + down 2 435 + up 8 436 + down 2 437 + up 6 438 + forward 6 439 + up 5 440 + down 2 441 + forward 5 442 + down 4 443 + forward 7 444 + down 3 445 + down 5 446 + forward 1 447 + down 7 448 + forward 1 449 + up 1 450 + forward 4 451 + up 4 452 + forward 4 453 + forward 5 454 + forward 7 455 + down 7 456 + down 2 457 + up 4 458 + down 2 459 + down 3 460 + forward 3 461 + forward 2 462 + forward 5 463 + forward 2 464 + up 8 465 + forward 3 466 + down 7 467 + down 9 468 + forward 3 469 + forward 6 470 + down 7 471 + down 5 472 + down 3 473 + up 3 474 + forward 5 475 + forward 2 476 + down 1 477 + up 1 478 + up 8 479 + down 6 480 + down 4 481 + down 1 482 + forward 1 483 + down 7 484 + up 8 485 + forward 2 486 + forward 8 487 + forward 8 488 + forward 7 489 + down 1 490 + forward 8 491 + down 8 492 + forward 4 493 + down 3 494 + up 9 495 + down 8 496 + forward 9 497 + down 7 498 + up 2 499 + forward 9 500 + down 4 501 + up 3 502 + up 4 503 + up 4 504 + forward 5 505 + up 2 506 + forward 3 507 + down 5 508 + forward 5 509 + down 5 510 + up 8 511 + down 4 512 + forward 6 513 + down 6 514 + forward 7 515 + forward 2 516 + down 2 517 + up 7 518 + down 5 519 + down 9 520 + down 8 521 + down 4 522 + up 3 523 + forward 4 524 + down 8 525 + down 8 526 + down 9 527 + down 7 528 + forward 2 529 + forward 8 530 + up 5 531 + forward 8 532 + down 9 533 + forward 6 534 + up 1 535 + down 6 536 + forward 1 537 + up 4 538 + down 3 539 + forward 3 540 + forward 2 541 + down 6 542 + forward 7 543 + up 6 544 + up 9 545 + down 1 546 + forward 3 547 + forward 4 548 + forward 2 549 + up 8 550 + forward 9 551 + up 7 552 + down 2 553 + forward 2 554 + up 7 555 + down 2 556 + up 6 557 + down 2 558 + forward 9 559 + forward 3 560 + down 6 561 + down 5 562 + down 3 563 + forward 9 564 + down 8 565 + down 8 566 + down 2 567 + down 7 568 + up 3 569 + forward 1 570 + down 7 571 + up 8 572 + up 8 573 + forward 5 574 + forward 5 575 + forward 1 576 + down 8 577 + down 6 578 + forward 2 579 + up 3 580 + forward 1 581 + forward 7 582 + forward 4 583 + forward 5 584 + forward 9 585 + forward 7 586 + forward 6 587 + forward 3 588 + forward 4 589 + down 8 590 + down 1 591 + forward 6 592 + forward 9 593 + forward 6 594 + forward 9 595 + forward 6 596 + up 3 597 + down 8 598 + forward 4 599 + forward 1 600 + down 4 601 + forward 9 602 + down 8 603 + down 3 604 + up 2 605 + forward 5 606 + forward 2 607 + forward 5 608 + down 6 609 + down 3 610 + up 1 611 + down 9 612 + up 5 613 + forward 6 614 + down 7 615 + forward 1 616 + forward 9 617 + down 2 618 + down 5 619 + forward 3 620 + forward 6 621 + down 4 622 + down 5 623 + up 4 624 + forward 7 625 + forward 5 626 + down 8 627 + forward 6 628 + down 5 629 + forward 2 630 + down 7 631 + forward 4 632 + forward 8 633 + down 8 634 + forward 2 635 + forward 8 636 + down 5 637 + forward 7 638 + down 8 639 + down 1 640 + forward 8 641 + down 4 642 + up 4 643 + down 7 644 + down 6 645 + up 5 646 + forward 4 647 + forward 1 648 + forward 4 649 + down 5 650 + forward 5 651 + forward 9 652 + down 1 653 + forward 3 654 + up 7 655 + down 1 656 + down 7 657 + forward 2 658 + down 5 659 + down 6 660 + forward 5 661 + up 2 662 + down 9 663 + forward 1 664 + up 5 665 + forward 6 666 + forward 9 667 + forward 4 668 + up 4 669 + down 6 670 + up 9 671 + up 5 672 + down 2 673 + up 9 674 + down 2 675 + down 4 676 + down 8 677 + down 2 678 + forward 2 679 + forward 2 680 + down 9 681 + up 5 682 + forward 2 683 + forward 8 684 + down 2 685 + down 2 686 + down 9 687 + down 3 688 + down 9 689 + up 9 690 + up 3 691 + down 1 692 + down 9 693 + down 2 694 + forward 7 695 + down 2 696 + up 3 697 + down 9 698 + up 2 699 + up 4 700 + forward 5 701 + forward 7 702 + down 7 703 + up 7 704 + up 5 705 + down 8 706 + up 2 707 + forward 2 708 + down 3 709 + down 5 710 + forward 2 711 + forward 3 712 + forward 3 713 + down 1 714 + down 1 715 + forward 9 716 + down 5 717 + down 7 718 + forward 7 719 + forward 5 720 + up 9 721 + forward 3 722 + up 4 723 + forward 1 724 + forward 3 725 + down 4 726 + forward 9 727 + down 5 728 + down 3 729 + down 5 730 + forward 6 731 + down 6 732 + forward 2 733 + up 4 734 + down 4 735 + forward 2 736 + down 8 737 + up 9 738 + forward 9 739 + forward 4 740 + down 8 741 + forward 2 742 + forward 5 743 + forward 1 744 + forward 5 745 + up 1 746 + forward 7 747 + forward 9 748 + down 5 749 + forward 6 750 + down 1 751 + forward 6 752 + down 2 753 + forward 9 754 + down 1 755 + forward 1 756 + down 4 757 + down 6 758 + down 2 759 + up 7 760 + up 5 761 + forward 8 762 + forward 1 763 + down 8 764 + forward 1 765 + forward 2 766 + down 8 767 + forward 7 768 + down 5 769 + forward 1 770 + down 2 771 + up 7 772 + forward 7 773 + down 4 774 + down 8 775 + up 6 776 + up 4 777 + forward 7 778 + down 3 779 + up 5 780 + down 5 781 + forward 7 782 + up 7 783 + down 6 784 + forward 8 785 + down 7 786 + down 2 787 + up 3 788 + down 9 789 + down 7 790 + down 8 791 + forward 4 792 + forward 3 793 + forward 9 794 + forward 6 795 + up 7 796 + forward 5 797 + down 4 798 + down 5 799 + forward 6 800 + up 9 801 + down 6 802 + down 7 803 + down 8 804 + down 9 805 + down 4 806 + up 5 807 + down 4 808 + forward 5 809 + forward 3 810 + down 3 811 + down 7 812 + up 8 813 + forward 5 814 + down 8 815 + down 1 816 + down 6 817 + down 9 818 + up 4 819 + up 1 820 + down 8 821 + down 3 822 + down 8 823 + up 4 824 + down 7 825 + down 6 826 + forward 7 827 + up 9 828 + down 4 829 + down 1 830 + down 6 831 + down 2 832 + forward 7 833 + down 2 834 + down 7 835 + forward 3 836 + forward 6 837 + up 2 838 + down 4 839 + up 1 840 + forward 4 841 + up 2 842 + down 4 843 + up 3 844 + down 8 845 + up 9 846 + forward 8 847 + down 5 848 + down 4 849 + forward 8 850 + down 1 851 + down 8 852 + forward 3 853 + down 4 854 + forward 5 855 + down 5 856 + up 9 857 + forward 1 858 + down 9 859 + down 1 860 + forward 4 861 + forward 9 862 + up 1 863 + forward 4 864 + forward 2 865 + down 9 866 + down 1 867 + forward 1 868 + down 2 869 + forward 2 870 + down 5 871 + up 4 872 + up 7 873 + down 8 874 + forward 3 875 + up 1 876 + down 4 877 + forward 5 878 + up 2 879 + forward 4 880 + forward 2 881 + down 1 882 + forward 4 883 + forward 1 884 + up 5 885 + forward 8 886 + forward 4 887 + forward 1 888 + down 6 889 + down 7 890 + up 4 891 + forward 9 892 + up 6 893 + forward 9 894 + forward 3 895 + forward 2 896 + down 2 897 + forward 7 898 + up 7 899 + forward 7 900 + down 4 901 + down 6 902 + forward 8 903 + up 8 904 + forward 1 905 + forward 3 906 + forward 3 907 + up 8 908 + down 1 909 + up 9 910 + forward 1 911 + up 1 912 + down 7 913 + forward 7 914 + up 5 915 + forward 5 916 + up 9 917 + up 3 918 + forward 2 919 + forward 6 920 + up 1 921 + forward 5 922 + up 1 923 + down 3 924 + down 5 925 + forward 8 926 + up 5 927 + forward 1 928 + down 8 929 + forward 4 930 + down 3 931 + down 1 932 + down 7 933 + forward 7 934 + forward 3 935 + down 4 936 + forward 9 937 + up 5 938 + down 2 939 + forward 4 940 + up 7 941 + up 5 942 + forward 3 943 + down 7 944 + forward 8 945 + up 4 946 + up 2 947 + forward 2 948 + down 9 949 + forward 4 950 + down 5 951 + forward 2 952 + down 9 953 + down 5 954 + up 7 955 + forward 3 956 + down 8 957 + forward 7 958 + forward 9 959 + down 5 960 + forward 2 961 + forward 9 962 + forward 5 963 + down 5 964 + up 4 965 + down 6 966 + down 6 967 + forward 8 968 + forward 5 969 + forward 4 970 + down 5 971 + forward 2 972 + down 8 973 + forward 9 974 + down 1 975 + down 8 976 + down 7 977 + up 9 978 + down 7 979 + down 1 980 + forward 7 981 + forward 9 982 + forward 8 983 + up 2 984 + forward 6 985 + down 3 986 + down 6 987 + up 4 988 + forward 4 989 + forward 5 990 + down 9 991 + down 5 992 + forward 1 993 + down 2 994 + forward 1 995 + down 1 996 + up 1 997 + up 7 998 + up 5 999 + forward 6 1000 + forward 3