This commit is contained in:
Oscar Blue 2024-03-16 21:45:55 +00:00
parent 8ce6094781
commit 455d073426
7 changed files with 1059 additions and 0 deletions

View file

@ -0,0 +1,140 @@
613,439,498,438,617,343,942,
790,269,735,679,444,147,441,
539,422,662,691,124,15,675,404,872,237,930,
334,861,479,424,402,314,905,833,293,
906,950,712,437,142,359,551,14,
509,890,9,847,154,568,102,280,
950,67,161,530,426,
614,59,591,259,342,427,29,946,
896,808,6,35,538,572,510,677,380,
534,814,879,615,90,580,413,
810,714,260,498,386,877,754,793,943,
845,483,55,643,421,527,938,993,706,
339,370,540,337,39,404,483,308,567,
994,855,356,768,114,195,976,496,61,610,369,200,
15,890,447,303,821,251,8,
962,260,716,893,304,537,805,388,
201,281,471,959,238,180,641,
278,132,65,920,831,97,828,533,368,66,
627,343,111,100,693,780,
974,474,537,759,101,366,183,461,178,850,644,57,
67,879,54,100,355,794,826,530,
494,549,670,194,173,329,14,811,303,891,541,975,
403,591,667,630,667,819,19,
572,271,910,578,551,818,534,217,809,262,
105,748,637,515,119,143,258,
20,115,714,525,491,768,647,433,583,404,268,
650,311,275,283,306,659,499,652,176,
100,193,637,828,806,725,418,370,86,977,
350,229,724,981,582,38,38,503,
380,311,968,647,33,634,13,72,
203,52,295,888,277,938,662,3,619,320,766,
149,883,817,163,959,8,811,354,392,
727,789,739,537,326,925,938,
383,505,166,565,491,136,693,870,654,313,
801,962,787,181,186,103,826,599,289,311,768,986,
292,414,214,439,130,52,989,
221,149,405,393,714,652,607,412,682,982,
491,906,909,885,747,19,
567,193,1,925,78,117,797,208,
943,571,919,487,433,922,795,
66,92,367,883,625,479,852,277,635,860,940,21,995,
206,595,691,
766,649,241,56,724,713,836,863,676,824,506,247,132,
278,917,864,219,973,744,
912,979,953,733,
995,905,552,391,40,388,141,731,640,511,
123,662,989,672,611,910,5,584,
306,289,673,970,51,
916,23,14,828,908,181,227,26,190,723,877,513,977,319,867,997,76,
158,605,264,569,1,
453,815,430,946,840,456,152,23,
216,389,930,211,635,472,185,444,783,966,
72,527,636,746,575,5,276,821,568,
765,991,686,142,588,366,395,983,266,
383,330,337,853,337,927,703,513,855,
652,431,48,512,541,835,
205,510,92,901,778,588,968,603,820,75,844,
560,597,698,427,249,
817,50,208,149,169,835,522,
470,151,731,395,979,200,
242,698,763,531,252,533,64,233,262,498,
994,620,639,575,934,606,99,770,72,
658,355,597,645,292,354,409,515,
453,594,571,552,193,8,820,69,877,846,525,446,386,
652,500,361,290,
833,652,410,924,72,104,231,223,775,375,
470,663,179,10,256,770,243,354,
5,962,529,39,255,73,
253,766,659,497,241,656,630,262,212,154,
755,375,936,159,786,981,
78,426,39,885,835,432,439,335,
574,785,736,860,395,381,114,825,
557,187,640,514,36,834,630,194,164,440,
744,908,185,165,635,464,354,104,996,
805,604,375,326,970,
751,776,661,777,434,952,662,2,923,99,463,514,
55,414,522,378,89,
331,403,94,547,551,300,600,452,976,213,815,757,
209,760,963,906,785,
958,319,334,640,798,611,678,630,389,426,
961,608,472,45,390,
597,191,861,279,689,972,560,900,548,97,240,51,2,411,233,
379,770,989,955,214,588,
982,82,850,450,755,799,539,298,993,788,
901,382,569,428,281,599,98,789,956,450,
497,664,610,944,778,713,375,
637,443,905,883,389,563,388,559,386,
241,597,876,731,192,483,958,828,100,
89,994,228,18,413,1,157,453,
573,198,447,488,672,383,589,511,46,
449,228,662,321,34,838,
592,659,188,248,836,141,344,
564,481,861,93,936,
618,287,490,304,662,196,72,918,339,999,28,
556,812,272,235,510,51,804,209,323,
471,474,446,855,265,588,24,522,
86,755,664,311,793,361,685,859,158,667,871,
529,624,578,334,843,
32,12,818,406,888,555,678,796,159,142,289,
797,246,473,485,683,526,987,
272,763,546,203,560,294,921,
439,144,909,221,245,847,971,812,
66,20,337,591,226,113,321,756,518,
325,166,848,267,857,34,471,579,851,322,125,
157,77,567,646,783,634,5,
598,497,275,908,172,324,263,207,340,160,80,
484,833,998,945,135,108,104,
908,645,264,581,332,519,811,214,57,
543,807,768,23,578,545,988,
547,818,669,395,88,964,230,105,471,
231,645,982,398,442,311,466,168,788,474,
233,638,254,824,676,413,818,
672,137,866,862,376,933,455,158,682,180,333,
454,18,677,664,867,
318,107,793,361,372,509,765,203,737,
216,831,509,392,508,780,219,635,
334,862,945,162,529,164,627,381,591,83,155,
278,476,363,785,431,529,194,982,91,
994,480,236,825,450,797,634,249,626,
408,699,527,900,145,880,833,456,914,432,391,537,
836,955,126,557,870,38,388,
275,526,66,587,
400,933,535,455,209,699,90,10,207,67,
757,719,38,22,254,736,201,80,
86,584,531,335,949,500,544,22,11,774,434,337,331,
183,553,691,131,186,591,171,
645,365,654,843,649,673,867,218,
533,206,528,618,891,41,988,596,391,506,672,103,926,
49,445,678,61,
63,998,927,295,600,303,352,358,464,234,517,778,32,641,
693,70,417,417,940,
529,561,706,894,740,117,251,642,763,183,
544,651,951,438,505,309,800,534,
864,930,36,418,703,431,
463,73,476,942,55,127,560,959,255,
176,969,35,242,147,914,191,
71,686,260,62,423,823,186,
521,447,940,123,62,855,452,455,264,9,165,
608,675,72,484,
302,476,64,159,815,445,965,558,824,281,98,

