Compare commits

...

15 Commits

27 changed files with 1946 additions and 197 deletions

83
.gitignore vendored
View File

@ -58,6 +58,31 @@ elm-stuff
# elm-repl generated files # elm-repl generated files
repl-temp-* repl-temp-*
# ---> Haskell
dist
dist-*
cabal-dev
*.o
*.hi
*.hie
*.chi
*.chs.h
*.dyn_o
*.dyn_hi
.hpc
.hsenv
.cabal-sandbox/
cabal.sandbox.config
*.prof
*.aux
*.hp
*.eventlog
.stack-work/
cabal.project.local
cabal.project.local~
.HTF/
.ghc.environment.*
# ---> MATLAB # ---> MATLAB
# Windows default autosave extension # Windows default autosave extension
*.asv *.asv
@ -253,6 +278,64 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder. # option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/ #.idea/
# ---> Ruby
*.gem
*.rbc
/.config
/coverage/
/InstalledFiles
/pkg/
/spec/reports/
/spec/examples.txt
/test/tmp/
/test/version_tmp/
/tmp/
# Used by dotenv library to load environment variables.
# .env
# Ignore Byebug command history file.
.byebug_history
## Specific to RubyMotion:
.dat*
.repl_history
build/
*.bridgesupport
build-iPhoneOS/
build-iPhoneSimulator/
## Specific to RubyMotion (use of CocoaPods):
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# vendor/Pods/
## Documentation cache and generated files:
/.yardoc/
/_yardoc/
/doc/
/rdoc/
## Environment normalization:
/.bundle/
/vendor/bundle
/lib/bundler/man/
# for a library or gem, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# Gemfile.lock
# .ruby-version
# .ruby-gemset
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
.rvmrc
# Used by RuboCop. Remote config files pulled in from inherit_from directive.
# .rubocop-https?--*
# ---> Rust # ---> Rust
# Generated by Cargo # Generated by Cargo
# will have compiled files and executables # will have compiled files and executables

56
bob/day03/day03-p1.py Normal file
View File

@ -0,0 +1,56 @@
import re
class ExitFors(Exception):
pass
def get_battery(bank, max_jolt=9):
for max in range(max_jolt,0,-1):
for candidate in range(0, len(bank)):
if int(bank[candidate]) == max:
return candidate
def get_joltage(bank):
joltage = [" "] * len(bank)
# Get first battery
jolt_1 = get_battery(bank)
# Second battery is after the first, unless it was the last battery
if jolt_1 == len(bank) -1:
# Get battery from bank ...upto/before jolt_1
jolt_2 = get_battery(bank[:jolt_1])
else:
# Get battery from bank ...after jolt_1
jolt_2 = get_battery(bank[jolt_1+1:]) + jolt_1 + 1
joltage[jolt_1] = bank[jolt_1]
joltage[jolt_2] = bank[jolt_2]
joltage_str = "".join(joltage)
joltage_str = re.sub(" ", "", joltage_str)
return int(joltage_str)
def read_input(filename):
banks = []
for bank in open(filename).read().splitlines():
banks.append(bank)
return banks
# filename = "day03/example_input" # 357
filename = "day03/input" # 17092
banks = read_input(filename)
total_joltage = 0
for bank in banks:
total_joltage += get_joltage(bank)
print(f"Total joltage: {total_joltage}")

57
bob/day03/day03-p2.py Normal file
View File

@ -0,0 +1,57 @@
import re
def set_battery(bank, joltage, start_pos, end_pos, batteries=2):
if batteries == 0:
return 0
# Get high-low battery, starting from start_pos till end
for level in range(9,0,-1):
for pos in range(start_pos, end_pos+1):
if joltage[pos] != " ":
# Skip to next if this battery has been set
continue
if bank[pos] == str(level):
joltage[pos] = bank[pos]
batteries -= 1
batteries = set_battery(bank, joltage, pos+1, end_pos, batteries)
if batteries == 0:
return 0
# Nothing changed
return batteries
def get_joltage(bank):
joltage = [" "] * len(bank)
set_battery(bank, joltage, 0, len(bank)-1, 12)
joltage_str = "".join(joltage)
joltage_str = re.sub(" ", "", joltage_str)
return int(joltage_str)
def read_input(filename):
banks = []
for bank in open(filename).read().splitlines():
banks.append(bank)
return banks
# filename = "day03/my_example_input"
# filename = "day03/example_input" # 3121910778619
filename = "day03/input" # 170147128753455
banks = read_input(filename)
total_joltage = 0
for bank in banks:
total_joltage += get_joltage(bank)
print(f"Total joltage: {total_joltage}")

4
bob/day03/example_input Normal file
View File

@ -0,0 +1,4 @@
987654321111111
811111111111119
234234234234278
818181911112111

200
bob/day03/input Normal file
View File

