Do day 3.

This commit is contained in:
2023-12-03 17:23:36 -05:00
parent c37789748e
commit 22a4b79550
5 changed files with 283 additions and 0 deletions

View File

@@ -2,3 +2,5 @@
- Day 1: 40:00 (I don't know what I am doing.)
- Day 2: 14:15 (Okay, but far way from leaderboard.)
- Day 3: 1st 20:00, 2nd 70:00... (I had a logic error that took me a while to find.)
- Day 4:

101
d3.py Normal file
View File

@@ -0,0 +1,101 @@
import re
NUMBERS = "0123456789"
EXAMPLE = """
467..114..
...*......
..35..633.
......#...
617*......
.....+.58.
..592.....
......755.
...$.*....
.664.598..
"""
def clean(text: str) -> list[str]:
return list(filter(lambda l: l.strip() != "", text.splitlines()))
def is_adj_to_symbol(x, y, lines):
non_symbol = re.compile(r"[^0-9\.]")
for xo, yo in [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]:
try:
if x + xo < 0 or y + yo < 0:
continue
if non_symbol.match(lines[y + yo][x + xo]):
return True
except IndexError:
pass
return False
def solve(lines: list[str]):
d = ""
adj_to_symbol = False
s = 0
for (y, line) in enumerate(lines):
for (x, c) in enumerate(line):
if c not in NUMBERS:
if len(d) > 0 and adj_to_symbol:
s += int(d)
d = ""
adj_to_symbol = False
else:
if is_adj_to_symbol(x, y, lines):
adj_to_symbol = True
d = d + c
return s
def get_entire_number(x, y, lines):
assert(lines[y][x] in NUMBERS)
x_start = x - 1
while lines[y][x_start] in NUMBERS and x_start >= 0:
x_start -= 1
x_start += 1
x_start_orig = x_start
r = ""
while x_start < len(lines[0]) and lines[y][x_start] in NUMBERS:
r += lines[y][x_start]
x_start += 1
return x_start_orig, int(r)
def find_sourrounding_numbers(x, y, lines):
full_coords = []
numbers = []
for xo, yo in [(-1, -1), (0, -1), (1, -1), (-1, 0), (1, 0), (-1, 1), (0, 1), (1, 1)]:
new_x = x + xo
new_y = y + yo
if new_x < 0 or new_y < 0 or new_x >= len(lines[0]) or new_y >= len(lines):
continue
if lines[new_y][new_x] in NUMBERS:
x_start_orig, n = get_entire_number(new_x, new_y, lines)
if (x_start_orig, new_y, n) not in full_coords:
numbers.append(n)
full_coords.append((x_start_orig, y + yo, n))
return numbers
def solve2(lines: list[str]):
s = 0
for (y, line) in enumerate(lines):
for (x, c) in enumerate(line):
if c == '*':
numbers = find_sourrounding_numbers(x, y, lines)
if len(numbers) == 2:
# print(numbers)
s += numbers[0] * numbers[1]
return s
def main():
example = clean(EXAMPLE)
print("Example 1:", solve(example))
data = clean(open("i3.txt").read())
print("Solution 1:", solve(data))
example = clean(EXAMPLE)
print("Example 2:", solve2(example))
data = clean(open("i3.txt").read())
print("Solution 2:", solve2(data))
if __name__ == "__main__":
main()

40
d4.py Normal file
View File

@@ -0,0 +1,40 @@
import re
EXAMPLE = """
"""
def clean(text: str) -> list[str]:
return list(filter(lambda l: l.strip() != "", text.splitlines()))
def solve(lines: list[str]):
s = 0
for (i, line) in enumerate(lines):
print(i, line)
return s
def solve2(lines: list[str]):
s = 0
for (i, line) in enumerate(lines):
print(i, line)
return s
def main():
example = clean(EXAMPLE)
print("Example 1:", solve(example))
return
data = clean(open("i4.txt").read())
print("Solution 1:", solve(data))
return
example = clean(EXAMPLE)
print("Example 2:", solve2(example))
return
data = clean(open("i4.txt").read())
print("Solution 2:", solve2(data))
return
if __name__ == "__main__":
main()

140
i3.txt Normal file
View File

@@ -0,0 +1,140 @@
661 485 565 344 325 841 725
*609 131 512 * 536* 462 60 424 *
316 * 39 630 377 919 98 789 * * 788 2 564
431 535 * 622 * * 682 108 116 299
428 378 844 416 586 537 27 * 871 331 492
878 390 * * 739 496 867 867 867 344 487
* 558 535 644 404 605 * *
381 729 726 578 10 * 818 929 934 119
53 31 734 847* * 217 321 *
509 315 654 60 925 747*559 * 430 226 * 290 848
546 664 507 337 94 359 528*996
351 638 * *433 337 226 859 378
* 648 183 126 * 208 954 * 626 499* 803 642 235
518* 813 990 * * 699 133 68 79 838 447 * * *
696* 586 6 243 * 224 392 275 * 699 177 230 593
326 683 761 491 26 * 56 305 262 150
41 908 819 785 276
618 401 599 124 34 * 676 342 473
889 888 454 723 * 141* 958 416 *94
212 826 552 569 * 728 143
* 287 60 872 886 171 437 815 680 * 633
234 * 687 432 203 * 275 65 *341 * 246 272 922*
967 495 * 161 474 97 * * 84 400 *295 805 915
419 * 979 932 * 729 215 * 81 * 554 263*567 812
* 458 682 179 348 906 428 798
668 552 99 * 85 4
29 938 594 107 *171 98 * 896 491 412 12 326 * 705 4 *
* 332 949 * 750 974 342 * 558 * 794
459 342* 637 273 658 601 * 735 * 627 889 *
697 131 718 689 450 390 994 793 * 241
991 89 14 * *912 39 698 953*240 87
324 618 * 328 * 538 307 920 515 *
*386 * 780 * 475 719 * * 910 410 384 999 *756
268 701 72 63 43 193 674 670 * * 95 893
16 * 663 407 * 258 264 298 202*
574 187 88 53 931 759 672 385
938 192 297 * 723 * 930 692 283 349 981
* 207 * 843 736 260 677 389 * 954
603 713 745 411 359 922 * * * 718 888 561 182 206
896 * 173*383 145 943 * * 622 382* 180 141 * *
89 * 238 714 * 575 539 114*721 645 471
*307 968 250 836 498 59 909 601* 117 435 944
* 56* 498 730 882 975 680 * 95 152 517
150 142 473 713 262 577 266 736 668 70*111 811 165
741 * 97 * * 654 428 157 748*823
* 48 * 772 892 350 760 148 440 731*563
260 227 * 795 649 27 107 219 23 226 369
41 136 546 920 * 981 * 454
* 635 782 560 * 896 854 694 340 498* 41 959*
486 63 810 641 * 532 642 90 76
325 539 407 9 550
787 * 105 126 810 497 576 538 718 * 317 519
303 493 462 647 * 875 641 644 * * 154 588
44 140 228 43 * * 132 794 628 669 110 * *
579 348 32 491* 646 506 *708 74 117 24* 698 532
* 902 722 700 610 878 *
885 351 * 799 814*238 *339 428*825 965 862 125
723 243 852 757 784 472 814 603 151 279 617 849
* * * * 91 246 384 *
218 659 113 128 691 972 571 934 * * 442 236
* 455 868 379 594 80 654 421 456
2*535 *410 553 409 235 173 779 116 * *646 418* * 596
70 361 493 * 440 317 865 323 696 202 952 187
767 318 * 1 * * 241 147 * 389
921 301 * * 67 540 149 827 347 956 980 204
* 341 154 * 695 20 183 177 66 699 495 296
460 4 * 347 *36 * 912 * 765
142 163 885 480 805 587 289 310*389 843 417 * 628 *
* 434 803 482 556 294 33 79 358
407 873 *542 41 758 176 *
842 442*766 284 842 856 * 647 422 94
799 433 318* 576 111 788
720 168 840 989 * 468 419 198
* 392 282 591 * 101 340 187
746 499 779 * 456 346 * * 693 94 72
970 671 696 999 124 246 434 173 165 925*
628 * 608 827 * * 634 418 185 311 808 372* 824
694 360 43 645 935 *516 * 555 * 33
* 576 810*592 740 665 968 *499 775 882 998
303 433 280 147 82 * 751*
608 560 827 227 448* 529 376
465 554 401 714 192 999 466 28 161 351
706 157 679 741 818 811 412 376 *
441 955 63 * * * 399 613 444 *972
* 697 600 965 354 392 827 665 326 323 483
381 972 373* * 9 289 *
* 239 863 * 341 *329
801 638 659 358 29 695 241 680 863 310 941 216 311
* 358 * * 786 *330 842 11 279 686
932 666 533 712 801 64 544 *972 *353 809 524 397 *
795 * * 394 586 * 562
629 184 796 946 348 670 63
428 918 850 889 * 673 110 221 337 560
926* 809 627 * 344 343 * * 832 * * 216
624 78 915 701 876 734 402 181 193 460 639 * 558 138
* 91 804 324 985 429 * * 892 * * 321 727 134
991 * * 39 633 213 623 601 919 378 318 * 34
183 399 297 973 622 * 855 684 * 335 733
576 597 * * 686 371 98 23 119 777 *
901 * 412 102 754 332 47* * 861 539 495 801 * 404 777
577 577 978 990 * 236 339 * 534
169 * 687 * 598 * 349 723 864 972 196 491* 335 372
339 633 29 * 4 251* * 250 908 356 230 324 386
943 325 726 690 * 646 * 214
468 * 999 944 751 * 219 837 107 * 271 * 283
* 210 *390 917* 996* 790 128 * 905 277 320 936 835
640 581 * 167 392 29 * 885 369 *
708 106 223 817 * 277 795 296 172 633 229
82 679 * *806 10 * 456 * 95 3
536 12 914 458 214 995 97 735 370 334 876 * 950
* 10 837 518 * * 761
414 794 * 813 394 815 718 759 403 738
463 238 419 810 41 452 2 435 468
103 * 11 927 282 * 234 229 *
301 678 100 954 * 182 * 737 916 890 118* 625
67 312 865 910 * 382 516 973 * 874 500 153 *
373 * * 979 469 *375 765 99 733 897
828 669 * 284 189 371 *168 762
4 565 226 562 190 281 257 * 889 57 210 *
47 120 * * 169 549 414 744 503 208
* 643 397 350 289 * 323 856
* 458 104 931 855 89 469 882 *
594 777 390 * 422 355 654 81 * * 282 630 195
* 568 912 * * 377 * *877 419 * 148 768 471 *
393 163 298 820 582 823 * 952
*268 *733 59 403 14 502 481 231
970 * 981 711 261 701 244 323 *
396 993 557 46 * 714*659 134 623 * 677 730 846
91 405 296 295 * 740 *
345 792 * 834 100 891 764 697 570 * 620* 508 295
*13 340 134 * * 247 660 607 705 165
521 824 222 * 372 290 844 825 867 820 627 * 128 777
629 * 788 535 * * 361 * 805 732 914
* 743 853 637 880 849* 425 946 590 *302 * 748
120 271 862 70 207 233 * 443 263
680 825 793 * 720 555 184 509 22 * 811
772 272 134 * 374 * 573 * *
934 231 * 821 230 981 707 370 * 634 787 * 93 909 70 199 59 490
* 525 * 747 676 * 829 324 952 *
189 791 236 687 868 505 713 777

0
i4.txt Normal file
View File