days 1-5
parent
cf61ecf2ab
commit
7c828a4104
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,16 @@
|
||||
const fs = require("fs")
|
||||
|
||||
const input = fs.readFileSync("input.txt", "utf-8", err => {
|
||||
err && console.error(err)
|
||||
}).split("\n").map(num => parseInt(num))
|
||||
|
||||
let partOne = 0, partTwo = 0
|
||||
|
||||
for (let i = 0; i < input.length; i++){
|
||||
if (input[i - 1] && input[i] > input[i - 1])
|
||||
partOne++
|
||||
if (input[i - 3] && input[i] > input[i - 3])
|
||||
partTwo++
|
||||
}
|
||||
|
||||
console.log(partOne, partTwo)
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,23 @@
|
||||
const fs = require("fs")
|
||||
|
||||
const input = fs.readFileSync("input.txt", "utf-8", err => {
|
||||
err && console.error(err)
|
||||
}).split("\n").map(line => line.split(" "))
|
||||
|
||||
let horizontalPosition = 0, depth = 0, aim = 0
|
||||
|
||||
for (let [direction, distance] of input){
|
||||
distance = parseInt(distance)
|
||||
switch(direction){
|
||||
case "forward":
|
||||
horizontalPosition += distance
|
||||
depth += aim * distance
|
||||
break
|
||||
case "up":
|
||||
aim -= distance
|
||||
break
|
||||
case "down":
|
||||
aim += distance
|
||||
}
|
||||
}
|
||||
console.log(horizontalPosition * aim, horizontalPosition * depth)
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,92 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"log"
|
||||
"os"
|
||||
"sort"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
const bitSize = 40
|
||||
|
||||
func bitComplement(num uint64) uint64 {
|
||||
return ^num & (1<<bitSize - 1)
|
||||
}
|
||||
|
||||
func partOne(counts *[bitSize]int, total *int) (uint64, uint64) {
|
||||
averageThreshold := *total / 2
|
||||
|
||||
var gammaRate uint64 = 0
|
||||
|
||||
for index, count := range counts {
|
||||
if count > averageThreshold {
|
||||
var add uint64 = 1 << (bitSize - 1 - index)
|
||||
gammaRate += add
|
||||
}
|
||||
}
|
||||
|
||||
epsilonRate := bitComplement(gammaRate)
|
||||
return gammaRate, epsilonRate
|
||||
}
|
||||
|
||||
func reduce(slice []string, depth int, max bool) int64 {
|
||||
var s []string
|
||||
half := len(slice) / 2
|
||||
if half == 0 {
|
||||
ret, _ := strconv.ParseInt(slice[0], 2, 64)
|
||||
return ret
|
||||
}
|
||||
maxDigit := slice[half][depth]
|
||||
|
||||
for _, str := range slice {
|
||||
if max && str[depth] == maxDigit {
|
||||
s = append(s, str)
|
||||
}
|
||||
if !max && str[depth] != maxDigit {
|
||||
s = append(s, str)
|
||||
}
|
||||
}
|
||||
return reduce(s, depth+1, max)
|
||||
}
|
||||
|
||||
func partTwo(s []string) (int64, int64) {
|
||||
sort.Strings(s)
|
||||
return reduce(s, 0, true), reduce(s, 0, false)
|
||||
}
|
||||
|
||||
func solve() {
|
||||
file, err := os.Open("bigboi.txt")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
scanner.Split(bufio.ScanLines)
|
||||
|
||||
var counts [bitSize]int
|
||||
var s []string
|
||||
|
||||
total := 0
|
||||
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
for index, character := range line {
|
||||
if character == '1' {
|
||||
counts[index]++
|
||||
}
|
||||
}
|
||||
s = append(s, line)
|
||||
total++
|
||||
}
|
||||
|
||||
partOne(&counts, &total)
|
||||
//fmt.Println(int64(g) * int64(e))
|
||||
partTwo(s)
|
||||
//fmt.Println(o * c)
|
||||
}
|
||||
|
||||
func main() {
|
||||
solve()
|
||||
}
|
@ -0,0 +1,601 @@
|
||||
12,28,0,63,26,38,64,17,74,67,51,44,77,32,6,10,52,47,61,46,50,29,15,1,39,37,13,66,45,8,68,96,53,40,76,72,21,93,16,83,62,48,11,9,20,36,91,19,5,42,99,84,4,95,92,89,7,71,34,35,55,22,59,18,49,14,54,85,82,58,24,73,31,97,69,43,65,27,81,56,87,70,33,88,60,2,75,90,57,94,23,30,78,80,41,3,98,25,79,86
|
||||
|
||||
50 79 88 34 0
|
||||
56 46 5 17 31
|
||||
29 6 38 78 68
|
||||
75 57 15 44 83
|
||||
89 45 43 85 72
|
||||
|
||||
29 8 56 15 33
|
||||
7 14 51 88 67
|
||||
91 32 62 18 73
|
||||
53 63 49 34 46
|
||||
70 25 77 87 31
|
||||
|
||||
38 92 26 65 77
|
||||
59 39 4 57 16
|
||||
91 45 35 36 2
|
||||
34 40 89 8 62
|
||||
96 28 31 88 33
|
||||
|
||||
93 96 73 40 13
|
||||
57 59 88 32 78
|
||||
48 72 23 42 62
|
||||
41 7 85 84 44
|
||||
95 91 52 61 8
|
||||
|
||||
23 42 58 38 46
|
||||
41 91 92 81 68
|
||||
12 51 50 64 71
|
||||
32 13 55 44 35
|
||||
74 4 40 15 77
|
||||
|
||||
19 79 7 65 77
|
||||
56 98 93 86 87
|
||||
5 68 8 2 49
|
||||
83 45 74 92 6
|
||||
46 88 33 58 28
|
||||
|
||||
79 82 12 77 30
|
||||
68 6 70 23 80
|
||||
24 85 69 91 90
|
||||
57 15 1 52 8
|
||||
43 26 44 17 53
|
||||
|
||||
73 88 70 31 44
|
||||
58 86 16 11 97
|
||||
36 13 40 79 83
|
||||
78 25 2 5 91
|
||||
62 4 29 71 95
|
||||
|
||||
51 96 81 78 86
|
||||
49 77 12 21 26
|
||||
66 2 52 31 68
|
||||
56 74 84 91 45
|
||||
19 0 8 87 92
|
||||
|
||||
3 13 58 50 17
|
||||
4 78 69 16 38
|
||||
91 2 23 21 51
|
||||
49 79 31 97 90
|
||||
37 46 12 80 28
|
||||
|
||||
61 11 73 50 39
|
||||
30 29 0 4 59
|
||||
18 78 6 27 22
|
||||
38 14 75 48 43
|
||||
3 65 82 56 92
|
||||
|
||||
69 11 32 30 1
|
||||
59 27 4 10 61
|
||||
28 92 26 6 36
|
||||
25 76 70 33 97
|
||||
16 49 84 31 73
|
||||
|
||||
43 77 14 33 87
|
||||
40 32 97 9 76
|
||||
59 54 6 73 84
|
||||
86 44 42 52 38
|
||||
57 3 16 24 83
|
||||
|
||||
16 55 45 39 1
|
||||
94 25 75 22 32
|
||||
3 60 13 91 26
|
||||
93 86 18 77 8
|
||||
4 67 5 54 14
|
||||
|
||||
18 87 33 79 26
|
||||
77 73 95 67 82
|
||||
70 92 91 43 29
|
||||
55 71 97 28 59
|
||||
5 84 81 15 22
|
||||
|
||||
49 29 48 69 83
|
||||
56 70 39 71 72
|
||||
68 74 9 94 88
|
||||
77 96 38 98 14
|
||||
55 7 16 80 31
|
||||
|
||||
63 51 88 50 9
|
||||
48 89 75 43 11
|
||||
27 77 22 80 53
|
||||
56 4 1 36 52
|
||||
87 85 30 35 54
|
||||
|
||||
53 39 34 88 51
|
||||
56 43 19 10 0
|
||||
85 22 26 25 54
|
||||
98 62 31 66 48
|
||||
1 6 58 21 17
|
||||
|
||||
34 47 43 4 16
|
||||
10 0 1 21 54
|
||||
3 84 83 51 12
|
||||
67 35 62 72 11
|
||||
93 13 30 9 22
|
||||
|
||||
2 67 51 17 36
|
||||
77 25 73 80 16
|
||||
33 31 61 41 72
|
||||
71 98 45 29 15
|
||||
60 97 69 58 87
|
||||
|
||||
88 46 55 19 68
|
||||
13 53 71 95 60
|
||||
75 3 58 82 41
|
||||
28 16 15 57 81
|
||||
39 9 34 4 54
|
||||
|
||||
72 38 5 25 57
|
||||
45 30 33 70 15
|
||||
43 12 8 1 96
|
||||
29 52 3 73 78
|
||||
76 35 40 90 77
|
||||
|
||||
30 18 10 81 74
|
||||
89 28 32 70 87
|
||||
1 71 73 36 12
|
||||
16 78 48 98 53
|
||||
9 37 49 52 22
|
||||
|
||||
88 21 69 78 59
|
||||
81 5 6 46 72
|
||||
76 93 96 50 36
|
||||
83 19 51 22 68
|
||||
34 20 39 53 63
|
||||
|
||||
87 64 61 38 28
|
||||
21 14 11 6 12
|
||||
51 70 78 40 57
|
||||
5 37 66 49 85
|
||||
99 41 81 88 19
|
||||
|
||||
93 9 44 90 49
|
||||
56 34 83 79 84
|
||||
38 63 53 78 29
|
||||
1 94 37 24 86
|
||||
57 4 52 82 6
|
||||
|
||||
64 31 24 42 33
|
||||
78 85 95 38 30
|
||||
43 40 23 52 12
|
||||
39 84 79 53 57
|
||||
73 29 56 69 22
|
||||
|
||||
30 31 61 15 22
|
||||
45 9 43 23 59
|
||||
34 87 70 52 28
|
||||
47 86 1 49 39
|
||||
94 76 98 78 41
|
||||
|
||||
46 71 30 50 45
|
||||
47 9 56 81 8
|
||||
60 92 16 6 76
|
||||
42 4 77 40 54
|
||||
7 43 32 72 55
|
||||
|
||||
74 26 50 79 38
|
||||
64 72 49 82 21
|
||||
93 81 24 45 55
|
||||
94 22 20 68 71
|
||||
37 36 3 67 1
|
||||
|
||||
9 76 18 42 14
|
||||
36 45 48 1 28
|
||||
94 72 56 7 61
|
||||
25 82 50 89 99
|
||||
20 29 3 51 46
|
||||
|
||||
79 56 41 34 18
|
||||
98 71 75 74 61
|
||||
10 52 28 29 8
|
||||
55 84 1 5 2
|
||||
80 35 40 42 4
|
||||
|
||||
71 54 81 23 80
|
||||
87 27 98 65 91
|
||||
2 75 4 99 60
|
||||
11 17 70 59 50
|
||||
67 97 77 12 22
|
||||
|
||||
11 72 38 57 17
|
||||
60 93 16 48 90
|
||||
73 9 89 68 18
|
||||
71 59 0 94 12
|
||||
54 70 96 33 49
|
||||
|
||||
68 40 21 50 17
|
||||
79 25 76 8 1
|
||||
72 71 13 39 73
|
||||
91 98 28 92 53
|
||||
27 23 62 74 35
|
||||
|
||||
42 97 40 55 69
|
||||
87 83 21 94 89
|
||||
28 9 1 13 31
|
||||
45 4 35 74 25
|
||||
85 23 80 70 26
|
||||
|
||||
36 22 7 63 87
|
||||
25 24 60 21 44
|
||||
84 6 3 31 46
|
||||
2 32 74 72 96
|
||||
75 43 50 35 81
|
||||
|
||||
49 56 18 58 94
|
||||
7 43 45 2 53
|
||||
75 91 30 81 37
|
||||
25 50 31 74 82
|
||||
24 26 98 80 10
|
||||
|
||||
45 33 18 66 7
|
||||
14 71 60 34 6
|
||||
23 3 42 22 38
|
||||
41 88 86 77 30
|
||||
12 15 70 0 97
|
||||
|
||||
87 41 96 97 15
|
||||
11 88 64 52 62
|
||||
26 72 68 18 6
|
||||
42 35 90 8 14
|
||||
10 3 0 66 28
|
||||
|
||||
83 46 54 65 96
|
||||
2 78 43 52 47
|
||||
77 89 81 53 73
|
||||
72 91 7 87 56
|
||||
45 14 21 16 59
|
||||
|
||||
34 62 67 38 58
|
||||
95 31 43 88 22
|
||||
40 45 98 80 19
|
||||
77 94 53 61 14
|
||||
68 42 47 65 16
|
||||
|
||||
54 13 64 24 73
|
||||
46 6 91 94 29
|
||||
55 12 16 65 89
|
||||
31 28 76 87 2
|
||||
5 4 83 43 93
|
||||
|
||||
81 89 16 67 5
|
||||
65 64 70 1 40
|
||||
3 21 52 53 17
|
||||
36 19 58 8 0
|
||||
31 9 79 93 56
|
||||
|
||||
58 98 52 71 56
|
||||
4 97 48 91 38
|
||||
43 95 92 85 2
|
||||
70 10 73 17 26
|
||||
60 25 20 45 13
|
||||
|
||||
42 53 26 14 20
|
||||
66 18 28 10 77
|
||||
23 96 22 25 21
|
||||
95 52 50 70 94
|
||||
41 81 45 84 83
|
||||
|
||||
46 80 4 62 97
|
||||
23 85 47 61 12
|
||||
9 8 87 72 69
|
||||
3 30 55 1 54
|
||||
52 56 7 22 36
|
||||
|
||||
30 7 83 63 47
|
||||
0 75 20 76 57
|
||||
98 89 69 22 25
|
||||
53 66 24 39 33
|
||||
43 2 19 35 85
|
||||
|
||||
40 11 2 57 54
|
||||
93 58 37 82 32
|
||||
24 97 8 49 17
|
||||
14 89 91 41 79
|
||||
65 6 55 72 99
|
||||
|
||||
66 14 7 69 98
|
||||
97 81 80 43 45
|
||||
11 17 60 89 59
|
||||
23 58 63 15 84
|
||||
62 91 33 46 77
|
||||
|
||||
97 1 96 14 31
|
||||
62 3 69 80 9
|
||||
11 91 94 85 63
|
||||
20 30 40 53 64
|
||||
34 45 18 4 52
|
||||
|
||||
65 75 81 69 53
|
||||
40 63 98 67 46
|
||||
1 49 38 73 2
|
||||
33 99 91 77 90
|
||||
94 14 21 34 22
|
||||
|
||||
5 37 91 44 57
|
||||
20 72 27 93 45
|
||||
86 3 29 84 22
|
||||
83 73 90 68 21
|
||||
1 98 40 25 58
|
||||
|
||||
39 22 2 41 91
|
||||
18 96 21 4 95
|
||||
75 77 64 85 19
|
||||
35 83 87 20 93
|
||||
54 56 81 50 74
|
||||
|
||||
84 91 16 55 14
|
||||
85 67 18 19 3
|
||||
17 15 79 82 20
|
||||
97 47 58 80 28
|
||||
48 53 89 73 87
|
||||
|
||||
36 91 46 89 22
|
||||
10 47 58 85 43
|
||||
20 54 45 57 84
|
||||
33 51 71 35 29
|
||||
80 93 24 98 50
|
||||
|
||||
42 10 65 99 61
|
||||
87 19 58 48 66
|
||||
36 68 7 63 57
|
||||
72 20 81 21 96
|
||||
80 13 15 60 90
|
||||
|
||||
61 37 87 98 69
|
||||
21 80 7 74 40
|
||||
93 94 60 39 22
|
||||
28 8 81 19 42
|
||||
12 59 34 72 20
|
||||
|
||||
2 40 42 5 74
|
||||
82 58 93 9 73
|
||||
38 69 51 33 85
|
||||
76 26 46 55 70
|
||||
39 41 89 84 8
|
||||
|
||||
36 99 7 90 3
|
||||
50 9 71 85 67
|
||||
92 23 79 28 87
|
||||
63 56 44 31 52
|
||||
65 55 62 58 64
|
||||
|
||||
23 28 33 0 2
|
||||
14 69 92 9 31
|
||||
77 81 74 71 24
|
||||
53 19 57 85 61
|
||||
20 41 21 56 99
|
||||
|
||||
57 68 87 13 80
|
||||
21 4 95 59 46
|
||||
29 26 55 89 70
|
||||
64 66 90 31 34
|
||||
3 28 12 16 47
|
||||
|
||||
75 20 85 31 82
|
||||
28 67 83 73 91
|
||||
19 92 33 96 86
|
||||
61 39 59 50 74
|
||||
94 36 69 5 79
|
||||
|
||||
89 63 97 48 51
|
||||
26 2 31 17 60
|
||||
47 33 27 3 42
|
||||
20 88 61 46 68
|
||||
41 66 90 32 92
|
||||
|
||||
34 46 50 33 28
|
||||
43 70 3 42 31
|
||||
10 74 68 80 37
|
||||
51 58 48 7 75
|
||||
47 53 35 86 22
|
||||
|
||||
52 17 41 92 58
|
||||
90 84 65 15 35
|
||||
24 12 95 70 26
|
||||
47 29 73 32 8
|
||||
83 74 56 67 33
|
||||
|
||||
20 86 99 92 28
|
||||
31 44 68 32 1
|
||||
87 47 78 98 83
|
||||
6 50 54 30 93
|
||||
60 4 58 24 51
|
||||
|
||||
95 59 2 29 75
|
||||
32 42 30 48 5
|
||||
37 11 82 66 96
|
||||
45 28 69 52 0
|
||||
36 57 46 12 55
|
||||
|
||||
31 65 46 59 27
|
||||
85 70 75 13 48
|
||||
42 0 51 1 88
|
||||
40 6 34 8 71
|
||||
7 22 11 98 25
|
||||
|
||||
5 14 10 19 8
|
||||
87 35 92 18 82
|
||||
73 81 36 4 47
|
||||
57 16 15 79 60
|
||||
11 90 75 31 28
|
||||
|
||||
21 61 3 56 41
|
||||
13 8 29 92 31
|
||||
35 46 30 26 57
|
||||
11 66 58 47 43
|
||||
50 70 40 68 69
|
||||
|
||||
71 27 86 78 58
|
||||
98 7 26 66 17
|
||||
77 85 62 39 42
|
||||
88 29 40 48 49
|
||||
83 89 20 10 0
|
||||
|
||||
5 17 40 55 28
|
||||
48 19 83 10 97
|
||||
58 69 9 91 94
|
||||
80 50 8 43 86
|
||||
84 21 27 75 67
|
||||
|
||||
36 46 31 75 40
|
||||
77 34 24 72 93
|
||||
3 12 65 70 64
|
||||
28 10 63 59 51
|
||||
56 25 67 2 80
|
||||
|
||||
75 96 15 26 53
|
||||
42 0 48 56 85
|
||||
95 4 12 49 57
|
||||
9 79 38 93 54
|
||||
98 82 99 66 8
|
||||
|
||||
93 33 31 41 49
|
||||
83 96 63 46 8
|
||||
51 97 47 79 56
|
||||
43 69 54 38 2
|
||||
20 21 84 17 70
|
||||
|
||||
84 28 48 9 56
|
||||
18 22 34 46 1
|
||||
31 61 87 62 27
|
||||
13 96 58 95 20
|
||||
45 10 57 17 0
|
||||
|
||||
63 26 57 96 64
|
||||
52 9 77 4 44
|
||||
56 88 76 55 71
|
||||
33 99 16 7 72
|
||||
54 27 78 61 24
|
||||
|
||||
98 48 75 24 15
|
||||
26 27 6 79 5
|
||||
95 47 56 18 69
|
||||
37 57 8 61 9
|
||||
51 91 31 74 36
|
||||
|
||||
84 49 7 90 95
|
||||
41 27 15 2 87
|
||||
71 8 34 39 37
|
||||
57 5 46 40 56
|
||||
38 65 6 48 4
|
||||
|
||||
92 3 77 66 10
|
||||
71 83 86 34 18
|
||||
16 76 54 38 26
|
||||
8 17 67 30 88
|
||||
37 50 11 69 62
|
||||
|
||||
77 18 60 80 39
|
||||
12 66 51 13 14
|
||||
85 84 57 91 30
|
||||
46 98 74 71 56
|
||||
19 62 54 2 65
|
||||
|
||||
68 27 58 13 64
|
||||
35 16 75 86 90
|
||||
24 28 38 31 59
|
||||
21 43 12 84 29
|
||||
32 51 40 77 39
|
||||
|
||||
99 19 74 0 9
|
||||
59 92 67 82 69
|
||||
72 46 63 51 77
|
||||
2 45 66 28 12
|
||||
93 38 15 64 27
|
||||
|
||||
96 41 34 58 25
|
||||
46 91 9 57 72
|
||||
67 24 68 36 15
|
||||
0 30 78 63 49
|
||||
87 50 82 32 75
|
||||
|
||||
10 3 82 73 51
|
||||
94 21 43 45 11
|
||||
65 83 92 37 86
|
||||
60 90 32 52 8
|
||||
87 97 53 99 81
|
||||
|
||||
33 77 21 68 53
|
||||
67 95 99 17 69
|
||||
50 62 94 24 34
|
||||
72 56 63 66 57
|
||||
15 10 42 84 80
|
||||
|
||||
69 16 75 53 15
|
||||
18 85 2 5 83
|
||||
0 33 23 24 89
|
||||
80 92 74 79 38
|
||||
31 11 26 84 97
|
||||
|
||||
34 37 93 50 87
|
||||
31 79 3 39 64
|
||||
81 22 66 40 85
|
||||
15 69 42 88 91
|
||||
68 33 57 60 14
|
||||
|
||||
30 99 47 23 4
|
||||
71 3 74 22 49
|
||||
44 76 50 38 88
|
||||
59 21 27 32 35
|
||||
46 41 65 24 48
|
||||
|
||||
5 14 81 45 20
|
||||
91 18 28 7 51
|
||||
29 24 76 79 84
|
||||
22 58 27 9 99
|
||||
67 47 60 85 41
|
||||
|
||||
34 29 50 9 58
|
||||
87 68 70 72 63
|
||||
85 10 3 14 18
|
||||
59 48 19 93 39
|
||||
61 25 16 26 54
|
||||
|
||||
0 4 94 42 12
|
||||
64 41 96 85 44
|
||||
89 61 74 47 97
|
||||
54 63 33 51 93
|
||||
3 18 79 86 99
|
||||
|
||||
49 55 24 85 26
|
||||
50 38 6 87 45
|
||||
64 44 16 92 72
|
||||
12 81 90 51 60
|
||||
0 37 47 54 70
|
||||
|
||||
45 31 27 17 41
|
||||
10 72 0 76 66
|
||||
24 32 86 87 97
|
||||
54 75 62 33 79
|
||||
92 47 26 11 9
|
||||
|
||||
11 94 1 2 8
|
||||
38 31 61 48 13
|
||||
74 85 24 19 78
|
||||
97 69 20 14 59
|
||||
26 5 66 4 58
|
||||
|
||||
5 89 53 19 34
|
||||
50 59 13 9 48
|
||||
29 94 96 85 10
|
||||
52 91 17 78 31
|
||||
63 55 27 66 16
|
||||
|
||||
78 13 16 37 54
|
||||
17 69 42 6 80
|
||||
66 87 51 43 21
|
||||
33 50 44 74 41
|
||||
36 40 75 22 0
|
||||
|
||||
11 98 86 83 46
|
||||
32 0 60 31 15
|
||||
62 96 29 77 22
|
||||
84 7 36 25 13
|
||||
34 91 14 92 49
|
||||
|
||||
51 98 64 95 75
|
||||
88 8 49 89 25
|
||||
37 53 39 47 18
|
||||
60 84 77 22 92
|
||||
52 42 85 21 45
|
@ -0,0 +1,51 @@
|
||||
const fs = require("fs")
|
||||
|
||||
const input = fs.readFileSync("input.txt", "utf-8", err => {
|
||||
err && console.error(err)
|
||||
}).split("\n\n")
|
||||
|
||||
const draws = input[0].split(",")
|
||||
const boards = []
|
||||
|
||||
// parse and set up 5x5 boards
|
||||
for (let i = 1; i < input.length; i++){
|
||||
const str = input[i]
|
||||
const b = [...str.matchAll(/[0-9]+/g)].flat()
|
||||
const board = []
|
||||
while (b.length) {
|
||||
board.push(b.splice(0, 5))
|
||||
}
|
||||
boards.push(board)
|
||||
}
|
||||
|
||||
const total = boards.length
|
||||
|
||||
// draw numbers and find winners
|
||||
for (let drawCount = 5; drawCount < draws.length; drawCount++){
|
||||
const drawSet = new Set(draws.slice(0, drawCount))
|
||||
|
||||
for (const [boardIndex, board] of boards.entries()){
|
||||
for (const row of board){
|
||||
checkWin(row, drawSet, board, boardIndex, drawCount, boards.length == total, boards.length == 1)
|
||||
}
|
||||
|
||||
for (let colNum = 0; colNum < 5; colNum++){
|
||||
const column = []
|
||||
for (let j = 0; j < 5; j++){
|
||||
column.push(board[j][colNum])
|
||||
}
|
||||
checkWin(column, drawSet, board, boardIndex, drawCount, boards.length == total, boards.length == 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function /* keith */ checkWin(line, drawSet, board, boardIndex, drawCount, isFirst, isLast) {
|
||||
const matches = line.filter(num => drawSet.has(num))
|
||||
if (matches.length == 5){
|
||||
const win = board.flat().filter(num => !drawSet.has(num)).reduce((a,b) => parseInt(a) + parseInt(b))
|
||||
if (isFirst || isLast){
|
||||
console.log(`${isFirst ? "First winner score:" : "Last Winner score:"}`, win * draws[drawCount-1])
|
||||
}
|
||||
boards.splice(boardIndex, 1)
|
||||
}
|
||||
}
|
@ -0,0 +1,500 @@
|
||||
409,872 -> 409,963
|
||||
149,412 -> 281,280
|
||||
435,281 -> 435,362
|
||||
52,208 -> 969,208
|
||||
427,265 -> 884,265
|
||||
779,741 -> 779,738
|
||||
949,41 -> 13,977
|
||||
145,690 -> 145,180
|
||||
513,665 -> 513,869
|
||||
405,174 -> 405,612
|
||||
943,504 -> 93,504
|
||||
230,808 -> 570,468
|
||||
69,278 -> 69,30
|
||||
35,336 -> 911,336
|
||||
812,83 -> 812,197
|
||||
981,962 -> 29,10
|
||||
863,709 -> 371,709
|
||||
301,963 -> 955,309
|
||||
187,101 -> 187,227
|
||||
85,762 -> 85,301
|
||||
587,362 -> 652,427
|
||||
73,359 -> 73,139
|
||||
124,449 -> 124,380
|
||||
432,659 -> 30,659
|
||||
96,728 -> 756,68
|
||||
957,215 -> 957,868
|
||||
64,779 -> 64,692
|
||||
315,403 -> 854,942
|
||||
890,663 -> 213,663
|
||||
606,864 -> 264,864
|
||||
81,446 -> 81,890
|
||||
171,463 -> 395,463
|
||||
766,639 -> 912,785
|
||||
10,163 -> 10,835
|
||||
65,906 -> 258,906
|
||||
975,364 -> 408,364
|
||||
595,728 -> 910,728
|
||||
29,274 -> 705,274
|
||||
42,965 -> 50,965
|
||||
815,588 -> 959,732
|
||||
293,344 -> 484,344
|
||||
579,220 -> 579,949
|
||||
832,951 -> 72,951
|
||||
56,296 -> 56,730
|
||||
318,589 -> 181,589
|
||||
32,33 -> 983,984
|
||||
355,794 -> 448,887
|
||||
362,25 -> 696,25
|
||||
374,207 -> 144,207
|
||||
851,66 -> 851,709
|
||||
404,98 -> 414,98
|
||||
274,601 -> 787,601
|
||||
898,100 -> 223,775
|
||||
883,638 -> 73,638
|
||||
12,989 -> 942,59
|
||||
30,590 -> 146,474
|
||||
46,711 -> 693,64
|
||||
295,925 -> 295,854
|
||||
744,89 -> 773,89
|
||||
954,55 -> 33,976
|
||||
647,361 -> 130,361
|
||||
985,410 -> 606,410
|
||||
377,884 -> 297,884
|
||||
215,961 -> 981,195
|
||||
176,422 -> 176,759
|
||||
522,216 -> 151,216
|
||||
372,149 -> 115,406
|
||||
80,92 -> 218,230
|
||||
350,754 -> 967,754
|
||||
481,944 -> 711,714
|
||||
176,795 -> 845,126
|
||||
944,568 -> 944,21
|
||||
86,302 -> 628,302
|
||||
312,691 -> 312,640
|
||||
662,874 -> 168,874
|
||||
336,98 -> 336,842
|
||||
289,69 -> 811,591
|
||||
824,777 -> 256,209
|
||||
374,311 -> 374,905
|
||||
663,254 -> 137,780
|
||||
183,248 -> 780,845
|
||||
860,32 -> 157,32
|
||||
955,794 -> 804,794
|
||||
461,179 -> 96,544
|
||||
780,264 -> 475,264
|
||||
205,583 -> 205,645
|
||||
707,364 -> 470,364
|
||||
735,364 -> 551,180
|
||||
127,479 -> 680,479
|
||||
305,162 -> 305,85
|
||||
348,349 -> 348,806
|
||||
892,94 -> 88,898
|
||||
340,593 -> 416,593
|
||||
872,175 -> 93,954
|
||||
389,750 -> 174,750
|
||||
372,661 -> 949,661
|
||||
121,256 -> 352,487
|
||||
636,204 -> 99,741
|
||||
388,328 -> 400,316
|
||||
664,333 -> 549,333
|
||||
89,92 -> 884,887
|
||||
184,373 -> 552,741
|
||||
464,949 -> 823,590
|
||||
69,713 -> 767,713
|
||||
302,33 -> 302,160
|
||||
502,110 -> 83,529
|
||||
431,331 -> 210,331
|
||||
236,588 -> 931,588
|
||||
931,315 -> 406,315
|
||||
154,272 -> 49,272
|
||||
723,159 -> 368,159
|
||||
397,615 -> 402,620
|
||||
431,796 -> 134,499
|
||||
378,837 -> 378,670
|
||||
582,28 -> 582,789
|
||||
374,967 -> 445,896
|
||||
723,874 -> 30,874
|
||||
847,767 -> 920,767
|
||||
761,101 -> 761,338
|
||||
711,833 -> 419,833
|
||||
953,335 -> 953,479
|
||||
840,614 -> 410,614
|
||||
483,485 -> 757,759
|
||||
694,472 -> 694,930
|
||||
508,275 -> 754,275
|
||||
815,419 -> 700,534
|
||||
399,843 -> 399,804
|
||||
909,771 -> 95,771
|
||||
796,893 -> 332,429
|
||||
833,488 -> 833,899
|
||||
478,240 -> 478,718
|
||||
343,720 -> 343,285
|
||||
320,204 -> 320,213
|
||||
410,794 -> 240,964
|
||||
848,227 -> 214,227
|
||||
49,919 -> 880,88
|
||||
273,648 -> 187,648
|
||||
746,313 -> 746,590
|
||||
715,527 -> 307,935
|
||||
630,771 -> 630,815
|
||||
780,670 -> 710,670
|
||||
811,789 -> 964,789
|
||||
397,267 -> 397,769
|
||||
496,510 -> 744,758
|
||||
314,62 -> 89,62
|
||||
217,417 -> 217,865
|
||||
680,862 -> 680,739
|
||||
150,902 -> 816,236
|
||||
504,120 -> 45,120
|
||||
79,43 -> 967,931
|
||||
584,197 -> 532,197
|
||||
893,717 -> 489,313
|
||||
609,759 -> 684,684
|
||||
146,24 -> 386,24
|
||||
704,645 -> 866,645
|
||||
24,329 -> 44,309
|
||||
417,741 -> 176,982
|
||||
12,48 -> 12,138
|
||||
522,359 -> 937,359
|
||||
165,269 -> 55,159
|
||||
207,537 -> 610,940
|
||||
364,213 -> 323,213
|
||||
144,750 -> 144,26
|
||||
622,840 -> 488,706
|
||||
909,201 -> 794,201
|
||||
959,185 -> 579,565
|
||||
848,720 -> 848,322
|
||||
81,159 -> 81,652
|
||||
98,174 -> 841,917
|
||||
364,437 -> 364,568
|
||||
884,90 -> 973,90
|
||||
962,931 -> 60,29
|
||||
915,967 -> 681,733
|
||||
853,859 -> 853,809
|
||||
630,362 -> 630,161
|
||||
848,455 -> 672,279
|
||||
50,212 -> 419,212
|
||||
415,719 -> 413,719
|
||||
818,274 -> 813,274
|
||||
206,779 -> 206,197
|
||||
251,729 -> 715,729
|
||||
981,873 -> 452,344
|
||||
945,708 -> 704,467
|
||||
875,38 -> 76,837
|
||||
163,799 -> 435,799
|
||||
300,821 -> 913,208
|
||||
978,15 -> 39,954
|
||||
724,167 -> 191,167
|
||||
342,600 -> 342,405
|
||||
190,17 -> 945,772
|
||||
844,659 -> 176,659
|
||||
591,135 -> 50,135
|
||||
252,353 -> 252,527
|
||||
389,906 -> 389,861
|
||||
504,387 -> 39,852
|
||||
108,567 -> 108,148
|
||||
60,600 -> 60,658
|
||||
903,968 -> 115,180
|
||||
633,34 -> 325,342
|
||||
186,536 -> 708,14
|
||||
588,276 -> 74,790
|
||||
596,837 -> 596,909
|
||||
619,278 -> 737,160
|
||||
368,953 -> 245,830
|
||||
112,496 -> 112,801
|
||||
181,583 -> 243,521
|
||||
522,293 -> 616,293
|
||||
389,166 -> 418,166
|
||||
792,940 -> 622,940
|
||||
159,953 -> 769,343
|
||||
857,231 -> 857,553
|
||||
339,176 -> 339,463
|
||||
35,412 -> 35,883
|
||||
478,694 -> 478,325
|
||||
741,257 -> 741,785
|
||||
154,130 -> 810,786
|
||||
869,81 -> 869,80
|
||||
118,815 -> 918,815
|
||||
941,954 -> 941,940
|
||||
987,51 -> 56,982
|
||||
243,571 -> 243,385
|
||||
36,138 -> 36,24
|
||||
28,971 -> 975,24
|
||||
945,842 -> 759,842
|
||||
474,470 -> 784,470
|
||||
918,520 -> 512,114
|
||||
836,606 -> 668,774
|
||||
557,918 -> 422,918
|
||||
925,889 -> 875,939
|
||||
14,317 -> 467,770
|
||||
638,312 -> 440,312
|
||||
139,353 -> 212,353
|
||||
690,339 -> 622,339
|
||||
904,863 -> 307,266
|
||||
302,939 -> 148,939
|
||||
493,409 -> 93,809
|
||||
185,871 -> 546,871
|
||||
25,355 -> 889,355
|
||||
355,832 -> 273,832
|
||||
918,56 -> 38,936
|
||||
950,189 -> 81,189
|
||||
311,469 -> 289,469
|
||||
567,269 -> 963,269
|
||||
958,306 -> 958,852
|
||||
847,753 -> 803,753
|
||||
359,983 -> 332,956
|
||||
885,128 -> 164,128
|
||||
479,841 -> 350,841
|
||||
850,280 -> 163,967
|
||||
784,822 -> 555,822
|
||||
607,29 -> 245,391
|
||||
293,280 -> 293,685
|
||||
273,716 -> 273,327
|
||||
974,155 -> 974,415
|
||||
419,34 -> 419,898
|
||||
543,344 -> 543,126
|
||||
137,163 -> 737,163
|
||||
252,158 -> 899,805
|
||||
581,36 -> 857,36
|
||||
588,728 -> 588,511
|
||||
320,303 -> 706,303
|
||||
180,914 -> 939,155
|
||||
547,676 -> 547,535
|
||||
974,961 -> 97,84
|
||||
179,757 -> 789,757
|
||||
450,706 -> 450,452
|
||||
595,598 -> 526,598
|
||||
184,42 -> 184,43
|
||||
221,963 -> 738,963
|
||||
79,976 -> 79,109
|
||||
638,793 -> 638,986
|
||||
98,81 -> 534,517
|
||||
700,334 -> 700,201
|
||||
533,265 -> 76,265
|
||||
131,839 -> 728,839
|
||||
120,78 -> 815,773
|
||||
455,825 -> 165,825
|
||||
521,258 -> 978,258
|
||||
425,931 -> 966,931
|
||||
358,754 -> 506,902
|
||||
126,228 -> 851,228
|
||||
393,114 -> 29,114
|
||||
58,615 -> 425,615
|
||||
384,607 -> 581,804
|
||||
140,939 -> 140,673
|
||||
372,400 -> 795,400
|
||||
115,165 -> 84,165
|
||||
788,275 -> 544,275
|
||||
126,329 -> 725,329
|
||||
182,541 -> 99,541
|
||||
410,709 -> 974,709
|
||||
681,202 -> 687,208
|
||||
495,832 -> 733,594
|
||||
259,781 -> 444,596
|
||||
49,442 -> 49,243
|
||||
988,986 -> 18,16
|
||||
224,624 -> 224,32
|
||||
755,41 -> 185,611
|
||||
512,168 -> 492,168
|
||||
55,891 -> 762,184
|
||||
162,845 -> 162,19
|
||||
976,771 -> 449,244
|
||||
398,789 -> 398,336
|
||||
796,28 -> 796,326
|
||||
589,735 -> 589,668
|
||||
382,303 -> 10,675
|
||||
650,968 -> 140,458
|
||||
784,265 -> 245,804
|
||||
961,980 -> 346,365
|
||||
685,360 -> 567,360
|
||||
60,847 -> 749,158
|
||||
828,80 -> 46,862
|
||||
96,760 -> 96,340
|
||||
22,372 -> 878,372
|
||||
26,973 -> 928,71
|
||||
86,697 -> 86,790
|
||||
684,896 -> 684,638
|
||||
644,370 -> 644,177
|
||||
915,854 -> 134,73
|
||||
453,678 -> 453,394
|
||||
716,594 -> 160,38
|
||||
757,62 -> 518,301
|
||||
977,928 -> 977,53
|
||||
705,858 -> 328,858
|
||||
352,527 -> 759,120
|
||||
221,365 -> 677,821
|
||||
237,815 -> 829,815
|
||||
756,615 -> 756,129
|
||||
681,948 -> 28,295
|
||||
712,731 -> 120,731
|
||||
141,292 -> 141,338
|
||||
874,781 -> 874,414
|
||||
197,892 -> 972,117
|
||||
673,779 -> 113,219
|
||||
469,240 -> 887,240
|
||||
546,367 -> 270,367
|
||||
115,356 -> 264,505
|
||||
587,969 -> 942,969
|
||||
697,332 -> 432,597
|
||||
251,742 -> 251,402
|
||||
655,258 -> 875,38
|
||||
806,801 -> 438,801
|
||||
776,525 -> 296,45
|
||||
437,137 -> 437,507
|
||||
310,870 -> 875,305
|
||||
92,877 -> 949,20
|
||||
96,695 -> 269,868
|
||||
917,601 -> 917,347
|
||||
598,172 -> 91,679
|
||||
407,743 -> 818,743
|
||||
74,932 -> 720,286
|
||||
574,967 -> 747,794
|
||||
989,982 -> 22,15
|
||||
128,514 -> 590,976
|
||||
46,86 -> 851,891
|
||||
976,914 -> 87,25
|
||||
948,659 -> 948,40
|
||||
442,504 -> 442,398
|
||||
310,824 -> 509,625
|
||||
946,338 -> 433,851
|
||||
555,241 -> 531,265
|
||||
336,13 -> 336,48
|
||||
688,880 -> 394,880
|
||||
105,143 -> 823,861
|
||||
761,330 -> 228,863
|
||||
405,132 -> 853,580
|
||||
780,886 -> 326,432
|
||||
471,45 -> 471,600
|
||||
810,971 -> 810,418
|
||||
591,58 -> 591,821
|
||||
494,133 -> 616,11
|
||||
519,746 -> 519,230
|
||||
696,879 -> 107,879
|
||||
21,24 -> 937,940
|
||||
18,822 -> 637,203
|
||||
159,468 -> 570,468
|
||||
635,850 -> 635,408
|
||||
446,469 -> 337,469
|
||||
962,690 -> 962,28
|
||||
925,958 -> 40,73
|
||||
123,183 -> 545,183
|
||||
26,767 -> 26,548
|
||||
898,101 -> 249,750
|
||||
85,706 -> 85,446
|
||||
224,763 -> 15,763
|
||||
503,655 -> 847,655
|
||||
659,905 -> 650,905
|
||||
596,462 -> 851,207
|
||||
421,230 -> 884,230
|
||||
550,18 -> 524,18
|
||||
437,375 -> 715,375
|
||||
210,202 -> 210,348
|
||||
263,298 -> 263,948
|
||||
132,352 -> 749,969
|
||||
582,454 -> 582,771
|
||||
724,99 -> 724,388
|
||||
16,528 -> 16,317
|
||||
22,949 -> 22,987
|
||||
457,328 -> 457,327
|
||||
279,130 -> 279,234
|
||||
56,338 -> 368,650
|
||||
448,295 -> 533,295
|
||||
898,90 -> 60,928
|
||||
116,619 -> 208,527
|
||||
614,481 -> 614,152
|
||||
113,412 -> 543,412
|
||||
854,305 -> 854,748
|
||||
225,825 -> 115,935
|
||||
976,365 -> 522,365
|
||||
547,394 -> 547,82
|
||||
800,695 -> 800,111
|
||||
36,10 -> 973,947
|
||||
557,441 -> 527,441
|
||||
62,798 -> 708,798
|
||||
582,585 -> 816,585
|
||||
599,33 -> 70,562
|
||||
971,863 -> 971,150
|
||||
408,273 -> 535,273
|
||||
797,215 -> 692,215
|
||||
537,922 -> 519,922
|
||||
299,302 -> 504,302
|
||||
88,361 -> 88,249
|
||||
430,311 -> 544,311
|
||||
902,127 -> 902,791
|
||||
346,986 -> 346,307
|
||||
523,534 -> 285,296
|
||||
600,628 -> 676,628
|
||||
373,689 -> 945,117
|
||||
265,189 -> 343,189
|
||||
391,632 -> 391,728
|
||||
500,516 -> 712,304
|
||||
250,891 -> 41,891
|
||||
591,539 -> 591,577
|
||||
968,250 -> 265,250
|
||||
80,32 -> 80,988
|
||||
668,385 -> 323,385
|
||||
407,103 -> 865,103
|
||||
755,190 -> 693,190
|
||||
754,113 -> 754,392
|
||||
957,261 -> 967,251
|
||||
881,734 -> 803,812
|
||||
234,912 -> 234,326
|
||||
711,893 -> 711,29
|
||||
513,479 -> 782,479
|
||||
111,224 -> 675,224
|
||||
125,645 -> 125,502
|
||||
591,983 -> 591,726
|
||||
462,390 -> 85,390
|
||||
854,275 -> 649,480
|
||||
253,792 -> 23,792
|
||||
940,975 -> 447,975
|
||||
604,297 -> 604,386
|
||||
172,217 -> 633,217
|
||||
159,941 -> 159,569
|
||||
468,72 -> 468,787
|
||||
931,935 -> 36,40
|
||||
114,166 -> 360,412
|
||||
539,740 -> 349,930
|
||||
314,342 -> 65,93
|
||||
905,650 -> 817,650
|
||||
786,546 -> 173,546
|
||||
209,967 -> 209,142
|
||||
679,64 -> 68,675
|
||||
472,70 -> 840,70
|
||||
750,753 -> 124,753
|
||||
79,490 -> 652,490
|
||||
655,114 -> 655,575
|
||||
984,18 -> 984,287
|
||||
458,41 -> 961,544
|
||||
358,208 -> 358,679
|
||||
977,830 -> 283,136
|
||||
250,800 -> 187,800
|
||||
64,516 -> 64,809
|
||||
196,235 -> 781,235
|
||||
727,988 -> 891,824
|
||||
437,158 -> 437,549
|
||||
565,231 -> 565,368
|
||||
293,411 -> 29,147
|
||||
100,905 -> 969,36
|
||||
59,615 -> 920,615
|
||||
844,883 -> 844,173
|
||||
966,980 -> 25,39
|
||||
802,923 -> 163,284
|
||||
980,24 -> 730,24
|
||||
357,474 -> 32,799
|
||||
735,23 -> 735,566
|
||||
970,426 -> 970,42
|
||||
194,542 -> 194,328
|
||||
372,69 -> 630,69
|
||||
779,295 -> 239,835
|
||||
793,381 -> 650,238
|
||||
366,579 -> 366,762
|
||||
502,354 -> 530,326
|
||||
432,125 -> 432,795
|
||||
162,220 -> 162,239
|
||||
631,944 -> 63,944
|
||||
261,526 -> 330,457
|
||||
913,445 -> 913,958
|
||||
786,160 -> 333,613
|
||||
919,123 -> 88,954
|
@ -0,0 +1,109 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type Point struct {
|
||||
x int
|
||||
y int
|
||||
}
|
||||
|
||||
type Line struct {
|
||||
start Point
|
||||
end Point
|
||||
}
|
||||
|
||||
func createLine(s []string) *Line {
|
||||
l := &Line{start: Point{}, end: Point{}}
|
||||
l.start.x, _ = strconv.Atoi(s[0])
|
||||
l.start.y, _ = strconv.Atoi(s[1])
|
||||
l.end.x, _ = strconv.Atoi(s[2])
|
||||
l.end.y, _ = strconv.Atoi(s[3])
|
||||
return l
|
||||
}
|
||||
|
||||
func (l *Line) Walk() []Point {
|
||||
var p []Point
|
||||
|
||||
xstart, xend := minMax(l.start.x, l.end.x)
|
||||
ystart, yend := minMax(l.start.y, l.end.y)
|
||||
// diagonal line
|
||||
if xend-xstart == yend-ystart {
|
||||
for x, y := l.start.x, l.start.y; ; {
|
||||
p = append(p, Point{x: x, y: y})
|
||||
if x == l.end.x {
|
||||
break
|
||||
}
|
||||
if x > l.end.x {
|
||||
x--
|
||||
} else {
|
||||
x++
|
||||
}
|
||||
if y > l.end.y {
|
||||
y--
|
||||
} else {
|
||||
y++
|
||||
}
|
||||
}
|
||||
fmt.Print()
|
||||
} else {
|
||||
// horizontal line
|
||||
for x := xstart; x <= xend && l.start.y == l.end.y; x++ {
|
||||
p = append(p, Point{x: x, y: l.start.y})
|
||||
}
|
||||
// vertical line
|
||||
for y := ystart; y <= yend && l.start.x == l.end.x; y++ {
|
||||
p = append(p, Point{x: l.start.x, y: y})
|
||||
}
|
||||
}
|
||||
return p
|
||||
}
|
||||
|
||||
func minMax(a int, b int) (min int, max int) {
|
||||
if a > b {
|
||||
min, max = b, a
|
||||
} else {
|
||||
min, max = a, b
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func main() {
|
||||
file, err := os.Open("input.txt")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
scanner.Split(bufio.ScanLines)
|
||||
|
||||
r := regexp.MustCompile("[0-9]+")
|
||||
|
||||
floorMap := make(map[Point]int)
|
||||
|
||||
for scanner.Scan() {
|
||||
text := scanner.Text()
|
||||
coords := r.FindAllString(text, -1)
|
||||
line := createLine(coords)
|
||||
points := line.Walk()
|
||||
|
||||
for _, p := range points {
|
||||
floorMap[p]++
|
||||
}
|
||||
}
|
||||
|
||||
var overlapCount int
|
||||
for _, v := range floorMap {
|
||||
if v > 1 {
|
||||
overlapCount++
|
||||
}
|
||||
}
|
||||
fmt.Println(overlapCount)
|
||||
}
|
Loading…
Reference in New Issue