Compare commits

...

20 Commits

Author SHA1 Message Date
7f3d06afdd day 06 part 1 finished 2025-01-06 22:45:24 +01:00
3d139dfe42 finished day 04 part 2 2025-01-06 13:55:07 +01:00
c488eda17c finished day 04 part 1 2025-01-05 12:25:17 +01:00
ceffb89950 unnecessary variable 2024-12-28 14:11:21 +01:00
75668206cd day 25 part 1 done 2024-12-28 14:10:00 +01:00
d05ca81cb7 day 24: part 1 complete 2024-12-27 21:10:33 +01:00
6fc4c2136a day 24: initial read. (pre-part 1) 2024-12-27 17:30:15 +01:00
312882371e day09 remove class crap 2024-12-22 22:20:06 +01:00
d332e1cda1 day09 example is working 2024-12-22 22:19:37 +01:00
98bf0f9dd1 day09 pre-fragmentation. parsing successful. 2024-12-22 13:33:21 +01:00
021c764d2d day15 part 1 done 2024-12-22 11:27:48 +01:00
d81cd73983 day19 part 1 done 2024-12-21 21:19:29 +01:00
f2abf8c2a7 day19 parsing done 2024-12-21 15:23:55 +01:00
d48faf5cb0 day 04 part 1 finished 2024-12-21 12:55:12 +01:00
63aae6749d day 08 part 2 updated with LCM. No more brute forcing 2024-12-21 11:50:36 +01:00
c5947508f3 day 08 part 2 finished 2024-12-21 11:12:13 +01:00
620f903135 day 08 part 1 finished 2024-12-20 22:52:46 +01:00
df6fc0ca59 day 07 part 2 finished. Works on example, but not on input 2024-12-20 18:31:25 +01:00
db1bf32fee day 07 part 1 finished 2024-12-20 13:04:37 +01:00
d76bbb2e98 day 05 part 1 finished 2024-12-19 08:24:09 +01:00
35 changed files with 8554 additions and 86 deletions

6
2023/day04/example.txt Normal file
View File

@ -0,0 +1,6 @@
Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11

25
2023/day04/index.js Normal file
View File

@ -0,0 +1,25 @@
import fs from "node:fs";
const lines = fs.readFileSync("input.txt", "utf-8").split("\n");
let result = 0;
lines.forEach((line) => {
result += countCardPoints(line);
});
console.log(result);
function countCardPoints(line) {
const lists = line.split(":")[1].trim().split("|");
const [winningNumbers, myNumbers] = lists.map(
(item) => item.match(/\d+/g)?.map(Number) || []
);
const commonItems = myNumbers.filter((item) => winningNumbers.includes(item));
let output = 0;
if (commonItems.length > 0) {
output += 2 ** (commonItems.length - 1);
}
return output;
}

213
2023/day04/input.txt Normal file
View File

@ -0,0 +1,213 @@
Card 1: 69 61 27 58 89 52 81 94 40 51 | 43 40 52 90 37 97 89 80 69 42 51 70 94 58 10 73 21 29 61 63 57 79 81 27 35
Card 2: 5 75 37 76 98 32 24 83 44 50 | 80 75 91 5 33 52 31 96 83 92 46 98 55 65 48 24 44 4 32 60 88 37 76 50 77
Card 3: 37 39 43 53 47 20 50 56 78 65 | 80 56 32 78 72 97 40 77 17 50 87 99 36 93 63 19 39 59 44 52 23 75 9 51 43
Card 4: 6 25 31 60 2 50 89 67 82 16 | 65 89 5 67 68 53 50 6 51 25 96 32 2 16 41 60 63 90 82 30 98 31 75 14 7
Card 5: 43 39 98 45 33 87 36 23 61 66 | 93 61 4 21 47 32 94 99 45 23 87 64 92 43 33 5 83 16 98 44 39 77 66 18 36
Card 6: 59 6 65 20 62 3 92 79 98 24 | 80 15 28 70 24 32 93 99 91 86 95 16 90 83 11 75 19 4 48 6 78 61 20 27 7
Card 7: 49 54 25 44 79 68 13 60 1 43 | 16 18 4 82 99 23 80 46 79 55 14 1 32 13 54 84 37 44 20 68 25 60 27 49 43
Card 8: 52 50 19 69 28 93 32 98 97 47 | 2 40 28 47 20 60 66 98 12 19 31 14 16 75 97 49 93 69 11 52 50 87 24 32 27
Card 9: 47 44 94 43 75 49 77 24 93 45 | 94 47 30 43 24 77 44 31 66 75 45 54 92 49 84 53 20 11 17 16 86 93 50 85 76
Card 10: 23 39 92 16 68 30 49 59 34 90 | 85 15 25 31 92 90 47 59 11 36 68 10 96 65 16 49 18 97 9 83 28 61 4 94 46
Card 11: 21 37 14 89 46 31 64 90 43 45 | 63 29 14 23 7 28 13 86 83 16 19 24 78 54 47 51 58 77 71 40 56 62 20 89 39
Card 12: 69 98 97 19 70 5 62 25 55 90 | 1 35 45 25 75 61 50 99 82 96 71 74 72 76 3 70 14 57 88 27 5 94 58 32 85
Card 13: 24 51 65 64 29 37 86 60 41 94 | 40 13 88 85 46 59 90 55 8 72 56 93 6 71 52 87 31 91 20 5 83 36 86 43 96
Card 14: 43 76 64 80 49 48 83 14 51 54 | 1 99 54 36 80 48 49 15 43 17 51 96 83 40 76 14 41 75 84 55 63 91 64 58 9
Card 15: 9 33 75 53 48 76 25 83 28 24 | 1 10 69 28 76 87 71 52 26 44 66 92 75 55 7 40 93 20 12 91 30 33 46 39 31
Card 16: 55 92 85 21 81 90 47 63 34 70 | 26 2 1 87 59 69 40 58 46 43 70 17 35 71 6 63 49 13 81 11 85 94 44 96 5
Card 17: 21 42 95 24 35 53 39 14 18 4 | 76 23 5 79 22 20 36 69 38 77 40 37 32 89 49 15 59 44 51 25 74 34 54 16 28
Card 18: 63 21 61 65 82 69 27 74 98 58 | 51 58 86 21 90 54 45 41 71 74 83 6 42 1 35 78 31 9 55 46 11 15 63 84 82
Card 19: 44 41 24 51 74 20 97 31 83 39 | 17 24 2 54 73 28 13 55 49 79 42 62 58 8 95 23 86 70 76 41 26 4 80 25 11
Card 20: 83 61 55 56 96 16 95 49 65 90 | 67 75 63 37 87 54 39 19 99 81 47 49 24 84 41 13 78 40 38 64 26 34 15 72 48
Card 21: 23 89 57 54 90 82 2 8 65 80 | 78 14 21 39 45 42 1 80 99 20 52 11 31 50 68 82 59 4 96 55 6 46 88 38 34
Card 22: 85 6 4 41 5 35 31 19 64 17 | 83 56 96 41 16 39 70 81 67 51 74 99 1 18 43 48 5 85 29 88 30 52 69 11 61
Card 23: 72 88 38 82 33 10 75 44 70 53 | 7 71 56 96 19 89 30 67 21 22 48 45 80 86 39 61 4 44 74 28 23 40 46 72 78
Card 24: 75 67 13 39 63 58 43 35 49 99 | 28 46 17 95 55 2 83 18 42 91 20 78 97 51 60 81 47 69 64 57 37 77 12 61 67
Card 25: 87 44 62 66 82 20 7 21 51 32 | 54 97 46 1 95 14 26 47 94 25 49 30 84 12 5 73 48 89 45 53 28 74 93 88 13
Card 26: 65 6 10 66 15 26 47 62 63 68 | 5 60 71 41 68 66 53 26 6 56 38 47 90 62 63 33 81 10 15 3 16 96 83 65 20
Card 27: 7 95 47 35 58 87 21 68 80 37 | 94 24 39 74 43 78 69 54 10 32 84 99 41 75 6 86 11 66 56 62 16 44 5 59 65
Card 28: 95 19 21 14 59 74 27 68 32 99 | 83 35 5 41 92 59 26 57 18 55 52 32 6 23 36 54 56 50 15 48 27 89 45 53 12
Card 29: 1 8 93 94 72 89 13 37 58 49 | 35 62 88 26 94 50 31 87 72 78 85 1 44 49 22 5 20 91 98 13 77 93 60 48 52
Card 30: 47 94 67 27 56 25 38 52 28 32 | 22 61 56 82 58 27 32 18 33 94 79 23 62 60 76 98 67 49 77 64 11 47 40 16 42
Card 31: 61 68 80 67 41 6 52 33 22 91 | 54 10 72 91 31 33 95 43 39 68 81 22 63 67 32 61 27 73 66 75 36 79 6 59 80
Card 32: 62 5 57 36 87 33 53 86 82 8 | 76 32 30 5 53 57 86 56 97 77 18 33 8 82 15 71 83 17 48 90 9 43 54 88 4
Card 33: 79 25 27 11 17 23 76 38 15 26 | 83 80 37 36 77 24 20 55 16 59 81 7 19 1 18 91 42 29 22 2 41 27 6 50 92
Card 34: 3 8 29 57 87 88 97 12 41 95 | 29 94 44 20 34 28 76 12 95 74 22 85 31 64 91 50 1 97 35 49 98 41 92 67 25
Card 35: 43 79 50 20 6 76 25 14 66 89 | 93 72 50 67 38 89 13 87 46 54 36 52 20 57 56 17 3 22 43 63 14 84 15 29 16
Card 36: 68 15 59 47 30 98 89 27 5 25 | 11 8 32 72 18 74 73 48 39 53 51 88 22 90 55 40 14 44 66 12 94 71 9 13 31
Card 37: 11 48 72 90 12 86 34 32 51 7 | 52 80 36 46 74 64 44 27 11 47 61 84 55 28 77 26 58 54 3 5 17 60 89 16 72
Card 38: 13 97 42 79 96 69 8 57 90 48 | 84 67 52 8 20 54 21 45 69 23 28 85 92 95 40 59 87 2 50 83 14 6 16 70 39
Card 39: 87 67 8 38 15 20 96 30 45 97 | 36 28 43 35 9 27 14 70 29 1 40 56 60 81 63 48 53 44 31 75 49 85 64 39 69
Card 40: 63 35 33 6 58 97 91 34 67 18 | 68 61 98 66 84 20 37 41 17 50 81 14 60 78 36 9 65 21 83 2 71 79 85 7 47
Card 41: 75 97 62 6 92 69 53 20 45 5 | 5 53 56 69 84 97 75 62 39 18 22 64 6 92 70 41 45 20 17 63 7 9 54 29 21
Card 42: 64 21 72 62 90 50 84 28 71 37 | 71 38 64 50 42 4 65 85 91 21 55 58 10 92 90 7 17 60 84 70 37 72 28 98 62
Card 43: 58 28 84 32 92 18 48 73 86 5 | 43 32 33 35 84 50 64 6 21 52 92 58 29 95 11 18 28 79 48 77 5 86 60 73 10
Card 44: 30 69 44 40 5 58 22 63 65 90 | 65 68 69 43 58 5 72 90 22 63 52 78 66 15 60 88 30 12 74 44 67 40 41 38 29
Card 45: 69 53 87 59 27 10 16 90 52 35 | 83 4 87 89 11 30 45 70 52 13 35 92 90 79 6 68 71 86 16 97 26 72 39 96 53
Card 46: 78 8 1 64 87 6 3 7 75 82 | 48 84 56 8 89 73 31 68 64 46 40 6 41 14 78 97 91 27 95 28 47 30 37 58 75
Card 47: 58 24 13 97 18 50 89 9 14 81 | 97 24 54 16 14 32 78 62 50 5 18 42 20 99 15 58 13 89 96 72 81 75 29 9 86
Card 48: 87 83 32 53 5 72 86 84 65 9 | 30 89 54 53 58 13 85 81 83 39 71 5 91 65 68 82 94 42 87 24 86 29 47 32 28
Card 49: 38 4 66 35 19 56 78 90 81 65 | 60 16 82 68 7 49 15 32 3 22 48 11 38 53 83 45 54 23 5 81 78 34 63 27 65
Card 50: 9 48 47 87 99 6 65 2 44 75 | 75 79 55 82 44 27 42 48 51 65 16 68 3 52 30 62 84 66 87 69 8 10 86 35 72
Card 51: 28 24 85 63 96 30 88 29 5 50 | 71 61 30 90 65 96 41 50 82 68 39 10 81 29 48 26 80 97 28 24 27 88 38 5 63
Card 52: 86 80 90 33 19 78 13 69 89 27 | 62 54 85 88 97 64 37 31 29 6 94 69 67 51 57 58 89 13 76 55 22 96 63 66 38
Card 53: 75 5 78 44 10 77 3 89 39 4 | 41 61 76 56 75 85 7 22 19 51 5 87 53 10 79 24 39 94 26 57 1 35 83 32 34
Card 54: 70 80 59 16 6 99 83 37 26 8 | 62 58 16 74 35 53 94 1 80 89 61 11 86 36 83 14 8 39 43 6 92 99 18 64 79
Card 55: 41 39 43 58 60 65 74 76 11 46 | 58 42 60 59 13 16 83 55 37 25 32 96 22 79 69 2 89 3 21 71 35 67 95 19 45
Card 56: 10 18 89 9 63 51 81 4 49 75 | 3 32 45 68 87 65 71 55 79 89 37 64 21 53 30 62 26 6 90 51 70 74 22 10 54
Card 57: 27 58 75 7 80 71 45 46 26 55 | 67 76 91 16 69 82 24 48 46 87 28 20 75 36 86 8 51 42 9 84 3 43 27 34 70
Card 58: 64 55 76 63 58 66 34 27 46 62 | 79 22 69 33 1 81 4 76 36 40 88 39 2 47 89 48 29 77 93 67 41 10 95 19 63
Card 59: 62 1 42 32 48 12 94 36 33 86 | 71 41 46 96 12 55 10 38 15 43 1 60 67 2 30 89 37 98 19 18 69 25 50 20 77
Card 60: 11 14 6 57 55 62 88 19 24 26 | 45 58 88 83 51 36 46 32 85 17 61 33 31 2 91 9 78 39 81 20 87 86 64 66 49
Card 61: 9 28 27 33 53 71 38 63 55 60 | 26 77 83 57 75 50 3 68 31 52 24 94 40 18 8 80 70 5 25 72 47 44 45 89 19
Card 62: 47 64 33 74 26 82 21 30 69 39 | 29 68 65 37 60 58 17 48 75 91 2 9 16 31 46 49 97 57 94 40 34 13 11 43 39
Card 63: 1 16 10 67 73 48 66 78 55 32 | 31 54 78 79 42 34 81 55 37 63 29 73 90 48 11 77 67 14 46 19 16 66 89 53 32
Card 64: 59 33 71 69 84 2 53 95 28 52 | 85 82 66 79 45 71 33 10 30 84 52 19 94 54 28 41 61 59 6 69 53 97 38 2 49
Card 65: 17 46 40 23 93 76 45 2 43 32 | 17 32 23 2 52 7 15 77 20 39 46 64 99 59 98 89 43 40 93 4 45 11 72 76 13
Card 66: 58 9 28 19 90 80 77 11 81 20 | 44 51 39 20 63 6 11 88 61 27 90 53 62 70 34 42 28 24 78 16 81 65 9 31 15
Card 67: 88 42 78 9 26 43 54 95 8 40 | 58 54 10 43 60 36 40 42 95 63 4 88 82 50 38 26 8 99 31 74 13 46 91 61 44
Card 68: 32 95 6 83 30 14 38 15 87 70 | 79 15 64 45 99 70 17 38 87 93 83 53 14 77 85 32 19 95 29 6 7 61 90 30 67
Card 69: 76 15 92 22 48 46 42 39 84 32 | 51 26 1 9 2 73 17 94 6 62 92 77 32 90 43 48 81 22 88 58 78 46 79 98 15
Card 70: 62 90 81 15 8 3 72 93 65 32 | 57 62 3 80 26 67 10 72 54 36 98 29 17 90 93 32 49 48 76 8 12 31 65 81 15
Card 71: 74 46 75 14 56 20 83 28 35 61 | 57 61 75 59 54 55 56 32 71 4 18 60 72 94 39 86 30 50 48 41 7 14 77 73 85
Card 72: 47 63 42 84 87 78 21 56 97 26 | 87 40 78 1 48 7 26 63 42 37 30 97 65 84 14 93 85 39 47 11 50 71 21 28 56
Card 73: 20 56 88 38 50 74 76 69 63 17 | 73 47 87 89 98 18 33 14 3 78 72 39 77 97 74 80 81 51 88 59 46 2 70 69 20
Card 74: 44 74 4 59 77 99 66 81 8 6 | 75 88 25 73 74 86 16 8 99 17 50 22 83 35 67 3 77 5 46 34 68 80 6 23 54
Card 75: 58 25 36 26 80 12 88 51 98 71 | 71 66 77 83 51 61 23 98 33 53 18 75 43 20 26 92 70 90 25 94 86 12 34 36 22
Card 76: 14 79 44 82 59 75 43 88 12 52 | 11 30 26 74 82 91 72 79 35 69 52 24 13 23 3 22 78 38 43 10 14 53 76 66 90
Card 77: 65 79 38 39 3 18 89 51 9 41 | 5 87 13 45 86 85 72 7 92 22 36 69 67 82 40 73 83 15 34 59 68 57 31 84 71
Card 78: 67 89 71 15 39 66 29 97 11 38 | 4 95 21 74 29 43 51 65 31 91 98 39 71 13 93 88 64 47 40 76 58 6 92 80 81
Card 79: 8 60 27 44 15 52 91 99 35 47 | 97 1 35 81 53 79 16 23 52 77 11 56 2 85 21 96 46 83 5 37 49 93 13 76 69
Card 80: 1 37 16 40 6 48 66 26 90 12 | 87 23 24 5 67 80 20 53 95 66 93 85 7 34 32 52 92 61 9 27 41 35 36 57 38
Card 81: 72 39 83 5 69 43 73 92 88 78 | 77 74 68 78 9 75 50 65 8 14 35 96 64 80 58 6 4 46 57 61 66 85 48 40 34
Card 82: 38 2 71 61 46 97 8 84 43 24 | 91 50 76 58 17 11 66 60 65 16 44 70 96 20 37 94 30 99 6 69 32 29 81 49 48
Card 83: 50 89 48 66 96 97 28 5 12 76 | 89 93 79 68 16 48 44 42 28 41 83 50 97 96 76 82 15 57 10 66 5 12 74 38 4
Card 84: 9 71 98 81 59 30 99 45 80 48 | 6 17 31 35 88 57 10 81 77 70 58 21 34 63 51 84 74 37 64 80 29 16 3 11 76
Card 85: 36 86 69 83 56 51 19 67 65 10 | 35 3 55 38 90 59 82 2 32 10 17 36 52 69 83 65 13 92 97 99 48 30 87 68 70
Card 86: 6 96 82 83 89 31 91 20 28 5 | 20 11 84 45 50 81 23 56 24 28 1 53 2 57 54 64 3 94 96 43 6 26 91 77 66
Card 87: 84 22 38 2 94 23 76 64 29 42 | 13 99 48 23 62 82 38 91 31 88 14 43 66 94 36 64 49 85 26 97 71 39 22 68 60
Card 88: 69 25 81 63 86 79 1 64 76 38 | 85 81 63 6 69 50 16 65 54 25 27 38 84 76 7 64 79 12 86 88 70 94 39 1 20
Card 89: 7 43 74 93 60 24 33 53 97 35 | 62 51 93 86 81 71 63 2 13 99 66 83 97 37 10 77 55 27 73 92 67 19 33 88 96
Card 90: 2 78 5 23 69 72 93 86 55 24 | 92 38 66 85 34 52 83 24 31 6 25 13 33 30 17 7 81 15 16 9 21 53 94 2 77
Card 91: 34 21 58 13 99 32 61 65 49 30 | 50 73 18 84 99 53 21 61 94 22 26 93 30 68 34 65 58 72 77 32 49 11 13 39 9
Card 92: 15 67 55 79 9 88 33 7 94 49 | 20 94 87 58 9 35 93 7 67 21 15 57 30 56 88 85 5 13 60 83 2 55 38 28 6
Card 93: 16 11 80 5 33 23 96 21 56 94 | 1 37 85 94 72 42 66 16 10 70 86 77 33 21 55 11 6 45 96 29 90 14 80 48 64
Card 94: 2 57 51 10 3 70 63 60 1 40 | 67 80 96 98 52 74 97 33 92 88 19 62 43 73 55 3 1 20 95 99 12 90 17 24 56
Card 95: 80 18 73 50 2 3 83 65 33 26 | 7 78 28 4 2 19 14 29 61 81 17 38 57 89 11 20 5 12 13 10 24 96 75 25 55
Card 96: 98 53 54 50 20 34 28 96 59 88 | 52 41 53 29 40 15 88 93 30 76 97 81 73 17 12 70 6 63 27 32 64 48 69 96 44
Card 97: 66 82 79 74 75 71 29 32 96 50 | 62 46 76 30 21 50 98 17 32 75 87 96 41 42 79 73 45 92 51 91 78 35 27 72 74
Card 98: 93 39 91 70 97 33 57 69 53 73 | 38 71 33 25 52 26 75 94 93 42 17 82 7 27 47 89 18 11 20 91 40 31 55 19 4
Card 99: 93 31 61 29 77 60 66 92 3 10 | 55 63 56 4 61 33 60 85 45 48 78 27 25 36 42 93 20 67 49 21 7 83 65 13 71
Card 100: 21 86 19 62 53 34 88 42 71 47 | 74 7 79 85 22 60 76 10 40 62 50 92 20 24 12 42 15 31 56 90 44 72 34 11 95
Card 101: 8 68 64 72 98 60 56 69 57 25 | 24 5 95 77 89 58 39 63 80 48 53 66 38 61 31 3 43 1 16 71 52 82 19 14 51
Card 102: 47 39 45 40 54 93 87 26 33 67 | 95 80 98 3 24 53 96 9 90 13 35 21 86 88 63 55 1 42 25 56 32 60 34 40 77
Card 103: 64 18 52 28 82 54 31 49 66 44 | 4 78 40 73 32 99 33 6 29 46 11 25 47 36 14 97 79 61 63 50 55 26 30 58 77
Card 104: 95 84 89 87 57 53 12 43 58 1 | 59 45 57 58 39 61 52 81 43 40 23 86 1 97 95 55 89 84 87 6 17 85 53 12 28
Card 105: 98 81 56 52 37 26 46 39 88 36 | 4 34 88 32 5 73 98 26 39 77 93 42 62 82 41 81 56 1 12 33 46 36 14 52 37
Card 106: 97 98 42 95 14 87 41 46 44 27 | 5 82 46 66 87 41 51 55 13 27 7 44 31 97 77 10 14 90 98 94 95 12 79 42 35
Card 107: 15 30 60 32 25 73 77 63 85 81 | 16 86 56 41 20 51 25 52 73 40 74 32 15 61 99 34 60 85 77 30 5 27 63 35 81
Card 108: 65 59 24 72 54 66 14 81 67 31 | 94 92 83 67 50 19 61 6 42 55 60 97 22 18 24 40 86 43 72 56 5 75 63 45 90
Card 109: 90 87 3 17 80 96 36 93 34 79 | 51 11 29 96 13 66 70 99 72 67 64 42 37 30 55 98 35 12 15 84 5 10 57 19 49
Card 110: 57 82 85 42 23 76 70 64 88 21 | 65 32 76 81 7 43 23 52 55 14 70 58 27 82 48 64 85 47 57 16 46 97 68 21 45
Card 111: 50 62 66 33 93 43 56 70 77 35 | 94 79 19 16 35 41 78 32 91 4 14 3 13 48 63 36 75 98 64 69 27 96 77 51 74
Card 112: 6 36 83 73 59 48 65 12 29 92 | 12 36 82 52 8 35 88 69 9 28 89 39 87 20 22 67 27 63 75 73 70 58 31 78 79
Card 113: 25 10 29 67 87 32 54 92 62 43 | 65 19 67 75 79 29 8 73 62 97 82 87 25 18 32 93 49 5 66 27 68 42 43 11 46
Card 114: 29 44 96 86 64 37 4 71 94 98 | 5 27 55 76 33 59 68 77 3 96 15 1 46 20 35 61 53 83 78 69 99 97 34 30 25
Card 115: 32 90 91 88 39 66 37 35 12 21 | 85 82 71 37 87 22 72 17 35 9 58 95 64 12 33 90 68 66 15 43 4 7 91 8 84
Card 116: 75 50 66 77 51 36 98 23 97 28 | 4 66 44 20 35 76 51 83 58 89 91 87 75 27 10 47 1 60 97 90 77 45 63 59 36
Card 117: 85 44 56 82 39 64 30 88 79 20 | 71 88 53 27 36 85 13 11 38 91 77 19 3 99 23 73 39 44 24 45 32 15 58 79 56
Card 118: 80 41 82 32 1 52 91 40 66 11 | 72 3 4 29 77 87 36 40 16 46 66 30 92 76 98 49 85 7 32 28 60 86 52 95 83
Card 119: 50 66 77 26 2 49 9 25 58 81 | 80 49 50 55 16 56 20 42 31 99 69 26 28 85 66 65 70 90 84 53 40 19 60 12 38
Card 120: 48 9 95 85 16 70 81 61 57 92 | 2 58 66 10 34 54 7 94 16 14 25 74 92 49 88 13 57 26 99 97 70 75 65 19 17
Card 121: 50 76 20 25 53 17 2 78 85 86 | 14 40 78 89 93 48 1 28 11 4 54 71 5 69 85 61 38 94 66 64 98 95 30 67 23
Card 122: 62 92 40 16 25 82 64 87 52 53 | 5 19 25 48 38 42 1 99 51 79 2 78 75 57 81 56 70 47 59 91 90 6 9 24 15
Card 123: 50 91 29 69 41 73 44 51 13 26 | 66 55 22 6 17 71 1 3 67 24 88 79 65 64 60 34 7 90 78 72 28 83 82 74 10
Card 124: 61 77 51 39 73 4 6 25 53 91 | 54 88 26 11 3 79 10 86 23 49 66 21 47 85 5 2 98 7 1 60 55 13 94 34 62
Card 125: 31 67 93 63 21 28 12 85 39 57 | 69 46 22 59 55 75 11 97 70 1 94 14 81 96 79 44 18 36 85 34 56 48 30 72 15
Card 126: 31 89 5 98 63 36 40 48 91 12 | 91 42 6 47 51 94 48 83 5 77 98 8 11 50 29 9 36 54 89 40 12 63 31 34 73
Card 127: 41 88 97 87 13 80 74 49 24 6 | 43 66 62 47 36 87 6 88 24 49 96 56 25 79 8 76 23 97 41 42 80 89 13 73 74
Card 128: 7 6 3 99 56 40 80 27 23 43 | 34 64 97 67 3 78 69 43 57 98 96 4 6 94 62 48 23 68 8 1 58 73 75 65 16
Card 129: 46 80 39 32 35 41 61 93 57 47 | 40 63 93 89 61 4 45 46 25 96 80 39 35 14 62 95 49 32 47 2 41 99 57 82 44
Card 130: 90 10 79 84 88 76 59 18 62 11 | 79 11 53 97 92 5 88 52 23 60 62 64 86 84 14 20 98 91 10 28 24 29 87 65 3
Card 131: 95 50 11 76 61 4 2 8 42 47 | 40 15 46 61 8 2 29 97 65 50 19 83 76 95 59 82 48 57 43 72 42 25 31 47 53
Card 132: 49 86 99 81 13 98 69 32 89 18 | 89 84 65 58 32 15 96 49 1 18 22 13 98 99 6 81 46 50 88 78 3 11 69 74 86
Card 133: 18 56 75 7 48 40 38 22 10 90 | 10 42 61 18 91 38 12 67 72 54 51 22 86 77 81 87 75 34 89 97 35 6 96 7 62
Card 134: 67 66 99 61 98 32 6 82 86 9 | 12 8 33 87 82 66 98 78 68 24 59 80 6 44 32 49 9 2 97 65 86 71 99 61 67
Card 135: 24 59 92 68 44 20 30 8 40 77 | 28 72 51 38 58 40 30 24 21 77 92 82 59 18 50 7 19 44 20 68 91 8 32 88 94
Card 136: 27 10 70 96 29 69 37 63 86 65 | 28 27 8 34 29 82 78 56 22 30 3 19 63 88 67 74 75 4 91 41 35 65 7 14 66
Card 137: 74 70 86 34 89 37 73 23 29 85 | 16 65 58 88 8 5 11 26 39 91 51 31 19 78 92 87 36 34 80 94 42 81 38 40 93
Card 138: 71 35 5 13 69 8 88 11 76 31 | 69 42 5 59 76 54 37 11 39 9 12 73 66 13 71 89 56 26 28 77 2 31 1 4 57
Card 139: 10 50 78 91 55 61 81 19 44 59 | 97 98 39 52 56 28 94 24 3 54 45 82 14 17 5 16 27 99 37 38 26 31 53 9 35
Card 140: 17 93 15 73 45 20 43 50 2 52 | 64 21 15 57 77 90 2 61 22 8 91 39 93 82 62 5 47 30 41 80 58 1 17 25 48
Card 141: 52 66 4 8 87 11 14 76 23 24 | 3 55 29 16 26 61 12 43 89 15 56 24 5 36 85 62 90 75 65 71 53 45 38 50 54
Card 142: 57 35 91 73 66 67 64 63 92 18 | 96 58 44 37 19 41 72 54 52 31 88 20 45 68 42 21 2 59 62 53 70 63 77 57 69
Card 143: 88 70 69 13 18 97 64 89 40 29 | 74 98 30 5 85 12 38 62 66 33 36 17 71 9 97 22 47 79 39 60 89 13 83 77 8
Card 144: 14 35 52 8 75 43 62 33 36 70 | 13 95 71 64 6 48 74 84 61 24 89 77 17 58 87 75 76 43 28 54 3 83 99 67 12
Card 145: 53 88 65 42 72 92 43 14 3 90 | 21 19 33 59 84 61 96 41 20 31 88 71 38 72 79 48 58 55 62 36 23 11 30 18 70
Card 146: 68 28 58 96 42 32 22 90 19 47 | 84 25 39 96 67 26 29 24 9 62 1 14 46 11 77 81 61 82 60 80 78 52 31 98 49
Card 147: 81 85 76 67 4 63 25 97 57 27 | 2 26 43 9 56 59 29 10 13 45 35 60 86 65 15 46 19 5 79 8 44 1 6 20 21
Card 148: 90 41 37 66 94 87 84 14 9 29 | 94 47 5 10 23 38 61 87 55 22 75 97 37 29 30 9 18 84 69 41 11 73 43 45 14
Card 149: 84 30 17 21 47 26 81 68 57 40 | 86 78 70 5 54 40 34 38 47 72 62 56 53 7 10 37 73 92 46 61 41 74 68 23 63
Card 150: 83 21 33 53 37 57 66 29 41 6 | 20 61 75 89 59 60 41 83 21 29 30 57 66 58 37 76 90 96 53 69 33 17 12 95 6
Card 151: 12 5 52 36 3 29 69 6 82 27 | 82 12 27 44 50 15 76 28 29 52 57 36 73 3 34 5 94 37 6 92 84 9 10 98 69
Card 152: 82 62 80 30 37 68 41 89 12 5 | 60 32 64 57 41 74 89 16 72 20 26 6 91 18 52 68 62 55 5 30 82 1 37 80 12
Card 153: 97 28 55 92 70 83 58 44 67 40 | 24 58 55 88 92 40 6 83 12 70 10 22 44 76 82 97 4 98 65 28 5 32 7 67 74
Card 154: 31 50 70 87 43 26 55 30 14 54 | 43 72 90 20 10 13 91 54 75 39 26 70 17 87 22 60 29 1 27 69 14 31 50 67 55
Card 155: 21 4 25 52 3 16 98 43 72 81 | 87 4 21 43 90 67 39 36 13 64 6 25 29 16 83 84 5 98 9 81 78 1 74 12 96
Card 156: 77 46 21 67 59 78 63 30 45 48 | 48 35 17 62 44 25 34 67 23 13 63 81 99 29 93 84 73 96 86 90 88 30 60 85 21
Card 157: 43 32 99 39 58 3 38 81 79 41 | 79 41 34 8 99 80 70 43 51 38 29 68 32 83 58 2 6 36 63 95 81 67 3 28 10
Card 158: 43 68 57 98 30 58 47 40 12 93 | 91 62 48 6 52 16 72 34 28 85 81 94 26 4 99 30 71 44 80 65 40 60 58 18 49
Card 159: 62 30 18 57 61 68 65 98 10 56 | 98 32 29 1 15 77 55 10 13 30 80 93 38 86 70 99 97 19 85 33 17 21 48 47 89
Card 160: 30 47 79 28 57 77 73 75 35 40 | 98 25 96 11 15 34 19 35 6 38 1 91 29 57 61 22 69 12 40 21 41 17 27 39 56
Card 161: 62 58 10 14 73 95 77 97 47 70 | 15 46 1 36 3 66 27 77 49 45 94 65 23 61 76 8 91 42 82 13 85 67 92 68 53
Card 162: 47 24 44 73 3 10 30 98 5 29 | 75 99 37 41 60 43 13 67 74 23 82 40 35 64 77 25 4 9 58 56 8 7 85 70 66
Card 163: 10 17 99 41 6 14 81 23 5 84 | 95 11 99 62 53 23 8 73 48 42 96 47 39 94 56 30 58 63 22 66 33 26 35 5 43
Card 164: 71 32 31 15 73 3 70 91 61 18 | 3 16 77 70 33 94 62 40 88 32 90 98 66 49 86 68 95 7 53 97 96 28 4 75 35
Card 165: 61 74 1 76 17 22 19 83 5 96 | 83 5 47 29 52 40 94 32 70 95 67 84 56 31 18 62 42 9 53 36 57 48 64 15 85
Card 166: 84 96 57 6 48 13 42 12 19 99 | 67 29 25 81 77 69 63 56 8 27 80 62 94 30 78 10 45 49 20 95 50 66 61 6 24
Card 167: 21 41 29 39 24 98 68 40 7 78 | 44 19 53 13 17 4 2 64 87 60 1 51 10 35 94 52 25 75 92 95 80 67 82 42 86
Card 168: 18 72 92 63 3 38 82 65 85 61 | 53 14 92 63 74 75 97 56 85 82 30 4 42 34 18 61 72 65 20 47 43 3 38 39 40
Card 169: 98 91 13 27 52 51 36 82 80 78 | 78 42 51 62 36 38 4 95 82 17 91 27 12 98 76 13 84 52 80 32 39 50 48 19 2
Card 170: 94 67 3 32 73 84 11 47 23 90 | 94 84 66 73 32 31 23 18 93 29 58 81 95 16 46 53 89 4 11 44 49 67 90 82 40
Card 171: 2 55 5 19 59 73 29 65 12 23 | 33 75 5 53 90 95 68 73 29 71 11 45 72 54 59 12 55 85 56 19 17 24 8 92 2
Card 172: 74 43 65 15 59 37 11 83 20 85 | 59 30 36 97 78 65 88 20 96 11 51 22 93 63 94 28 3 90 68 95 73 43 13 74 85
Card 173: 53 46 64 33 65 55 8 81 1 36 | 12 22 78 35 57 96 36 3 27 29 52 80 2 79 8 76 93 54 1 24 48 32 94 14 64
Card 174: 20 38 12 24 28 39 18 59 75 94 | 95 48 91 36 56 63 62 46 67 4 32 97 39 66 93 55 50 34 5 85 29 76 45 54 7
Card 175: 26 96 12 74 65 57 51 18 83 75 | 26 89 74 83 65 12 58 88 92 22 8 39 18 51 34 96 75 44 94 35 30 90 69 57 23
Card 176: 48 64 15 96 42 33 88 27 50 86 | 36 85 60 68 93 63 33 17 28 70 24 50 96 38 54 53 72 90 41 86 74 88 75 64 48
Card 177: 66 27 35 76 89 90 31 26 20 95 | 51 94 62 77 31 5 16 20 30 86 75 42 23 11 69 24 87 76 27 60 80 46 43 57 90
Card 178: 83 38 10 89 18 80 1 67 63 7 | 37 28 46 84 94 89 38 21 24 68 25 92 60 34 58 54 76 55 11 19 85 33 93 15 8
Card 179: 59 82 88 8 21 16 55 2 56 45 | 2 26 73 81 90 5 13 55 21 82 69 8 22 99 36 68 53 88 86 56 16 7 45 87 28
Card 180: 95 5 4 34 30 73 98 89 6 37 | 7 28 72 6 95 37 68 4 34 98 82 73 84 8 65 5 89 57 15 42 56 45 69 11 74
Card 181: 85 69 79 50 37 34 11 84 5 89 | 4 35 99 48 21 97 93 25 8 37 47 79 34 16 76 26 55 67 50 75 63 15 58 84 5
Card 182: 70 10 57 74 60 93 9 41 79 32 | 19 18 96 8 49 2 50 94 93 4 23 89 11 39 38 97 58 56 82 21 13 28 65 47 29
Card 183: 53 70 11 25 1 37 32 4 78 45 | 23 54 83 35 11 41 1 47 18 60 36 71 10 64 95 49 69 32 45 46 61 9 4 52 25
Card 184: 71 31 19 43 12 93 30 56 17 27 | 61 20 92 50 33 17 51 89 45 24 39 64 23 18 52 2 41 46 63 84 88 7 99 27 78
Card 185: 44 55 78 43 18 33 69 81 82 9 | 39 57 42 79 76 67 58 1 26 63 54 82 70 22 66 55 15 38 74 96 46 53 51 28 99
Card 186: 25 76 9 33 59 42 82 6 79 4 | 10 50 20 18 93 95 62 40 22 70 48 16 75 15 49 81 64 94 6 21 73 80 78 77 83
Card 187: 43 33 83 89 36 31 86 22 13 14 | 3 78 63 34 8 38 23 16 81 80 54 1 95 92 60 24 82 49 44 68 62 46 66 97 28
Card 188: 81 6 49 46 11 77 99 82 84 51 | 36 45 18 87 48 35 86 7 83 31 38 61 92 98 70 78 74 59 63 66 15 85 47 96 1
Card 189: 50 43 3 38 20 80 40 70 82 74 | 29 55 1 2 45 97 59 49 60 79 88 90 94 57 12 24 47 61 5 52 95 75 63 48 32
Card 190: 22 66 97 81 70 24 53 76 17 35 | 92 59 1 36 97 70 34 77 69 55 17 81 62 67 71 91 58 24 76 87 45 30 33 35 22
Card 191: 20 65 9 10 98 71 60 83 51 34 | 68 51 10 26 20 4 56 24 34 9 65 83 60 55 5 27 8 43 71 98 14 21 32 48 64
Card 192: 92 77 16 8 1 87 51 14 89 76 | 13 10 60 19 93 97 16 11 51 47 76 30 91 24 14 89 77 35 8 28 87 21 92 1 22
Card 193: 53 24 36 45 60 18 35 25 12 28 | 98 29 92 35 52 99 12 45 74 18 28 30 70 68 55 24 25 77 81 36 72 20 53 50 60
Card 194: 50 83 40 8 87 28 79 27 44 91 | 37 80 88 17 90 40 67 87 20 76 77 52 68 1 55 35 14 61 4 96 75 83 10 71 8
Card 195: 6 41 29 40 96 49 9 55 51 18 | 69 30 77 83 47 52 59 55 70 10 92 19 85 11 86 42 53 38 35 90 51 46 80 91 84
Card 196: 92 29 86 97 9 30 87 6 15 4 | 18 46 50 63 30 14 6 82 3 53 55 26 29 86 85 70 4 89 90 24 10 35 27 9 20
Card 197: 80 1 81 94 98 75 58 9 19 10 | 26 37 57 58 22 1 19 94 10 87 70 5 95 40 53 81 89 93 8 80 86 9 36 75 98
Card 198: 29 41 51 44 7 84 65 62 20 74 | 74 5 72 62 41 88 23 49 66 97 31 84 18 51 20 10 29 19 44 7 1 60 40 78 30
Card 199: 20 2 3 95 63 60 10 81 87 90 | 60 54 3 61 38 77 42 32 62 82 90 35 9 81 2 20 87 63 8 65 95 19 30 10 85
Card 200: 80 76 17 57 36 9 70 65 1 13 | 88 50 96 87 77 36 14 70 86 29 68 90 93 3 25 65 74 83 78 62 9 69 47 22 8
Card 201: 19 43 79 93 31 72 66 7 18 55 | 72 20 71 43 57 19 53 83 47 35 37 67 13 31 74 81 76 18 44 55 93 97 26 84 11
Card 202: 26 65 71 57 14 86 49 66 1 23 | 27 41 16 51 82 72 13 55 14 21 69 62 15 46 63 78 22 31 30 57 76 45 3 71 86
Card 203: 53 43 69 4 76 74 73 11 34 88 | 46 68 63 19 55 64 88 51 33 15 17 57 53 42 76 66 80 34 11 69 73 96 59 74 16
Card 204: 9 6 64 82 79 1 73 68 39 57 | 92 82 49 53 84 4 69 20 30 13 16 1 26 76 60 57 91 65 24 12 34 56 33 38 59
Card 205: 45 6 76 94 78 35 95 20 85 90 | 89 94 28 15 48 87 56 32 40 88 21 33 51 53 54 67 64 9 17 78 6 57 12 98 95
Card 206: 32 94 53 98 84 82 48 45 8 25 | 84 4 25 97 12 93 35 60 42 80 61 62 18 8 32 17 94 23 63 53 31 3 48 43 20
Card 207: 40 18 52 70 55 29 49 43 15 20 | 38 39 78 70 35 81 34 29 51 55 17 43 52 64 16 21 69 27 47 88 2 99 18 54 3
Card 208: 9 67 74 14 59 41 84 60 73 86 | 87 16 27 86 50 7 30 77 64 76 73 71 99 92 23 82 2 5 55 57 40 47 45 72 21
Card 209: 45 50 11 39 28 93 77 92 41 18 | 32 6 56 34 15 87 48 64 41 30 3 46 42 21 44 72 59 29 25 77 83 66 5 12 11
Card 210: 34 74 60 33 14 25 27 98 54 75 | 90 79 69 27 70 4 40 93 66 62 65 3 8 42 34 92 53 98 56 89 57 13 52 38 30
Card 211: 20 21 98 93 33 65 13 48 81 53 | 19 82 78 95 77 54 89 61 58 74 39 43 1 64 73 11 72 7 32 9 17 46 8 84 86
Card 212: 46 82 24 14 63 38 94 70 79 91 | 23 83 87 4 48 81 40 13 84 68 22 65 45 11 88 75 98 1 15 56 64 44 35 7 3
Card 213: 79 84 12 86 58 10 11 24 32 26 | 52 94 65 29 89 7 76 80 31 21 78 37 66 69 13 41 93 73 96 16 92 44 62 3 95