View file

@ -0,0 +1,198 @@
package main
import (
"bufio"
"fmt"
"log"
"os"
"strconv"
"strings"
)
const demo = false
type part struct {
value int
startIndex int
endIndex int
row int
}
var searchPattern = [][]int{
{-1, -1}, // top left
{-1, 0}, // top centre
{-1, 1}, // top right
{0, -1}, // mid left
{0, 1}, // mid right
{1, -1}, // bottom left
{1, 0}, // bottom centre
{1, 1}, // bottom right
}
func readLines(path string) ([]string, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
var lines []string
scanner := bufio.NewScanner(file)
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
return lines, scanner.Err()
}
func readInputFileLines() []string {
var input_name string
if demo == true {
input_name = "demo-input.txt"
} else {
input_name = "input.txt"
}
// path := year + "/" + day + "/" + part + "/" + input_name
path := "../" + input_name
lines, err := readLines(path)
if err != nil {
log.Fatalf("readLines: %s", err)
}
return lines
}
func isNumeric(s string) bool {
_, err := strconv.Atoi(s)
return err == nil
}
func createMatrix(lines []string) [][]string {
matrix := make([][]string, len(lines))
var row []string
for i := 0; i < len(lines); i++ {
row = strings.Split(lines[i], "")
matrix[i] = row
}
return matrix
}
func getNumbersAndIndexes(matrix [][]string) []part {
var parts []part
for i := range matrix {
row := matrix[i]
var currentNum []string
var rowParts []part
var searchingNumber bool = false
var startIndex int
for j := range row {
var part part
if isNumeric(row[j]) {
if !searchingNumber {
startIndex = j
}
searchingNumber = true
currentNum = append(currentNum, row[j])
if j == len(row)-1 {
part.startIndex = startIndex
part.endIndex = j - 1
numberString := strings.Join(currentNum, "")
part.value, _ = strconv.Atoi(numberString)
part.row = i
rowParts = append(rowParts, part)
currentNum = nil
searchingNumber = false
}
} else if searchingNumber {
part.startIndex = startIndex
part.endIndex = j - 1
numberString := strings.Join(currentNum, "")
part.value, _ = strconv.Atoi(numberString)
part.row = i
rowParts = append(rowParts, part)
currentNum = nil
searchingNumber = false
}
}
parts = append(parts, rowParts...)
}
return parts
}
func checkIfPartNumber(part part, matrix [][]string) bool {
row := part.row
for column := part.startIndex; column <= part.endIndex; column++ {
for index, element := range searchPattern {
if row == 0 && (index == 0 || index == 1 || index == 2) {
// if row = 0 {!searchPattern[0, 1, 2]}
continue
} else if row == len(matrix)-1 && (index == 5 || index == 6 || index == 7) {
// if row = len(matrix) {!searchPattern[5, 6, 7]}
continue
} else if column == 0 && (index == 0 || index == 3 || index == 5) {
// if column = 0 {!searchPattern[0, 3, 5]}
continue
} else if column == len(matrix[row])-1 && (index == 2 || index == 4 || index == 7) {
// if column = len(row) {!searchPattern[2, 4, 7]}
continue
}
adjacentChar := matrix[row+element[0]][column+element[1]]
if !isNumeric(adjacentChar) && adjacentChar != "." {
return true
}
}
}
return false
}
func main() {
lines := readInputFileLines()
matrix := createMatrix(lines)
// fmt.Println(matrix[0][1]) // [row][column]
numbers := getNumbersAndIndexes(matrix)
var total int
for _, element := range numbers {
if checkIfPartNumber(element, matrix) {
total += element.value
}
}
// f, err := os.Create("code-file.txt")
// if err != nil {
// log.Fatal(err)
// }
// defer f.Close()
// row := 0
// for _, element := range numbers {
// if element.row > row {
// f.WriteString("\n")
// row = element.row
// }
// f.WriteString(fmt.Sprintf("%d,", element.value))
// }
// fmt.Println(numbers)
fmt.Println(total)
// fmt.Println(checkIfPartNumber(numbers[1], matrix))
}
// Save numbers
// Save index of first and last character
// Check adjacent characters
// if symbol, save if not discard

