summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2024/go/input/day9.prod1
-rw-r--r--2024/go/input/day9.test1
-rw-r--r--2024/go/src/day8/main.go26
-rw-r--r--2024/go/src/day9/main.go172
-rw-r--r--2024/go/src/log.txt193677
5 files changed, 193862 insertions, 15 deletions
diff --git a/2024/go/input/day9.prod b/2024/go/input/day9.prod
new file mode 100644
index 0000000..b632cf8
--- /dev/null
+++ b/2024/go/input/day9.prod
@@ -0,0 +1 @@
+8344894997247919706132254734322836346242207378552420699813367551416968491319512518592646626569964818974774915246474191615273835822122155863392343212388744802787509799317530256568863245614923305254301264433187808740258581391832216685255339465627821626616160796945678659742070505679162048351230462662134657336289125134609127637587179556211660248637174420289644745168422036297546281549714924698458874741151732877249461472972669785854652059743054161990184821114157695754917385788865696479538349175585329885343058959381137281419831724581867380443739887240649848497322891016775379905054433583235160808342443451429574552368601424932361247614871595742215112932129063537419107597154373762065534521923013699876168357613257215173576498973275143516765579884554871346649196969343219716736881915813332919372978425457289315465050792727931114482510927152306049917116203314407165241180253046975177829098509817168556923844454053506150402070986528277083357373192284318798115868758477312710272286968949561558747783545346702177445768789511682385238564696917682372236758392745584411349227834926896633403087456985715425934058858250394764475853507528229071851939383621481792629933878667906284878978952571939423328470793169422018932186215466816755205244172257179759441239627953614252511392161669478728616032624275786479837918134323306153943213904623341544476241748937683319124569491629166317588063205760641948298341226389538843931096428279691316198655935487902711173289234237874965432867729988157114833613512833721677315222145552241514356668773229416599524726822943338163359869508668724182183371299797566779143327945481583361985720626090649592266346853696546371595972364395978644595279339213495113764756151995923791623523831066659719963394897642771499479751426319264195658172779354688586274370705645805018842028675628739369718951257769855549399554252756163658262884535172664478298867172112605274494015775743793359761829419567938312725097941247923814546318206777436058622760309317361650577362671745809282184098485097275511811824542364858831241020763830479122616066184693717694196456632460267270818870208099266528101212696746801264565893423367732419387472945566714796546295475448386795883079416961256624245633516217267658559318993394384091698853692727955946123829533932315191907552587652197659238859364847465396312763436296572051884046863352492568181167697418391750421990107951929843274285793781233572631841501239594434423797264730325846441268663014826117806310653838634551948576815789185676235067998828287091282240235360148989699931702454679776941344239174833865461428542129774513122545454477345639816612847021681414461014895528749970122833781915254795355466237210672420522419362214458771833088784516195557276082323054496857985769842252223947403242595638923562438862777447557145868254376344413182467179877547245927663563534823835320186844969246577155852965273213788755544263195154716384752485997350446216262511694992616744622847791941672112973235446567188367475360357318822392272885641883523770466256714739976173743980816271905235834473613338326551266986635496106378448940779285252478283212935255144386466939174148991636754545825158137076879239839057756443996167131486181074658428636349951270885161599797567224274890431234597715461654993241129078451727888313533895509575219572137264369374416920908871782546369144198991218649216032376225716090756184993418275766768058167129389182757513738663957110985078233164178819232567836626529177711814916925152771411657621524477365336459364781212474336763292032829276668110652937904039414654916710506897663897788624983288392724267699305992939991191515241117247957351213374468639254333058667240142879254847543516409710812438484652875730885826496019439435184626304920567470616525569954439386147764389618259288301694821733754528272564371589689581324547183356767849376158996122178812756422922365345760802064579291495549337611641937114391372530136631511183696546203382178741676245899213662599181219279899792465265148264318962032137932924095468847159826227048788449243255846943717933118360528920942017271164354280546079643432506432722253677815104298748867838332121963621553602472848163745952472450833915204264534689938115456825646497161477691545769935844585115881952791588798711442144120226670146163228691622122377084191813953092346566317269262211351346624342964145255786226762437344282255191946137596344295945462955319374831646980148247159752376144914963746894687377795814849167624174239121132177251547109061655569609612308730883548438681369623389371881499139051593311964033293474795343768113673422997354186044546348203151859523913462255716772424527367478838418883237942888367173588809125946247998298642674308225937821522878183152371062148146526140128979878773486356709011378011599731697637736984321044693145574422388589598671437083351096321633241637891159924652561834633523613517419677259885379151484846527569435186157071933818449566474793725614497187593626448599916961391632593681397354857591498396415531233937477858543594228734282814328439359358667579728876281543909970499678882540634370934942694518798158632251863332161192454015298943418470352537507891711669351510491929149341492384658353489111675432141731814816486810471640204438893552455716895474288350595695773461425140984391648096337354398582302736948020432515373150781652426562247229765682251446519461805284786848162774288170204566353711151163371347563642135729387095349227937940797037848831208064371781986678895075601449715099566198594229298141336937734820465113459911227920817092233082913636259867937623661853802724221849163931728541156411219587427492621083734820695294784834253297679681787837395220578338793028957195134414174864329958743138859234495396628125501542815114266992646760562855865739516774793021249323872171135766544315311856209547851284659329783441314944377563384717996016232011886143967557971287938551987245334734772051905269476384145322199271431844444165235972679776862886218280201420903971837631942082934151884935885416153022652657823529936237618175514592459921126312443254321527441396386988167777366816836754825483142476275134649881243011651755841225683592719477636092841270355927969662556898509859742911507445637377718399876535972098812751883098383631683980704423139081646299943264406720383294252667435564818026802125261991712736625814965623829837903421201387285083122618989127982659614818401192259382586168248885805331245557997340521255782733888156471766709982979753915925907511531728273341702248597176563551814647193141222429888866441096437830173630292638442987417232406410683020562192134464464436975367408821135979363116627210152184663967303765505723539392459254807285497331794783828292956795407859599469108788156181371133853021491993155569944472112275701281894785422045491844426723706345944759222719741250224761128859902764622155673964396744685355612259468974381660207347145224164761812194291245883223171474553918559230661639624922341214901739879617897879325318866074625740417869205890797899873143428751778435507487586060107911742185573460344512265633645121413961261956968461131654215646378525995971497342101733654767694089696315891656858925208924862889847258812765516277649847277448992975737481688752408164459611764410586297362535363829146929598589585218205066534911414872851059253893919060751065441172627171917065309263324045114713623192141338679420486344894399498564259487491312529911924366624856808055113441217232425528888815118288339090218070644096878812488855858557102541757860938728755223256518843453606524923550782161272450263097235223876685486394553471709611464684671867438382668670921193692159992136856353544521891247569228403695114774461151157118612071103526764114156743782825374780639350744696988848822741677496109010841447745521895844884987411676512131775183988760896495926432899779308757172073926681944552932351972233748359316063452624364977312869926185857242344619483631744986621156616798881687949355705555399958595558818789264181276742145768119555117710217715639779435828392213197644597554242172522917428989968661529570467150478073646123471296117727375088112576153725961995514225863040456138146820481125727141269112318076906387344836753770451954307549764676533255445051607883576570993228237714692667781555791087909553364250218950147265232438497352574217651521841571664888489454789069562997721597468697235879569355746046462477867874512297598439577291546320423747465962223072165411797941806524113791469174248829633923685779606193909937708268145733794921285945713329284687595236899472209246371829214164969748628924562633934987951753378768967034701248919532612227202119997678937930967529825665443387492334944792555633694267288091414123648382756649699538396999415840786560205132981447461189583399915369861016187338242664207892242468875036692022736022186317976966727234469756817160639195442118391690802035941391993617267880972350148795986950903920263938909928968974433443645337517273462195566561963975203659283688227792445753142782585723751481917441996077256285747275548455285074886998674130487967825587889027519257875092111727868222183136428652121225385821412986253641142927654169544074623872437972253613656229888221304520664260443399358929211272982824417564562950857165142343252392976831988879214811345988604867819090525196913585659689568993964736712917439432427141495147149053817733244174278032209761581361411324487089239214565923387485174617749244864274557744591784487322623656502948409512417588398016982472162271768412283099466683755050206685889836824868194068409554648265573437953828389872189931944035566263625157686449424877904744346991754436871374579472656239172797849371497443598592369083895680526059178338848354666365142861915966734937839231735444796621875454912317673876931073231762346316349069479337633767569581168275497393145342765935324332435112231947597722483582165285871975581493397093536790681278729385231315976598645437254134303444188928856239402438158538896871925117692565439884594019698088261122726919311188149484891576778536613257453623207794844166557616738582366829311062496466335676495693612675515298779321929868794580528246558014721070423017508036353144631943533752877566792746442475435481292283424383891783833642774183163619873925963349586042945360618950737342297486709369181558813521707753418177113985239753278571771516473817151022501418124696114628673149884075467151792128426345898917951240204121739059307711415692862431542127253683281751571443454754518557422786162440877830117524273117485125812146874457418634397976221340594067811831723381698318934867423347489190829228195854447289608821987751615787414410391579135738648766758292686554177321355531225357337768865842468678414767611672443684269662237773502429135754376885432310586794506931867134796782221859527491745010449459423946809514772116576846135780891780444194904720171857612842989754754488757727469885608888762139426126278640621492808833644641786530984585604767988652608340751892297037923738707931745489661561299850423916331256678829659437602999914559102178626278665173712198774096721563948174163315965219347526165037505153271471905731992750162452999273279898552887676460921252207254659142154140408873133474796872982682542880324691248879457295271240996142702178287727309884828343347336428145484339106073991492405936186480924758621086827886354782362045616915661517851912105949698324719615256113929138938665877765615667677854989418612151552937159255677931433437732312597280105571149582769413966981923182346466278065225733109639821710455284182068887382332054974616927080792359911642219129648648172333628217178388727431992232124437667420786267912275954430392443156751656210498788217644501095127241773759906155166960259898938114149999396914257834561673341790626360849288674718868936149449244789423337187078331239579395823619895157477865241331332630683265167177686223209832342913122556556266338113133777775853686828284620207566332165277079345146128956907311688255547384883993964627813597208381811171768140457861107044106343962946356485323099303523216824661544759251549130226524918326417515432678611415827239564385287868709074948145776343394586579265772455531577946016414148781060377436259461372213132983935111106686961574569198693253373179166592946321299818417985112590512499605734814172363027245660839574646162561365555390534391406278221463833915561091335534913315181045591119745892561173844195132591743768481043138729169911985519537710334075285810503546232240352483571549876112741124603067903382489975436373794445625121746773751010473815899527454142992293952667831329422217964328632176749948345825228944235254169029649381462164177840519815936146642834468386452435602357257767972984917161639467101717395498688321373777584831311168833696563665966549739298861183212722844997439386953845528813161346427380113944641412701345858394351068717145108428118087532876448330142094601776638177374336387587632963566880234582909354916611777173852066205553216251507782781754534115299453351526826979307269874784467453989317195580889340191526779181676014816478223036988454669210661268294845677799753043547812871687668057845311589495599769342463394270432553944428928774754689246017238278314754538783588894902170918768773870167481758222416766646489174859296393237643759161275073684885722242589534585474908688567380161914945967737739352556839824472430459930874039556212868670167273298223766854767398876023745886901922521049959661867377439499235276392492488737512436473120752796834781812863497710287999522721516474793755631243183353396657275828572255696092535417946266746210201275946628786619898533882799962050223095525258939373637620991444738791646395125232936426496758745277437284904886149553243169478692215999141570188215506839523958323316579423754631185767919488994852287996939441348387321868975789383159243036968459556026807884163447732497489388944826174667259721863548546037406719887572132168795019168585492522899929384368569431674024926213754193614236102661718544285480444586265567879538789856174014765296543897638785367979773914556723673719234565471952778945995313719224726627873950975128771876301665564150159487881156822188814451948921612461766593396288156288604334369179489222743521351392904390945353909230537068739360898777361184611421933852288091657214166364435596979175346789401612605499177111928691693438164363424618801745161057418410664428775472973489973814637981612723389234119743805780892591829088578869455855353597484263844833575298973996706854312079933653201261152235482763768078423288958292407143971512123218782956488433947393498749621977443337585824213614165142696388559215678289499467211872204663906055426824983715735766917395683853698999419750231250487531285177372426601564799581245224698786688152276342325310378931749671177161563780701333296577525632173520697623993789418234188142403515924651789631326116185195247744805888115668601244795776597696987086267380413071749097285850622876577564188888463131782356971596692997567898904277405169488069604522896451726630816786387092613074633133765446701679294896885592665935905032719470467690681668142161332679183729102627728172828655963715116653939932567367552277982794596736338265665021601035846625329222675445791022414426662935613816379990785532591139949232434219931033533765883783642273381921596961715366278136101451594543787171969563651222851738239448343178358263733486793195175998384062777457869620996070708894663452431623378478915889591420777921391859472760915347393784494746654446681118516799802642219774524471655980528269498093691537972010988396605425816053168335548455332983132858135736831548525265894155885019917995456555928573496578467320334746312133622226919688732355146670548477767762596820694783893077372641562613675561291778463339432530876738982474281688824436439179307183405380526777659463874998386963228764494473402866134579876831326858529849616261433417873243794614354391112379832734146262319540955572324126445696542023557366883598224228917244196273344195313818296246504529839492583039323568205475597124796117495648614148934821563450783225281928658167823055248215175765997099901257925674948769409398574397468688688296192018463189912839662186792196164133526556676735799186649124545310995840136955713170432266747243968331204682114893374482424923432247592776492362675098155246214358537538433012178113163135476026949521393870283097608064283940336489472186441344391134111297348269253937732770847767132718709293667654796867277744552121794414855649261334402168382444114272585525149938178693335572293143503118727724736829683942302447357314984741747193691079809320584928381928409248856817514396227567389686135540664924559596676951567223923638764032634629917117433879794280181943373752537879114599947482266596736314941097289450924633882851395152795836416175774522313715903755657798516979572566313555237239958272869941123199665674566361254688325446589148185234266173466989107363944192798620541611209019911974142793433556892292319252348110311119773494859599531018909999481561168763821479215553993493493997203442573090643927667894225582161665927917197867812256212149179054772275523299382385732196957012661024629759802732628769577862692775977616645155978797407118304080311314193590521193463333299129144219448461545235351398203292811131997519403253506075826118779646513631176193831335765893587813653690324995214319967491299829107352403213752139136720559138282559272337745221943843533611492151736233769556183542369341173927782139409069868571534079601545891962631862598987811560966060482871793345669692426333317242864716387654588531721777132011617119523098753310916621288840967062255145204110925862115166971771381653982733613969715121137975621788502690497799742497942647274968441898433849925693854673788237614922425917211839757446928161133465264941246951276992366965302962524377681758892756498070769112953691959849567936931074598428432662872798265296356676146324179073799763612190325990956399226256756255495413427058182753252952975335557826981710951465612935109567962311319031694592419825765392348854714651131984818258806258181575158370204732749625559080959032354611423338717913776273469689994622314781186948399943528823842675463052838864778278121278651015998625221840786252259282932284892386696830962462994994396073736270729946722428661473101958451168628954489583691116336039429951125017687726595494373671163867328688864552762960481137787491154756957391361537368581738229468838645380396840174882701091537972907884563968907964972899482612357011836678479788959229844133787274312067711365736440281989989373502560547043407418753571976515931114387491198669338942686041307949505461422768734376175873568278374220806757467113881916113686774095788176652379187875658873196827796686347787934489212542288660439090731785642397778877807241353791881085221511859724212142909175353482738986501051835556784027184975839369168416343951902263223714569329911259457831495493771722114494163240264074799479954342791877935417732610651110512221365412518791256495611586418148915286306072142067196869625732881873898517248858602373346653471081567270556369795740678720282866569611618265682414642017824363509025468696415233881742121641761335158415159768195045583616411913894819923353964768921520561518997651571437888124283569766714345781358555126441957472244677825585178022291464805672592081931999464560447884157928784171413165677542979831558425374971619790321511211184327249189875825183853346745852184640936572684359209238747797995557897490166611771682669180395999943078142898182843519039844047439414246872142787979314712840642592871493628533138483191164605220312864131513516082347721511768454875639984114746874915398899352926566813676662299518213064598618368290924312228758378232493858436388696532863712603919664361903350587449595188514084262292586957392854154239777228715472828139912048561994661646424153792690346750862587511619515984481188389138769883456587397820982248377657793940616668936634572085409516661055134380321215793642209011492063381915753332198038652832709441189689562589865577945419416810854853867974892154621485257926766072507298823585697921538473481324114692791881875699857794215917558036462396675014118336182570206713107930316152611574942351385680732132948932911432143124414960312845127143135299439861759098114576334147375981265924804512151510949430823637365643681041775623581475539198479
diff --git a/2024/go/input/day9.test b/2024/go/input/day9.test
new file mode 100644
index 0000000..f96c390
--- /dev/null
+++ b/2024/go/input/day9.test
@@ -0,0 +1 @@
+2333133121414131402
diff --git a/2024/go/src/day8/main.go b/2024/go/src/day8/main.go
index ab5901d..e801340 100644
--- a/2024/go/src/day8/main.go
+++ b/2024/go/src/day8/main.go
@@ -49,21 +49,17 @@ type Points = [][2]int
func getPosMap(grid *Grid) map[rune]Points {
n, m := len(*grid), len((*grid)[0])
- posMap := make(map[rune]Points)
+ antinodes := make(map[rune]Points)
for i := 0; i < n; i++ {
for j := 0; j < m; j++ {
curPos := Point{i, j}
curRune := (*grid)[i][j]
if curRune != '.' {
- if _, exists := posMap[curRune]; exists {
- posMap[curRune] = append(posMap[curRune], curPos)
- } else {
- posMap[curRune] = [][2]int{curPos}
- }
+ antinodes[curRune] = append(antinodes[curRune], curPos)
}
}
}
- return posMap
+ return antinodes
}
func isValidAntenna(grid *Grid, i, j int) bool {
@@ -76,9 +72,9 @@ func isValidAntenna(grid *Grid, i, j int) bool {
func solve_part_one(data string) int {
grid := parseInput(data)
- posMap := getPosMap(&grid)
- set := make(map[Point]struct{})
- for _, val := range posMap {
+ antennas := getPosMap(&grid)
+ antinodes := make(map[Point]struct{})
+ for _, val := range antennas {
for i := 0; i < len(val); i++ {
curPosI := val[i]
for j := i + 1; j < len(val); j++ {
@@ -88,22 +84,22 @@ func solve_part_one(data string) int {
firstAntennaPos := [2]int{curPosI[0] + diffOne[0], curPosI[1] + diffOne[1]}
secondAntennaPos := [2]int{curPosJ[0] + diffTwo[0], curPosJ[1] + diffTwo[1]}
if isValidAntenna(&grid, firstAntennaPos[0], firstAntennaPos[1]) {
- set[firstAntennaPos] = struct{}{}
+ antinodes[firstAntennaPos] = struct{}{}
}
if isValidAntenna(&grid, secondAntennaPos[0], secondAntennaPos[1]) {
- set[secondAntennaPos] = struct{}{}
+ antinodes[secondAntennaPos] = struct{}{}
}
}
}
}
- return len(set)
+ return len(antinodes)
}
func solve_part_two(data string) int {
grid := parseInput(data)
- posMap := getPosMap(&grid)
+ antennas := getPosMap(&grid)
cnt := 0
- for _, val := range posMap {
+ for _, val := range antennas {
for i := 0; i < len(val); i++ {
curPosI := val[i]
for j := i + 1; j < len(val); j++ {
diff --git a/2024/go/src/day9/main.go b/2024/go/src/day9/main.go
new file mode 100644
index 0000000..83351b4
--- /dev/null
+++ b/2024/go/src/day9/main.go
@@ -0,0 +1,172 @@
+package main
+
+import (
+ "fmt"
+ "os"
+ "strconv"
+)
+
+func InsertAt(arr *[]FileBlock, index int, value FileBlock) error {
+ if index < 0 || index > len(*arr) {
+ return fmt.Errorf("index out of range")
+ }
+ *arr = append((*arr)[:index], append([]FileBlock{value}, (*arr)[index:]...)...)
+ return nil
+}
+
+func RemoveAt(arr *[]FileBlock, index int) (FileBlock, error) {
+ if index < 0 || index >= len(*arr) {
+ return FileBlock{}, fmt.Errorf("index out of range")
+ }
+ ele := (*arr)[index]
+ *arr = append((*arr)[:index], (*arr)[index+1:]...)
+ return ele, nil
+}
+
+func FileRead(path string) string {
+ file, err := os.ReadFile(path)
+ if err != nil {
+ fmt.Println("Couldn't Read file: ", err)
+ }
+ return string(file)
+
+}
+
+func parseInput(data string) string {
+ return data
+}
+
+func genereateBlockMap(diskMap string) []string {
+ var blockMap []string
+ id := 0
+ for i, ch := range diskMap {
+ rep, _ := strconv.Atoi(string(ch))
+ if i%2 == 0 {
+ for i := 0; i < rep; i++ {
+ blockMap = append(blockMap, strconv.Itoa(id))
+ }
+ id += 1
+ } else {
+ for i := 0; i < rep; i++ {
+ blockMap = append(blockMap, ".")
+ }
+ }
+ }
+ return blockMap
+}
+
+func genereateFileBlocks(diskMap string) []FileBlock {
+ var fileBlocks []FileBlock
+ id := 0
+ for i, ch := range diskMap {
+ rep, _ := strconv.Atoi(string(ch))
+ if i%2 == 0 {
+ block := FileBlock{id: id, space: rep}
+ fileBlocks = append(fileBlocks, block)
+ id += 1
+ } else {
+ block := FileBlock{id: -1, space: rep}
+ if rep > 0 {
+ fileBlocks = append(fileBlocks, block)
+ }
+ }
+ }
+ return fileBlocks
+}
+
+func moveBlocks(blockMap []string) {
+ i := 0
+ j := len(blockMap) - 1
+ for i < j {
+ if blockMap[i] == "." {
+ if blockMap[j] != "." {
+ blockMap[i], blockMap[j] = blockMap[j], blockMap[i]
+ i++
+ }
+ j--
+ } else {
+ i++
+ }
+ }
+}
+
+type FileBlock struct {
+ id int // id -1 will be the free block '.'
+ space int
+}
+
+// i = 1 j=12
+// [{0 2} {-1 3} {-1,1} {1 3} {-1 3} {2 1} {-1 3} {3 3} {-1 1} {4 2} {-1 1} {5 4} {-1 1} {6 4} {-1 1} {7 3} {-1 1} {8 4} {9 2}]
+
+func moveBlocksPartTwo(fileBlocks []FileBlock) []string {
+ for i := 0; i < len(fileBlocks); i++ {
+ if fileBlocks[i].id != -1 {
+ continue
+ }
+ for j := len(fileBlocks) - 1; j >= i; j-- {
+ if fileBlocks[j].id == -1 {
+ continue
+ }
+ if fileBlocks[i].space == fileBlocks[j].space {
+ fileBlocks[i], fileBlocks[j] = fileBlocks[j], fileBlocks[i]
+ i++
+ j--
+ break
+ } else if fileBlocks[i].space > fileBlocks[j].space {
+ _ = InsertAt(&fileBlocks, i+1, FileBlock{id: -1, space: fileBlocks[i].space - fileBlocks[j].space})
+ spaceJ := fileBlocks[j+1].space
+ fileBlocks[i], fileBlocks[j+1] = fileBlocks[j+1], fileBlocks[i]
+ fileBlocks[j+1].id = -1
+ fileBlocks[j+1].space = spaceJ
+ break
+ }
+ }
+ }
+ var blocks []string
+ for _, block := range fileBlocks {
+ if block.id == -1 {
+ for i := 0; i < block.space; i++ {
+ blocks = append(blocks, ".")
+ }
+ } else {
+ for i := 0; i < block.space; i++ {
+ blocks = append(blocks, strconv.Itoa(block.id))
+ }
+ }
+ }
+ return blocks
+}
+
+func checkSum(blockMap []string) int64 {
+ var sum int64 = 0
+ for i, ch := range blockMap {
+ if ch == "." {
+ continue
+ }
+ id, _ := strconv.Atoi(ch)
+ sum += int64(id) * int64(i)
+ }
+ return sum
+}
+func solve_part_one(data string) int64 {
+ diskMap := parseInput(data)
+ blockMap := genereateBlockMap(diskMap)
+ moveBlocks(blockMap)
+ return checkSum(blockMap)
+}
+
+func solve_part_two(data string) int64 {
+ diskMap := parseInput(data)
+ fileBlocks := genereateFileBlocks(diskMap)
+ blocks := moveBlocksPartTwo(fileBlocks)
+ return checkSum(blocks)
+}
+
+func main() {
+ test := FileRead("../input/day9.test")
+ prod := FileRead("../input/day9.prod")
+ fmt.Println("Part_1 test: ", solve_part_one(test))
+ fmt.Println("Part_1 prod: ", solve_part_one(prod))
+ fmt.Println("Part_2 test: ", solve_part_two(test))
+ fmt.Println("Part_2 prod: ", solve_part_two(prod))
+}
diff --git a/2024/go/src/log.txt b/2024/go/src/log.txt
new file mode 100644
index 0000000..64192c6
--- /dev/null
+++ b/2024/go/src/log.txt
@@ -0,0 +1,193677 @@
+bytes: 0099811188827773336446555566..............
+0 * 0 = 0
+0 * 1 = 0
+9 * 2 = 18
+9 * 3 = 27
+8 * 4 = 32
+1 * 5 = 5
+1 * 6 = 6
+1 * 7 = 7
+8 * 8 = 64
+8 * 9 = 72
+8 * 10 = 80
+2 * 11 = 22
+7 * 12 = 84
+7 * 13 = 91
+7 * 14 = 98
+3 * 15 = 45
+3 * 16 = 48
+3 * 17 = 51
+6 * 18 = 108
+4 * 19 = 76
+4 * 20 = 80
+6 * 21 = 126
+5 * 22 = 110
+5 * 23 = 115
+5 * 24 = 120
+5 * 25 = 125
+6 * 26 = 156
+6 * 27 = 162
+Part_1 test: 1928
+bytes: 0000000099911119999222222229999999993333999999999444444444999999955999966666668999899987999899979888888899999991010109711119997912121212997999713131399971414149915159799979916161697999617171799961818181818189919191919962020212121212121219992222222222222269996999232323232369996242499962525262626262626999699959272727272727272727995999592899529292999959930303030303030949993131313131432323232933333333333399499949934343434343494999499353535359499939993629937929992999383838383823939999294099199919414141414199099909942429099904343434399909944444444444499454545454545899984646464646469998999894747474747474747479989994848484889998998498998899850505050505050505089988995151515178996895252525252525296895353535353535353539545454545468555555559968995656565668996895757575795858585858585858585595959595959860606060609961616161616161589626262626262626295863636363639958994864649965486666967676767679489968686868686868684899486969699937070707070707070708971717193897272729373897474749289928975757575757575759289918767676769918777777777777777778789918990797979797979797989908998080808080818181818181818181089908982828282828282828290899089983838308484848484848489908858585868699979878787878787997998888888888889799879989898989898989898799879090909991919191879989292929292927939393939987998799494987959595969696969699979797979787999898989977100100100100100100997710110110110199710210210271031031031031031031031039977997104104104104104104104104105105105105105105105105799779910610610610610710777997108108108108108108108108799771091091091091091091091099110110110967995799111479937991121121122711311391141141141141141149279921151151151151151151151157992711611699179117117117117117917118118118991799179119119119119917991120120120120120799179121121917990712212212212212212212212299123079996124124999699125125125125125125912612612612612612661271271271271271271281281281281281281289996999691291291291291291299869986991301301301307699713113113113113113169976991321321321321321321321327699761331331331331339976997691341341341341341341349769135135136136136136136136136137137137137137138138138138138966996139139139139139139139699669966140996699141141142142142142569956991431431435699414469145145145146146146146946994147147699469148148148148148148931496991501501501503699361511511511511519936992152152152699153153153153153153261541541541541541541541549926991691559115615615615615661571571579916158158158158158158159159159159159159159159159916016091699161611611611611611619911621621621621621621626991616316316316316316316316399069901646990699165165165165165165165165165069991661661661661665998591671679168859985169169169169169169170170998517117117117117117117117199859917217217285998591739859985174174174174997517517517617699759975177177177177177177177177177997599178178178178759917917917917917917917975991801801801801807181181181181181181599759971821821821825918318318418418496599618518559965996518618618618618618618699659187187187187965996188188599559951895995519019019019099559955919119119119119119119191921921921925599459941931935994194194194194194194599459945195195195195195195195195994519619619619619699459945197197197197197197197197994599319819819819859935991991991991993200599352019925992202202202592032032032032032032032039259925204204204204204204204992052052052052599259922062062062065992592079259208208208208208208208912092092092092092092092092095991599210210159915211211211211211211991599059212212212212212212212994999492132132132132139949994921421421421421498492152152152152152159849921621621721721721721784998499821821821821821821821849982192192192202202202202204998221499749222964996499223223223223223223223223223224649964992252252252255499549922622642274228228228228922922922922922994499442302302302302302309934993492312312312312319349934232232232232232993423323323323323323323323323392342342342342342342349342352352352352352352352359924923623623623623623623692499249237237237237237237237237924991492382382382382382389149923923923923923923914991499024024024024024024049902412412412412412412414999399932422422422422429992432432432432432432432433992442442442448399739972453997399246246246246246639952472472472472472472472473995324824824899249249249249249249249249249539953992502502502502502502502505399525125125139952522522522532532532532533995399525425425425425425425425425439943255255255255255255255255255994256256256256256256256256325799425825825825825825825839259259259259259259259259926026026026032612612612612612612612612613993399326226226232632632632632632632639926426426426433993265265265265265265265265326626626626626626626626699339926726726726726726726733926826826826826826826826826926926926993392702702709239923271271271992399239272272272272272272272272923992392732732732732732732739227427427427427527527527527527539922762762762762762762762762763992399127727727727739913991278278278278399039903279279279279279279279999280280292812812812812812812812819929992992822839299922842842842842842842849992999285285285285285299286286286286286286286829982998287287287287287287287287287288288288288288289289289289289299829029029029029929129129182998292292292292292292292292299293293829294294294294294929529529529529529529629629629629629629629629729729729729729729729782929829829829897299299299299299730030030029973013013013013012302302302302993033033033033033033033033037299730430430430430430430429963053053053053052996230630699630730730730730730729952995308308308308308308309299531031029953113113113113113113113113112993123125293133133133133133139314314429931531531531531531531542993231699323173173173173173173173179932993318299323193193193193193193193193199932932032032032032032032093293213219332229932323932432492299229932532532522326993273273273273273273273273273283283283283283282293293293293293299223303303303303303303309922331992299129332333333333333333333333902993343343343343343343343343340299029335902993363363363360293373373373373373373379023383383383383383383389991993393393403403403403403409199934134134134134119934234234234291999343343134434434434434434434434434499345345345346819347347347347347347981998199348348348348348348348348348819981993493493493493493493498199713509971993513513513513513513513517193523523523523529619961353353353353353353935435435496355355355355355199519935635653573573573573571358358358358358358358995359359359359359199519936036036036036036051993613613613613613613613613615199519936236236236236236236236236241993193633633639236436436436436436436419921365992136636636699219367921992368368368368368368368199119369369369369369911993703703703703703703700199019903713713713713713713713711990199037237237237219901373373373373373990137437437437437437437437499909993750993763763763768099703773773773773773779970378378378378378378378378378937937937937937937937937937997099638038038038038038038038038009960938138138138138138138138138196038238238238299638338303843843843843843843843843849960996385099609386386386386386386386960387387387387387387995099403883883883883883883883889389389389389389389389389389939039039039039030993099391309392392392930393393993099209394920992099395395395209920939639692099109939739739739739739739710991099398398398398103993993993993999910400400400400400991099140140109910991402402402402402402402402402099403009904044044044040999984054054054054054064064064064064074074074074074074079998999894084089989898409409989898941041041041041041041041041089741194128979413413413413897989794144148979841541641641641641641641641641697417417417417417417417941841841841841889419419419420420420420420420421421421421798979896422422422422422422422422422942342342342342342342384249698964254254264264269894276989428428428428429429429429429429429643043043043043043098959431431894943284334334334334334334334334344349498943543543543643643643649894943743743743743743743743743789498934384384384384389439439439439439439439893989244044044044044044044044098441441441441441441441441441442442442442442442442442442929892984434434434434434444444444444444444444444449298929844592989294468929894474474474474474474474472989144844844844844898919844944944944944944944944944991450450450989198914514514514519891452452452452989194534534534534544544544544548904554554554554554564564564564564569457457457457457458458458458459459460460460460460460460461461461461461461461461461890989094624624624624624628909846346390989098464464909890946546546546546546546546646646646646646646646689946746746788998468468468468468468468899469469469469469469469889470988998899471471884724724724724724724724729988473473473947447447447447447447447498899884754754754754754754754754759888988847694774774774774778889888947847847847847847888897889479479479479479479479788974804804804804804804804808897481481481481481481481889788948248248274834838897889484485485788968848648696487487487487487487487487889688488488488488488488488488488968896489489489489489489489489889688968490490490490896889588491491491491491948894492889484934934934934938948894849449449449449449449489484954954954954954954958948893496496496496496496496496889497497497497497388949849849849849838849949949949993889350050050050050050050050150185025025025025025025028938893503503503503889350450450450450488938895055055055055055052889288950650650650650650650628892889507507507507507507507507507188905088509509509509509509890889975105108985115115115115115115115117898751251289851351351351351351351351378987514514514514514514897751551551551551551589778977851651651651651651697789778951777897785185185185185185189678967851951996752052052052052052052089521521678522522522522522522967896752352352352352389678967524524524895789578525525957895752652652652689578527527527527527947894785285285285289378529953053053037895315315315315315315315315313753253289378935335335335335335335335337895345345345343789378925355357892785365365365365365365365369278927895375375375375375372789275385385388915395395395395405405405415415415415415415415417891789542542542542178915435435435435435437891789175445445445445445445445448917854554554554554554554595465465465465461789547547078905485485485485485485485485487895495495495495505505505505500789968955155155155155155155155196899552552552552552552552552685535535535535535545545549968996895555555555559689968556556556556556556996855755755755798689865585585585585588986898655955955955955989856056056056056056156156156156156156168986562562898689865635638956456456456456456456456456456556556556556556556585665665665665665665665666897656789768976856856856897689768956956956976897689570570570668966571571857257257257296689668573966895657457457457457457457457457489575575575575575575565765765765765765765765765768956895685775775779565785785785785785785785788956895579579579579579579579579689468580580580580580580946894658158158158158158158158158158258258258258258289583583583583583583583583468958458458458458458458458446894685855855855855855855855859368936895865865865865865865863689368958758758758758758758758758736893588588689365895895895895895895898590590590590590590590590590926591591591591591591591591591892659259289159359359368594594594594594594594594916859559559559559559559559659659659659659659691689168959759759715985985985985985986891689165995995995998960060060106890689602602602602602602602602602958603603960460460460460460460460495899560560586066066066066069958607607607607607607995899608608608608608608608608560960960960960960989958996106106106106105898561161161261261261261289613613613613758961475897586156159761661661661661658975896177589658618618618618618618618618618965896561961961961961989658965862062062062095586219562262262258945894562362362362362362389624624624624624624624458945894625625625625625589626626626626626626462762762762758628628628628628946296296296296295630894631631631631631631631631631586329358936335893586346346346346346349358935896356356356353589358636636636636636636636636925892563763789258925638638638638638638863963963963963963964064064092641641641641641641586426426426429264364364364364364364358925644644644644644644644891589156456456456456456458915646646646646646646646891589158647647647647647647647647915648648648648648648648891589158649905890586509056516516516518906526525896536536536546546546546546540655655655655655589656656656656656656656656656948965765765794658899659659659659659659659659659660660660660489948661661984662662662898466389848664664664664984866566566566598489846666666666666666668966766766766786686686686686686686684898669669669669669669669669489748964670670670896489667167167167167167148964896672672672489673648954895674486756756756759548967667667667667667654894489367767767767748934893467889348967967934892489268048924868168168168168168192468289248926836836836836834892489268468468468468468468468468568568568568568548968668668768768768768724891486886886886886886886896896896896896899148690914891489691691691691148914896926921489048906936936936936936936936934896946946946940695695486966966966966966969046976976976976976976976978904899386986986986986989936996996996996996996996998993899370070070070089970170170170170170170170170138970270370370370370370370370370393899370470470470489705705705705705705705705937067067067067067067068983898387077077077077077079838983897088387099838987103898389737117117117117117117117118973897127127127127126389671371371371371371371371371338971471471471471463897157157157157157157157156389638716716716716716716716716716717717953895371887199538953720720720897217217217217217217217215389538957227223897237237237235372472472489438947257257257257257257257253894389726726726726438943894727727727727727727389437287287287288947297293894389373073073073073073038923897317317317317317317312373273273273273273273273273289238923873373373373373373373373391389138734913897357357357357357357351736389173773773773773773773773738973873873813891373989174074074074074037417418913890374274274289074374374374374374374338744903890745745745745745745745389038974674674607477477477477473874874890749389975075075075075028992751751751751751897527529289753828987542897755755755289727567567567567567568972897577577577577577577289728975875875875875875875872896287597597599676076028962895276176176176187627627627627627629528976376376376376376376376376352895289576476476476476428765765765765952895276676689528976776776776776776776776742768768893289328769769769769932770770770892771771771771771771771771277277277277277277289277377377328922774774774774774774774774774891289127757757757757757758912891287767767767767767777777777777777777777779128917787787787787787782891289077977977977977977977928780780780780978178178178178178178178191782898189817837837838987847847847847847847841785785897189718786786786786786786786786786971897178778778778778778778778778789718977887887887887881896187897897897897897899618951790790790790790790790895189518791951879279279294179379389318937947947947947947947947947941893795795795795795189379679679679679679679679617977977977977978931893179879879889379979979979979979918008008008008008008008008008931893180180180180180189218928028028038038038038038031880480480480480480480580580580580580580580580580680680680680680691188078078078078078078078078079118980880880880880880880880880811809809891189810810810810810810018811811811811901890812812812812812812812812189908138138138990898148148148148148148148148149089908158158158158158990816816816816816816899817817817817817817817081881881881881889908980881981981981981997089608982082082082082082082060821821821896089822822822822508823823823823823823823823823950898248248248248248248248248245089508825825825825825825825825950895826826826826089582782782782782708950894082882882882882889829829829829829829829408940894830830830089831831831831831831831831831308328928338338338330892089208348348348348348835920836836836836836836836892089837837837837108900883883883883883890089083908900840890089008841841841841841841841841841999798428428428428428428428428428984384384379897988448448448448448448448448449845845845845845845798468468468979884784797984884884884884884884884889784985085085085085085098979885185185185185185197989852852852852852852852852852797979785397979797985485485485485485485485485479697985585585569785685685685685685685685685696978578578578578578578578579697969798588588588588588588586979698598598598597986086086086086086086069795978619597862862862862862862862862862949794979863863863863497949786486486486486486486486486494979398658658658658657866866866866938678678678678678679798683979297928698699792978708708708709871871871871871871871871871297928728728728728728729792987387387387387387387387378748748748748748748749187587587587587587587597919798768768768768768768768768761978778778778778779197878878878878878878919791978798798798798798798798799197988088088088088088088088019791988188179097908828828828829798838838838838838838838848848848848848848848858858858858850979098868868868867909788788788788788788788788788888888888888888990979987890890890890890890890890998789189189289299879987893893893893893893998799889489489489489479887989589588798879896896896896896896896887897897897897897897897897897988898898898898898898798879787899899899899899899899990090090090090090090090078797879790190190190190189029027968790390390390390390390396879689049049049049049047958795879059059059059059059059059587990690690690690658795907907907907879587958908908908794879487909909909909909909909909909948799109109109109104879911911487939129128793879913913913913913387938914793879915915915387938916916916916916792879289179177928799189181879187991991991991991991991991918799209209209209201879219219219219219922922922922922922922089239239239239239237908799249249249249779925925925925925925925977997799269269779977999279279279279279279279277799779992892892892892892877997799298779877930930993177932932932932932932933933933933933799349349349349349349347779935935935935777977797936936936936937779779389389389389389389387977796939939939939939779677994094094094067794194194194194194194195779577994294294257794394394394394395779577994494494494494494494457795794579577947946946794779477947947947947994894894894894894894894894847794949949949949949949779477995095095095095095095095095037795195195195195195195195193795279953953953953953953953379549549549549549559559559559559559559559557937792956956956956956956956956956779295777958958958958927792795995995995995995995995995979960960960277927799612779962962962962962277996396396396396396317796491779177965965966966966966966966917791796796796796796796796779177919689689689687799699699699699699699709709709709701779177997197197197197197107972972790779097397397397397397397497497497597597597597597597597597577997607790779779779779077909787799679799799799799799809809809809809967996981981981981981981981798982982982982982982679839839839839839839867986984798679898598598598567986986986986986986986986986987987987987987987987987987799889889889889889889889888698979867986990990990990991991991991991991991991991797679769929929929927976796699399399399399399499499499499499499499499479667969959956796679996996996996996667969976998998998998998998998998799996679667100010009567100110011001100110019467100210029461003100310031003100310037946100410041004100410041004100410047946710051005100510051005100510051005936793671006100610069100710073679100810091009101010101010101010101010101036793610111011101179367936101210121012101310131013101379367921014101410141014101410141014101410146101510157910161016101610161016101621017101710171017101710171018101810181018101810186792671019926792671020102010201020916791102110211021102110211021102110211021679102210221022102210221022102211023102310231023102310231023679167102410241024102410241024102410241024916710259067995791026102610261026102610268579102710271027102710278579851028102810281028102810287981029102957981030103010301030103010301031103157975710321032103210321032103210329710331033103310331033103310331034103410341034103410341034103451035103510351035103510351035103579757975103610361036103610361036103610371037103810381038103810381038103810381039103910391039103910391039103910397975797571040104097579710411041104110411041104157965104210427965795510431044791045551046104610461046104610467955795571047104710471047104710479557955104810481048104879557910491049104910491049104910491049105055105110511051105110511051794510521052105210521052794579105310531053105310534579457910541054105410541054105410541054105445710551055105510559310561056105657910571057105710571057105735793571058105810581058105810581058935105910597935106079357925710611061106192579257106210621062106210621062106291571063106310631063106310631063911064106410641064106410641064106410645791106510651065106510655791510661066106610661066106679157910671067106710671067106710671106810681068106857915791069106910691069106910691069106910691579151070107010701070107079051071107110711071107110717910721072107210721072107210721072107205799107310731073107347994791074107410741074107494791075107510751075947994791076107610769479947910771077107710771077107784798471078107810781078107810781078107810789847910791079107910791079107910791079847984791080108010801081108110811081108110811081747974797108210821082108241083108310831083108310837974796471084108410841084108410849108510856479610861086108610861086108647964710871087954710881088954710891089108910891089954795109010901090479109110911091109110914109210921092109210921092471093934793410941094793479109510951095109510951095109534793410961096109610961096793479241097109710971097109779247109810981098109810981098109810981098924109979247924110011001100110011001100110011001100792479247110111011101924110211021102110211021102110211021102792411031103110379147904110411041104110411051105110511051105110511051105110571106110611061106110611069047904791107110711071107110711071107110704790479110811081108110811089371109110911091109110911099937993791110111093798371111111198379731112111211121112111211121112111211127973711131113111311131113973797379111411141114111473797311157911161116111673797379111711177379637961118111811181118111837911191119111963795379511201120112037112111211121911221122112211221122511231123112311231123112311231123112331124112411241124112411241124112411241125112511251125112511251125795371126112611261126112695112711271127112711273795379511281128112811281128112811283795371129112911291129112994113037943794311311131113111311131113111317943791132113211321132113243794379411331133379113411341134113411341134113411344379337911351135113511351135337933793113611361136379337113711371137113793379337113811381138113892379231139113911391139792379114011401140114011402371141114111411141114111411141114111419237911142114211423114311437913791114411441144114411441144379114511451145114513711461146114611461146114691114711471147114711471147114711471147379137114811481148114811489137903114911491150115011501150115071151115111511151115111511151115190379927115211521152115211531153115311539927991154115411541154115411541154115427992711551155115599211561156115611561156791157115711571157927992798115811582798211591159115911591159115979827982116079827982116171162116211621162116211629827972116311631163116311631163797279727116411641164116411641164116496271165962796271166116611669627952791167427942711681168116811681168116911691169116994117027942794211711171117111711171117111711171117111721173117311731173117311731173793279327117411741174117411749117511751175117511751175117511751175221176117611761176117611761176117611767922792211771177117711777911178117827912791179117911791179121180118011801180118011801180118079127118111811181118111811181118191279027911821182118202790271183118311831183118311831183118391184118402711851185118590279118611861186118611861186118602118711871187118711871187799118817991799118911891189118911190119011901190119011917911921192119291799179811931193119311931193179817981119411941194119479811195119511957981119611961196119679119711971197817981711981198119811981198119811981198119898179811199119979717912001200120012007179617120112011201120212021202961203120312031203120317951795120412041204120417951712051205120512059517120695120712071207120712071207179517951208120812081208120812081795171209120912091210941712111211121112111211121112111211941212121212121212121212121121379417941214121412141214121412141214121412151215121512151215121517912161217121712171217121712173179312181218121817931793121912191219179317921220122012201220122012201791221122112211221217921222122212221222122211223122312231223122312231223122312237921122412241224122412241224122412247921712251225122512251225122512259217921226122612261226122612261226122611227122712271227122779217911228122812281228122812281228122817911791112297911791112301230123012301230790179123112311231123112311231123101790112321232790123312331233123312331234123412341234123412341790179123512351235123512351235123512351235907990799123612361236123612361236123612360799079812371237079807981238123807980798123912391239123912391239123912401240124012401240124012401240124001241124179807980124212427912431243124312431244124470712451245124512451245970124612461246124612461246124779701248124812481248124812481248124879707970712491249124912491249124912491