From 45c9bcc11323227c9a17d57b7e921954f5b2acfe Mon Sep 17 00:00:00 2001 From: AKP Date: Sat, 7 Dec 2024 00:07:02 +0000 Subject: [PATCH] Optimise the snot out of 2024.06 --- challenges/2024/06-guardGallivant/README.md | 27 +++++++++++++++++++- challenges/2024/06-guardGallivant/main.py | 4 +-- challenges/2024/benchmark-graph.png | Bin 41201 -> 43853 bytes challenges/2024/benchmarks.jsonl | 4 +-- gridutil/coord.py | 18 +++++-------- 5 files changed, 36 insertions(+), 17 deletions(-) diff --git a/challenges/2024/06-guardGallivant/README.md b/challenges/2024/06-guardGallivant/README.md index 9bf820e..b15914b 100644 --- a/challenges/2024/06-guardGallivant/README.md +++ b/challenges/2024/06-guardGallivant/README.md @@ -2,4 +2,29 @@ Part 2 is: * higher than 456 -* less than 1689 \ No newline at end of file +* less than 1689 + +The first implementation of part 2 took 15 minutes to run. + +* Turning `visited_sequence` in `trace` into a set instead of a list cut this to 60 seconds +* Starting immediately in front of the new obstacle when testing positions to put said new obstacle in cut this to 20 seconds +* Removing a load of maps and type wranging to turn the fully generic `gridutil.add` (and counterparts) into a more limited but much faster function took this to ~16 seconds + +Before: + +```py +def _coordmap(a: AnyCoordinate, b: AnyCoordinate, fn: Callable) -> AnyCoordinate: + at = type(a) + return at(*map(fn, zip(a, b))) + +def add(a: AnyCoordinate, b: AnyCoordinate) -> AnyCoordinate: + return _coordmap(a, b, lambda x: x[0] + x[1]) +``` + +After: + + +```py +def add(a: Coordinate, b: Coordinate) -> Coordinate: + return Coordinate(a.x + b.x, a.y + b.y) +``` \ No newline at end of file diff --git a/challenges/2024/06-guardGallivant/main.py b/challenges/2024/06-guardGallivant/main.py index 12b030a..05c7378 100644 --- a/challenges/2024/06-guardGallivant/main.py +++ b/challenges/2024/06-guardGallivant/main.py @@ -63,11 +63,11 @@ def two(instr: str) -> int: seq = trace(g, start_pos, 0) known_blocks = set() - for (pos, _) in tqdm(seq, file=sys.stderr): + for (pos, dir) in tqdm(seq, file=sys.stderr): assert pos in g, "pos off the rails" g[pos] = "#" try: - trace(g, start_pos, 0) + trace(g, coord.add(pos, coord.mult(dirs[dir].delta(), -1)), dir) except LoopEncounteredException: known_blocks.add(pos) g[pos] = "." diff --git a/challenges/2024/benchmark-graph.png b/challenges/2024/benchmark-graph.png index cf7293be3e775d9abc1d483e3f066e11b8243d79..7219472d7e4f7817e82492970e0ee6a7e0209d43 100644 GIT binary patch literal 43853 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