View file

@ -0,0 +1,10 @@
467..114..
...*......
..35..633.
......#...
617*......
.....+.58.
..592.....
......755.
...$.*....
.664.598..

View file

@ -0,0 +1,140 @@
613,439,498,438,617,343,942
790,269,735,679,444,147,441
539,422,662,691,124,15,675,404,872,237,930
334,861,479,424,402,314,905,833,293
906,950,712,437,142,359,551,14
509,890,9,847,154,568,102,280
950,67,161,530,426
61459,591,259,342,427,29,946
896,808,6,35,538,572,510,677,380
534,814,879,615,90,580,413
810,714,260,498,386,877,754,793,943
845,483,55,643,421,527,938,993,706
339,370,540,337,39,404,483,308,567
994,855,356,768,114,195,976,496,61,610,369,200
15,890,447,303,821,251,8
962,260,716,893,304,537,805,388
201,281,471,959,238,180,641
278,132,65,920,831,97,828,533,368,66
627,343,111,100,693,780
974,474,537,759,101,366,183,461,178,850,644,57
67,879,54,100,355,794,826,530
494549,670,194,173,329,14,811,303,891,541,975
403,591,667,630,667,819,19
572271,910,578,551,818,534,217,809,262
105,748,637,515,119,143,258
20,115,714,525,491,768,647,433,583,404,268
650,311,275,283,306,659,499,652,176
100,193,637,828,806,725,418,370,86,977
350,229,724,981,582,38,38,503
380,311,968,647,33,634,13,72
203,52,295,888,277,938,662,3,619,320,766
149,883,817,163,959,8,811,354,392
727,789,739,537,326,925,938
383,505,166,565,491,136,693,870,654,313
801,962,787,181,186,103,826,599,289,311,768,986
292,414,214,439,130,52,989
221,149,405,393,714,652,607,412,682,982
491,906,909,885,747,19
567,193,1,925,78,117,797,208
943,571,919,487,433,922,795
66,92,367,883,625,479,852,277,635,860,940,21,995
206,595,691
766,649,241,56,724,713,836,863,676,824,506,247,132
278,917,864,219,973,744
912,979,953,733
995,905,552,391,40,388,141,731,640,511
123662,989,672,611,910,5,584
306,289,673,970,51
916,23,14,828,908,181,227,26,190,723,877,513,977,319,867,997,76
158,605,264,569,
453,815,430,946,840,456,152,23
216389,930,211,635,472,185,444,783,966
72,527,636,746,575,5,276,821,568
765,991,686,142,588,366,395,983,266
383,330,337,853,337,927,703,513,855
652,431,48,512,541,835
205,510,92,901,778,588,968,603,820,75,844
560,597,698,427,249
817,50,208,149,169,835,522
470,151,731,395,979,200
242,698,763,531,252,533,64,233,262,498
994,620,639,575,934,606,99,770,72
658,355,597,645,292,354,409,515
453,594,571,552,193,8,820,69,877,846,525,446,386
652,500,361,290
833,652,410,924,72,104,231,223,775,375
470,663,179,10,256,770,243,354
5,962,529,39,255,73
253,766,659,497,241,656,630,262,212,154
755,375,936,159,786,981
78,426,39,885,835,432,439,335
574,785,736,860,395,381,114,825
557,187,640,514,36,834,630,194,164,440
744,908,185,165,635,464,354,104,996
805,604,375,326,970
751,776,661,777,434,952,662,2,923,99,463,514
55,414,522,378,89
331,403,94,547,551,300,600,452,976,213,815,757
209,760,963,906,785
958319,334,640,798,611,678,630,389,426
961,608,472,45,390
597,191,861,279,689,972,560,900,548,97,240,51,2,411,23
379,770,989,955,214,588
982,82,850,450,755,799,539,298,993,788
901,382,569,428,281,599,98,789,956,450
497,664,610,944,778,713,375
637,443,905,883,389,563,388,559,386
241,597,876,731,192,483,958,828,100
89,994,228,18,413,1,157,453
573,198,447,488,672,383,589,511,46
449,228,662,321,34,838
592,659,188,248,836,141,344
564,481,861,93,936
618,287,490,304,662,196,72,918,339,999,28
556,812,272,235,510,51,804,209,323
471,474,446,855,265,588,24,522
86,755,664,311,793,361,685,859,158,667,871
529,624,578,334,843
32,12,818,406,888,555,678,796,159,142,289
797,246,473,485,683,526,987
272,763,546,203,560,294,921
439,144,909,221,245,847,971,812
66,20,337,591,226,113,321,756,518
325,166,848,267,857,34,471,579,851,322,125
157,77,567,646,783,634,5
598,497,275,908,172,324,263,207,340,160,80
484,833,998,945,135,108,104
908,645,264,581,332,519,811,214,57
543,807,768,23,578,545,988
547,818,669,395,88,964,230,105,471
231,645,982,398,442,311,466,168,788,474
233,638,254,824,676,413,818
672,137,866,862,376,933,455,158,682,180,333
454,18,677,664,86
318,107,793,361,372,509,765,203,737
216,831,509,392,508,780,219,63
334862,945,162,529,164,627,381,591,83,155
278,476,363,785,431,529,194,982,91
994,480,236,825,450,797,634,249,626
408699,527,900,145,880,833,456,914,432,391,537
836,955,126,557,870,38,388
275,526,66,587
400,933,535,455,209,699,90,10,207,67
757,719,38,22,254,736,201,80
86,584,531,335,949,500,544,22,11,774,434,337,331
183,553,691,131,186,591,171
645,365,654,843,649,673,867,218
533,206,528,618,891,41,988,596,391,506,672,103,926
49,445,678,61
63,998,927,295,600,303,352,358,464,234,517,778,32,641
693,70,417,417,940
529,561,706,894,740,117,251,642,763,183
544651,951,438,505,309,800,534
864,930,36,418,703,431
463,73,476,942,55,127,560,959,255
176,969,35,242,147,914,191
71,686,260,62,423,823,186
521,447,940,123,62,855,452,455,264,9,165
608,675,72,484
302,476,64,159,815,445,965,558,824,281,98

140
2023/day03/part02/input.txt Normal file
View file

@ -0,0 +1,140 @@
.....613...................................439............498.........................438......617....343.............942...................
.......*............790...........269..735..*........................../679..............*444.*.........*.......147...*.............441.....
....539......422.......*......662*........*..691..........*124.15..675.................=.......404...872............237......930.....+......
........334.............861.........%....479..........424.......+.@.......402.......314...905................833........*293................
..........#.......................906.................*...............950.....................712...437.........*142.359........551.14......
....509.....=...........890...................&........9................./..847.154..568............@...102................280...*..........
.....*..950.67.............-......161.......530....=...................=............*...../..............@.......................426........
614...............................*.............59.591.....259*.......342...427..........29../.........-....................946.............
.......896........808..............6.............*.............35............./......538.....572....510...677*380...........=...............
.......*.............*534..814................879...............................615/....*............................90.........580...413...
.......810..........................................714.260..498..........386..........877......754........793...943.*............/.....*...
.....................845..#..483........55...643.......*......&.....421..+.....+...527.....938............*.......*...993...............706.
....339*..370..........-.540.@.....337..........*........39........*........404......&.......*...483...308.....567................../.......
..........*......994..............*......855..356.768.....*.....114...@195..................976....-...............496.61...610...369.200...
..........15........*...@890...447.........*.........*.303......................821..251*....................8........*....+................
...962.............260...................@..716....893..............304............*.....537.........805.....#..........................388.
............201*........................281.............471........*...../.....=....959...............%..238....180..641@...................
....278.........132..........65...&.........*920.......*.......831..97..828.....533......#368............../.......*......66-...............
.....*................*......*..627......343..........111.....*.....................................*.100$........693..........780..........
...974........474..537.759.101.......366....................183...............461*178..850.......644.........57.............................
..........67$.@.........................*...879..................54.100..355.................794.............=.....................826.530..
494*549...............670...=194.....173............329=....*14....*........*....811*303....*....891..541........975........................
........................*................403.............591................667............630....*.....$.667*....#...*......819.........19.
572...@.......%.......271..........910.........578.551..........818.534...........................217.........809.....262.....+.............
.....105.......748..............%........637...*...*........515....*...................119............*143..@.....258.......................
.20........115........714....525...491....*..768...647.....*...................433..../............583.......404..#..............268........
.......650..*.....%......%............*.311............275.283.306..=659.....................499........@................652.176............
..100.....#.193.637..........828...806.............725*........*..............................@......418........370.......@........86&..977.
......350................229..$.............................%...724.....#.981*582..$...............................*.38.....38.503......$...
.......#..380...........*.............311........%..........968......647..........33..................634*13......72./...%...*..*...........
............*.203*52.......+........./...........295.....................888..........277...938..662.........3.........619.320...766........
....149...883..............817...........163............959..........8.....*.811%............*......&...354..+.....392......................
....................727........789......*...............@...............739.........537....326.............*......*.......&925.........938..
..383..505.166......-.........*.......565......491........136.....693..........870.%...........#...........654..&..313.................*....
.........=..$..801....962.....787..........181......186.../..........*103........+............826....599.......289.....311.768..........986.
.292.414..........*......*................*..................214.....................439.@130...........+...52........*.....*.....989*......
.........221......149....405...@...........393..........714.....&.......652............*............607....*.........412....682.......982...
.........*......................491.......................*..............-......906..909.......885.....%.747......19........................
......567.........193........1..................925.........78......117.....797*................@............208............................
.............943..*.....571...*.....919.487............/....+.........*.......................................*......433.922.......795......
....66......*....92..........367.......*....883.625.....479....852@.............277.635............860.......940..21....*....995.....&......
.........206............595%...................*............./.......................*......691.......*..........*..........*...............
.....766.............&................=...........*...649-.241...56..@724..713..836.863.......=....676...+..824.506......247..$132..........
.....................278..........917..864.....219...............+............%.*......................973.........................744......
.........912...............%......*................979....-953...................733.............&................................*.........
.........@........$........995....905......552...................391.........40=.......388.......141...................731*640.....511......
123..662...989.672............................*........611......+.....%910.............*....5......................584......................
...*...*../...........................306.....289.*....*.............................673.....*........970..51....@....*...............#.....
...916.23.......14..828........908.................181.227......26....190.....723..*.......877...513...@...*..977......319..867/...997..76..
..........158........=............$..............................%............#...605....................264.......569.....................1
.....453..*............................815.430*........946..840.........................456.........152................23...................
216.....*.389...........930............*.......211.......-...*.....635..472*185.................................@444...*.....783...966......
...*...72.................*..........527...+...............636.......*.............746....575.....5...276.821........568.+......*...-.......
..765...........991........686..142*......588......@...........366....395.............*..*...............................983...266..........
.................+..................383.............330..&......%...............337.853.337........927.@703.&513......................855...
...652................=../..@.............431....48......512...............541....%.................+.............-...835/.......%......*...
.....*..205.....510.92..901.778............*......./............588.........#..........@....................968.603........820...75....844..
...560............/........................597...................&.......#............698..........427........*...../249....................
..............817..........50..........208..................149..........169........................*......835..............522.............
.....-......................*............*.....470......%..*.......151.................731.......395..979.........200.........#.......$.....
..242.........698........763............531.....*....252...533.....*.........64.........*...233.........*............*262.............498...
........994.....*...............620.639......575................934..606.99....*....770.72.#......@.............................-...........
.......*.........658..355.........#...*............*...*597..............*...645......*........292........-..354...@.......409...515........
........453..594.......#..............571..=552.193...8.............820...69.........877....%..........846.....*...525.446....*........*386.
....&...........#..................................................*....-.................652.................500............361....290.....
...833..................652.....410..924*72..........*.../104.....231.223....@...%....775................375................................
.................470...........*..................663.......................179.10....&.........256..770*............243.........354........
...*5.............*............962......-....................../.....529...................../.....*.........39.255./.......73......&.......
...............253..766....$.............659........$497..241.656....&....630................262.212...154.......*............*.............
...................*....755...................375...........*................@...........................*.....936...159.......786...981....
...................78....................426.....*39....885..835....432..............439.................335............@...................
.......*574.785............................................*................736......*.....860....395...........381...........@..114...825..
....557........@.............187.....640......514.36*.....834.........630...@....*..194......#....-......*......*....164....440.%.....*.....
...................744.908....*........*......*......185......................165........635..........464.354..104.................996......
.........................*.805..604..375...326........................*.................../....970.....................*....................
....751.....776.......661.......*.................777*........434..952.662....2......................$.923...........99.463.........&.514...
....*........*.....55..........414..............................*..............$......&522........378............+............*....89..*....
.331.......403..94..................547.551..............300...600........=......452.......976.+...............213.........815.757..........
.....209-......*...760...............@...*.............................963........+..........*.906.......785...........................+....
958...........319....@.....+.334..........640.................................798.........611......678.....*..630.......389............426..
.........../............961..*..................608..472...........45...........*...................*....390.............*..................
.....597..191......&861.......279.689.............=....*.972*..........560......900.............548..97.......240...51....2....411.......233
......*.......379.................*......+...........770.....989...955...&.214#.........*588.......*.............%..$.......................
....982.&.......................82....850...450......................*...............755.....799....539.....298.........993........788......
.........901....382.......569...............&........428............281.....=599.........98.../....................789.@......956.=....450..
.................*..497/..*...664....*...............%.........610................/944.....*....778......713*375.....*.................*....
.......@......637........443.../...905............................*883.......389...........563......................388...$.....*559....386.
........241.......*597.........................876..............$........731*.....192.483..............#958...%..*......828..100............
...89&.........994.........*228...............#...........18...413..............1....*...........*..........157...453.......................
..........573...........198............447........488.672../.#......&383.........%.....589........511..................46...................
.....*449......$...228*................+.............*........662.........%.............*....321........34%....838&...*.....................
..592.......659...............=...........................................188..248....836......*....................141..%......344.........
............................564....481..............-..........................................861............%...........93.....$...$.936..
..........618.287......490$.......-............*..304.........662.........@....196...@...72*.........918.339.999.-.................28.......
.............*..............................556.......812.272.....235@.510...#.....51.......804...........#.......209......323=.............
.../471..474.................446.......*........855....*....#..............265..................588.24.......522............................
............*........86..755..+........664........*.....311........793.361.....685.......859..../...@..158......=...667#...........871......
...........529.........&.*.........................624........578....*...................*..................334..........843................
....32#........12..818...406......888.........555........678...*...................@....796.%........159.......-.......$.......@142..289....
..........797..@...*..........246....*..........*.............473............485..683.......526.......*................987...........*......
...272....-.......763...........*...............546....203......................%..................560.....294........................921...
......+...............439...144..909....221...............*245.............847....971..........812............*.............................
...........66....+.........*.........20......337.....591.......*.226.&.....*.......-..+113........./........321..756...518....*.............
......325......166..........848................*.267*........857..*..34.....471.............579+.851...322........#...*........125..........
.........*..........157......................77..................567....646...........................*......783....634.5....@..............
.598.497.275.......&......908=............................................$.......172*324...$263.....207......&.........@...340...160....80.
....*..................#........484..833.998....*.....#.......945.135.......108..................104........................................
..............908....645..264*..........*....581.332...519.......*.........*...........811..................214&..$............57...........
....%543.......@..............807..768.......................23............578.........&.....545...................988........*.........#...
...........547..........&.818........*................669....*........395.........88........*.....964*.....................230..105....471..
......................231.&.........645....*982..398...@.....442..........................311.........466....168..788..474......-...........
..233......638.254......................824..........%...........676.....413......818.............................*.......*.................
..............*.........672.137..............866...862...376........*.........933*............455.................158....682..180*333.......
........454$...........*.......................*........#.............................../18.....*.....677...664.........................%867
..............318....107...........*793.....361...............................*................372.......*.....*509......765.203....737.....
.................%........*.216.831....................509.....392............508...........&...........780.........219.....*......&....*635
334............&........862................945.....162*.........*.......529.......164.......627.381*........591........*83...........155....
.......278...476....363....../.........785.%................431...........*..........*529...........194......*..............982*91..........
.......*..................994..480.....*......*.......236...*........825.450......&.......&..797*.......634.249.......................626...
408.699........*527............*....900....145.880...*......833......*...........456....914......432...*...............391..537........*....
.........................836..955.....................126............557.............................870...38..........*.....*.......388....
.................+275.......*..................=................/............526..................................-....66....587............
..........................400....&............933.......*.....535........455*.....&...209.699........90....*10..207...............*.67......
..............757................719.-............*..-...38.....................22.....*..+...254.....$.736..................201.80.+.......
.....86.584............+..*..........531........335.949.......500...........544.....22.11....*......%.........774*434...337...........331...
.183...*............553....691..131..........................*.................*..............186..591..=171............................*...
...*..........645........*.........*.......365............654......*........843..649.............................673.....867........#.218...
....533..206..*...528=...618........891.41*......................988.596........$......%......391..506..672...../...........*103..926.......
............$.49..............*.....................445................@..../......&..678...................61..............................
..63.............998.......927...295..600....303..........352..............358...464......234.......-.......*....517.......-778....32..641..
....*693............*..............*...*...+.../..70......@...417......*.......$.........*..........417...940.....@....................*....
.................529...561.......706...894.740.......117=....+.......251....642...&763..183..................................$..............
544.651.......+........*....951..................438............505..................................309......800..........534..............
...*...........864.....930....*...36*.......418....*...............*................703...............*.........%..431................=.....
...........463................73.....476............942...55.....127..........................560..959................*.............255.....
......%...*.......176..969#...............@35...............*........-.........242...............=.........147.......914....191.............
....71....686................*.................260.........62.423...823..............-.....................*...................=.186........
.................521..447....940...123........*.................+..........62....855..452...............455.......264....9..........*165....
.......$608..675*.....*.../.......*............72......../...........*484....*....=................................*......*.....%...........
...................302..476.......64.....................159......815......445..........965........................558...824....281......98.