33
2023/day05/example.txt Normal file
View File

@ -0,0 +1,33 @@
seeds: 79 14 55 13
seed-to-soil map:
50 98 2
52 50 48
soil-to-fertilizer map:
0 15 37
37 52 2
39 0 15
fertilizer-to-water map:
49 53 8
0 11 42
42 0 7
57 7 4
water-to-light map:
88 18 7
18 25 70
light-to-temperature map:
45 77 23
81 45 19
68 64 13
temperature-to-humidity map:
0 69 1
1 0 69
humidity-to-location map:
60 56 37
56 93 4

82
2023/day05/index.js Normal file
View File

@ -0,0 +1,82 @@
import fs from 'node:fs'
function init() {
const data = fs.readFileSync('example.txt', { encoding: "utf-8" }, data => data)
const blocks = data.split('\n\n')
const garden = new Garden()
garden.seeds = [...blocks[0].split(': ')[1].split(' ')]
for (let i = 1; i < blocks.length; i++) {
//console.log(blocks[i].split('\n')[0])
const map = blocks[i].split('\n').slice(1).map(items => {
let ranges = items.split(' ')
return { dest: Number(ranges[0]), srcStart: Number(ranges[1]), srcEnd: (Number(ranges[1]) + Number(ranges[2]) - 1) }
})
garden.maps.push(map)
}
garden.runtwo()
}
class Garden {
constructor() {
this.seeds = []
this.maps = []
this.i = 0
this.cache = new Map()
}
transform(value, map) {
if (map) {
return {
dest: map.dest + (value - map.srcStart),
srcStart: map.srcStart,
srcEnd: map.srcEnd
}
}
return {
dest: value,
srcStart: value,
srcEnd: value
}
}
findDestination(src, iterator) {
let cache = `${src}-${iterator}`
if (iterator >= this.maps.length) return src
if (this.cache.has(cache)) {
console.log(`cached value for ${cache}`)
return this.cache.get(cache)
}
let possible_destinations = this.maps[iterator]
.filter(map => src >= map.srcStart && src <= map.srcEnd)
.map(map => this.transform(src, map))
if (possible_destinations.length < 1)
possible_destinations = [this.transform(src)]
let value = possible_destinations.reduce((current, next) => this.findDestination(parseInt(next.dest), iterator + 1), 1)
this.cache.set(cache, value)
return value
}
run() {
let locations = this.seeds.map(seed => this.findDestination(seed, this.i))
console.log(Math.min.apply(null, locations))
}
runtwo() {
let newSeedArray = []
console.log(this.seeds)
for (let i = 0; i < this.seeds.length; i = i + 2) {
console.log(`pushing ${this.seeds[i]}`)
for (let seed = parseInt(this.seeds[i]); seed <= parseInt(this.seeds[i + 1]); seed++) {
console.log(`pushing ${seed}`)
newSeedArray.push(seed)
}
}
console.log(newSeedArray.length)
let locations = newSeedArray.map(seed => this.findDestination(seed, this.i))
console.log(Math.min.apply(null, locations))
}
}
init()

279
2023/day05/input.txt Normal file
View File

@ -0,0 +1,279 @@
seeds: 768975 36881621 56868281 55386784 1828225758 1084205557 2956956868 127170752 1117192172 332560644 357791695 129980646 819363529 9145257 993170544 70644734 3213715789 312116873 3107544690 59359615
seed-to-soil map:
2797638787 1764015146 26675178
3378130613 0 34101494
388521182 772535426 141493697
1148410839 174832460 323494173
4259440029 4076987921 35527267
1664835130 2610603190 214355271
530014879 1680432282 83582864
1471905012 758583825 13951601
3909335908 4187323696 107643600
3834527400 4173068203 14255493
2824313965 136499996 38332464
191321127 498326633 7266716
1562436628 34101494 102398502
3224943851 3320680296 153186762
4058150677 3747050674 42920787
2360258758 2578478063 32125127
1485856613 682003810 76580015
613597743 1875739628 457683244
4016979508 3789971461 35854425
3412232107 562825709 61634951
4101071464 3825825886 158368565
3848782893 4112515188 60553015
3119382417 1629353314 51078968
1879190401 1555705358 58037106
2169686033 2387905338 190572725
2900098047 914029123 217063885
1071280987 2824958461 77129852
3770924949 3984194451 63602451
2449927035 2902088313 205430088
2740406427 505593349 57232360
198587843 1365772019 189933339
0 3107518401 191321127
3741733930 4047796902 29191019
2655357123 1790690324 85049304
1937227507 1133313493 232458526
2392383885 624460660 57543150
2862646429 3298839528 8221502
3170461385 2333422872 54482466
3117161932 1131093008 2220485
2870867931 3307061030 13619266
2884487197 1613742464 15610850
4052833933 3741733930 5316744
soil-to-fertilizer map:
4028970075 3670916442 62323047
2369466456 2039626615 114411480
1849958430 857955699 318236064
3393877313 4090328901 50115157
2483877936 2154038095 163115765
1589335864 2448679033 50786994
378911477 2812908636 641955
1562596120 1971627164 26739744
2168194494 224261755 114905540
2837233268 2508892349 45204280
3094415439 2813550591 72281454
3166696893 1619734477 89254096
0 2317153860 40391789
1131679423 1771284034 40991112
1765319835 1708988573 9045883
1365410346 1420078500 197185774
2305946785 794436028 63519671
2882437548 2691241517 119296423
3001733971 3046337498 45651876
3643083526 3393877313 47307752
379553432 1812275146 28890919
1172670535 1206862634 190369115
2807083959 1741134725 30149309
2694347611 467149827 112736348
2646993701 579886175 47353910
4091293122 3733239489 203674174
1763025041 1718034456 2294794
40391789 1998366908 41259707
808535136 1176191763 22037784
799902049 1198229547 8633087
632706106 627240085 167195943
3598515708 3936913663 44567818
408444351 0 224261755
3799238698 3441185065 229731377
3443992470 4140444058 154523238
376441274 1617264274 2470203
1795171193 339167295 54787237
830572920 3091989374 301106503
81651496 1841166065 130461099
212112595 393954532 73195295
3255950989 2554096629 137144888
3690391278 3981481481 108847420
1363039650 2810537940 2370696
3047385847 2499466027 9426322
285307890 2357545649 91133384
2283100034 1397231749 22846751
1640122858 2923435315 122902183
3056812169 2885832045 37603270
1774365718 1720329250 20805475
fertilizer-to-water map:
4242763083 2459563591 52204213
2506579022 1704611330 53532973
268946243 855055502 34908994
1704611330 3860653042 434314254
2640952334 3547869528 81626644
1436013703 728008388 21784904
0 680695205 47313183
140858905 749793292 69300705
686187385 489152830 141379201
3612022528 2522034035 498682726
827566586 959642930 428042082
260322784 12467526 8623459
2435545592 3789619612 71033430
47313183 1387685012 93545722
303855237 21090985 382332148
2425279361 2511767804 10266231
2947118206 2257396248 202167343
1457798607 403423133 23432127
2138925584 1890202132 286353777
1366335269 889964496 69678434
1255608668 819093997 35961505
210159610 630532031 50163174
1291570173 0 12467526
2560111995 2176555909 80840339
3419426199 3416054902 131814626
3149285549 3159639578 110017210
2868977092 3081498464 78141114
4110705254 1758144303 132057829
3551240825 3020716761 60781703
2722578978 3269656788 146398114
3259302759 3629496172 160123440
1304037699 426855260 62297570
water-to-light map:
1712728062 165708071 30118229
994660402 322543075 139832356
2666749758 3184731531 182834316
3535613929 2585377632 130318231
1589771501 643255284 6486180
3665932160 773195884 193821728
2655704544 2479239619 11045214
2970686930 195826300 21859186
1596257681 2345480344 116470381
2648218599 765709939 7485945
267433833 0 38915982
701913980 2301280038 4624639
2130796669 1543842466 272797567
57533669 1275520329 209900164
1756207753 3442698892 374588916
3859753888 2305904677 39575667
1134492758 2809419770 26839161
309521113 217685486 8494012
433983600 1485420493 20638459
1742846291 522451528 13361462
1161331919 2715695863 90552609
1251884528 967017612 308502717
3052622213 2490284833 95092799
454622059 2461950725 17288894
2472852656 535812990 24122952
318015125 649741464 115968475
2496975608 3367565847 75133045
553952700 3070057156 114674375
668627075 1959120081 31105212
2992546116 462375431 60076097
3147715012 299507329 20253631
2574890768 226179498 73327831
0 108174402 57533669
306349815 2806248472 3171298
2887367588 559935942 83319342
760862177 2836258931 233798225
1560387245 1990225293 29384256
3167968643 1816640033 140298355
2572108653 319760960 2782115
4260952033 4113795026 34015263
2849584074 1506058952 37783514
2403594236 38915982 69258420
706538619 2246956480 54323558
4113795026 4147810289 147157007
3308266998 2019609549 227346931
471910953 3817287808 82041747
699732287 1956938388 2181693
light-to-temperature map:
1642970452 2619648642 320925092
871949201 797630676 97655745
655931949 2008010966 216017252
3785141775 4061613243 12865567
4215077801 4197959319 79889495
2563411697 1252642831 573187176
1254390764 4601171 388579688
0 1980893220 27117746
3136598873 895286421 241010052
3798007342 3785141775 276471468
467378984 1136296473 116346358
62929167 393180859 404449817
583725342 2257865135 72206607
58327996 0 4601171
1220553847 2224028218 33836917
1065490634 1825830007 155063213
2157586756 2971783984 405824941
1963895544 2330071742 193691212
4197959319 4277848814 17118482
969604946 2523762954 95885688
27117746 2940573734 31210250
temperature-to-humidity map:
3204530368 2689103462 122673126
1097831066 741139709 15277662
2587190266 2506197062 28166734
2972900803 2149468273 231629565
2754733708 3879909767 93747273
1118529763 1007376005 639297716
591529103 1795771252 224967444
1113108728 305315251 5421035
2266839735 3973657040 65644628
3425464071 2534363796 64415445
2332484363 2811776588 254705903
3353763689 3525362348 71700382
411622859 756417371 179906244
2629634484 2381097838 125099224
0 1646673721 149097531
1912202739 439529310 384078
1828879869 221992381 83322870
1038488928 310736286 59342138
2149468273 3597062730 22900616
3731081879 3337447905 173636959
2172368889 2598779241 90324221
218548417 439913388 193074442
3489879516 4053764933 212174931
3327203494 3090464996 12096930
149097531 370078424 69450886
2615357000 3511084864 14277484
4064227942 3102561926 230739354
3702054447 4265939864 29027432
838437176 21940629 200051752
3339300424 4039301668 14463265
2262693110 3333301280 4146625
3904718838 3619963346 159509104
2948918298 3066482491 23982505
1757827479 936323615 71052390
1912586817 632987830 108151879
2848480981 3779472450 100437317
816496547 0 21940629
humidity-to-location map:
3394148556 2925849667 56813934
4223178672 3844939961 29088809
3743018622 3753904164 91035797
6295169 0 111018407
3175071902 3531111280 47991613
4252267481 2883149852 42699815
129982843 693964199 99494334
229477177 272742930 300412252
798562242 793458533 315959887
1114522129 680103472 13860727
3223063515 3050521430 171085041
1574260097 2117833331 253788822
691613952 573155182 106948290
2250567596 1223353243 43558595
2851928754 4027938301 267028995
3887810914 1266911838 1671681
3725220028 3431759743 17798594
1828048919 3449558337 77343652
2479857123 3329899124 101860619
3889482595 3526901989 4209291
3604872021 2982663601 7751828
3834054419 2371622153 53756495
1905392571 2537974827 345175025
2581717742 1324697672 270211012
1145914964 1689488198 428345133
2294126191 3221606471 108292653
3612623849 2425378648 112596179
117313576 1109418420 12669267
4163072671 2990415429 60106001
3893691886 1594908684 94579514
0 1122087687 6295169
3450962490 3874028770 153909531
2402418844 1145914964 77438279
3988271400 3579102893 174801271
3118957749 1268583519 56114153
529889429 111018407 161724523

5
2023/day07/example.txt Normal file
View File

@ -0,0 +1,5 @@
32T3K 765
T55J5 684
KK677 28
KTJJT 220
QQQJA 483

155
2023/day07/index.js Normal file
View File

@ -0,0 +1,155 @@
import fs from 'node:fs'
/* https://adventofcode.com/2023/day/7
Camel Cards
32T3K 765
T55J5 684
KK677 28
KTJJT 220
QQQJA 483
33332 100
2AAAA 100
77888 100
77788 100
*/
function init() {
const data = fs.readFileSync('input.txt', { encoding: 'utf-8' }, data => data)
const games = data.split('\n')
const poker = new Poker()
for (let game of games) {
poker.hand = game.split(' ')[0].split('')
poker.bid = parseInt(game.split(' ')[1])
poker.jokerrule = true
poker.play()
}
poker.score()
}
class Poker {
constructor(hand, bid) {
this.hand = []
this.ranking = []
this.bid = 0
this.results = 0
this.jokerrule = true
this.order = [
{ name: 'A', value: 14 },
{ name: 'K', value: 13 },
{ name: 'Q', value: 12 },
{ name: 'J', value: this.jokerrule ? 1 : 11 },
{ name: 'T', value: 10 },
{ name: '9', value: 9 }, { name: '8', value: 8 }, { name: '7', value: 7 }, { name: '6', value: 6 }, { name: '5', value: 5 }, { name: '4', value: 4 },
{ name: '3', value: 3 }, { name: '2', value: 2 }
]
}
getOccurences() {
let j = this.jokerrule ? this.hasJokers() : 0
return this.hand.reduce((acc, curr) => {
return acc[`${curr}`] ? ++acc[curr] : acc[`${curr}`] = j + 1, acc
}, new Object())
}
getValueOfCard(card) {
return this.order.find(c => c.name === card).value
}
isTwoPair() {
const result = this.getOccurences()
return Object.values(result)
.filter(numbers => numbers === 2)
.length === 2
}
isFullHouse() {
const result = this.getOccurences()
return Object.values(result).indexOf(3) > -1
&& Object.values(result).indexOf(2) > -1
}
hasMultiple(number) {
const result = this.getOccurences()
return Object.values(result).indexOf(number) > -1
}
hasJokers() {
const result = this.hand.reduce((acc, curr) => {
return acc[`${curr}`] ? ++acc[curr] : acc[`${curr}`] = 1, acc
}, new Object())
return result.hasOwnProperty('J') ? result.J : 0
}
testResults() {
return {
'FiveOfAKind': this.hasMultiple(5),
'FourOfAKind': this.hasMultiple(4),
'FullHouse': this.isFullHouse(),
'ThreeOfAKind': this.hasMultiple(3),
'TwoPair': this.isTwoPair(),
'OnePair': this.hasMultiple(2),
'HasJokers': this.hasJokers()
}
}
rank() {
const results = this.testResults()
let rank = 0
switch (true) {
case results.FiveOfAKind || results.HasJokers === 5:
rank = 7_000_000_000_000
break
case results.FourOfAKind:
rank = 6_000_000_000_000
break
case results.FullHouse:
rank = 5_000_000_000_000
break
case results.ThreeOfAKind:
rank = 4_000_000_000_000
break
case results.TwoPair:
rank = 3_000_000_000_000
break
case results.OnePair:
rank = 2_000_000_000_000
break
default:
rank = 1_000_000_000_000
break
}
return rank
}
score() {
const sorted_list = this.ranking.sort((a, b) => a.rank - b.rank)
for (let i = 0; i < sorted_list.length; i++) {
this.results += (i + 1) * sorted_list[i].bid
console.log(sorted_list[i])
}
console.log(this.results)
}
play() {
let rank = this.rank()
const cardValues = this.hand.map(card => this.getValueOfCard(card))
/*
This did only work on the input example.
Quirkier solution is to simply map card values to their string representation
with padded 0 and pass that to the ranking.
for (let i = 0; i < cardValues.length; i++) {
let cardValue = cardValues[i]
rank += cardValue * (cardValues.length - i) * 10 ** (cardValues.length - i)
}
*/
let stringValues = cardValues.map(value => String(value).padStart(2, 0))
rank += parseInt(stringValues.join(""))
this.ranking.push({ rank: rank, bid: this.bid, cards: this.hand.join(""), jokers: this.hasJokers() })
}
rankPosition(position, iterator) {
return (position - iterator) * 10 ** position
}
}
init()

1000
2023/day07/input.txt Normal file

File diff suppressed because it is too large Load Diff

10
2023/day08/example.txt Normal file
View File

@ -0,0 +1,10 @@
LR
11A = (11B, XXX)
11B = (XXX, 11Z)
11Z = (11B, XXX)
22A = (22B, XXX)
22B = (22C, 22C)
22C = (22Z, 22Z)
22Z = (22B, 22B)
XXX = (XXX, XXX)

95
2023/day08/index.js Normal file
View File

@ -0,0 +1,95 @@
import fs from 'node:fs'
function init(filename) {
const data = fs.readFileSync(filename, { encoding: 'utf-8' }, data => data)
const desertmap = new DesertMap(
data.split('\n\n')[0].split(''),
data.split('\n\n')[1]
)
desertmap.navigate_ghosts()
}
class DesertMap {
instructions = []
map = ""
#route = []
constructor(instructions, map) {
this.instructions = instructions
this.map = map
this.#route = []
this.steps = 0
}
setup() {
const matches = [...this.map.matchAll(/(\w+) = \((\w+), (\w+)\)/gm)]
matches.forEach(match => {
this.#route.push({ from: match[1], L: match[2], R: match[3] })
})
}
run(towards, from) {
if (!this.steps && !from) {
return this.#route.find(route => route.from === 'AAA')[towards]
}
return this.#route.find(route => route.from === from)[towards]
}
navigate_brute() {
this.setup()
let i = 0
let start = this.#route.filter(route => route.from[2] === 'A')
.map(route => route.from)
while (i < this.instructions.length | true) {
start = start.map(route => this.run(this.instructions[i], route))
++this.steps
if (start.filter(route => route[2] === 'Z').length === start.length) {
console.log(this.steps)
return true
}
i = this.instructions.length - i === 1 ? 0 : i + 1
}
console.log(this.steps + 1)
}
lcm(numbers) {
function gcd(a, b) {
if (b === 0) {
return a;
}
return gcd(b, a % b);
}
return numbers.reduce((a, b) => a * b / gcd(a, b));
}
navigate_ghosts() {
this.setup()
let routes = this.#route.filter(route => route.from[2] === 'A')
.map(route => route.from)
let results = routes.map(route => {
let i = 0
let steps = 0
while (i < this.instructions.length | true) {
route = this.run(this.instructions[i], route)
++steps
if (route[2] === 'Z') { return steps }
i = this.instructions.length - i === 1 ? 0 : i + 1
}
})
console.log(`LCM of ${results.join(", ")}`)
console.log(this.lcm(results))
}
navigate() {
this.setup()
let i = 0
while (i < this.instructions.length | true) {
let from = this.run(this.instructions[i], from)
++this.steps
console.log(i, from, this.steps)
if (from === 'ZZZ') { return false }
i = this.instructions.length - i === 1 ? 0 : i + 1
}
console.log(this.steps)
}
}
init('input.txt')

716
2023/day08/input.txt Normal file
View File

@ -0,0 +1,716 @@
LRLRLRRLRRLRLRRRLRRLRLRRLLLRRRLRRRLLRRLRRRLRRRLRRLRRLRRRLRRLRLRLRRRLRRLRRLLRRRLLRLRRRLRRRLRRLRRRLRRLLRLLRRRLRRLRLRRRLRLRLRRRLLRLRRLLRRRLRRRLRLRRLLRRLRLRRLRRRLRLLRRRLRRRLLRLLRLLRRRLRLRLRLRLRRLRRLRLRRRLLLRLLRRRLRRLLRLRLRRRLLRLRRRLLRRLRRLRLRLRLRRLRRLRRRLRRRLRRLRRLRRRLRLRRRLRLRRRR
FTD = (QRN, JJC)
LMR = (KND, NTK)
XMV = (RGS, CGP)
KSC = (TGM, CPQ)
MTP = (BBX, TVN)
MSR = (GGL, GGL)
LGX = (DTT, PKP)
NLV = (DDK, MCH)
KSF = (DQS, CTM)
BFB = (JQD, CMG)
TGH = (FVM, TNT)
SJG = (XVB, LKD)
XTK = (XHD, JTP)
XVK = (RBH, JGS)
RFS = (FPG, LTD)
QTQ = (QMH, QDB)
LHS = (CRH, RRQ)
RJP = (HSR, TBP)
CKS = (XCC, XCC)
HGP = (VKR, GSB)
GNM = (GSM, KJL)
JRN = (MGQ, VLL)
BBG = (QPL, KKN)
RNV = (DTC, RCP)
PJJ = (CDX, THL)
KNF = (GXG, DCN)
XNL = (QKC, FBF)
QJS = (SSK, GNR)
TNH = (HDQ, KVK)
CXT = (SVL, DQN)
NKV = (RPS, KPG)
NPQ = (TTT, TRL)
TVX = (HQV, MXC)
PCB = (PRX, KCT)
JND = (KKS, DNF)
MKB = (TQC, HCQ)
JXH = (XLF, TVX)
KPG = (CCC, HHJ)
PRN = (RVT, CSS)
TLQ = (KNF, JHM)
SJV = (SGS, TBH)
DLM = (JQH, DKV)
JHS = (JKJ, SVT)
XLG = (HVD, JND)
CPV = (DDS, RGG)
TTP = (PSS, MDJ)
LPC = (QSP, SDT)
BPJ = (GGK, NSN)
FPL = (KKL, LPS)
TNC = (XXB, GQP)
PRQ = (SVN, HDB)
KKN = (LCV, MGD)
QNM = (RLJ, NHT)
GMB = (CHK, VLS)
KFG = (RKJ, DMR)
FML = (HCJ, BDS)
DRJ = (BSF, BDF)
FBB = (DLR, FQN)
VFQ = (THC, MHG)
PFF = (TNT, FVM)
LVV = (VLG, DHP)
CCC = (MSL, KJP)
HMS = (FMQ, KBV)
FND = (TNH, CCL)
GHK = (JFS, TQP)
TRJ = (SSN, KSC)
XKR = (BMX, DLS)
TKQ = (DSB, LFF)
HBX = (HQD, XJF)
RCF = (MVK, BPC)
MFR = (NDL, XBG)
FDF = (HFR, JSB)
DBH = (XLQ, DRJ)
BCP = (XGX, GMR)
CNX = (BFB, XBS)
PTQ = (XNN, BMK)
HJS = (CCL, TNH)
NQH = (HPR, DTN)
RTL = (FVG, SHS)
CDV = (XHD, JTP)
XNN = (KFG, NFQ)
RPS = (CCC, HHJ)
TVN = (SXH, HMK)
CBN = (PKP, DTT)
DCN = (RCF, BQC)
SBD = (XMV, SSF)
THV = (DLC, RHV)
SXG = (LMJ, SBD)
JVK = (VKS, BHS)
XTV = (PSC, HXN)
BJN = (LSJ, NSX)
HQV = (FSR, RNV)
SSK = (JNG, BBG)
FRJ = (CNX, CTF)
VNH = (HJS, FND)
QGT = (VKS, BHS)
VRH = (HJS, FND)
PBD = (PRN, HLR)
DNJ = (SXG, QCF)
PRX = (JBS, JSH)
GCV = (BVC, TXS)
GQP = (DMX, CDS)
MHG = (DNR, BVH)
BSN = (BDS, HCJ)
BKQ = (RQB, RQB)
LRT = (DPT, KSF)
VTL = (XRF, VCB)
DQN = (CSP, XBF)
LXN = (CNC, MDL)
XVQ = (NLJ, SBJ)
VBQ = (MDM, BTC)
HTB = (KGJ, KQK)
NKJ = (LTM, MNJ)
CBT = (KSC, SSN)
HKL = (JBC, NQN)
TGN = (VXR, JQG)
MDJ = (GTC, NJF)
CGP = (QRH, SJB)
LLV = (RBH, JGS)
DPT = (DQS, CTM)
NNJ = (TVX, XLF)
XHD = (XNL, VGB)
NVF = (TKL, HXJ)
SGS = (SNP, CKJ)
RCP = (GGF, NCK)
VXR = (XJV, VXX)
VRQ = (QKH, DHT)
KKS = (PTH, LXJ)
KJT = (TNC, HVV)
LMP = (VLG, VLG)
TKL = (KMV, XPB)
CVC = (VVD, PRQ)
SKB = (RTL, DRK)
GSM = (XKK, JPX)
LKD = (NDB, XQN)
HRQ = (PRQ, VVD)
LKH = (THL, CDX)
PXL = (TLV, FRX)
HXJ = (XPB, KMV)
DTC = (GGF, NCK)
DNK = (FBS, FRP)
BSB = (HML, BGT)
VHM = (CRH, RRQ)
VCR = (FML, BSN)
LQB = (GGN, GSS)
SJL = (QSP, SDT)
HBN = (QRJ, LXR)
BTD = (CSX, FRQ)
QPP = (KNP, VRQ)
LDD = (BVC, TXS)
KDV = (VRG, TDF)
MSM = (NVJ, SJG)
KGX = (BBV, SPB)
HDP = (HKC, RFB)
CNR = (DTF, CBL)
DDK = (NBR, SRM)
XBF = (DGL, FSC)
HDB = (FKJ, BPD)
FVM = (XDM, QMF)
SCX = (KKL, LPS)
XHR = (FML, BSN)
VTB = (GPN, HDP)
DJC = (FJP, TQJ)
PTH = (KXV, KJK)
DPG = (SNG, BPJ)
KLT = (PBD, LSG)
BDN = (FBR, HBN)
DPF = (BNM, JVM)
JHM = (DCN, GXG)
TBP = (PLR, DXS)
RGS = (QRH, SJB)
RMA = (HDD, CMP)
MQZ = (JQM, VVG)
XGX = (QTQ, LLX)
KJX = (JND, HVD)
RXM = (SKB, HSG)
LCG = (VGL, LDT)
VDK = (JKH, FTD)
HRB = (GPN, HDP)
ZZZ = (LTD, FPG)
VGG = (CML, JQS)
FRX = (FSP, VBQ)
JTP = (VGB, XNL)
DHT = (KJT, PLS)
CCL = (KVK, HDQ)
BBC = (DLS, BMX)
CTJ = (KCQ, LNP)
PHJ = (DQP, TLQ)
SVL = (XBF, CSP)
NXA = (RVD, QNM)
NSQ = (PDC, DKQ)
SVK = (MVS, HTG)
BVH = (NQH, VHL)
DLX = (KBR, VPV)
SCD = (RHV, DLC)
DRK = (FVG, SHS)
BDS = (MCL, FLR)
PNX = (SPB, BBV)
QMC = (TLP, GJX)
XKB = (BPM, SQD)
PSS = (GTC, NJF)
VXK = (GCG, DRD)
MFC = (PFF, TGH)
RMB = (NDK, PMJ)
RGG = (CGV, XVQ)
JNC = (BHK, BFQ)
BCB = (VLL, MGQ)
BCR = (HTB, TLT)
RHG = (MKB, XTQ)
XXR = (GMB, QRX)
XJF = (JNC, QBK)
PLR = (TTG, TTG)
RDQ = (QLV, LKR)
QQK = (LQB, JDB)
VCB = (NVF, GLR)
RPP = (JGM, PSX)
KBV = (BTB, VHG)
QPM = (RNB, GBC)
CSS = (QLH, BTR)
GBC = (VKX, NSQ)
JJJ = (SHQ, PMS)
CDJ = (HQK, BKR)
THL = (HDM, RHG)
FGK = (QPM, JSC)
HDQ = (CBT, TRJ)
TLP = (STK, NPL)
GKV = (VKR, GSB)
CNC = (BSB, TNB)
QSP = (NGF, HXM)
PRV = (HDD, CMP)
SQD = (BJN, MDQ)
DKQ = (PBX, XTV)
MXK = (JFS, TQP)
TGM = (NPQ, PHS)
HBD = (LTM, MNJ)
BSF = (NCQ, KLT)
GXG = (BQC, RCF)
HKV = (JGM, JGM)
QHK = (FPL, SCX)
SXH = (SVS, MSM)
PLS = (HVV, TNC)
XJV = (VTB, HRB)
HQK = (VNH, VRH)
GGL = (RPG, RPG)
RQB = (CKS, CKS)
NCQ = (LSG, PBD)
VPQ = (FRJ, BNT)
RVD = (RLJ, NHT)
HTG = (DGF, GCQ)
KMX = (LCH, SCG)
RMD = (JVK, QGT)
FKR = (RXM, MTN)
VNB = (KBR, VPV)
LSG = (PRN, HLR)
CTM = (BKQ, RJG)
TNB = (HML, BGT)
SRM = (HKV, RPP)
MSL = (XHR, VCR)
SQX = (SGL, NQV)
MGQ = (LPC, SJL)
GCG = (NJX, KSR)
HTX = (HBN, FBR)
NJX = (RGL, PND)
SGZ = (PNX, KGX)
XLF = (HQV, MXC)
HQG = (CKV, HKL)
BBV = (NXM, HMS)
QRJ = (GPS, LKK)
CKF = (XCC, SGZ)
HKC = (NNJ, JXH)
SHM = (NKV, TCS)
SVS = (NVJ, SJG)
SSR = (GGL, HVG)
NVJ = (XVB, LKD)
QGP = (QHK, FJH)
FRQ = (FBP, TKQ)
KMV = (CPV, SMX)
LSJ = (LCP, SRJ)
CSM = (HKN, DJC)
JRK = (BKR, HQK)
RNB = (VKX, NSQ)
FSR = (RCP, DTC)
DKN = (FNQ, TCT)
MVK = (XKR, BBC)
NDG = (DKN, NFN)
MVS = (DGF, GCQ)
GDA = (KGX, PNX)
DQP = (KNF, JHM)
XPB = (SMX, CPV)
VXX = (HRB, VTB)
JSC = (GBC, RNB)
VLS = (NDC, RTM)
JFS = (PVF, KJJ)
DBK = (LFN, CFJ)
MTN = (SKB, HSG)
SDK = (QQK, NSR)
GMR = (LLX, QTQ)
VBH = (FRJ, BNT)
GPN = (HKC, RFB)
FSC = (KDK, FDF)
TKM = (CXB, MTP)
VLG = (RFS, RFS)
RFB = (NNJ, JXH)
QHD = (QRX, GMB)
GSS = (VMV, DFT)
MCF = (QJS, TDX)
DTF = (VQR, LFP)
XHM = (CTG, TND)
JQH = (BCP, KSH)
SBM = (MTN, RXM)
KGJ = (SVK, SCT)
TDP = (MCD, CQG)
BNM = (RQS, JJJ)
LTD = (HBX, THT)
TQJ = (SJV, MXJ)
BPM = (BJN, MDQ)
THT = (XJF, HQD)
QMF = (XKB, GST)
HQD = (QBK, JNC)
NHS = (VXR, JQG)
THX = (TKM, TKM)
GST = (SQD, BPM)
QJD = (CKV, HKL)
VLL = (LPC, SJL)
KXD = (TND, CTG)
FBS = (KDV, NVM)
KVK = (TRJ, CBT)
QMH = (RMV, TTP)
RVJ = (KXQ, MCF)
HXN = (BMM, TGX)
LFF = (DPF, CBF)
KJL = (XKK, JPX)
QQM = (VHM, LHS)
LQQ = (LFV, GNM)
THC = (BVH, DNR)
QRX = (VLS, CHK)
NDK = (FKR, SBM)
FKJ = (LRT, PDN)
SJM = (XNN, BMK)
DRD = (KSR, NJX)
JBC = (XTK, CDV)
JPX = (NHH, PHJ)
SNG = (GGK, NSN)
RBN = (NFN, DKN)
MSH = (JQH, DKV)
RTM = (VGJ, SKL)
KNP = (QKH, DHT)
TDX = (GNR, SSK)
SCC = (LFV, GNM)
GKL = (GDM, KKR)
BPD = (LRT, PDN)
JFJ = (TGP, NLR)
VMV = (XPQ, TDP)
RBH = (QQM, HRD)
BNT = (CTF, CNX)
JSP = (NDK, PMJ)
FNV = (FTD, JKH)
HKN = (TQJ, FJP)
SGL = (DBH, XHC)
VVG = (MDT, PCB)
FVG = (PGF, LPD)
RMV = (MDJ, PSS)
TQP = (PVF, KJJ)
SKL = (VFX, CGD)
HDD = (TLG, QGP)
SBK = (NSR, QQK)
GJX = (NPL, STK)
PBX = (HXN, PSC)
KCJ = (CNR, NQM)
FJP = (MXJ, SJV)
NCR = (DNJ, BSR)
NFQ = (RKJ, DMR)
KSR = (PND, RGL)
LCH = (THX, THX)
DQX = (LHH, BHD)
NHT = (JRN, BCB)
SDT = (HXM, NGF)
CHK = (RTM, NDC)
LTM = (VSD, PXL)
KCT = (JBS, JSH)
CBF = (JVM, BNM)
GPS = (NCR, MHD)
VHZ = (MTP, CXB)
BBF = (NQM, CNR)
HMK = (MSM, SVS)
PHS = (TRL, TTT)
SNP = (FTN, KRS)
BHK = (NDG, RBN)
KJP = (VCR, XHR)
NLR = (DLM, MSH)
SXX = (GKT, KNX)
FLR = (GXF, XLR)
HCQ = (JJG, MSF)
JGM = (QDQ, QDQ)
TDF = (QHD, XXR)
BSR = (QCF, SXG)
HLR = (CSS, RVT)
XDM = (GST, XKB)
HHJ = (KJP, MSL)
NSN = (SBK, SDK)
RPG = (RVD, QNM)
JQS = (CNJ, QKP)
CNJ = (NMT, DNK)
VSD = (TLV, FRX)
XLR = (CRF, PTX)
HSG = (DRK, RTL)
FBR = (QRJ, LXR)
KXV = (JSP, RMB)
GVJ = (XRF, VCB)
VLB = (CNC, MDL)
DNR = (VHL, NQH)
TTT = (XVK, LLV)
LLX = (QMH, QDB)
RLJ = (JRN, BCB)
XBG = (PRV, FQZ)
NQN = (XTK, CDV)
LXJ = (KJK, KXV)
MQN = (BDN, HTX)
MBL = (GKT, KNX)
QRN = (VNB, DLX)
PFG = (VMR, QPP)
CDS = (MSR, SSR)
GKT = (MQN, LQF)
BBX = (HMK, SXH)
BMK = (KFG, NFQ)
HRD = (VHM, LHS)
VQR = (RMM, DBK)
JJC = (DLX, VNB)
HPR = (LJM, FGK)
PLM = (LCB, JFJ)
VHG = (CXT, FGG)
CQG = (MKM, MDV)
HDM = (MKB, XTQ)
CRF = (CVC, HRQ)
LFV = (GSM, KJL)
SCT = (MVS, HTG)
PSC = (TGX, BMM)
KRS = (LMP, LVV)
GNR = (JNG, BBG)
NCP = (JQS, CML)
KCQ = (FCS, RLD)
VGB = (QKC, FBF)
TND = (VCX, RDQ)
QKC = (LKH, PJJ)
QKP = (DNK, NMT)
NFN = (FNQ, TCT)
VPV = (DXG, KMX)
SHQ = (XKX, GKL)
RQS = (PMS, SHQ)
JBS = (SXX, MBL)
JJG = (QMC, VSV)
JQD = (VLC, PFG)
TCT = (JMX, VFQ)
VSV = (GJX, TLP)
MXC = (FSR, RNV)
JSS = (KFB, SHM)
DHP = (RFS, ZZZ)
CRH = (XPC, NLV)
SVN = (BPD, FKJ)
LKR = (FSX, BTD)
JNG = (KKN, QPL)
NGF = (XHM, KXD)
CPQ = (NPQ, PHS)
NVM = (TDF, VRG)
BMX = (CDJ, JRK)
TBH = (SNP, CKJ)
CMP = (TLG, QGP)
PMS = (GKL, XKX)
JGS = (HRD, QQM)
LCV = (GKV, HGP)
MHD = (DNJ, BSR)
DGF = (KCJ, BBF)
BQC = (MVK, BPC)
VGL = (VXK, BXP)
DLS = (JRK, CDJ)
FGG = (SVL, DQN)
NHH = (TLQ, DQP)
DSB = (DPF, CBF)
MSF = (VSV, QMC)
SSN = (CPQ, TGM)
PLA = (VVG, JQM)
RVT = (QLH, BTR)
PSX = (QDQ, MQZ)
SRJ = (FBB, RMK)
LQF = (BDN, HTX)
XPC = (DDK, MCH)
MCD = (MKM, MDV)
DBT = (VGL, LDT)
HFR = (QFT, VPJ)
CFJ = (SKH, LMR)
BGT = (PCH, DPG)
QLA = (CXB, MTP)
FSP = (MDM, BTC)
JJF = (MCF, KXQ)
NSR = (LQB, JDB)
KND = (VDK, FNV)
CKJ = (FTN, KRS)
QLH = (LGT, QPK)
TGP = (DLM, MSH)
HVG = (RPG, BBZ)
SKH = (NTK, KND)
DLC = (PLM, VNF)
HVD = (KKS, DNF)
FQN = (DXK, CSM)
DMR = (JSS, LGG)
LNP = (FCS, RLD)
QPL = (LCV, MGD)
RGL = (TMK, SQX)
RLD = (VTL, GVJ)
NCK = (RJP, MGN)
CDX = (RHG, HDM)
CTF = (BFB, XBS)
VKX = (DKQ, PDC)
FSX = (FRQ, CSX)
BTR = (QPK, LGT)
MGD = (HGP, GKV)
FNQ = (VFQ, JMX)
CGV = (NLJ, SBJ)
JVM = (JJJ, RQS)
QDB = (RMV, TTP)
GGN = (DFT, VMV)
QFT = (THV, SCD)
LFP = (DBK, RMM)
RHV = (PLM, VNF)
GGK = (SDK, SBK)
QRH = (JJF, RVJ)
TQC = (MSF, JJG)
KDK = (JSB, HFR)
VKS = (DQX, XHK)
FJH = (FPL, SCX)
RMK = (FQN, DLR)
STK = (VBH, VPQ)
TNT = (XDM, QMF)
SCG = (THX, RTK)
LGG = (SHM, KFB)
GGF = (MGN, RJP)
DDS = (CGV, XVQ)
DMX = (MSR, MSR)
DTN = (LJM, FGK)
FGL = (JHS, PGS)
CSX = (FBP, TKQ)
NDB = (FGL, MTF)
LKK = (NCR, MHD)
MDQ = (LSJ, NSX)
DLR = (CSM, DXK)
JPQ = (PFF, TGH)
NBR = (HKV, HKV)
PTX = (HRQ, CVC)
PGS = (JKJ, SVT)
XLQ = (BDF, BSF)
GLR = (HXJ, TKL)
NQM = (DTF, CBL)
SVT = (TBX, CTJ)
LGT = (HBD, NKJ)
TLT = (KQK, KGJ)
PMJ = (FKR, SBM)
SMX = (RGG, DDS)
NJF = (PTQ, SJM)
QCF = (LMJ, SBD)
DKV = (KSH, BCP)
RRQ = (XPC, NLV)
BTB = (FGG, CXT)
DTT = (VRX, BCR)
LPD = (QJD, HQG)
LMJ = (SSF, XMV)
BKR = (VRH, VNH)
XCC = (KGX, PNX)
FQZ = (CMP, HDD)
MCH = (NBR, SRM)
NPL = (VBH, VPQ)
LHH = (NCP, VGG)
TBX = (LNP, KCQ)
HXM = (XHM, KXD)
KQK = (SVK, SCT)
BHD = (NCP, VGG)
GCQ = (BBF, KCJ)
JMX = (THC, MHG)
SJJ = (MFC, JPQ)
JKH = (JJC, QRN)
PVF = (GCV, LDD)
MNJ = (VSD, PXL)
XVB = (XQN, NDB)
KKL = (DBT, LCG)
MDT = (PRX, KCT)
TTG = (NDL, NDL)
XRF = (GLR, NVF)
VCX = (QLV, LKR)
MDV = (RMD, JRT)
JSH = (SXX, MBL)
CGD = (TGN, NHS)
FRP = (NVM, KDV)
RTK = (TKM, VHZ)
QLV = (FSX, BTD)
TRL = (XVK, LLV)
BFQ = (RBN, NDG)
MDM = (VLB, LXN)
HCJ = (FLR, MCL)
BVC = (XLG, KJX)
TCS = (RPS, KPG)
PKP = (BCR, VRX)
DGL = (KDK, FDF)
VNF = (LCB, JFJ)
TGX = (SJJ, MHR)
MDL = (TNB, BSB)
RJG = (RQB, LQG)
LCP = (RMK, FBB)
QDQ = (VVG, JQM)
TMK = (SGL, NQV)
BHS = (XHK, DQX)
CMG = (VLC, PFG)
SJB = (JJF, RVJ)
VPJ = (THV, SCD)
RKJ = (LGG, JSS)
BDF = (KLT, NCQ)
PCH = (SNG, BPJ)
CML = (QKP, CNJ)
PND = (TMK, SQX)
GTC = (PTQ, SJM)
BMM = (SJJ, MHR)
CTG = (VCX, RDQ)
QKH = (KJT, PLS)
BBZ = (QNM, RVD)
MXJ = (SGS, TBH)
HML = (DPG, PCH)
KFB = (NKV, TCS)
BPC = (BBC, XKR)
JQG = (VXX, XJV)
VKR = (LQQ, SCC)
VVD = (SVN, HDB)
MGN = (HSR, TBP)
NMT = (FRP, FBS)
LCB = (NLR, TGP)
JQM = (PCB, MDT)
VGJ = (VFX, CGD)
GXF = (CRF, PTX)
LQG = (CKS, CKF)
NXM = (FMQ, KBV)
LDT = (BXP, VXK)
TLV = (FSP, VBQ)
CKV = (NQN, JBC)
NQV = (DBH, XHC)
FBF = (LKH, PJJ)
HSR = (PLR, DXS)
XPQ = (MCD, CQG)
VRX = (TLT, HTB)
CSP = (FSC, DGL)
KBR = (DXG, KMX)
XBS = (CMG, JQD)
KNX = (LQF, MQN)
CXB = (BBX, TVN)
FCS = (VTL, GVJ)
XHC = (XLQ, DRJ)
GDM = (GHK, MXK)
VFX = (TGN, NHS)
LXR = (LKK, GPS)
XKK = (PHJ, NHH)
LFN = (LMR, SKH)
DFT = (TDP, XPQ)
NSX = (LCP, SRJ)
NDL = (PRV, PRV)
MTF = (PGS, JHS)
XTQ = (HCQ, TQC)
SPB = (HMS, NXM)
JKJ = (CTJ, TBX)
MCL = (GXF, XLR)
NTK = (FNV, VDK)
VRG = (QHD, XXR)
KJK = (JSP, RMB)
QPK = (HBD, NKJ)
DNF = (PTH, LXJ)
LPS = (LCG, DBT)
GSB = (SCC, LQQ)
KJJ = (LDD, GCV)
FPG = (THT, HBX)
FTN = (LMP, LMP)
SBJ = (LGX, CBN)
AAA = (FPG, LTD)
NDC = (VGJ, SKL)
VLC = (QPP, VMR)
SHS = (LPD, PGF)
JSB = (VPJ, QFT)
LJM = (JSC, QPM)
NLJ = (CBN, LGX)
JDB = (GSS, GGN)
BXP = (GCG, DRD)
PDC = (XTV, PBX)
XQN = (MTF, FGL)
MHR = (MFC, JPQ)
DXS = (TTG, MFR)
DQS = (BKQ, RJG)
TXS = (XLG, KJX)
PDN = (KSF, DPT)
VMR = (VRQ, KNP)
HVV = (XXB, GQP)
VHL = (HPR, DTN)
QBK = (BFQ, BHK)
XXB = (DMX, CDS)
XHK = (BHD, LHH)
KSH = (GMR, XGX)
DXK = (HKN, DJC)
KXQ = (TDX, QJS)
DXG = (LCH, LCH)
BTC = (LXN, VLB)
TLG = (QHK, FJH)
JRT = (JVK, QGT)
RMM = (CFJ, LFN)
MKM = (JRT, RMD)
SSF = (RGS, CGP)
PGF = (QJD, HQG)
KKR = (MXK, GHK)
FBP = (DSB, LFF)
XKX = (KKR, GDM)
FMQ = (VHG, BTB)
CBL = (LFP, VQR)