@ -0,0 +1,200 @@
2235324222232244322422312234251333343425243363443152244111122632336242225745433452452451332445546443
4342633549426242625533823432244459548433412443246235533216334436553544934221624474453562462242374424
8434422643334243334243543423324744383442433444345133334323443723387546342444334386334543315426294343
3314333333333253227333289433334173324336435282333332374344333346362333436223333531247332233332431333
2432233222232224244344214455331424832252285224272831524326258455142222732648222482237235275222221622
6456555534646565564173459654354446546674345456432576443336544564465623793536365563494844343586266956
4922331489448743346893584377735442834632443434373231124434247962234578473993747531534353225262874382
4329634636558644535534455549345256353469443795539452657625226416756735576575463654843527584644953254
2454396282342313233436423353433434546123342334253853234273545734632444263222242142542533335242531345
4635522634347741234563672633543582877478744697226363535745728883684345552215423665654453566356374355
2224223422282212222122522222221222223222224422214224332223272212322422211242222251213213533222418262
3333323433222542122533332343333416333236333137213354323639622333222322323353633143223233386462553523
4464345474367222662273337653635454976376733275452394774336256334698437588364442363336256726342366843
1222331523332222323221222212323322212432332123113224332112226241322122233222221222121233222323322226
1144235573732262335565652436461426436275664241144242414324425444422128642454423642624133252328534342
1524344342292446366422332163232524143645435264413335635425264332564221331257424467433633431536313333
6522282332222324724233223129622584622214234561222231422239243441433122222452122432232132223952622232
4155352555244325535343342355654243343155236334354554243485257534253338436555484543535584532355453534
6468655452675256353555445144743665645455543555644546754456447542457465444555555154564425555841855936
5222222221622121123264422214222252212213512212822212772221226222262272222622222742417215282243632241
5434223163254553454522553225547245512224333544425332549152425254451236456645423241323554544456344256
5424526293254361243635554415382323322225524343233622554332533455434433517232355631244233433432432528
9321283728428452622327222344422172212235228213222223255626526312275215522352294117275122222222822241
2298345455532222354144482748685223534841432853256544231754233422253376575254556214433252512786148479
2122424412272742122222213122282243125211272226462222411231221252623221242221214261225722411452243222
5427434212244142253243242124231221243224222222422324222143223242124123112124433231212242423264262123
4454545664435434354543554374342177456567473643244355455344466354536785443248645467344424554457666475
2322532242222322244221422243112132232323223142431222332422232122212343452232321434225124243222222322
2622164222137423255122752492222422661893325225822224443223222823282223225272452222282422222244332225
6354556555622355255524555375554567565654555543444564437575555375553452544564535445345525555533475554
3221342522312282432224432443242223132122241223223121323343133414421323132214322222443262733312322232
3224632342835254223232221243242332233232314323433156163393433112242256232276356423322232221423342323
3222332512121224222222223221212322222122221222222322223222323122329322252213422223253122222253114232
4222234233323423433333153233232336222453343547223172433222325534134432434213234222313144534443332335
3221222123132222112152221122312224433223311231222122131322222222223322222224222222231213321222212221
7326246135345245521424815232325722372711252462712232438342291624862323243242265182332123442233739437
2433733355513566223342253543213465528552533226334364352333443355213433253157534664352433564322344123
7756675354666543363676593566536546956757565561673943631664446365744655535285357653653525674462274967
4323333334233333534333323334343333342233333433333243333432333334343323334332332336344335433522432433
3333332543434532342252354343243423322441332541442534643333423124326134423661635334224124233433423174
5235323335232417222541642263122622223822242263255324463356321141524121515424427193745222453222141334
5886868774555746344643885473376676884344675734948355455843433537685787785745645786674574548985575575
3547866352236644664573227563164454434563474557214356536355366554436444344465743441774145553622545244
2454542445455454335434451454454434434474452533324232524334341443363345334445444333733546444434534343
1232131114123623332241132222224225224222232263211324231213315372222524322142233412121735172623122225
9267262423528474362245832533348735374544892892233421337236372142334223347313276322562331634332122245
2223175344331222122123222233314252237251132723333321213232122532223222624333233312323452332222123222
2313333333355313653336333333333332633333353253333336633333433234533823365342433553333233314344453153
5323433341124332233332513233244283823243445365333343562232342421323322443533255323422433243333441213
4525333422333222464324322731134244133112262362226244312425212143324224123334221393224333221248233213
7543744772447787783677676778677928435645714765755486767764556624553564714656687537567755747764638674
2363513321125441315322124323334423212227323613125424432242424252344234422122322232272123122222224142
2433513143732523833433251632623433453233348414253337543422233332389863834322243443533343343334333642
3323232223343324263335332467366733331323232373322232764343323323327433276326263333243343332331333124
2221322221232233122232123241242222342222252222435242242235122222222212221234126622222213214112322332
5536354554532533744275244143353333343253443444523343432646224933253565432536554363555645524534444536
2422212112242637521222122322122232273272222221122322222222221212322232222231222223223211211223122222
2222422322332345343223324223424232343432223234431232332333641334432433232423442342433351223342423222
2247532227235434222242212232415333444344424544522422142523224424524314424432343332443424412342122424
4495423343134452554163238453543152226335335553251337422195521742257135235734235935152333543434533974
2222222221232222233321522231313213222122222232143212232323222232323123122121223232323321221221212233
2433131322322136132325123312222123535312232322121252233214355225323225325567115133332223222232532513
6648343426636674545466234347476676446534463263723454424843573354375563255343674256458722563524649566
2281323233549441673264334423352265724433232443462436234482228223382337144646537332332774633432222535
4221422232832221122222222222212211222231422122232221122442432122232122222235221232212112322212224312
6122122432223246224421243724227262244522225225527332232343222122322612123224241252242213442821732312
4542535343233343543352252333733653243422323323336733274455414363434474232432334333338333433373335953
2212232228124222242222311222432228222182442221131222222232512222212222232322122321213722142131722222
5485269856369364744625587696844859753855866824665868852663763638646166844169858473676295672166634584
5555564454655565455764564539653655535468665556646655435564556546755555755465666659656563937856465517
4522122123153322322322233226213212322324222247327212124125222822221222222272221222222222217412162221
1222221112211322132212222223221222422322312232222222223223123123222222222121222212223222323223222222
2233242121223121432524443142133422323232133215212342342933211323424132124231252224322233342432211244
5333333131332333333242245322334414354233122132221234333341322334223235443234232222413334133345433243
2132221453216322222152624232256227524322224355353322223432322132175224932664217225425632223222242243
3232213335324743333353335343254345135373334452213325324554333333323222355336332313233125432553353362
1232422222223222421122212123222232332212222312213122323222232221323222222322122433122432221221322223
3234334335233363333132333333233324333323335332314423222223341334328343214371232343323333334531343323
2322222222122322621321121242231122222122212122222222222211223222624122221222122122312122212135223322
4854723266855228321661642462484112234275424515255353443814315282216236251423522237547317242231288321
3366737366573633437447337543455753734345833464369237273644354443494443464735434534664746433343544446
3622422232313342432434333437534132262444112312231222233523242234233223432363532141723222432262322342
2238644233222253453521172222222212222222845226442223225122842535321151224622222222212526152522231633
3434227323442221482272722224864332533622244122411727544624334414122755624122336414672452761364564231
3235336354522334325545447733533362368545363643344435355623436335642634553423375233235533525335535355
2122322231232321222224231322522222272232262232222275325166252242222332262224261322225122612212212225
6431766427244447244444482435434325543313463449245454432874552543553444433235137433577322453253343225
4233312412221224424421232221332223422632222132423311514222212322213322222513613432423222433233134321
4333236242442222161243225636324232222443221221424221412222262224232214222342314224222224422324222642
9425731462535333637343153525232843823112558577389452666143422343432323342223261362531324364422224464
4443545335253335222422324353392453542133343323334344223157436233424653434241334234342434325553633142
2112222221224332242222231223232222222231222324212432222313221141222224242222222222332222122122222232
4424448253346263442196232222338536343325363235232557221334531732464492533223332333336223239326142324
8273382745437262112247321123335424321325418812532342233762371571223344338246259642223244332577137353
3643568577345257496756756647525657264356953642665544665536243455576758556265855656455638556557447456
1146336123332555645154645654113124462456216222244452524344544156456362131466166412265552465645212789
4423323253336333325332322323313332445332433333313335333423333632243333433633323333333323333333443134
2232134332422232423542222143312222122222222353445552242222223223525215531343432223341441221123512221
3388563352665326335685838248265472864333358125317224448577465733132743353843316835665356176322388136
4343126222424222332332142623221443421524232214344222122127242453422215443442122223433432134242511245
4232232741294227325232144222245224222453331332253552442322534342142233236432341432352242322722222232
2333333433334213433532343333633323752224232523233623343133342333361353222763352353427443223233325222
7622742384556724442694331499682333348332669372723424641787543253287429353635123812942325494425839212
3443431633463243334354333433323321334234733344333333343445321333323243253224224443443383423231237361
3322233123332423333224433325432322723344542432332223313222253262223323122342332323242214533355224211
5536245414643455463451243331555353532554453245443432455345394352454353455595543534364352633534455334
1337383323677353333328543446384362752123322237357487973446233239316472321236634427322223357512739785
4245442543154463555532446444545444324444338453344555556634442844574444624544544475554344344575445445
5227622228234266632265122722221242224652652322872437722222828145374243141871277224277276227622772122
2445943238324523263556566333143491837242357241383752458436144244234431645366335332333322529874941472
6542365637356542343523933333632585824545416284422325632355835215753387354465654353684647442635352646
3567535555645454555555455565546675844544446535558433555455644556265546564553457545344646565544653555
2332222222313444212222122222212313222213715132331222322433255332233222533222232352182231223442332122
6242124233233222232131237332323326323323312334224832632332214323223232333322224231231331223333332132
4473222193444229636394274424547559743225364543465343657754664282675734446284295222251874532536732413
1622212326441562522272294367261612532425124251672424643425128334344652342222955798276224743651883432
1374362333744223664454634866483344447343432633576333346446333146464528664536334372264254653227654645
1353333335532221323213332323433323323532424113212262313223312221223363433334324433224624323332232133
2252123372322223322232112223432317232122325223212233423233225222333242343433335232333211321224433242
5233342233222226246652432233246332633215515611348646321252524221323552733213121126332465263322222444
3434442332153513353355444524532134344445352555244132443542243443242434345453544334663223344433436155
4624444433424434337447343443445444434442444432435454442224344542334482442514353444442242446244225643
5622337382723222412242238223933626255262515662526534472532552294842282213225525422411232342122912162
2792772122185564465655562269264545557358525657762127234667785274447842613355354527646138745738359454
3246465343246123476722432534224243441353352634423334432444442644223453641633344463456335434444343354
4443233423224543333233333434544442343463233462444374241224433224326221242324321444242473422344434342
5423137443343444411335233742733833373344544374622435133453353333333342336332411343335255434343543111
4563632453226354453425553264325352346626354553264455545453284274744245255444525343435453763425432446
2233245222335422343322212442152332323322953331233312344232321423332322111221212232122431333222262242
5562945766545795582764287247375738646786596434467544855546632566873675287544754451579464523496455865
5224262222123223132213192123212217262222311221224211232232131222223222222232212252423222612221321122
5144422522153311244522222222221324522224522332252523435274252122758244222245222421252322233325162335
1424212487752147436667259652374126573126217453457523224213227566322242222373234422626252157711724692
2453423224552435423112223453332242243525221242324422221522412322426233472333213824242132233242314524
4223433321344422321424342224524212223325242423243243124233242422432222225225143512232225332342243322
3344144322124124441111231222211341313141112132234144341421443243111424334124413112412432113341156789
3423733214438543343234153433482322333217252333324224435444324423332244233433242333134333241222222223
4253243123253153326232822254244222331452632338222222122442222123219543224333832235111133331542232322
2222323221342322152225421332342625222222524243223435232722253225352322532322527172221245221452222222
2222238322211222122232332224411243222621522221112221132312522512212223422223222122222222312242422312
2254161436222322122222425521212262272251452423261221614322211373644122542524212551242442525222724161
2252224352242364313325242232222242422131412146343242341132533342212224424221341442442314234232242312
2539422252222352725272376321463262533245722224452315223313347473135234143342224222543343242533233436
4266311282672157315161786415787446166768175727684645385258652611658825512185533435733352237752211459
3382422412323362332533332233333433323433233233223322324252133453314431334332436132323322222241252323
2212422521212222111222142153112622212222223254222132222222242212122222252222325222122223122222232242
2221232364223124333225322322233322222322342213422322213212322333322434223512112322243231225323522434
3732352549634766264297143323142389237291252259781845622492659412246463147653449541262628265764234623
6554245554545453445445455954573458554345511344555443555444465255312455545555535544444434433333355394
3513233822424124131312922122432362422443333522324257432153531243423274223233431222252332452542312472
2535435265127353622262465444756254353338357546326631366433264475453353342474344864652365645463535534
2222211212112232322322223222123423232122121122341322227231222222211221242122312122223221221322222222
6555553573344343355444645555455246555545426635555364435465693655333542555455353563645664563455555538
3336723439433762342243436534344473653364441424424224434443333444453443346344444339414354343544443444
1322242323234322122215112223224222122323221221211431321222114221332452422224213212321232332112225243
2558256544524445335535543454343432434455433564534453452553445552335535335143243353454464444355575545
3356652564327455364353263324336344272412622553446354225557452323244233232525563625665455224224232335
6273333233322222322763433233239621452263335132233252322332233323345223333255132222533463245242332333
3321314222334222233333433322333333233232332343222333332311433432322322322333323233323313332223232443
4321323324142522521243122328313152318236133123252263252324337143532263822723332233222431323338235212
2421143323742373422474351343344414644632221352224112446231242422447322222233313325522224432434453324
2222226223221222231232223322322225131111322332243232322322325152323322332134122432522514142223223213
3336311124323433333333633441322122333232382326762333343136343121429332313233645333424333322263233332
4122223425131211313532221211432344251543123544533321522354422524542152223414144352234434322344226789
3753374431324644254253363333368232333322333343353264622233324517434354224213313363352531333252231343
5447424435544446345633387344444344454444749634754443444559446358453336844244864383444444584354432668
6322235363222463221216574322226373252452613323151424813243563523222137232235224652255522335355342226
2233252525316222242232222522223222722232432211222232333224322223653532322232612123112355222228123322
2226243423352324641332242443434224234422224423214247212412343444215334233423234134282212333322414624
5453265556564498465453555553654565445515554454655545653545355539654555555956555554225454354444555454
4433253234212342232434426224442336432533224442122341228444214222413415232372231232264333333424432334
2323133232333221212222334323221234512344223323444332123332233272323332133243332213212333223321532263
9349519328233523239438423843613896993215448258317133676388457727546377598132829434333513373533772423
4666645656676966776775567597577964575666766658456577767676736646653665553545675763566785696465684676
3333744343334355543298887212444294634472533533392532744343439433462444452344633153433463464664424367
7651211116242563411746522426715414643134265413742514344277775633277527652747351435432146663611323589
8337354444445333444444433345434424433433543342354754435434335434253224533422163434333327343344334653
3322553321233233345533113137333335332353333354234545134333334253743542539333233852332332533334363333
4322331141263364332322422832413334322422412122223222224412442143115226221233242421315528425623232331
6345341544334342374172244444544452324334644436442245564533244344464446455233545434464442142444645443
6564593454533545336695968366692269894591267363955467455458344474374622652552676273977443855874883692
2222212222211222222112212212422122222121212122311222421222112212133222221122322212212422212221221212
3233152631337353223322342261437613334633132322333133221433244346324323325334333232463334233262722343
6626333373332133233334562512331344335364331251333233424323243633373635334324255223243443334324333333
2333841322332225352522123742223272323613232333542322222113332233222323232313722233339225221234332223
4557533355362533443313555257414234557533343224255435533445325432352644233634333734735138443433548225
2223322332213632234312322324522755623325212234222213343222212223321313222232332223142222232222163132
2122222322251222312122232222232222723222222321252323242233222342222122212217212222332222211212342233
2615245472552234243474572652243722753243233635223225342223222721642135221132214425222474252523222335
4345443532441442344443544545333433426444243434733243432734345445254424333736463354633542422444444323
2322224232123433233333242325433133133322743463233433243232173533322434313433333342343722333244323334
4422145234442334242455145125543424551223943225232242494422254314553645442334426343252214413943254425
4465532384353243537252398442534145213673443322242656552543935464556315467556543186554424322356523243
1222232233374372323232323323242343362123722422312632223332213312322247343423223323322241341242121313
2211135222282222212222221222222211222642422122222214142122222432432212222211352222122622441222525121
4144272233134434423296444643224431442442323443441442113224242324514374444664743713233133443322322233
3435364346335235433434536431464642533325336432334433324343343348345334335513343353573432462435433445
1322332232123333231122235282322332132233243232231243253522221182232623322312232223332213122212222333
1332242223122322223432422223223222231321422232323322315323254332421213323312211322342222121233222222
2122222222222321221222211222242314232222112262321222232226222422222212222222222222222221222242222212