View file

@ -0,0 +1,140 @@
613,439,498,438,617,343,942,
790,269,735,679,444,147,441,
539,422,662,691,124,15,675,404,872,237,930,
334,861,479,424,402,314,905,833,293,
906,950,712,437,142,359,551,14,
509,890,9,847,154,568,102,280,
950,67,161,530,426,
614,59,591,259,342,427,29,946,
896,808,6,35,538,572,510,677,380,
534,814,879,615,90,580,413,
810,714,260,498,386,877,754,793,943,
845,483,55,643,421,527,938,993,706,
339,370,540,337,39,404,483,308,567,
994,855,356,768,114,195,976,496,61,610,369,200,
15,890,447,303,821,251,8,
962,260,716,893,304,537,805,388,
201,281,471,959,238,180,641,
278,132,65,920,831,97,828,533,368,66,
627,343,111,100,693,780,
974,474,537,759,101,366,183,461,178,850,644,57,
67,879,54,100,355,794,826,530,
494,549,670,194,173,329,14,811,303,891,541,975,
403,591,667,630,667,819,19,
572,271,910,578,551,818,534,217,809,262,
105,748,637,515,119,143,258,
20,115,714,525,491,768,647,433,583,404,268,
650,311,275,283,306,659,499,652,176,
100,193,637,828,806,725,418,370,86,977,
350,229,724,981,582,38,38,503,
380,311,968,647,33,634,13,72,
203,52,295,888,277,938,662,3,619,320,766,
149,883,817,163,959,8,811,354,392,
727,789,739,537,326,925,938,
383,505,166,565,491,136,693,870,654,313,
801,962,787,181,186,103,826,599,289,311,768,986,
292,414,214,439,130,52,989,
221,149,405,393,714,652,607,412,682,982,
491,906,909,885,747,19,
567,193,1,925,78,117,797,208,
943,571,919,487,433,922,795,
66,92,367,883,625,479,852,277,635,860,940,21,995,
206,595,691,
766,649,241,56,724,713,836,863,676,824,506,247,132,
278,917,864,219,973,744,
912,979,953,733,
995,905,552,391,40,388,141,731,640,511,
123,662,989,672,611,910,5,584,
306,289,673,970,51,
916,23,14,828,908,181,227,26,190,723,877,513,977,319,867,997,76,
158,605,264,569,1,
453,815,430,946,840,456,152,23,
216,389,930,211,635,472,185,444,783,966,
72,527,636,746,575,5,276,821,568,
765,991,686,142,588,366,395,983,266,
383,330,337,853,337,927,703,513,855,
652,431,48,512,541,835,
205,510,92,901,778,588,968,603,820,75,844,
560,597,698,427,249,
817,50,208,149,169,835,522,
470,151,731,395,979,200,
242,698,763,531,252,533,64,233,262,498,
994,620,639,575,934,606,99,770,72,
658,355,597,645,292,354,409,515,
453,594,571,552,193,8,820,69,877,846,525,446,386,
652,500,361,290,
833,652,410,924,72,104,231,223,775,375,
470,663,179,10,256,770,243,354,
5,962,529,39,255,73,
253,766,659,497,241,656,630,262,212,154,
755,375,936,159,786,981,
78,426,39,885,835,432,439,335,
574,785,736,860,395,381,114,825,
557,187,640,514,36,834,630,194,164,440,
744,908,185,165,635,464,354,104,996,
805,604,375,326,970,
751,776,661,777,434,952,662,2,923,99,463,514,
55,414,522,378,89,
331,403,94,547,551,300,600,452,976,213,815,757,
209,760,963,906,785,
958,319,334,640,798,611,678,630,389,426,
961,608,472,45,390,
597,191,861,279,689,972,560,900,548,97,240,51,2,411,233,
379,770,989,955,214,588,
982,82,850,450,755,799,539,298,993,788,
901,382,569,428,281,599,98,789,956,450,
497,664,610,944,778,713,375,
637,443,905,883,389,563,388,559,386,
241,597,876,731,192,483,958,828,100,
89,994,228,18,413,1,157,453,
573,198,447,488,672,383,589,511,46,
449,228,662,321,34,838,
592,659,188,248,836,141,344,
564,481,861,93,936,
618,287,490,304,662,196,72,918,339,999,28,
556,812,272,235,510,51,804,209,323,
471,474,446,855,265,588,24,522,
86,755,664,311,793,361,685,859,158,667,871,
529,624,578,334,843,
32,12,818,406,888,555,678,796,159,142,289,
797,246,473,485,683,526,987,
272,763,546,203,560,294,921,
439,144,909,221,245,847,971,812,
66,20,337,591,226,113,321,756,518,
325,166,848,267,857,34,471,579,851,322,125,
157,77,567,646,783,634,5,
598,497,275,908,172,324,263,207,340,160,80,
484,833,998,945,135,108,104,
908,645,264,581,332,519,811,214,57,
543,807,768,23,578,545,988,
547,818,669,395,88,964,230,105,471,
231,645,982,398,442,311,466,168,788,474,
233,638,254,824,676,413,818,
672,137,866,862,376,933,455,158,682,180,333,
454,18,677,664,867,
318,107,793,361,372,509,765,203,737,
216,831,509,392,508,780,219,635,
334,862,945,162,529,164,627,381,591,83,155,
278,476,363,785,431,529,194,982,91,
994,480,236,825,450,797,634,249,626,
408,699,527,900,145,880,833,456,914,432,391,537,
836,955,126,557,870,38,388,
275,526,66,587,
400,933,535,455,209,699,90,10,207,67,
757,719,38,22,254,736,201,80,
86,584,531,335,949,500,544,22,11,774,434,337,331,
183,553,691,131,186,591,171,
645,365,654,843,649,673,867,218,
533,206,528,618,891,41,988,596,391,506,672,103,926,
49,445,678,61,
63,998,927,295,600,303,352,358,464,234,517,778,32,641,
693,70,417,417,940,
529,561,706,894,740,117,251,642,763,183,
544,651,951,438,505,309,800,534,
864,930,36,418,703,431,
463,73,476,942,55,127,560,959,255,
176,969,35,242,147,914,191,
71,686,260,62,423,823,186,
521,447,940,123,62,855,452,455,264,9,165,
608,675,72,484,
302,476,64,159,815,445,965,558,824,281,98,

