mirror of
https://github.com/Baipyrus/AoC-23.git
synced 2024-12-26 12:01:45 +00:00
Compare commits
8 Commits
35a96647a5
...
e6d4a79975
Author | SHA1 | Date | |
---|---|---|---|
e6d4a79975 | |||
2e6ace81b7 | |||
14c6eec96f | |||
4b61a2ed24 | |||
32ee792157 | |||
5fa907c64e | |||
00e53cdbd7 | |||
c1453d6634 |
98
Day17/Part1.js
Normal file
98
Day17/Part1.js
Normal file
@ -0,0 +1,98 @@
|
||||
import { readFileSync } from "fs";
|
||||
const t0 = performance.now();
|
||||
|
||||
const input = readFileSync("input.txt")
|
||||
.toString()
|
||||
.split(/\r*\n/)
|
||||
.filter((e) => e.length > 0)
|
||||
.map((a, j) => a
|
||||
.split("")
|
||||
.map((b, i) => ({
|
||||
c: +b,
|
||||
x: i,
|
||||
y: j,
|
||||
g: 0,
|
||||
h: 0,
|
||||
p: null,
|
||||
d: null
|
||||
})));
|
||||
const man_dist = (a, b) => Math.abs(b.x - a.x) + Math.abs(b.y - a.y);
|
||||
const get_dir = (e) => {
|
||||
const { d } = e;
|
||||
if (!d) return e.c;
|
||||
if (d.x === 1 && d.y === 0) return ">";
|
||||
if (d.x === 0 && d.y === 1) return "v";
|
||||
if (d.x === -1 && d.y === 0) return "<";
|
||||
if (d.x === 0 && d.y === -1) return "^";
|
||||
};
|
||||
|
||||
const start = input[0][0];
|
||||
const end = input.slice(-1)[0].slice(-1)[0];
|
||||
const open = [start], closed = [];
|
||||
|
||||
while (open.length > 0) {
|
||||
let record = {};
|
||||
for (const [index, next] of Object.entries(open)) {
|
||||
const distance = next.g + next.h;
|
||||
if (record?.distance ?? -1 < distance) {
|
||||
record.distance = distance;
|
||||
record.index = +index;
|
||||
}
|
||||
}
|
||||
|
||||
const current = open.splice(record.index, 1)[0];
|
||||
closed.push(current);
|
||||
if (current === end) break;
|
||||
|
||||
for (let j = -1; j < 2; j++)
|
||||
for (let i = -1; i < 2; i++) {
|
||||
if (!(i === 0 ^ j === 0)) continue;
|
||||
|
||||
const nx = current.x + i;
|
||||
const ny = current.y + j;
|
||||
|
||||
if (!input[ny]) continue;
|
||||
const next = input[ny][nx];
|
||||
if (!next || closed.includes(next)) continue;
|
||||
|
||||
const dir_check = current.d?.x === i && current.d?.y === j;
|
||||
const direction = { x: i, y: j, c: dir_check ? (current?.c ?? 0) + 1 : 1 };
|
||||
if (direction.c > 3) continue;
|
||||
|
||||
const nd = current.g + next.c;
|
||||
if (open.includes(next)) {
|
||||
if (nd < next.g) {
|
||||
next.g = nd;
|
||||
next.p = current;
|
||||
next.d = direction;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
next.g = nd;
|
||||
next.p = current;
|
||||
next.d = direction;
|
||||
next.h = man_dist(next, end);
|
||||
open.push(next);
|
||||
}
|
||||
}
|
||||
console.log(end.g);
|
||||
|
||||
const shortest = [];
|
||||
let path = end;
|
||||
while (path) {
|
||||
shortest.push(path);
|
||||
path = path.p;
|
||||
}
|
||||
console.log(
|
||||
input
|
||||
.map(a => a
|
||||
.map(b => shortest
|
||||
.includes(b) ?
|
||||
get_dir(b) : b.c
|
||||
).join("")
|
||||
).join("\n")
|
||||
);
|
||||
|
||||
const t1 = performance.now();
|
||||
console.log(`Runtime: ${t1 - t0}ms`);
|
141
Day17/input.txt
Normal file
141
Day17/input.txt
Normal file
@ -0,0 +1,141 @@
|
||||
233341424221453254133544232232332553254226534524533226364366224262564522625224422453452525425244622464542422434425523245134145355424143224333
|
||||
242412213131252221555412353213522155444225665266446426366462465632256323642356346454566454335634256444554463313225343352512225142313432431311
|
||||
114133114415241354213311544521132232623644326462345644625462523534466624524454426623535225445364524544256246655523133515241453554135342244332
|
||||
412212321154353342521444343114334223434436224433524665454653532653355354263542552643323653222332654642436434422424111235225113433525143221443
|
||||
132111344233413154445333432345665423453532266462535423552663544255634622264623452624642466435255542434535356323622441134351541141425353323212
|
||||
114214342554432522435451333233633322662535234536664462362464366224525466535253532526463256236253235535352444525263213353222133153241554121323
|
||||
222423315115343422113335434556222632432253334666424644334263254744545733335477747222455436564233262252565264665523361123245144243335213341413
|
||||
314223455123245133315554242432454554345324523446545444623535753346663476473377635663463266356246433254462454444554364453453141113515433511143
|
||||
122243553421311123145455264344334233363324652246662255777774564667434434673546445546465647245325656546246252625235454335122254341313153145342
|
||||
434244423321525441225526664562232335436223426546344475753347535556676747575647574575576334676435224642234352246434255543512544311224214243211
|
||||
414333253414413522323336662243264242434633252653544776563673637744664737647336557565735543576444436455225262265652345355651424423242151243311
|
||||
242425431443121322332636222255232224366563645446577363775636656575437565335443655673353455653747575463644243643356336452365521242424253513132
|
||||
135535131153333144153332334664335222634263337663363466347556343645777366445647565347543655536776646566236325663435652362653413345233521352243
|
||||
525144332235122212654422343545534642522347454743737763357654335335677544434735465777454665446674646566542342424333445645623335514123121245131
|
||||
255331111443252332656262666664624225326334356365336653763577646635733375434473374636573634546664534546436256243466443455265223232522533243413
|
||||
315152452252213165244433652335623633465673536434336756635357555456437765755546663345436754466764337353556344533523535432642456653532453243533
|
||||
552241135411233365646643562662466335373737457564355433767675455574545553675766435775746637666646334554353373465255555343423665254111452522343
|
||||
332311145215422555633366662634532343444633355533447543464454455564337764476464666377676663765474444646447646726544542426432565225114434312412
|
||||
221212515211263335364464452453224546376477455346756534355746666553763576677645457754433444546744666747765446376542633326336456324212312141532
|
||||
454434114453455632262355446546664467756635645577476777646547457556887568745856753675665647373334755667455547647353654662336345426643521232243
|
||||
433242414335635446532426524644645337773476335454666363353755845854785567874447557874456653343557766754655466637762245335462343532334351251225
|
||||
535553552532263354342346326223473477577666743676776636667886465877644844554876655677556655546446654434536664565674343234443334234625422235512
|
||||
233541541322333324443323453537765457643336544773654374455845557745845477657888676487478844445677465635543645365533734245462535455366434444343
|
||||
455242211655243265432436633534667476375556334657757758657756745785857675767447675545577758647644753434533666634466356445655432625644251354235
|
||||
154353543343334366256264636553335566555775477467658777485686474866557868788866886857786488477586473676744436777363354546442324644466546534132
|
||||
111412342352325235522232357355536344645544747758557688664764655788444746887478667465788864886575475766555565663554544465632465533566225333315
|
||||
254133553664265342262422476575475543755363777678886466844766475778577677777447778485446784788574675454544757657337674556565354644664546414442
|
||||
241245436662632466453665635767736677333377668475855876755485568864654454767477885546685687486857778854653335666435365466436365366463445534354
|
||||
234145663233454245544264473755567637443675674584556868775544877487546478884667878586457856546847667475343663766764735764335433422522544242255
|
||||
245245255653464643653447455345775334467478685765866567655647566547667544668688488455588745477684444876856363333477333343755232434266354342542
|
||||
323355243244462562255476335455354575747745868757675784655658487845588874766657687688566768746778474456865463676774534565475664524344326225454
|
||||
555524662633662463366534756345373563576478866874867588864866458774664576765678485447878747847864745645656555465735756556475523242356455626514
|
||||
135222435553234226675747455457334574476764666748665648478475874575855887577558847558764678877648564847466655545453367557357664436525353562633
|
||||
234254222542423646767664436477456754678586464688654846687648675975996769976985887867557766664448567857476777664546554653737433436464554554246
|
||||
445522335466644356533757454376743574576755544546666668654579975799575575969975789675684846548648646765868564766577436654555475653542536526235
|
||||
433425364254243456336564373577364748887585644685644574485968768789987588895569867566679648487474856568478544576475565637453373365344655226655
|
||||
224336546453556235646535677543467565648668486556777749686887895957676796658898886877698668856784765754645675565757646376476337562555264442453
|
||||
244425556266324477774435346577688846474676588468875686666596785699757969868965568665689985778866855765576548866575363756373747364446454223526
|
||||
245636546453323543654547533475374645676875855665878955668967658858785666779856867957557798588486646864558687568637644357565357633535354354335
|
||||
552366542245544645573374465657465765844768558568889769687777668656779875655657768985889999998587476444468574648743567457566577643234542226653
|
||||
323562262232646543636376355644884867688855686849556597877656665687966869959785995877769887668977687556874575544876575777547666457435255532554
|
||||
322232463233435567573773773458475465465575678695885996587988897898976696966598857768795675877556567567585876664756646754647767644625346343255
|
||||
643436656533333763456776676447546466745868855668775696697785895857968765559787867885998698786579665545454547657646666576777754765435442263634
|
||||
424252236335474734746374535477484457747657549889557757989666896595696858877867967589868879796968679754845777648446546674635734377734232522554
|
||||
256222636255733564636543436475848684578556859596975865686585758678755797778899785968967669978755575968568586774588758377553577477574436222663
|
||||
525264553363676746456663365568786468765458658676685888685675975598699987887897755965585576659597967986676457778758676547673645746354264424636
|
||||
346653323353366343563356554868555475754755986889899595666789568777977887799978879965757775778676987987775648675866455447657454677434252245534
|
||||
243253643646775776477753384746455845566775768558586689985959788969887888698796879998899879659657685865776474677844554534575757333553532452434
|
||||
644352332647455434775337478854886884747579689669679885686956776689679679898898987877678759796598687775578846774454567543745675637765523625436
|
||||
663466444263743437463333547477648585666667878957768977599878768776887797799677888688895556758575869986775586484576467454765537774657723343655
|
||||
562655553735745433744378644476475555889766766575559897788896797969786779968899778766899587667557889765688866585688747884754533734457456444334
|
||||
334423246446476354477666548685654884489585557669556558886696686888777967799798986796799969856767797999558577848745677775734476475644655566623
|
||||
253355446767736365545548775686766565469898667856976556988686998867989899979788768899876869565676795588675668458445566566655545444733366346443
|
||||
253465366374676767766655878868756488857976795955958686879797989866889769697869767667986686779587666897757667454655747774773773343345747365526
|
||||
522336424745466334754587766676487775859959897956758976988978796796697788678977868876987696876987575986557868654666478584854436435747776636534
|
||||
554262437373763743775668447858586865655597899579669769679969769886876699669688876777686776786965899767598879874855745777886676347475737534332
|
||||
452356456653434735763685857765788587657668655685668969696767997988677786796886887777768779878679588588956959558864865684547764535777663355352
|
||||
432452455546453466777857545778684656768676658979689797888688986997669996978697698896867768869799689656575859448668857658545757467365547753362
|
||||
552245463646743575666644655486648586685876676599988867777997998979787897777769666796676788869877777877596596844746568474783565365646677762255
|
||||
553622667564375477447678885554745586565876799768667679678676976669879798789898888868978687787676875656996658658545586667664666776766776536556
|
||||
452532657347544334445685754574676487788666875969898696777776788679979887998799779977666876976688967555688789966847865588887753774756734362225
|
||||
342456544377357677667865766677655866667695655557988977689977787799799797979899997989767789878978885987786967774457767885685436643453737646463
|
||||
644665557475547343776688765884464596885588798897666699967979689878979888987787998677979888887996678879589555795786556665885536337555333555452
|
||||
332432456447374655435756445445644757799755685589768679768768777999889978777799777789667799876967699677577887684486865485555473375557756534523
|
||||
422532644653753764754477554756757958669666689597968789776696898778799888887778978789878888768798856676799759794554656887775553556453356664344
|
||||
364244767665665637574455467844467986956958676866778969696769999897998977987777799989686769677698886875597866554457878658568476445644546574553
|
||||
245532456533473773788868465747446868596776766588969788699878877879979788877799898979789867988869797756668985565844886677586846355773566476224
|
||||
644254454533465366358744744576667999965875885696667688766667789877788787989777887879798666788966899866987597956744645755765647454766534564556
|
||||
442464355637574767376545888568447658757888888899687866679767888898888977799899888789889988879788879565889659896564548775474763557747756635234
|
||||
333255767754464354348674676464748557899996955969978999896688788778798897997887888799788787869666765559965895678446448686647635677335456574634
|
||||
222336633554663355556577645554849758578965885697886768977677998879897978997889788777776999768797999775785865877844476887765566773763545536555
|
||||
423625553777755556484457464488767686766657968886677978786688797999789988997787899978797997799966886788698885677775745644587656645635744572622
|
||||
665636746547373665468568748686548558795597695669679977977878988897878989888987778798999668879669769999899769698558668777655744476577446435346
|
||||
224443453754666756775564574445745569565698556798896786677998877988778788779989799797967698897966789856689999588656665864865736374455336536256
|
||||
452625543464343463785885888767477959795668978779888778986698887989779788988887789777969886998678866686755865789868846888754857773457747773233
|
||||
252552445436673457586767456486766767975985766769896797867978978779878799888879889877689899677897977555789567875757667757865537674434455552246
|
||||
453364365746446547655444577885687679895989888976977869868777997778799777979988777998696686766688665598585866788465678477666677646445363532334
|
||||
223532436533453747745574884564468669966776755687686776867867788989978987787897977779878779896696997678959988786686867756456767363375334736443
|
||||
643444555447473766678687876757588758897795986689788886987667897999978879998777987878669998896786989565868686684646756745468674435675737746434
|
||||
622656666737443564345844844568577587785956565966769678786768777998787897788887798767988697966797756889559958958485867784567435664455547753362
|
||||
334633433555333536775764678768786799696866577856869986777868767797779888977788899996967697796677959898958786864784444577646365376776535562223
|
||||
522245357655777333454857547668745789867965656597878788987768879988978997798979998896786767779799798796688678987874558668547655445543335424562
|
||||
446345254454334643346776568768547668956876687985879786799767999977979989877789767888887778997878876977985868856674747778474744665543766444364
|
||||
634362464655464534538547456668685597798689768765886697798876978967789979789776778796979796987677656795868989745688455776647765374637465732235
|
||||
366236467464443554543668845666785789955879675587896677776969796987876879879777788676798996698685987979586869847885568744763366465446645446222
|
||||
332266633456433444444765546567578785879777987876676998686678866689978668969799699979766986899699855897679896667566758888857467755636643522465
|
||||
326633247777565754363545745757467566567555885555586867976778899889786697866689779996977777999575869758676699475755848657447557463657677462534
|
||||
632545547374354656646458755454565459686885565776575986976768787766968688899667769668696877775589988876967969756885587857875435553546576244262
|
||||
525336365354563464764587775867487677979587867586578897667788988867776769898866799669686899976685577569765556558466558888665566373477554333224
|
||||
546265434664753335655755485856644648986876577656675589887978687667769697969986877688689787969887566759576756668874444745774473736455657656236
|
||||
262655343343756457773456678675446755669777698975988798877769889767988996899968979968888779577579598778769675677547458857536574535544465224355
|
||||
435543266536475556556776867886847557745855868756675758678969678887987877789899697696667788965885669557897647655454684788444375666563544233656
|
||||
432435644376466743436577755585787575868556765957896767577876887986686686686669976977989987965777688686569886564465547476744373753564773326243
|
||||
636242625266656357547373578457748566646789585768897598898679968698889667789667669698887889958669667976766764587457454443567674456363563446546
|
||||
633254264237676436673666474566865687578777657569768976898856888789897876766998888766586675567979669567575878488854488475673747563573434222464
|
||||
442422453547636646757366488464848488845567578869885889899897877776686969987979989965859755685796886875587484548787555767563346346444565255624
|
||||
556525256436634677457677777778446855748678856588756687767686578869887877788988989585787678855996668599448788785574687457377346464556566645223
|
||||
652555536247666673474345667445658555848768986697675898775555877676688778876965786669658559777896675558744864578447546657463753755333265426656
|
||||
435526452244334435563654655755546648766447879867995566989798696759889678877685865886668668776766758767885785654856477574647344455754265355224
|
||||
465355432232747674377367767547587754654775468866858795555775587876678895688966767589885666997595796787468774454745645535555437447462636453622
|
||||
442254665644575643547636435675476645774877677956785886868798566759678676685677658855785567965585865564767448788568857455377654354655652343345
|
||||
533236323633456533676363374468664885464757866479856976596768668869889887967877898879979688796866757856758465784768747545374547665453633564626
|
||||
264645325452356535776435766474768674458786766559597566789977866966899758877566788567656765796756554487645658877885377364777635547444643544332
|
||||
425466363555335334565633475465746886877467566457555669867785776975588776668978799588568868857667444878465886844553453355674675563522246536636
|
||||
466654542365246577773437347454466666468576664764787788578789758885887655588595765688698797797546758875778565874747774564455363772255223334632
|
||||
536645625654426633443654535655347485657567878888764777799797886559898858585558556588659988946458657878758577485743437437375775344364526255663
|
||||
355226223322552453565377474375755787687588655486474669677697689768969678889687897687875675584786445856877647554754764656544447753444263253523
|
||||
552436646345635366666547565643636484477855654458846774457785578588777567598998677586856545678467574864574575754775645774566443542255436565664
|
||||
115242664563525537335743454563664748554748845487745747674787667988999995597985885868874677844877677664677874465363465374454467236432332446266
|
||||
546256356234463633534566734536557346465758764744776485448675579769668679697566558757868678588467486448586866646434764676757532263364666634556
|
||||
321654365533662444457343734736334373565745667844847845767756758466856599557897578556446564864446687576884746636545667454566552326356322346233
|
||||
553164444553652633633763773766565647387676768785765685677878477656456474455568884767876777568877884786875636563643436334657766344543425324434
|
||||
425362524222553425357576543754733533346746648856478564646886455884458878687448468768855864887677445858475447753443543743365534635635636663345
|
||||
551255425355634626252674445363676673645454447445787665458668646665544645464758478687674676547755754886533756374436573655573653232633522245442
|
||||
451244264564434646653234333734366776366545578886684655555646557586676455576647478558558756656874548468457556446664565743333223353262522434411
|
||||
433432436324626324635626376655664375574665367676688658684546576446855844476866468865784458584566754837535645343335545776654224344625543431432
|
||||
431221363322245436546353456334674665573654675687575444764545748588867665458747546684555587866746448676466477337473754755555236333252545223554
|
||||
344212242326426243234443333754477644356336674384864664674684545865644464577554845456476544565747773676357464755444755564465353642366362212325
|
||||
141143345252553552335443226767373637563467337355786748445765648644665848685458585768487476784583356354645336455747544634243326256232322333215
|
||||
215243552434526646366352245346356777555435537337658564656666874686756576888648465567788778765645673636664735545774475633263464535265564525111
|
||||
345323451322543542563243445366775734344576444755734455888454548648566746755466866454755477553657654457473343476333464644433543452245322412515
|
||||
212253245445664452246336423324756565377345336673663737766567784684688676466565478668884757374645563637667347336443423335524666554543512515451
|
||||
134131451146642334642256366556745364435665773457556657677748864788465684874874664864355363454746547457775563756574335253452353433245553143424
|
||||
423425353121422632653246653625656447353464457746547577575335465386584746555786855633556377533365466477343545537544453234624263243554451222342
|
||||
433245544343453456266232265365664675453376474474456354475563573465343455333575336447356643644467533763654755664343244562446256225355244215552
|
||||
142325142211513523463534625656535634746553673665674473665336645537553576676664353473364357775667344643635463645245245466265423423423355211321
|
||||
115554244125224524532264332566254254464644465654755744343343564563577436675647646344563463434545334775547673423256656224464552443242144145554
|
||||
513535352425341354356454652542552432643773465755667456547556457666633337575646437456655343736575437343737656433635456555265425515424215123114
|
||||
254111145121153515335265524345643442263335347354747354353737463753675535653766433347375765355434765677466336233622644226463423211445552515555
|
||||
121251423135255143642444222656525564555437455677663755556435657433533646763577454475443457464555676536536362535443323553362252453321553442443
|
||||
345142233131321415123352352364245332242334365647443335763766363366374637565474377544337676777737647552445465545526345555453535444342534425514
|
||||
342542124355125312256254523362324665464554453757443556537363663773356445653366464463333466737637335323234446242336536554524453344214123145112
|
||||
124313421151344223454132524533422533563225236655474465357745535377767356363573447353573333634576336356555653552266645225212432525353352543211
|
||||
422223413134233114323356646334536555663633363342654565357543536547555335334576473763655567736356435536526426232346436566515224314345213511141
|
||||
213231432153443113313411336644645463445246245333432664656553345547754455657747643347733366455335553454324523654563552624225123234341254225332
|
||||
231131155433155325323533432446635643536336525552643245356736563356745543643736755776472363634323645232424243654352534142354412324243441411143
|
||||
121312534221314523423135231436532262256366324245233324232462546747535364757347546222225455222352262533424656456345641443355231341134514411224
|
||||
122314125212135515135151255136443446455625322523333424335644534335525252323454342344223534524264534462652222223332633155512352113121223542123
|
||||
342323312324532243211351545152655642335462622354442524446263243233526656325243326532665422635633352326326662323431511435154553245453423133314
|
||||
431334132234314213315211423423236563652446256363246236523454664226334465242435653545333333622252346343332645234324121425215522524515522424331
|
||||
314212442212225511445125333213352432542544534352632563425326262363622436663656554522332336546546655426263443432333322413335225445523142231413
|
Loading…
Reference in New Issue
Block a user