This commit is contained in:
2025-12-15 18:14:52 +01:00
parent ec22c94be0
commit d76ee8b38c
4 changed files with 387 additions and 0 deletions

200
y2025/resources/3_input.txt Normal file
View File

@@ -0,0 +1,200 @@
2343453422641331233623444434443422422234243434644344344333436434324443344243444547343426444313413747
2855855566364334765666447534635566585837457546445758633538786145597524554776646675584566565455656556
5455463424234236523423334345455444634544436464346444233423443324545464444642452442343353644334535444
2124233254222341223234331212414222235244222662443314232452232262232235554242154423622425435654322324
2332248233225212525222222222422224122233225221134111212423421231224222932121353232232432223211532422
4522542214443113224544155153312551232133415534125211224524241324115411325151311354453135113331246789
2241242252322221242223222222132212223241123122222222332211424232112242322221222221222222213322231242
7558353283677636733775864478467854665632468768617383354484675381162763838872387571737687774846684654
3344484433233643346335641434344332343384262314353743523322353211665123643238344431443575325633536323
3147453132344582341523322733213313453222322212633252634358623552534426832257242225622235213224635634
3237235525534242412132322246222232812264423245522122342232122211131513224222325212729244233245131124
4333336434124353433333343333323366534353664383233333523826239336333433413543623643323534478813453535
2766235215236263132162732763741151462251562371176157453722631453144613175242354351673253677254421489
3413253442324513647314443433354345443432553234452534443623342426643234434349356333244333349324812364
2212222243123221262342242212233143231222222222522123133114132321231222333222633122322222232224232231
3232415412132232421512323622232425324222473321336122143421623323221422137322245226231332232225214234
2253424182211233232241541273352121734324726255222514222332219441571224324264222212211912495321532427
7232352323134372249422321225261243243223255231333422225362662321263682332643365223623342135225622435
1555255555344553546445826521266331452544523334523353344154474464345334457434535357553444345423654434
5537524812673574646632245334349593676339361575654433333226337553652447744445329678745522254574556752
4332543748231224333359532233342222323534352641222342434352435333423613344635343432244225557245144152
3212113222216224552454254125123222222524224422325122265262426226232131555132344362165455234225255412
5545773276222653395365823596435838555937337443533621555822767282435283214925323134882243331558775558
7434233344426443414745383444445281433534444224544434364456254234444445433344432134644423344127663443
2613243233332242164312332361332423222362342323232133225322333335263323325222262313122632352223325222
2223432333362215331532333343332235334622312321353413642632322322623225323234634213363333433332222335
4312424322755333343543452253542541226232431525646422322234362124332552251325655213421522442744522423
5897273566379433451223339476376542424217232367225273573257987533594789893665739731781863424833771362
3423262121432212263544264655433244243336453472674232265234546422135445472235524541124313441123232533
2636534453363663634445344564326643344253235574433453654634435923445495656654542795539532232555465393
2254271735834672683332374644393773648253547338465332353324736226624562577324349348432363445445334546
3377446237663363646946545735433942818724376343147741848477529447745384834548384753336567634223764767
3444544614365554343354444424354134434443349443244464434454454455553444654424434433444444372465344744
2233473362334422333733133234243234363636333333333133333342232352343343433433323323233733313333334343
2525427674556342375442823591327563445225172346422543523315235543332133322417435412434362435332333425
3252345314463233542663242265722441426263624263632333362633136367342256322566452446143323344422322425
6345563336362334322534451552334419323323363272333286925462735424664334238734112363522323583534433223
2221222431555226214114227622733212222312224771622623222361223319224322322222262212222124221232312223
5444453434133323373146342345553434532363433344534625533355754433425332523353344435753333444423335448
4562894651264437434643452646227346638154452413661221564553643451164534272373247443573466674224631434
1222712242222222223225222222222232232222222223244911231122223212313212224213312212212222132229223222
2432334332464444733314224232342343333444443432441233244444332433444324334532223333634333323362342231
1331211442311324142232241343324444432441211444431442312321314421121233432441133243222331142221256789
3423143422334244551465344432414221122252212553444321228442344243325244244445424442733334542343412133
4233344264833422423454123186424323623245326143335343271212423431733444333174223133434422432232233336
3748457795547753473644647796774756667765796447574677646786677547497787486775694849859649466477895776
2123332234222133312222328231363332221332221224322211213232232233222332611131226332223222342133325243
2222252244452256123223322251221692332222243924546241253822655228225153864212723223255322424123852425
8422112277227422222265263925523626414155352122811747711329144776232625171534225682395244535322642881
6368656453953669934545339796965735949381454645537897765556377129998839756579714745557429955558748565
3322224425221252131222221224332222247225892222222222532522122222122321377222112224126323822221732222
3335645455344232223343127345643233233273322221452312354493333412332323222264533323343322393224222345
4241413543324233313223234429483222322147227232633444421224442423343254326243221244332315243322324322
5574237447375775621363828563471836176181324458837744833462486566764446487554615821131367112148212469
6534573266233533276565211675443236734572626837145323442495971334372252936422625743235636534751325323
1233424432322212334422342449212243232461232226444233132334532323243426233524514231214432343114312223
4354555443232413265445532666543337533264345374733576543456247234443324526132445323433333646364544562
2534234436317222732222822131932225512215232232236662322343522723232222533334222224222732332722352312
3452343435344422434335333335344344344433253434333463444363334433344432334441423253353333455444245442
3737633682743282872722232722522232221432222723522124252224112242882222228247723172271122552349583212
2771223222232332222322322422262333214313133223143122332222332323121222222422233422331222221442322242
2422211225231221242242132122314222822222222222212272216252421422222122122622293121251331282134322246
2222222221223242212223212122222222222122322221222122222222222122222222222222222123222222223212232121
2222322125225232242242222221422222224123332422212232233122224232122214211232322212232121124422241122
3122223324324232333313332112321332333333132433333233333432323323323422222242222324332332244322223322
1754365457465529653213846457756246255489665345623644352243546864661855453846968245755486351156346559
3335332413222222242324343443422322334332371423443333324313222143334332343333344412311431343333233326
1534433243425444743484333435384414344234734244342333332324445945238334451222354423243241432544524543
2322233223335221423252223322232232353422133133132332334612522352824233231142234423222132433322225323
2233344362433332443264533233433842272631223433423951223432123233433843323334345235337346261238375837
3244222242252342262264232242312122324327242244442132344223423323142228334223114322132232333123222323
4222412222222222222122512621222122122328226222221422222223222262222225322421224122234222211112222244
2132231232112432463312333333133151254422212252422223223323232232342239627232322272373122333333323422
6796447426869544576625778745446655742364774763674665744845574467153343745635846624563663617776626546
1332377852358533652353422333645933534424834853376443445469325234453734733853375454343333763532563453
1522257412442212575237222125272242222231213423426493623212532322195136226714452241451231412225357233
4222533312252211232332331244233223333334513321232432222433322322624122431122722415223332333415322242
2524352221221334242342241433722251221124453721222332242235322453345324224414545241437355521429243433
3242232223622123224335232132123223336122324213322422223222322231222222135222312122133222323222223251
5832462422453335543333333435353352438537434353533374333323352323363833233542533574344446413446431553
6588484555555555513599692555778385555553755555453566564555844645849855544655955543254555566515856557
2241322452438433332252242363252331223225422122265322123314324212222632323223225565123445211233342222
3655447233543637292965466985423322455935425425252554339536672539522467682855634377344536545594534564
2411514322424227212232125545544212332122232221125522514222254292126122452121242412221742212565521122
2363763424225125326235566565624632625365226263334674144662662542624357344246956727554231435225222436
2552442235423354432343243531744444455242535254646232341244443332242431665344432346343642363343245444
3224224338462322441443334422214322132212333344226451232324224222347132423238324324327227132232422552
3333433233333233323433423323333223334333343334422333122333333423333333235233333333333323133232333334
6566273357637664663763666346678374675694635874799635474568677565737877579559546323663653457432875584
5534231432364243372346335363226542237153375222325324371374721243244336624634232777532553448656644323
6343338344333143455372344135233232233336276133335323363237334323863233833543522734323353335362733323
7744556355597685874673673764568755758373766334784734845674963473335796648778365637647366473344758434
2213546516252854516422226532192312212342243252555363425234223343354538657245534168555132242366758244
2223251232232168524236431213322222256225544222123516222223252275725362323381926231332542531764322237
2322232332322233323224332221234322332212332232472223231293433323422223233432422331313211232562213313
2224144174433753323212724187982228146442211422922437222483211443934432233834293224222222237151252124
6564453313487332263646733648222445665357223544243434674574435338583255333344574631567736274725571443
5254222222265223526321512223113323522224542244247226222223222228312214322133233545242422231242222212
2222444354363533827352245422523223223232324384223333425342427334512333348233413328456343423323764433
4424644423232313434422335432333533133223324433314422234324432213343242415262244232432341324571423233
6362545755588453455853768234465888547656656556657575355254435655865355656874647355265754654452555764
4424244132142252122313322233215122323122227112232324622422121144212533225332222213422223322323252235
8324424343462334943935427256229244623324232319324554244223433315235422222819214473923321144634224422
2343334463222343543343333233344343235453335333154642553422323334333333336224243544323334433233223334
5622125462312421515665231253315266217262328722234222313232633234123232722222463146621744653356142224
3233533232223423244643332435552543433222347442231335537143243413431333333333235354255433434852255453
1545211254135316354413322122543161335216134366461314551424411115516665161554621135163264243524342789
2112322232122212131211232222112222222311212122222152222112221221222323393331162152222222222221222232
2423322232233133223123233633323243213113151332211223343132233222226271334222623333232323232213375332
8539945379743134534782852443322259494415551439346468277535684323385394596743573467814532643446334469
3217222222222213221313532231524123113223222723332522222115221422222223222122213252112222212322382213
4769797556895859326665476278466859386486766484833559676436383847888376379573795764527895778756555866
2312222222212242221242112221232331222211322242422122214222221412221222122314241223211224212262225222
4393377633346336436336334623463665635543777582453626246133337429335337543541337636746633937915438473
4464472544443433743453334433446635561452377546424463334433334864274441442735536455333532734624257634
2322222531323222323324313322241123235232222321141242132122323322122242112221243232242124233232332342
2223332222245242372225215322232231315136222332132232222224241322323123422232232323332222234344223312
2746333543453325833485455238452332448735157333631582785254652745526425755425425584678834275396252573
4444444435434433335333243431566434444233333234642633434443433432526334132354433324433344233434633433
4655565545553655445656325555555555554645456453444555644545366446554555654555547652566665554357656545
1223234222321331393212332325241221294321222412224322233222423392222324112834124222222312362223442272
3326225243484722436725227463266722172243634373333722723564333133754237523133335357554612221323225312
2222222216325112222412225222322422232124123122272227214242222522225221342122222222223262222212622132
5343335445543544543341323435445235433323314434833454294433343552533354253525643135343364551332814454
4554753424724266354564344736755587267565958786274747366475882726376678677483339735785733572846585434
5145132435463444436463434634445434343644365444355346863479445333876623535333334343746636294634343644
4242333434243464553425434444123444343533344482332346655443434433445422435324564422334541422443444323
4424434344324558542454443344354554425125734545344234322345553454533964552654345443323333443423433323
4346445384342232435436465246434331474344436624614844745443434335444333464443947943344444444844446143
4775467655388846666366656666466346456656385866656648563566555575574655744645434755535457555675766655
3627232324233222344224224222421545432324214432112334434442224234623322222233436141331311346423322242
7735429124135653424268213146643241455965577261243733222724444414362143243535712322332252364572615223
8584326558526657567134262566656416123532665357444326284645152161461465336562563376235222624927725433
5165293733124224422322555234639215522553988527543525454755725242323444954354353242241322195158554372
3392662245353337737322535332334542636584648636365547343373155533263446314676652364266134323234436243
2127522289122222222225222242785242293222241252321327352226228275224282226252682121524547212222492232
4476675867785865646473557576266868886665464746657496582746996445346577144747536544494348346587584476
4342376334563624433458434272133353545474233543342443374576532334224362542433333332762224233333333533
5252252324212232212125352234224722224222324254211222381222122522422222411144321255222422141423212222
1313346552363223221322122211354362212433622422532125326215252523555212323322611216482222234124212212
2212323222122123221234222222322214322442222262211532124223222222332211123212132142243122422422123122
3223518342212862222533322722532222211243652211431814512525222442412411442342132123222224242215222142
2333223213223223261242433331622335233323222221232212321122413233331532224272236212212213222223246332
3222143233135334342432232362341332324243724522532221234424722132241423331234533334323332234443342243
4355343342354334425433324534513533433274344143313344355444544533443343454355432433314643444446444153
3923223252352517354222432112253243322445394345144223443323253273453342462352333233438331331412332235
3233125324616753252422337231933421267233223842322132222211623425223233232373613321563242222632433233
2543224823243445343433422443222424444331242624221222451422423333121628522322722328226122822223441334
2243132222124232222211224322313321243262212323512322122213523121222422322432232222133212161122222224
3429376727259635133541228222462577721462169685519922652473662652725736325445147425245244333423645645
5211535234437522233534433415224552355734323354313214556375315735632331254632712585433337181242383224
2333333333232342444123142434233221224623533253232323833422312333435334333342242234323213333334341323
5743223626322733473433463247236634664357335333436322515263132533722337253343513337242333324332342361
1934446965833831875835524541555358437946537488651524522447255569328347227465455693455469844534265459
2224323152322226322113212322212321234222221222122251222223221731311222222322522221322222222211222222
3324543225244234222333323343524444223341543222242448344224123423456432522322214453432222232263342433
3322333222333343334232331323311232232313323233343231322312432434322323233321332333222132335233231332
2321223362323212325225224222333342133212431142324432222235222222223223243262222222223142215232221223
3333336223432333433232224333433433543333133256432443333225433443122334323433233144344233321343334333
5276752595424547755633443385664543424854147528464348252547552254439224511942355486737692934729755533
3545445434524848473834544564533533544443748536454544472426773667244553544255444754454377447544474548
7754785884583737439724256838747637644436874474436148938376547746475473678457473536663447755565766346
3344423343434344123142445244322444434354215433363733444483142123534334332945442432335344313333344423
2232315225222244442225342263333623221127453252252332225344126232523452752162235475255272426242223484
5124342352712322136213673211223622242224341232232222642212547223247252268344322383522221423225383324
2112152511222522212242212222431232222232122222222242123222222212323212214212213212225222274332222212
2358536133134561546554344579333442145642357253937248432223352422323212255392266232284429436256539652
5534354234222243343123124324332233412244422227344434223313424322224222323124531222782232414322322232
2122452322163132222223263222223352215123223215421223431223234223323322422222322431224121323213222222
5988687788785775547857727647837554867656767415977688375476377753756566678767864687583587775463775427
3329324531334134832931653522432723733323545413243834431832512414335252353453413242114583232532432154
2532222421724322224323244422431197324612367244121222254243323416222382122422235444224632422322133421
3332223233411334322132234338343332333332132344332433332132231433232212331321323323233333532143333324
6682435538385848746983558647687676448557393346376775557823838782355455764554689848966445283878153934
4355654955552546643536545434754575435615478554185226643654254674225535512563653326257564224563335456
3333333411332344233233233335222222432223321523222744323234221532214323346232134522333374324225343124
3425222322234222132132222322213211345252232232322222231323212213223221326232232933132222222313282114
2222223222233222233241232322133222222233224222333331323223623352232212322313234332132223213123222223
2233233123831331526333243253333333253333281332253234333332343234323341333333713323333292233334313323
4556343454644445454444685754445334555686553552255654445756545333245554544546554452455546541335353533
4437142437348769764346723736355554789755533646855344785359265549925278742748321326453347655425464487
6334643334655433654235345144543743574434235243444546333356443335433545344431354234733635336235348343
2122212322242322322221424522242314322422242222212422212222212221221222222444212632242113242412422142
3247133333323422232322322313213349332433323341332345443624232333232332223313333431644333314364294333
3823222223322232322333327332233322233313243212242223233222232233323323162223123633232123223222322333
4222372222193245612422435623322432112225534326312222221362223222343324324262422421623336333193332332
2223232222222223232243231231222212132332222122232221232322232222222212222223332323222222212212231121
4243242323533263324524532233434224344453413433433244344334423333324335155324422522223332433344628423
3333313323631323333433222222223324132343333322343233322333242133433352513443325332321122223263223333
2222223252242422115233222353244223234223342225222343531213321412122124224224433232433126422453142333
2433122342342112233223232213242333233324233323323233342223332222332233322233223363333333222122333213
4644632653554444545534364373444367554344444735444733525537455733494446427853434315444534343436475234
1428224462633222477623242844261625122336225127353242424245822452326632542223434332672272423135615343
5352535366355445324444321365583732643533336333225333533833636365448454474442343533264323471324514573
3344422424434442232335334316322843323343126434442642322346443441343534442426436268333353324331133346
2228222222221211222222212222222123122222123232312323126222222122312322222731242222222332212212223322
5542633458433333458444866435543665114232423741474346622564352596325571548628782448539633233555134463
1222221124342222532224522423451344642232241522323221222122232222521422211262912553221222222812221642
5222226213136333254226233333236642323223525242212226532243132253233223511133262133213652323223123221
3231436336286233253431145233333352232333241321323353332243534632332333233223337312631632364632233332