View file

@ -0,0 +1,291 @@
package main
import (
"bufio"
"fmt"
"log"
"os"
"strconv"
"strings"
)
const demo = true
type part struct {
value int
startIndex int
endIndex int
row int
}
var searchPattern = [][]int{
{-1, -1}, // top left
{-1, 0}, // top centre
{-1, 1}, // top right
{0, -1}, // mid left
{0, 1}, // mid right
{1, -1}, // bottom left
{1, 0}, // bottom centre
{1, 1}, // bottom right
}
func readLines(path string) ([]string, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
var lines []string
scanner := bufio.NewScanner(file)
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
return lines, scanner.Err()
}
func readInputFileLines() []string {
var input_name string
if demo == true {
input_name = "demo-input.txt"
} else {
input_name = "input.txt"
}
// path := year + "/" + day + "/" + part + "/" + input_name
path := "../" + input_name
lines, err := readLines(path)
if err != nil {
log.Fatalf("readLines: %s", err)
}
return lines
}
func isNumeric(s string) bool {
_, err := strconv.Atoi(s)
return err == nil
}
func createMatrix(lines []string) [][]string {
matrix := make([][]string, len(lines))
var row []string
for i := 0; i < len(lines); i++ {
row = strings.Split(lines[i], "")
matrix[i] = row
}
return matrix
}
func getNumbersAndIndexes(matrix [][]string) []part {
var parts []part
for i := range matrix {
row := matrix[i]
var currentNum []string
var rowParts []part
var searchingNumber bool = false
var startIndex int
for j := range row {
var part part
if isNumeric(row[j]) {
if !searchingNumber {
startIndex = j
}
searchingNumber = true
currentNum = append(currentNum, row[j])
if j == len(row)-1 {
part.startIndex = startIndex
part.endIndex = j - 1
numberString := strings.Join(currentNum, "")
part.value, _ = strconv.Atoi(numberString)
part.row = i
rowParts = append(rowParts, part)
currentNum = nil
searchingNumber = false
}
} else if searchingNumber {
part.startIndex = startIndex
part.endIndex = j - 1
numberString := strings.Join(currentNum, "")
part.value, _ = strconv.Atoi(numberString)
part.row = i
rowParts = append(rowParts, part)
currentNum = nil
searchingNumber = false
}
}
parts = append(parts, rowParts...)
}
return parts
}
func checkIfPartNumber(part part, matrix [][]string) bool {
row := part.row
for column := part.startIndex; column <= part.endIndex; column++ {
for index, element := range searchPattern {
if row == 0 && (index == 0 || index == 1 || index == 2) {
// if row = 0 {!searchPattern[0, 1, 2]}
continue
} else if row == len(matrix)-1 && (index == 5 || index == 6 || index == 7) {
// if row = len(matrix) {!searchPattern[5, 6, 7]}
continue
} else if column == 0 && (index == 0 || index == 3 || index == 5) {
// if column = 0 {!searchPattern[0, 3, 5]}
continue
} else if column == len(matrix[row])-1 && (index == 2 || index == 4 || index == 7) {
// if column = len(row) {!searchPattern[2, 4, 7]}
continue
}
adjacentChar := matrix[row+element[0]][column+element[1]]
if !isNumeric(adjacentChar) && adjacentChar != "." {
return true
}
}
}
return false
}
func getGearIdentifier(matrix [][]string) [][]int {
var gears [][]int
for i := range matrix {
for j := range matrix[i] {
if matrix[i][j] == "*" {
gears = append(gears, []int{i, j})
}
}
}
return gears
}
func rangeGen(start int, end int) []int {
array := make([]int, end-start+1)
for i := range array {
array[i] = i + start
}
return array
}
func isCoordInArray(coord []int, array [][]int) bool {
for _, element := range array {
if element[0] == coord[0] && element[1] == coord[1] {
return true
}
}
return false
}
func getGearPower(gears [][]int, parts []part) int {
var totalGearPower int
for _, gear := range gears {
gearRow := gear[0]
gearCol := gear[1]
var gearSearchIndexes [][]int
var partNumbers []part
// Find gear search indexes
for _, element := range searchPattern {
row := gearRow + element[0]
col := gearCol + element[1]
gearSearchIndexes = append(gearSearchIndexes, []int{row, col})
}
// Find if parts are in those search indexes
for _, part := range parts {
// find all coordinates for part
partRange := rangeGen(part.startIndex, part.endIndex)
var partCoordRange [][]int
for _, e := range partRange {
partCoordRange = append(partCoordRange, []int{part.row, e})
}
// Check if any of part's coordinates are in range
for _, partCoord := range partCoordRange {
if isCoordInArray(partCoord, gearSearchIndexes) {
if len(partNumbers) >= 2 {
partNumbers = nil
} else {
partNumbers = append(partNumbers, part)
}
}
}
}
// Calculate power
if len(partNumbers) == 2 {
gearPower := partNumbers[0].value * partNumbers[1].value
totalGearPower += gearPower
}
}
return totalGearPower
}
func main() {
lines := readInputFileLines()
matrix := createMatrix(lines)
// // fmt.Println(matrix[0][1]) // [row][column]
// var total int
// for _, element := range numbers {
// if checkIfPartNumber(element, matrix) {
// total += element.value
// }
// }
// f, err := os.Create("code-file.txt")
// if err != nil {
// log.Fatal(err)
// }
// defer f.Close()
// row := 0
// for _, element := range numbers {
// if element.row > row {
// f.WriteString("\n")
// row = element.row
// }
// f.WriteString(fmt.Sprintf("%d,", element.value))
// }
// fmt.Println(numbers)
// fmt.Println(getGearIdentifier(matrix))
parts := getNumbersAndIndexes(matrix)
gears := getGearIdentifier(matrix)
total := getGearPower(gears, parts)
// getGearPower(gears, parts)
// var partCoordRange [][]int
// partRange := rangeGen(numbers[3].startIndex, numbers[3].endIndex)
// for _, e := range partRange {
// partCoordRange = append(partCoordRange, []int{numbers[3].row, e})
// }
// fmt.Println(partCoordRange)
fmt.Println(total)
// fmt.Println(checkIfPartNumber(numbers[1], matrix))
}
// Save numbers
// Save index of first and last character
// Check adjacent characters
// if symbol, save if not discard