1
2023/day15/example.txt Normal file
View File

@ -0,0 +1 @@
rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7

23
2023/day15/index.js Normal file
View File

@ -0,0 +1,23 @@
import fs from 'node:fs'
function init(filename) {
const data = fs.readFileSync(filename, { encoding: 'utf-8' }, data => data)
const words = [...data.split(',')]
const result = words.map(word => hash(word))
.reduce((prev, cur) => prev + cur, 0)
console.log(result)
}
function hash(word) {
let result = 0
for (let i = 0; i < String(word).length; i++) {
result += word.charCodeAt(i)
result *= 17
result %= 256
}
return result
}
init('input.txt')

1
2023/day15/input.txt Normal file

File diff suppressed because one or more lines are too long

17
2023/day19/example.txt Normal file
View File

@ -0,0 +1,17 @@
px{a<2006:qkq,m>2090:A,rfg}
pv{a>1716:R,A}
lnx{m>1548:A,A}
rfg{s<537:gd,x>2440:R,A}
qs{s>3448:A,lnx}
qkq{x<1416:A,crn}
crn{x>2662:A,R}
in{s<1351:px,qqz}
qqz{s>2770:qs,m<1801:hdj,R}
gd{a>3333:R,R}
hdj{m>838:A,pv}
{x=787,m=2655,a=1222,s=2876}
{x=1679,m=44,a=2067,s=496}
{x=2036,m=264,a=79,s=2244}
{x=2461,m=1339,a=466,s=291}
{x=2127,m=1623,a=2188,s=1013}

75
2023/day19/index.js Normal file
View File

@ -0,0 +1,75 @@
import fs from 'node:fs'
function init(filename) {
const data = fs.readFileSync(filename, { encoding: 'utf-8' }, data => data)
const workflow = new Workflow()
let rules = data.split('\n\n')[0].split('\n')
rules.forEach(rule => {
rule.matchAll(/(.*)\{(.*),(\w+)\}/gm)
.forEach(r => {
r[2].split(',').forEach(condition => {
let target = condition.split(':')[1]
let c = condition.split(':')[0]
let operator = condition.charAt(1)
const [first, second] = c.split(operator)
workflow.rules.push({
name: r[1],
key: first,
operator: operator,
value: second,
target: target,
default: r[3]
})
})
})
})
let flows = data.split('\n\n')[1].split('\n')
flows.forEach(flow => {
let newStr = flow.replace(/([a-zA-Z0-9]+)=([a-zA-Z0-9]+)/gm, "\"$1\": $2")
workflow.flows.push(JSON.parse(newStr))
})
workflow.test()
}
class Workflow {
constructor() {
this.rules = []
this.flows = []
}
isConditionValid(operator, value1, value2) {
let result = false
switch (operator) {
case '<': result = value1 < value2 ? true : false; break
case '>': result = value1 > value2 ? true : false; break;
default: break
}
console.log(`${value1} ${operator} ${value2} ? ${result}`)
return result
}
apply(rulename, flow) {
if (!rulename) { rulename = "in" }
if (rulename === 'A') return Object.values(flow).reduce((cur, next) => cur + next, 0)
if (rulename === 'R') return 0
const rules = this.rules.filter(rule => rule.name === rulename)
let new_rule = rules.reduce((prev, current) => current.default, 0)
rules.every(rule => {
if (this.isConditionValid(rule.operator, flow[rule.key], rule.value)) {
new_rule = rule.target
return false
}
return true
})
console.log(`${rulename}: ${rules.map(rule => rule.target).join(", ")} default: ${rules.map(rule => rule.default)} => ${new_rule}`)
return this.apply(new_rule, flow)
}
test() {
const res = this.flows.reduce((prev, current) => prev + parseInt(this.apply(null, current)), 0)
console.log(res)
}
}
init('input.txt')

780
2023/day19/input.txt Normal file
View File

