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