Merge remote-tracking branch 'origin/master'

# Conflicts:
#	package-lock.json
#	package.json
#	src/utils/index.ts
#	tsconfig.json
This commit is contained in:
2022-12-03 15:48:33 +01:00
9 changed files with 1694 additions and 0 deletions

12
src/day3/example.txt Normal file
View File

@@ -0,0 +1,12 @@
00100
11110
10110
10111
10101
01111
00111
11100
10000
11001
00010
01010

57
src/day3/index.ts Normal file
View File

@@ -0,0 +1,57 @@
import path from 'path';
import { readFile } from "../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));
const size = input[0].length;
let bucket = Array(size).fill(0).map(x => Object.assign({}, [0, 0]));
const toDecimal = (binary) => parseInt(binary, 2);
input.map((x: string) => {
x.split('')
.map((c: string, idx: number) => {
if (c === '0') bucket[idx][0]++; else bucket[idx][1]++
})
})
const MSB = bucket.map(x => x[0] < x[1] ? "0" : "1").join("");
const LSB = bucket.map(x => x[0] < x[1] ? "1" : "0").join("");
let gamma = toDecimal(MSB)
let eps = toDecimal(LSB)
const power = gamma * eps;
console.log("Part 1: ", power);
const getBitCrit = (array, MSB, eqValue) => {
let tmpArray = [...array];
for (const idx in [...Array(size).keys()]) {
let count = [0, 0];
let keepMe;
// Count 0/1 values
tmpArray.forEach((x: string) => {
x[idx] === "0" ? count[0]++ : count[1]++;
})
// Swap results if we look for the least common value
if (!MSB) count = [count[1], count[0]]
// Which value to keep
if (count[0] === count[1]) keepMe = eqValue;
else keepMe = count[0] < count[1] ? '1' : '0'
// Filter
tmpArray = tmpArray.filter((x: string) => x[idx] === keepMe)
if (tmpArray.length === 1) return tmpArray[0];
}
}
const oxygen = toDecimal(getBitCrit(input, true, "1"));
const co2 = toDecimal(getBitCrit(input, false, "0"));
console.log("Part 2: ", oxygen * co2);

1000
src/day3/input.txt Normal file

File diff suppressed because it is too large Load Diff

10
src/day5/example.txt Normal file
View File

@@ -0,0 +1,10 @@
0,9 -> 5,9
8,0 -> 0,8
9,4 -> 3,4
2,2 -> 2,1
7,0 -> 7,4
6,4 -> 2,0
0,9 -> 2,9
3,4 -> 1,4
0,0 -> 8,8
5,5 -> 8,2

78
src/day5/index.ts Normal file
View File

@@ -0,0 +1,78 @@
import path from 'path';
import {readFile} from "../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));
// Parse data
const data = input.map(x => {
const row = x.split(' -> ');
const from = row[0].split(',');
const to = row[1].split(',');
return {
from: {
x: parseInt(from[0]),
y: parseInt(from[1])
},
to: {
x: parseInt(to[0]),
y: parseInt(to[1])
}
}
})
const size = data.reduce((a, b) => {
let x = Math.max(a.x, Math.max(b.to.x, b.from.x));
let y = Math.max(a.y, Math.max(b.to.y, b.from.y));
return {x, y};
}, {x: 0, y: 0});
const solve = (data, diag) => {
let grid = Array();
for (let i = 0; i <= size.x; i++) grid.push(Array(size.y + 1).fill(0));
data.forEach(entry => {
let eq, from, to;
if (entry.from.x === entry.to.x) {
eq = entry.from.x;
from = Math.min(entry.from.y, entry.to.y);
to = Math.max(entry.from.y, entry.to.y);
for (let i = from; i <= to; i++) {
grid[i][eq]++;
}
} else if (entry.from.y === entry.to.y) {
eq = entry.from.y;
from = Math.min(entry.from.x, entry.to.x);
to = Math.max(entry.from.x, entry.to.x);
for (let i = from; i <= to; i++) {
grid[eq][i]++;
}
}
})
return grid;
}
const print = (grid) => {
grid.forEach(y => {
let str = "";
y.forEach(x => str += y)
console.log(str);
})
}
const countDangerZones = (grid) => {
let count = 0;
grid.forEach(y => {
y.forEach(v => {
if(v > 1) count++;
})
})
return count;
}
const grid = solve(data, false);
console.log("Part 1:", countDangerZones(grid));