View File

@ -0,0 +1,4 @@
811111111111119
234234234234278
818181911112111
987654321111111

File diff suppressed because one or more lines are too long

View File

@ -12,4 +12,10 @@ hyperfine --warmup 5 --export-json ../bram/benchmarks/data/bob-d02-p1.json \
hyperfine --warmup 5 --export-json ../bram/benchmarks/data/bob-d02-p2.json \ hyperfine --warmup 5 --export-json ../bram/benchmarks/data/bob-d02-p2.json \
--runs 100 "python day02/day02-p2.py" --runs 100 "python day02/day02-p2.py"
# Benchmark day 3
hyperfine --warmup 5 --export-json ../bram/benchmarks/data/bob-d03-p1.json \
--runs 100 "python day03/day03-p1.py"
hyperfine --warmup 5 --export-json ../bram/benchmarks/data/bob-d03-p2.json \
--runs 100 "python day03/day03-p2.py"
cd ../bram/benchmarks cd ../bram/benchmarks

View File

@ -10,6 +10,10 @@ hyperfine --warmup 5 --export-json ../benchmarks/data/bram-d01-100.json \
# Benchmark day 2 # Benchmark day 2
hyperfine --warmup 5 --export-json ../benchmarks/data/bram-d02.json \ hyperfine --warmup 5 --export-json ../benchmarks/data/bram-d02.json \
--runs 100 "target/release/aoc2025 2" --runs 100 "for run in {1..100}; do target/release/aoc2025 2; done"
# Benchmark day 3
hyperfine --warmup 5 --export-json ../benchmarks/data/bram-d03.json \
--runs 100 "for run in {1..100}; do target/release/aoc2025 3; done"
cd ../benchmarks cd ../benchmarks

View File

@ -20,4 +20,14 @@ hyperfine --warmup 5 \
# --runs 100 "python 2-2.py" # --runs 100 "python 2-2.py"
cd ../ cd ../
# Benchmark day 3
cd 3/
hyperfine --warmup 5 \
--export-json ../../bram/benchmarks/data/brechtje-d03-p1.json \
--runs 100 "python 3-1.py"
# hyperfine --warmup 5 \
# --export-json ../../bram/benchmarks/data/brechtje-d03-p2.json \
# --runs 100 "python 3-2.py"
cd ../
cd ../bram/benchmarks cd ../bram/benchmarks

View File