@ -0,0 +1,780 @@
ztj{s<2703:A,m<1025:vk,ztl}
nqt{a>3513:R,s>2424:R,m>929:R,A}
mr{s>2281:R,A}
gf{x>2746:R,a<3379:jcl,R}
gkv{x>2579:qlx,s>322:rxv,R}
gdl{x<2917:A,s>82:A,s<54:R,R}
hzc{m<1277:R,m>1355:A,x>953:A,R}
xs{x>2337:ft,m>1444:A,R}
hs{m<235:A,a<2424:A,x<3026:pvh,hqk}
cls{a<1361:zch,s<3630:tnh,a<2359:px,spb}
gq{m<1157:A,R}
hc{m<2726:A,s>1302:A,R}
lt{x>3157:A,a<3669:R,R}
sf{x<3199:R,s>2680:jrl,x>3718:jh,R}
hr{m>1737:A,A}
bgg{x<171:A,x<283:R,R}
pgb{m<1624:ksc,x>2675:bzc,bzn}
zm{m<2599:sjc,m>3497:A,m<2946:A,A}
gbb{x>860:bxv,a<2306:br,msc}
gsl{x>53:A,A}
zs{x<1669:kp,x<2690:ns,s>2951:cls,tvv}
qhq{x<1264:A,m<1728:A,R}
gg{s<239:A,s>340:R,x>3642:A,R}
ktx{m>2620:R,m>2073:R,a<3539:R,R}
xg{x<3497:fp,sgc}
pms{m<3366:R,x>3570:A,R}
gsb{x>2077:A,A}
xf{s>3779:A,R}
tfs{s>3844:rb,s<3703:scg,bk}
bgb{a>2837:R,a>2812:A,A}
nvk{s<2358:mr,x>2818:nqt,x<2757:lf,R}
fg{a>1961:A,x<68:R,R}
cfz{x>1567:A,m>951:A,a<2959:R,A}
ljt{m>950:A,m<557:R,m<745:A,R}
zcq{m>1403:th,fd}
tbv{a>1532:R,R}
dq{m>960:R,csz}
tvv{a<2619:zh,m>1623:kb,vh}
dzz{s>3136:R,s<2702:A,a>2889:R,R}
lg{a<66:A,s>784:A,s>263:A,A}
zfk{s<463:R,x>3180:A,R}
bdh{s>356:A,s>193:A,m>482:R,R}
tc{m>3454:R,x>3211:A,A}
tz{x>3191:R,a<1319:R,R}
cpn{m<2478:A,a<2228:A,a>3262:A,A}
qmt{x<2144:R,flt}
nsp{m<379:R,R}
sxt{s<1011:A,a>1135:A,rl}
bjg{m>973:lz,x>243:hh,a>1789:xl,xmg}
cj{x>2137:nst,m<3002:A,s>3193:jc,pfr}
lmc{a>2967:A,A}
tv{m>1493:A,m<769:A,R}
khc{m>2346:mbr,s>596:kvr,a<274:fzh,tb}
zbk{s>1140:qrt,x>1818:pv,a>540:gt,gxc}
kk{s>3728:R,s>3683:R,m<562:A,A}
jv{m<848:zpq,a>1225:fsv,ztj}
shb{a<242:A,m>2625:R,R}
fhg{m>1372:R,A}
dg{x>1246:qd,s<3289:lbf,a<1032:zzp,ks}
cfq{s>2689:A,s>2613:R,A}
gl{m>2798:cqm,s>3029:cnl,m>2233:A,qc}
tkv{m<1884:A,A}
fdm{m<1549:tgt,x<2498:kdf,s>528:jz,lt}
vx{x<2948:xc,mgp}
bs{m<687:A,R}
kp{x>609:dkr,tqc}
xpj{x<934:A,a>1772:A,A}
rhd{x>956:A,a<2471:A,a<3414:A,A}
srg{m>1381:A,s<264:A,A}
szv{s>453:mff,nzj}
ldl{a>3906:A,A}
rxv{m<1632:R,m>1700:R,R}
ch{s<3588:A,a<639:A,R}
sc{s>2789:A,a<1419:R,R}
gk{m>415:R,x>508:A,a<3053:R,R}
rs{s<1893:R,m>2997:R,x<2049:R,R}
ncn{s<722:R,m>3562:A,s>773:jm,vr}
kz{x>3160:A,A}
xxt{s>1035:R,a<942:R,R}
pfr{m<3520:A,A}
nh{a<638:mv,s>865:vm,nrf}
sg{s>3051:vps,m>2918:A,zhs}
xnj{x>3494:A,m>584:A,a<1897:A,R}
jg{s<2380:R,a<2211:A,A}
cqm{s<3107:R,a>3295:R,m>3224:R,A}
hgv{m<203:A,s>107:R,A}
vqt{x<2609:xkn,bnt}
ft{s>3154:A,m>1087:R,A}
qv{a>621:A,a>259:xp,m<2439:fbv,kpq}
lzv{x<2186:gpt,lsb}
lx{x>3655:A,s>2359:A,s>2271:R,R}
xfj{s<407:sxx,R}
tnh{x<3164:vx,js}
mbr{s<671:A,R}
tbn{m<2151:A,x<3001:R,R}
zhp{m<3768:fgp,x>3307:rv,kj}
qd{s<3201:A,s>3491:hgt,x>1468:A,R}
qdk{s<1950:R,R}
vn{s>2814:A,m>386:A,A}
lv{x>3090:A,s>2406:znh,R}
km{m>2029:A,m>1871:A,s<2456:A,R}
ppc{m>2718:R,x<2889:A,x>3361:A,R}
bk{a<3189:A,m>846:R,R}
ht{s>2582:jts,x<3333:hx,rgx}
bb{x<3122:A,x>3258:R,m>3625:A,A}
fd{m>650:R,x<450:A,a<2254:gb,gk}
dcf{s>1084:tzp,gbb}
pm{x>3659:A,m<3539:R,A}
hj{a>3260:hrn,A}
ds{m>767:A,m>718:A,R}
ccv{a<2781:R,a<2905:hd,s<1781:A,qdk}
vh{s<2473:lpg,m>643:cmn,s>2647:vkk,ht}
zld{x<3737:A,xst}
djf{x<748:R,R}
jfx{m>1768:gz,m>802:jfs,m<437:cl,snl}
vft{x<2121:dn,m<2486:kf,x<2180:qmt,vsj}
bc{m<369:hs,a<2050:dfd,m>584:mx,vqt}
dn{a<799:vbr,m<1868:A,s<1387:skb,rs}
kxl{a<1795:A,s>3664:A,s<3514:R,R}
bh{x>3971:A,R}
pv{x>1877:R,s<517:R,m>2313:R,A}
vzj{s<1879:cth,vc}
fc{a<2156:ths,zbc}
cs{a>2745:A,x>2067:A,s>2357:R,A}
nsj{a>2800:A,m<2010:R,R}
lsb{a>2810:R,x>2463:A,m>2877:R,bz}
nl{x<2336:A,x>2529:A,A}
pk{m<2800:A,s>3027:R,x<487:A,A}
bzn{m<1838:R,A}
qrt{s>1765:R,s>1529:A,s>1302:zdc,kzp}
srn{m<3131:zbr,a>3269:phc,x<2610:R,xd}
lz{m<1282:pzk,s>1085:gld,A}
spb{x<3144:krj,sx}
mqz{m>467:sm,m<282:R,s<969:hhs,jfp}
mff{s<632:A,x>625:R,dzt}
hgt{m<2577:A,s<3667:A,s>3805:R,R}
xpv{a<3077:R,R}
rf{m>3497:gv,a>334:vhk,A}
rsc{s>1811:A,jk}
vkl{a>1095:A,a<912:R,R}
mpn{a>3161:pdk,x>3461:zld,ff}
pzk{s>1180:R,m>1114:R,x>299:A,R}
vf{x<492:R,s<3334:R,R}
kjv{m<719:bc,vhc}
ks{m>2088:kxl,a>1906:ll,gq}
vm{m>1632:vb,qcr}
ph{a<2292:qzf,A}
xn{x<2461:qln,R}
px{a<1762:xg,x>3186:jfx,fc}
fzz{x<3174:mq,a>1103:nn,m<533:bgn,mdq}
xl{x>116:lmr,m<712:nvq,a>2807:jmf,R}
br{s>958:xxt,x<537:bnn,a<1228:R,ssr}
mcl{x>3441:R,s<2530:R,R}
gn{a<3598:R,a>3777:A,x>861:A,R}
scg{a>3029:A,s>3661:A,R}
kr{m<471:R,hz}
xfc{s>3354:R,R}
th{a>1860:vf,a>789:pk,mt}
nm{s<2242:A,x>3062:kz,R}
xp{m<2732:R,a<441:R,A}
fzh{a>101:A,x>3191:R,A}
bn{x<3725:R,a>499:R,R}
kmh{s>1727:A,a>1678:A,a<1550:A,A}
dj{m<2927:R,m>3578:A,x>1056:R,A}
jz{x>3123:A,a>3678:A,x>2902:R,R}
qq{m<3557:A,m>3852:A,a<1950:R,A}
nrv{m>1238:qcd,mqz}
pmd{x>3502:R,gdl}
ll{s>3570:A,s<3419:R,x>946:A,R}
td{x<1875:A,a>1161:A,A}
jt{m>1937:A,s<430:tkv,R}
pp{s<1233:mzr,m>2932:vsl,ccv}
ssr{s<903:R,R}
qcd{m>1677:R,R}
sv{x<3042:fv,s<3775:tc,m<3706:ct,dm}
qsg{x>3287:vvt,dbq}
cdt{x<3342:kx,a>1677:btj,nth}
jrl{m>1242:A,m>940:R,m<793:R,R}
dzt{s<732:A,A}
dk{m>1342:rmq,hdt}
rn{x<3645:A,R}
fx{s>1211:jpn,s>785:nrv,m<1357:pd,dcg}
nvh{a<2086:kmh,x<2940:A,m<2730:R,pms}
cb{x<581:sd,psf}
mq{m>678:A,x>2970:qf,a<881:A,ck}
qfn{s>298:A,R}
rss{s>1618:rsl,frj}
sp{x<3759:R,a>512:A,m>3807:R,R}
dns{m>270:A,x<2335:R,s>3567:R,R}
dsr{x<2503:R,m>969:A,x>3358:R,A}
jfs{s>3760:R,R}
zpq{x<2139:td,s>2466:nl,A}
vk{s<2893:A,a<803:A,s>2986:R,A}
rbn{a>3902:zp,m>472:A,R}
tvn{m<2544:R,A}
lqf{a<3601:rnx,a<3691:A,fz}
ls{m<1384:A,R}
rnk{a>3786:R,m<2367:A,zl}
pdk{x>3398:R,s>2636:tnq,a>3510:xt,km}
gm{x>1475:sg,zdv}
ps{s>2886:A,A}
ndh{a<979:fkj,a>1636:A,s>2743:tz,nf}
zhs{s>2501:R,a<3309:A,s>2306:A,R}
zht{a>1418:A,A}
fn{x>3198:A,a>3957:R,m>3278:A,A}
xc{m>1714:xfc,a>2574:cmr,A}
gld{m<1414:R,x<381:A,m<1444:A,R}
pz{m>3006:R,A}
fkp{a>3424:R,m<3526:A,A}
fqc{a<2473:tv,m>2350:cj,a<2565:xs,vv}
bnt{s>1011:R,x>3453:A,R}
xzq{a<3766:lqf,a<3888:kgd,s<1399:zmt,lp}
clh{a<1003:A,s>3818:A,ntv}
rq{s>2799:R,m<1088:A,A}
jfp{s<1113:A,R}
hh{x<466:A,R}
md{s>1194:R,R}
hm{a>1759:gsb,R}
vb{s>1454:A,s<1082:kxs,a>1134:A,hc}
rsl{a<3803:gh,st}
tjb{x>2545:A,x>1949:A,R}
zsp{s<3356:R,A}
bg{x>1362:A,R}
lbf{m>1460:A,mnr}
bt{s<856:R,s>1189:ppc,x>2845:R,R}
ct{a<1119:A,x>3291:A,m<3487:A,A}
drn{s>2455:R,x>3658:A,x>3401:R,A}
xst{m>2109:R,a>2952:A,a<2839:R,R}
pr{a>3195:xxm,R}
rnx{s<926:A,a>3544:R,A}
ngl{a<2849:kzb,x>1007:R,vq}
fhq{m<1694:R,m>3210:A,a>1513:A,A}
ttd{x>952:R,m>216:R,m>132:R,A}
tg{a>447:R,m<3009:R,s<3685:R,A}
cgl{x>2271:A,s>3239:R,s<2541:cs,A}
jh{a>3871:R,s<2611:A,R}
vlx{m>2576:A,a<3152:R,m>1231:A,R}
fh{s>1137:R,s<937:R,djf}
xz{x<2419:sl,x<3456:rt,m>3040:fs,crn}
pj{a<887:sq,s<3315:A,R}
kjt{m<990:hqc,nkr}
tb{m>1009:A,A}
ppm{a<1310:R,a<1850:R,a<2261:R,R}
jm{x<1054:R,a<579:R,A}
fsf{x<3020:R,R}
xxm{a<3299:R,R}
pvh{s>929:A,R}
bfx{a<3017:A,a>3351:gn,grz}
fp{x<2966:tbv,x<3308:R,R}
krr{x<677:tvn,A}
vdz{m<3388:R,x<844:A,R}
hzf{s>385:R,s<196:A,A}
jjf{x>3217:A,m<616:qfn,dr}
nq{x>2432:lg,m<1705:A,R}
cmn{a<3539:rtg,a>3754:sf,dv}
sq{a>365:R,m>2615:A,s>3324:A,A}
xqf{x<554:A,m>1924:A,x>1244:A,R}
gxc{a<350:A,s>506:fhg,vl}
qx{a<3727:A,R}
nzq{m<1027:R,s>1843:R,A}
rv{a<3212:R,x>3734:R,m>3888:tq,tn}
lrn{m>1353:kq,s<3039:jv,gx}
nf{m>2662:A,x<3529:A,m>2179:A,R}
zlz{a<750:mc,clh}
kf{a>756:A,R}
gj{m<1030:A,a>1937:R,R}
gb{s<3174:A,s<3470:A,A}
tnq{x>3001:A,R}
zqv{m>691:A,R}
kj{x<2954:psp,x>3147:mg,a>3127:mjb,A}
tgn{a>1711:lkc,s>541:qt,R}
npt{x<772:R,x>900:R,s<1084:R,A}
cx{x>3400:lxp,lbv}
vvt{s>278:R,A}
vqq{x<3192:R,A}
tq{s>2456:R,s<2301:R,x>3451:A,A}
xxx{m<2342:R,A}
dkr{a<2409:dg,m<1437:lvf,x>1274:gm,qdc}
fs{s>1657:pbv,m<3482:A,m>3677:R,R}
tpg{m<1159:A,x>3135:R,gmf}
qln{a<2906:A,a>2928:R,a<2918:R,A}
lvf{x<1270:bfx,x<1455:bzz,qk}
xlq{m<334:A,s>1515:A,A}
sx{m<1833:tfs,hf}
gpt{a>2836:zxd,a>2730:R,A}
krn{x>1155:ckd,s<1260:A,m>2770:A,zht}
sk{m>348:R,x>1377:A,m>153:A,R}
rl{a<984:R,R}
ntd{a<819:dns,qnm}
grz{x>890:A,a<3172:A,A}
kt{x>967:A,R}
qs{m<1546:A,R}
js{x>3672:qmv,a>2929:hdn,hcs}
bzz{m<647:sk,bg}
vv{s>2934:sj,R}
lbp{s>2775:R,R}
zxd{x>1854:A,R}
crn{s>1724:R,rn}
jc{x>1851:R,s<3672:A,m<3477:A,R}
xxh{m>1324:qqn,qm}
pn{s<976:A,m<2297:R,A}
fv{s>3818:A,s<3658:R,s<3743:R,A}
ck{x>2824:R,m<316:R,A}
vdp{x<3490:A,A}
xq{m>184:A,x>3334:A,A}
fz{m>3339:R,m>2690:R,x>2493:R,R}
jf{m<1773:R,x>659:R,A}
xd{a<3143:A,R}
svq{a<3528:A,R}
cl{x>3473:A,R}
qf{x>3076:A,R}
ktb{m<3197:A,s<704:R,s>1154:A,A}
gbj{m<158:R,m<302:R,m>336:R,R}
ff{s<2459:lmc,s>2743:R,nsj}
rcn{s>3821:R,x>2847:A,a<2261:R,A}
xkn{x>2134:R,x>1785:A,A}
pf{a>3576:A,s>3815:A,s>3737:R,R}
ntv{s<3659:R,A}
psf{m>575:R,a<2611:A,m>319:R,R}
fqz{a>3321:bx,vdp}
tzp{x<554:ph,a>2615:lm,krn}
pht{s>625:fh,x>606:ffn,sxb}
zz{m<1836:ql,s>1299:hp,m<3200:shb,A}
snl{s>3863:R,a<2001:xnj,kk}
qdc{a<3128:ngl,a>3442:rnk,x<874:zm,gl}
rsz{m>1017:R,x<2038:A,m<443:R,dzz}
frj{m>1063:md,a>3826:rbn,s>1317:lb,zkk}
bbt{a>3364:A,a<3152:R,R}
lpg{x>3231:fqz,x<2909:nvk,s<2283:nm,lv}
sd{s<1984:R,a>1624:A,m<729:A,A}
spq{x<3000:A,s>148:A,R}
fsv{s<2728:gj,m<1078:fpf,s>2917:R,R}
rmq{s<3098:A,x<182:fg,cpn}
msc{x>326:A,xxx}
drg{a>1618:hzf,s>486:zjl,a>619:hzc,A}
hx{x>3100:R,m<249:hnq,R}
ksc{a>3214:A,x>2913:R,R}
kxs{x<3497:R,s>949:A,A}
xv{s>311:A,R}
kd{x<3492:A,ppm}
st{s<1839:R,m>810:R,pgj}
ntb{m>3358:spq,m>2731:zhg,s<116:R,A}
lqz{a>3814:A,A}
fb{x>2177:tg,bjd}
dcg{a<3359:pgb,rch}
khp{a<2918:A,x>3796:R,m>378:R,A}
hhs{x<3165:A,R}
bnn{a<1158:R,x<228:A,A}
nx{m>469:R,x>3876:R,x<3760:A,A}
vl{m>1539:A,a>468:A,s>326:R,A}
qmv{s<3328:R,A}
rt{m<2818:fbx,R}
hcs{x<3425:zsp,mk}
mn{m<2363:A,R}
sm{m<839:A,x>2835:A,s>1035:A,A}
zn{x<2270:R,a>798:R,s>3678:R,A}
qqn{m>1794:jt,a<3748:fdm,gkv}
hdn{s>3198:A,s>3046:R,ngq}
mg{x>3205:R,s<2688:R,A}
sgc{x<3807:fhq,x<3919:A,bh}
qhl{m>2988:A,x>3259:drn,xpv}
zbr{x<2841:R,m>2724:R,R}
rjb{x>2706:R,R}
qp{m>1140:drg,tgn}
kkk{s>1408:vzj,m<1501:dnp,s<833:dmc,dcf}
cmr{a>3290:R,m>1084:R,m>506:R,A}
lbv{m<3300:R,a<923:A,s<2435:bb,qq}
mjb{m<3900:R,a>3686:A,R}
clg{s>1434:nvh,m>3229:rsh,bt}
hrn{a>3478:R,a>3380:R,m>1194:R,A}
zhd{s>1275:R,m>3076:R,m<2721:A,R}
hnq{x>2834:A,R}
tbt{x>3131:A,m<3435:R,A}
phc{a>3375:A,a<3306:R,A}
vq{x<800:R,s>2917:R,x<922:R,R}
kq{s<3392:sc,a>1260:hm,m>2319:fb,htk}
fbx{a>3317:A,m<2345:A,R}
cm{m<2219:R,m>2264:R,R}
csz{s>3528:R,A}
nst{x>2459:A,A}
lf{a<3121:R,x<2716:R,m<818:R,A}
xsp{x<2980:R,a>2817:A,A}
qm{x<2949:kr,x<3428:jjf,s<456:jtt,jqn}
qt{s<744:A,x<1059:R,s>816:R,A}
zc{x>3545:qx,a>3625:vn,A}
cxk{a>1449:ntt,s>1617:xbr,s>1504:R,xqf}
cg{x>2245:zx,x<1956:zbk,vft}
zkk{m<649:A,a>3680:R,R}
bx{a<3661:A,x<3529:A,a>3778:R,R}
mv{s>1300:rsc,khc}
qjt{x<3376:A,R}
mgp{x>3029:zq,A}
fpf{a>1769:R,x>2049:A,s<2923:A,R}
lhc{s>1662:A,m>1543:A,a<3599:tl,vfn}
mzr{a<2819:R,R}
psp{s<2611:A,a>3354:A,a>3056:A,A}
vc{m<1333:cb,mp}
bzc{m<1850:R,m<1953:A,R}
kb{m<2614:mpn,m>3380:zhp,gqd}
dv{a<3677:cfq,x<3383:R,s<2710:R,rq}
xh{s<2524:A,R}
vr{s>754:A,x<643:A,A}
sj{s<3498:R,s<3711:R,m<1518:A,R}
bq{a<1413:R,m>3189:A,a<1750:R,R}
bgn{m<197:A,m<353:gbq,xh}
jl{x>2858:R,m<476:R,R}
vbr{x<2055:R,m>2096:A,R}
ngq{a>3426:R,s<3009:A,a<3210:A,R}
krj{x>2852:pjd,gf}
dp{m>1430:A,A}
xkm{m<1913:kjv,vz}
vg{x>224:R,a>1513:A,m<323:A,R}
jmf{s<1182:A,a>3547:A,A}
vqr{a>3441:ljt,A}
ckd{m>3131:R,a<1567:R,m>2271:R,A}
bp{s>3270:A,s>3133:R,R}
pc{x>3663:A,m<491:R,A}
mx{m>663:bs,m<622:tjb,gkn}
qhh{x<1947:A,m>3589:A,R}
ths{a>2010:dp,R}
znh{m>662:A,x>2990:R,R}
fph{a>2941:R,s<1649:R,R}
nkr{x<1012:npt,m>1326:A,s>1224:R,R}
zbc{x>2881:R,x>2784:rcn,x>2722:xf,rjb}
hp{s>1600:R,s>1465:R,a>263:R,R}
kdf{s>420:R,m>1639:R,x>2176:A,R}
hkl{s<3823:bn,m>3668:sp,s>3936:A,A}
lp{m>3026:tbt,s>1876:R,bj}
zmt{a>3930:fn,a<3915:bcz,ktb}
jqn{a<3862:pc,m<761:R,a<3938:ldl,A}
hms{x>3072:A,s<1921:R,A}
sn{s>774:A,s>753:R,x>547:A,A}
kx{m>1998:tbn,A}
mqc{m<2308:A,m>3052:A,m>2635:R,A}
qdj{a>2946:zgm,a<2669:fqc,m>2271:lzv,ndr}
xt{a>3826:A,x<3063:A,A}
kvr{m>1390:R,x>3294:A,R}
hz{x>2278:A,x<1949:A,A}
fkj{x<3168:A,s<2741:R,R}
tn{m<3831:R,s>2560:R,A}
zjl{s>694:R,R}
ndr{a<2827:cgl,x<2240:rsz,xn}
btj{m<1813:qs,m<2042:jg,cm}
bjd{x<1891:A,s>3600:A,A}
gjg{m>2075:rjd,a<3588:fx,s<809:xxh,rss}
zch{s<3538:hl,m<2003:zlz,dz}
nrf{s>428:vkl,s>146:qsg,a>957:pmd,dxn}
vhc{s>1085:tpg,jxf}
lb{m<643:xlq,a>3717:svn,m>911:dsr,ds}
zdc{x>1803:R,A}
bzj{s>3689:A,m<2560:R,R}
flt{s>1360:A,x>2163:A,A}
qg{s>1039:A,A}
dm{m<3816:A,s<3853:R,A}
xmg{m>752:A,x>137:jzj,gsl}
bcz{a<3903:R,R}
lkc{a>3188:A,m<900:A,m>1018:A,R}
jxf{s<527:srg,A}
gx{m>486:dq,ntd}
bd{s>2400:A,x>3671:A,s>2281:R,A}
qc{s<2673:R,A}
lm{a<3182:dj,a>3635:lqz,a>3407:R,R}
qnm{m<247:R,a>1687:R,m>389:A,A}
zq{s>3263:R,s>3111:R,R}
mk{s>3246:A,m>2016:R,s<3088:A,R}
rql{a<3077:xsp,s>2761:jl,s>2722:R,A}
vj{s<2785:ndh,kd}
in{s>2178:zs,skv}
xrc{s>712:sn,A}
jp{a<2589:R,A}
pgj{a>3929:R,x>2479:A,A}
jts{x>3530:R,A}
gv{s>3739:A,R}
mnr{s>2737:R,A}
tgt{m>1439:R,s>292:R,A}
xvs{a<2848:A,A}
vps{a>3227:A,x<1588:R,A}
jzj{m<672:A,s<1122:R,R}
zzp{x<901:ch,R}
sl{s>1542:A,s>1296:R,x>1931:A,zxz}
rjd{a>3500:xzq,s<1086:qj,xz}
kgd{s>1426:A,a>3812:A,R}
dmc{m<2947:szv,kqx}
hbk{m<3419:A,R}
htk{a<729:R,a>1042:A,a>861:R,zn}
zp{s<1255:A,A}
qlx{m>1631:R,x>3329:R,R}
skv{x<1606:kkk,a<1440:ggv,a<3018:xkm,gjg}
zl{m>3149:A,a>3596:A,R}
sjc{m>2149:A,A}
ggv{x>2600:nh,cg}
pd{a<3356:pr,x<2700:xfj,a<3465:zbd,xv}
vhk{a<614:A,a>735:A,m>3340:A,R}
bz{x<2317:R,s<3304:A,A}
zbd{m>889:zfk,bdh}
vsj{a<598:zhd,R}
qzf{a>1455:R,x>340:A,s<1196:R,R}
dz{m<3157:qv,x>3473:hkl,a>877:sv,rf}
rtg{a>2957:R,A}
qk{a>3252:svq,s>3213:R,m>548:cfz,R}
zx{a>871:sxt,a>314:mn,a>186:zz,nq}
kcd{x<2880:R,s>94:R,R}
hqc{m<796:R,m>890:rhd,a<2192:A,xvs}
ffn{m>350:jp,a<2088:ttd,a>2817:R,R}
sz{m<1599:R,x>2121:ktx,m<3075:bbt,qhh}
jtt{a<3836:zqv,m<876:gg,A}
lmr{a<2718:A,a<3149:R,R}
zdv{s>3010:R,lr}
jcl{m<1659:A,R}
mdq{a<479:R,A}
dnp{m<537:pht,s<885:qp,x<582:bjg,kjt}
lxp{m>2932:A,lx}
kqx{s<513:hbk,a<1592:ncn,a>3119:xrc,kt}
cnl{x<1035:R,m<2338:A,R}
mp{m<2347:xpj,a>2221:vdz,bq}
rgx{s<2542:R,R}
rb{s<3903:A,A}
jk{m>2376:R,x>3391:R,m<1198:R,R}
zgm{s>3092:bzj,sz}
gt{a>1014:R,m<2365:ls,R}
jpn{s>1819:hj,a>3326:vqr,ljm}
nzj{s>254:R,m>2156:R,x<991:jf,qhq}
gh{m>856:A,nsp}
kpq{a<110:A,x>3312:R,x<3090:R,R}
hl{x<3177:pj,bp}
gs{a<180:R,s>3703:R,R}
gz{m>3188:R,R}
lft{s>2829:ps,gbj}
kzb{m>2754:A,a<2674:A,A}
vz{a>2453:pp,clg}
tqc{x<360:dk,zcq}
bxv{a<2317:A,m<2884:pn,fkp}
ztl{a<590:R,x<2295:R,x>2529:R,R}
vkk{a>3382:zc,x>3140:xrl,m<384:lft,rql}
fbv{s<3805:R,s>3881:R,a>172:R,R}
gbq{m>279:A,x<3717:R,x<3898:A,R}
svn{s<1485:R,A}
skb{s>589:R,s>295:R,x>2063:A,A}
mc{a>272:A,x>3488:gs,s>3786:A,fsf}
pbv{x<3811:R,a>3290:A,m<3444:R,A}
gkn{s<1377:A,A}
nth{a<1084:bd,A}
vsl{a<2799:A,a<2901:bgb,fph}
lr{x<1407:A,s>2654:R,s<2373:A,R}
dbq{m<1824:R,s>291:R,A}
hdt{s>3011:R,s>2681:A,bgg}
nvq{m>597:R,x>47:R,A}
qj{s>674:pz,s>313:srn,ntb}
fgp{a>3257:R,mcl}
pjd{s<3848:vlx,A}
gmf{s<1729:A,A}
kzp{x>1746:A,x>1670:A,m>2460:A,A}
tl{m<888:A,m<1289:A,R}
zh{m<1334:fzz,s>2674:vj,m<2347:cdt,cx}
ql{s<1432:A,a>258:R,A}
rch{s<485:R,vqq}
hf{a<3208:R,pf}
bj{x<2870:R,m<2489:A,R}
zhg{x>3190:A,s>144:R,m<2941:A,R}
rsh{x<3060:R,a<1833:pm,R}
ntt{a>1930:R,a<1611:A,A}
hd{s>1811:A,R}
dfd{x<2726:A,qg}
gqd{a>3471:qjt,qhl}
xrl{x>3598:khp,m>284:lbp,m<100:R,xq}
zxz{m<2818:A,R}
vfn{s>1502:R,x>955:R,s>1440:A,R}
dr{s<370:A,x>3070:R,R}
cth{a<2210:cxk,a>3174:lhc,krr}
xbr{m<1775:R,m>3200:A,A}
nn{m>718:R,x>3641:nx,A}
dxn{s<55:hr,x>3309:A,a<824:kcd,mqc}
mt{a<423:R,a>555:R,R}
hqk{a>2663:A,s<888:R,a<2564:R,A}
ns{a<2307:lrn,qdj}
sxb{s>318:vg,hgv}
ljm{s<1457:A,m>763:A,s>1648:R,A}
qcr{s<1460:R,m<548:hms,a>1054:A,nzq}
sxx{a>3455:A,R}
{x=378,m=450,a=211,s=36}
{x=220,m=1090,a=338,s=879}
{x=117,m=124,a=2136,s=128}
{x=1392,m=1408,a=126,s=16}
{x=2038,m=278,a=901,s=1801}
{x=323,m=1703,a=964,s=571}
{x=265,m=358,a=456,s=34}
{x=1513,m=144,a=525,s=1341}
{x=355,m=2036,a=814,s=1179}
{x=937,m=701,a=2026,s=1349}
{x=1292,m=766,a=2805,s=16}
{x=319,m=26,a=83,s=1193}
{x=600,m=5,a=242,s=76}
{x=117,m=1415,a=1636,s=1057}
{x=87,m=1530,a=1686,s=386}
{x=36,m=957,a=1712,s=300}
{x=2570,m=49,a=661,s=442}
{x=643,m=698,a=1593,s=854}
{x=1450,m=1410,a=289,s=1342}
{x=1690,m=376,a=584,s=3715}
{x=1942,m=570,a=1726,s=1192}
{x=420,m=475,a=1410,s=863}
{x=550,m=662,a=2140,s=105}
{x=241,m=2370,a=756,s=26}
{x=705,m=425,a=1000,s=160}
{x=1763,m=914,a=197,s=555}
{x=2267,m=323,a=70,s=147}
{x=497,m=392,a=1959,s=360}
{x=428,m=1375,a=415,s=236}
{x=1800,m=96,a=403,s=1227}
{x=216,m=381,a=1217,s=1031}
{x=3129,m=304,a=811,s=1753}
{x=555,m=59,a=3254,s=2896}
{x=397,m=1518,a=740,s=496}
{x=905,m=217,a=1234,s=2319}
{x=283,m=2490,a=309,s=1156}
{x=1777,m=624,a=96,s=2053}
{x=1031,m=481,a=1014,s=198}
{x=155,m=205,a=2460,s=832}
{x=123,m=25,a=3962,s=3662}
{x=3242,m=396,a=519,s=150}
{x=2632,m=1307,a=3594,s=1714}
{x=147,m=285,a=1020,s=40}
{x=1498,m=1133,a=241,s=1263}
{x=1977,m=323,a=1594,s=241}
{x=807,m=1042,a=702,s=295}
{x=70,m=455,a=1328,s=108}
{x=2392,m=27,a=158,s=44}
{x=528,m=671,a=2003,s=935}
{x=1539,m=2002,a=168,s=479}
{x=2121,m=195,a=901,s=1116}
{x=251,m=51,a=380,s=745}
{x=793,m=1959,a=598,s=605}
{x=137,m=261,a=714,s=1548}
{x=2783,m=486,a=2065,s=914}
{x=574,m=387,a=250,s=28}
{x=3,m=829,a=1862,s=2}
{x=846,m=2476,a=841,s=1810}
{x=1020,m=114,a=463,s=323}
{x=4,m=970,a=192,s=142}
{x=942,m=2297,a=125,s=1638}
{x=1664,m=2275,a=2086,s=290}
{x=682,m=93,a=143,s=2033}
{x=1613,m=356,a=463,s=632}
{x=633,m=268,a=150,s=798}
{x=1743,m=1455,a=56,s=487}
{x=2774,m=103,a=739,s=77}
{x=1760,m=2631,a=81,s=138}
{x=461,m=1688,a=1543,s=1712}
{x=1182,m=14,a=566,s=3270}
{x=680,m=467,a=1920,s=297}
{x=1281,m=2355,a=704,s=1340}
{x=142,m=65,a=589,s=20}
{x=1412,m=559,a=677,s=2106}
{x=905,m=2761,a=1526,s=648}
{x=399,m=667,a=1901,s=27}
{x=2241,m=3411,a=1786,s=321}
{x=1395,m=1278,a=508,s=1112}
{x=363,m=35,a=218,s=1280}
{x=829,m=115,a=304,s=192}
{x=1397,m=599,a=861,s=838}
{x=824,m=2140,a=88,s=1736}
{x=661,m=276,a=502,s=731}
{x=585,m=14,a=705,s=473}
{x=747,m=95,a=829,s=805}
{x=2006,m=323,a=982,s=168}
{x=795,m=193,a=473,s=1531}
{x=687,m=428,a=972,s=1154}
{x=254,m=426,a=281,s=552}
{x=171,m=369,a=382,s=1369}
{x=964,m=10,a=322,s=2007}
{x=1960,m=183,a=2153,s=1967}
{x=2315,m=170,a=41,s=727}
{x=189,m=901,a=307,s=3026}
{x=757,m=1235,a=1316,s=335}
{x=836,m=3023,a=453,s=2355}
{x=2187,m=2140,a=683,s=2560}
{x=1772,m=468,a=1812,s=1329}
{x=783,m=601,a=1339,s=3291}
{x=570,m=172,a=1794,s=120}
{x=1207,m=1572,a=700,s=758}
{x=1961,m=3652,a=702,s=153}
{x=1094,m=435,a=19,s=938}
{x=3328,m=166,a=247,s=216}
{x=1500,m=2012,a=1561,s=59}
{x=12,m=2269,a=8,s=796}
{x=193,m=1137,a=328,s=13}
{x=120,m=1179,a=59,s=1829}
{x=499,m=650,a=1049,s=1803}
{x=2761,m=1431,a=389,s=1322}
{x=456,m=2766,a=2165,s=348}
{x=2387,m=12,a=2140,s=556}
{x=387,m=7,a=1514,s=1137}
{x=1111,m=608,a=581,s=965}
{x=1055,m=181,a=754,s=67}
{x=74,m=2582,a=66,s=546}
{x=5,m=956,a=1013,s=657}
{x=262,m=189,a=2496,s=233}
{x=518,m=2821,a=851,s=825}
{x=351,m=1981,a=221,s=34}
{x=995,m=165,a=36,s=2286}
{x=1636,m=335,a=936,s=447}
{x=763,m=692,a=1527,s=210}
{x=301,m=559,a=1815,s=2640}
{x=959,m=2852,a=232,s=53}
{x=136,m=153,a=206,s=11}
{x=1533,m=42,a=2014,s=136}
{x=341,m=378,a=37,s=577}
{x=220,m=1451,a=185,s=421}
{x=1086,m=3265,a=1184,s=2960}
{x=143,m=2701,a=602,s=173}
{x=628,m=1016,a=1642,s=223}
{x=597,m=641,a=1331,s=651}
{x=809,m=1843,a=1111,s=2189}
{x=1385,m=1352,a=238,s=1969}
{x=515,m=1374,a=125,s=913}
{x=798,m=2743,a=1798,s=1045}
{x=2999,m=1787,a=1168,s=188}
{x=57,m=77,a=2652,s=56}
{x=1231,m=304,a=1288,s=523}
{x=1031,m=381,a=558,s=267}
{x=721,m=883,a=2995,s=22}
{x=304,m=846,a=1525,s=30}
{x=446,m=2969,a=412,s=674}
{x=187,m=418,a=1187,s=571}
{x=810,m=515,a=819,s=1393}
{x=740,m=3392,a=1128,s=1114}
{x=137,m=631,a=1208,s=1707}
{x=653,m=2468,a=952,s=811}
{x=33,m=70,a=518,s=464}
{x=3318,m=2,a=3661,s=64}
{x=50,m=548,a=1657,s=704}
{x=2272,m=2684,a=1597,s=2220}
{x=185,m=339,a=460,s=517}
{x=8,m=1651,a=1810,s=354}
{x=548,m=833,a=1703,s=759}
{x=551,m=358,a=390,s=468}
{x=202,m=2260,a=597,s=632}
{x=453,m=1811,a=754,s=2449}
{x=353,m=101,a=1835,s=72}
{x=1451,m=453,a=162,s=13}
{x=125,m=2120,a=627,s=981}
{x=5,m=283,a=1755,s=194}
{x=973,m=835,a=62,s=1184}
{x=346,m=1348,a=442,s=210}
{x=4,m=1242,a=136,s=196}
{x=2388,m=1336,a=1991,s=2873}
{x=561,m=2335,a=1059,s=627}
{x=838,m=3226,a=159,s=1053}
{x=2578,m=49,a=1920,s=2432}
{x=710,m=342,a=182,s=534}
{x=1997,m=1509,a=946,s=1849}
{x=810,m=249,a=495,s=257}
{x=363,m=274,a=2742,s=25}
{x=506,m=565,a=2584,s=731}
{x=508,m=2073,a=21,s=1826}
{x=1413,m=780,a=779,s=378}
{x=1097,m=47,a=98,s=402}
{x=536,m=2,a=2710,s=1499}
{x=548,m=2845,a=2095,s=555}
{x=2963,m=2206,a=1920,s=875}
{x=1783,m=367,a=1245,s=594}
{x=409,m=18,a=408,s=119}
{x=1554,m=3613,a=3002,s=87}
{x=232,m=197,a=63,s=1372}
{x=412,m=1355,a=1673,s=1667}
{x=261,m=142,a=123,s=1187}
{x=1396,m=779,a=287,s=60}
{x=28,m=1350,a=585,s=861}
{x=1123,m=329,a=1166,s=62}
{x=2292,m=73,a=123,s=596}
{x=2400,m=1430,a=390,s=1313}
{x=638,m=2856,a=44,s=488}
{x=294,m=1534,a=1075,s=1914}
{x=1233,m=71,a=253,s=3058}
{x=1536,m=805,a=158,s=738}
{x=2903,m=119,a=2344,s=2387}
{x=142,m=1768,a=940,s=881}
{x=301,m=2748,a=739,s=766}
{x=127,m=18,a=141,s=1398}