500
src/day5/input.txt Normal file
View File

@@ -0,0 +1,500 @@
822,976 -> 822,117
387,419 -> 387,468
659,275 -> 318,616
535,940 -> 684,940
294,427 -> 294,88
568,922 -> 425,779
99,265 -> 97,267
534,387 -> 402,387
958,268 -> 958,315
234,714 -> 234,305
507,257 -> 507,328
455,384 -> 455,645
483,641 -> 483,138
410,249 -> 825,249
609,836 -> 528,836
77,913 -> 77,780
478,93 -> 478,123
391,695 -> 715,695
972,586 -> 649,586
936,955 -> 39,58
168,791 -> 944,15
934,222 -> 811,222
372,683 -> 372,93
911,676 -> 771,816
147,34 -> 147,97
524,498 -> 986,960
791,924 -> 239,372
293,145 -> 776,628
195,472 -> 195,31
884,649 -> 215,649
95,53 -> 95,966
484,111 -> 866,493
564,913 -> 681,913
36,362 -> 486,362
762,146 -> 762,323
330,334 -> 937,334
704,714 -> 744,714
56,12 -> 958,914
855,784 -> 855,629
206,665 -> 206,681
436,629 -> 117,948
414,685 -> 414,54
788,401 -> 788,842
442,270 -> 309,270
606,711 -> 416,521
45,630 -> 45,543
221,192 -> 221,537
629,544 -> 417,544
362,605 -> 885,605
988,928 -> 738,678
460,758 -> 981,237
561,26 -> 561,409
543,186 -> 833,186
963,409 -> 910,462
55,129 -> 742,816
245,27 -> 806,27
318,137 -> 318,592
762,700 -> 762,483
436,341 -> 436,654
641,725 -> 641,227
486,446 -> 56,16
113,821 -> 113,196
740,534 -> 821,534
606,765 -> 125,284
614,786 -> 371,786
215,519 -> 215,814
274,496 -> 482,496
131,210 -> 473,552
701,68 -> 701,395
81,713 -> 81,104
458,677 -> 622,677
237,225 -> 237,810
384,246 -> 384,644
411,876 -> 445,910
182,814 -> 182,184
643,858 -> 407,858
698,621 -> 971,348
309,253 -> 511,51
990,368 -> 671,368
129,619 -> 750,619
382,803 -> 382,635
629,270 -> 415,484
550,101 -> 56,595
971,745 -> 971,589
353,947 -> 786,514
71,931 -> 974,28
915,621 -> 363,69
650,547 -> 650,596
884,228 -> 574,228
833,476 -> 833,824
24,722 -> 24,885
401,508 -> 401,553
452,106 -> 740,106
255,840 -> 60,840
551,609 -> 551,767
799,572 -> 356,129
343,138 -> 945,740
77,766 -> 77,72
190,760 -> 190,341
978,583 -> 911,583
557,18 -> 557,640
673,276 -> 882,276
143,348 -> 775,980
776,803 -> 776,812
38,348 -> 38,463
648,567 -> 210,567
468,934 -> 534,868
966,987 -> 26,47
471,465 -> 126,465
26,29 -> 940,943
416,340 -> 361,285
702,66 -> 702,673
34,964 -> 951,47
156,791 -> 65,791
635,678 -> 355,678
898,13 -> 898,909
644,334 -> 644,155
304,93 -> 445,93
946,934 -> 930,918
376,289 -> 317,348
460,491 -> 500,491
761,605 -> 866,710
252,534 -> 413,534
178,23 -> 895,740
677,90 -> 677,592
905,985 -> 211,291
963,65 -> 963,214
853,617 -> 815,617
576,532 -> 319,275
134,59 -> 829,754
926,948 -> 11,33
46,279 -> 760,279
60,389 -> 60,340
49,264 -> 561,776
912,322 -> 790,322
825,205 -> 825,433
637,693 -> 780,693
891,196 -> 200,196
537,604 -> 604,604
870,75 -> 870,342
518,173 -> 455,110
666,67 -> 919,67
536,128 -> 137,527
698,41 -> 44,41
936,982 -> 106,152
780,488 -> 780,918
968,313 -> 56,313
759,36 -> 140,36
111,605 -> 111,430
609,165 -> 54,720
388,452 -> 745,809
986,12 -> 11,987
193,614 -> 335,756
113,239 -> 38,164
715,145 -> 305,555
632,13 -> 508,137
698,673 -> 698,101
954,225 -> 720,225
626,688 -> 626,476
636,697 -> 91,152
228,210 -> 621,210
83,325 -> 989,325
644,358 -> 644,648
481,183 -> 481,901
803,160 -> 250,713
648,96 -> 913,96
921,17 -> 26,912
844,256 -> 844,485
190,138 -> 578,526
383,527 -> 357,501
529,212 -> 757,440
646,399 -> 944,399
961,681 -> 961,178
40,236 -> 484,680
432,465 -> 832,465
988,989 -> 10,11
850,800 -> 850,292
25,97 -> 372,97
383,248 -> 383,125
577,488 -> 852,763
607,322 -> 432,147
611,637 -> 614,637
853,677 -> 755,677
953,225 -> 953,333
984,978 -> 45,39
95,981 -> 314,981
550,400 -> 327,177
929,893 -> 99,63
958,293 -> 152,293
68,656 -> 563,161
45,506 -> 45,925
271,566 -> 289,566
460,440 -> 920,900
392,788 -> 392,263
946,335 -> 946,171
833,405 -> 876,448
268,188 -> 268,678
881,40 -> 30,40
317,84 -> 277,84
415,917 -> 415,358
28,654 -> 28,646
346,461 -> 346,724
935,954 -> 935,362
121,840 -> 121,38
29,55 -> 344,370
774,649 -> 621,649
31,985 -> 396,620
85,579 -> 85,131
181,886 -> 978,89
284,969 -> 284,95
669,943 -> 54,328
72,509 -> 72,857
460,557 -> 986,31
555,460 -> 555,928
921,961 -> 666,706
11,13 -> 951,953
173,948 -> 173,982
680,422 -> 503,245
443,232 -> 443,630
829,487 -> 773,487
176,631 -> 631,176
860,866 -> 559,866
317,537 -> 624,537
937,199 -> 753,199
484,545 -> 293,736
84,616 -> 489,211
340,166 -> 340,876
47,210 -> 47,961
852,404 -> 852,804
831,565 -> 454,188
236,621 -> 556,941
734,640 -> 734,728
756,357 -> 756,433
102,220 -> 157,220
153,800 -> 104,849
710,585 -> 710,666
724,298 -> 724,698
762,257 -> 123,896
402,642 -> 402,964
549,108 -> 945,108
301,966 -> 851,966
399,903 -> 101,605
194,857 -> 605,857
291,373 -> 85,373
601,597 -> 844,597
362,335 -> 362,107
769,66 -> 107,66
49,373 -> 49,143
96,800 -> 894,800
468,116 -> 557,116
549,206 -> 956,206
918,972 -> 35,89
688,632 -> 106,632
267,338 -> 414,485
258,392 -> 258,107
604,964 -> 139,499
975,191 -> 977,191
861,960 -> 93,192
979,570 -> 439,570
961,21 -> 63,919
312,419 -> 881,419
507,779 -> 507,79
775,447 -> 645,447
34,928 -> 626,928
786,515 -> 786,34
81,269 -> 734,922
938,264 -> 266,264
799,271 -> 799,713
765,860 -> 765,43
967,869 -> 135,37
920,757 -> 602,439
419,814 -> 655,814
22,40 -> 472,490
136,672 -> 770,672
667,860 -> 288,481
311,305 -> 311,674
163,569 -> 163,120
801,885 -> 139,223
551,214 -> 551,207
594,979 -> 942,631
347,286 -> 448,185
161,134 -> 855,828
861,864 -> 20,23
309,388 -> 309,676
582,383 -> 86,879
930,58 -> 206,782
538,925 -> 242,925
379,890 -> 704,565
338,350 -> 338,419
916,870 -> 916,283
101,928 -> 402,627
899,696 -> 899,179
96,62 -> 658,624
950,46 -> 11,985
914,510 -> 910,510
98,116 -> 556,116
165,151 -> 913,899
822,76 -> 41,76
878,97 -> 75,900
476,623 -> 873,623
257,494 -> 746,983
638,23 -> 638,778
969,212 -> 259,212
186,146 -> 923,883
799,822 -> 736,822
628,876 -> 532,780
388,604 -> 388,617
591,949 -> 868,949
92,372 -> 107,357
274,691 -> 254,671
169,917 -> 169,317
792,27 -> 710,27
215,645 -> 713,147
886,498 -> 689,498
955,129 -> 214,870
561,380 -> 375,380
391,849 -> 391,75
181,677 -> 759,677
347,394 -> 347,969
52,383 -> 875,383
498,827 -> 729,596
125,832 -> 125,18
799,711 -> 105,711
952,884 -> 129,61
123,269 -> 123,906
792,934 -> 12,154
955,253 -> 753,253
676,957 -> 676,264
437,35 -> 40,35
661,166 -> 509,14
72,978 -> 270,978
554,472 -> 554,627
914,291 -> 464,741
450,841 -> 827,841
846,694 -> 846,281
391,97 -> 890,596
859,512 -> 685,338
349,564 -> 349,187
473,442 -> 896,19
383,949 -> 383,276
568,596 -> 875,596
298,43 -> 298,504
482,632 -> 12,632
44,441 -> 44,978
210,502 -> 210,712
191,391 -> 191,196
27,683 -> 27,840
47,13 -> 960,926
81,779 -> 81,952
914,96 -> 145,96
444,175 -> 151,175
293,934 -> 293,488
106,867 -> 221,982
669,576 -> 858,576
713,142 -> 84,771
60,923 -> 299,923
376,307 -> 281,307
904,53 -> 41,916
763,495 -> 588,495
62,899 -> 843,899
63,939 -> 592,410
294,588 -> 294,437
920,101 -> 879,142
688,527 -> 688,357
679,854 -> 950,854
636,765 -> 329,765
939,87 -> 62,87
952,560 -> 952,193
466,761 -> 32,327
189,245 -> 876,932
42,675 -> 42,311
787,257 -> 62,982
934,983 -> 64,113
548,522 -> 626,522
942,322 -> 942,276
267,298 -> 267,385
632,241 -> 632,117
192,644 -> 192,507
627,33 -> 627,175
350,650 -> 350,157
807,239 -> 113,933
294,713 -> 87,713
81,530 -> 453,530
539,61 -> 240,61
893,76 -> 893,776
39,49 -> 978,988
733,17 -> 606,144
19,408 -> 493,408
364,639 -> 43,639
873,946 -> 69,142
825,875 -> 233,875
708,408 -> 197,919
990,202 -> 990,32
370,393 -> 664,393
764,472 -> 284,472
308,685 -> 308,541
917,68 -> 45,940
397,794 -> 524,667
525,674 -> 313,462
475,981 -> 297,981
728,152 -> 40,840
265,257 -> 162,257
621,847 -> 828,640
547,927 -> 21,401
351,676 -> 357,676
668,640 -> 668,228
138,736 -> 446,736
912,687 -> 912,817
718,278 -> 718,779
674,786 -> 986,474
812,273 -> 891,273
46,341 -> 46,831
404,464 -> 118,464
277,926 -> 114,763
231,786 -> 106,786
266,721 -> 446,541
42,80 -> 675,713
422,116 -> 422,344
922,543 -> 922,511
525,150 -> 525,599
862,288 -> 498,288
961,432 -> 961,693
895,876 -> 895,837
619,361 -> 174,361
275,673 -> 275,415
950,179 -> 405,179
460,460 -> 460,405
222,872 -> 222,959
451,403 -> 21,833
570,367 -> 570,147
260,792 -> 82,970
586,159 -> 108,159
956,25 -> 55,926
71,645 -> 988,645
540,438 -> 44,934
230,160 -> 395,160
811,106 -> 811,598
819,741 -> 596,741
347,731 -> 347,198
503,580 -> 495,580
30,706 -> 603,133
257,498 -> 619,498
232,784 -> 359,784
826,708 -> 396,708
14,977 -> 895,96
964,192 -> 279,192
611,282 -> 611,460
207,903 -> 207,882
969,10 -> 22,957
403,599 -> 970,32
712,671 -> 712,733
795,422 -> 235,422
47,965 -> 939,73
925,839 -> 275,189
102,593 -> 973,593
389,768 -> 389,493
234,365 -> 624,365
50,901 -> 50,702
345,573 -> 638,866
798,280 -> 111,967
258,556 -> 258,978
966,57 -> 88,935
171,279 -> 171,130
238,727 -> 947,727
683,777 -> 290,777
552,308 -> 552,150
81,91 -> 911,921
845,698 -> 845,735
712,241 -> 26,927
120,813 -> 716,217
947,10 -> 25,932
395,381 -> 338,324
408,989 -> 408,529
600,574 -> 600,557
46,567 -> 46,980
983,14 -> 10,987
984,568 -> 642,568
543,250 -> 543,80
765,534 -> 108,534
89,213 -> 120,213
893,813 -> 271,191
133,178 -> 133,654
468,689 -> 468,677
970,203 -> 970,952
892,322 -> 892,417
593,735 -> 152,294
839,75 -> 839,964
746,413 -> 89,413
535,595 -> 535,633
771,646 -> 614,489
572,852 -> 572,718
125,35 -> 838,748
122,812 -> 179,812
467,243 -> 188,243
713,850 -> 51,188
633,279 -> 932,578
428,230 -> 216,18
94,921 -> 973,42
513,609 -> 513,507
826,358 -> 330,854