@ -35,6 +35,24 @@
], ],
"runs": 1 "runs": 1
}, },
{
"name": "bob-d03-p1.json",
"author": "Bob",
"lang": "Python",
"puzzles": [
"3-1"
],
"runs": 1
},
{
"name": "bob-d03-p2.json",
"author": "Bob",
"lang": "Python",
"puzzles": [
"3-2"
],
"runs": 1
},
{ {
"name": "bram-d01-100.json", "name": "bram-d01-100.json",
"author": "Bram", "author": "Bram",
@ -53,7 +71,17 @@
"2-1", "2-1",
"2-2" "2-2"
], ],
"runs": 1 "runs": 100
},
{
"name": "bram-d03.json",
"author": "Bram",
"lang": "Rust",
"puzzles": [
"3-1",
"3-2"
],
"runs": 100
}, },
{ {
"name": "brechtje-d01-p1.json", "name": "brechtje-d01-p1.json",
@ -82,6 +110,15 @@
], ],
"runs": 1 "runs": 1
}, },
{
"name": "brechtje-d03-p1.json",
"author": "Brechtje",
"lang": "Python",
"puzzles": [
"3-1"
],
"runs": 1
},
{ {
"name": "sander-d01-p1.json", "name": "sander-d01-p1.json",
"author": "Sander", "author": "Sander",

View File

@ -0,0 +1,218 @@
{
"results": [
{
"command": "python day03/day03-p1.py",
"mean": 0.0660799919,
"stddev": 0.025562380847174715,
"median": 0.0548976352,
"user": 0.05923819000000002,
"system": 0.0061979943999999985,
"min": 0.0430741142,
"max": 0.13645839420000003,
"times": [
0.0580094412,
0.0479218002,
0.0467777452,
0.0487909782,
0.0568163352,
0.054945985200000005,
0.0873796792,
0.1266311662,
0.0563937692,
0.060725026200000004,
0.0476747372,
0.0474197492,
0.048355934200000006,
0.0469648582,
0.0478248612,
0.04853774420000001,
0.04466234720000001,
0.0448723452,
0.0439995782,
0.05148014120000001,
0.054453686200000004,
0.0720802272,
0.09020339620000001,
0.1001945402,
0.09638806820000001,
0.055358244200000004,
0.0468372552,
0.0606053892,
0.0638592332,
0.0922908422,
0.10698714220000001,
0.1044674492,
0.05800262120000001,
0.04659443020000001,
0.061099284200000006,
0.0548101342,
0.0468830492,
0.0657145312,
0.07448295020000001,
0.059065898199999994,
0.0443573832,
0.0430741142,
0.0438149122,
0.0459145032,
0.061378683200000006,
0.0728903592,
0.0977631482,
0.1137083432,
0.1248132872,
0.04906956820000001,
0.04501981120000001,
0.046184610200000004,
0.0436409282,
0.054372100199999995,
0.09953690920000001,
0.12195182120000002,
0.0703806292,
0.1103826442,
0.1260261212,
0.0464217982,
0.0463901332,
0.0617853892,
0.0548492852,
0.044766891200000006,
0.0536407262,
0.11619950120000001,
0.11864129820000001,
0.050199670200000004,
0.0488492802,
0.0482894502,
0.044182603200000004,
0.0452517732,
0.0507959392,
0.060989947200000005,
0.0620729822,
0.044499067200000006,
0.051901206199999994,
0.0526471062,
0.0627863622,
0.0728570552,
0.060794447200000004,
0.0469039242,
0.0971304202,
0.13645839420000003,
0.0816798682,
0.04396929520000001,
0.0442168822,
0.04408973320000001,
0.0535603102,
0.1162714572,
0.1043759072,
0.12440874920000002,
0.04929632120000001,
0.04931024020000001,
0.0634268662,
0.05277431020000001,
0.0690710262,
0.0876780362,
0.05742365320000001,
0.0462994122
],
"exit_codes": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
}
]
}

View File

@ -0,0 +1,218 @@
{
"results": [
{
"command": "python day03/day03-p2.py",
"mean": 0.09414321873999999,
"stddev": 0.01832509350311759,
"median": 0.08736366594,
"user": 0.08812937,
"system": 0.005363350000000001,
"min": 0.07237158344,
"max": 0.14640847944000002,
"times": [
0.08058291244,
0.07628245044,
0.07969654144,
0.09520080544,
0.09930194044,
0.07825368544,
0.08392984844,
0.07737118043999999,
0.07788930944,
0.07749630844,
0.07952176043999999,
0.09787982744,
0.08150873044,
0.08176495044,
0.08633617744,
0.10993066344,
0.07870264444,
0.07887313044,
0.11759371244000001,
0.14640847944000002,
0.07996222643999999,
0.09731879943999999,
0.07707701444,
0.07385610144,
0.08259913244,
0.09680778844,
0.11890589244000001,
0.08543212844,
0.10530924944,
0.07660466744,
0.07237158344,
0.07377316044,
0.07496567443999999,
0.08222708044,
0.11440945644,
0.12379463944,
0.08831812944,
0.09060156143999999,
0.09417247944,
0.10397773444,
0.07700830344,
0.07477282644,
0.07389806843999999,
0.08066847544,
0.09046442344,
0.11788687244,
0.07385357844,
0.07357571044,
0.08391386544,
0.09809230144,
0.11828182144,
0.11357936444,
0.11709032343999999,
0.09366015844,
0.12241708644,
0.08967856644,
0.11136426544,
0.10635690744,
0.12570409044000003,
0.08240299144,
0.08341971044,
0.08110020844,
0.08025836344,
0.07834463644,
0.07356606644,
0.08846380344,
0.11980265844,
0.08049780844,
0.09870591944,
0.11650581444000001,
0.10046443644,
0.09956565044,
0.12974481444000002,
0.07494186343999999,
0.07891511344,
0.09839348544,
0.11864865944000001,
0.12580707744000003,
0.11363200844,
0.12271954944,
0.08420987944,
0.12219339344,
0.11876301444,
0.07576832244,
0.07380642143999999,
0.08069492144,
0.09729451344,
0.10398245644,
0.11655304443999999,
0.07787526644,
0.08640920244,
0.12098887044,
0.12086899544,
0.11050377944,
0.13328684144000003,
0.09596151744,
0.08029424943999999,
0.07421061644,
0.07551346744,
0.07996589343999999
],
"exit_codes": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
}
]
}

View File

@ -1,115 +1,115 @@
{ {
"results": [ "results": [
{ {
"command": "target/release/aoc2025 2", "command": "for run in {1..100}; do target/release/aoc2025 2; done",
"mean": 0.95519874726, "mean": 0.31470294114,
"stddev": 0.044124744291853195, "stddev": 0.03199635516413443,
"median": 0.9539973693000001, "median": 0.32647921220000004,
"user": 0.9509290699999997, "user": 0.07126165999999999,
"system": 0.0004994800000000004, "system": 0.24127882000000014,
"min": 0.9081787933000001, "min": 0.2110023297,
"max": 1.3391311813, "max": 0.41121181170000004,
"times": [ "times": [
0.9081787933000001, 0.28789600470000004,
0.9308759813000002, 0.29233324270000005,
0.9142113613000001, 0.30447699070000006,
0.9193022683000001, 0.30604592070000003,
0.9168911283000001, 0.2980340227,
0.9253488913000001, 0.3042085447,
0.9312279043000001, 0.31601446670000005,
0.9356256283000001, 0.3013712217,
0.9492816713000001, 0.30324271770000005,
0.9366174083000001, 0.32785871270000005,
0.9250868713000001, 0.31156347370000004,
0.9360851383000001, 0.31208932270000006,
0.9296086603000001, 0.41121181170000004,
0.9412757703000001, 0.31799863570000003,
0.9305709973000001, 0.33992077270000004,
0.9433563383000001, 0.3369579147,
0.9328483643000001, 0.32291744670000005,
0.9234778363000001, 0.3400554397,
0.9411994823000001, 0.3373144127,
0.9501147403000001, 0.32988819370000005,
0.9559593323000001, 0.33633534470000004,
0.9364716953000001, 0.32649490470000003,
0.9493212363000001, 0.24973634970000003,
0.9406622733000001, 0.2379149197,
0.9539723113000002, 0.29469709670000005,
0.9497769683000001, 0.28634381670000003,
0.9555531353000001, 0.2975846407,
0.9487832943000001, 0.24994015970000005,
0.9615137793000001, 0.21708724270000002,
0.9561215063000001, 0.22108192570000001,
0.9718753403000001, 0.22381864770000004,
0.9563764693000001, 0.26313973770000004,
0.9643665283000001, 0.2888522747,
0.9637328313000001, 0.29970076370000004,
0.9707989003000002, 0.30172343970000004,
0.9186347943000001, 0.3051582647,
0.9741552383000001, 0.3022762097,
0.9165410013000002, 0.30299157070000005,
0.9262016423000001, 0.3143551627,
0.9540224273000001, 0.3003338387,
0.9277363903000001, 0.3045328997,
0.9548339213000001, 0.32734090270000005,
0.9273572813000001, 0.31374024070000006,
0.9300478423000001, 0.3149945357,
0.9528168093000001, 0.3232337457,
0.9275888603000001, 0.3146408217,
0.9552747403000001, 0.31715429170000004,
0.9330515603000001, 0.34547788170000004,
0.9566409853000001, 0.32486034370000005,
0.9312747113000001, 0.32440604970000003,
0.9553285483000001, 0.3452610607,
0.9258871153000001, 0.33209796170000005,
0.9735189993000001, 0.3268754427,
0.9729769113000001, 0.34545075970000005,
0.9651232503000001, 0.3295807727,
0.9375781063000002, 0.32884609670000003,
0.9767990263000002, 0.3455743927,
0.9542527273000001, 0.33288479270000004,
0.9342905783000001, 0.32795059870000004,
0.9631512283000001, 0.3365149297,
0.9617953713000001, 0.32855343470000004,
0.9813052893000002, 0.33339330570000003,
0.9570536853000001, 0.3473504217,
0.9289222813000001, 0.3321817737,
0.9927794953000001, 0.32830522870000006,
0.9329621083000001, 0.34760668070000006,
1.3391311813, 0.32824177870000004,
0.9325888323000001, 0.33336813270000004,
0.9621946303000001, 0.3395041267,
0.9333018313000001, 0.32442966170000004,
0.9646547103, 0.32838544070000003,
0.9413923583000001, 0.3374683357,
0.9640935883000001, 0.3297805757,
0.9897789913000001, 0.3391899057,
0.9324330013000001, 0.34050074170000005,
0.9643400343000001, 0.32646351970000004,
0.9848533673000001, 0.33531602070000005,
0.9647858223000001, 0.33838851670000003,
0.9767217923000001, 0.31628309870000004,
0.9635894333000001, 0.3377080477,
0.9659293263000001, 0.33689578670000003,
0.9638130933000001, 0.33373161570000004,
0.9872895043000001, 0.32770362470000003,
0.9596654163000001, 0.3299733167,
0.9833496003000001, 0.32683999970000005,
0.9814118083000001, 0.34766178770000006,
0.9748250483, 0.32503415170000005,
0.9946907663000001, 0.32846571970000005,
0.9336311843000001, 0.34563105270000005,
0.9904872243000001, 0.33034485770000005,
0.9579200363000001, 0.3304866677,
0.9371263093000001, 0.34363647570000005,
0.9715577773000001, 0.33028165070000004,
0.9408078893000001, 0.2875129417,
1.0061055943000001, 0.25051270070000003,
0.9466207803000001, 0.27724555770000003,
0.9793392493000002, 0.27341198070000006,
0.9678916383000001, 0.29751710670000003,
0.9669369003000001, 0.28160194070000005,
0.9402422413000001 0.2110023297
], ],
"exit_codes": [ "exit_codes": [
0, 0,

View File

@ -0,0 +1,218 @@
{
"results": [
{
"command": "for run in {1..100}; do target/release/aoc2025 3; done",
"mean": 0.2858219798399999,
"stddev": 0.11911241840008398,
"median": 0.2780274708,
"user": 0.13235246999999994,
"system": 0.15105486,
"min": 0.1617816493,
"max": 0.4466764503,
"times": [
0.27788059230000006,
0.2339800653,
0.30596414530000005,
0.3035362233,
0.3450809993,
0.38581612130000004,
0.3789666803,
0.43647181030000004,
0.42590342830000005,
0.31160748330000004,
0.32686600930000004,
0.3351626803,
0.38901525230000006,
0.39305780130000006,
0.35875977830000005,
0.1675035133,
0.1722495683,
0.1732900133,
0.1650050793,
0.1776681703,
0.1691414903,
0.1637963703,
0.1672267273,
0.1617816493,
0.1631604783,
0.1652634953,
0.1629138223,
0.1650890333,
0.1648178853,
0.1637581273,
0.1643174363,
0.1636355433,
0.1640868523,
0.1647233763,
0.1639534483,
0.1621999673,
0.1637627413,
0.1648785603,
0.1635657323,
0.1697515313,
0.1665315373,
0.1664922383,
0.1636477263,
0.2015597083,
0.4399764453,
0.43566508130000003,
0.43843071530000005,
0.43717739930000005,
0.44117839430000005,
0.4383437143,
0.44289095930000005,
0.4466764503,
0.4340191983,
0.38891430530000004,
0.31792457430000004,
0.2781743493,
0.29652729530000005,
0.32400008430000005,
0.32573575130000004,
0.3552500223,
0.35653021730000006,
0.39221699330000004,
0.41257687630000006,
0.4055779453,
0.43111143530000007,
0.40042304130000006,
0.4412894613,
0.41781259530000003,
0.1854528053,
0.1701201473,
0.1779843383,
0.1683290163,
0.1667868963,
0.1811534223,
0.1681221393,
0.1662736183,
0.1715112723,
0.1702715243,
0.1678216483,
0.1684258623,
0.1685099203,
0.1660978933,
0.1630387413,
0.1848142833,
0.1995848083,
0.1675094073,
0.2163439033,
0.4370722463,
0.44037415930000007,
0.43945498130000005,
0.43611861930000007,
0.44157850230000006,
0.43407264630000003,
0.4394844613,
0.43866582230000006,
0.4372620253,
0.43830210030000005,
0.44074636130000006,
0.4378032733,
0.4408469393
],
"exit_codes": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
}
]
}

View File

@ -0,0 +1,218 @@
{
"results": [
{
"command": "python 3-1.py",
"mean": 0.04121359861,
"stddev": 0.01925979464565644,
"median": 0.03321260526,
"user": 0.033925540000000004,
"system": 0.006530669999999996,
"min": 0.02099105726,
"max": 0.08260498326,
"times": [
0.051904651260000004,
0.07081237026000001,
0.07550464926,
0.07386956426,
0.05226041826000001,
0.02245401626,
0.021673267260000004,
0.022984726260000005,
0.021070968260000003,
0.022354786260000002,
0.02207817326,
0.02265223326,
0.022228742260000003,
0.021890656260000002,
0.027320925260000004,
0.027147791260000005,
0.02660499526,
0.033888322260000006,
0.05204111326000001,
0.07783879126000001,
0.07545674326,
0.07537733826000001,
0.07891184926,
0.07663281226,
0.08194317426,
0.07275445526,
0.02677728226,
0.02146064626,
0.02126091226,
0.022596147260000005,
0.025912396260000005,
0.02637571726,
0.029881821260000004,
0.032719728260000004,
0.037371311260000005,
0.04147204526000001,
0.02693493626,
0.02099105726,
0.021683471260000003,
0.02325691926,
0.030879524260000006,
0.037412061260000004,
0.053491290260000005,
0.057412962260000006,
0.05373986226000001,
0.028096754260000002,
0.06869860526,
0.07218100526,
0.05327467526,
0.025161592260000004,
0.024661289260000004,
0.02454142426,
0.025319026260000002,
0.03712941226,
0.049977244260000005,
0.07055158726,
0.048365752260000006,
0.05857217026,
0.06317722226,
0.04863136826,
0.06011220426000001,
0.041733240260000005,
0.047502842260000004,
0.038220037260000006,
0.058726324260000004,
0.061521019260000004,
0.024227173260000005,
0.029794275260000003,
0.03370548226,
0.04198545126,
0.044787625260000005,
0.05080426326,
0.047328115260000005,
0.025825472260000003,
0.02565365126,
0.026707547260000006,
0.027339551260000004,
0.025979196260000004,
0.027713986260000004,
0.030965964260000006,
0.07263531026,
0.05937729026000001,
0.02620647526,
0.030743662260000006,
0.03128535526,
0.04805048926,
0.08260498326,
0.07357149826,
0.046451266260000006,
0.025180880260000003,
0.028250977260000004,
0.036459030260000004,
0.07202390626,
0.045909026260000006,
0.021836287260000004,
0.02222378926,
0.022240946260000005,
0.021696904260000004,
0.021384970260000004,
0.02296663626
],
"exit_codes": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View File

@ -0,0 +1,201 @@
2233643232222242333443433223122333324326451323323334325223136631334332233233323164354342233332238233
6436547659356357277564683346658554864789866767856546426667566576537557576764753366663247799566575359
4322212422212222222222112222221252322222222222121152214312222222226122122421262632221222352222223522
5242873574376258254526262841222235756126125363535226724625252231422222223232432416114933476433226425
4423241233122222212222152223222321224343432221222131223143222222223442622361254132221212223321223232
2354443335444444444445473233436443443447434343453464372444444744444341435444543443433645644446664444
7344773375355374532433311243433365663564579278356438583444355566467535626553263862265655437577558445
2422122121212324322412122634143132116824441421223222862232324232233322227221224221222232422452322422
2335425524341553453213523155345249534445348244223423324254265524132552444254422523422425353142334556
2543542334354463443444631655434665743432434343442354554443244445263434575354472655455354443554334453
2533222231331423136323422331324323122212222133234123324923235534153325322253223223121312212332233222
3655636344614544753471372637363622461657323523555373676516477617243136625537745875577456765251534745
8347857486272332654345885359345864556245456476353536374444758537485854624467575625455471966355365444
2333131222324323323333122331322333223232233313232332423233313334321321324232231322333313332323233322
4333455333232133222434323424423223782622224423233533223343333237344243134333437453254322633363332442
3333224546432265536343345623343413494323264462333222332725333245323343134323244336443544223233233344
1122222222422322432314212522412222221222221222213224222532253232222211212243222222112122242232335222
6223222222211527224244221412234422422713221226223222321153222234233432222213222222222222222324231636
5522284428622511162523222215246221521122222226162118422222222122212222225432222224262224422471367526
5956484444745474342547425434594374468434864864145434543435444445445435447847779785545443385653654957
3142333733311646312333123413312243223323322322513332472235234224324411362463132422246321332342334253
2492222222662312432222234253224154223124222422222213353722442234192272247469222421222262223267156265
1222322226313332322222322222252325331322122133223322232222712222224726531252321222222231322222222233
4438912132222624231242322622336222122622235321223232221222212122524232224232242223126113262212212435
4342543122243322234244522425514322434334515225622212522435254747435834212524224434345847214233232221
2232662535536423636216213652233222333323333326232362322345211258324623265442343221333714253323275637
2692334323322554444433246235632624244563226221655324344313452376684265724434633442434233553662233643
1644224326534722127241464425124252623243373421327743244224241335526234247333375133245132323342647346
5333657533435533437765632361628578858239468476298973236397242266676766654544552648636554686924674746
4251343354552554445476666443753334477733455252244352372543524364954246663435527633554214534575345543
3245444253442524962129783345453352426254163846525128886263548552344445395534373553663544462243475363
2142532422249222122122222121162472244223312421312253332722222114213222352432221242221233181232122212
4566465546696559368565756646438955545369947544855754656465452555756544447765644457465366557485337369
1772653222555582242247246232214292222697233222223253514255232252129642112322335241212183231264525284
4354354427322426542444547537346731353311444756444523378323634345432344556435433536444746445434454453
5344542553344445244734444454543444343844354445344455544437343413454472243534445445435545543335434544
2421234244222324252243122112531222432451151212536641122423232254323625642217243224625513637522242233
2444236443231233244646213453222422433135223422213222112323142221124322223132322364143222422234525135
3993952352239334636476372777272353823836333556663343425385311323219418661163732333739633435335233629
2335132452334122223322212232323222332121214232343232321253615232234232222225124143231423232421221232
3435253533345115535125331555355212454321233141243323222231511511242334253123412222244355444111336789
4342262562424446414642344324642513444741415543524724444347445424742344243227544243834261383344344433
5133269339551412322324214425133339363433753643223332253433334733423351353332323252563825324213546533
3365372336245325375435335434332645526446285234343523632282522323636232643244678477432531362385446246
2311131324212395342286212542325322246532472361652435616622122663643522122343832326532338222232323482
7765353451358575733572283573547384566323256675564262642584334376524365537964746444124713224735546774
2252222525225522412122213464272135235332236223312272922282292361721421642435252222222226223782322215
2134223233222221422122222223312222321222423333322222233223223232122322211216211222321222223242222422
2222361132122134212316842523222722221729212242142646822267221232222222222412222222522222242753222222
5337864557478543434125566533466435547454453457543754463395635497321323245554355354848544555244335554
4466625524532724322343146236829413367515473225463633637657254355393224314422246746538323136326741268
2322233123334342233531132214322222423222332332324712223135133223235235532233233332322352216243433223
3633623322235342316346231131633361331265333443339233365455623337353332167234337236515462224252333216
3322584324332533632225363333332331626133332232223132322321336323322334213633233333215232333442313275
5965751122343223845246255553658564621769664976957663344222229522752322289731722915285462282698823463
3121123533222322223221263122523242222123232221232342322162223241233222314224211222222122122322232212
6122331319122223262333221232321143613412232222221213242132321221322221332342352322122226512222222633
5145245555235222232228435425532224121513422242326222356224253225455252412222754222322432125224161442
3132322122223332322332242224222322222422352533113232233223232223222341222123253242213213224323354225
3252413233224241123451142223232242212442241222231545322234225222422473143343222322424222122252122416
1222222432232632232221222223222122521241321222251212132222211232332222334222222232224222322222222133
2133325423225322332222532333232222323233222322122152432122332224212222222222212323324323322362632221
4122341242242411343233341124424221223432443244144143434244411231333334322314223334222434334414256789
2222212542623221122371215317524472552543532242222229542515225421552216216324337665122323271821561222
2122122122122422123242223132212211232222223222228423241243212222232242216422232232113122122222232222
2342451233212332332223232222123322212234372232433123322242422233233221221324231233221221232222235312
1531224333222562318222324631131222342272182322522822182242335222241223334222527222212244253473221323
2222233222142234223233121222223122242221213223222122332242431122213321122214222212223322224222223312
2222222143243227332452232222322322321323613266223112234422442212224233243242223133522611232111122321
5654553447313533554553893854763333467444552579533944455663535653524659436665547645355435546543554545
5323331522211233252524233313212132234222532343133332653523335426323323143321221322323323221347322323
3344255554553462322384556525546538353335583545124321555537334342254324532523646534635433532353543335
2252335254447422332431226227992713322234315316472133442221225414241542213654242426442132142182572344
3135523223226233323223323223222544253222122262342343232237222425282315212232123222235333112312222334
3354773326663365346493365244732433363452542643435334753354577776335434754556592544964263743422332443
6371439222222352424162472287212322327622532242273512222352621682699762212223226214132243222323527222
2232543232222452352224332423252323532333242233144332224232233325233442123233222442332344242445234243
6425615474554454141541665641252716724411315412715646331276275654347342167232742714674637136141217389
3235333323334334433422362433341233323333231333336463133333453437363325442333342333823233363633333354
5765262746346263664544526674676762456349723566665876664674156663555573556676764444715554476437677855
7423434333422334442444334422343286432323333344344314233133333443444333838532343434543341233343232733
6774788365875695878887443545568759778677247747655763848548555778646627725586786843876788675548758494
3262313215125212725325312211423222332227433222263225122322254423222211222422352233312213443215423525
6142243652443244444342244442113325153442421335264515232174224223431316224224433264315222264244474425
2921833253133742442324622132642228232344243922221222431224543231122332332233333123362234243552323522
5632565666566658566466565564426236675643353576665434456559645576553857764724552526336855216775546576
2532452536565234455556555433545333343535235259355533573737535333495454353444323553254555558327634454
5548929366483365659354448563354373455759474784978453866356866476356667554667454666687754395646666584
2422224232218244232132234324422124322122422432233246415332224232332414212225332241243325223322222222
3758934793272332176257536845332333423543533433543322226223463523347666464677433843442824654415933924
2622232121212222232322152424125221342152122221224222323442222231221231265222424444243222225322221222
6214422421342323434331423232234143232134222323441334231133223132222426213232335122424533433312424333
5495352464253923643432324472475257423635544644337693443224359353932343696565533473655334633335357234
7254749566545484267477472424253562668987384296476363553384653423843774734634364663792242324756555646
6226324333333271442443546421325232432323192149222232363654233652232253322232543523855788643345523533
6423316551511466142352352513435356146435255444345656413213453213333153116125465222652164154334412789
3233343444252424634655344331632462565545324335341334523524342535241225553354334625422632545362561363
3445525556368253862333435337455253455524557517455232345255743265518361673494731765233544323823734449
8544272422454343423222253523841223262532426642832273222113352334442513324141234434252431222216421154
5423334354644265263636536355524642453634246642522263635654356321443365454125632234324233624247276342
6443545413135523533265443323245434225234223442514335322555552333234542252323354441535625432213233475
3212212222223312122122125221321232213221322313122221312222226222222122212222222922221223212132141212
2323212122324611722242222244224112222243222123241262221222362413421211233222242222215222124222122331
5844366354463476656352455342626163223651573323322732274227653444734256235242233221366322344236655364
2625454454614434442613618224132466334432732446343621534141835624243221346614444345314364443148234344
2323222223223124321322321223214122333222332222231313222222332322222522333223222122132323212343223223
4437368344416381611321431224542447234422632416425742323247454382441741433122653324364923229242444543
1246633747466243525472445465264464613362434426572366643424314563444534564662442453243348442543252552
8455213554255167364635127532563534225444445625337655356663242455242553536364567566362637563621552464
1145243234422322531234121131315342152533253745423235234129642243232433334524273522215353252222256345
2222221322232522222222232222223222212222223212222232222112321222123213222222242121522231322322222222
5554324763412143342413244121235412334563414442244613543522434445264434234433442544443434242225336524
3212234222234342422134323321353344221222241463622421223322332224422435432352244231322324233321242222
1738535622754134632333123483712322334123243222775212333324326533722431671361323312322346241332334322
4351132523543724323443552656312222233223234323221255492443514427243424322442435353343365537374457525
2226222122222222222211222321222222362222222222262221222222222462222242422221222112213252923212222227
7372265262132122222222222282647132453212233322331232223212732224333228225333323211212536423333531243
3342577332235352233233553852633532263644351255533142324433446226235457211213535744631435423223364363
8446255244282932322534869773258925347844614356985425432837381986388785453532534245572534443192852357
5446735236335373623324345623337331834844472537246434774964444227448844322344333544544434382344464148
4433323344453244323434533223334334444433433643133631233655333413335732264332842324635343324544539433
6344376432398243372333532336643528844236533248338383473645366575356475384433935577645374443832252963
3443222635222221244334227234322246222342227224235242323213273234134421523235225245425122222255224231
6585657577798869776763766747566877567766997677734495477637554466647747676466367736757977637777676777
3242552333334223333252225333433565333333465343535354235233123752242314432223435333332233333332223332
1311222262211312324225221221345121353311223322212222241343223322112224651422143221323251213224222225
5533566445555425555535555545655564353354655435445566346633555555464665566547564434755465554654365665
3463363433672383135556336377441633635538123755433353487535473513268444423364361656537543324433363331
2222122334223322241131242133321225242732213242326212422232444422322212222223342231223222322222422213
4323633242332312332424232178525522242552333523216333423225215442333672335222322723212232753241221533
4362565458455443433534444665335234724445746564455242246332242464545442435623423325344343664843444243
2223437712828555541728813515663367733828286734326188656173257638346432837355155675314858434277276319
5244262352623221152324113352242726453823552433244642443115222322322662622123452436542542126162944562
2222362523222242322324333353323221232222533231223413323541411332323322544333232433153322333233223142
2225312222212215222122212322213222513122221422323222322225262221222251222457222112222121342121222221
4313232231424332229233454343224319396724123323633382235223632236322391443232222332212432283863439233
5213575451225235425253533432213743534342624252124435242432121345254352522422122212553341253217252322
2123412112522432522412192122226522121425425222252222522512262432222222411232122222423341231351232221
5465625548366424522551965584434936726545472565217598582254364534384215551343672449253467655554836446
7254422422222617225423523253332238633333432123322237324623122462125452782322233252232462154221236133
6535353554552342214454325582546583245579544353448348251572751295756482557556245336852375322477534475
4322124613433135333247343244442342123263246432131544439324486672223437344234314333231434329452334422
3222122222211221222442221522222323121122254222222212221122222222212132223211142223221222122232253223
4522264542561523248146564185215223352222363522622331425472532241114233344524356242234315554712254611
4524553354655655655852774652636663566555536557376256434754354524655756453536565466492456544475546375
6482342921224824333643274834413223286723233143344312632422114943523238322122443642964332282223862242
2222532222225126242562235312251241241152363142662511122221241252422235424523144132221224242525432316
3352233122122222414623322422421412265422222322631132532211362245214223424432222632322122452236232543
7435435245443454483642323432454553456537424534753454323445333535524536533132553244725534224634223674
4442455534524835435555455546253515474453446464546545554444443534453544443464344544455454444445545656
6318372235932344212322623432143332348233334233234531434374327935349323133422333672232723333333333313
2343437112323223553423322434332234373285822222438334742444737123322352633236431422342337553563236343
2534525223332122254212422543221212222333444234231612225123231222134222224211232431442153233222232235
3311333353223232533542243332322443233333433334433333333334343333233225332233334323333332233323334534
3728642494543682323613638224245843442324642214465451312451322235317994852247254439532312342435223415
2644444442446656433255324244844744224332444644642423633224344444334435346443263334422284244442354422
2132343337743333341331172224332353222832422333133333324323434332423323223323333123532233221521332232
6456746544533347353533424453434256445454442444545332474441436424325427632384444467424543463243246273
3133424321432223332224512124224222232131232222432232433224233324222323231122133222444342422223422412
2951222223232342212324221372233422121222222122428412742122222272113231225115272231252232221122231342
4332522234422363462322222143321322323545222323433222352435311251238232125232422442222133116432133222
7666998669668693896756755965999793569795865899869698558598997759886859928589579967584996689695478789
4352363453212525423622255562341442344215444134321422542354722245343422441244464243637481135554112362
3223443344545244343434584554333453154433434434333249442265443244333635455338332244343243311134334424
1665322162231323425324323123442341125222233315531323536111322442242235242132414112244264232443422245
2414221222221172231122222143244322162212222222425232121223222222221222422345212226312222112112221232
3331333314633233122533233233233112324313222231331243321234122333341411343323323432121313333225221232
2642724252231252242432324542254325124442563345455242145355324151614235225515342253523532421213493425
6315423423623323244234343366465111333233473411272233343328223323662414442233633141132225735345273323
2255222422222341222222221221242522222412222122121222222221222225322225221312112222122422222222221252
3221262222222452233122222424222222221221233427232242322221283223253322122222222222221211222222222322
3563473466663465624422525832655214646265347424423434534754575561344661544144721234545452426624325665
1512522452333543222325524385269535432435333245472553438445343544134325483212359524535452434233544546
1242352442411351533231323433123333232332131522241133232223323312221332252133231231222521342332233113
6796977884635885678886386887784686985966565558559785568975267889586689776858777746657576899885687867
1322221211222232222222212224341222212122652423212122232222221622222212122222264522211212112222222222
2221122242132222242321653225213222212212123122122225216212241422222121335224252128222312122223152213
2222485454314145422676223532428253544275212444246273219543235423266271388223486621383423434123322786
9264342243354532322432433325652333233452313535423525423336263384434513334133343152333512233333211423
2221254122222222483253222232224232221212127215222224142222112222222222312552242222122224121422222211
1234422452224434224462441231223422424234232233163423323463242243214153522224424343443144243233321226
2322212322222232222122222111221213222232122222212222222212222322321212111322222122221222222212221221
3434526563345631541253456353554355344534635445555335344434585646443364555465443732452735555413335455
3225312137123114121262224262133222252322222211222221322324232222112222621222224422222232222221266238
2353522543223422534146562225414223172345423224513313523223255542242224543225213372456442522442223274
2321822523345672525222333345331141642241339237232233346584343212323556147252622534732253132335723124
2221142243241323222232423422323251235242422122522224222322222325214214222222234332641212512222222223
5352353234444335353333325633455343325334323243442544543453525334742134535534164234322442365546552443
1644535454544465443444444444356555544434446443634464664335484454462433434354444442444466442444522245
6433454454447444425444475352634433345446225436132754337645216743354253676545324347755544565443915533
3467493473794344524434814455434343541545634344354934325134523344486353664347445446466468352473724335
6583456635588454567555367246548474858674467585559584465654664563665845468923825636652445446833546865
5444533574534446655337755343315552455447755452563434858445835538545235556545555373594853555475534542
3441235133213337324673253262369232322322523734393339321333332333338374353323483332652333273343333334
2422443223431842223321234271323322427434181322342241645342244245114331332453823332343424413141233222
3324243325325223334126334234442422148382225223733442252241413434444155241324232233814134662324642534
4426433352444223343443233364226332215123531534353433343449744443257223333742332354436544443343235466
1311262322731223323222364222211222212331291223331233416323222221212322331423211242312141133222213123
2231221213222221212231221334133642822242221322242121224231222213322222222222223213122225213222251122
2222462325135343335552659427182617224656226146173226235225282512237335226552631126273541364136347217

View File

@ -30,14 +30,6 @@ pub fn answer(text : String) ->( u16, u16 ) {
( clicks, passing_clicks ) ( clicks, passing_clicks )
} }
fn count_passing_clicks(old : i16, new : i16) -> u16 {
if old < new {
(new.div_euclid(100) - old.div_euclid(100)).abs() as u16
} else {
((new - 1).div_euclid(100) - (old - 1).div_euclid(100)).abs() as u16
}
}
fn str_to_dir(s : &str) -> Option<i16> { fn str_to_dir(s : &str) -> Option<i16> {
if s.len() < 2 { if s.len() < 2 {
return None; return None;

View File

@ -1,50 +1,189 @@
use std::collections::HashMap;
use crate::utils; use crate::utils;
use std::ops::RangeInclusive;
pub fn answer(text : String) -> ( u64, u64 ) { pub fn answer(text : String) -> ( u128, u128 ) {
( text.split(",").flat_map(to_range).filter(|x| is_invalid_by(x, 2)).sum() text.trim()
, text.split(",").flat_map(to_range).filter(is_invalid).sum() .split(",")
) .flat_map(Range::from)
.map(|range| range.invalid_id_sum())
.fold((0, 0), |(x1, y1), (x2, y2)| (x1 + x2, y1 + y2))
} }
fn is_invalid(n : &u64) -> bool { struct Range {
for b in 2..=10 { low : String,
if is_invalid_by(n, b) { high : String,
return true; }
impl Range {
fn from(s : &str) -> Vec<Range> {
let mut ranges : Vec<Range> = Vec::new();
let (low, high) = match s.split_once("-") {
Some(pair) => pair,
None => return Vec::new(),
};
// Sanitize input - for AoC, optional
if low.len() > high.len() { return Vec::new() }
if low.bytes().any(|c| c < b'0' || c > b'9') { return Vec::new() }
if high.bytes().any(|c| c < b'0' || c > b'9') { return Vec::new() }
for size in low.len()..=high.len() {
let range = Range::new(
if low.len() == size {
String::from(low)
} else {
std::iter::once('1')
.chain(std::iter::repeat('0').take(size - 1))
.collect()
},
if high.len() == size {
String::from(high)
} else {
std::iter::repeat('9').take(size).collect()
},
);
ranges.push(range);
}
ranges
}
fn has_pattern(&self, s : &str) -> bool {
assert!(s.len() > 0);
assert!(s.len() < self.len());
assert_eq!(self.len() % s.len(), 0);
for (l, c) in self.low.chars().zip(s.chars().cycle()) {
if l < c {
break;
} else if l > c {
return false;
} }
} }
false for (h, c) in self.high.chars().zip(s.chars().cycle()) {
} if c < h {
break;
fn is_invalid_by(n : &u64, by : usize) -> bool { } else if c > h {
let s : String = n.to_string();
let size : usize = s.len() / by;
if s.len() % by == 0 {
for i in 1..by {
if s[0..size] != s[i * size..(i + 1) * size] {
return false; return false;
} }
} }
true true
}
fn invalid_id_sum(&self) -> ( u128, u128 ) {
// Part 1
( if self.len() % 2 == 0 {
self.total_of_pattern_size(self.len() / 2)
} else { } else {
false 0
}
// Part 2
, self.pattern_hashmap().values().sum()
)
}
fn len(&self) -> usize {
self.low.len()
}
fn new(low : String, high : String) -> Range {
// Verify they're the same length
assert_eq!(low.len(), high.len());
// Verify they're all 0-9
assert!(low.chars().all(|c| '0' <= c && c <= '9'));
assert!(high.chars().all(|c| '0' <= c && c <= '9'));
// Verify they're in order
for (l, h) in low.chars().zip(high.chars()) {
assert!(l <= h);
if l < h {
break;
} }
} }
fn to_range(s : &str) -> RangeInclusive<u64> { Range{ low : low, high : high }
let empty = 1..=0;
if let Some((low, high)) = s.split_once("-") {
match ( utils::str_to_u64(low), utils::str_to_u64(high) ) {
( Some(l), Some(h) ) =>
l..=h,
_ =>
// Empty iterator
empty,
} }
// Create a HashMap that counts the number of patterns for each value
fn pattern_hashmap(&self) -> HashMap<usize, u128> {
let mut h : HashMap<usize, u128> = HashMap::new();
// Populate the HashMap
for size in 1..=(self.len() / 2) {
if self.len() % size == 0 {
let mut patterns : u128 = self.total_of_pattern_size(size);
// We'll double count a few patterns.
// For example,
//
// 247247 247247
// |------|------|
//
// this number is a pattern of 6, but it is also a pattern of 3! (lol)
// 6-patterns always catch ALL 3-patterns. In fact, all
// k-patterns are always caught by n-patterns iff k | n.
// Therefore, if we want to accurately count the number of
// 6-patterns that AREN'T already counted as 1-patterns,
// 2-patterns or 3-patterns, we must subtract our total by
// those amounts.
for (key, value) in h.iter() {
if size % key == 0 {
patterns -= value;
}
}
h.insert(size, patterns);
}
}
h
}
// Count all invalid IDs where the pattern is of a given size.
// Then count the numbers of those chunks.
// These can then be re-used to count the full value efficiently.
fn total_of_pattern_size(&self, size : usize) -> u128 {
// 1. Find the range of all patterns of size `size`
let inf_str: &str = self.low.get(0..size).unwrap();
let sup_str: &str = self.high.get(0..size).unwrap();
let inf : u128 = if self.has_pattern(inf_str) {
utils::str_to_u128(inf_str).unwrap()
} else { } else {
empty utils::str_to_u128(inf_str).unwrap() + 1
};
let sup : u128 = if self.has_pattern(sup_str) {
utils::str_to_u128(sup_str).unwrap()
} else {
utils::str_to_u128(sup_str).unwrap() - 1
};
// No patterns exist!
if inf > sup {
return 0;
}
// 2. Calculate the sum of the pattern snippets
let pattern_sum : u128 = ((sup - inf + 1) * (inf + sup)) / 2;
// 3. Calculate the sum of the patterns when they repeat themselves.
// For example:
// Step 2 calculated the sum of x = 123 + 124 + 125
// Step 3 calculates the sum of
// y = 123123123 + 124124124 + 125125125
// by realizing that:
// y = 1001001 * (123 + 124 + 125) = 100100100 * x
// = (10^6 + 10^3 + 10^0) * x
let layers : usize = self.len() / size;
let factor : u128 = (0..layers).map(|layer| 10u128.pow((size * layer) as u32)).sum();
factor * pattern_sum
} }
} }

View File

@ -0,0 +1,56 @@
use crate::utils;
pub fn answer(text : String) -> ( u64, u64 ) {
text.as_str()
.split_whitespace()
.map(|s|
( BatteryBank::from(s, 2), BatteryBank::from(s, 12) )
)
.fold((0, 0), |(t1, t2), (b1, b2)| (t1 + b1, t2 + b2))
}
struct BatteryBank {
digits : Vec<u8>,
size : usize,
}
impl BatteryBank {
fn add_battery(&mut self, b : u8, min_pos : usize) {
for i in min_pos..self.size {
match self.digits.get(i) {
Some(x) =>
if b > *x {
self.digits.truncate(i);
self.digits.push(b);
return;
},
None => {
self.digits.push(b);
return;
},
}
}
}
fn from(s : &str, size : usize) -> u64 {
let mut bank = BatteryBank { digits : Vec::new(), size : size };
let l : usize = s.len();
for (i, n) in s.chars().filter_map(utils::char_to_u8).enumerate() {
let offset : usize = l - i;
bank.add_battery(n, if offset > size { 0 } else { size - offset });
}
bank.measure_joltage().unwrap()
}
fn measure_joltage(&self) -> Option<u64> {
let mut joltage : u64 = 0;
for i in 0..self.size {
let n : &u8 = self.digits.get(i)?;
joltage = 10 * joltage + (*n as u64);
}
Some(joltage)
}
}

View File

@ -0,0 +1,5 @@
use crate::utils;
pub fn answer(text : String) -> ( u32, u32 ) {
( 0, 0 )
}

View File

@ -1,7 +1,7 @@
mod day_01; mod day_01;
mod day_02; mod day_02;
// mod day_03; mod day_03;
// mod day_04; mod day_04;
// mod day_05; // mod day_05;
// mod day_06; // mod day_06;
// mod day_07; // mod day_07;
@ -33,19 +33,19 @@ pub fn day_02() -> DailyOutput {
( p1 as u128, p2 as u128, d ) ( p1 as u128, p2 as u128, d )
} }
// pub fn day_03() -> DailyOutput { pub fn day_03() -> DailyOutput {
// let s : String = read_from_file("inputs/03.txt"); let s : String = read_from_file("inputs/03.txt");
// let (p1, p2, d) = diagnostics::benchmark(s, day_03::answer); let (p1, p2, d) = diagnostics::benchmark(s, day_03::answer);
// ( p1 as u128, p2 as u128, d ) ( p1 as u128, p2 as u128, d )
// } }
// pub fn day_04() -> DailyOutput { pub fn day_04() -> DailyOutput {
// let s : String = read_from_file("inputs/04.txt"); let s : String = read_from_file("inputs/04.txt");
// let (p1, p2, d) = diagnostics::benchmark(s, day_04::answer); let (p1, p2, d) = diagnostics::benchmark(s, day_04::answer);
// ( p1 as u128, p2 as u128, d ) ( p1 as u128, p2 as u128, d )
// } }
// pub fn day_05() -> DailyOutput { // pub fn day_05() -> DailyOutput {
// let s : String = read_from_file("inputs/05.txt"); // let s : String = read_from_file("inputs/05.txt");

View File

@ -6,9 +6,9 @@ fn main() {
match day { match day {
Some(1) => run_day(aoc2025::day_01), Some(1) => run_day(aoc2025::day_01),
// Some(2) => run_day(aoc2025::day_02), Some(2) => run_day(aoc2025::day_02),
// Some(3) => run_day(aoc2025::day_03), Some(3) => run_day(aoc2025::day_03),
// Some(4) => run_day(aoc2025::day_04), Some(4) => run_day(aoc2025::day_04),
// Some(5) => run_day(aoc2025::day_05), // Some(5) => run_day(aoc2025::day_05),
// Some(6) => run_day(aoc2025::day_06), // Some(6) => run_day(aoc2025::day_06),
// Some(7) => run_day(aoc2025::day_07), // Some(7) => run_day(aoc2025::day_07),
@ -30,8 +30,8 @@ fn run_all_days() {
aoc.insert(1, aoc2025::day_01()); aoc.insert(1, aoc2025::day_01());
aoc.insert(2, aoc2025::day_02()); aoc.insert(2, aoc2025::day_02());
// aoc.insert(3, aoc2025::day_03()); aoc.insert(3, aoc2025::day_03());
// aoc.insert(4, aoc2025::day_04()); aoc.insert(4, aoc2025::day_04());
// aoc.insert(5, aoc2025::day_05()); // aoc.insert(5, aoc2025::day_05());
// aoc.insert(6, aoc2025::day_06()); // aoc.insert(6, aoc2025::day_06());
// aoc.insert(7, aoc2025::day_07()); // aoc.insert(7, aoc2025::day_07());

View File

@ -2,6 +2,10 @@ use std::fs;
pub mod diagnostics; pub mod diagnostics;
pub fn char_to_u8(c : char) -> Option<u8> {
c.to_digit(10).and_then(|n| u8::try_from(n).ok())
}
// pub fn char_to_u64(s : char) -> Option<u64> { // pub fn char_to_u64(s : char) -> Option<u64> {
// s.to_string().parse::<u64>().ok() // s.to_string().parse::<u64>().ok()
// } // }
@ -39,3 +43,7 @@ pub fn str_to_i16(s : &str) -> Option<i16> {
pub fn str_to_u64(s : &str) -> Option<u64> { pub fn str_to_u64(s : &str) -> Option<u64> {
s.trim().to_string().parse::<u64>().ok() s.trim().to_string().parse::<u64>().ok()
} }
pub fn str_to_u128(s : &str) -> Option<u128> {
s.trim().to_string().parse::<u128>().ok()
}

27
brechtje/3/3-1.py Normal file
View File

@ -0,0 +1,27 @@
input = open("input.txt").read().splitlines()
# line = current line that is being searched
# start = at what index to start searching
# for the first digit: 0
# for the second digit: right after the index of the first digit
# is_first_digit = boolean, True if first digit is being found, False if second digit is being found
# num_to_find = (next) number to search for in the string (line), starts at 9 decreases when not found
def find_biggest_num_index(line, start, is_first_digit):
index = -1
num_to_find = 9
while True:
index = line.find(str(num_to_find), start)
# decrease num_to_find if number is not found
# OR we are currently searching for the first digit and the number found is the last char in the string
if index == -1 or (is_first_digit and index == len(line) - 1):
num_to_find -= 1
else:
return index
answer = 0
for line in input:
first_digit_index = find_biggest_num_index(line, 0, True)
second_digit_index = find_biggest_num_index(line, first_digit_index + 1, False)
answer += int(line[first_digit_index] + line[second_digit_index])
print(answer)