27
y2025/src/bin/d3.rs Normal file
View File

@@ -0,0 +1,27 @@
use std::{fs, time::Instant};
use utils::time::get_elapsed_string;
use y2025::days::d3;
fn main() {
let now = Instant::now();
println!("Part 1:");
part1();
println!("Ran in {}", get_elapsed_string(now.elapsed()));
let now = Instant::now();
println!("Part 2:");
part2();
println!("Ran in {}", get_elapsed_string(now.elapsed()));
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/3_input.txt")).unwrap();
println!("{}", d3::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/3_input.txt")).unwrap();
println!("{}", d3::process_part2(&content));
}

158
y2025/src/days/d3.rs Normal file
View File

@@ -0,0 +1,158 @@
pub fn process_part1(input: &str) -> u32 {
input
.lines()
.map(|line| {
let line_len = line.len();
let nums = line.chars().map(|char| char.to_digit(10).unwrap());
let mut highest = (0, 0);
for (idx, num) in nums.enumerate() {
if num > highest.0 && idx + 1 != line_len {
highest.0 = num;
highest.1 = 0;
} else if num > highest.1 {
highest.1 = num;
}
}
highest.0 * 10 + highest.1
})
.sum()
}
pub fn process_part2(input: &str) -> u64 {
input
.lines()
.map(|line| {
let line_len = line.len();
let nums = line.chars().map(|char| char.to_digit(10).unwrap() as u64);
let mut highest = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
for (idx, num) in nums.enumerate() {
if num > highest.0 && idx + 1 < line_len - 10 {
highest.0 = num;
highest.1 = 0;
highest.2 = 0;
highest.3 = 0;
highest.4 = 0;
highest.5 = 0;
highest.6 = 0;
highest.7 = 0;
highest.8 = 0;
highest.9 = 0;
highest.10 = 0;
highest.11 = 0;
} else if num > highest.1 && idx + 1 < line_len - 9 {
highest.1 = num;
highest.2 = 0;
highest.3 = 0;
highest.4 = 0;
highest.5 = 0;
highest.6 = 0;
highest.7 = 0;
highest.8 = 0;
highest.9 = 0;
highest.10 = 0;
highest.11 = 0;
} else if num > highest.2 && idx + 1 < line_len - 8 {
highest.2 = num;
highest.3 = 0;
highest.4 = 0;
highest.5 = 0;
highest.6 = 0;
highest.7 = 0;
highest.8 = 0;
highest.9 = 0;
highest.10 = 0;
highest.11 = 0;
} else if num > highest.3 && idx + 1 < line_len - 7 {
highest.3 = num;
highest.4 = 0;
highest.5 = 0;
highest.6 = 0;
highest.7 = 0;
highest.8 = 0;
highest.9 = 0;
highest.10 = 0;
highest.11 = 0;
} else if num > highest.4 && idx + 1 < line_len - 6 {
highest.4 = num;
highest.5 = 0;
highest.6 = 0;
highest.7 = 0;
highest.8 = 0;
highest.9 = 0;
highest.10 = 0;
highest.11 = 0;
} else if num > highest.5 && idx + 1 < line_len - 5 {
highest.5 = num;
highest.6 = 0;
highest.7 = 0;
highest.8 = 0;
highest.9 = 0;
highest.10 = 0;
highest.11 = 0;
} else if num > highest.6 && idx + 1 < line_len - 4 {
highest.6 = num;
highest.7 = 0;
highest.8 = 0;
highest.9 = 0;
highest.10 = 0;
highest.11 = 0;
} else if num > highest.7 && idx + 1 < line_len - 3 {
highest.7 = num;
highest.8 = 0;
highest.9 = 0;
highest.10 = 0;
highest.11 = 0;
} else if num > highest.8 && idx + 1 < line_len - 2 {
highest.8 = num;
highest.9 = 0;
highest.10 = 0;
highest.11 = 0;
} else if num > highest.9 && idx + 1 < line_len - 1 {
highest.9 = num;
highest.10 = 0;
highest.11 = 0;
} else if num > highest.10 && idx + 1 < line_len {
highest.10 = num;
highest.11 = 0;
} else if num > highest.11 {
highest.11 = num;
}
}
let res = highest.0 * 100000000000
+ highest.1 * 10000000000
+ highest.2 * 1000000000
+ highest.3 * 100000000
+ highest.4 * 10000000
+ highest.5 * 1000000
+ highest.6 * 100000
+ highest.7 * 10000
+ highest.8 * 1000
+ highest.9 * 100
+ highest.10 * 10
+ highest.11;
res
})
.sum()
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT: &str = "987654321111111
811111111111119
234234234234278
818181911112111";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result, 357);
}
#[test]
fn part2() {
let result = process_part2(INPUT);
assert_eq!(result, 3121910778619);
}
}

View File

@@ -1,3 +1,5 @@
pub mod d1;
pub mod d2;
pub mod d3;