View File

@ -1,10 +1,10 @@
MMMSXXMASM
MSAMXMSMSA
AMXSXMAAMM
MSAMASMSMX
XMASAMXAMM
XXAMMXXAMA
SMSMSASXSS
SAXAMASAAA
MAMMMXMMMM
MXMXAXMASX
.M.S......
..A..MSMS.
.M.S.MAA..
..A.ASMSM.
.M.S.M....
..........
S.S.S.S.S.
.A.A.A.A..
M.M.M.M.M.
..........

View File

@ -1,51 +1,113 @@
import fs from 'node:fs'
fs.readFile('example.txt', ({ encoding: "utf-8" }), (err, data) => {
const letters = ["X", "M", "A", "S"]
const data = fs.readFileSync('input.txt', ({ encoding: "utf-8" }), data => data).split('\n')
const rows = [...data.split('\n')]
const paper = []
// directions, straight first: east,south,west,north,southeast,southwest,northwest,northeast
const dirs = [[1, 0], [0, 1], [-1, 0], [0, -1], [1, 1], [-1, 1], [-1, -1], [-1, 1]]
for (let y = 0; y < data.length; y++) {
for (let x = 0; x < data[y].length; x++) {
const char = data[y][x]
paper.push({ pos: { x: x, y: y }, char: char })
}
}
let found_words = 0
let found_letters = []
const width = rows[0].length
const height = rows.length
// letters.forEach(letter => {
// for (i = 0; i < rows.length; i++) {
// }
// })
for (let letter = 0; letter < letters.length; letter++) {
let letter_positions = []
for (let x = 1; x <= width; x++) {
for (let y = 1; y <= height; y++) {
if (rows[y - 1][x - 1] === letters[letter]) {
letter_positions.push([x, y])
// check if there is a next letter
dirs.forEach(direction => {
let [new_x, new_y] = direction
if (x + new_x in [...rows[y - 1]] && y + new_y in [...rows.keys()] && letter + 1 in [...letters.keys()]) {
//console.log(`I'm at ${x},${y} with ${letters[letter]}. Looking for letter at ${x + new_x},${y + new_y}`)
if (letters[letter + 1] === rows[y - 1 + new_y][x - 1 + new_x]) {
console.log(`I am at ${x},${y} with $ ${letters[letter]}. Found ${letters[letter + 1]}.`)
}
}
})
}
}
class Puzzle {
#directions = []
#diagonals = []
constructor() {
this.i = 0
this.solutions = 0
this.#directions = [
[-1, -1], [-1, 0], [-1, +1],
[0, -1], [0, +1],
[+1, -1], [+1, 0,], [+1, +1]
]
this.#diagonals = [
[-1, -1], [-1, +1]
]
}
shootInDirection(y, x, dy, dx, length) {
const positions = []
for (let i = 1; i <= length; i++) {
positions.push([y + (dy * i), x + (dx * i)])
}
found_letters[letter] = letter_positions
return positions
}
isCharacterAt(char, x, y) {
const solutions = paper.filter(character => character.pos.x === x && character.pos.y === y && character.char === char)
return solutions.length === 0 ? false : true
}
console.log(found_letters)
console.log(`width: ${width}`)
console.log(`height: ${height}`)
})
findCharacter(c) {
return [...paper.filter(character => character.char === c)]
}
function findFirstLetter(letter) {
const [row, col] = Array
return [row, col]
}
isInBoundary(x, y) {
let max_width = data[0].length
let max_height = data.length
let within_width = x >= 0 && x <= max_width ? true : false
let within_height = y >= 0 && y <= max_height ? true : false
return within_width && within_height ? true : false
}
checkForWord(coords, word) {
for (let i = 0; i < coords.length; i++) {
let [y, x] = coords[i]
if (!this.isInBoundary(x, y)) return false
if (!this.isCharacterAt(word[i + 1], x, y)) return false
}
return true
}
checkForWord2(d1, d2, word) {
const [y1, x1] = d1
const [y2, x2] = d2
if (!this.isInBoundary(x1, y1)) return false
if (!this.isInBoundary(x2, y2)) return false
const tl = this.isCharacterAt([...word][1], x1, y1) && this.isCharacterAt([...word][2], x2, y2) ? true : false
const tr = this.isCharacterAt([...word][2], x1, y1) && this.isCharacterAt([...word][1], x2, y2) ? true : false
return tl || tr
}
opposite(a) {
return -a
}
solve(puzzle) {
console.log("--- solve part 1 ".padEnd(50, "-"))
const word = puzzle.split('')
const letter_positions = word.map(letter => { return { letter: letter, pos: this.findCharacter(letter).map(l => l.pos) } })
const starting_letter = letter_positions[0]
let sum = 0
for (let i = 0; i < starting_letter.pos.length; i++) {
for (let j = 0; j < this.#directions.length; j++) {
let [dy, dx] = this.#directions[j]
let coords = this.shootInDirection(starting_letter.pos[i].y, starting_letter.pos[i].x, dy, dx, word.length - 1)
if (this.checkForWord(coords, word)) sum += 1
}
}
let total_words_possible = starting_letter.pos.length
console.log(sum, "of possible", total_words_possible)
}
solve2(puzzle) {
console.log("--- solve part 2 ".padEnd(50, "-"))
const word = puzzle.split('')
const letter_positions = word.map(letter => { return { letter: letter, pos: this.findCharacter(letter).map(l => l.pos) } })
const starting_letter = letter_positions[0]
let sum = 0
for (let i = 0; i < starting_letter.pos.length; i++) {
let letters_in_both_dirs = true
for (let j = 0; j < this.#diagonals.length; j++) {
let [dy, dx] = this.#diagonals[j]
let upper = this.shootInDirection(starting_letter.pos[i].y, starting_letter.pos[i].x, dy, dx, (word.length - 1) / 2)
let lower = this.shootInDirection(starting_letter.pos[i].y, starting_letter.pos[i].x, this.opposite(dy), this.opposite(dx), (word.length - 1) / 2)
if (!this.checkForWord2(upper.flat(), lower.flat(), word)) letters_in_both_dirs = false
}
sum += letters_in_both_dirs ? 1 : 0
}
let total_words_possible = starting_letter.pos.length
console.log(sum, "of possible", total_words_possible)
}
}
const p = new Puzzle()
p.solve("XMAS")
p.solve2("AMS")

View File