1
src/day6/example.txt Normal file
View File

@@ -0,0 +1 @@
3,4,3,1,2

35
src/day6/index.ts Normal file
View File

@@ -0,0 +1,35 @@
import path from 'path';
import {readFile} from "../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'))[0].split(",");
// prepare the buckets of fish
let buckets = [0, 0, 0, 0, 0, 0, 0, 0, 0];
input.forEach(number => {
const num = parseInt(number);
buckets[num - 1]++;
})
const numFish = (days) => {
for (let k = 1; k < days; k++) {
let diff = [0, 0, 0, 0, 0, 0, 0, 0, 0];
for (let i = 0; i < 9; i++) {
const numFish = buckets[i];
if (i === 0) {
diff[8] += numFish;
diff[6] += numFish;
diff[0] -= numFish;
} else {
diff[i] -= numFish;
diff[i - 1] += numFish;
}
}
for (let i = 8; i >= 0; i--) {
buckets[i] += diff[i];
}
}
return buckets.reduce((a, b) => a + b, 0);
}
console.log("Part 1:", numFish(80));
console.log("Part 2:", numFish(256));

1
src/day6/input.txt Normal file
View File

@@ -0,0 +1 @@
3,5,4,1,2,1,5,5,1,1,1,1,4,1,4,5,4,5,1,3,1,1,1,4,1,1,3,1,1,5,3,1,1,3,1,3,1,1,1,4,1,2,5,3,1,4,2,3,1,1,2,1,1,1,4,1,1,1,1,2,1,1,1,3,1,1,4,1,4,1,5,1,4,2,1,1,5,4,4,4,1,4,1,1,1,1,3,1,5,1,4,5,3,1,4,1,5,2,2,5,1,3,2,2,5,4,2,3,4,1,2,1,1,2,1,1,5,4,1,1,1,1,3,1,5,4,1,5,1,1,4,3,4,3,1,5,1,1,2,1,1,5,3,1,1,1,1,1,5,1,1,1,1,1,1,1,2,2,5,5,1,2,1,2,1,1,5,1,3,1,5,2,1,4,1,5,3,1,1,1,2,1,3,1,4,4,1,1,5,1,1,4,1,4,2,3,5,2,5,1,3,1,2,1,4,1,1,1,1,2,1,4,1,3,4,1,1,1,1,1,1,1,2,1,5,1,1,1,1,2,3,1,1,2,3,1,1,3,1,1,3,1,3,1,3,3,1,1,2,1,3,2,3,1,1,3,5,1,1,5,5,1,2,1,2,2,1,1,1,5,3,1,1,3,5,1,3,1,5,3,4,2,3,2,1,3,1,1,3,4,2,1,1,3,1,1,1,1,1,1