parent
c0b714acf8
commit
44669ec012
3 changed files with 191 additions and 0 deletions
@ -0,0 +1,81 @@ |
||||
import math |
||||
|
||||
with open("input") as file: |
||||
rawWeights = [[int(num) for num in line] for line in file.read().splitlines()] |
||||
|
||||
Node = tuple[int, int] |
||||
|
||||
|
||||
# this is a performance killer -> O(n) |
||||
def popMinNode(openList: dict[Node, int]) -> Node: |
||||
node, _ = min(openList.items(), key=lambda elem: elem[1]) |
||||
openList.pop(node) |
||||
return node |
||||
|
||||
|
||||
def getNeighbours(node: Node, size): |
||||
x, y = node |
||||
return set(filter( |
||||
lambda n: 0 <= n[0] < size and 0 <= n[1] < size, { |
||||
(x + 1, y), |
||||
(x - 1, y), |
||||
(x, y + 1), |
||||
(x, y - 1) |
||||
} |
||||
)) |
||||
|
||||
|
||||
# Dijkstra without priority queue -> super slow... |
||||
def findPath(weights): |
||||
size = len(weights) |
||||
target = (size, size) |
||||
openList, closedList = {(0, 0): 0}, set() |
||||
dists = {(x, y): math.inf for x in range(size) for y in range(size)} |
||||
pres = {(x, y): None for x in range(size) for y in range(size)} |
||||
dists[(0, 0)] = 0 |
||||
while len(openList) > 0: |
||||
currentNode = popMinNode(openList) |
||||
if currentNode == target: |
||||
# path found |
||||
break |
||||
closedList.add(currentNode) |
||||
for successor in getNeighbours(currentNode, size).difference(closedList): |
||||
x, y = successor |
||||
d = dists[currentNode] + weights[y][x] |
||||
if successor in openList.keys() and d >= dists[successor]: |
||||
continue |
||||
pres[successor] = currentNode |
||||
dists[successor] = d |
||||
openList[successor] = d |
||||
|
||||
node = (size - 1, size - 1) |
||||
risk = 0 |
||||
while node != (0, 0): |
||||
x, y = node |
||||
risk += weights[y][x] |
||||
node = pres[node] |
||||
print(risk) |
||||
|
||||
|
||||
def expandWeights(weights): |
||||
size = len(weights) |
||||
parts = [[[val for val in row] for row in weights]] |
||||
for i in range(8): |
||||
part = parts[i] |
||||
added = [[val + 1 if val < 9 else 1 for val in row] for row in part] |
||||
parts.append(added) |
||||
|
||||
newWeights = [] |
||||
for y in range(5): |
||||
row = parts[y] |
||||
for x in range(4): |
||||
addRight = parts[y + x + 1] |
||||
for i in range(size): |
||||
row[i] += addRight[i] |
||||
newWeights.extend(row) |
||||
|
||||
return newWeights |
||||
|
||||
|
||||
findPath(rawWeights) |
||||
findPath(expandWeights(rawWeights)) |
@ -0,0 +1,100 @@ |
||||
3987747866912372378699589111691685987927655781731129891993417991549751299519163199614135992288259915 |
||||
1298468647995818583786612276689623248185357694429712964833898932189561826128699577847128196528897619 |
||||
9837311379191999519115682454597118537613483181915586394732473772994298997639661517161972887398121988 |
||||
7668599952946712556341843271115878918719366648112619895686729828256178998863298512929718714715392919 |
||||
1929853317875494137821196666891592794189989988817889479991989729313186981824497989752417279218877663 |
||||
5924639123234787619929121414997517981485119877851618373249649587621991771281822369848969149583697517 |
||||
7819896518795973795186577396198836319248914996997889992944437951837619289428995167525152945151124452 |
||||
7329415932432117461279987773799811867699866858119259983694719381912437118828915675138999689916492312 |
||||
4892271953741944119453159711873397748529898291791999991767971277999412992421769281559929888763691971 |
||||
4495956566793739971931875548699487999277259897383562935292186511968837923969215176996347887768989971 |
||||
1132488414433789473442968988799499831958157996796847169831622257996981238551597884171114772967988697 |
||||
2741913298249919173975588999669523336184912668958391943959942817781539292839797389976225699525893326 |
||||
4888497967819539598257152981159881267899262798176661119919855243399795594171171363689693185656593194 |
||||
3953398928734328192877491496121291969949612682988218219289141719871748453119839897157184299359291913 |
||||
1942721843891479948789333719361693843169791919763997275997227139782398283878994144329991961216958729 |
||||
3212974463695832845951819131791525658129577219335948467936961847191976916725596917897993828268334689 |
||||
5299642899597976991113911891337376876513116191942514768598719391698655628779993268513191914349179928 |
||||
8821697765648971724962613295764154982826771599159999943496591929429282511368396118882678342188178916 |
||||
1322319567727922398717991814958997159469713499621711725594919477398839828999799181573289781897114737 |
||||
5357394896821977689521893995331873959725361133757955793581989894892551526833148464438979862918556948 |
||||
7744172589764696856981591587469881191239683798625647174386174975419847123923817636927979988189154199 |
||||
9249837641138391933693998597965392215881922139235234649667683117163694981181416623527979711882926519 |
||||
1999942381931459128381113754867797717812997266991765839899942919565678316628739917213597819341299488 |
||||
3299981997597813971149291981349339448863699728127619189871167559249757289999929993539138237765921773 |
||||
6192539879199493229625789797261478565298231567929273352334632388442467717977951478225793996328971196 |
||||
1127629184232746642388748881414446666881795295717291981632758967546891736171133257813179792374941916 |
||||
3282391483565954989861663869412999989735635216649963491948114772798938772543372781695747121521189881 |
||||
9999183761948979821785718369979735723911815486989232656257717441184118261749699851957137589721444769 |
||||
3794856111831283759149261957873924676715727929648971321793168836678188171611649291879289969987992671 |
||||
9815889925519325467993112819921999818541939117676296994821956496599796985968215931942118479162535532 |
||||
7521182683563929947693851989899712768195833919161769182151629219111396773989215325189627483696959819 |
||||
6253743891259963455971958157395619689897953967889775388223461279485198119182563849951415318961968993 |
||||
1317331959889621169211318793399793181237394915288887517498191575218991942958697177934984298988186718 |
||||
3561584368717889859691618891831149657786834914486191178218832244353289948268393788527998942824289386 |
||||
4179818651186137398889398319179911516139285999111893113479829739988398599289325818291589986698988828 |
||||
6198765318999434649196658516939859999288781352558574887229183117973891563712655561251729993745171342 |
||||
3991121426947959681185174365698576153576926612771187489792259196992895719592455393271626972931361367 |
||||
9959981389589693579287378469187538499999896837236287689599842876946289398936969868189179786695286797 |
||||
8491514839865139774984138715811281288818816856967382855868976896278692122291492951861439914792576568 |
||||
8298995159167911575965511891237591836589686787935287719897313848958993182842899887912719198142136957 |
||||
4931228537399168779867818719934993491921765992295919989216998199779318589592124995259912779611559548 |
||||
9947978219386795985624125198921839249831267999897124665353936122182972997113239771948612811486413343 |
||||
9136871917923168937891911994618827592543189639291934898789694939729994554895844298495947448941898995 |
||||
9916462361451258774449629288949995291492927118443595166349892221587216864598727588894619124232729921 |
||||
6157145955679371971116189694468944553199479919216614443549777791159277498949941297399198687919698113 |
||||
4754157894411299151928983433916835479971396719615265654639189999191947181689168213199675739421488985 |
||||
3792389854256287755499275283378189774595891168949679238336593868399464449516865826757392863569135947 |
||||
8817779899978122689636847237588795591963918248878979844298217896981933793949349387899811987139153696 |
||||
9992178418183893366299533177992439457683779882592396384351988419161863135918986411296253783147816699 |
||||
7519399876643486958588928463356668895568199979421915196738915991199391117678126583498915188583892958 |
||||
1989396525978812986718694578811249916999126179761717519599815359998986939688121586899763144211191699 |
||||
7889839919762137551489154267166355631226931294289193999259258899574117619233919487994881918598993249 |
||||
2974991392873692692925999398365299823596371122843864593228745219267711547459787246249723791385119747 |
||||
1219539228881511219644395768936929988899818758131174583257899998329939782639972165849568495355978985 |
||||
3695329793197963178869962815233156883999144549497127969711366994749877882881393961931467466116994214 |
||||
4129797987899991197819797569959225398289491141725297823989825276934169418348299218681388511196165647 |
||||
9918151646913785991575379596178339996931799179918974918911691799351143341788914546192191495275253438 |
||||
7285918592444378519561815899893241187918699764689564787914758739534649659499998227763151827944753169 |
||||
9999874998278595127442329891355829418692185986971397983679379912984495884989998978156979937929842799 |
||||
9232614577999128841119936647955917396188258997789864519745919187599871196998942169182229118783398765 |
||||
9813829898689736964672866997312613551251499218281468659498256911533648957919971985255191846999215653 |
||||
8998233646912331996944964663266619213921717553931951159988632381354189215951161413787868799279829532 |
||||
7694999889699942426179748121657617963189973789817189919881392564769717992349291289961282197894957219 |
||||
6947868592998191162549329819956383924991634893487198285182198889592395821712741287863147891559831499 |
||||
8999112885485648397519967499544474144591689542997194895791917999891979491821319751164513289869381957 |
||||
1991692949496198491758751311571677851651387121939984798938486276921973987451199542199686491951231722 |
||||
9863379299698231811298683649398634594852449231889616429857984496799916642986554413391818389392966461 |
||||
5941618753539995999121859548997995198628913814614977189927924899169258919655299872695969995491725399 |
||||
5539986738297497865537399115235532879195978948699831741999199919993198421559378992124467361929989578 |
||||
7765443948377671521569616851529928699942593798719183149271829859792199899951899583997396716233918219 |
||||
1251217821683779797263628823768352991943589799181368332916176391966539476641397927197697753598219569 |
||||
2925495231774876483329321237627893844811275479896199919813319741397826867114191514796187999641513826 |
||||
3499282961932527896783918996176393279986156143748113861947225996598937983637891378489165193293589526 |
||||
7879699719781478144397157376716593517972766196436254947683862889939817917968453977856174584212464962 |
||||
3859894795798289842917897339523581937929198796839892628291934947743839829319891779122288951995832262 |
||||
3963348259278259868288978888886999225389998726551642944716586439577131275814344379767417729972898494 |
||||
2351563967718779382956962397918686399426489313536727988986473188238169148386853768288894911123995972 |
||||
4566894549389199668929615898915821395131227285989339399886932982572817913814912274389481982768619129 |
||||
6738278929925918376262191161527336799649477171199639928748797233984294792191779374597398594799922299 |
||||
4998894122988259643856987247717122712665863871197196387495185871758239847998772488253281839311877985 |
||||
4429828328796272766887311377994857996859162671999845399626993191988189981724164282921498983269979678 |
||||
1164569681748757669913489823321998818325331691698198277553319951698769919949989955191921899599718575 |
||||
6177428972194882751172831163613968496965988236195965945888319619599138793231789814797151565397998582 |
||||
9495996991853259415828712492971495399144997161578933743231999443999151132926778998837894149149189189 |
||||
9795397685686999379898981486233499654231185599352788618915165549688176991453935641879665967957961356 |
||||
3856933141899312599697316683385849666511314177119618659889328615766597193991844919427596649416189444 |
||||
3611348969793649671119437127894498885785425988876191218668993889175996994871296179153666946862675923 |
||||
9284262311988999662188694877549898129911979448721188958785156928199331221775138116328365671219795894 |
||||
8556124136987993777567989912927619231991159743421981873749126993891691217686428177453479672551991332 |
||||
8758919777271663183499673146492769947178989539921978169981167832679239329381716223926135393569857399 |
||||
9693639113228695749898869586974119129637695875398818278812599496513536925919139539195361761661997836 |
||||
1971971157589715317685259116989971887359199792269892587955992578121399797719625935192667159719162949 |
||||
4378473742379198691797958494911995854877334823298829996799688897467111969879419436285486624919919791 |
||||
9776793917968144796191784469416491951792981976317498578433926785487921979129199377925358358946686899 |
||||
1911749635854781158839458197267791497421955896242793138979383929341192216619471649997556718296191982 |
||||
3922593894796259637836649698224899545878914266119635916953791716819481756437297991978997359238671292 |
||||
9959952814925947145762596837698663199777378115973946993711329399178242178934383199849654154114529948 |
||||
6111989752116239899485879148998691759892998977899172616119478299829332924575132618979412614691511195 |
||||
9183473625115559878297612713929779999988194828441892889773271387893175317763491576739892293297229943 |
||||
1456473931721698787995562828993762297498689998699535455881892534296898196126756968597779913784918896 |
@ -0,0 +1,10 @@ |
||||
1163751742 |
||||
1381373672 |
||||
2136511328 |
||||
3694931569 |
||||
7463417111 |
||||
1319128137 |
||||
1359912421 |
||||
3125421639 |
||||
1293138521 |
||||
2311944581 |
Loading…
Reference in new issue