From d7e0ba575cd5003f2ece79d0f72e476153df2810 Mon Sep 17 00:00:00 2001 From: Luke Else Date: Thu, 16 Dec 2021 20:18:54 +0000 Subject: [PATCH] day 15a complete used help to get solution (see graph library used) --- day15/15a/main.go | 108 ++++++++++++++++++++++++++++++++++++++++++++++ day15/input | 100 ++++++++++++++++++++++++++++++++++++++++++ day15/testInput | 10 +++++ go.mod | 2 + go.sum | 2 + 5 files changed, 222 insertions(+) create mode 100644 day15/15a/main.go create mode 100644 day15/input create mode 100644 day15/testInput create mode 100644 go.sum diff --git a/day15/15a/main.go b/day15/15a/main.go new file mode 100644 index 0000000..4b7902f --- /dev/null +++ b/day15/15a/main.go @@ -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 +} diff --git a/day15/input b/day15/input new file mode 100644 index 0000000..35cb036 --- /dev/null +++ b/day15/input @@ -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 \ No newline at end of file diff --git a/day15/testInput b/day15/testInput new file mode 100644 index 0000000..7d9d562 --- /dev/null +++ b/day15/testInput @@ -0,0 +1,10 @@ +1163751742 +1381373672 +2136511328 +3694931569 +7463417111 +1319128137 +1359912421 +3125421639 +1293138521 +2311944581 \ No newline at end of file diff --git a/go.mod b/go.mod index 1a1045e..4557402 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module AdventOfCode2021 go 1.17 + +require github.com/yourbasic/graph v0.0.0-20210606180040-8ecfec1c2869 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..61c2e87 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/yourbasic/graph v0.0.0-20210606180040-8ecfec1c2869 h1:7v7L5lsfw4w8iqBBXETukHo4IPltmD+mWoLRYUmeGN8= +github.com/yourbasic/graph v0.0.0-20210606180040-8ecfec1c2869/go.mod h1:Rfzr+sqaDreiCaoQbFCu3sTXxeFq/9kXRuyOoSlGQHE=