@ -0,0 +1,140 @@
MXAMXAMMXSMSMXMASMMSMMMXXXMSSXSXMSASAMXSMXMASMAAXMASXMXAMXXAXMASXMMMSAMXAMMSMSMMSAXMMMMMXXXSAMXSSSMMMMXMAXSAMXSXMMXSASMSMAXMSMMMXXXSMMMSMMMX
XSAMXMMSAAXXXASAMXAAXMMMMMMAXASAMXASXMASXMSMSAMXMXASASAMMMMMXMAMAAAAMAXMASMAAXMASMMMASAMXSXMASMSAMMAAMMXSAMXMAMASXXMAMMAMAMSMAMSMSAAAXAAAAXA
XAMXAXAMSSMSSXMMXXSMSAAAAAMMSASAMMXMXMMMMMAAXMXAAMXSAMXMXMAMAMASMMMSSSMAASXMMMMXSAMSASASAAASXMXMMMSXSSMAXXMXMASMMMXMMMSASAMASAMAASMMMMSSMMSM
MMMMXMAXAXAAMAXSMMMXMMSMSSSXMASMMSMMXMAXASMSMSSMSSMMMMAMASXSASMSXSAMAXAMXSAMSAMXSAMSASAMASMMXMAMXXXXMAMASAMSSXMAAXMASASASXSASMSMXSASMXXXAMXM
SAASAMXMSMSMMXXAAASAMMMAMXMAMXMMASMMASASMMXXAXXAAXAAXMASMSMSMSAXAAAMSMSMMSAMSAMXMAMXASXMMMAXMMSXSMMXSAMASAMAMMXSAMXXMASXMAMAXAXXAMAMXMAMMMAM
MXMSASXAXAMXSMSSSMXASAMMMSSSMSSMASAXAMMMAXSMMMMMMXSMXMMAMXAMAMXMMSSMMMMAAMAMSAMMXMMMAMAMXXMMSAMXMASAXAMAMAMMXSAXAMASMAMAMXMAMSMMXMAMAASMXMAX
MSMSAMMSMAMAXMAXAMXMMMMSAAAAAAXMMSAMSSSMMMMAAXMSSMAMAMMAMMMMASMXXAAAXASMMMMMSXMMASAMASAMMMSAMXSASMMASMMSSSMXXMASXMASMASAMXSASXAAXMSMXSAASMSS
XAAMXMAMSSMMSMXXXMASXMAMMSSXMMSXMMXMXAAMMXSXMAXAAXAMSMSMSAMXAMXSMMSMMMSMSASXMAXSASAMAXAXAAMXSASMSXMXMAAXMXSXXMAMMMAMMASASAXMSMMMSMAAMMMMAAAA
SMSMMMSXMMAXSMXSSSXSAMMSMMMMMXXMMAMSMSMMAXMASMMXSMXMMAAAMAXMASXMAAMMMXMASMSASXMMASMMSSXMMSAAMXSXMASMSMMMMAMMMMAMAMSSMMSMMMSXXXMAXXMASMAXMMMM
AXAAAAXAASMMSAMSAMASMMXSAAMAAAXMSAMAAAXXXAXAXAXAAMXAMMMSMAMSAMMMAMSAMXMAMXSXMAAMAMAXMAMAMMMMSAMAMSMAAAAAMAXAASXSXMAAAAXMASAMXSSSMSXMAXAMXAMS
SSSSMSSMMMAAMAMMAMAMASASXMSSSMMASASXSMXMMXXXSAMSSMMMSAAAMAMMASASAMXAMXMASMMMSSMMASMSXMAMXAAXMASAMAXSSXSSSSSSMMMAMMXSMMSSXSAAAMAXASASAMXMSMSM
XXAXXMMAAXMMSSMSXMMSXMXXXMXXAXMASXMAMXXAXAAXMMMAAXMAXMSXSSSSXSXSMSXXMXXAXAAAXAXSAXAXAXSMSMSMMXMXXXXXAXMAMXAXXXSAMMAMMMAAXMMXSMAMXXXMXSAMAXAX
SMSMMASMMXSAXMASMAXMMMSMAMSSMXMASXMAMAXSMMXMASMSXMMMMXMAAMAMASAMASAMMSMSSMMXSAMSAMSMMMXAMXMASXMSSSMMMMMAMMSMSXMASMASAMXXAXASAMSMSSMSASXSSSMM
XAMAMMMSSSMMSMAMMAMXAAAMAMAAXASXMASMXSMMXSASXMAXXAAXSAMMMXXMMMAMAMASAAXMAMAAMMMMAMMAXAXXAMMAMAAAMAAXSASXMMAAXMSAMMASAMMMSAXAMXAAMXAMXMAXAAXS
MXMAMXASXSAASMSSXSASMSSSSSSSMXSASAMXAXAXASASMSASASAMMAMXMSMSXXMMXSAMMMMMAMXSASXSSMSSMXSAMXMAMMMMSSMMMMXMASMSMMXMXMASAMAAMAMMXSMMMMXMAMXMXMMA
SASASMXMASMMSXAMAMXXXAAAXAMXAMXAMASMXSXMAMAMAMASMMSMSMMSXAAAAMXSMMMMMSSSXSAMXXAXXMAXMAMMSMSMSXXXXAXSSMXSAMXMXMASXMASMSMMSAAXMAMAXSASXSSMSSSM
AASAXXAMXMMMMMSMMMSAMMSMMSMMSSMXMMMXAAXMMMAMMMMMXAAMMMAMXMMMSASXMASXAAASAAXSMMMMMMMSMXXXXMASAMXMSMMMAAAMXSAMASAMMSAMAXAXSASXMASAXMMXAAMAAAAX
MXMAMSMSAMAAXAXAXAXMSMXMAAAXAAMASAMMSSMMASMSXSXSMSSSSMSSSXMAMMMXSASMMMSMMMXMAAMAMASMMMMMXMXSXSXMASASMMMSMMASXMASAXAMMMMMSAMASAMMSSMMMMMMMSMM
XAMAMAAXASMSSSSSMMSAAAAMXSSMMXSASASAAAXMAXXMASAMXXXAXAAXAAMAMXMASASAAMAXXSSSSMXAXXSAAAAXMSMMMMASASXXXAMAMXXAMXSMMSSMXXXAMAMXMASAAAAXMSMSAMAM
SMXSSMSMMMAAAXAMAMMXMMMSAMMAMXMASAMMSMMMMSMMMMMMASMMMSMSSSMSSSSMMAMMXSAXMAAAAMSXSASMMSXXAAAAMSAMXSASXMSAXMMMSXXAXAMSXMMXSAXXMMMMMSMMXSAMXSAM
ASAXXMXAAMMMMMMMSMMSSMAXXXSMMAMXMMXAAAMXMAAASAMSASAXAXAAAAAAAAASMXMMMMMSAMMMMMAXMMMMMAMMXSSMMXMXMMXMAAMAMMAMAMSMMASXMAMMSMSXSMAXXAAXXMXMASAM
SMXXAMMSMMMXXXAAMAAAAMMMAXSASXSASMMSXSMMSMXMMAXMXSAMXMSMMMMMMSMMXMAXAAAAMAXAXMASMMAMMASMAMMMAMSSSMSMXMMAAMSXMAAASMMMMMSAMXSAASASXSMMSMXMASAM
MASXXMAXAMSXSSSSSMMSSMMAMXSAMASAXSAMSAAAAAMXMSMSMXXAXAMSMAMXXAAASMMMMMXSMSSMSSMMASMSMAXMMMAXMASAAAXXXXXMAXXAXMSMMXAAMMMASAMSMMMXAAAMAMAMASAM
MAMMMMMMAMAAMAMAXXMAMMMSXAMAMXMAMMMSAMXSMSSMAXAAAMSSMXAAMAMASXSMSAXMASMXMAXXAAASMMMMMSMMXSAMXSMMMMMMMMXXMAXMMMXAMMMMMAXXMAXXMASMSMMSAMXMAXAM
MAMXMAXXMMMMMAMMMXAMMMAXMXMAXAMXMASAMXMXMAAMAMSMSAAXXMSMSMSXMAMASAMXASAAMMSMSSMMMAMMAAASMMSSXMMSSMSAAASMSMSMMAMXMASXSASASMMASAMXAAMSMSMMSSSM
SMSMSMSAMXSASMMSAMXXAMMSXSSMSXMASXSMXMMAMXSMXXXXMXSXXMMAAXMAMAMMMSSMMSMMSXAXAAXXMAMMSSSMAMAXAAAXAASXXSMAAAAMMMXAXXXXAAAAAMSAMMSSSSMXAXMAXAXM
AAAAAAAXMAMXXAAXSAMSMSAMAMAMAMXXAMXXSASMSMMMMAMXMAMXMMXSMSSXMASXAAXAXSXMXXMMSSMMSXSAMXMXXMASMMMSMMMAMXMSMSMSASMSMAMSMSMMMXMASAMAMXMMAMMMMMMM
MSMSMXMXMASXSMMSMMAAAAAXAXSMMSMXSXMAXMMAAAAMMMMSMASXAAAXXMMXMAXXMXSMMSAMXAXAMAMXAXMASASXMMMXAAAXAAMAMSAXMMXMXSAXMAMXAXXAXXSAMXSXMAMMXMAMAXAS
MXMAXASXMASAAMXSMASXXSMSMSAMMAMAXAMMSSSSSMMSMAAXXXMAMMSSMAMMSSMSXXSMAXXMMMMXSSMSSSSXMASMMSXSSMASMMSAXSAMAMASAMXMMASMSMXSXMMXXXMMMSSMSSSSSSSS
MMSXSMSAMAXMXMAXMAMXAAAXMAAMSAMXMXMSAAAAXMXAMMXSSMASXXMAXAXXMAASXMXMAXMXSXXXXAAAAAXSMXMMXAAXXSAMXAXXXMAMXMAMXMAMSMSMMSAXSAXMXXXMAMAXAAAMMMAM
MAXAMMSAMXMSAMXSXAMMSMSMASXMMAXMSSXXMMMMMSSMXSAAAAAXXMXSSMSMSMMMASAMXSMAAAMMSMMMMMMAMAMXMMMMAXMMMAMSMSAMAMSSSSXXAASAAMXMASMSMSSMXMXMMSMMAMAM
MMMMMASAMXXSASASMSSXMAXXAMXXSXMSAMAAXXAXAMAXAMMSMMMSMMAAXMAMAAAXMMAXAAMXMXMAAAAAMSXMSASXAXSMAMMMSASXAAMMSAXAMASMMXSMMMSAMXMAAAXAMSMMAMXSAMAM
MSXSAXMAXMAMXMAXAAXAMAMSXMXXXMXMASMMMSMMSMMMXSXXAMXAAMXSSSSSSSMMXMAMSSXSMSMXSSSSMMAXSASXSXAMASAAMMSMMMXAMXAMXMAXSMXAXAAMXASXSMMXMAAMXSASXSSS
AAAMMSSMMMASMSSMSMSAMXMXAXASMMXSXMAAXXXAAAAMSSXXMSSSSSMAAMAAAAMASMMXMAMMAXMAXMXMAXXMMSMAXMMSASMSMAXAXXMXSMMSMXMAMXASMXSMSMSAMXAXMSXMAMXSAAAA
MMSMAAAAXMAXMAAAMASMXMSMMMAXAMAXAMXAMXMMXSMSAMMSXAAMAMAMSMMMMMMASAMXSMAMXMMMSMSSSMAMXAMXMAXMMXAAMXSSMXSASAAAXSXMMSAMXXMASAMMMMMSMAASAMAMXMAM
SSMMMSSMMMASMSMMMAMXXXSASMXMSMXSMMSSMSASAXMAMAAMMMSMAMSSMXSAAXMASAMAXXSMAAAMAAMAMXAMXXMXMSXSSMSMSAMXAMMASMMSMMAMAMAXXMMAMAMXMXASMSMMAMSSMXMX
XMAAXMXMASAXXXXAMXXXMMSAAAMAXMXAMXAAASAMXSMSSMASXMAXSSXMXAMSXMMAXAMXXSASMSSSMMMASMMXSSXSAAMSAXMXMASXSAMAMAMXMSAMXMAMMMMASXMSMMMSAMXSMMAAMAMX
SSSMMSASASXMXMASXMMSAMMMMMASAXMASXMMMMAMAMXXAMMAMXXMMAAMMSMMSSMASXMMXSAMXAXXXAMASAMSAAAMXMXSAMXMXMMXMSSSMSMAXSASAXAXXASXSMAAAAAMAMAXAMXSSXSX
AXAAMSAMAXMMSMMXAAASXMAMXXSMXMSAMXXSAMXMSSMSMMSMMMSMXSMMAXAAXXMAMAAXMMSMMSMSSXSASAMMMMMSSSMSAMXMMMMMAAXMAXSXMSAMAASMSMMXXMSMMMSSMMMXAMAMXMMM
SSMMMMAMSMSASAMSSMMSXSAMXMMSSMMASXXMASXSXAXMXAAAAAMAMMXXXSMMMMMSSSMMXAMXAAAXAXSAMXMMAMXAAMMMMSXMASAMMSSMXMASAMAMXMXASMSMXMXSSXMAXAXSSMMXAAAA
MAXAXMAMAAMASAMAMAXXAAXMAAAAMXAXMMXSAMMSSMMSMSSSMXMASMASAAAASMAMAAAAMSMMMSXMMMSAMMMMAMMMMMMMASMSMXASAXXMAMXASMMMMXMSMAAXMXAXMASAMXXXAAXSMSAM
MAMSMSSSMSMASAMXXMMMXMASXSMMSMASAXXMXSAMAMAAAMXXMSMMSAAXXXSMMMASMXMXMMASXXAXXASMMASMSSSXMAXMASAAXSXMMSMMMSMMMSAAAXSAMSMSAMMSMMMXSXMSSMMAXMAS
MXMXAAAMMMMXSAMSSMSAAXXXAAMAAMAMXXMAAMMSAMSSSSSMXXAXXMMMSXMAXXMXXAXXMSAMASMMMMMAXMSAMAMXXXXMXSXMXAMMAAAAAAAAAMMSMXMAMXAMMAMSAMXXMXMAMAXSXMAA
MASMMMSMAXXXXAMAAAXSMSMMSMMSSSXAMMSMMSXMXMAXXAAMASXMSXSASASMMSSMSXSSXMAMMMXAAMXSMXMMMAMAMSASASAMSSMSSSSMSSSMXSAXXSMSSMAMXSXSAMXMSAMASMMMAMMS
SSXSSMXMXSSSSSMMMMMMMAMAAAXXAXMAMAAAMXAMSMSSMMMMASAAAAMMSAMMAAMASMAMXSAMAASMXSAMMAMASMMAMSAMASMMAAXAMXXAAXAAMMAMAMAAAMAMMMAMXMAXSASMXAASAMMX
SXAXXXAXXAAXXAAXXMAMSAMSSXMMMMSAMMSSSMAMXAXXAAAMXSMMMXMXMXMMSMMAMMAMXSAXMMMAAMMSSMSAMXMXXMXMAMMMSSMMSXMMMSXMAMAMMMMMSMMSXMASAMXMSXMMSSMMMXXX
MMMMMMMMMMMMSSMMXMXMXMXMMMSXXASASAAAXXSAMXMSSMXXAMXAXMXSMMXMMXMSSMAXAXAXSMSMXMAMAAMASXXSASXMASXMAMXXXMMXXAMSASAMXASXXMXMAMMSAMSAMXMXAAAXSXMX
XAMASAAAAAAXMMMXMSSSXXAAXASXMXSAMMMMMXMXXAMAMXSMASAMXMMAMAAMMSAXAMSMMMMMSAAXAMAXMMMAMXAMAAASAMXMASAXXAAMMMXSASAMSMSASXSSSMAMMASAMXMMSSMMAAXX
SXSASXSSSSSSXMAMXAAAASMXMMSAXMMXMASAAXSXSMSMMAXSXMXSAXMAMSXSAMXXSXXAXMAAMXMMXSMSAAXAXMSMAMAMMSMSXMXSASXMASXSXMAMMMMAMXMAXMXSMAXSMAXXAXMAXXMM
MXMASAMXAAAXMMSAMMMMXMASMXMMMSMASMSASAMASMAMMMMSXSASAMMSMXMMXSSMMASMMSXSSXSAMXMAXASAMXAAASXXXAAMXMASMMASXSAXXSXMASMMMAMXMMAXMSMMXSSMMSASMSSS
SAMXMAMMMMSMSAXSMMSMMSXAMSXMAAXAMXSXXAMMMXAXMMAMMMAMASAXMSXMAXASMAMMAMMXXAAAXXMAXXXMASXMMSMMSMSMAMMSXSAMAMXMXASXMSASXXSAMSAMXMASAMXMXMAMAAAX
MXMAMSXSSXXXMXMXMAAAAMMMAMAMSSMSSMMXSAMXASMSSMASXMXMAMASAMXMXSAMXMSMAMSAMSSMMMSSXMASXMXSXXAAMXMMASAMMMMMXMMXXAXXASAMXMMAXSXMASAMMXAMXMAMMMSM
XASASMAAMAMXSMMAMXMSXMASASMMMMAAAASASAMMMSAAAXXMASXMXMAMXMASMXASMMMXMSMXXXAXXAAXAMXMAAASMSMMSASMXSAMSAMMAMXMMMMMXMASASMSMSAMXMAMXSSMMMSSMAAX
SASMSMMMAAAXAASASAAMMSXSASXAAMMSSMMAMXMAXXMMMSMMMAXMAMASMMMSASXMMAXAXMASXSMMMSSSSMSMMMMSAXMXSAMXXXAMSASXMSMXAAASAMXSXSAAAXXMASXMAAXAAAXAMXSA
XXXAXXXSSMSSMMSASMMXASAMXXXMMSAAMXMAMMXSXMXMAAAAXMAXMSAMAAAMXMAASMSSSSMSAMXAAMXAAXMASMMMXMXMMMMSSXSMSAMMXMAXMSMSASAMAMXMMMAMXMXMAMMMMSSXMSMM
XSMSMAMAAAAXXXMAXAAMSMXMMMXSAMMSSXSAMXAMAMAMSSSMMSMSAMXSSMSSSMMXMAXAMXAMAMAMXSMSMXXXMAAAASXMAAAAAAXAMMMAXXSSMXMSMMASXMSXSSSXASMSSMSSMAXMXMAS
MAAAMAAMMMMSMXMXMMXSXAXASMAMASXMAXXMSMASAMMXAAAAAXMAMXMAMAMAMXSAMXMSAMXMAMASXXAMMAMSSSMSSSXSSMSSMXMAMXMMMXXAMSASASAMAAXAMAMMMMMAAMAAMAXMMSMM
AMSMSSSXAXXAAAMXSSMMXMSMMMMSAMAMSSXMAMMMMMSMMXMMMSASMMSAMMMXMAMAXAAXXMAXXSASMMSMMASAAAAXAMAMAXMXXSSSMASXAMSAMMAMMMASXMMSMSMXSAMSSMSXMSXMAAAX
SMMMAAMMMMSMXAXAMXAMAXAMASXMMSSMAAASXSAMXAMXMAMXXXAAAAMAXAMXMAXSMSSMSASXXAMXAXAXSMSMSMMMSMSMMXSAMMAASASASAMAMMSMXMAMXMAXXAAXXAMAXXXAMXAASXSM
MAMMMSMAXMAMSSXSMSSMMSMXASAAXAMMMSMMAMASMASXSMSAMMSMAMXAMSMMSASXMMMAXAMXMASMMSSXSAXXMASXAAAXXASASMSMMXSAXMSAMMMXSXAXAXSXSSSMSMMMSAXMAMMMXAXA
MSMAXAMMMSMXAMXXAAAAXAMMXSXSMMSXMAMMMMAMXSMAAXXAXAXMXSMMXMAAMSSMAMMXMASMSMMMAAXAMXMXXMMMMMMMMMSAMMAAXAMASMSASXMAMSMSMSMAXXAXXAAAMMSMMMXXMXMX
MMSXSMMSMMXMASAMMMSXMAMSMSMMAXMAXXMMAXAMXMMMMMSAMXSXASAMASMMSAMMAMAXMAMMAAAMMMAMMSAMXMSXSAXAAXMXMXXMMXMXMASAMMMSMMMAMAMMSSSMSSMXXAAAASXAAXXS
SAXMAMAAAXXSAMASMAMXMXXAXSASAMSMSSMSASXMXMAXXAXXAMXMAMAMXXAXMASXSSSSMAXSSMMSMXMSMXMMXXAASASMSMSSMMMMXMASMXMAXMMXAXMAXAAAXMAAXXSMMSXSMSAMXMXM
MASAXMMXSMMMASAMMASASXSMSSXMXMAXAAAMASAAXSMMMSSMXMASMSXMXXSMXMMAXAAMXSMMASMXXAMAXAAMSAMXMXMXAAAAAAASAMSXMASXMSMSXMSMXSMMSSMSMSXXAAAMAXXMASAM
SSMMMMSMMAAMAMXSXMMXXAAXAMAXAXMSSMMSXSAMXSAMAAAAMMXMXAMXSMMASAMSMMSMAXAMMMSASMSSMXAAMAXMMMMMMMSXMMXXAXAMXMSAMSASXMXXAMASAAXAXSAMXXXXASMSXSAS
MAAXAAAASMMXMSASASMAMMMMASMMSMXAXXAMASMMASAMMSSMSMMMMXSASASXMASXAMAMAMMMSAMXSAAAMSSSSMMAMASAAAMXSXMSMMASXXMAMXAMMSAMSSMMXMMMAMAMAMMMXMAAAXAX
SSMMMSSMMASAXMAMAMMAMSASMXMAXXAMSMAMAMAMXSAMXMXAAXAMAAMASAMMXMAMSMMMMMMMMASAMMMMMAMAAMSXSASMSXSAMAMAMSAMMSMMMMMMXMAMAAMASMMXASAMAMMAAMXMSMMM
MAAMAMXXAASXSMSMSMSXSAXASAMMSXMXXMAMAMXXXSMXAMMMMMSMMSSXSXMAMAAAAMXAAASAMMMMSXSSMMSSXMAAMAMAMAMMSAMAXMASAMASXSMAXMMMSXMASAAXXMAXMSMSSSMAXAAX
SSMMAXMXMXSASAXAAXXMAMASXXSASAMSXXSXSAMXASASMSASXMAXAMXAMMMXMSSSSSSMSXSAMSAMXAAAAXAAAMMSMMMAMAMXXAXSXSXMASXMAXAXSXMAXAMXSMMMSSSMASAMMAMXSMMM
XMASMSMAMAMMMXMAMMMSMXSAMXMASAMAMXXAXMMAAMAMAAMXMASMSSMXMAMAXAAAAAXAXAMAMSAMMXMSXMASMMAXAMMSSMMSXSXMASXSAMMMSMMMSAMASAMXXAAXXAXMMMAMSXMASMSM
MMMMXAMASASXMXSAMXAAXSAMSMMAMMXSSMMAMXSXMMAMXMSXMXAAMAMMSXSMSMMMMMMSMMMSMSAMMXXMAMAMAXXXAMAAAAXXAXAMAMXMMSAAAAAASMMMSAMMSXMSMMMMXSMMSAMAXAAX
AAAXSSSMMXSAXAXAXMXSSXXXAAMXSXAMAXMAMMXASMMSSXMASXMMSAMAMXAAAXAAXXAXXSAMXMAAMMMSAMAMSMMSSMMSMMMMMMAMAMXSASMSSSMMMXXXSASASAAAAAAAXMAAMAMMMSMS
SMSMMASASASAMSSMMMMXMAMXSSMXXMXSAMMMSASMMAMAXASASXMASAMSSXMSMSSSXMMSAMASAMSMMAAXXSXXAAXAMMMMXXAAXMXXASXMAXXAMXXAMSMMSMMASMSMXSSSMSMMSXMAMXAA
MSMAMAMXAMMMXXAMASAMMSMXAMXSXAXXXMASAMXXXXMXXAMMSAMXMAMAXAXAXAXMASXMMMAMMXXASXSSMXXMSSMASXXAAMXSMMXSAMAMAMMSSMSSMSAMSXMXMMAMXMAMXMXMXXXAXMMM
MASXMSMSMXAXMSMMAXMXAXMAMSAMMMMMXSXSAXMMMMMSXXSMSAMAMSMSSSMSMMMSAMAMASXSXMXAMAMXMAMMAXMAMAMMMSAAAAXMMMAMMXAMAAAMASMMXMAXMXMXMMAMASMSMMSSXMAS
SAMXSMASXSXSAAXMXSXMMSAMXMAXAAAMXMASXXAASAASAXMASXMAXAAAAMAXXAAMASXMAMASXMMSMMMAMASMXMMMSMAMAAMSMSAMXSXASMMSMMMMAMMSSSMXSAMSSSMMAMXAAXAAASAS
MASXXMAMASXAXSXSAAAXAAAXMSXMMSMSAMXMASXSXMMSAMMXMMSMXMSMXMAMMMSSXMMMMXAMXMAAAAMXSSXXAXAAXXSSXMMXAXMMMAXAXMAMXMXMXMSAAAAASASAAMXMASMSMMMMMMAS
XAAMXMAXAXASMMAMXSXMAMMMMAMXXMASASMXMAXMXSAMAMXAAXAAAXXMXMMMSAAXAAMASMMMXMXSSMXAXAMSSSSXMAMXAXXAXASAMMMMMMASASAMAMMMSMMMSXMMXMASMMMAMXSASMMM
MSXSAMSMSSXAMMSMAMMAMASMMAMXAMASMMAMMMXMAMMSSMSSSMMSMXAMXMXAMMMSSMMAMAXMAXMXMMASMMMAAAAMMMSSMMSXMASAMXAAASXSAXMMASXMAXSXMXMXXSASAMASMASASAMX
XMASASAAMAXMXAAMMSSSMXMASASMAMAMASXMAAAMMSAAAAMAXXXAXSSMXMMXXXXAAXMAXMMXASMSAXSXAAMMMMMSAAXXSAXXAXSMMSSXXAMMMMASASASMXXAXMXAXMASASXAMASAMAMS
AMAMSSXSMSMXMSSXXAAXXSSMMAMXAMXSMMMSXSXSAMXMMMMMMMXXXXMAMXSMMXSMSSSXSAMXXAAMMSMSSMSMMSXSMMMAMXXMSMXAMAAXMASAASXMASAMXASXMSMMXMAMMMXMMASMMSMS
SMMSAMXMXXAXMAMMMMSMMXAXMXMAXMXXXAMMXMASMSMMAMSXMAMMAMASMMAASAXSAAAMAAXMMMXMXAAAXMAXASAMXSMSMSSXAMMMMSSMMXMXMMXMXMMMXMAXAAAAAMSSSMAXMMSMAXMX
XAXMASXSASMMXAMAMAAAXSMMMXMMSSMMSMMMSMASXAXXAMAXMASXASAMAMSMMASMMMMMSSMMXSMSSMSMXSASMMXMAAXAASAMXXAMXMAAXSSSMSMXMMXMSXMMSSSMXMXAASAMXMSMAXAM
MMMSAMXSAMSAXMXSXMMSMMAASMSXAAAAMXAAXMAMMMXMAMMMSASMXMASXMXXMXMXSXXAXAAXAAAAAXAXAMASXMMMSMSMXMASMSMMAXMMMAAMSAMMSMAASAMXMAMMSSMSMMMXAXMMMXSA
XMASAAAMXMASXMAMASAMASXMSAXMMMMMSSMSSMSSMASXSMXAXAXMMMXMXXMASXSXSAMXSMMMSSMXXMMSAMAMAAXMXXAXMMXMAAASXMSSXMMMSXSAAXAMSAMXMASMAAMXMAMSMMSAMAXM
XMASMMXMXXMXMMMSAMASXMAAMXMMXSXMXMXMAXAAMASAXXMXMSAMXXAAXSSMMAASXAXMSAMXMAMSMSXSXMMSXMSMSASMMXAMMMMMXAASAXXXMAMMSSSMMXMASXXMAMMXMAXXAASXMXMX
XMAMMXMXAMXMSAMMASAMMSSMMMXAASASMMSSMMSSMASASMSXMMMAXSMSMMASXMSSXSXAXASMMMMAASASXSAXMMAAMXAASXMMASMMMMMSMMMXMASMXXAAMMXXSSXMASMXSSSMMMSASMSM
XXMAAMSAXAAAMAXSAMAMAMAASXMMXSAMXAAAAXMAMXMAMASAMMSSMAAAASAMXXMMAMXSMMXXASXMSMAMAMXSXSMMMMMSMAASASAMXMAXAAXXXXXXXMSMMXXXXXXAXXXAAXAAMMSAMAAA
MSMSMAAMXSXMSAMXASAMAMMMMMSXAMAMMMSSMMMXAMMAMMSAMAAAXAMSXMASMMMMMMAAAXSSMMAXMMAMAMMMMSXMAMXAXSMMSXXMXMXXSMASMSMXMXXAXMASMMXMXMMSMSMMMMMMMSMS
AXAXXSMXMMMMMASXMMMSASXMAXSMMMAMXAMMAAXXMAXXMXXAMMMSMSXMAMXMAAAAASMMSAMASMSMMSASMSAAASASMSSMXMAMMSSMSMSXAMAMAAXMMAMXMMMXAMMMAAMAAAMAXXAMMMMM
SMXMAMXAAAAMMMMXXAASMSAMXSXAMSMSMSSSSMXSMMASASXSMSXMAMAMASMMSSSMXXXSXXMAMXAAXXAAXXMMXMXMMAMMAMAMMAXAAASMMMAMXMMXMASASXMSMMASXMSMMXSASXXSAAAX
MMMSMSMSSSMSAAMXSMMSSSMMSMXXMAASAXXAAAMSAMASAMAXAXMSMSAMMMAAAAMMMXSMMAMSSSSSMMSMSMMMMXMMMXMSAXXSMMMSMSMAXSXSAXMASXSXMAASXSXXSMXXSAXXAAASXSMS
MAAAMAAXAXASMSMAXAXSAMXXMAASXMMMAMMSMXMXAMMSAMAMMSMXAXAMXMMMMXMASXMASAMXAAAXXAAXAAMXSAASMSMSMSMMAMXMMXMXMMASMSMAMMXMSMMMAXMASXMAMMSMMMMMAXAA
SMSSMMSMAMXMAMMSSMMMMMSAXMXMAASXMMXAAMSSXMASAMXSAMMMMMSMSAAAAXSXSASMMSSXMMMMMSMSAMMASMSXAAAMMAASXMAXMASXXMAMXMMAMAAMAXASMSMAMMXMAMAMXASMMMSM
XAMXMMMMMMMMMMAMAMAXXAXMASMSSMMAXMXMXAXAAMMXAXAMXXAAAAAAASXMXMMASMMAAAXAMAXXAAXMASMMSXMMSMMXSSXMAMSSMMXAMMXXSXSSMSASASASXSXSXMASAMXASXMAXAMX
MXMAMAXAAAAAAMMMAMXMAXXXSXAAAMSSMMAXMSXSSMXSSMSMASMSSSMXMMXMMAMAMASMMSSSMMSMMSXSAAMXMXSAXAMAMMMSMMMAASXSASMXMAMAMMAXASXMMMAMASAXXSXMAMSMMSXS
XXSASXSXSXSSSSMSSMSSSMMMMMMMXAMXASASAMAAAXXAXAAMXSAAAMMSSMASAMMSSMMMXMAMAXSAMXXMAMMAMXMASAMSMMXXXAMMXMAXMAXMMAMAMMAMMXXMAMMSAMXXMMMAAAAXAMAS
SASASASXMXMAAAAXXAAAAAMXAAAMSSMSAMXSMMMSMMMSMSMSMMMXMASAAXMASMAXAXAAAMASXMMXMMXSXMSASMMMMMMMAMXXSXSMSMMMASMASXSMSSSMSMMSMSXMXXSASASMSSXSAMAM
AAMAMAMASMSMMMMMMMMSSMMSXMXXAAAAMAAMMMMAAAXXAMMSASXAXMMXXMMMAMXXXMASXSXSMAXMMMMMAXSASXSXXAAXAMSXSAMAAXXASXAMXAAXAMAAXAXXXAAMAXMMSASAAAXSXMAS
MSMMMXMSMAAMASAAXXAAAAXSMSMMMMMMSMMMAASXSMMMXMAXAMSXSAMSSSXXMAXSAMXMASXSMSMSASAMXMMXMASMSMSMMMSAMAMSMMXSAAMMMMMMSSMMSSMSMMSMXMSXMAMMMMMMXSAM
XAAAXASAMXMXASAMXMMSSSMMSAASXSSXSASMSMSAXMASAMXMSMMXMAMXAAAXXAASXMASMMAXXMASASXMSMMMMAMXAMMASAMXMXMAAASXMSSMAAXAXXXXMAASAAXASAMMMMMMAMXMASXM
SSSMSXSASMSMMSAMSAMXAXAXSMSMAAAASAMAXXMAMXAXAXAAAAMAMSMMSMMMMMMMSMASMMXMMMXMMMAMXAASMASMSMSAMASMMSSSMMXAXAAMSSMSSMXASMMXSMSAMAMSAMASASAMXSAX
MAAMXMSAMAAMAXAMSMMSSMMMSSXMSMMMMXMMAMSMMMSSMSXSMSMSAAMAMAXXAXAAXMAXAMAMXAMMSSSMSSMMSASAXAMXSAMAAAXASMSSMSSMXMXMAAMAMXMXMXSXSXMMAMASMSASASMM
ASMMAAMAMXMMSSSMMAXAAASAMAMAAAASMXMXMXAASAMAMAMMAAAXSMMASXMSMSMMSMASMSMMAMSAAAAAXMAXMXMXMAMMMMSMMMSMMXAMXAMAMXAMXMAASASXSAMAMAMXXMXXAXXMASXA
XMAMAXXXXSXAAXMASMMMSMMASMMSMSMSAASASMSXMMSMMAAMSMMMMXSASMMAAXXASMMMAAASAXMAMMMMMMSMMSSMSAMAAXXMAMAMXMXMMXMMMSMSMMSMSAMAMMMAMXMAXSSSSSXSASAS
SSMSMSMMMMMMSSXXMSAXMAMAMXMXAMAMMMSASXXASXMXXXMAXXSXXAMAXXMMXMMMSASMSMMMMXMXSASXXMAMXAAMSMSXXSASMSMXSASXSMSAAAAAXMAMMAMAMXSSSSMXSAAAAAXMAXAM
XAXAAAAAAAAAXAXSAXSXSASMMMSMMMAMXXMXMASAMXXSXSXSMMAAMSMMMSXSASXMSAMXMASASAAMSAMAMASMMMSMMAMXAMAXAAMXMAMAAASMSSSXXMAXSXMXSAMAAXAMMMMMMMMMXMAM
SMMMSMSSSSSSMXMMAMXMMASAAAMAMSXMXMASMAMAMMXSAMAAXMMXMAAASXASASMXMXMXSXMASMSMMSMSAMMASXXAMAMMXMMSSSMSMSMMMXMAMXMXXSSMSMXSMMSMSMSMXMSXSXXAASXS
AXAXXXXMAXAXAMXSAMAAMMMMMMSXMMXMASAXXAXAMXSMXMXMAMMMSSSMXMXMMMMMMAMMMMMMMMXMAXXXAXSAMASXMXSXXAXAAMAXAAXASAMSMSMSMAMAMXMSAAXAMAMXXXSAMXMMMSAM
SXSSSMMMMMMMSMAMAMXMSASXSASXMAAAMXMMSMXASMXMASAAAXMAAMAMXMAMXAAXSMMAMAAAMMSSSMMSMMMAMAMXMAMMSMMMSMAMMMSSMXXAAAAXMAMXMAMMXMMMMAMMMMMAMMMSMMAM
ASAMXAAAMAMAXMXSAMSXXAMAMXMASXSSMXAAAMMMMAAXASMSSSMMMSAMASMMSSXMAAASXSSXSAAAASASASXSXMMAMMSAXAAXAMASAAMMXXSMSMSXMASASXSMAAXASASXAAMAMAAAAMMM
SAMXSSMMXAXXXAXMMXMAMMMXMMSMMAMAMSMMMSAMXSMMMXMAXAAAXSXSMAMXXASMSMMAAAAXMMMSMMMSAMXXASXSSMMMSSMSMSASMSMAMMAXXAMXXMXAMAAXXXSAMAMMXSXSSMSSSMSM
MMXAAMMMSSSMMXMASAMAAAAMAMXXMMSAMXAAASAMAXXXXAMXSSMMMMMXMASXMAMMAAXXXMSMMSMXAMAMXMASMMAXSAAXXXMAAMASAXMAXMAMXAMXASMSMSMMXMXXMAMXMMAAAXAXMASA
MSMMMSAXXAAXXAMMSASASASXSAMXMAMMMSMMXXAMAXXMSMSAMXMXAAAASASXMSMSSMMMMXMAMSASAMXSXMASXMMMSSMSMSSMSMAMMXMASASASMSAASAMMMAMXMAMSAMXAXMMMMXSMAMS
MXMMASMSMSMMSMSASXMAMAMXMASAMSMSXMASASMMSXSAXMAMSAXMXXSASASXSAAMXSAAMASAMMAMXXAMXMAXAAMAMAXXAXAAAMSSSMMMSAMAXAMMAMAMXSASXMAXSASAMMMSMSAMMXSA
MAMMASMMAAAXMXXXMAMAMAXMMAMXMXAXXSAMMSAAMAXSSSXMMMSSSMXAMAMXAMSMASXSSMSSSMAMMXMMMSMSSMMASMMMSMMSMSMAMMAAMMMAMMMXMSSMMSAMXMMMSAMMXSAAXMASASMM
XASMMSASXSSXMASMSXMSSSMSXMASAMAMMMMSMMMMMSMMMMAMSMAAXAMSMSMMXXAMMMXMAAXASMXXSAMAAAMMAASASAAAXAAXMXMAMSMXMASXMMAXAAAAAMAMAMSAMXMAAMMSMSMMMMAX
SASAXMAMXXXMSAMMAASAAMAMASAMAMXMXAAXXAXSAMAMASAMAMMSMMMMAMAMSMMMMSASAMMMMMAASASMSSSMSAMXSXMSSSMSXXMAXAAMMMMMXXSSMSSMMSSMAASAMMSMSSMXXSMMSSMM
AASXMMSMSAMXMAMMMMMMXMMSAMXSSMMSMMXSSSXMASMSASASXSXXAXMMSMSAAAXAAMXMAMAXAMMMSAMXXAAXMASAMXMXAAAXXMMSSMSXASAMAXXAAXAXXAXMXASAMXAXMAMSAMAAXAMM
MXMXMAAAAAMSSSMXMASXMMXMXSXXXAAMASAMXMASAMXMXSAMXMMMSAXAXAAXSSMMSSMSSSMMMXXXMASMMSMMXAXASXMMSMMMMMSMXAAMXXAMXMSMMMMXMASMMMSMSSMSSSMMAMMMMAMX
SSMAMSMMSXMAAAXMSMSAAXAXMMXMSMMMXMXXAMMMXSAMXMMMXMAAXAMXMSMXXAMXMAMXXAMSSMSXSAMAAMAMMMSAMAMAMAASAXXXMXMMMSSMAMMXAAXMSMXXSAMXAMXAAAXSXMSXXAMA
AASXXXXMMMMMSMMMAMSAMSXSAMXMAMSMSMSMSMSAMXMXXXAAASMMXXXXMXMMMAXMMMSMMAMMAAMMMASMMMAMAAAMSXMAXSMSSSMSMSXMAAASMMMMSXSMAMXMMMMMMSMMSMMAAMAXSAMS
SAMXMXMAAXXXAAASAMXAMAMSAMXMAMAAAAAAAAMAMMMSMSMSMSAAASMMSSXAMXMSAMAAXAMSMMMSXMXAASASXSSXSMSMXXAXASAAMSXMMXMMMASMMASXMSSSSSXSXMAXAMXSAMAMSAMA
AMMAMASMAMXSSSMSMSSSMXMSAAASASMSMSMSMSMSMAAAMAAMASXMASAAAMSSSMMSASMSMMMAASASASXSMSASAXXAMXAMMMXMXMSMAXXMSSMASASASMXAXSAAAMSXAXMMASMMAMXMMXSM
AAXAXXSMAMMMAMAXAAAXXXMMMSXSAXMAMMMMAMAAMMXXSMSMMMXMXSMMXXAMXAAXAMXAAXAMXMASAMXAAMAMMMMSMMXMXAMAAXMMSXAMAAXAMXSAMXSXMXMMMMSSMMMXXMASAMMAMASX
MSSMMMXMAMAMAMXMMMSMSXSXAXAMAMSXSAAMAMSMXSAMSXMAXSXMMXMASMMMMMMSMSSSSMMXAMAMAMSMMMAMXAAAAMAMSMASAXXAMXMMXSMXSMSASASAMMMSAMXAMAMSMSMMASAMMASX
XAAMSSMSMSXSMSAMAAAXAASMXMMMSMXASXSSSMMAAAMXMASAMSAMSAMMSAMSMSXXXAXMMAXSXXXSMMSAAXASXSXSSMAXAAXMAXMASMXSAMMAXXMAMAXSAAAAAMSMMMSAAAXSXMMXMASX
MMSMMAAXAAASASMSASXMMSMAMAAAMMXMXMXMXAMMMMXMXAMAMSAMSASAMAMAAXAMMSMXSAMXSXAMAASXMSMSAMXAMMXSMSSMSMSAMXAMASMMXMMAMAMXMMSSSMAAMXSMSMXAMXXXMSSM
XXAAMMMMMMSMAMAXXXAMMAMSASMSSMASXMAXSAMXXXSMSASMMSMMSAMXSSMMSMAMAAAAMASAMMSMMXSAMAXMAMMMMXMXXXAAAAXASMASXMXAASMSMXSMXMAMMMSMSAXMAMXXAMXMXAXX
SSSSMMXSSMXMMMAMMSXMMASMMAAAAXAXAMAXXMXMMMSAAXXMASMXMSMAMXSAAXMMMXSXMAMAMAAXMXSMMMSMMMAMSXMSSSMMMSMMMMAXMAMMXMAAMMMAAMAXSXMAMASXMMSXSAAMXMSX
AAAMXSAAAMXXAMXSMAXXSMSMSMMMSMMSSMMMSMAAAAMMMXSMMMSMAAMAXAMSMSMSMAXASXSXMSXSXAMXSSXMAMAMAAXAMMAMXMXXSXAMMSMMAMSMSXXXMSMMSAMMMMMAAASMMMAXMXAM
MMMMAMMSMMMSMSAMMASMSASAAXMAMAXAMXMAXSAMMXSMXMXAAXAMMMMSMXMAMAAAMAMMMAAXXXAXMXMAMMAAMSMSSSMMSMAMXMAMSASXAXAMMMXAMMMSMSXAXXMASASMMXMASXSMSSSS
XXXMAXMAASAAAMASXAXAMAMSMMMSSXMAMAMAXAMXSAMXXMSSMSMSMMAAXMSXSMSMMXMXMSMMAMMMMAMASMMMXMAAAAXMAMASXMSXMMMMMSMMXAMAMAAAAXAMSMMMSASXMMSMMAMAAAMX
MSMMXSMSAMSMXSAMXXMMMSMMSMAAAMXSSSSXMASAMASMMAXAASXAAMSSMMMMAXAMXAMAMAAMMSXAXMSASAAXAMMMXMASXSXSAXMASAXXMAAXMMSSMMSMSAXMAXAAMAMMMAAAMSMMMSMM
MMAAAAAMXAXMXMASMSMSAAXAAMMMMMAMAXAAXXMMXSMXAMMMSMMMSMAAXAASXSMSSSSSSSXMASXMSAMASMMSXXXMSXMMAAXSAMMAMXSMSSSMAXAMXXMAMAASXSMMSAXAMSSSMMASAXMM
SSSMSSXSMSMMSMSAMAAMMSMSSMSASMXSASMMMSMMMMAXMXAXAAXMAMXMSSMSAAXAAXAMAMXMXMAXMXMMMMMMXSAMASASAMXSASMSSXXAMAMXSMMXMXMAMAMXAXAAMMSMXXXMAMAMXSAM
MXXAAXXXAAXAXXMASMXMXAAMAAMAMAAAXXAAAXAAMMAMMXSMSSMXXSMXXXAMXMMMXMMMMXXMXMXMMSMMAMXAASAMASMXMXXSAMAXXXMMMASMMXSAMXMAMMXSXMMMXMAMXSMSSMMSXSMM
AMMMMSMMSMMMSMSMMXASMMSMMSMMMMSSSSSMMSSMSMMMSAMXMMMMMMMMSAMXAXAMSSXAXSAMAMXSAMXAAMMMXSMMXXXAMSMMSMSMMMSASXSAMAMASMSMSAAAMMXSAMXMAAMAAAASAMXA
SXXMASMAAXAAAXAMXMASAMXAAXASAMXAAAXAXMMMXAAMXASAXAAAMAASAMXSSSSSXSAMXSASAMSAMXXSSSXSAMXASXSASAAAAMAAAASASMSAMMSAMAAASMXMAXASASAMSSMSSSMMAMAA
XMASXSMSSSMSSSMSXMASMMXMASXMASMMMMMXAAXSSSMSMXMASXSSSMSSSXXXXAMXAXMSXSAMASAAMAMMXXXAAXMASXSMAMMMSSSSMMSXMASXMXAMMMMMMXMXXMASMMAMMAMXXXASXMXM

