From 55345b7c765ca59e0cc3029fdd22ec9f54d18f3c Mon Sep 17 00:00:00 2001 From: ag Date: Sat, 21 Sep 2024 16:19:03 +0300 Subject: [PATCH] ideal_cache_1_ver --- a.out | Bin 0 -> 58144 bytes cache_test | Bin 78408 -> 124096 bytes cache_test.cpp | 98 +++++++++++++++++++++++++++++++++++++++++++++++-- makefile | 2 +- 4 files changed, 95 insertions(+), 5 deletions(-) create mode 100755 a.out diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..fd0574d0b1f3f1ec3f0d8c9721e61589d9b4bf77 GIT binary patch literal 58144 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 R{GVQwIVLMcxqvHa{67?r?^OT* literal 0 HcmV?d00001 diff --git a/cache_test b/cache_test index 976f43e36d1f9a2f7a9b9c5e8f1fd96e40062bc7..0cb9ad8e5f5902224e274bc8e8a8bff9a8b661be 100755 GIT binary patch literal 124096 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 iet)b;06xH|Bt|dv%|e@aQQIo}RX@Y@|ja8Gr_u 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 MHMvpKAo$q%KVrCRiU0rr literal 78408 zcmeHw4}2BHwf`n0h>8#`Dn+Z&qD93tH~-_G8vb0ofdDB?Vl% z`L&egL(a}QGiT16IdkUB?Cjo82TSH9Cnb$D_!?(?%t*rhy7MHWi1DEd2`jH6qrf=H zC^FKGvyJgUrQm;&B#nT3lO;jH37n5Aq;gZaW;Z;O^C_rmCrIV|uBlTcML{D?rm0*i z-KNtYTN`MO~yXmly)E?39p+;FZeW++H?&{g(otma7SE9G+aD^m(aIz3Y71 zMgAil|J~QOefXF9@CSQOJ~Msr#Xfp?8Tq~X@uxodcRZrz+eUtu~{zt+AF!xS_ZjxIlGXxW$aMgrl+6;_6^2^U`tdJ{g0&9=D zs#jJ8SBg^p)s2u))*fvSHlSo#tlpEg%(R3=lp-{7lgrKWOfy)PZ;sZ;vK+H4*DMd1 z!Jv??slGKRnk3lH4IHV^&@DB$ES3{#tf}`@iNDBs=zHo#-;VLo6e?Ye1|3=9yl^u* zw$8E1a9)og-5+yT@trSq1QHIccj>m!ZJV|Coq@3b`#rNK5(sKYXqtW2}C zCE5@%TOxJg);hDfsXki0I*C#!V zi_JhrwocLSGqM7XWFQwoOET7YDdJx$R&*)&Pw8>u-*NamfiW^qig7&C#u+DwyHt^z zN+e@7N~t8{MDaIC(1|0Jl~)p|Q?U3~aboHDt4}nLeX?UW6i3qS2EK)S1J$ z?RR_u5%O`y$2i?KEqXkyM2oHRFV^)gnE?sNwW4zJEO;`c$Kp z)3FOahr1NxMozB~`NtWzaXKQ>$;OwErc3RsaMGweU*d~+-$dc3Uo7z<7e1ZyPvH1b z_v*?04q~SBP{KFbP zpy8*o{1h(F(C{i=hVsRpfg-8+n()~Q3D~|(CJ=7Jg6wOZhDS$R*9Hxb(A~OvG`zA& zB5v03RJXdeXn4}Ky6)BRB$K*&H9QQ{x^`&z6D+J@^l5ku1nb(Z;U`*H^sk1;z_6~p z8h(<6HH<+GpQhpC8vbMrKcwOHbGALwESB%`~@2RUJZYd zhVRwzv{qNw4h{cNg#_%=@R=I^*zGY59Mixt4II-+fk^0{?^i?y}Mp@E_cFhn1#4|KPrxtTY9;2luV8(zLKTxG!v_ zDbPQ-@8edQ0{nyfW?5+p><{h>SZNCA5AHk1N>diwu@Myo4robKTx6%}_qy1Kz0(G?CN>hN2_FHKR%+Y=;O#wODZ>1>^NBgZb1>k7E zm8QTO?YGhtaHIWJngVUK-%3+}jrLn<3ak(AOR~}wP#@g)mw%}Cr;GIOtTYACXup-F zz!~kg(iAYG{Z^U+WwhT)Q-F;2TWJc6(S9pU0WsQdrD-9H_FHKRjM09ThPD1_BU$TQ zL)a_Q-CfS~Ew1!hSGvuWZg8a|uJkfjy26!S=t>7&>C0W|Tvz&HSNc3x`a`btsjl=% zu5_v^{g2z6`uUqH{U=xYRag22SNfN(^wX~NW3KdruJnJq(%*BXzu`)M&6U2>mF{+> zZ*is9y3%c~bb~7$aiy2J(iN`sLRUJdrvrZ~?tJ#TQ0L2`j#q|C%Y%Wwz!RbF%U^|C zOq`mHoQG;NCZD|?Mh*wveR&j^PA|G(fng_^r6mYLY@8bGI%3KQ!)q1j-jOW zeX(5VqPUpyJ&wDL)Jo8&qj;$6)IV*Yl@fyzfk- zsuV#;bBHih=$0ws?(tCPuj4OS$f-8+N!)hHT-5_zw+L3%yHPMxHntGGb=Q^DJ=Aa8KSOu@@p=%UmoCu(pg=2R zUqV%>YdAZQbCIt@^i9&f=g?-bD7Tm`XJ%)QWOkXwEYD{4chRWSi!BD{GlLh2AbLq? zLdx@Pg-o4jv)C?>Rx=%{$wRzhwI5A-DPBvtyG~tvD>YiEZxdl`9liR$)I2h{qz<8q zBqECD^v7o)K0&gS^|=puq4^=AI{GS&2wiERj@PD!x=slt4UmGbM@8%VCf{U{#;rQ?;J-T9SNg-)q1bg@<9-Tik`&@$sG|>yfC(;sYc+nCX#9d2zkRshA$m$zeXL=Bt)*Kj zP#Q97ij{5oE^(4-=|yF(A}_q*QKa22Lh{8$+M!9TXwo{@zSY?_+_Cnpq_#_MqI{Ua zvS73SaSNGvfBfgfr8{+82PMgvs|4Y3%!V)BEVFzcwfETl^APcPm=-(n&to20W_4Vs zbL}uXZ79?g92$x3(NG-+(yh#$74cBV+PKknoY3BW3{qga77`n<6OR3Be{)DshK3b@ z!S2qsT`mjh3hsI&e)fjoOY7FYWWK7g77}Q0KEhrl(GnzrWq%v@lwIZ#j_V@P8IN>Tpq5u? zJpU{nMIAlJLgP?Q?y))hFSC1A)ciwYEBk#1)U2qY^8Wa%hb-!sL5<%@xrrvaS*$uK zm>^wtwjJsU9tv%?wJdwSEBMxl!C@OK^iG=XCtEf2UQyjgJ%TR$G0{VRZ;OXI2b|^q zI{9Q&1tx!;oEAKUltGD5e-Q-(#L^*|pmh~ZaPnY78Afjpg*rK zal*h8i>AF4|38^@m%EBuER|D4DsC3(3OK$~LWKj9Ki7wL7t5+ki?nvsa=DW3$|5G~ zikv0Hd9q7jFv-t?| zz<8=z2=Nyo&$xa6KzE7yESvhY;6V*uveatvVkuLPP_}IzE3Epq_;f?DUFD5j!F8%XZx(d3nX68Bq(>80|%=OL&S#rxx5 zkovLYm?HEZ+zfvBPm&0J#X!?K#FRc{ovmPcbpifB6Z|X4s|)@ogakqsDfkt(;B}pU*5?-X??pVc1M1 z>E|pvT_p5nrzcSQZG_R9i|<_fd}rI<{@?+ce!GHuCx5@MGdP4Bgf^4Ezq2!l$PCEf zq0T;Z=r9t6!RK33yMhPy&+7_4e`#>2bpjF{eM$TCMEVe?llPyGbf_>myi#TuxBpZi zRA4sT8GODYcpzo}_Z*>BytD0Fh3*H!#ImjYfeycl_)Kx)&UObevvlE+fsj+-)klvq?v>_S6Cb8eiRD_wK z?vpAcdBTR|j)p_Y9cu@xS9Rd;@hdMy9aI+@KMby-5GE_ZGhO33i~*P?(o<-Hj&DfY zKM6%U`Z8rr8`2zcA|lpN(|T{C-)_Z_8ZCMli@uVEBt;P5wO6}8UoMdB_|#SJi(1~P z2;oPQ;pbz>xKrcx1;2XbB8+2e;b%_7VAUgNmxMP9vWi(m#AorKju;AcVV8C1i1Bj8oxT8NO);rr1TV%c;)1tACFnVj_<4pS@D5T)5IL`h*;W)LSi;K z0Jg54Plu*4@7a65vb}L_*$2)Reddqu7WwjnP@fkIZCIpds zwqmpEelInI9gC?Jy}w9q80fX@wW<9DYz_)x#h5O2%d3}wd^fo1BioaSZrKZ#_)iuW z-(QXdG%RdS*e#Giq2v4G8RC%<*%hq<`{OgIwW|GMttc?Gry_C)gP22^C|MYcx82?2 z(63yYf>+zXh(S;>pfSl1HIXF33{gVxUMSJ1ZXuCSqK&KWk5{vB_Tuj@DGB_!a{xW~ z@?m*0_yMaAuac}#nUhtEV5KaMRt$Ae@MbiyM{l5b$cAXVGuR6bJ!ohzwp+rK7Hrx}rKfXrNu#{iB+lYM-Xlqsf8zOZtov`mF8W3H}WNqESd%3n> z3;M!uAzHr|er}++b2oM!5d}431QWI$C;AeagoHa1wSSy;FQju>DmOBO z?5wvYpwI^nx%_4jszQ$+vgLwh2&!;I2>F9=5(g<(= zpp9*Vq0S1lLXO>sM2G01i^Pc0Jq+QHTa2+QUKH*sZfUX-6NO_GvtK0-qTH02sr)=G zZx7CPPdKu@?2DH=scz3@)mfBg_deR14xNd%?!O2vMH@tW0Q=)ZqQw->iM?Co678dx z@iBA;jkagVIca($UeGyQN+)?8M;`=GYJFcDMjMeFj|+-G+Mndskb9*7>AdtKEZb4j zH^9y*mu45#x`jhOmPRh-gie`#ns zD%}e^>s*KdNdL*^V0&U(!5k~i!)&#Vd=sT80Y@B#22o!9~ET-aCA8QcLm(G1KmWZBEmDxjdr6Cg@) z=VM6rQF0$R%9sTO`{TQjEa}`Q;uL84rT9q{^^!t5XHV!sfKq?}W!5rnkI9PXg<23p z;5^AR))5LqRZAwY7AkOn!f6-H5FApq^+ND_A@~*uzFD7kWPHB^8x1h+{`fCN5J$VF z_}@wGL!-Le(*^7*ohl)O=vufL8>aDBe~V|kkKlPs=fXj9os;hm4q_)X19Tc5vb@~8 zDv=GnSFn)1Mkmcssuw71bcMhbLJBnsyX}!BwtyLBK|2Kc4uK~97fr=RC#~Hc7Mjf8j>R zs1p5p|dU&Qgy5yvYs@~0Ch-4UBf7Z|1|8|tU{kb%f&RS*|N9S zW3255Deed{SMx&(Q28 zrpZ1kb*4BqfVC!B&~u#s8L@F09I&FLHwA-beQK6(6m{=KRa!8R8qfU=bs|lww)b-M zSZSKjS&~nWrJ>1CBOD4OyBBqMY0mH)Z76fAqYPaN#S8g;h+@xZux^T12aeaKl? zso6IZg)M7G7xbceNcYG84@(0p2AwbLoBTa_ss4DKOp~hjVyb$W7S{2XU!ZY{{SO&& z_tO2v9NPU&FW&*|ARsrRJ?xy zg%VWDCx1bsLY9~#mNeud2RKecDDbm*0VIw;y2m2u(f3>6v?{8-&8lx~IQAe)K zHWdJ*{7yB;~e?v@Sh z(>z9Da7WwKsH&H`0J2UO_hczFm&g$h`w|20EMYK@?oX8`?|9J4A+-WgNh?SZ5QAqMo;=A}1)3AG zE;>ZEQh~f=>;m;5WujzP5k+h~4n#Bw19Z;#bDpKV&KY0x6xML3C8zGoMocI0g3!it zF%S_Yi*6mJ+F&CSbnm5c7khN*i?bmu@=`=9JhHx;x)fS;7I)2K(zCCiXQ7=?o?}Ye zj|Hb*SdAj8reB^`qAExAnWeA z^~X1m<3z*{A$8ZamUcfJbFr+G+J#c9N0CV8peI>iU`KhbHr0BH3g&I-X7nlbt5el; zM{;y`l(3MSpK;DRBWEfa;{`zPMQsCW1vp}iQ;cj`{OcI7nAhh6g;M?TzsUiNWFI9{ zAe$UDf8-&O#uzbqiG|?|V8FsL$GZp1X^`FNk07elyftf+w{zIw-yw^xY0Eaq)JKm3 zBp>;>S1tr-7gp={5w>ZcHiG#eW~TWGK@^suyQRANukkoeFz9^F9 zW0egM*?`LJs>B8 zwy3DGOP}AMFKd1qSqj?{a()t3${B@r2@vmEj~wWsxgfJI#NuE-&B7zOp&{hq(G~)p zbTJQuh%tnG9c%X*lW+NlJc%ZBRg9-~Ad}R6cx=gRtM5Yr|?2TtC`PC#y& zkA`BaC4zSDpe~XIugTDCJu%rvar}VBB`H7OEmVghRIx0Q1X<{rTN~bxA!cGGknPhL zqYL_}KRpj>ia|AU5TuF`WtpHg2rO^r6%`3XSulimKc+$+SoPx%gN+ft0)b-Z)E@U7 zXfbtE1A&}tDmnP6eX!T(U}p|P_n=xblHb!Kxe;lf8Fuy)&iRl#RP0k|^O*8WEL!uZ zqSbg)rB8#!VQ)eVA)JDC=H$xdlz<~I)V=X80|x~*;h=!sR@b^tcjoE|KPp)!COcX( zW63BYnJ8l@HkFufy+%VF6Cwsgckm5fS{90E-?_Am?so6yr<0EDDNJ_S{q$^sR{vkL zSO1s?riFHVM_wlob!BS&OZ^Dg4?Rx9jJ)tOFR%1(%?ngUv}u`h z?pCX=r4VihgzJSe@5Rs@v30mt9EAX>KYs8pVz6(a`(e88B&7{-1?^B;Nq55l`eHNX zh>P5K^3?gFd{L`pK+FIoov+hD$UkH2djE&W%xN37^F_iHAxB9kblx977it72tnbw! z_SE^MVf4lkr@2Rm{}*49hxG}J}0Stj`eagW`Z{ZoX_g)K|F zfXvSL$6YV_xj%l|;r8u=kD+g;;*V$F{uu=Sas32j(Wqo%5LCB*3uXBd)qWnGn|)aL z<-c`g{v8$aO4WRTvUaLPY;B%Gvw<#|?qj+u{_Kie0!}TfxNJ8~-TDw#Yc6PfFRey8 z$r^vn*0_>Z?=&gdsC4k z?Or-|%0#xaIU7n`OC9`)U4qSs-AzB;iEi}k1NxA? z@PkLF6F5eI9zF-8rbpMvpp#S@mD;jHGEGd@EZtQK!`@v=i~;OCgF-!oxODOYECfH>Errz(-K`?7fTN}wyuh_P>$72Z7o{z zghg!)RiHH0rVH-rm!}&ilv6#-N<&DN0s+0R!%O<|%FN6RWM*Y%XXa$)X69w)XBK1@ z1~TdQbpqLeoIq|MFOVN72oz>zW(Bgcva+*svU0QXvhuSEvI?^^vjf>#+1c4S*}2(y z+4;c>Z_yFJ`z~=#{;F|_- z0p%q05a3+EDQH&>U=H9P0LuZhuvOI#7{ku# z7QiO}(@r#u3hcaQ0?x*+Y$@Opz-GWIz#hPx0eb=O1{?r<4)74*csw0ZRcl18xJ{ z0XXTYL}D-CHGso_>j0`Z=K-e!z6F>A zcqYC-c{gAY;2ywAz(auR08@SjJprx<>;s&J4eUX{8bJDyhaJx*5;FjQ1sDP>#krh% zz%76q0iOii3K$1`3UEFiC>#K61e}QPTJ`|W1l$H#0{9SMJ>VX|jezNUP#&-z@F~C> z01p7(4mc6t!Q25j6EF@~3V0UI7c~Qx0`>rI0qg~Q5^w-84mbpO3eLw(!FMyi0C*YT z0AMBHpSz(asL0jJ=*rmq3!05-mcaR&H2U_0P=ye7XH@aKTL0O_s!R{-Z9 zNF-A5{nP&eoDTR)z`1~Nz#70e0oMag{S)j3@It^{fFZzF04o7g&Vv5|oDSFvI2UmJ z>(D#kR{=KyZUfv3_!Qt%fG+|b06g!{(EHi=JypP&fVF@nfbD?wfL{RI2-pj_6>!QB z$^&Kr9sryVI1%$f9pFqrn6S8#)+{lS+S8KGn0VZT9z13sJeq6td@qqWpK{DS4x=1? z2LE&Lf9k#HSK2S3m^V6bQrfM_b50t+5CS1d^sV^+3(zraZTfth{uI!UgI=W5SJ`wz zC#@+h5iLFLD+}`t;|$eaY8U;d@{`g2ln=m2l?=g-apRJb1S66o2lQ?K?Js9J==Y35 zkAePW&|$`Q9Ur&l+ywe2(1qTW49jf#b}oOhUcSbr?*aYZQR+Vg`qx2+IoS1IWtX3V zei@CP!}L78e1l!S9Q5s@@Q*S5BE5W-U49ejeWR4$J_dcy81zF--=No@{AnQo_3sos zyPt8tzkYJYpqGz9kBvd!GzNY981y|%zuD2g)uMgrz#RhpHneX6pk?D%ZXDN2U8S6X5vlBu#zJXp4>;(* zx9CHlzXm!&9=rTJK^8uS&bvJ~3Oy6_CqefcJEf!0(^2IH)KBH%dyJGKO&^W644c5? zMda}tAKO8vHu%Xv-xVObU-?6zzXAFMkipVnrCt9NtP_j}6A4T=Hod~8=Yak;%KQ1J za?n#y-j9C_^huzfqw`;C^WOw|8t5x@dUBn}K;v^e=v6-a(?LIg_SJ(<@~2Rcr)*AZ z!!UT%B2OXmSoCIFhN)QdtOI?qPEVGGLNd^q_+HSLIq2nB=hw$9iaj{*;4WOrk?q|neWxCf` zO$SR_pQfRF1MXAa!XiTTbF!QaNe24z*fq!#z`aG6rX*ydvvBZ*!K`U9Zf>7Z}4=<7hw!diB|gFZ{prvtYG@?T49UGj@(YHcJxJkR!v zyTNAzP7HXB*>v!UgMKUMYxH`+Be~x0kBL}6KaV_qHa`>ei97wrHGLWSG|;_dAYIgh zJ_Yo!E<>^$_(b0b`cu3l(dXOhq=b_m^+C;1oLH8RknV|0geX(9%^NXdR$3gd!k#x`u`a#gW zY$P4@dm-Ntmrt3C4Gq->ZYS9W?Yq2zJRP{V=*8XRHl}o>Ca#+@Ms7SYo|uixe0o+8j!g8l{KrDRR+7D7<@O3)90?q^f$ zKz|u@uRc#l`7NOD0sRTwTl{I<{>1LnUC6WMF@G6f0ewB_UOFckQ=sOXK}R%V*C9hV z;UlMm-tJRA9Yv^{R)T)DUY=xJV9QvCJX?{+%Py!-sh#(O{zKfSl%s={E{V@KY(Bl< zGaGw+erv!1&~ri0(q)O-<%d8If$pb^Gz^=0pqK0Axgn&hOwiYW{(^(PM^r%cQqT*q z_vpvJ8T35Rz4Sokdq6J&-OC<`-V1uxDD(l)r;kD(0{t}5z2@8*;6H=uAEEi?B{&q- z4-0M|*PXI4wPXCa576MCJ}XDwQ+6j3D{-Il3oS48nKsAPU<05M`LOL|^IIhQBps;r zpf3e|NT(Bzm+d_FBG2?E5{YVkoFdP-3NciLozi|}&6A15hjl*JNFJm++NZ1oo&15- zF3lHA#PoVI=vU};Ih70kGeN%#^viX6%;sML`a_`m%}@29_kr%$w;MtK!6@{tpx*=h5`E9rWiw zU#pLWaWQMo+5>vQ(}~14^zzAHwfgxG=nsPK*M=$Br28r8UTq-xazK9w^jSK8=(!a& z5WO7q!BNV`K>s=D5X0_AZ69wF=#PQ!*9Y4{e{>Z39?*A!4)xug^eLDK z?*`q^4s$^NHt1gdOtc^LEuj0!9|QgCqtG{j{#DTZ#_@L0zX`gReCcTN0km%$=oBBN zlwmQfe0cI2%LazQW70En?PSyKb<Mxjp! zy>S%&b3v~krF;$O*NswsJ?Phhj>jr?`{hzz%scmhUJm*>I$hf@*#-JlpnHvHny24F z`)fe|1@2R>8fVu*zVR`;pC&?pv;luPW`aHebU!_ofc_@x@#}|r(1$_yE58x+*Fe8g zZ|9A+d|N?38TEU$lkDgz(9a%4z5}42G76oZXQhDdCqF&sN(S9;-@XL&w;+FwE`PFI zz><9RpwkOOe*8Cr{xQ%Yrrk%H9c%?XZjdOPi8JP>zMf=UmHHb|?On;nH1|!AVqkUFvN~#(yQ@&PaUaLrJGz2y5(3`ryx!l3q?arz6?8lM2$r zO7v5cCVnI}BdI*~YU6qftyrG8Au08@+yi|asG zLJ_;-wm@tG;ed}s)6qt8iP#-?A*NH@OBb^@{`PjFiPF7TCecN4B3*kq10EZTYmn(D zaGJj1NEaSCh)cxqxD&BB;|OpuqjH->;&_F)hM0h*ySR>Hh^3vlW-vkF`@|y3mb;D> zhsS*4QuT|q1~969|Cf;MLw13Bo6|$s8>B12X(i_nr`Iw4e>tu6B1^q@e@nSv+#EC0 zC8mgBDZ@&J%?#Hu>|wZtVK2izh64--84fWt&N0N5#xR{>Cc`3zr3@<>HZxquu!rFm zhP@2?7!EKTWH`jo5SzzXhcirPn8~n+VJX8(hRqDuG3;Tug<&tlK8CWDNB(z0uPl4K z*vPc`TsddXCFwINs@fW3ZRvqPMovcN#ep`F4BVKNm64fq0i*3QUUx}ArWk)oxM^hH zNuX?G15M`)w3q0WpX@&wqrdk&&d4C0@q;dWHsh6l;_OB-Zj#_lntvcMBp+QB_@88) zZut{|#Gf1RpXyb9PvJM@=pr?E!=p?f4|6oijl&4R`otB@Mjn+T=EQZ{!~}~ zzcGHi3!e;zBT~!G!N&2&t6gEykPjI3D;!yk znBX(jaQgw;>rOI0X!%W5>hr*#3;EA9C5HC6=sGT0;xhv>EuKl>wuXkOo=D^ zplcf(Eb+N^kxVN;ekvv)!uPn^mBaYnQkj290%HLt49efa?Nxf9uaFY{{&FY(`xxKr z;!nR%sAOi=0)#M&5TA()oqYbl_~~<;_;WCTDS!DqiO-e5pz|wU{Ex!~OZhJh%8b~` z6xZJv-}Nz>=I$}(U;?K6leoS4od1G}5`W({5~1eRX$T-F|KnFn{4CDD9QZV2nvvei z2nLP7d&&82=JWGPnNj6=gYmDkT`B#~nk4H@`J~LR?CLv=ufI&<7fWC~&G^@^lZXt) zXTwlQ{u{59hz`boDNW*E=8V%A{~+TxvObmG22PgwPhopd@~>TJ80pZ1;nKsI$UyZr zUm+Q*b}eW8j7%r~myG{SiNt5IJk#J%h|fKXBm&vQRR{dZr0Hgv#xN1rD$YO5a;kdo zX1sg+zQXv*B3WLI>#2yRR9%uH|6UF}$y3FSP>s7P#>d&N6#ikxmwr^1SN1u?_}y%8 zD*sOq5E6g)c)tq;2~R&tPnWU>dbZ&u=kGZGr3=`R`Q79CY2dx&9OV4ZyXswq0F~r4$|ZMI_8!LH#{Plbknv?q zK$QQ*GMWEe7V2rnhpv?frMEva{wW?W=Wu@7<0d{Kmwh$>e+uyHFOnJQ95P)k0x$3N zzdvF=SMm5&KKY;E{BFBCZo1^NhsP1JiE9PpD~n`W+0{3IKL`4s+AHyxrp5IL=by)h#>2q) zE91AZ-juEuo+s;F&w5tNwpr*1m4{gia69nAu6UgOl!=#oMB*>RJVO^Z!+4qTDXf3h zt`E$R`Q7u~>I)=(aH-_;4GD}p;1HHq^cWqm2&WDgPwSuk7T; znG#>i{RJ}?*EZn2+WS+^f8cVNkHs?LjGu6g#H+HOyjb#|&VG-pF}?=8$|Fn2zXv$~ z#mq;Ii;4`%XAR?3zkiYOcT~#qNQ&$CjGyN6KS2mUdN`K_L3QG4WPCk$)O^Or8K1@q zQ~H?$KkFs`O5lmV+y8u@@ejAm zw#0uuED@N7#I>05_cLDUc@5*&UnldaHvSBFbBRUm z<1gcRN}QubiR1FU+cgb%YS){KBwspbNY@jLzn>YaemSl{=6Bmw731A;U^nA$WBZ32 z5!VZhzmEG|_0eq1(h1G#-y1U_P$_@1=)Jpm*XE;)&%6&cB}V?s@7Dj6avh?@G@9Ys_cF=PmYQYTOx^ zUkP8%{macWLX4ly^UfOPb2Ho-xD$9U`QHNmWb6|b^~(HdNfMp{1Mtdk0#EW} zenRHUlEC=6PySipcQV%FY0O{6Z)d~*5}#yl&@|>lewpy!yjUXW-DbM3V*EOe>sU?3 zPR8fLU(&Tv0%ITJZ=EF(+&#v#@FQOBnuZKi?=<)Wx+=wAoPT2chj~0IJNY8xXE9#! ze3tRr z_E-M_Jna{`_enNze)oFqX~q|E+@oM_t4CN7#N2aQ<&G z-o3x^B=9spM$eZS={;e(PQrXc{IB79)jW7Ldd~ZM^l-_nSzV>2?FXH@h;He+o{`nB+f1Ep9`NJH< zVbtC#_5o?gYz%Rl34MMH*Ozf{9PRH@vt;bs*wCA zRLcB{=W@oorIW{bAVSoWexK0 z*Es*LJ|@!}n0Ve&@BFpE6My%<>wP}?&xd{~zuSM#Vf?g8S)ppzXMy*U^GVL{-p_fP z@$UG?yhhgB2R+f%EP*lUlivI<0G{N$4StudFGyhIUMukrVE&;C!&Y1u!;UGxdmqDO z{MU13zFEl<-VD4~yYA-v?)}5vjIZT>IZv`NPP#Hu_C82<;CoL>Q+;>^nXWPTNA-pBdf z&jtR<`1$bbbbUkuBe%|5o*RKDdvNcQzvPqOD64LX1u~ip(+pQd%~*K30Yq!8t+qC! z+Ng=NM3zTeW04j!)?ilGH#J6Dk+Y`BTwdQ)6|OgHVofcrX1J~0sBUU#u8+hbH5r-S zIn3HHq+8P>GqllI=ku&DVS{<&giq~%BdemV5wp6fu{GAxRvnY10@I8(5fjdt9j>o$st!X~a9u8udC}#KO)U{5 zassB=8Vkpw)uQ5PxIVfDsisCV+*o7Qpi<&Y>C9-Zs;`g4T7wO;&Omk>G(vq|V>X1F zi@kZFsyYY+u8=aaq77CMYob(Gmm*-Iwz+}eO36CkG^^X&@j1s#DO**zH3I%&lFiO# zH99MxH9At&WY$IMnBtY-llFSR1nMGY8TEhKXeI!f1frdbxL zk5tD3tua?!cFPx)<(Yv3b751B*%EGC9x+KH(Z=QAlxJpTnseDG1hGa?6{)l(3Zrj{ zPzkfSsXki0T95+yT9acf;b^S2n0ihAMHWtnEtl_kZq=PX@nX5;KnAou;U2<|D-Q6`zJxjYgp zE@^;y1~3f8I2I^BOAansP;M?kPs^Sy%Qee0O>XMZ-1*AJbyF=g7g1lTfi5~#AB6s{ zU``+iqjC8V*oSZv&LNvq4`-srsx8IQtm~{SjErbwYosN{W6Z3=JlGg)kR#3EdEsqs zt&tB@K2A7hhkpy?G-Fm0v#A{5G;%dpKVk$21DRHdrr?sYES?>dJ9YHUTsgMNV)+}Y zQ%F)4Yp(Yn9{wXhj1n;b7MB&6r3)||q_;epRp$|)@%WZeDFquxGQJ(rqZL)Y^U+Qv z#*Ur}%`#JjtB7}(EI=6!GDQH5zylMhSY?Q)D<}qjp=mB}Y!i`dc4K6f3Y-yAkM#0| z))J&RI)BLm`2FC@(sFZd^J4f_!;I8~V_`Ox!x^Qd^ARIdlP3@BwR)^z5UN*Ut%lfG zMMS=V6Zyk%O-&2?Ls~>=4%;!OjS)7>3C{}L9sW@ZpR4PO?Lf^}tl-@8>iTRE1tPi+ zR@dj(Hnpq@x71)t3f4B$I%08I;b;?IuAH2CsWE!QKPON;e+k0f;C%2ci)95o){thb zES4KFW| zX2mMWXZZ?>!{SsFg>p1xxVuNh6V}B1ZxV>oimxWZyBBJ~*Xq0C6ASr&GB08Gl+~M~ zF7J@n3u8)*SwBPN1yu{-t*(Vl>1;_u1M2=BmX zHZkT*#?w7ogk?aiuBB-e7M3+~@*6QHiHR^20bN7^w2;T-CngAVJQT@u-g~{ZlpSfT zu{M2d!^$*0_E#wMqy0Suy(Eoex{~XZf2BAk7p;k`uog8(@qQOJDR@p-v$2S)Fon}l z7sFjz7$UT=4DJ!a#j5Lyu#YuscCi`A$fgeWH~z5(pz>V><*SB4bCK_L?Iy&@;0#vNF`h+sHj!xn-k8Z0_y6pwSR%sBUN;$<3Da zpI}+8bgK1=7R;gvh-a}a?2J}1W{>6-7M4?3or>Lf>^s#&+N~}5T#EC>vkQb{%`t@e zUN#jBmj&lGN>}R~D_IDh)vggXSj#D@HKTY`BlcY7LIpiyXR>X@CvtNIZily2kX!T( z;V21-l?uGK=lWaUnQC(GOyxPYsC^u{T*n>hg7jT(IF0N@vCiZWSWfIK!}V@YT#?wjU5*zhM}ckX1w3&c)lPG?XPI~iC+t=}P*P7wV8NJ1DVX=z z40gMecQ6)dvZ}@whKN_nVsbYFp|Ibk2l)l;z>7Tw6Hgl(@IbtHDRvsvCJy$D#4e*8 zq!2it0%_-iVK|LglS$kAt>lx1Q~wn0I#quPoXDj_m*XiSMFp*qm@_IcYg+M86_2;+ zd9}j>c+JImXddPs8I3`C>hXZ%@k1aRxy0h7x(QzqP@$XU+8VJ_P1|mG1ik18pIQa6 z=St#2cb<#8vBEj`QZL&q#pEb_@V{MvL49Fu&p75LwG|^Zt@_&aD9Gc^(jk0A_JQ$8Q6_)Z#Qucq_v6GO|jJ`-bNGdz*3{f@e;+6{G(iZAppe| zCpk~r4v)09zU!TEZ1nRMHT;Ox3ICE0NoaEcXL>M3$Tf}`z>@y88R2lfL{2M~z0M~b zJbvE4_(*#~gX#2e_p}iy2g`zLPg{Sa zD%bN3dLjf9{{QiO<7n2hI7Gu+;=Hvn_8}TJ*P~f4IoS29fp?{?aXJz!XRxEW#Rx_` zpJMSE)tWD{X7ky-$0Uu#6^z5Ik5*OFW#k_J&xQsZEg;-lI@yCJ746w0FDj;5wrwR;uq} z&z&DX9r+^9-UnHNI9Yg<_b;g6h*H;~w;3bMu9Y2XS)t#v@gs|{g}=3*WXdHSEqhAk z<^d`6y?zSEYX?l8Xq5J-P#p576EpRZ#^td($5X?MtU{>=|1FxVF}7%YONu=Rx#d$G z#`$fxhvA6)|7(zDTg<4wfmbrLYVltV%jcHv1M=_AfobFKD1NqxQ;?Cc+R^fN4`Z!} z@knJMCZcwn$fxxT&p|%VS!nT34+zE53R$(SdkR2DKe#m7F@t=2H(xwg#G~%^sB6d1 zxp(M3X>2Ww>s$SgMQW#po1D*PaB7%#G%bUEhsTChImdn?FA-U#p8I{e*X008xV{r)hODw!*M;x`fVj^4X(ze>`sFKzFpyKEVLTe3%UtIAcq_9iTz$P|pGWby7O^HD-EV7*u4s$MWo^S~NB1d4sHrb?OjFYC-lw@5 zGr#s4me}h$+%+hU6lwbrG`Cyl<^0{)h|n@<2T9t)qW3&JPzN~1-da?1oPQg}bjA8H zu2PQtFhJ-`R`Dn=HTdpi95Oe2qVVH;CEm!UJ@JPvI``6oDHA;O?my!uBkM%LiD z%b2H~$B2^0(!G~8xi#{ybjC`#Zu{JivSe*{_dPuyfoBE$^vpW7sJm;=19t9s;@vE| zXq%lP63qXwdDlxrm~^c7h1ASnjZuJO45bUIU5`>4S2egWdSu|WK`*xlu&k#TN?4-n zBm=s`KA>_m@08FHfa>r?WsM_%a#^-sRho*_W7WbAlVVl2n-jcGWGSl%w z*ZVs6DNnD3iyor#%5u>H{|VvUMt`2MyJz&2EBge?T$XgisRE%fdbQ5I@8X^w{2$DD zzS&Ge+&WmW$Z|&*5Nc;1!$Ciw<9^(U5bC7fpUEFEpdjRM*9SP3f%}vcXXhCa7eNwm1Iw*dQl`YOz!E52IVtiskt!?Oi zxRE>Dhp}{dw_aXNBuBR&B)2cWDM2qc3fBkEZ-?NR`Q6{Dz>a~MLp*ztSjvSoJs%bC zGeU+2tscyy!N4f}_twxVPNU)I#}iB--S;e-*4=S>mFvAFY+Ye9Ky|(9(!(9-IrM(2mx^fi8QJOfs8SUb z;y8_bG^IA8ywB*p+wrXJT+ntM&+@jV=V+%Q@${h>Cn9ki^55VotG%D7k9_ZkQNlwv zM(|33avBYeMO#Loz&Q>a{#~0CkPBmvk5M(%z843ns85KMI5~|wZ3#dyzt!~L_mwp4|si_vzVjV2FhZ)#U!6A z4>P#U*0I1J>jsDSMdN zsB83h_i)vkH^<%)$Fg&T`#Bs-K%fnyv<}H;)dEkumu-tCK)GMAJ z@h1xLZO>o>nww7_E?eG$uRV&*&oEwCsuJ%Z%CULaCS^Y=5(ms>=>n|V#QPjM#dtZw zJqJ)8Yi=o^19Q#c<&n{s86&$fsGa|gsueBUG_7IjD?JEiol)nzU9G@eIG%NIlH2dzhQs>M9jo77q`A8xV9K+ycIT5`F%f@Xluin%6P@9}R!;N=4N_BsZ{q!R{ zKckL(sR=+FpTly-^E)C!iAU|E@7SmHo$cj&3u5!*sD7?UpV$=773l#6_SCfpiii0u zPT9W|xdiYhZN1IW;@KYjngrCC&EYMNXYZ zWrWL5^p!Q+yFZTgh3zA)0Kns@f;e(W8+~GLYUJ^q_j)xKZO21iwUo0A=ObAg%9IR zLeGy%Vs>$CcvA#6V%83d1%=w?KHNsCcIcZMN4x<|F$e-o`-OTsMdW&)zPOyWhSYCI z;2Z+|azr@=tumIhOa;us^nm$rJ|Ig9$)%6=)1JKko#^-QJF?!7OGKSxeqmOuhQ;8d z4=z5eu&JN0uZHb&tx!4NX~sr!IjQKS}$M6 zl~=!yu3+>su8@JMS79G^l|K-c6a`OG85z3u_ZXMA#BAn_45QRI?Mm0~>Go;-r!1;` zJsC7E1#7I1m3VjkzXe(^Kd?&XQ*h=qnO1+5{iyV-xY5hMb%&%Vc!5iPcm01y_DT59 zW@;2{mE{Y_uyDEct?E~B9QaR0K2<)%CN2L{{-=QWIsq&>*cNAZQdfwr%Pb{Rpk`oEEFc3s=ugL zQqs3bSfC6;CXFJ73VfLB&r}G8s{BPRJjqIz4qa6Udg&GcjNNBTNWW`IK1<23{MYfo jDcNOC`FCocgyYD;YnQ55p~&5Ol|O?GZ>Fn&D{1^c?vJl? diff --git a/cache_test.cpp b/cache_test.cpp index 847bee8..279fd44 100644 --- a/cache_test.cpp +++ b/cache_test.cpp @@ -2,9 +2,96 @@ #include #include "2Q_cache.h" #include +#include +#include const char* default_test_file = "tests.txt"; +class IdealCache { +private: + size_t cpst; + std::vector cache; + std::vector vec; + + int findLastIndex(const std::vector& vec1, const std::vector& vec2) { // + std::unordered_map lastIndexMap; + + for (size_t i = 0; i < vec2.size(); ++i) { + lastIndexMap[vec2[i]] = i; + } + + int lastIndex = -1; + int lastValueIndex = -1; + + for (size_t i = 0; i < vec1.size(); ++i) { + if (lastIndexMap.find(vec1[i]) != lastIndexMap.end()) { + if (lastIndexMap[vec1[i]] > lastIndex) { + lastIndex = lastIndexMap[vec1[i]]; + lastValueIndex = i; + } + } + } + + return lastValueIndex; + } + +public: + IdealCache (std::string test_line) { + int number; + + std::stringstream ss(test_line); + + while(ss >> number) + vec.push_back(number); + cpst = vec[0] + vec[1]; + } + + int tic_number = 0; + + void put_page(int id, int number_of_request) { + if (cache.size() < cpst) { + cache.push_back(id); + + //info(); + } + + else if (std::find(cache.begin(), cache.end(), id) != cache.end()) { + tic_number++; + + cache.push_back(id); + + //info(); + + int last_index = findLastIndex(cache, vec.begin() + number_of_request); + + //std::cout << "Last index:" << last_index << "\n"; + + if (last_index != -1){ + cache.erase(cache.begin() + last_index); + + //info(); + } else { + cache.pop_back(); + //info(); + } + } + } + + void info() { + std::cout<<"ideal cache:\n"; + for (auto i = cache.begin(); i != cache.end(); i++) { + std::cout << *i << " "; + } + std::cout << "\n"; + + std::cout<<"request vec:\n"; + for (auto i = vec.begin(); i != vec.end(); i++) { + std::cout << *i << " "; + } + std::cout << "\n"; + } +}; + int cache_test(std::string file_name) { std::ifstream file(file_name); @@ -20,21 +107,24 @@ int cache_test(std::string file_name) { std::string test_line, answer_line; int fast_q_sz, slow_q_sz, num_of_calls, page_id, test_number = 0, test_passed = 0, test_failed = 0; - while(std::getline(file, test_line)) { + while (std::getline(file, test_line)) { std::stringstream ss(test_line); ss >> fast_q_sz >> slow_q_sz>>num_of_calls; //read input TwoCache cache(fast_q_sz, slow_q_sz); //initialising + IdealCache ideal_cache(test_line); - for(int i = 0; i < num_of_calls; i++) { //executing + for (int i = 0; i < num_of_calls; i++) { //executing ss >> page_id; cache.put_page(page_id); + ideal_cache.put_page(page_id, i); } std::getline(file, answer_line); - if(cache.string_info() == answer_line) { //compare answers + if (cache.string_info() == answer_line) { //compare answers std::cout << "test - " << test_number << " passed\n"; + std::cout << "ideal tics / your tics " << ideal_cache.tic_number << "/" << cache.tic_number << std::endl; test_passed++; } else { std::cout << "test - " << test_number << " failed\n"; @@ -53,7 +143,7 @@ int cache_test(std::string file_name) { } int main(int argc, char* argv[]) { - if(argc == 0) { + if (argc == 0) { cache_test(default_test_file); } else { cache_test(argv[1]); diff --git a/makefile b/makefile index f97825f..37d9888 100644 --- a/makefile +++ b/makefile @@ -20,7 +20,7 @@ $(TARGET): $(OBJS) test: $(CXX) $(CXXFLAGS) $(TEST) -o cache_test - + clean: rm -f $(OBJS) $(TARGET) run: $(TARGET)