!iCrMr*iXKYE`3<%)wN9W*dk4(_gsS5Af$;ea( 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

    2Ab zN$4Le}0=WKezqrV^bBUcALt`5k1%GZY$@-xrrSI zyKA1Q#LGT-Kx?^+k=w5}dimn6T^zBoy15orp%b}%5#nvtq5Jl+=;vA}-W5T~xaOJd zmy;*_^m0>6N<v^ld4oatg8q|_k1e=h4XJx((RriD#c;Vl+B=8gfJE>nh6zS` zA?Eq^JX))^ct2DcK8p%EociY2nRmHuw8LO|)c=?Q}p^%xsxVXl; zYRg)mnX^qWonz)dG99X ziu~OiTysmrZQe)X?cMnCo$rhfM84Sc+0^N~&-YBO$SqD5y2FRM`}EzKogV7iryNOI zwoDlgF3GkhGkM+&tpO{`asSmBrsz*1H5KRcjvELVAM|nC;pZg@y@>|EtKsv7wZHwg z-SYXRFH|{(f|)~E_8z+{PC2n^X^ZWZZNT>{KeP96o4Fz_IB^FyN2l{{%;gJng4kO8(UKNxlJl*~I_B*NSQKF-B&6 z_f#^@#H8K(1kBw2pHFBJP~J3c&Ki>x84&&Jhtw}tc5!7-oRSM-x87~p|NarN9>D4n zMkqFANx~P|wk+gcQ1qP=7GQLZ$J3u;WOZ%<70>gbDsOxfq0hbKuM^0J-P#3{_c5l8 z={pnVvR8*Q$mb5&NVj}9Xkldc@ngYeYg1i*0G!WvYi5{|#AMX-(i+&Zk4*^|JW=(10nN#3SjvK<(# zG4Av(2#|VTXBEU|kCWCN7%EXg+D~j{i}N!YAj3ya;K3A~?nVR4$hAzl`14kWYfMx0 zr5ZO|I|%kx*SD++d5kaMFq=ZCm>Vq^n}VHwp!Nh4m%2VY zpA|4Ii^wY|@Mylr1JdX?eKFbULXy@xc5lnXllN4;XjYIuckP(zS;4`K(M5ET0?>15&#W7QOJPXUJqPgwZ$U_fg z)_7Ly-P|z91+XYIK?TE=*hmoo69>>-kNR`=rB9MD^J*>5P1ma^h{mG4QTHxa&SIc0 zR?4ier)Mv$#=KYql;`w8`%VN9NOnnJwjkEwqPljmo@JhvR$|b1H33vEVECwm)35;y z075T~nJwB(T+s$ZdI+XoZBsD8w8XA|#)|s!?#-JwhYMOiem)Lmkd-sVMqQhDC&*f( z=%_6`J1!Gso6~S*pWa?ekQrhkwV#Hnci=@p4Ai8dr{#?GDDE}Db-#6;COuk2h|rK> zSV>L`{#Iukv8|G-iBgfvLq z?$NPzryuZ2K~b_Fey_Imzxm@KJv@*50K2yD{(Hb0A2&@1nC7OO+o(qM)!v4$+Mwd^ zcH;X%Rdf(F%9ui{ea2OxvAAdK3D~MX_*l{tyEPtFh_R2S4%W*{#Q6&D7VRGpfTj4R);Rh0i9KEHyy~xztxcU2mb_E42n>q5FcEtROO)Ss*`w12+Ht z$2MwO+IR?uCeUh(UJY)YC^0>aGVa;4QJJL}F`B!Yv(knYKL$;w@j(jxw9BAv%dn@I z+r_(sO$md;cV$zuW`M)WNHhW}cQOT_e6+2!0WRN?WTBWJ-$Ssg)a} zN$Ip!JzVfe`rJ`V-MEq{>x zP(JQk;@~}m9*S{W?#$o3nYLkRn3s51X@A=kH;b#N~Q#&|{%@2Mq7zA`+1Hzy^?GosZvdGF?p|c6JoWVn<#YKKb@L?#JAycUKVG&k(>bP%;sI zRXifj*m59dRqe)b246PWhgSD9%(0ZsVHhruEN{y;k4JobP>VD`@w!c(TTl*46h5|p zbFx&pwkJ45$T`{FY3MG1p+@~t4>2JRHl>reVYMP0s;HVT1gDtw-L+YyBIOTjC_n33kw=aV|#SgK?T z5RDtnb9M05*&!s7Tn5)&6Jm_TuV1|ZC5>z+{S0QdI5h?=7_Cz~x3I{NaEvdpY8uel zRA7y@;i&pg0M^KKKJj?i^ATtbTcNXiW~nt>+;Awn3|d&VaxBB4$Y025qY`mM&E;XO zhum2r;43!0dndpy_j8T1Gd{>vw$|QkuG*zeXWM94y{TL^wn_kBJcGIEhxni-E$xYF zo#E3n^fiF=>qAHm$X!FmO0hGerfq66%>YD!H7<53oXz|dsct&9Ti=A;ftXuRV;8=P zL}K{Mb1HT=jU7o#3DZFtNyA&{1-`TQzVa=(Q>PjbUm%@Xy&k}Lo?ZRpJHT`A-1cHU zK*!{CitQC~%%V}^K#wZka^Md#=>L%N-qexXZ~HWmPb;E)iF zYkf$C7p4ER&=n(|G07`cJg^0QitT@$9me1*$7|TEnmpaTW{7jUoJXr{L`N_LxK@6_pW(c_}w`+3U3bNdqgg0=10co1YP_ zEOMyyAlLMH46eq5uctZ4BLBQ=U#UH^xYMS6@#ZL>Rg{|5b{nT_sEHG@zhCG4@i6Ap zGfyS4dXynVk(O7|O9|r!-_R6Uw5wJIiLpDU*P`yv4#BLK+dsWKE4zF2#%3`^0Ey3I zW9h_S2=5Xyu*z6x(KIZNp}*{rzz~|*dSz{3t*y;Q6%7r<)C4zV9UPE~AHSQY7sbK$ zZ3+#VY|R6`nEXKg%!xY{fzdLbO|iu)2YhVlzD|W??D8zWYI6&cxS((hZ_id06(Ht2n;*>#*;xbO={#W3rpyR!8Yo{*0F6ur3kP@2OIrF(#-KxU5UZI{E z&_uXv0wu$kH!=vRqJYFdWXH_{{|-f@x;zm3?KJSV@&nu3x}+A6 z3@|_|6mkE40;+!hHIuQa>*NRRq@N|tISoumlQpeDDmh}wc4#W3FL{DpbqDV?9BUqnO z;f3bT)ZmltqGDN7%?l0uly+_P0^+AJ%epI>HjsFNA3oum9o?j9Yem# z9C0}3T!qFXA_JlmM-^Qfx>sj={bQi)asZLSv0nUNAHTh9z^79X_vnY#(S8&2c2YUn;-VSSffEs1!2 zd57%qmIJFu_&Ct^c8b$NJaCVU*KMy$HhiOHSzKJ5Zp*I3r3B8i8)c&~5yMZmk(!O!S1Yn(IS)gP)U@z(1CRJZJ`-7{D0+`_jCtb?_HSX6sl;x`N zcF+$#^CnKw@mJd>rWS0UnFHn#wfk2vkZEWX**qs&zE7q@lPT>3q9EB#Pq#Jeqy4=f zRbeB$Pj>%9oszhx>iL5qM2ReB4CUI`jClS2hhp>-lo@&)a0%jr2g>BOTOfULD8*Lw zza03VqUe93S4DkfL98^+OAtIlH)BwdmPqImY8TjlM_?;K;vImcy^eVN9Xp-Mf7$BK zPvsphP~XQ4=5y!x$MD%2gDgq4Lu0ik(9Z4f7!tY>Vwz3m92TF z6jhSLZLSD$Eq5Q*oWC790S8HP0=pr`>ST4UOnFSV`_`3JZS)qT)%?QWBBG}>M^fqz z_9nrC$%ayzKZ%DZ!V(beP0Mq*=RYy@?Dog z8wv1^5Yas5xuF&l{A*--moauZbgK&Q=Mhu2@-OF*%q$)#-)e(t90+m04CzOPQOFML zgw!pp3dcQvS=#QJ$Zi&0e5aPg^yGbCyW*3T@7}2rQ;iJnuZc9RqoatJz>vWBejOP( zqTxQ(HXFcznxpzl8X*uF%+Z`R*qk283_GLDwQJXYU35k#cWgx&R29J%JiPxwv<4iAc~`^p}D-D2C9 zeXiyY8RZQ_r9q*{rU+1YDUPRf*q`cyWRR+)w$beA>x-uUD7VkoF52g)dY5&7HfjI2 zluYe!o@qYqTX=`={NoQ?jT_(!U`3F=ckiBASMh(zu!pa9gv1=u?4zOo7~QndOi(y% z{fi&Wdr-XQH?2Dk(*&o50QYWDQQf0Qj}q7E*}rUwI57LJLV#W6N5nt- z>@Af*e?U+He}e1Y#jevDN9tLH-y-Yqi>yD}|6M$i#)# zGT<6sKgO{kB05p%s*sA99^>E#P85VycYt!NXffzv$4+grPJykJcqz#-03c-~Eamt3 z3cu?oAztdot*}E_E;q{V9kP&}{hinJcsuDJdg1gGs|oeCNajRTe~43dX9uP!>i3m= zDN|-u!|}@As?0Lch&T36(ke@Qv2WkL^)H~a=(`MT{r~ZgF_+LY_>1nn91vI19fRummlpNPK#3rA* zh!|85iJ_Ssp+POUM6@T^7;y&43Dbg0I|l{^)~{c$jHR-AP2vXR_Q?l9R;qD7lR#E= zUu%O^9j%bdXkjNqmqO}L^CgFq-0?s8^#2a32_9aGh{^1$=7>p3e>~_(Hp|;UNgW_G zI7u=j%hBjV{DQwi5$Y2Q&k9WwJ09=3kgWwxv+M%N82^W;jhzHyQKhYj1ti#`c`Jul zEuAJV5LcG}L=!VwpcMEny!rE&B#LV3PMRl-(`wkC>G7=-ACr zdm+rr{gsVEEk!D=hts*3cs9d>VErIN`ezZTy_vvFZ&SkF*q?3nyG6BWQ*fDbmd89e zj9Q%~E}^)A2n$iU2>Dr%XGK!B+ndVlPU8&9{Zjy~OWR8E9`~Iqo5DJE!9dIGp(l

    TuP6!@sbKtzde3(+4fEg30(d6w!F( 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 MGD^3xQum+ye>zYDU;qFB diff --git a/challenges/2024/benchmarks.jsonl b/challenges/2024/benchmarks.jsonl index 2b38f29..3d1adfd 100644 --- a/challenges/2024/benchmarks.jsonl +++ b/challenges/2024/benchmarks.jsonl @@ -8,5 +8,5 @@ {"day": 4, "part": 2, "runner": "py", "min": 0.05280470848083496, "max": 0.06299543380737305, "avg": 0.05627016305923462, "n": 100} {"day": 5, "part": 1, "runner": "py", "min": 0.02001357078552246, "max": 0.030559301376342773, "avg": 0.02152919292449951, "n": 100} {"day": 5, "part": 2, "runner": "py", "min": 0.02507805824279785, "max": 0.03197765350341797, "avg": 0.027084295749664308, "n": 100} -{"day": 6, "part": 1, "runner": "py", "min": 0.0671079158782959, "max": 0.0671079158782959, "avg": 0.0671079158782959, "n": 1} -{"day": 6, "part": 2, "runner": "py", "min": 61.63975167274475, "max": 61.63975167274475, "avg": 61.63975167274475, "n": 1} +{"day": 6, "part": 1, "runner": "py", "min": 0.05790352821350098, "max": 0.06762170791625977, "avg": 0.061776439348856606, "n": 6} +{"day": 6, "part": 2, "runner": "py", "min": 15.881408452987671, "max": 17.086341857910156, "avg": 16.64130985736847, "n": 6} diff --git a/gridutil/coord.py b/gridutil/coord.py index ba973b8..9b4d7f2 100644 --- a/gridutil/coord.py +++ b/gridutil/coord.py @@ -9,22 +9,16 @@ Coordinate3 = namedtuple("Coordinate3", ["x", "y", "z"]) AnyCoordinate = Coordinate | Coordinate3 -def _coordmap(a: AnyCoordinate, b: AnyCoordinate, fn: Callable) -> AnyCoordinate: - at = type(a) - return at(*map(fn, zip(a, b))) +def add(a: Coordinate, b: Coordinate) -> Coordinate: + return Coordinate(a.x + b.x, a.y + b.y) -def add(a: AnyCoordinate, b: AnyCoordinate) -> AnyCoordinate: - return _coordmap(a, b, lambda x: x[0] + x[1]) +def sub(a: Coordinate, b: Coordinate) -> Coordinate: + return Coordinate(a.x - b.x, a.y - b.y) -def sub(a: AnyCoordinate, b: AnyCoordinate) -> AnyCoordinate: - return _coordmap(a, b, lambda x: x[0] - x[1]) - - -def mult(a: AnyCoordinate, b: Number) -> AnyCoordinate: - at = type(a) - return at(*map(lambda x: x * b, a)) +def mult(a: Coordinate, b: Number) -> Coordinate: + return Coordinate(a.x * b, a.y * b) def manhattan_dist(a: AnyCoordinate, b: AnyCoordinate) -> Number: