Day 10. part 1.
This commit is contained in:
parent
f84401e805
commit
778ed08680
3
data.go
3
data.go
|
@ -30,3 +30,6 @@ var Day08Data string
|
||||||
|
|
||||||
//go:embed day_09/data.txt
|
//go:embed day_09/data.txt
|
||||||
var Day09Data string
|
var Day09Data string
|
||||||
|
|
||||||
|
//go:embed day_10/data.txt
|
||||||
|
var Day10Data string
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
12340101878761023456545454342165345676769343212898101234
|
||||||
|
01253298999452310897102367443078756789878552100347610945
|
||||||
|
10765387888341456798211078954569865498765667891256329876
|
||||||
|
67876456672210878654302234567054654328654308760345434565
|
||||||
|
58960145521008969543033123898123521019603219874321294423
|
||||||
|
87654234432023457652123087878931438908712387665230783212
|
||||||
|
94543454342112348956542198963210567125654498540145632101
|
||||||
|
23612763543201032347899017654231436034675643489876543234
|
||||||
|
18703892698715101051058720140145621894589732106789012105
|
||||||
|
09543211789876510962345638230898730783289801875498721076
|
||||||
|
67657600692105401873496549821769845670170789964329630387
|
||||||
|
78998776543212392398787056765654301234561276353010541298
|
||||||
|
12389985430124985407652145654510210019654305442126752987
|
||||||
|
01276578921003476014550234783323212128763012330145893456
|
||||||
|
10345667654312564323761221092104303499892100123232123454
|
||||||
|
67812456783239875019854332112365694781012349874123010763
|
||||||
|
54903441092128756998543345001436785632509854365032109894
|
||||||
|
43786532361045677877632356916512345683408765256743238876
|
||||||
|
32697895678738988988901987887402398796512120129854567905
|
||||||
|
01521004569827432234870676590341456587543098218769871014
|
||||||
|
10435410458216541123766783411250107079650187601256712323
|
||||||
|
28976321326502100054355692101763298128756234532345603478
|
||||||
|
67689100015489232360544543439874380137897878943210436569
|
||||||
|
86543212326376541071239876528545673249856967657654347878
|
||||||
|
98743265417217634289140345012789654356745667898943256981
|
||||||
|
01650178108908987123021236109878766325633458987001107210
|
||||||
|
32210989832212456014123987216765645414722189076122098723
|
||||||
|
43345676541003327865474532125456736703810012165433489654
|
||||||
|
56934307687654018976789643034143821892954187234454967503
|
||||||
|
67855218998987652189888752102012960911063296545567818912
|
||||||
|
12346783219878941079892167811023451103478103456765401876
|
||||||
|
01656594100568932016783078912110167012569812343890322345
|
||||||
|
10789015601457657825654189801256778929658751012701210154
|
||||||
|
03498323712310146934568789221349877878743567801662567030
|
||||||
|
12567487893401235476549870130210918969812478945673498121
|
||||||
|
03456596987632123389034765245601101255702301234989187432
|
||||||
|
12456745076541034232125634310781056344321030123231016589
|
||||||
|
12349832125765015121034567323892347897812345678192354678
|
||||||
|
01901221034894176076543278498787323458900156569087463210
|
||||||
|
10876320676783289089432109586565510067851287438196578987
|
||||||
|
76505410787690987128761012675676432104560399821045678876
|
||||||
|
85414125698541056298456783254986549023870456734430019565
|
||||||
|
98323034567232345347321292123877678016901960109821023432
|
||||||
|
86018601256123453456510398001678987655432871218783456501
|
||||||
|
67889543345034762387105467210900178746945982345692167898
|
||||||
|
56977602358903891093456554367810269637876672107898056982
|
||||||
|
43868911567212987784367893456524341023776543206561154321
|
||||||
|
32154320126303456101210210347433452014789432015210067010
|
||||||
|
41032101015454543289010101298934563128128721324332198011
|
||||||
|
32349876522387635376521032876129654789013210458949876523
|
||||||
|
21456910431497656785438945965098765658134502167653210435
|
||||||
|
10237801230598547898747876234876666543265653057894387654
|
||||||
|
90198212347654632336656760143965455698678784567765896023
|
||||||
|
83285675498103201345698601107834564789549894398756895112
|
||||||
|
74234786987230110218767652216723873210432765212347763203
|
||||||
|
65101697896541222109856543345010960123101656101078954512
|
|
@ -0,0 +1,8 @@
|
||||||
|
89010123
|
||||||
|
78121874
|
||||||
|
87430965
|
||||||
|
96549874
|
||||||
|
45678903
|
||||||
|
32019012
|
||||||
|
01329801
|
||||||
|
10456732
|
|
@ -0,0 +1,7 @@
|
||||||
|
...0...
|
||||||
|
...1...
|
||||||
|
...2...
|
||||||
|
6543456
|
||||||
|
7.....7
|
||||||
|
8.....8
|
||||||
|
9.....9
|
|
@ -0,0 +1,7 @@
|
||||||
|
10..9..
|
||||||
|
2...8..
|
||||||
|
3...7..
|
||||||
|
4567654
|
||||||
|
...8..3
|
||||||
|
...9..2
|
||||||
|
.....01
|
|
@ -0,0 +1,7 @@
|
||||||
|
..90..9
|
||||||
|
...1.98
|
||||||
|
...2..7
|
||||||
|
6543456
|
||||||
|
765.987
|
||||||
|
876....
|
||||||
|
987....
|
|
@ -0,0 +1,81 @@
|
||||||
|
package day_10
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const Empty = '.'
|
||||||
|
|
||||||
|
type Point struct {
|
||||||
|
x, y int
|
||||||
|
height rune
|
||||||
|
}
|
||||||
|
|
||||||
|
type TopographicMap [][]rune
|
||||||
|
|
||||||
|
func (t TopographicMap) InMap(x, y int) bool {
|
||||||
|
return x >= 0 && x < len(t[0]) && y >= 0 && y < len(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t TopographicMap) At(x, y int) rune {
|
||||||
|
if t.InMap(x, y) {
|
||||||
|
return t[y][x]
|
||||||
|
}
|
||||||
|
return Empty
|
||||||
|
}
|
||||||
|
|
||||||
|
// task:https://adventofcode.com/2024/day/10
|
||||||
|
func SolveBasic(input string) int {
|
||||||
|
topographicMap := loadMap(input)
|
||||||
|
solutions := 0
|
||||||
|
for y, line := range topographicMap {
|
||||||
|
for x, pos := range line {
|
||||||
|
if pos == '0' {
|
||||||
|
trails := score(topographicMap, x, y)
|
||||||
|
solutions += trails
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return solutions
|
||||||
|
}
|
||||||
|
|
||||||
|
// task:https://adventofcode.com/2024/day/10#part2
|
||||||
|
func SolveComplex(input string) int {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func score(tMap TopographicMap, x int, y int) int {
|
||||||
|
queue := []Point{{x, y, '0'}}
|
||||||
|
trails := map[Point]bool{}
|
||||||
|
for len(queue) > 0 {
|
||||||
|
p := queue[0]
|
||||||
|
queue = queue[1:]
|
||||||
|
|
||||||
|
if p.height == '9' {
|
||||||
|
trails[p] = true
|
||||||
|
} else {
|
||||||
|
if tMap.At(p.x-1, p.y) == p.height+1 {
|
||||||
|
queue = append(queue, Point{p.x - 1, p.y, p.height + 1})
|
||||||
|
}
|
||||||
|
if tMap.At(p.x, p.y-1) == p.height+1 {
|
||||||
|
queue = append(queue, Point{p.x, p.y - 1, p.height + 1})
|
||||||
|
}
|
||||||
|
if tMap.At(p.x+1, p.y) == p.height+1 {
|
||||||
|
queue = append(queue, Point{p.x + 1, p.y, p.height + 1})
|
||||||
|
}
|
||||||
|
if tMap.At(p.x, p.y+1) == p.height+1 {
|
||||||
|
queue = append(queue, Point{p.x, p.y + 1, p.height + 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return len(trails)
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadMap(input string) TopographicMap {
|
||||||
|
input = strings.ReplaceAll(input, "\r", "")
|
||||||
|
topographicMap := TopographicMap{}
|
||||||
|
for _, line := range strings.Split(input, "\n") {
|
||||||
|
topographicMap = append(topographicMap, []rune(line))
|
||||||
|
}
|
||||||
|
return topographicMap
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
package day_10_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"advent_of_code_2024/day_10"
|
||||||
|
_ "embed"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed example_data.txt
|
||||||
|
var ExampleData string
|
||||||
|
|
||||||
|
//go:embed example_data_01.txt
|
||||||
|
var ExampleData01 string
|
||||||
|
|
||||||
|
//go:embed example_data_02.txt
|
||||||
|
var ExampleData02 string
|
||||||
|
|
||||||
|
//go:embed example_data_03.txt
|
||||||
|
var ExampleData03 string
|
||||||
|
|
||||||
|
func TestBasicSolutionExample(t *testing.T) {
|
||||||
|
result := day_10.SolveBasic(ExampleData)
|
||||||
|
if result != 36 {
|
||||||
|
t.Fatalf("Expected 36 received %d", result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBasicSolutionExample01(t *testing.T) {
|
||||||
|
result := day_10.SolveBasic(ExampleData01)
|
||||||
|
if result != 2 {
|
||||||
|
t.Fatalf("Expected 2 received %d", result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBasicSolutionExample02(t *testing.T) {
|
||||||
|
result := day_10.SolveBasic(ExampleData02)
|
||||||
|
if result != 3 {
|
||||||
|
t.Fatalf("Expected 3 received %d", result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBasicSolutionExample03(t *testing.T) {
|
||||||
|
result := day_10.SolveBasic(ExampleData03)
|
||||||
|
if result != 4 {
|
||||||
|
t.Fatalf("Expected 4 received %d", result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestComplexSolutionExample(t *testing.T) {
|
||||||
|
result := day_10.SolveComplex(ExampleData)
|
||||||
|
if result != 2858 {
|
||||||
|
t.Fatalf("Expected 2858 received %d", result)
|
||||||
|
}
|
||||||
|
}
|
5
main.go
5
main.go
|
@ -10,6 +10,7 @@ import (
|
||||||
"advent_of_code_2024/day_07"
|
"advent_of_code_2024/day_07"
|
||||||
"advent_of_code_2024/day_08"
|
"advent_of_code_2024/day_08"
|
||||||
"advent_of_code_2024/day_09"
|
"advent_of_code_2024/day_09"
|
||||||
|
"advent_of_code_2024/day_10"
|
||||||
_ "embed"
|
_ "embed"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
@ -55,6 +56,10 @@ func main() {
|
||||||
fmt.Printf("Day 09. Basic: %d\n", day_09.SolveBasic(Day09Data)) // 20665830408335
|
fmt.Printf("Day 09. Basic: %d\n", day_09.SolveBasic(Day09Data)) // 20665830408335
|
||||||
case "09-complex":
|
case "09-complex":
|
||||||
fmt.Printf("Day 09. Complex: %d\n", day_09.SolveComplex(Day09Data)) // 20665830408335
|
fmt.Printf("Day 09. Complex: %d\n", day_09.SolveComplex(Day09Data)) // 20665830408335
|
||||||
|
case "10-basic":
|
||||||
|
fmt.Printf("Day 10. Basic: %d\n", day_10.SolveBasic(Day10Data)) // 20665830408335
|
||||||
|
case "10-complex":
|
||||||
|
fmt.Printf("Day 10. Complex: %d\n", day_10.SolveComplex(Day10Data)) // 20665830408335
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue