day 15a complete
used help to get solution (see graph library used)
This commit is contained in:
parent
90bc7c683d
commit
d7e0ba575c
108
day15/15a/main.go
Normal file
108
day15/15a/main.go
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/yourbasic/graph"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
content := returnContent("../input")
|
||||||
|
//content := returnContent("../testInput")
|
||||||
|
|
||||||
|
height := len(*content)
|
||||||
|
width := len((*content)[0])
|
||||||
|
|
||||||
|
g := graph.New(height * width)
|
||||||
|
|
||||||
|
for y, line := range *content {
|
||||||
|
for x, _ := range line {
|
||||||
|
c := Coordinate{
|
||||||
|
X: x,
|
||||||
|
Y: y,
|
||||||
|
}
|
||||||
|
myIdx := c.Y*width + c.X
|
||||||
|
neighbours := c.Neighbours(width, height, false)
|
||||||
|
for _, neighbour := range neighbours {
|
||||||
|
neighbourCost := int64((*content)[neighbour.Y][neighbour.X])
|
||||||
|
neighbourIdx := neighbour.Y*width + neighbour.X
|
||||||
|
g.AddCost(myIdx, neighbourIdx, neighbourCost)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
path, cost := graph.ShortestPath(g, 0, width*height-1)
|
||||||
|
|
||||||
|
fmt.Println(path, cost)
|
||||||
|
}
|
||||||
|
|
||||||
|
type Coordinate struct {
|
||||||
|
X int
|
||||||
|
Y int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Coordinate) Neighbours(gridWidth int, gridHeight int, diagonal bool) (out []Coordinate) {
|
||||||
|
spaceLeft := c.X > 0
|
||||||
|
spaceRight := c.X < gridWidth-1
|
||||||
|
spaceUp := c.Y > 0
|
||||||
|
spaceDown := c.Y < gridHeight-1
|
||||||
|
|
||||||
|
if spaceLeft {
|
||||||
|
out = append(out, Coordinate{c.X - 1, c.Y})
|
||||||
|
}
|
||||||
|
if spaceRight {
|
||||||
|
out = append(out, Coordinate{c.X + 1, c.Y})
|
||||||
|
}
|
||||||
|
if spaceUp {
|
||||||
|
out = append(out, Coordinate{c.X, c.Y - 1})
|
||||||
|
}
|
||||||
|
if spaceDown {
|
||||||
|
out = append(out, Coordinate{c.X, c.Y + 1})
|
||||||
|
}
|
||||||
|
|
||||||
|
if diagonal {
|
||||||
|
if spaceUp && spaceLeft {
|
||||||
|
out = append(out, Coordinate{c.X - 1, c.Y - 1})
|
||||||
|
}
|
||||||
|
if spaceUp && spaceRight {
|
||||||
|
out = append(out, Coordinate{c.X + 1, c.Y - 1})
|
||||||
|
}
|
||||||
|
if spaceDown && spaceLeft {
|
||||||
|
out = append(out, Coordinate{c.X - 1, c.Y + 1})
|
||||||
|
}
|
||||||
|
if spaceDown && spaceRight {
|
||||||
|
out = append(out, Coordinate{c.X + 1, c.Y + 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func returnContent(path string) *[][]int {
|
||||||
|
//read file and return it as an array of integers
|
||||||
|
|
||||||
|
file, err := os.Open(path)
|
||||||
|
var content [][]int
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Unlucky, the file didn't open")
|
||||||
|
return &content
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
scanner := bufio.NewScanner(file)
|
||||||
|
|
||||||
|
for scanner.Scan() {
|
||||||
|
nums := []int{}
|
||||||
|
for _, num := range scanner.Text() {
|
||||||
|
val, _ := strconv.Atoi(string(num))
|
||||||
|
nums = append(nums, val)
|
||||||
|
}
|
||||||
|
content = append(content, nums)
|
||||||
|
}
|
||||||
|
|
||||||
|
return &content
|
||||||
|
}
|
100
day15/input
Normal file
100
day15/input
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
4552285989441124719798465825773318252269422625731628851155123123687151412171224298271625249662328175
|
||||||
|
8311826917677295561395716245426184212471311214851351547842124165674922644719934113217134531111711843
|
||||||
|
3134155528231296313292951689371671611355199429313261226392991129959293212461289411393263181213122398
|
||||||
|
7134159681533331172991932819128718131121428715191238612623891233112534231482681182354129791911339131
|
||||||
|
3291622121893821258215111531614233999661649271811871529461211115739821388973611183517651567314846349
|
||||||
|
9116197319992223784973749159912918948514855218957329971416177152174169497812373219984133121155319113
|
||||||
|
4968439114135996923939621521227438616432262962572553451333141591641121311129913812892293179114231721
|
||||||
|
6239219785234675391281641114148225942622192542113712327361223716951191275736388845623994891799592928
|
||||||
|
1939273152114165815621898131741625142273757411141673112259897358299222269191191214321758245326199814
|
||||||
|
3816295121211713919918129141521748315579413854273125311823434671365133636981112367451294972238794443
|
||||||
|
2852174392175217891292769297329734141529288318181221953212137313858911222727424134319782324839616229
|
||||||
|
8183411981136718428823127681411246528222138421871778251231423171588642328395114123811125612118626218
|
||||||
|
3338418958818229331399513691921921869922413136194421828291197132791812222241633461426938621462118999
|
||||||
|
6118582765375541144491519871123121172943678873247541921192915151717957812714841145223161116244141719
|
||||||
|
1469257418313218951211511591224281868433285518896571868973996776391916421179863524342144166273783912
|
||||||
|
1422118419319515496189391158516462277393622129936871982217562457129964219912124123218312977313682811
|
||||||
|
8162546139952136189911177533357821252891975965218152184112132367245486747212214333324221119951528114
|
||||||
|
1488239611461491973865185242959577752914191817477523179143671148316542517213281111151119111864959392
|
||||||
|
2218917661868133141243819962413216131979913232799988871913939111823317421712824994542992792255223561
|
||||||
|
5734326732884792428191241121191811111111473387959653938269214112192296162111121271889621211118195111
|
||||||
|
1511935111861121935741768338923128124661819191925137121591321229121111755219811212182121742778172224
|
||||||
|
9691562183513388221726493821238419121411141652415724257169175511984419826317912119999434678121339231
|
||||||
|
2729237532959444733225435991119461921916882435586112311223124141186312488218129149812515658171863425
|
||||||
|
7312559181323743938221212236191514318418548186139317233736171333421416212237192119355192471989892212
|
||||||
|
9415747738346141691418825197173192515219266172136455452815162517475883863143239112116141841148451749
|
||||||
|
1716263121115631141784252251314588413213814511691451393911924811572861144235991292175255372133811315
|
||||||
|
2113414911731164962342223421317921647461491268117386815433911112541511131114761959253123128112819312
|
||||||
|
5611912334927221252711276871211624911564162161151291141471494555221624112246614151591111923265776291
|
||||||
|
1232313271113554189955413155112699163114821911353171341215485252647889646619236253688482351315735369
|
||||||
|
2928123121191267721323822133384328412616119246178131321245693192617151348489271993468574213234923161
|
||||||
|
3738152544625516916693642738573193818379635241112299568611511432174519855133859227139712691931163454
|
||||||
|
4978932237312615451115123994194181387239461985218454596664714694169812591251542128791112588238428113
|
||||||
|
3912899182798916628918131979371112226953512814111311128381119548221199616478868331875333186481121175
|
||||||
|
1192927421372584232141915111886499529492278636769145793985139259812374369331982931471421336131151625
|
||||||
|
3911185215582434844193161925151121286721292842811119362211484112143921956211724157122539837492394492
|
||||||
|
2953216722815212632732453117127324334249682233371211614762722313186947295795983392311121826197161624
|
||||||
|
1198382767218312279682278191822374559293793873174499211516436372431371961648282146283935293224883912
|
||||||
|
2721884412949147613342941184192811799669771915122149974294638981641377324238731539914369681342394477
|
||||||
|
3115118226257112172214531484191979121212629611941829729475142214919216183112798119132131299929929699
|
||||||
|
1466138152589912253129981816414331451718321345795981111891281781111972184919821925923141344127119916
|
||||||
|
9122134452846226111158128491291121145921222611191948931811123751226221716719166843766823615463271932
|
||||||
|
6619413231595241518519791341359886562981116111712917233731162191991239432652386931159591326187113817
|
||||||
|
1591845559162771847321152825187221391211122541281244754119292979548984493162991919959714934322337916
|
||||||
|
9145672294212142439213811931976372247362114829339211131128281865174113912121498492324131148121412341
|
||||||
|
1756381967913432222112226193132111121163731192131143782119299311666751422511193161912311177255311491
|
||||||
|
7115421916752266197811918146237953712817131391633913821814582931412513381932142138371125246189914126
|
||||||
|
1598759376392514417822195284118133472211872183424131361292781113442751745432173337612973642181819911
|
||||||
|
1591927514986431542931331139613924212515831921359261755424117232619116257358732811361551433133715429
|
||||||
|
2212111786268518388677923211533188345939141431423322741185388818746937933316139596963917115156513628
|
||||||
|
1855546869784857736214551457262769215529832121261231613433399962496153414792119714419153328447319921
|
||||||
|
3511415871713341517259565232116433981351421678135321191415221837295414292764788231114826312162341834
|
||||||
|
1318126219119423358223393722114232919911513119438148878413538911488323992254252914857272139929315563
|
||||||
|
4289226872419291861111383538111219112723121131591971688293116191243172327912122531151228931163825361
|
||||||
|
4267158139198923577615628157767215331521989227229273443329721698929373269121122111211118234885216413
|
||||||
|
1721281392353248918171111348431632192885983433192911673143212314835824251437392163131172671133214211
|
||||||
|
5692434767167216246181911647487628151199631629919256742261113166114149911986911217644914329391511712
|
||||||
|
3171778979133384821415911915931112614411161443519188221518117991151822193121471212118516171612194481
|
||||||
|
5728892915394116535685132841521314914121155636512129949659431291134139338413127321115791617158219492
|
||||||
|
5922861319161211595287232112219437811222352666151929995431111444364119321358256314981447283261239184
|
||||||
|
3222922881213813538112221219919839222562138222214373588415721997345273115221926221171788323425398221
|
||||||
|
7121892289471757714164192317199889321525289161191684627127231622121813228164928171711883131411171115
|
||||||
|
4142133195631891911149439213662211433837321296381465816173997759492225942284821492317392226316171421
|
||||||
|
7171767952218516859111921382981412117845155531414929285844619281338151913746922229418521329595329132
|
||||||
|
4816434489225615129112978111511319222163357872511891321872136916132598114322114834241711175313191619
|
||||||
|
2514669152191264429122527554915621525232982214127922591124617421227986192172464521171554113293241255
|
||||||
|
1774416897439364241311525518963326121825461491834135917315678145446394222119252415181557212319979836
|
||||||
|
2924418171212166376217332219928524125161151381352283981249219536811189593191191599828153912124771153
|
||||||
|
4727284757417238221195571727143816932519912332164191111313562582931769391773963555132631269421642112
|
||||||
|
1826176132932591211811281494184124649671144935551536222129675132732112314333131883173928216124343136
|
||||||
|
3941791891125279118465128381591141714936412111144872142196359856953125116815582139618126238119115194
|
||||||
|
6384117152771514979552471442881941755398722446886791413239114561671931482126123895183722933123653386
|
||||||
|
8288171182979883467251168211845926325328548779112522134122556292344839656392433126114296546576969111
|
||||||
|
2138989191121173198114315232525383591485375339363419514352517573221121171933413254921418513742631831
|
||||||
|
2213937521219111556424717112813918859811613149217542121258771325685446299113436243924329111883434559
|
||||||
|
5617411212729914494182219773316932281919155593277131423859448626521722117873728694549823541912312231
|
||||||
|
7221118972111421391134729292837321281576312986563112977458467319418639282574649243117271379499867916
|
||||||
|
7481381681214113329839118518993911987199743449929119497141229931317315347953958761558423818144714914
|
||||||
|
1962828621421912127195245938424121754697118642194232414827848912318131722969611192541614712413124389
|
||||||
|
1453414916661118796193123189169627934943195131587127135111441988921215121971461323995311761192254778
|
||||||
|
1518323154639911222886514111893851359235192392211115741135984919811553443945191524421112271149351165
|
||||||
|
2124619118928812488832412319378222622441927332925587491814133367139228519219159512159781839661391252
|
||||||
|
9136123238713391213615338836814173613372192337512891881479195988521936915119119435812284115134985121
|
||||||
|
3187261985313118116972571821212913911963714631126731221266314529196541119322571137312995744923631544
|
||||||
|
2332196771181422121471611133259321313136947141217624113313181189182899571613229611511529134392846341
|
||||||
|
2251119425212277151215291781189314975221719413134967665311869114521729499121116213885163746111535137
|
||||||
|
9586226199417317151915282291149995631781731851159711348611212628493271263152555273213316776492793658
|
||||||
|
9912626841129251219151217833912973311223772814496593297471731359818991699147989928243894313247532231
|
||||||
|
3418241618947516332227613831374921874855584125558114429471121321232177214321598521597161191128216954
|
||||||
|
8822616123274861411769128213421232113175792178713153351744856521396128117147182712443411512198547621
|
||||||
|
5136333391414812842139999627612251181119116134115993237221194432774327464926135181519819157243157311
|
||||||
|
3251712384221229339111197239365114189176819952384125831111975148571184652387121257481133311981238514
|
||||||
|
4179221897253196943111444994381452998232779759947119714529137541964411154341851412468966612128546572
|
||||||
|
3561511861976915288819136237471569199991221811128611595299121117942329621124911194511484259317211339
|
||||||
|
7111129229731261111283415393296113773364287191681115113218825813213487828249222962695115515691873514
|
||||||
|
7329411182343148337133461144181931219118279336638688643366271821255171224147641198181918236522367641
|
||||||
|
9283273114241197532168149326977442972132134212116845582279681563772677122931571239535226581819843529
|
||||||
|
1998826211243465142314171494115638947312397589362193711385179619216332311195192919797766423111769171
|
||||||
|
5525112294591818267911389162211123228611241372111487571111114322132741612141213853137289112282145369
|
||||||
|
3749112349379788119372851572694972255221141172838213557111196117255932787266739885219667115595878115
|
||||||
|
2711353211472121989372124182678117398917811239219156315953193628344552163451161917419183114199897172
|
10
day15/testInput
Normal file
10
day15/testInput
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
1163751742
|
||||||
|
1381373672
|
||||||
|
2136511328
|
||||||
|
3694931569
|
||||||
|
7463417111
|
||||||
|
1319128137
|
||||||
|
1359912421
|
||||||
|
3125421639
|
||||||
|
1293138521
|
||||||
|
2311944581
|
2
go.mod
2
go.mod
@ -1,3 +1,5 @@
|
|||||||
module AdventOfCode2021
|
module AdventOfCode2021
|
||||||
|
|
||||||
go 1.17
|
go 1.17
|
||||||
|
|
||||||
|
require github.com/yourbasic/graph v0.0.0-20210606180040-8ecfec1c2869 // indirect
|
||||||
|
Loading…
Reference in New Issue
Block a user