From 966ee18b3189981dd91aef92198dcd542a68ec92 Mon Sep 17 00:00:00 2001 From: FrederikBaerentsen Date: Sat, 7 Dec 2024 21:08:29 +0100 Subject: [PATCH] Optimized 2024/07 P2 a little bit --- 2024/07/solution.py | 14 ++++++++++---- 2024/07/test.py | 23 ----------------------- __pycache__/fred.cpython-311.pyc | Bin 10396 -> 17805 bytes 3 files changed, 10 insertions(+), 27 deletions(-) delete mode 100644 2024/07/test.py diff --git a/2024/07/solution.py b/2024/07/solution.py index d85b065..0feefd2 100644 --- a/2024/07/solution.py +++ b/2024/07/solution.py @@ -1,8 +1,9 @@ #!/bin/python3 -import sys,re +import sys, time ,re from pprint import pprint sys.path.insert(0, '../../') from fred import list2int,get_re,nprint,lprint +start_time = time.time() input_f = 'input' @@ -18,6 +19,8 @@ def loadFile(input_f): # and i use instructions[int(a[0])] = list2int(b) # the line with 360: 8 3 7 4 1 is not used in the # for loop that runs through all the instructions. + # This is because two items are 360 and dicts need + # distinct keys. instructions = [] @@ -33,7 +36,7 @@ def loadFile(input_f): if part == 1: def calculateResult(a:int,b:list,result:int): - + if not b: return result if result == a else 0 @@ -56,12 +59,14 @@ if part == 1: if part == 2: def calculateResult2(a:int,b:list,result:int): - + if result > a: # If the current result is more than out goal, return 0 + return 0 if not b: return result if result == a else 0 add = calculateResult2(a,b[1:],b[0]+result) mul = calculateResult2(a,b[1:],b[0]*result) + # Issues happened when i did b[0]||result. Reversing it # gave me the right result. con = calculateResult2(a,b[1:],int(str(result)+str(b[0]))) @@ -71,7 +76,8 @@ if part == 2: result = 0 for idx,i in enumerate(instructions): - print('Line',(idx+1),i) + #print('Line',(idx+1),i) result += calculateResult2(instructions[idx][0],instructions[idx][1],0) print(result) +print("--- %s seconds ---" % (time.time() - start_time)) \ No newline at end of file diff --git a/2024/07/test.py b/2024/07/test.py deleted file mode 100644 index 567349e..0000000 --- a/2024/07/test.py +++ /dev/null @@ -1,23 +0,0 @@ -import sys - -file = open(sys.argv[1]).read() - -lines = [line.split(": ") for line in file.splitlines()] -lines = [(int(test), list(map(int, args.split()))) for test, args in lines] - -star, plus, concat = lambda x, y: x * y, lambda x, y: x + y, lambda x, y: int(f"{x}{y}") -def solve(targ, args, operators): - def inner(targ, args, curr): - if curr > targ: - return False - match args: - case []: - return curr == targ - case [arg, *rest]: - return any(inner(targ, rest, op(curr, arg)) for op in operators) - - return inner(targ, args[1:], args[0]) - - -print(sum(targ for targ, args in lines if solve(targ, args, [star, plus]))) -print(sum(targ for targ, args in lines if solve(targ, args, [star, plus, concat]))) diff --git a/__pycache__/fred.cpython-311.pyc b/__pycache__/fred.cpython-311.pyc index 0890a2d96de3b92567ad6d71bc2fa18fb54e907c..0783001390a7e97b98b4f2ac8b23801dc2c3c916 100644 GIT binary patch literal 17805 zcmc&+eQXnFnxC=9u^l^hLOvjnzytz`OPUWLP#~}kN%-h?vn^2CLMdlFli(8UbnFn4 zI;~q(cS)7IGrjC#c0rf!m2TK}Z;^H@Rl56Q+to?k)vne?mNv2u3F%bnD&0vraVsJI z*t_5J&WC3llYZP*YbNi^ykGOa?>x`%{XNh74nL}>DCh9|(aqz-uRO|e|4ujhuS~nR z_fNRE!bzOOk8mf|Gk=noY;STWZIT_KU22eoH~Eu-} z0Vmn7+pSM~gO9uPJgnT>DIxAI#7F`w=ST=Y;I0eBWhH(}cvTqZ$2qk<2^!t9;3*77 zxrpDB(V!F)gW^zlL>7Y)NmS(cm=cMJ;do3O2}fikQu;_Z7H=&&g_Cqrvz&F&;&IK}j4^q8GH%N7ecZ6;RE4#9sCUF*>9@luC$k zt+F<8JdE1pVCWo67V)g`=%_4F{^}i)*loM$7EAO52A;I(fGmWSVS67 zl&G>tJc81CdqcrUBpMgbqWP4g-RR(v?^<#zvKYpIL`0eDVBMpK>-DJR1|O6g1JUxJ zvPB%nAX4>e-4AM5l}2GU_$?3YEqla(BQHcp@ie3`;Jo3C2d{=8Fb8p=4e z*N}IxA;=32(P&4nbWx7PzdO_ymE?|Xo!fSF zbnfbCZ>M8Ok)`(0iM(qB5<<^bs!@r6zt}1WPm)_|;41vdfhC*MvHwm*RjOs?^z7*+ z&gO1QON(n7mN>qmjRh%Tv9k7x_ibgxXe`=z7*P{w&1@pQ*w-W=ZXZODiR7oJ6+9$DX^obOP^b?A;~6=mFC z2=4f5Gj%=4Ti1i*qbl{B_3g{~_GMiA@aX$!x??}icRiKKCu4gsHgEcS>$$&sw70_k zG4I9Y#}z_vmGk2&J6+fCbY07?>$e=Jw}1St+5vwm=;L1%tZ(#Kn~&kc%5| z!*N#liTUI7rnMiy2`}n>1NPqF2{IEL0P%?_o0|h9(leI*%;1u+S?jRg0SLDM*4PxJ zRs&dD!#}j<;@SutXAfDR$rkL?p{Xw#xhN}uAr*Z{*GUy3!!g2@a3n4d%SucfKPN*c zN29S=`0R+>CXUF#i=>fJs3el1cv`6y;EOOwY^4woR)8YYut$-TQd3qO?9_2O|8!e^|2~6?SqZIe%r_X4ZU5Ck2`sUA(LKlH04q! z@BJIZ@d_mR_4O92QKVbYJj$*8q#~_hng@+DYi9|vVo%tio6k=P30rB+Oz=vRMLUIg zlfLUu2P)w5VdMpJS5e5B_!>1V!+?`tiwyY+tV3M6DSsKjIiEgFl2;^AndO^lAxIXJ=qOH0;M zsm@U)8j@o%6KOgt4@H5LK}lkSCCUJZdebf%WQV}yp}&54C^$9(Kt}b0(THs7^+U06 zTfa)|TIoRnFrHCGj)8Losr8J$fq<=qg3D;ninL8^4G$GyQlqs*MYUH%eJennQC0Ey z0b;|Ei@_0$4I7%l$rj>sTDAhphJqs_LCiX$KJx7fF(iewQlUv)A%Y)p=UsYEWi7=L zx~S;uB2e81(Nbs@RaR5rp}>m(`0Ze0lP^;rofl{r6;c$1^gtoekI{qFm!{%zSv-1( zvTa6uH)S{v3eg0PW|xIJEz}0oo(2j zYuKJ?*#56OJ{5lF`L*X)6~C#-_MOP}oyb-`o2z^_!w%wos0_r9sw{-W{hs5A{8{78 zdCb?u!yc0P{(XZ79%MXF4;c^aUw9@X_NzzMH<0rUWLyIp5A30NN(~qf+=IMzdvM%( zSv_Zcdvm_M8P{Gsp7FpQI)imqCchoqi$Q{wKWVbl zbu&-bo7r_>OJBhLOMh)&v;CLN4qWH?V4gplw~xf)A=9kF$Typl{)qaESfTCfv%&-? z+0LUz2ufQ5ZUOCjOTuEF7IU}rZ03noCwQ|FTRNBGH_uwqG6OeZOYrrq1r*?pE8K-( z!Y8;MHJ(?`Ky4v7t@FfVqd4oS;%<82xglfZ;E4-FkZ7lv62NR6Q%dNH(+ z0nbBl)hN$cCKV)OSns~6cSnmjCF@p!R0bmxG$iOL5HAV>368AX4>_-x^#&^kD&)7aAL|D_bZ> z3k9tRtOQh`5m4F?f1J`@M*!j}67dXO-;wo*IgdyRy`K@!9>a!Pbh@Uy-WW@crTA3u z+m4hYU3EP)zv=3^Yv;b-m~LEX`bq58_M4YJxb)*k7anCu*`D=vfcL1g*)CvY!%&^F`983v5 z$Ix*QX%hOpgQX}W_5qvHj+4@XAV%7v8(3~|w&QGcmFr!|SFcuRf3{p50jLU@=TbK&W-c1MuW&<$1F`5jRAXx=evj7OBH5p}i z4VVs{lSAj>$b(s+KTWUVA!uE2C>SNQN7F<_vbhogwhEq+yA%v7wZ(6YCTa59-8+cj zdpvo~6Wr;>DSpN_kC^4ZM3G@Dap&o+b3a{|;4j-|*JIRqr3(=OKJN&@QyK?fv9)(9 zWb!kK(V#iWxafoO9vZh$^up-=$;KhPr2er{40+E;6pT2w9~XM^EGmeR=-*Fr8Becz zq>e9i|8(z<_uh(UxAx?=_I&j6?X8bzwmv@Hk3c<`tOkT-Q%FpXqp2jrG19lcP`R<& zXoEujx+zMgvB5)CPlbH_c-FHq=h;ZAQ|zf&)Z2yDT|YKod-deCleo-!dUHq-dRbdA zdqsyWm``}mFrTI**|izR7>r{IG13W@2l^3Wq)kNpw8fL{6%dYfnJCwa_@{jD*4qO@qeqy2r zT9FMZp2h5^dJ=--*{CAHJApa0rM(3J8B~IyICH)#w3dRkq>>oR>M3|#;VNJ;5ImVZ z?P2mpkUOtcndZ`7^ z28}>rBp7XZz_))+9SaC~JNzDuvM7%rf_XAP;+t`ucSXi7oS`nLSE1-gEMK8ETb5YE zm44(aEJ>-j>@oFB8AOI_l<7AJRABb2O}-`Iob`3*5PG_Eo^FDM-HhPu%K9G5`5w!- z9{bF{Dz#%~Vs;{V_zqpB`MF&)iP=Q*@M29}@;k879jksXthp_$NpDKm&bKZ+{Z3o9 zz9TDi=7i3S(1{F{HB|977EIe0UA4b=HQaVJq(kXv=8s)Hwa~ZFoo(#Qy1H_%t_(Zw z3RNrBdDpWhBdl4DVdNiT7?#JyH;Z9ra#ieomh6-8I$5#9jBwVnl29-ZtYu2o!wd#T z(4kYcLo&G#fg>T<>VOR_-Gp^-pzdD15SApk)u4(x;J|@bf~GO`T?Qc!0}e*D3#I{0 zZ^3Ycc|*}02raV!AhKf@BAQ*SwLopEUhj&g!JiRPlwJsta)5$91ZEUb1`sjXFf7OW z*r=C4k58!_aUmw9$|1TsLV>FE$`f==c8Wr8pJ_e_7AZX=SlVKc+jxZXG?MVzh{bI|n@DbSk&R)K)WM&(d=C~Oc7EAK9i zOzO&vg?giEP;@z7w4{R=#=lJf)e3}aL*xjpMKM374v@voD-e5f;Vt`>UdW+rq%+K5 zu(akl(2=Epni)f*LU{4G5D#k?mp_1E_cHsKSq^H_ikM1cWRNr(8Cc(}L4`=RGeGV4 z;ABT13KYl;!+q5gWQ-vo-WbOA$+~0I@j?mJP-YqVr2J0wwJQX{$F8)j~Rh zgx}&XRt+IlS8qJY*RD@4Z2HMqc0+e=LwE8uMtqKBeNW_kPh?zAEIK_I=jt2f3p+ln z)=<&8n&s)t`nqyHqAH)QT9@v>+%ea&#JL@nESM>qwogBOr*6YMe|cnXWQlXSk&0l3 z9GX>&mDQ{snmDY2E-$ zAjhVOCMZp~XTg6_0=Wrv2TbsKP1dtM=UGqWyVwD9#{*9Ay}oqSWzU=^>uJb&8ZttI zDhj68#0jX7iNZr@we3&n8Ym(IQ+6|P#&l?!EUjWOCD1m9knNJ~JXD1ervt*Uit_3EN z)_DuEMgALgCnr&2Of~YQ!h`~^d?DRTl?z!cQy4a=pPAKqmGRmQjq;qUBLAA^UW|a$Mkr!Lv<%MS|MAm76IrbU?DCK(2 z`<0Auk8e6YvwL=Tvi}ZUrg~?`XL@FPlKqPwZ;GGZH@)vI{H6LSq<$mk}OO72AZ|1;xII))iqq59hT7g^N6V%aNTth}!QZ13tiSi|V0mTld+?;LbeiZw?J~gQg#z6+aD<}<1V`R&!INgQ?3P`QGi>8DYV#^9E zY4Y7F^6=P5P$AzK7O-NpeMZj(y<(3js34wF+V872^9%G(>x;tLM^l9sp)KnY!l*G& zA-1C#Y*E)gbDvh8N~n#74ywbVc3`sU2;0r5#u==POmS?9q!DZ%)E)k8x!9)2c?W9| z79*V6s3_0l%_?C8*2Us77^r6ySs^5?!F!Ay#s%b@t)zw0+Y2jc`xtfFoAveNd_5Ug z&u3oW?BUe2=}^|YG3VWw99VREX_Bg4^w&d`&z9V?I$*d0Xz`%OEkVFV5^Baol6 zS?46{JcN834Wp9ysP-d8FqwU(c}%i@AXrrmM%5-WIa+3N9h4l*o%|t__NNp%9-qJ_ zHOwWn!B?Ll!0YiIl`tlp5?W#AJ$ebqKC9(nZ0F0G7)8XU;QM6l_~yL8UpODE9UWCW zxO_6$MdEAr_ioGhwiWw(Db9Q_5uIGGs#w9|u}*@@Gmru01On2u!pw4#qM2c%O)sY? z;spv$Q}7~!;>pFSbwG(A@eykB6} zuH9t0^j>b8!#4qTvRn`>vs`#L?J#z?sFuqeZ&j)()i<{#T|KvTep|-7CF|Xi^KQWf z4zpF^)N5p;!_2>vGX#CE3r@let*E*=2>VwxFY5 z$Yo7BEjg^Z{{|*a-BBc!NlwWnxutT+BYC9?$#=~)(D?s#0x1lOngV z%21UZ5ir}1c4@U#v08jUB9ogbQC2`DOv(OZv}MeBkymz@5lE^^ z*zi5oDvLYK`PDZ}m)c02z^D}3z{bxtG!$`WomPkE-wvH0gr*rjUC`9>pI zZW@oTHj*Aw$>NbLFSO?iM$(is;VG0-N7C#zOBA^#F;9$7RiKv@=qL0->uUvitKCtL zzeW!av$s5elK-C`Zf3P?OnB!_@=iLV{vbmS>A7{hFq6fHVU_V%qD$b*MeWVm5?*#+ ztKHX1b@Q~1ciAuDwbqAHC>dBCJPHM7lL;0;7!_pOPg-N-hQbtRxD!PwtYG^b5j^%4 z9L%{eKGQP!9w|F9c9kw28NwbUQz39FZ2o3D@!GKATK$}ls3&`#7*rp=++|o|!ew?6 z^EK%6A)PU2cMRdPuy_Zkm}V(z({X`;8WtP*HkqfQ$fJqL+%PW#>eef<)of5Al6G?H zeh|$`X6h)B<7Ixz!r!}k>)fiyM|;BfW{B+#HAaF4 zK-)e~bs3USAp7LO1)ImF!R7DwxaG4aCV@slD@pltGqV6$5^R9Zgd=B+?w43vBPUI< z)lN%m-!QGjE*!S8mOviYYEYwf8n@s@|NSnSa$Q? z+~&QAC^}Tux$`M~t+zlti(tVl6k_Y8HgO`*9zxb&Ok+y5nd-j%nFjphX@Iv&ACv+__p?@(y@XVN(~`Y7E`x^SUJxha<# zSGWL3@-xoe#=*L9N|+9 zmuLF1*Qef`O7pj!_4K7mwJJrQuE9Cmd^Cr!>1eL$sQ%%~(^=oqobPDHb@Z;M`t|-~ zZ}R24zS_mgy2Z-Xi&d)^tJf{otXr&YSgdPUs&f0wu-xG?^dr)?N~y`s?yGka{~^xi~PlfiA?>AIDRX9`t0vs`1K3Fdhs_eW)HuRJN$wg zpY@%|`OaiqXYN+iq@K@JY3V;}AKh2vlL zW_KOR?b71ZbcA@vS1R7FNK5nG*Um3&&aLmvR(9noyE5#!yShH*rhixwo4)wQtI1av z{k78-i|&e4?OTo0jf?)Oza4*TJauvAwb|D)uJv~*RW<#3A;kgP;9$T$$P{%juv$5X zIIQta#Mn3R>kJPg3d-B#SEJB@U;wz)rq8F2UcY1#LA{ixIR{)2$Iaa)jsWmN*JO-L9Tj4w>luAGQp3$^ZZW literal 10396 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 fmq3j`G$;dCImPl^2YG(o3P