10
2024/06/example.txt Normal file
View File

@ -0,0 +1,10 @@
....#.....
.........#
..........
..#.......
.......#..
..........
.#..^.....
........#.
#.........
......#...

73
2024/06/index.js Normal file
View File

@ -0,0 +1,73 @@
import fs from 'node:fs'
let map = []
function init(filename) {
const data = fs.readFileSync(filename, { encoding: 'utf-8' }, data => data)
map = data.split('\n')
const guard = new Guard()
guard.position = guard.find()
console.log(`guard is at ${guard.position}`)
guard.solve1()
}
class Guard {
constructor() {
this.position = [0, 0]
this.visited = []
this.dir = [-1, 0] // y, x - looking up
this.steps = 0
}
rotate() {
const [y, x] = this.dir
if (y === -1 && x === 0) { console.log(`going right`); this.dir = [0, 1] }
if (y === 0 && x === 1) { console.log(`going down`); this.dir = [1, 0] }
if (y === 1 && x === 0) { console.log(`going left`); this.dir = [0, -1] }
if (y === 0 && x === -1) { console.log(`going up`); this.dir = [-1, 0] }
return this.dir
}
find() {
for (let y = 0; y < map.length; y++) {
for (let x = 0; x < map[y].length; x++) {
if (map[y][x] === "^") return [y, x]
}
}
}
goStraight() {
const [y, x] = this.position
const [dy, dx] = this.dir
this.position = [y + dy, x + dx]
//const iWasAlreadyHere = this.visited.some(visits => visits.split()[0] === y + dy && visits.split()[1] === x + dx)
if (!this.visited.includes(this.position)) this.visited.push(this.position)
this.steps += 1
}
isLeaving() {
const [y, x] = this.position
const [dy, dx] = this.dir
return x + dx < 0 || x + dx > map[0].length || y + dy < 0 || y + dy >= map.length
}
isBlockAhead() {
const [y, x] = this.position
const [dy, dx] = this.dir
return map[y + dy][x + dx] === "#" ? true : false
}
isStillOnMap() {
const [y, x] = this.position
return (y >= 0 && y <= map.length) && (x >= 0 && x <= map[0].length)
}
solve1() {
console.log("y", map.length, "x", map[0].length)
this.visited = [this.position]
while (this.isStillOnMap()) {
if (this.isLeaving()) { console.log(`ran ${this.steps} steps`); break }
if (this.isBlockAhead()) this.rotate()
this.goStraight(this.dir)
}
this.visited = Array.from(new Set(this.visited.map(JSON.stringify)), JSON.parse);
console.log(this.visited.length)
}
}
init('input.txt')

130
2024/06/input.txt Normal file
View File

@ -0,0 +1,130 @@
....#...................................#...............#.................#.......#...#...........................................
.........................#.........#....................................#...........................#......##..............##...#.
.....................................................................#.........................................#..#...............
.............#........#...............................................................................#......................#....
....#.#.................................#......................................#...#..#..........#....#.....#.............#.......
....................#.......#..............#.......#.#.............................#......................................#.......
..............................................................................................#......#....................#.......
.........#.#..#...............................#........#.#........................................................#..............#
....#...........#.......#.......#....#...#....#..........#..........#......#...#................#.........................#.......
.......#...........................................................................................#.................#...........#
..................#.#....#..............................#....................#.................#....#..........#..........#.......
...#...............#...................................................#................#.........................................
.................#..#.#.............#.#...................................#......................#....#..........#................
.#..................#........................#..........#...........................#.......#......................#.#............
......#...........................................#.....#.....#...........#...........................#..............#............
.........#...............................#.............................#.#.......................................................#
...#.........#.#........................#...#..............................................#...#...............#...#..#...........
..............................#.....................................#................#..........................#.........##......
..........#...........#.....#......#......#..............................#.....#......................................#...........
..........................#....#.........................................................#..................#...#.........#.......
......................................#...........#.........#...............................#.............#...............#.......
.......................#........#.#....#...#...#................................................................#......#..........
......................#...............#................#..#.#...........#...#.......................#.........#.........#..#......
....#.................#..........#............#....#..............................................................#.#.............
.........................................................................................................................#...##...
.....................#.......#................................................##.............#........#........................#..
........................#..#.....#.#...............#.......#.................#.............................................#.#....
......................................................................................#..#.............................#..........
..#........................................................#..........................#..............#.#.....................#....
...#...................#............#...#.....#....#..................................#.......................#...................
...#...........#..............#............................................................#....#.....#.....................#.....
........................#..............#...................#.....#..#.............................................................
.....#....................#....................##..........#..............#......#...............#..........#.....#..........##...
....#.......#..........................................................#....................................#.#..................#
#......#.#.................................#........................................................................#.........#...
...............................#......#......................#....................................................................
..............#..........................#....................................#..........#.............#..........................
.....#........#....#.........................#..#.................#.#.................#...........................................
.................#..................#.#................................#..#..................................#......#.............
...........................#.......................................................#...................#............#.............
.....................#.........#..#..........................#..................................#........#........................
..#................................................#.#.................................#.#..........#.....#......................#
..........................................................................#..................................................#.#..
..................................#..........................................#......................#.............................
.......#...............#..............................................#......................................................#....
..........................................^....................#..................................................................
.........#.........#.........................................................................................#......#....#........
.........#.........#..............................................................................................................
........#....#......................#...............#...........#..................#...........................................##.
......#............#...........#................................................................#.......#.........................
#.............................#..............................................................#..............#.....................
...................................#...........#...................................................#........#..........#..........
....#.....................................................................................................#...........#......#....
....................................................#....#...................................#....................................
............#........#............................#..........#.............................#.....#..#.#...........................
...........#.................................................................#.............#......................................
....#.........................................#.#.......#...............#...........................#............##...............
..................#..............#...#........................................................................#....#...........#..
.....................#.....#...#.....#.............#..............#...#...................................#.......................
.#...#.....#.............................................#...........#....#.......................................................
.#.....#.............................#................#......................#........................#.........................#.
......................#.........................................#.............................................#.................#.
...#...#....................#.................................................................#............#....#.......#.........
...........#......#...............................#.......#......#........#..........#...........................................#
......................#....#..............##...........................................................#..........#...............
.#......#.....................................................................#..#....#.....................#.....................
....##....#...#.........#.............................#.........#...................#.............#....#................#.........
..................................................................#...............................#...............................
....#.................#.#.........................................................................................................
........................#..........................#...........#...................................#.#.......#....................
...........#.....................................................................................#...............................#
...........................................#..................................#...................................................
.....#.........#......#..........#.........#.................................................................................#....
....#.....................#....#..#.........................................................................#..#..................
........................##..#........................#...#.........#.................#......................#..#....#.............
.............#................#.......#........#............................................................#......#..............
#....#................................#.............#..........#........#.....#...#..........##.....................#.............
......#...#......#..........................................................................................#....#..#.........#...
#.................#..............##....#........................#....#...........................................#..........#.#...
........................#.#..#........................................#.............................................##............
..........#.........#.........................................................................................##..................
....#....#...........#.................#......................#........................#...#....................................#.
.......#..................................#..................#...................#...............................#.....#.....#....
#................................#...........#................##...#............#.................................................
.............................#...#....................................#...................................#...#..........#...#....
.#......#.........#...#.......#.................##....#..................................................#...#....................
...........#........................................................................................................#.............
......................................#......#..........#.....#.....................#...................#.#.................#.....
.....................................#............#................................................................##.............
.......................................#....................#...........................................##..#.....................
..........................#.................................................................................#....................#
...........................................................#............#.........#..#....#.#............#.....#..................
....#.....................................#...........................................#........#.....................#............
.............#.............#................#..........................#......................#..........................#........
.........#.................#......#............#....#.#.............................#.......##......................#.#.......#...
..............................................................................................................#...................
#...#...............................................#...................#........................#...............#................
.......#...#.......#..#..#..#..........#..........................................................................................
......#.##....................#......#........#............#................#.............#...................#............#......
.....#..#......#.......................#..............................#...............................#...........................
.#.................................#......#..............................................#........................................
....#...........................#..#........#...............#..#.......................................#......##.#.........#......
..................................#..................#......................#.....................#.......#.....................#.
.........#....................#....#...............................................#...................................#..........
.........................................................#...#...............##..#...............................................#
.#..#.............#.............#....................................#....................#.....#..#..........................#...
.................#.........................#..#........................................#.................................#........
.....................#....#................................#......#...............................................................
...............#..........................#...........#.............................................................#.........#...
...........##.......#................#..............................#..........................#....##.....#...................#..
......................#........#........#.........#..................................................##..#........................
....#........................#......................#.#..................#....#..................#.....................#..........
.................#......#...#...................................#...............#....#.........#............................#.....
#.................#...............................#......#..#..............................................###...#.......#........
..........#...........#..........................................................................................................#
.......................#......................................#.................#.......#........#................................
..#.......#..#.............................................................................................................#......
#.........#......#........................#.#..............................................#...................##.................
...#....#.....................................#...................................................................................
.....................#.....................................................................#........................#.....#.......
.....#..#...............................................................##......#.#......#..#.#.......#........................#..
.......#..........#....................................#.........#.................#.................#.....................#......
..............##.................................................#................#.........#.#............#........#............#
.....................#.............#....................#...#.................#.........#........#................................
.............#...........................................#........................................................................
.....#...#.............#..............#..............#..................................................................#......#..
.....##...................................##.....#.....#..#.........#...............#..........#.....#............#.#...........#.
....#..................#.........#....................#....................#...#....#..............##............#..............#.
..................#..........#.#.....................................#....#..............#.......#.....#...............#......#..#
..............#.........#.............................................................................................#...........

1
2024/09/easy_example.txt Normal file
View File

@ -0,0 +1 @@
12345

1
2024/09/example.txt Normal file
View File

@ -0,0 +1 @@
2333133121414131402

View File

@ -1,26 +1,39 @@
let disk_map = "2333133121414131402"
// 0..111....22222
import fs from 'node:fs'
//let fileArray = Array.from(file)
function init(filename) {
const data = fs.readFileSync(filename, { encoding: 'utf-8' }, data => data)
const diskmap = [...data.split('')].map((sector, index) => index % 2 === 0 ? ''.padStart(sector, index / 2) : ''.padStart(sector, '.')).join("")
let reversed_table = [...diskmap].reverse().filter(sector => sector !== '.')
let new_diskmap = [...diskmap]
for (let i = 0; i < new_diskmap.length; i++) {
console.log(new_diskmap.join(""))
if (new_diskmap[i] === '.') {
const lastChar = reversed_table.shift()
const rightMostIndex = new_diskmap.lastIndexOf(lastChar);
if (rightMostIndex > i) {
[new_diskmap[i], new_diskmap[rightMostIndex]] = [new_diskmap[rightMostIndex], new_diskmap[i]];
}
}
}
output = ""
hints = ""
//output += "".padStart(disk_map[0], 0)
let id = -1
let is_file = false
for (let idx = 0; idx < disk_map.length; idx++) {
let length = disk_map[idx]
is_file = !is_file
id = is_file ? id + 1 : id
output += "".padStart(length, (is_file ? id : '.'))
new_disk_map =
/* might be part2 solution */
//let new_diskmap = table.split('')
// new_diskmap.map((value, index) => {
// if (value === '.') {
// for (let i = index + 1; i < new_diskmap.length; i++) {
// if (new_diskmap[i] !== '.') {
// [new_diskmap[index], new_diskmap[i]] = [new_diskmap[i], new_diskmap[index]];
// break;
// }
// }
// }
// });
let res = 0
new_diskmap.forEach((value, index) => {
res += !isNaN(value) ? index * value : 0
})
console.log(res)
}
function frag() {
}
console.log(disk_map)
//console.log(hints)
console.log(output)
init('example.txt')

1
2024/09/input.txt Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,11 +0,0 @@
{
"name": "09",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"description": ""
}

47
2024/24/example.txt Normal file
View File

@ -0,0 +1,47 @@
x00: 1
x01: 0
x02: 1
x03: 1
x04: 0
y00: 1
y01: 1
y02: 1
y03: 1
y04: 1
ntg XOR fgs -> mjb
y02 OR x01 -> tnw
kwq OR kpj -> z05
x00 OR x03 -> fst
tgd XOR rvg -> z01
vdt OR tnw -> bfw
bfw AND frj -> z10
ffh OR nrd -> bqk
y00 AND y03 -> djm
y03 OR y00 -> psh
bqk OR frj -> z08
tnw OR fst -> frj
gnj AND tgd -> z11
bfw XOR mjb -> z00
x03 OR x00 -> vdt
gnj AND wpb -> z02
x04 AND y00 -> kjc
djm OR pbm -> qhw
nrd AND vdt -> hwm
kjc AND fst -> rvg
y04 OR y02 -> fgs
y01 AND x02 -> pbm
ntg OR kjc -> kwq
psh XOR fgs -> tgd
qhw XOR tgd -> z09
pbm OR djm -> kpj
x03 XOR y03 -> ffh
x00 XOR y04 -> ntg
bfw OR bqk -> z06
nrd XOR fgs -> wpb
frj XOR qhw -> z04
bqk OR frj -> z07
y03 OR x01 -> nrd
hwm AND bqk -> z03
tgd XOR rvg -> z12
tnw OR pbm -> gnj

78
2024/24/index.js Normal file
View File

@ -0,0 +1,78 @@
import fs from 'node:fs'
function init(filename) {
const data = fs.readFileSync(filename, { encoding: 'utf-8' }, data => data)
const device = new Device()
const Wires = data.split('\n\n')[0].split('\n')
const Gates = data.split('\n\n')[1].split('\n')
Wires.forEach((wire, index) => {
let [name, value] = wire.split(':')
device.Wires.push({
name: name,
value: parseInt(value.trim())
})
})
Gates.forEach((gate, index) => {
let [w1, operator, w2, _null, output] = gate.split(' ')
device.Gates.push({
wire1: w1,
operator: operator,
wire2: w2,
output: output
})
})
device.part1()
}
class Device {
constructor() {
this.Wires = []
this.Gates = []
}
getWire(wire) {
return this.Wires.find(Wire => wire === Wire.name).value
}
generateOutput(w1, w2, operator) {
let result = 0
switch (operator) {
case 'AND':
result = this.getWire(w1) && this.getWire(w2)
break;
case 'OR':
result = this.getWire(w1) || this.getWire(w2)
break;
case 'XOR':
result = this.getWire(w1) ^ this.getWire(w2)
break;
default: break
}
return result
}
part1() {
let i = 0
while (this.Gates.length > 0) {
if (this.Wires.some(wire => wire.name === this.Gates[i].wire1) &&
this.Wires.some(wire => wire.name === this.Gates[i].wire2)
) {
let result = this.generateOutput(this.Gates[i].wire1, this.Gates[i].wire2, this.Gates[i].operator)
this.Wires.push({ name: this.Gates[i].output, value: result })
}
else { // this configuration cannot yet be determined, pushing back to the end of array
this.Gates.push(this.Gates[i])
}
this.Gates.splice(i, 1)
}
let result = this.Wires.filter(wire => String(wire.name).startsWith('z')).sort((a, b) => a.name < b.name ? -1 : 1).reduce((prev, current, index) => {
return (current.value === 1) ? prev + Math.pow(2, index) : prev;
}, 0);
console.log(result)
}
}
init('input.txt')

313
2024/24/input.txt Normal file
View File

@ -0,0 +1,313 @@
x00: 1
x01: 0
x02: 1
x03: 1
x04: 0
x05: 0
x06: 1
x07: 1
x08: 0
x09: 1
x10: 1
x11: 1
x12: 1
x13: 0
x14: 1
x15: 1
x16: 1
x17: 1
x18: 1
x19: 1
x20: 0
x21: 1
x22: 0
x23: 1
x24: 0
x25: 1
x26: 1
x27: 1
x28: 1
x29: 0
x30: 0
x31: 1
x32: 0
x33: 1
x34: 1
x35: 0
x36: 0
x37: 1
x38: 0
x39: 1
x40: 1
x41: 1
x42: 1
x43: 0
x44: 1
y00: 1
y01: 0
y02: 0
y03: 1
y04: 1
y05: 0
y06: 0
y07: 0
y08: 0
y09: 0
y10: 0
y11: 1
y12: 0
y13: 1
y14: 0
y15: 1
y16: 1
y17: 1
y18: 1
y19: 0
y20: 0
y21: 1
y22: 1
y23: 1
y24: 1
y25: 0
y26: 0
y27: 1
y28: 1
y29: 1
y30: 1
y31: 0
y32: 0
y33: 0
y34: 1
y35: 1
y36: 1
y37: 0
y38: 1
y39: 1
y40: 1
y41: 1
y42: 0
y43: 1
y44: 1
x03 AND y03 -> htr
gwb AND kvf -> pkd
x04 AND y04 -> jjm
qcm XOR twv -> z21
rrq XOR bmp -> z44
x43 AND y43 -> pnn
x06 XOR y06 -> qmt
x26 AND y26 -> z26
y00 AND x00 -> whb
jfq XOR fbb -> z36
y33 AND x33 -> mmb
x38 AND y38 -> vqt
bbh OR qtd -> jfq
cbs AND ttb -> qtd
wqs OR cmf -> tpf
x10 AND y10 -> bfm
djp OR pfb -> qvr
x20 XOR y20 -> vhb
kkd XOR cjg -> z32
qpp XOR stg -> z41
kkd AND cjg -> mdv
tpp OR pfj -> twv
www AND qdf -> vjf
y15 XOR x15 -> hmr
mtg XOR sqm -> z09
x33 XOR y33 -> chc
x41 AND y41 -> pkj
x31 AND y31 -> cvn
x09 AND y09 -> nvw
mtg AND sqm -> chg
pkr AND kcv -> thc
x07 XOR y07 -> cds
x15 AND y15 -> fpr
mwv AND jsg -> wdw
mwv XOR jsg -> z38
y16 XOR x16 -> svs
y14 XOR x14 -> fnq
wth OR vjf -> btv
bvp AND gdb -> stc
cjb XOR rjc -> z04
x13 AND y13 -> pfb
x30 AND y30 -> qgf
htq AND rtk -> dsm
x18 XOR y18 -> kvf
y12 AND x12 -> mqn
bcj XOR bkh -> z03
x07 AND y07 -> sdj
bdf OR wbw -> qkf
y30 XOR x30 -> kbn
tpf AND vhb -> tpp
hqd OR fpr -> hgh
vfm XOR hbw -> z23
x01 AND y01 -> bdf
nvw OR chg -> vgp
x21 XOR y21 -> qcm
bwg AND mfn -> djp
dnf OR pkj -> ksp
y44 AND x44 -> gqr
y11 AND x11 -> smr
smr OR dsm -> ksn
jkm OR pkd -> rjf
thc OR sqt -> rbd
qvr XOR fnq -> z14
cjb AND rjc -> fsb
svg XOR fmt -> z31
x06 AND y06 -> ssv
dtj OR vvq -> jvp
chv XOR fqf -> z34
cvr AND hck -> pjd
dqp AND nbm -> hvv
x29 AND y29 -> vvq
y13 XOR x13 -> mfn
ksn AND nft -> z12
jjd XOR whb -> z01
chc AND rnq -> vjh
y36 AND x36 -> kfn
cwh OR vvw -> ttb
qkf AND wsv -> pqc
rdj OR kfv -> gdb
x08 AND y08 -> jrr
x02 AND y02 -> vdf
x12 XOR y12 -> nft
ptf OR jrr -> sqm
tdv OR wjp -> cjw
qvr AND fnq -> mch
x28 XOR y28 -> cfj
gtn XOR qmt -> z06
mqn OR jpj -> bwg
x36 XOR y36 -> fbb
qht OR bfm -> htq
y42 AND x42 -> mkg
ksn XOR nft -> jpj
x20 AND y20 -> pfj
cmt AND nbq -> gmc
rbd XOR knm -> z25
pvj XOR ksp -> z42
kgj OR stc -> www
tpf XOR vhb -> z20
pjd OR dsg -> mwv
cbs XOR ttb -> z35
bfk OR jvm -> gwb
ffj XOR rpg -> z17
vjr OR kwg -> pkr
pvj AND ksp -> dkc
y37 XOR x37 -> cvr
btv XOR cfj -> z28
gtq OR qgf -> fmt
nbq XOR cmt -> z39
wgq AND dqj -> tws
x24 AND y24 -> sqt
whj OR pnn -> bmp
x02 XOR y02 -> wsv
stg AND qpp -> dnf
kbn XOR jvp -> z30
y39 AND x39 -> gwq
cds AND rkv -> nph
kvf XOR gwb -> z18
mkg OR dkc -> sch
bqh XOR rjf -> z19
hck XOR cvr -> z37
jmk OR ssv -> rkv
x21 AND y21 -> cgd
pqc OR vdf -> bkh
rff OR mts -> rpg
bkh AND bcj -> rhq
bnv OR bst -> stg
bwg XOR mfn -> z13
sgt AND scc -> bnv
btv AND cfj -> tdv
svs AND hgh -> rff
hbw AND vfm -> kwg
x40 XOR y40 -> scc
y17 AND x17 -> jvm
y34 AND x34 -> chv
y35 AND x35 -> bbh
mdv OR rft -> rnq
fqf AND chv -> cwh
y28 AND x28 -> wjp
sch AND srj -> whj
htr OR rhq -> rjc
x05 XOR y05 -> dqp
cvn OR qnk -> cjg
y14 AND x14 -> tfr
y11 XOR x11 -> rtk
jfq AND fbb -> trr
ppb AND hmr -> hqd
gtb OR hvv -> gtn
y44 XOR x44 -> rrq
rtk XOR htq -> z11
x01 XOR y01 -> jjd
hmv XOR rts -> z08
y10 XOR x10 -> vpc
jvp AND kbn -> gtq
cjw AND ntj -> dtj
x22 AND y22 -> prp
ppb XOR hmr -> z15
y18 AND x18 -> jkm
x39 XOR y39 -> nbq
jjd AND whb -> wbw
x34 XOR y34 -> vvw
x19 AND y19 -> wqs
gwq OR gmc -> sgt
rbd AND knm -> rdj
srj XOR sch -> z43
y05 AND x05 -> gtb
x08 XOR y08 -> hmv
y25 AND x25 -> kfv
cgd OR jth -> dqj
vpc XOR vgp -> z10
tws OR prp -> hbw
jjm OR fsb -> nbm
wdw OR vqt -> cmt
rrq AND bmp -> cbv
rts AND hmv -> ptf
svs XOR hgh -> z16
y41 XOR x41 -> qpp
ntj XOR cjw -> z29
ffj AND rpg -> bfk
gqr OR cbv -> z45
x25 XOR y25 -> knm
chc XOR rnq -> z33
y43 XOR x43 -> srj
vgp AND vpc -> qht
x00 XOR y00 -> z00
cds XOR rkv -> rts
x24 XOR y24 -> kcv
x32 AND y32 -> rft
nbm XOR dqp -> z05
x35 XOR y35 -> cbs
mch OR tfr -> ppb
x16 AND y16 -> mts
www XOR qdf -> z27
x23 AND y23 -> vjr
x26 XOR y26 -> bvp
gtn AND qmt -> jmk
x29 XOR y29 -> ntj
y19 XOR x19 -> bqh
rjf AND bqh -> cmf
y38 XOR x38 -> jsg
x32 XOR y32 -> kkd
y03 XOR x03 -> bcj
y31 XOR x31 -> svg
y22 XOR x22 -> wgq
qkf XOR wsv -> z02
bvp XOR gdb -> kgj
x04 XOR y04 -> cjb
x17 XOR y17 -> ffj
y37 AND x37 -> dsg
y27 AND x27 -> wth
y23 XOR x23 -> vfm
sgt XOR scc -> z40
mmb OR vjh -> fqf
qcm AND twv -> jth
y09 XOR x09 -> mtg
sdj OR nph -> z07
wgq XOR dqj -> z22
trr OR kfn -> hck
y27 XOR x27 -> qdf
kcv XOR pkr -> z24
x42 XOR y42 -> pvj
x40 AND y40 -> bst
svg AND fmt -> qnk

39
2024/25/example.txt Normal file
View File

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

56
2024/25/index.js Normal file
View File

@ -0,0 +1,56 @@
import fs from 'node:fs'
function init(filename) {
const data = fs.readFileSync(filename, { encoding: 'utf-8' }, data => data)
const reader = new Reader()
data.split('\n\n').forEach(schematic => reader.readSchematics(schematic))
reader.part1()
}
class Reader {
constructor() {
this.Keys = []
this.Locks = []
}
getHeights(schematic) {
const lines = schematic.split('\n')
let pins = 0
let pin = [0, 0, 0, 0, 0]
while (pins < 5) {
for (let row = 0; row < lines.length; row++) {
if (lines[row][pins] === '#') pin[pins] += 1
}
pins++
}
return pin.map(p => p - 1).join(",")
}
fits(key, lock) {
const k = key.split(',').map(k => parseInt(k))
const l = lock.split(',').map(l => parseInt(l))
let fits = true
for (let i = 0; i < k.length; i++) {
if (k[i] + l[i] > 5) { fits = false }
}
//console.log(`key ${key} ${fits ? "fits" : "doesn't fit"} into ${lock}`)
return fits
}
readSchematics(schematic) {
const isKey = schematic[0] == '.' ? true : false
if (isKey) { this.Keys.push(this.getHeights(schematic)) }
else { this.Locks.push(this.getHeights(schematic)) }
}
part1() {
let foundKeys = 0
this.Keys.forEach((key, index) => {
this.Locks.forEach((lock, index) => {
foundKeys += this.fits(key, lock) ? 1 : 0
})
})
console.log(foundKeys)
}
}
init('input.txt')

3999
2024/25/input.txt Normal file

File diff suppressed because it is too large Load Diff