diff options
| author | ame <[email protected]> | 2025-12-03 02:45:02 -0600 |
|---|---|---|
| committer | ame <[email protected]> | 2025-12-03 02:45:02 -0600 |
| commit | 430bc7a3f5b1065099716ef54a8130430fccc60a (patch) | |
| tree | e1a9f0fc3366ba8b1b2b76c990b50d57345c5f5f | |
| parent | f99714019cb330a563189e9d0d27b9faffbee706 (diff) | |
day 3
| -rw-r--r-- | src/day-3/input.txt | 200 | ||||
| -rw-r--r-- | src/day-3/part-1.zig | 39 | ||||
| -rw-r--r-- | src/day-3/part-2.zig | 45 |
3 files changed, 284 insertions, 0 deletions
diff --git a/src/day-3/input.txt b/src/day-3/input.txt new file mode 100644 index 0000000..7957ac8 --- /dev/null +++ b/src/day-3/input.txt @@ -0,0 +1,200 @@ +2331221221361221232332583266422231222315311212133222227552392222213223325332632323212227323432113121 +2233226222432274235222128222151122221191321631122222252323328313312322222318322121122332221222212221 +4358543424523543451634322426445223334323142333443444443434544565434254474343544233443224454543446963 +3554445343324244444345432454444315444645448544644543645644245345344433554445335174456444344444345225 +2222232222331222132332324143527233312312226312212112123221242423222312111222232523224213222222232222 +3321232262228234172244637228168282252321362462384572222316322318223875263246587288222513632342823671 +4433523333253372235442333232333321456422743325426132223322324151332255323373223333232113132623632121 +1218342223423232243542412332312323222332222213524822222333232133112424236223232443322222322323213232 +9132221214313323354322834333713462232226223322288233352339329242826792325313233258773269233332532932 +3312262224312242133244122222332531212223333453122235222352252222623143332321363232332222324232224244 +3321273454522151454631311512222234343233222324232394433424723453431553134355529434645222332222331223 +2343281621537224322242532214243226224442457232722221421461326232248423222923112212941232266945222455 +4335724467286342322332323673533723295546267763342738642522434554852527689752376729361722638234362933 +6584525424553451552658754553444855536554635225545522555225534734755555457122553315592574132552314364 +3333315224232362233325223352343233262333132441742623212634732215332331433233343624655215553824233364 +2233413252422222133344232422452232422323122461532321313224231222322342222212223423532521123244132211 +5642343316523633633346333837213813322217224743345332133623326333233335236223725222225833333333113331 +2455743537452743242433666334346423462244422822545214644722323263953442245242442233315825323426465666 +3233354333333433436332463223333233633233333543252233335231334334392233235232232331353225233346333323 +6751539152436432254522413537742423557226364245435324142222532223651544444425667643543252543432572435 +4573652522457346429561444556442256637291255424422445158299546446433532554335295474626359644596515954 +3227475677965727785274334643246363334433554453365724266444437172464746621635467472543726617452766463 +2322222222722232212222222332323322221322222122122211322532224121223122122227222332322222222222312223 +5222375351371176713213317161144654554471573771321536455516232143461543145334411275722457731641145189 +1122622321242412242122242332233212127282322432242223335211234122235332134248222143134222451332232343 +3445723334432945335545433454344434364424342343442474533444243433442594344343332444434435423343433344 +3423323223433232311223333231622323413112232224232143232326322351364233123342333333323413321322333144 +2435854122232622421132132122621553223121242226232242432233624242522222422221366635512322323232162676 +5225573436314523832333433637612278342323376132446642423543354642249643334724542431314434524226485362 +5443324442272132252721238214752353324514333412722244421235376311626652133262424272424431146233844532 +4223633244374644442234445444524333142243634261245524225334443444423463444545442257346543633644431233 +3566729686267694335796349288376489645759666367954456664487846523239588754636376763838756535641355326 +2354555332547363542554364453452528554655614454657873656554345565245542324253345555536635372343233242 +1142224223322324223232421254323252222412422223124413222313223225122222232222223133222422242234223223 +2222212221222412252225222124262222212332215222242112222322262142262266223211222232222222243122223252 +2463256542236464425354224744223552232555435543447421433245255256342635633515352544433354333245133667 +3233212312322212122243222222361222222122222222322232122121122122222211322111311311222225112222223232 +2245626512471415142227426243425432224224445443244354152224331442121413484433235144427642453322427832 +3522445255242258353522434633522433422431335244455553233552244654332644353332534235353443453435451425 +2352234422323224232212131221121313234222212242222212331312533132331343232213231332342224321122322322 +9629632568436649457246765389536345576654346665345266526243559635365524795652329436259554553264365783 +1687783252471642886241864885417574245161768635576844528554852355566876467348472654541656343253424539 +6745354737458343858333654555438844362533452565458444434744585752474344494354954467486454471273967844 +2233223222233223121223223224222382522224333124224332123235222333323413222873232235223311222332213233 +2235344233133433533332533223453335336453566623314423533253443334446343253535613333342463253342316374 +3212123244222213626253532637134325212517323126613122243355233323253445223232552433622334315223522294 +3312222222514331222222112222233222222422233232298342222221222222224422222124223312822322192524222312 +6532247252222213229721212536452226616222722522723623447624431222222453212221222122453322222313271252 +2225122212111522222222211213724213223212232223222426322232352122552228312222222226212223221323222232 +8768755863666775785351676577467272386862756128927854866887867877824888774875675488678436686758646846 +5332454224433344246443464456444642354441544546364244154344334452345445844255457546464745336426356346 +3355555354549245455552557665544535346554542445444364355535453543655345445544347435555534534635565554 +2343324243322233333333241322344232533333343445334223433374233322333644311333347334333341332352333423 +8225513313425226222222575141283631531543543215217262745456229316346432132337222422122436732321464127 +4374368225292232442172522277482222528719226512341248227285212971295862222131442222319112421822212317 +2422522412332235226225222222341232434223221231222422232246333412692143334245232133226226244336342333 +2332244221213323231241222123433322223323422322223211323323322223322332223212112342142234325221411423 +1215222222312324122212222222212322232224222222223223172342622122112325117632512222324122223621222221 +3322324322142435122341336521343273214233221423312523142232343432321223214545322222323345323225214322 +4326563535312332356221431534653435252344533264313332322443332562323442726224336414212112323233553933 +2222234324221222232221233222313623233363344235224322322422222222321322234311233332323323342133332314 +2333436221222112724115312422613872322363224835334542433363222722441524222236422996614565293622359636 +3527345773363365323476324448644576474553225564461443464643334463635151734475364533153353346547364662 +2221222222222222122314222222232321222212231222322212132222221232121212222122221221122281215233222124 +4355653728656723554764655426625543424334455344533346655657527566774553325464636476464621652655765627 +7446859867636957648439879576679378546427987766988934385767665577547357658873429697878877553777586338 +2222222222222212222223213222222232213135211223213233131331122322222323312232211422122332122232233435 +2223222324122113222223252322232356323223324242323123313242533343232335224441223322258222214234412224 +4465423737416283372132333333252224354245223313123226332432391378844221312233432246332433263541233471 +4143345132274345425337145135251342216234323234243345442424443133434142242344333334444463344213347334 +2223233323211223223422233113322253122112222336233423321221422122233432334333213153241231121231222333 +1422222322222222322223222211222231221212222212222222223212222332312223222222222223322233122121223322 +2412352223344332533223111324223132223232933413137324222222221325145332232333233352322122333321512233 +2342533122422572523162121325553142264722724124412221612142222222232762212322223212522122142122522232 +5535454433656285553434456225255834456424332584346446335333375325535452235344535343335222434424483442 +2322222213221242222121432212222233822223252522341322252212323342345741222342122521225431421234112232 +1236232722125147752326232256421443323268572754224371437133442763112325363147254423395828533234544577 +1263262224242222231122322223272221522222421314127126562421333533292234322313333113142323222222234422 +3231222233722412332122322132624222432221221242422422227252153152232112222524233742462222432329622222 +2223414233232593232736373425362433224234433327321335585223727735366239132333331243732332232523233333 +2332232111432532141522214452534432325253421122135151242112214312151115342324525351232315455455436789 +2222221312241323234112222221342222322331221322214711222323222222222422233842121222322212312232222223 +3333323382337834424326122223332434317334533432472213284238733992443333222274223413332226834662237822 +4434643664734445443445444436262366544265664644844644944544245344454444444424474644448443465356545427 +2332153333323333254322332321162213323212322223121532122136223252233332222231528131242224135234433535 +3586133683863227354263387622954648342586424638856824572188353643163284223156652472531728522387234723 +4243442125434524252325238322344635226142663354441627532255254424334124454232854444562443232343344532 +3222222232323221412222222222223342222262461212211122222243253222212222221424822312222425532322121452 +3514363653344644143351255531145616525434344623444143524145222255344324212252552415414264246446521789 +6638535275535554635764535563535235455557667757457584666563755574864645565637493545544768764545463759 +3249442349346331984452884869782844444231354584187653744893847844874949274546478617446785533626869823 +2232312122121223222312222112262522221121212132222133222222333122221222233221535212222222212222222222 +7478563372666987515356423463688634631524422577685753657697596264655633463748333737685433416292858727 +3333337453534543443434332644333234343331463333335643444446344344363354533333443456443133633344344343 +2333435333333443123333233443113353442342333352322233442434333433432234332413333443453333433223233333 +4559223346922317122252528232258742311222312476642134443312313554323343132843422726324523329532322579 +6557747559324734557157737526274467624383615244735752575454726634566346663343337252385125332362347177 +1422484335332542444452212226235324345455242151532322425432844522245113243424545255313444947432322253 +5343211212343523233224434234318224342533332632635333362223333322322232821335123223441523763322223323 +4944555244442443141412334343443364243531226431453322453344344816424724642224454424343323543335253453 +3342223313223212232423323312321223233232212222231323223122221373233133232221141222223323222332412231 +4634154373456332342424765152322347535543335532333343344232441232332343334373253144543331421242234332 +2374526311227242212724122511315224152232112222222445323233633452626292215822633223542416252224422114 +7343424333685243937742354144463533673254373535333572342932323944633432244332814233463357243846333453 +2542523323113953341244221333351634322213522433153433363132373263321233333333323212522323335131323212 +3143124722422225234249434252732222925563412572223423233232434374116524224652272223424313224334327322 +5464526743367762547152345663258835746645563361844716335653647352656543445443566335636966445555667836 +5434422122412222232521444363121642244333222234263482623521223232222221122222114221423542142224222142 +2323343334333323423732223226336443544232533333332333531234333534933212332356325432334123233333333533 +2322222322332322743224246222322222422143232122122122212222321221252222712236122233122122323252122322 +3312333231322113221323122222232173233322223322423221322132332331245332214133253423136223332233233222 +3223434513232223331334222623332531123422233123433342353331332335333223153132222331323212336333233332 +1223221262332422322322211261222121221821222232222212222232213222122212321232123332212223257322222112 +3123444343424434523533242333252253335635334453564354633333354345543366414563433325466335454346265334 +4133643665445766624746553676346875655546747175455577344346664565756595324454437553365398567654453643 +2222222232344313224232222322322222212212122137227624224232262242223222212212311122252422212222322222 +5822222332762223422142212123171112621265212536322212525263524222275122123218212238212242561127332222 +2421222222122122252227222222222412236122122221712521222222223222221222221221222224222311212251222262 +3238422556422546353324122234323222343335552232332332344345222333344335222225133336332233323343235233 +3223132424422246242552325424653461443664323324454345643247744316316334414644624364151263862446422434 +7282332322223122532212331222222422222212234272223232224123125222233241212625323242342222123522212322 +4143745544664534855444462543435556585453443475534764466446454467493585533545436431854758864444427473 +7822214222272222321343582297122232822227124221532328221282664664212422225225261231264255231422914217 +5445485645342653643343474331438445553472437144433413134444263533534314162442685423744535244494242156 +6325543334448432533333535342364443343134432331534625331434434334353533332233553344634533334433654333 +3664645584755555487636477464654648545352456774186636553587536561854634842334554445436557663224575436 +4642448446313134441547376744443822235647143444857444757345621622244423644244642354347877623155252313 +4333344221543232544743733533633633323873431244325214726344326529232254424332251333432332424437424634 +4122115343321222212413232211332332653422231221321224292231432243222662223222323232232312211212324321 +3354664443534545924555245433655633345243253533533553554473535634723325333653786453563152523554436543 +2324233332321222122222222253224232323314323422234233221312212221244132152221323134412222332222221213 +4234422224222622222233553323433322652234123633637244328234323239321262681223324422346462224463222364 +7448436442667222733352525565544367742934636743237477553766865352554623744436342337767449218334443364 +1131622423421542232324322326721214642522245663264813364514322212764521361624272423452732333332625592 +2423223323432332523343133332423322224322413232331313323343223123223251233242224322322133323123232233 +2321241441222242332442223232132424223224132344322232332222222214124223243524442222231212213243232243 +2738222532215225253221824217262263321731222244752662646233522217225722164122324222657624422225124222 +3312322123221221212243121222222232152222522423222122222252222225122222221122362142232152222222323221 +2122132212213233212332333126231333233312112423222222223332232314442232212233333233413134331234222242 +6924241231212213552237231223422312417532256222135642493332372642325672481222355332322332324363411622 +1223222221123212212212244222222122123222243222322122221423124214112321422243322222213332222112212223 +4454434353333444332343345242333264353524544635233439313343243337384235244632434333323232363933533333 +3712343334733432443145333833223226363474534334233753233333652234344334333245642343324323341333334223 +4342444218441353433444444544434443334263543323422324228422631157474444321349244422214728323444343424 +5224834575883364554276544444562747215786728477875383237714142583779759881352723844422443743865312222 +4263222512343374234434143363124842344652424635264542446444516334244343324264646133483344232234234215 +4474243354534347344353544434413253524334573444451544456434463254764353534434444347347443442343733435 +5724261464423554253322365533647234422564425471162238443126525325231214226443122742423452431526518254 +5527584763568755255492653633249523632455271462474724336685154496558638484344555552422652942427459322 +1243932125231214277221532214212322432122223223243232242323126222242522134722232252324224121424327332 +5353232563416461435339796425284333643255325655735623537543413467334132333523423545451665352576262412 +4636374523235534363442835453525424485583452485432328238576553563532362854326883536434435469379555333 +2422344145556433262211122252552552352139543342425435421242242542221212226551525241122222425225125542 +5269438821434378336562375321347279625262622373676237454227414232623369232926246255212562428452655646 +2362622136554252674263632514321527446536922516645445622532264322475456736663237546256765222664395435 +6246932339288236918222554365372653752218743925229463266792746564569483732937778146425743744837455746 +2233242245532453333243532252423221225434232224322433142342223242322432232242323132235222322532364432 +4444474944333544444444443464324446424243444444374444454483434444443344424245434948474439142439484444 +3543234265234544223325232433435422242263644124164215584234545182545483254335822222332331655545532633 +3232221133224333231122332572225122222331321434223533232322232324334523283223313413323326226172313252 +1242182222271222226227222422121222224542222225241622322122272221221222131231221225221222222222422214 +7353154575145645221445355735645756555646445525655434845559475462578543453645473443456897454498543462 +5842454344422143845553675434524454847395533424548439536955434563345353733356442342574344538258355342 +5335242324766744241464343343244473323243535345444337356436554451443725425545454567555554364444232485 +2285944767898649468857964388632426644687689996653795629745579666286565453234656553357885655743894676 +2232233312322212322222222322212213212122222212233223222252321623322212221221232111232224332322231121 +2242322533225123122222151243521163332432211723222231522522442432312224423215122423222523114233221212 +7937874658445687793592685766545866556865836579954597984479457655865798556795863648998967758819677888 +4525414322268242225222553723524527754163511427627536743112214418672285452255234255241445552455242426 +3223511343333892742588442834443643533373343533354344573266235434433737533432314377293823363343343345 +3335354732353312341322232533232336423433243217353335334225245445233342333313234724242343343563523334 +6392955435368425654244548636922424343756645423563452313355614243454543342626516745336374544454423463 +2334234242234917516562351543265433442326324544153554646563426622324326523352863652661516234435625458 +2584773539322435222434622722244234253372316526536443476268547334245442563253121565443663643454547433 +1212422242632225121152334222222222222422222422221522222322232214222372324233231221424323153232233251 +2533222222221311222222152222132223281222425222122334221212222272323231232232232122223212223212323225 +2323132222231122222221223252123221252722222122321725252221121223221121292222722221222722122222722222 +2622222111422122312323222424251226221326321243261362725212322234245322242221225223222252222222121112 +6365573534733534456545555553456765456435565453464884542353434662474114234231545473564147545655233536 +2122228134462322252221322233282772622332212252121322272232421922123222221122213213221333232132183223 +4237515443383444432745732563634433543321346434943334464644332433472349693436883623334263222245953643 +3334333523313435353313343343223532323225556235162636327443343335225523523624343323321333333354553352 +2212222224232222237222223452223224212222352322322221142331242221135222361222125222222721222224252122 +2213563223236622112225333253263333151233322532232222622412324222232223342433322123324313223213142532 +3244633453266234664532434424555536363534363334326546552466663454336556776626555754445361454445744543 +3224224223222222512416229222322222427258423222424222232212412622921132212291633223273212271272243176 +2477949796677497875959275496734625686965256653262256567588448547884958359848745615566456757284666247 +2334535244254324453543455455753366553243333641534534553555354555353545325445652553337456243454443555 +2222322312343123222323223322272113223232212322232222222222132223222322222232222212222212212223222222 +8443342362133224542724224833244744448492412244422623224253383452223641542836327294422424224246442342 +1244134421224421333314221314223224313322341322111211124313214141134141433341224132143244243331256789 +3221223222222222223222222221223221322521122212322222212222222221332223222322123214283322222927223213 +3323244323342213224343333323233123333433233243532223323232323233333432232333331323333232223431137323 +5434222234562452673462542432364151563663745462547334242255813433524747234734152343543832344553483273 +3152234552133322413242336213332142333313343333363443476366375434353458333382636333333243444333266244 +2232226329122214162322422141242421151232512233222452232222142623312314311254225421222221233253242422 +3232282233213132338112312212132212223222223232221126212373153132248211222232234222222213221311513232 +3632334333333335332323333333321333223332444313343342333334334333333333323433331333323323422333332333 +2322212211121222222223222233222323313322222231123322133322343221642232212242223323123222333313912123 +4446571344686493644336443553347453545635636693423652346523335324356326455636564537667634366434352324 diff --git a/src/day-3/part-1.zig b/src/day-3/part-1.zig new file mode 100644 index 0000000..2e0c1f6 --- /dev/null +++ b/src/day-3/part-1.zig @@ -0,0 +1,39 @@ +const std = @import("std"); + +pub fn main() !void { + //var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + //defer gpa.deinit(); + //const alloc = gpa.allocator(); + + const path = "input.txt"; + const fp = try std.fs.cwd().openFile(path, .{.mode = std.fs.File.OpenMode.read_only}); + defer fp.close(); + var reader = fp.reader(); + + var buffer: [256]u8 = undefined; + + var total: u64 = 0; + + while(try reader.readUntilDelimiterOrEof(&buffer, '\n')) |line| { + var ind1: usize = line.len - 2; + + var i: usize = 2; + while(i <= line.len) : (i += 1) { + if(line[line.len - i] - '0' >= line[ind1] - '0'){ + ind1 = line.len - i; + } + } + + i = ind1 + 1; + var ind2: usize = ind1 + 1; + while(i < line.len) : (i += 1) { + if(line[i] - '0' > line[ind2] - '0'){ + ind2 = i; + } + } + + total += ((line[ind1] - '0') * 10) + line[ind2] - '0'; + } + + std.debug.print("{d}\n", .{total}); +} diff --git a/src/day-3/part-2.zig b/src/day-3/part-2.zig new file mode 100644 index 0000000..df78ed1 --- /dev/null +++ b/src/day-3/part-2.zig @@ -0,0 +1,45 @@ +const std = @import("std"); + +//returns index +pub fn largest(line: []const u8, start: usize, end: usize) usize { + var idx: usize = start; + + for(start..end) |i| { + if(line[i] > line[idx]){ + idx = i; + } + } + + return idx; +} + +pub fn main() !void { + //var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + //defer gpa.deinit(); + //const alloc = gpa.allocator(); + + const path = "input.txt"; + const fp = try std.fs.cwd().openFile(path, .{.mode = std.fs.File.OpenMode.read_only}); + defer fp.close(); + var reader = fp.reader(); + + var buffer: [256]u8 = undefined; + + var total: u64 = 0; + + const need = 12; + while(try reader.readUntilDelimiterOrEof(&buffer, '\n')) |line| { + var lastidx: usize = 0; + var n: u64 = 0; + + for(1 .. need + 1) |i| { + lastidx = largest(line, lastidx, line.len - (need - i)); + n += std.math.pow(u64, 10, need - i) * (line[lastidx] - '0'); + lastidx += 1; + } + + total += n; + } + + std.debug.print("{d}\n", .{total}); +} |
