From 7244786d0c20d0dadbe7432f11027d78e074463c Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Thu, 11 Apr 2024 08:23:57 +0530 Subject: [PATCH 01/41] PaaS I/O --- practice/dominoes/dominoes.py | 2 - .../paasio/__pycache__/paasio.cpython-38.pyc | Bin 0 -> 4432 bytes .../paasio_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 14362 bytes .../test_utils.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 6316 bytes practice/paasio/paasio.py | 115 +++++++++++------- 5 files changed, 73 insertions(+), 44 deletions(-) create mode 100644 practice/paasio/__pycache__/paasio.cpython-38.pyc create mode 100644 practice/paasio/__pycache__/paasio_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/paasio/__pycache__/test_utils.cpython-38-pytest-6.2.4.pyc diff --git a/practice/dominoes/dominoes.py b/practice/dominoes/dominoes.py index d71e6a8..e69de29 100644 --- a/practice/dominoes/dominoes.py +++ b/practice/dominoes/dominoes.py @@ -1,2 +0,0 @@ -def can_chain(dominoes): - pass diff --git a/practice/paasio/__pycache__/paasio.cpython-38.pyc b/practice/paasio/__pycache__/paasio.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b69a9922f8e32e386252f950556495dcc4503705 GIT binary patch literal 4432 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 UM)1Uc+qt~tEI;3Pz48420nV9^^Z)<= literal 0 HcmV?d00001 diff --git a/practice/paasio/paasio.py b/practice/paasio/paasio.py index 62987c6..4371a37 100644 --- a/practice/paasio/paasio.py +++ b/practice/paasio/paasio.py @@ -1,77 +1,108 @@ +""" +Approach: +- The code defines two classes, MeteredFile and MeteredSocket, to measure the I/O operations performed on files and sockets. +- MeteredFile subclass extends BufferedRandom for file I/O operations. +- MeteredSocket encapsulates socket operations. +- Each class tracks read and write operations along with the number of bytes read and written. +- Renamed variables to adhere to Python naming conventions (snake_case) and improve readability. +""" import io - class MeteredFile(io.BufferedRandom): """Implement using a subclassing model.""" - + def __init__(self, *args, **kwargs): - pass - + super().__init__(*args, **kwargs) + self._read_ops = 0 + self._write_ops = 0 + self._read_bytes = 0 + self._write_bytes = 0 + def __enter__(self): - pass - + return self + def __exit__(self, exc_type, exc_val, exc_tb): - pass - + return super().__exit__(exc_type, exc_val, exc_tb) + def __iter__(self): - pass - + return self + def __next__(self): - pass - + line = super().readline() + self._read_ops += 1 + self._read_bytes += len(line) + if line: + return line + raise StopIteration() + def read(self, size=-1): - pass - + buf = super().read(size) + self._read_ops += 1 + self._read_bytes += len(buf) + return buf + @property def read_bytes(self): - pass - + return self._read_bytes + @property def read_ops(self): - pass - + return self._read_ops + def write(self, b): - pass - + bytes_written = super().write(b) + self._write_ops += 1 + self._write_bytes += bytes_written + return bytes_written + @property def write_bytes(self): - pass - + return self._write_bytes + @property def write_ops(self): - pass - + return self._write_ops class MeteredSocket: """Implement using a delegation model.""" - + def __init__(self, socket): - pass - + self._recv_ops = 0 + self._send_ops = 0 + self._recv_bytes = 0 + self._send_bytes = 0 + self._socket = socket + def __enter__(self): - pass - + return self + def __exit__(self, exc_type, exc_val, exc_tb): - pass - + return self._socket.__exit__(exc_type, exc_val, exc_tb) + def recv(self, bufsize, flags=0): - pass - + self._recv_ops += 1 + received_data = self._socket.recv(bufsize, flags) + self._recv_bytes += len(received_data) + return received_data + @property def recv_bytes(self): - pass - + return self._recv_bytes + @property def recv_ops(self): - pass - + return self._recv_ops + def send(self, data, flags=0): - pass - + self._send_ops += 1 + bytes_sent = self._socket.send(data, flags) + self._send_bytes += bytes_sent + return bytes_sent + @property def send_bytes(self): - pass - + return self._send_bytes + @property def send_ops(self): - pass + return self._send_ops From 7d9a21afdab00725ef503e2a9ec42f72231f580e Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Thu, 11 Apr 2024 11:45:20 +0530 Subject: [PATCH 02/41] satellite --- .../__pycache__/satellite.cpython-38.pyc | Bin 0 -> 1223 bytes ...satellite_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2381 bytes practice/satellite/satellite.py | 27 +++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 practice/satellite/__pycache__/satellite.cpython-38.pyc create mode 100644 practice/satellite/__pycache__/satellite_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/satellite/__pycache__/satellite.cpython-38.pyc b/practice/satellite/__pycache__/satellite.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69e26c286b4117312edd5dc581b2f091e7679603 GIT binary patch literal 1223 zcmaJ>!EV$r5Vf6@U7{9B)x&Z@J|Lu($}VSwP!VuILcNssu$PrLo;22GldbJ6Z51vo z`~`>h$OrHZNU+yK}LqfhfWBp-h?Bg&! z6q1aHq>_CgBPs(K;>_g6A?e=`XOxiW*?g`G5vPx%hx||n{dVrQbA|4?hC)lwT;!6g zywO*223W-_%M+yyMoS@{8lDuIFGQxKvga-X&RB=xri@cA3}yzNL4IOW!;8e5tAKn0 zDnH?HT8eDXowh>d&f`uQF#`@6%pkXT1y@p;tJ8AjboC%Acx#3Ah%9T;O-hwXygtBh zT=?5mVLck+QX92^%-7nY;j*paF^FPEQu`o@q=Vx*4wIm;q#{cy>6GbhMGn!rMC*#a zV->w*6+(iniL)`>Q~b#@}j7CfTO|TOc_2hRJZQ>7u4t zO?5x41H`fp=Ec0;P`QM&I$GVfAC7if23PEl?pzbO=IZLAuw$fc6nV{u`b_jq%=cq| zcx13|hGH-gvdGo&1(>NV=0i9G9V;^%&b7d9i(zPlg)CEcO&iS5br-|9VRldux=BMC zxtB58qrIPg{SSy8+zw_B@i8h5#3<>KP6OSu2=J1=rCv6|&6WDgJMWaV&(L?&dE!XJ2Ok literal 0 HcmV?d00001 diff --git a/practice/satellite/__pycache__/satellite_test.cpython-38-pytest-6.2.4.pyc b/practice/satellite/__pycache__/satellite_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f3b3cea99c7e370520545387a2221a26634bd437 GIT binary patch literal 2381 zcmbtVOK;mo5Z>WS)Wde;x=oFus9H2BoPz|kD9}R?7)XrX1T>Gf5Q-ACb|upxDQ0(- zSb}tN?)?KfH0VixX|Fx?FBAycnWZJUwq+Oyg&odt#o^31-^@PS*r+kQ{_K9-zg1=I zFEY+w9vb_&)FTv}aY$Jg?A^&+hXKpHt`Fr-&<$|MNh?{{4T1f@xXZoQjC&$DuAaKx z8iyxr&;J`evCbZt9W8~3`f`{>TE;JhRB@_$w0r(?(AdYN?xPU)>s^NfcV4ruTYjPI zai0fh`@F(Kya&9>Yk05lI&a`T47n1(4#ol|G(zI7;JbO@cfW9qR|Lh6GTqd1im?A$Y+5^3Lrg%m@{g*25U zFO^W76r!gEpEFs<|Ne8(eui(WcHBCQ`7lq~kA!-zhecbQ2-!%KF~+=ifNQh^*BzHP^R`%oQ}kS zltXDdOj4s7Pmc>>s^X+43Y`pdMO-(OLH8@XFwkrhR;5=2d$Y42T=3f3fC)}-2z z9}y%lHZZYlm7iF}q9_~k zQA&Cvis Date: Thu, 11 Apr 2024 14:32:45 +0530 Subject: [PATCH 03/41] rest api --- .../__pycache__/rest_api.cpython-38.pyc | Bin 0 -> 6804 bytes .../rest_api_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3879 bytes practice/rest-api/rest_api.py | 151 +++++++++++++++++- 3 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 practice/rest-api/__pycache__/rest_api.cpython-38.pyc create mode 100644 practice/rest-api/__pycache__/rest_api_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/rest-api/__pycache__/rest_api.cpython-38.pyc b/practice/rest-api/__pycache__/rest_api.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a41160664f6efa09948ed287081da79aa893b65e GIT binary patch literal 6804 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 Date: Thu, 11 Apr 2024 17:10:12 +0530 Subject: [PATCH 04/41] pov --- practice/pov/__pycache__/pov.cpython-38.pyc | Bin 0 -> 4750 bytes .../pov_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5573 bytes practice/pov/pov.py | 144 ++++++++++++++++-- 3 files changed, 135 insertions(+), 9 deletions(-) create mode 100644 practice/pov/__pycache__/pov.cpython-38.pyc create mode 100644 practice/pov/__pycache__/pov_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/pov/__pycache__/pov.cpython-38.pyc b/practice/pov/__pycache__/pov.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9bd2f469743eb8d0ff61cf3ccedae45716f492ba GIT binary patch literal 4750 zcmcgwL2ul~6`mov+|^oA9XBnk)<`Eok$4MP@*zk8K{evqP3s_40o%zzXuwjOk(Lsd zTn)LBEl`(QfMuXP#K@YkHN?(N}FXJOP|>)sF#`%2*JAeKssD3eM^wH>D_7om8ll@d`B=DFC; zw9sm(Rj$$^PIp9sG0aJ&7%Gj?K~21&RT36pmSG?);w;Tq#`{=SaT+BfiNym|^fPIB z$7x)|VG21PN(3QDl%w#u4!h_2Xrc7n*i$kw|gu4{|Zg;X~~Y9 z1I3qJc?rL5IWHIR+mVa%JNTWG9Co}?d1RZ7h}hQ;^&Px-@aEUhl)PjCD;>%A=Jb`) zNu3=A3O6jAqkneA__q(p!%WxyRC6<2%0@=q*vEFF~%~!-- zwH=O8$G9LnO&<+&AjJUUapdD?Lkkvh2|yGZTx)m;p*qP()nt*vK7iK zjaToge6PrctLl-`QJfD}hdP7{Mrw7K9niZnd|Y*cfIK(|2(LLYWgVX%Es&K~>ahse zYaZ&;JY%gNpi{D41K$%?z;3(F6MmOH;W3%pJ^HHA=N$`-iT2K*;tU!ldTlt|SH(!D zQzjxvt%)irD>o}18O__KgT+;MolGBPgW)amW1~+WzJ2uWSf6(N%6gJTVUpiMr=H()jY%s% z&oqLNF>Q})A8gL-qA!8=Jz`JNvvy-F%RDkv8o^Va&lu}62nEjfoWB6XB>$rW6FEo! zY7~62i9UVsn~fV3D8quHqm5k?eKxCS;e+^t=q0WrGR;8Yo}rt7ClYm_k~bls;eF2Z zkYY_-DA~jbOkf{lbs{f9o^OTgIhyoi^ohPvHRZ+V7nlA2V+*}-J|)jLCwH9 zl@nW|@_BR!A0^*qd+@Rz4}D5xbpX2qR|z#T1mZGr6yvZUw!)k;5h8Y9#o7ik1nqiV z)0tIzhS^$NCr*euw^RE)#rOga=Ty6uWeFml9w`x907WB>h=~Yhf-4e^4TUi}3Msbe zhel3ex0{`{EIxs!<6tD(VVqCJH@G)p@1<3J)iP7gD&G%+1d#j5lTj$t4_DYw$ zde71C?=*6Q$1mEu?8^_2J7rt)CFGdr9(pcuy~>DB*%{MaJHyhB+xveQ z%Yaode=GcA8h!W2HCB@)gekBnXP^Y6DyxVO;JVu)oUOUO)hmckK;?mWT>)VR&31?V zIOUwt_B#h#0);J9>e3Mbq@Xn3czn~j9|DL|iS&yw8L3}rogt{+ zvzQ;(nBZX~1=bNwP)(0eIL8+5v&=OW2Cx2u=N0w7xkdt^9Hzt2(wPJGIyT$6iAqhX ztNd^{RH>}oVK%I~6M-r(E|jjkR6Qzsb0$bvbB%gY7>#s5C2rNuM_VM(W|yX-s*&o^ z=A7x%2`VQpDn8T;knJo)I))!AqMu_he;*B7=yH$G^DcMzBHFk4Wrrx8@!wTYnlhTgd%~Xa9rlbpWl#B2=c&8x(e3A?^UOJQN|a7;XMXDL z`Fg$J(j_>Qj`{u!-v%D1s80Ye7ry}Hv9|-T;q?or#C)`vwdd)RvIVfY1TX_OX-DiV zjDKDF826g-lM=VBC03%gUt)W%{@d*OGqb<8qcqpR&41n^AcN|czM;f3m0%;vDj*hO@{sha$1e z5odO%@}2_AxA6WSfH{38@j6@z}=;y&l-PZ8@M!qGW7`u;~) z?UUO`iqFo5i6XtWri+CQ5nhzxp5kjY$Z)Zy?4*~d`5_uqZSPW_K>gCw0zaFV%t1{| z$Sc3E5`^;2HcU=e;z?fA*D?73Z%#>*IfV5^gZO#iyvvVF{8}N421Pch*eyeS6>E+b zHpc2TTk7wF)@xTD)#3UYKCGbTC?svw)+l&&t|}i93c(KNG)3o+Fla<1H{G<+jW#wk z)2V5?7}IoNkMaR+WAc1^EUE-0zlnw|b`YaH=gNE?wK@*(Z?!4F@U+s%{VrGC4}9KOY2CA=wd4b%QCR^;^`Vid?tF*--ZNtxJ&%fSnMK&q+r|Hj*n*wbUBs~JtXlzZQ3f)%FVCNM F{tFOwuiF3s literal 0 HcmV?d00001 diff --git a/practice/pov/__pycache__/pov_test.cpython-38-pytest-6.2.4.pyc b/practice/pov/__pycache__/pov_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7d79dd533ac120d66cd5d939440f81917564b7e6 GIT binary patch literal 5573 zcmcIo-EP}P7Uu9rq9xmL)U2DdPO79yceQQoIO)%}XoDdA1NOq(&8F=_Sb(54V}~h4 zszb`LRR>tWz34@YzCbUM_R2t?q>sScz1k;OAixIw&XANuQF84TmB2GI9P*IoJ9EzY zI3F)8)HM8lXfJR5bXL>;Lxb_3iNP%#(R&bFfLZ^Gl7JqH=%kz-ZSv`-j%D{tHdoMvEopT`5F|M&myngIhSFuOWnbT3hFg z>tAYZBh}b8xy36OTfE9`v=u(bYiO&y&gaqEe1R{bo#UtY651L+%^PUz{26`*?L7Yj zUq-vYpXF!KF7k8yIkczv^Lz#E5|9Ri_ zqr~2lVb|$}JBLPMM#A4p%owwYEp~gN6AON*$$8xR&M2b>jrx{Skbd1v@WsBY;g0$Xcg3z z@S;qo@Y))~3y2UZCJsU>TR3^E7M7LG({*Z*O}TEg(5!LfT9u7K)fYR$zj`h2tmmEU zdFO^gbvB-F9ffBg9yn@2av^&Do)aLX1y{k07+xVvX&Guv$G`d1H1l?F`#AU>t-geD z6;Dzae}oS3QlW|#K}jeAIfSbU&C(2Ajd`raSz+6<(siiddSZR%@vGO;W_>nzw-tEZ za7RQ==bq4imow;uCeJ}Unak24yfy5ux2=BA@x{RIgnd*L#7Evc!kI6ZBcT&^ zd%oBm%f_j~=oLIVdJ94=eI3hQKf@}l@_+rQZlC#|{?uHgb2vkxk+*F5sZLkmFdKs# z1y2_e_RQy&TsntWP%&`_9Ri!k0g-|jMd{lmtakRu;OH~$Q|&eF@7f*hpBm=P*xJ|c zlam!`pffbSU**O*IC4lN5EWF!l6rvBv+E)JQPzl|JXs+=(F7hoZw6u9+!ReILh0cG z@CQ4k9`h;nxZ`?}h?3eTuHP5$OBqT@!JO37X~jxFLH2qgnG?Gm(Tlw>NK995M<6j| zqof3z7(&X);`tZlHcW&PGy}1RyF~2p5HX4Oa@1Q>${HgV%AtRQ#z-+#@QZnNhBesW zR>3E~Lg{P=#dus64HO}Tq=j)BL2!tQh_VZ-Cvc$+7tZA_Jgki+HaQF&d7ebDFh^VErXic- z;L6*DG63$ZkGQj>ESXVfc?JEX+H=9f;&3W=TN!4JEe`}OyEIGg9JdcS8c6Kr!t$b! zpK?>lsA1ikMp0qph-)b>hVK~0&23|>(&1aFU?LT5xk_Rh9X&tYq%6^TBbzR<8XH_W z+NSKTl2OCNiws?hl}T9FVcnN|5AynkjRw2|ruorh*|#dRs-X)51B5`kC&(GR6IrNWEYu z^mp(fqbT9Op*Nxgp`c(ZAb(g4SC3c>WgR69PP)>`-9-d+UO+$|z0&_Y#Z>ia9E2R@ zBg7}G#AhnvboVQ=m(q*I)Uv;Rgrzf7l*}E*zz)<-b9u(aX4Qs9Ufy|?vi&g&e4#qD zj$a)H3majR@>_E&><4*?moMVo`B4Sld)@WgR6{%($_f@%FqM@XWS^0irTU7mm|3j4AnCXo8>7m#{o22xX% zbqr|Bf7Bl)sOK;MVbu1q}w5#@_8Z~Si?J0XnUEQiD_GaJnvFM{@{#I|#8II05y*+aGYHBeeVpWO< z(u={4ho_Qiey)a_)#`9%V)p|tra@x#!kv_Z+jlX3*Tp^_z2&smPwcl->~7K)RYZ=q KwT5Qv^VZMp5qCHM literal 0 HcmV?d00001 diff --git a/practice/pov/pov.py b/practice/pov/pov.py index 21dbe4b..dc66499 100644 --- a/practice/pov/pov.py +++ b/practice/pov/pov.py @@ -1,25 +1,151 @@ -from json import dumps +""" +Approach: +- The provided code defines a Tree class for representing trees and performing tree-related operations. +- The class includes methods for initialization, converting the tree to a dictionary, string representation, comparison, reorienting the tree from a specific node's point of view, and finding a path between two nodes. +""" +from json import dumps class Tree: def __init__(self, label, children=None): + """ + Initialize a Tree object with a label and optional children. + + Args: + label (any): The label of the tree node. + children (list, optional): List of child Tree objects. Defaults to None. + """ self.label = label self.children = children if children is not None else [] - + def __dict__(self): + """ + Convert the tree to a dictionary representation. + + Returns: + dict: Dictionary representation of the tree. + """ return {self.label: [c.__dict__() for c in sorted(self.children)]} - + def __str__(self, indent=None): + """ + Convert the tree to a JSON-formatted string. + + Args: + indent (int, optional): Indentation level. Defaults to None. + + Returns: + str: JSON-formatted string representing the tree. + """ return dumps(self.__dict__(), indent=indent) - + def __lt__(self, other): + """ + Compare two Tree objects based on their labels. + + Args: + other (Tree): Another Tree object. + + Returns: + bool: True if the current object's label is less than the other object's label, False otherwise. + """ return self.label < other.label - + def __eq__(self, other): + """ + Compare two Tree objects for equality. + + Args: + other (Tree): Another Tree object. + + Returns: + bool: True if the two objects are equal, False otherwise. + """ return self.__dict__() == other.__dict__() - + def from_pov(self, from_node): - pass - + """ + Reorient the tree from the perspective of a specific node. + + Args: + from_node (any): The label of the node from which the tree should be reoriented. + + Returns: + Tree: The reoriented tree. + + Raises: + ValueError: If the specified node is not found in the tree. + """ + cur_path = [[self, 0]] + while cur_path: + subtree, next_index = cur_path[-1] + if subtree.label == from_node: + break + if next_index < len(subtree.children): + next_node = subtree.children[next_index] + cur_path[-1][1] += 1 + cur_path.append([next_node, 0]) + else: + cur_path.pop() + if not cur_path: + raise ValueError("Tree could not be reoriented") + it = iter(cur_path) + p = next(it) + for c in it: + p[0].children.pop(p[1] - 1) + c[0].children.append(p[0]) + p = c + return cur_path[-1][0] + def path_to(self, from_node, to_node): - pass + """ + Find the path between two nodes in the tree. + + Args: + from_node (any): The label of the starting node. + to_node (any): The label of the target node. + + Returns: + list: The path from the starting node to the target node. + + Raises: + ValueError: If the starting node is not found in the tree or if no path is found between the two nodes. + """ + to_find = {from_node, to_node} + found_paths = dict() + cur_path = [] + + def helper(subtree): + nonlocal to_find, found_paths, cur_path + cur_path.append(subtree.label) + if subtree.label in to_find: + found_paths[subtree.label] = cur_path.copy() + to_find.remove(subtree.label) + for c in subtree.children: + if len(to_find) == 0: + break + helper(c) + cur_path.pop() + + helper(self) + if from_node in to_find: + raise ValueError("Tree could not be reoriented") + if to_node in to_find: + raise ValueError("No path found") + + from_path = found_paths[from_node] + to_path = found_paths[to_node] + from_part = [] + to_part = [] + + while len(from_path) > len(to_path): + from_part.append(from_path.pop()) + while len(to_path) > len(from_path): + to_part.append(to_path.pop()) + while from_path[-1] != to_path[-1]: + from_part.append(from_path.pop()) + to_part.append(to_path.pop()) + from_part.append(from_path[-1]) + to_part.reverse() + from_part.extend(to_part) + return from_part From 8a5603a30b04baf7df567b7ca8b1a2244157e91c Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Thu, 11 Apr 2024 20:57:36 +0530 Subject: [PATCH 05/41] binary-search-tree --- .../binary_search_tree.cpython-38.pyc | Bin 0 -> 2979 bytes ...arch_tree_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3604 bytes .../binary-search-tree/binary_search_tree.py | 58 ++++++++++++++++-- 3 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 practice/binary-search-tree/__pycache__/binary_search_tree.cpython-38.pyc create mode 100644 practice/binary-search-tree/__pycache__/binary_search_tree_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/binary-search-tree/__pycache__/binary_search_tree.cpython-38.pyc b/practice/binary-search-tree/__pycache__/binary_search_tree.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94778a2b2c516db345e3572514339a5eda666f81 GIT binary patch literal 2979 zcmZ`*U2oh(6rCA+cO7T5O#*ExpvpiWx>B0-5fxems6a?)A80F~NR{PyX0uK<_IAce z$ZC0NC4K}#B9HkA{1v~#FW|9HoI76cms_u9#`Asdx#wQ*i;WGR;raLPyZ!$>#{Qws z;^UyRk7DkjlI(!}z$BOA4U^)vIN<0x(nZfjPsqkI)@??=3 !MkAd?@!*mFAb37d z0ea_&R5FM&sRF6`NvcecUt~c%jEqs{QSe+V)uY)cmBF`38tKbtD$?`n82zjPq8g8c{i-c^@s;{(4V=^?OlY*h@=hi%(91Zdy1}bUS8@izeFG-U; ziH6A-CtM`?0LBdylLuM9yjKm?X~_a^10tnyhXU)tbOwXC`Q4_`jX&BwNtOnQ31pTk zV2;nUNzT>qGB~`1w@ycq2E%h>Ef9Oj%+Op%=L);9OaZ3ScC|G&(?MygIXfg*1W_Dk zT9VH$Evq1G>Zwze4>DqHj-Z@@^?jTJo<}N9`boTGeMNiSdAoiL)h;~_diyBmE-J+i zI5aI}Qwr(4;Rn#NY`kFyuH;a1tMDqt^-nMMS%w?FT_fFsRbw0juACCT1XWlr*J zw5NVmI!?^#-bhDrp2TXeH2Fcv(gUJ*Iuw>eAr0-0E(uM-a@gK5@iyW9fbHszZ1(YEBeY@_w$hU}nSlQ-lhT3>E~vh8AXHSS|;H7=rum?CU* z7ceU}{*=A!{02At#V6v5bN0$7(P`S-6@{y_EH9d6Qs_FC>4P=WLr8upwKpfkazRXy zoM!^@`1sB$xVcakQPTSi<$ZKWCX$_a`c}>-{Iv~`v;(w)g5{W936A*+ucNoI$5LNx zL8_F=!dW7?7Nt;ZysTjU0Q){cnPT>NTa0hlFqbFB#AWp?@%jr!flC~-6RsbkMP2~* zAO~7t7a@Q39M~PZh7X~ zE&U9|bWkzwp9e$YsoE{{)mvy zlB*_NuK?GyM)^o^pBFm#f~ vy@uEH+MeTiD2}GtUe}>7n#|%bwE4}BE|@brtnj`rzhF;DOZI!@`W^p&LOQI? literal 0 HcmV?d00001 diff --git a/practice/binary-search-tree/__pycache__/binary_search_tree_test.cpython-38-pytest-6.2.4.pyc b/practice/binary-search-tree/__pycache__/binary_search_tree_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20b83a1e8b4d016aea9a416b878221946a85f601 GIT binary patch literal 3604 zcmbVPTT|Oc6yB9&S-t=c0Rm3aKubGyr?Hciq@7MLw1H{+;upxI)r&^{tGgF@?YB5KJ_njrqiCYvW;!o#1naR_UwJXbIyJ`ela(fCh+`euhjm?67m;T zh93he+wcZIgJ6Ww2C=CswWh8SN}7h9piz%$o6w^*l1KGV!VoDh93_IN{b9zRuXb5Mm(+hf~ zza?k%t%g?HBVDa5=~mYeI!uuZZV+%0q6v0?KXw}eSCs~HL$|9*BjAmiwD?JzS3}Oa zM9e|=KQBu!U{X+Wixro(e6O^_gQKw3F7XpCs$S46wS`*^y(%wNl(ioQ%G?h_*rwOy zL`@DhIU!&xwom0UDh_V$c!48$=z2b9^RQ=tND0l-&S#ShQ=B+4W-b%fQ096B3YrUE zEi&1t*_c+>#tm1{%K{gW^odA9DKL(>`G1XsL05_PU+3|3J55curP85z>uVoYet|U*DS+Wg-_f?Z4%pTjbiX>z^c`j&-ynNNVHEQ;Q=_b z=7}Ku99HXrvuNj+8Nki9?mJNf&H-w4XbiQ$dp8|zX$G{&GHwt7MUuY;y7Rt3hnIXO z#$nGwq7cW3p2Z6(kU6Jgox!tx?z#5t)(GJD^=y3I80r*kq~aNO#Dqw(5F|o%bKqf2 zlyppvm{B)l@tquwZ)FPPC2(=eTSN&HO%$mu98wkV{gR1wvc7WH4yH}p5+Yrg`ALrSNW zJJ##-^^I@WU!NCrnZ-?A0l5z(Kyv;Em4kY=qVnr_(DMFw`YEtMs;eBRT- zSFN$cL*OyLhc`e4$vH>oX=igH`mvlZ26@23m#|a>_z)l;svPo+9%`ZpHI(E^$2!)~ zAbuWej2u~F2iqdeH$vkLg`R|{K`Y8=UIJ@_c?mW84BH|tnx~9M%LP;1gVP8MJ!xP% zB|gOZM_5m&Pq+9O8!$t?PRP`tU1$n0$Oz5pS-MDAZ%e~ub;n#Gtz+K{v0^V)R3<;1wyXaN(ccJbAI3a);a>rsc*q9>DAM{Sve|d| OF;r1%kws!@IrD#z*L&vx literal 0 HcmV?d00001 diff --git a/practice/binary-search-tree/binary_search_tree.py b/practice/binary-search-tree/binary_search_tree.py index afca5d4..1dd6f57 100644 --- a/practice/binary-search-tree/binary_search_tree.py +++ b/practice/binary-search-tree/binary_search_tree.py @@ -1,8 +1,18 @@ +""" +Approach: +- The provided code defines two classes: TreeNode and BinarySearchTree. +- TreeNode represents a single node in a binary search tree, while BinarySearchTree represents the binary search tree itself. +- TreeNode contains the data stored in the node and references to its left and right child nodes. +- BinarySearchTree initializes with a list of data elements and inserts each element into the binary search tree. +- Insertion is done recursively by comparing the data with each node and traversing either the left or right subtree accordingly. +- The search method recursively searches for a specific data element in the binary search tree. +""" + class TreeNode: def __init__(self, data, left=None, right=None): - self.data = None - self.left = None - self.right = None + self.data = data + self.left = left + self.right = right def __str__(self): return f'TreeNode(data={self.data}, left={self.left}, right={self.right})' @@ -10,10 +20,46 @@ def __str__(self): class BinarySearchTree: def __init__(self, tree_data): - pass + self.root = None + for data in tree_data: + self.insert(data) + + def insert(self, data): + if self.root is None: + self.root = TreeNode(data) + else: + self._insert_recursive(data, self.root) + + def _insert_recursive(self, data, node): + if data <= node.data: + if node.left is None: + node.left = TreeNode(data) + else: + self._insert_recursive(data, node.left) + else: + if node.right is None: + node.right = TreeNode(data) + else: + self._insert_recursive(data, node.right) + + def search(self, data): + return self._search_recursive(data, self.root) + + def _search_recursive(self, data, node): + if node is None or node.data == data: + return node + if data < node.data: + return self._search_recursive(data, node.left) + else: + return self._search_recursive(data, node.right) def data(self): - pass + return self.root def sorted_data(self): - pass + return self._inorder_traversal(self.root) + + def _inorder_traversal(self, node): + if node is None: + return [] + return self._inorder_traversal(node.left) + [node.data] + self._inorder_traversal(node.right) From 3f8488422af8940c0b8d277c93213dd1657132bf Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Fri, 12 Apr 2024 08:43:51 +0530 Subject: [PATCH 06/41] knapsack --- .../__pycache__/knapsack.cpython-38.pyc | Bin 0 -> 1256 bytes .../knapsack_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2542 bytes practice/knapsack/knapsack.py | 22 ++++++++++++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 practice/knapsack/__pycache__/knapsack.cpython-38.pyc create mode 100644 practice/knapsack/__pycache__/knapsack_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/knapsack/__pycache__/knapsack.cpython-38.pyc b/practice/knapsack/__pycache__/knapsack.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..801c55235cdd9996d833869add92458265e001e7 GIT binary patch literal 1256 zcmZuxPixyS6qn>A%`yt3D|9WRXvad9lpRM1+sI`wdRcoZl%QC$t;LpINlyRZoH|&K z+m{&hGweI;1Nb_2=vUZjPj)?0I>8fqPrvu)_w?+e_4OWt75vx@etQW0a?0u=pu7Pw zPhjKd7;((WXLO9Y_Yv*2*e(EiZ?jCN%#U98Ued!z8tSK9(A>&cUJ66`g<^^HDS$%F zl0>SI+LW3!UI=OCLP-jAhk)<&NvjeE@y`@q~D_LC^qpv2EY0WPBlxO{_CY$R2WHK~JHRUo0 zgciyIzhovAvockNrU8{!B!)7@>1s;javlOd7Kf>Z0uu++%tB9Wq|-c%r~nR?d*xke zt0DR>RR*1OErUo6vj_Zrs6=w19q=p?fYpwVRDPVpTR`>Vygs@xey%GXuI{GDAXmO4 zM76NF23`;I*@yvmrs%Bcy#U6p^9~D-w}2Av_h8WT-3T?S1BXW-FlxyBgw3J?U*RSB zf&yHPR@dT!aBmA;;R(pnvoLCR7BWF6UzaUsxkeSnS&C)5z(tFD&(JpFt!-4a=U9KY zr0^PR(FW^^b|3HjRxE&p?3K5RHA1KFR(vc`4Kd(@=p6VMST)O0Z-YDq zF*~q@s6ZzhOUzM-fdbw_o9G)kZGkJfg?n`C+;2cD$zZ?4(;Hm&;L)e`P-xe;KjYz% z5!wvdV8(c=;4OVIY`(02he38x_C~QZ)(zJ9F~l=1*gA-y z%NKX!HLb>LFp5*3#bykL2Cp5XvQt-6wkzD8S9-BfWm_{9iqeB1dmX*zfbHtTD6uLD z&q^#y{Hda#-5ltygRI}n>1Lz))gau(J7fcI;7$C2JSTb+ZVsR=Ytt!D{pqwa)WKX+ V>Qfc5J4#ZX$71YSXzT|X*=&9`tGj9xF`^k(aP=T-FsmZs;Lol?AGYXBbtb);?wPIb z$tJd)k8+PaegaH}T-1!IOAs1W`c|74dzqGs8IJNIck0fA77nu2=QG zdiAQW)@l_&*KKEU>x-%o-@q8Y@?@;j6I~|ILR)R&SS)3blfn`~-YHmFOVKG(i)@zy z+p#V2ywEwFKNLFe6|a|X<(!JPUK6W@lst*Xs+H6Nch3)cf!cN3J+Fz^! zyeMv3L&HHY(6fON7YW`JABfn}R!iKHT7D=IB>BiSQcbM}-`|nRlp95!iJ!gEbK3?p zzGEf%$ZK!i5vEM$ZyWWi^g&d2*EU_<3H|zIFWQMa-MY8unWi5F^{#Q7vETISJI8Yy zC@Q8|u66g58Wa_FlplLRR3pC;#uC=S+2MfJ{`T2ecqQt=;hiU?AD)(=@<_HU3bQZ> zv)D+H7zXQ~X0bZOo1Wj=j*|kf7c*c$nSo=DHUo4_mUu3m(BnC)xYJSFp1Zq0OO5@> zKQKP|@eX5QOpyl;;}R*OVf4cplNMzP!Yqu0X(;PO3N}-YWg6N7!Q{{$=FqnM-7L09 zHQg}m#A?%1E#rB5Uv2KIjH}b+C^|zRth^;HDQ)Zc{$2hlEAr=qC&oEAk>~$`mf~Rb zOAV&QoT7=R^8|)zc?{;uFefhi>Pfia{8=GC|4z-t|4dC*NJh6c@{tqfA}K=&W9i(H z)F>g4MJgegZ9}&5lqlr^Bb8%D<`6xT!8_w2GSeaed&;10qz<%+1T8Q@-kuwD+n(Av z-trfy4_BR$Jo$sNq%40qSQ)2c)WujrV3r*A>!b{Y&D$My6Z-*mlO@$nmXazb-dCw| zLQYdf9g;1ZXqg$%GTTVE$$Pp?;9n!+Gj8sO`7W91qtHG>12cz>l|Bc^0c-+JGXIe5 z$)r`8v?sIj_cV2iK=%k&{hjqIaaNN*9W0M?cI;t{Dol&1dWVz~Q$?~u(4W6Y^6ds z@RUj_N(CL=qphWqs!}+XvlfG6!{GEWT+mRI4R6{9p*;h@fjtC#08(BG91#(=6V>h< z-7|Dg+j9nOt5b=++4I}6A4W-ay-UTvZ!N3tJ`#5=`$zCQ;hOPo8al(1^59ic>c6W{ zXU=oiBz7onMc87tm=m_F7XAW$ CYer@O literal 0 HcmV?d00001 diff --git a/practice/knapsack/knapsack.py b/practice/knapsack/knapsack.py index 80ad24c..030ed00 100644 --- a/practice/knapsack/knapsack.py +++ b/practice/knapsack/knapsack.py @@ -1,2 +1,20 @@ -def maximum_value(maximum_weight, items): - pass +""" +Approach: +- This code utilizes dynamic programming to solve the knapsack problem, aiming to determine the maximum value achievable with a given maximum weight limit. +- It initializes a 2D array, dp, to store the maximum values for different combinations of items and weight limits. +- The algorithm iterates through each item and each weight limit, computing the maximum value achievable considering whether to include or exclude the current item. +- The function returns the maximum value that can be achieved with the provided weight limit. +""" + +def maximum_value(max_weight, items): + n = len(items) + dp = [[0] * (max_weight + 1) for _ in range(n + 1)] + + for i in range(1, n + 1): + for j in range(1, max_weight + 1): + if items[i - 1]["weight"] <= j: + dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - items[i - 1]["weight"]] + items[i - 1]["value"]) + else: + dp[i][j] = dp[i - 1][j] + + return dp[n][max_weight] From 2f7445e4ace3acc16ec3ee5a9b3cb92d582f76e2 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Fri, 12 Apr 2024 11:30:25 +0530 Subject: [PATCH 07/41] book-store --- .../__pycache__/book_store.cpython-38.pyc | Bin 0 -> 2301 bytes ...ook_store_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5872 bytes practice/book-store/book_store.py | 39 +++++++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 practice/book-store/__pycache__/book_store.cpython-38.pyc create mode 100644 practice/book-store/__pycache__/book_store_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/book-store/__pycache__/book_store.cpython-38.pyc b/practice/book-store/__pycache__/book_store.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7522829d1fb9622a8ac802abe2df5f655d226bf9 GIT binary patch literal 2301 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 Date: Fri, 12 Apr 2024 14:15:48 +0530 Subject: [PATCH 08/41] sgf_parsing --- .../__pycache__/sgf_parsing.cpython-38.pyc | Bin 0 -> 3157 bytes ...f_parsing_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 7358 bytes practice/sgf-parsing/sgf_parsing.py | 56 +++++++++++++++++- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 practice/sgf-parsing/__pycache__/sgf_parsing.cpython-38.pyc create mode 100644 practice/sgf-parsing/__pycache__/sgf_parsing_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/sgf-parsing/__pycache__/sgf_parsing.cpython-38.pyc b/practice/sgf-parsing/__pycache__/sgf_parsing.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7ccf1cb108f953b3a0c2c9d4e31a5df570ec1a58 GIT binary patch literal 3157 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 literal 0 HcmV?d00001 diff --git a/practice/sgf-parsing/sgf_parsing.py b/practice/sgf-parsing/sgf_parsing.py index fa30f3f..e1bf33a 100644 --- a/practice/sgf-parsing/sgf_parsing.py +++ b/practice/sgf-parsing/sgf_parsing.py @@ -1,3 +1,15 @@ +""" +Approach: +- The provided code defines a class `SgfTree` to represent a tree structure with properties and children, and a function `parse` to parse SGF (Smart Game Format) strings into tree structures. +- The `SgfTree` class has methods for equality comparison, representation, and inequality comparison. +- The `parse` function takes an SGF string as input and constructs an `SgfTree` object representing the parsed tree structure. +- The parsing process involves handling property-value pairs, nested tree structures, and handling escape characters. +- The function iterates through the input string, extracting property-value pairs and recursively parsing nested tree structures. +- The code utilizes regular expressions to extract property-value pairs and handle escape characters efficiently. +""" + +import re + class SgfTree: def __init__(self, properties=None, children=None): self.properties = properties or {} @@ -21,9 +33,49 @@ def __eq__(self, other): return False return True + def __repr__(self): + return f"SgfTree(properties={self.properties!r}, children={self.children!r})" + def __ne__(self, other): return not self == other - def parse(input_string): - pass + if input_string == "(;)": + return SgfTree() + if not input_string.startswith("("): + raise ValueError("tree missing") + prop_val_regex = r"\[(?:\\.|[^\]])+\]" + prop_regex = r"[A-Za-z]+(?:" + prop_val_regex + ")*" + m = re.search(r"^\(;((?:" + prop_regex + ")+)(.*)\)$", input_string) + if not m: + raise ValueError("tree with no nodes") + props, children = m[1], m[2] + properties = {} + for prop in re.findall(prop_regex, props): + name = prop.split("[")[0] + vals = [ + re.sub(r"\\(.)", r"\1", x[1:-1].replace("\t", " ")).replace("\\\n", "") + for x in re.findall(prop_val_regex, prop) + ] + if not vals: + raise ValueError("properties without delimiter") + if not name.isupper(): + raise ValueError("property must be in uppercase") + properties[name] = vals + if children.startswith(";"): + children = f"({children})" + child_list = [] + curr_child = "" + depth = 0 + for c in children: + curr_child += c + if c == "(": + depth += 1 + elif c == ")": + depth -= 1 + if depth < 0: + raise ValueError("unbalanced parentheses") + if depth == 0: + child_list.append(curr_child) + curr_child = "" + return SgfTree(properties=properties, children=list(map(parse, child_list))) From 3ddc88f56fafbc7509becd870c9099785914ec08 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Fri, 12 Apr 2024 17:55:09 +0530 Subject: [PATCH 09/41] affine cipher --- .../__pycache__/affine_cipher.cpython-38.pyc | Bin 0 -> 2096 bytes ...ne_cipher_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4368 bytes practice/affine-cipher/affine_cipher.py | 60 +++++++++++++++++- 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 practice/affine-cipher/__pycache__/affine_cipher.cpython-38.pyc create mode 100644 practice/affine-cipher/__pycache__/affine_cipher_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/affine-cipher/__pycache__/affine_cipher.cpython-38.pyc b/practice/affine-cipher/__pycache__/affine_cipher.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..09387f8240728a0daf9eaa49693c227324736383 GIT binary patch literal 2096 zcmZ`)Pj4GV6rb5$@2=gX4JGP7po~gU;?g*!hk{V4K%`PnIY7(7qPXjwvAwmuyO|j` zPBp#|B!a|+6IbWhPr;p!Fyh9Ad;tzU5Z>FhT~owZ`{unjZ{ECl@At-!R#$5T#xK8K z?W7?gf1t2D91uQ(Pu&8-Nt1BOodIpqVs@Gice(dHX}Y|^eV9ES@DSz-cfKO^YV;mB zsC}O2GK=EgC$%m1uqPNu&k`;;i!&}*GRy~JC{nFh#8e@%sMASO!Qv$E33-$4_ma5B z5;V{UxnNm`sZm?$M2~cmr8B$6%>5IQqT?s5GfLxPy;LZc527SxT8uRtsU+<(4bgNm zIUEflc7JnRXP>goXv{uf?K&G~oDK18AqCrrHdvH$wlRbmhxN@d+ggOR@SmvGER?0|#yt`D6-EyC zlT7btEFBHoLP7#x#Xk43$bU4;l^RKb0Y-XpZOqd^q+Q*^+@ll?@?O*ydf6k>851dP zFL#S)LLR_Atsx4i-Z08@yln<`9Hq(LNU&$oU?du~6F?W)jS+40fxHLb7x1YyAev06 zA%-41oc0l2&h7~XeciF%Fw#Bic4H0#9b036hCCKW@b!7%=%0NxAz1Ii{5C-2qDvEbpMDt{MLjy7b~~jk}XTpD~p~3SOUo<4nRy)r8!; zKzOC^$lrnY`yR{z4?ZH3z*I}$eIkD|fpJasGC_U1W&*ups@%Cm4k>E(ep<5qYuOf7 z{%adR&BEQ6m!hI+hHN-enza|b)HwMQ@@UCP1+pixvJ!LrlCt`$^#+O3)>m3W+uC!H zij$-@$o8R#krLMDNjK4|sD^a`skZhtBI~}CnY5L{(E13!l-o*@axu0p^s222=nNqv zEvyU9>$PUBcqCfbl9oo6wrx1ax(#M+WP`$mP}VQeZQX37n-$m^3waSkM+lSzo>gM~ z@(Ds5s~bQFt-rameWw@CTUr(sBc z4WM8hP>9+Y3U707dgcexp~ZheXuKU*JElioSgz$M>8)3=daMe;5ZhNOt|edJ2$lrbS{ z6k=f+I$;4D1kv?V-}PwCasKvBWgV>Qz71L}p2e+}M5L5~7vZ9p!e$AjuaXnqg@3-$ TK-|OfD6E@Tg>#(H4X^wI@`4zf literal 0 HcmV?d00001 diff --git a/practice/affine-cipher/__pycache__/affine_cipher_test.cpython-38-pytest-6.2.4.pyc b/practice/affine-cipher/__pycache__/affine_cipher_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..807193d2f3b0e102a389efc14a1ff1defade900f GIT binary patch literal 4368 zcmcInTXWk)6qbC8<2d&;O?u0=X(@)(A-ymI15BCH3Cz%RC@C;{(a74hEk`%6R&lH; zPwgW!`~^BZa#A^sJ>VH+>+G)fcD{3Vzq9*%cDACx^Sid%{1bA2 zU?KYypzsjh;A;?6p{lKDs!VfEKBuUPQ_zZPT2sKpA%K(zC9dei4 z+ajnL6zd%Qo*;WhE1hnuV-numxqFYCv z=r%d5#eE)%Hn9TIw17W6x6YBv65Mdng4K5|gEVQk*&tT4!$yNy%Yvbd`MPL(VXG}} zz(6NEw>B0_w%6o5%mf6zhx4`v=74p=T3|b*M=iwsCYopw?-VZq%}yqm6JmYXrl#!3IpXnGoRFTWE(< z&#Jk1S2QsELtBRen?+DBmg1l%KFgUKC!a zo#IPXs2Gv(3zj=2T3AJ0SRA9>n>B+NE+r0e!a$G) zBc|tb%VG7}R9sDC*)zimSP)l!Fzk>$=G@~luyNEoE{ML*;%RndG9MRRTrhYmIL>h- zi8#+VKN}A=v!?A?qOBXc>j`}@u`YnDK7`H#6Iaz$bxDoxk2Ud#VTMfoUxIryE&8Gb zE3U&OD{u_)arq=f13U!J(R=5{ycLNtJtyfWy><}PAT-}PAI_N`lk0!0OM9J=xLuQb z;M!i>B_8dDAbsDV#0cFUC0?=&DkaF|+J@nJjX)Tt&8)y{3g#MtV7?E;7zod0{LUz> zt68ju9xxX=o9sTK9oi+g$6|ilb8^%x9`(J5gbk$alRRHV&E*+QhEPBR)u=S&M#D-u zec+G*Ie&_n1|A&2=EEH(hQbLdjhx0eK*XECKavV169N%R9z+_13M4_`z|mMzHXEpR zhK@dm;fMV+g3ZqFJ~2XVQ_{3#X-U$Oqa{U4hE56k)B^k-+G6A)Oi5*+qGSWt(*xfy zS)f}k{QXc!jvZQ&BS>ZZFcTw=E*}O_>$2$tgt0u>DFu#K08VWqhaEybzjsk-Rzl#Ei zl|Ml7F^W%6yhSW?(tLQ3#Y{jzl+|+n^jCyj34SQkT#;kzS~V^=LdynX4C3lTzptN` z)^)#+lvz)Y1oCvrdfXBa`%gc`Q+)8P0-a@8FnC-JT?@`lfzW0Rd7&L#VN)mOVcxim gPJd*;y%^Ov4^3SDEH&j9c;l9yDl1D$Ik!;y2Si#p 1: + out += " " + if index < len(alphabet): + out += alphabet[index] + else: + out += str(index - 1000) + else: + if index < len(alphabet): + out += alphabet[index] + else: + out += str(index - 1000) + return out def decode(ciphered_text, a, b): - pass + alphabet = list(string.ascii_lowercase) + numbers = list(string.digits) + if not is_coprime(a, len(alphabet)): + raise ValueError("a and m must be coprime.") + indexes = [] + for letter in ciphered_text: + if letter in numbers: + indexes.append(int(letter) + 1000) + elif letter in alphabet: + indexes.append( + pow(a, -1, len(alphabet)) * (alphabet.index(letter) - b) % len(alphabet) + ) + return "".join( + [ + str(letter - 1000) if letter > len(alphabet) else alphabet[letter] + for letter in indexes + ] + ) From 7231d2db9cd9b24ff174b8cb23eddaf3dce24ca5 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Fri, 12 Apr 2024 20:43:34 +0530 Subject: [PATCH 10/41] zipper --- .../zipper/__pycache__/zipper.cpython-38.pyc | Bin 0 -> 1770 bytes .../zipper_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5143 bytes practice/zipper/zipper.py | 49 +++++++++++++----- 3 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 practice/zipper/__pycache__/zipper.cpython-38.pyc create mode 100644 practice/zipper/__pycache__/zipper_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/zipper/__pycache__/zipper.cpython-38.pyc b/practice/zipper/__pycache__/zipper.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d216fe83bf2033556e1b4f82b9162205e767a0e GIT binary patch literal 1770 zcmb_cOK;Oa5Z+xoiQ_!_ZdE{t144>Gjkux;A%Vm#m#UXsjPY(;w|TMNAR2{J%8$v< z;BWZKi8D7YFyGovOOi_^R@#}dXFZQ^KJRIx;WJuazdt@ZE;IH64|kVC4{vBE+a%sI z$t1s_Jri9f#R+RU5xxIsEx!0buNCWZ$+|*0l1p*JX1wc4N4htxTaqPNCS8^l>5;C; zs`N>FvL@@KtFj@RqN)SUgvO!Nm2qU|Javs$YR)uaz<$4KpC(Et?eOShD2Ic%{Z1uUW;klA zFO(=w`t6YpBNIoeJ+aAibu_w8t7m%H4-ictIRtYin^}=Z3ulD#iUk`7ZMmCdOsUv_ zO$AAU?}TZ1spJx=v>FZ~m6)MUT2AUFs&{7J>nb^I{h6rXtQQ3FAT~jOr^F?}M43-E z@^T9A3V4fZz>X=qq>&#|9dpr1OP|BuSZTzXa}EDeQr)0;b=q0;Vp7ku*$*R&2zjw! zqj}pn=7h$P?3j{L+lXQ_QSUYrLNBFDtBEp!jScAXCVjrZeBoZ{5=a_&LOBquSO(XO}a^6Bx%)RjbUqnheKEE&;H-%mY!#+8lpq@K06x^_%-U|l+ zYH`pzun;p7miU$wHs~{C%$UDKiYzBaS1j0o(~{yT85nxvuaLpsgWtrVB|}See*U3F z9JRlo<-(f&Q!ySrrcmC z!F5)GrNp`tDrRW!rkA&M_?%#A=5^%mPOFKlV-WUL5Tt$(^oMfXgIy1TPvfwcd+Lb^ z=^E@Sb1{_KqoBG5VSm#NSfIY%g~0Un0mLE1BZ%9fSqqc1*D@eX@PWq#_g$~#VV8?- W&vaVc>UBXMXYH6s0@&He&CmpP^Y literal 0 HcmV?d00001 diff --git a/practice/zipper/__pycache__/zipper_test.cpython-38-pytest-6.2.4.pyc b/practice/zipper/__pycache__/zipper_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6f28d0ba6efb818fc945addba28e2aba415f650 GIT binary patch literal 5143 zcmbuD&2HO95XZUv5=F}&abm}^lhpZaRG>Cmpy;J&gC<4Wi!Vuf5YR4Y?J8kPQS6dR zVpTphr#?XsJ=n;}@6h)sz-vze`T{9Xq%%v47AexEQwp5risX{}+u8rl@bUb-t-$uW zz1lsxttfwCWqQ-0au4?K0T`w*;wfz+OSPw|3Q>A`+aSpqvu(l|)vNWawndb$6{a!$ zmBMsxKCAztwQWWoDlKCSEh#%K5}R!|2)O8AeR@-&au4=!1cuA!wN*x#`bueQNtu1Fa%Ap|@m0piX{>=c(qiMe;|+MM zd%PRPhH#%ejm9{3EnVPcalI@0JsJtl<66{D4(6ONmxpyAI=`!MGSB@W;ux2+7-&yao0` z;M5XxXzFMd!5r!00v<1;xrAl~4FXNfWjKnPvNJfAR1PI|d`9I6-+|L1-j|~TJeJ7t zR-Q*u6Xi_4fo9){3HmAW0G~Z1iI*lc67M^q5jPT_`!?L^`&=~Pf%(4ACj-eHM!C;E zfh$V-+aSZWe1F;TZJ9o1=BlXJ#|j)~=4$F2IA@LNIeVIKEFc8*4Y7o#&=qjvQaObg z=K<~ZI|Hf6l_pA&V-z)*ftHyp4=O^-PnI*CB31{1*uZWVxx$8Yg-AHhL1$e52^~P! zrH=K3@8PBr#{gltlXr~bM#_8q!#nnP;sUZnxd5p+Fpj5(IV%^nyj)yE7+K9IWV2c% z5re=h$FfO=*Yj9%`Y;H}iG25eiR4L;tZ>edkPsw}R6Pqxe42O(t|iW{>$%Y$g%ytR zumk!*d$3};fyb%GpK~viN(xKOK=?nGqgo@wFY~D6Q_l5(49koNMHN|s2w_NdT2N6S zLd-lQa*3Lep`+T4z!woF8e9v7g{A>!j3-+8b;zd~!3)M=Rv zn|ao0E9D3=Hmso07<0V?!pX#yD9z(2td>!93{hHEe)^s`?JYQe2C^GjWYpXW z=(@h+iHmTYPfu=2(#-94x!`_811EYKV*C|4Jx+)6!@=DW;PrJalhfCi)!|ki_~}jW zv@XOJr9M84#x|wBJ{v%=N8<*i_+2A8Bi8WM*U_MeiK}SdL$itII-1*PFufLc(R_er z3(Yo~kI0HRYA9x!BqrxDb;1VcfVE z?9sH=q`@A-+)6TJx9@KW{zAABkL&4Qac%OS4L3{nj)<)Re6zty@ Date: Sat, 13 Apr 2024 08:27:49 +0530 Subject: [PATCH 11/41] alphametics --- .../__pycache__/alphametics.cpython-38.pyc | Bin 0 -> 2380 bytes ...phametics_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4904 bytes practice/alphametics/alphametics.py | 46 +++++++++++++++++- practice/alphametics/alphametics_test.py | 2 +- 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 practice/alphametics/__pycache__/alphametics.cpython-38.pyc create mode 100644 practice/alphametics/__pycache__/alphametics_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/alphametics/__pycache__/alphametics.cpython-38.pyc b/practice/alphametics/__pycache__/alphametics.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ea15a0ce13e9957de0a596e60d8f4413fb3afdd GIT binary patch literal 2380 zcmbtVOK%)S5bo~jnSIzXU_!7VKqHXIC}AB4&&aWe@DUk=6CXCQqG7w&89Xm{_d3aH zRzh+R;fOdPaj=j69sCCledR*_LQYimu3w2GBp7LGXRB+fs=xlenww|Nv8RB-E^gNKCp>R%fiIm@#VBlbkU=jW^!@(#rsRRO$SU(c3}^D^fnvO5tB>?4@phI z$M@(m*`cGL4r;bb_eh^XPvP+Iwt(xKL>ndST_uvNx|`(6radFZg+*G}QY0dSu0+`v z_ew2|NDArWwK9XucG^D8b-iJ(`X@{}dHsU1I=(7yoSqy~S6FTgw zeLS)dN~aYZ2J2jQG}SE#_U6g*!cC*JSx7qHC9*8ig=J+nZCNd-`%3pxlP^>{=>eQ- z;TW{XpF7n9*Iq<)du3iNy@<`=nMQ<>;TW7dV<%&oKBipEX9qzCl`ZJMX9l|<9PZ1gY2>RNL^bcEWKaoC_4XE0z$Lx-56Ki>YQ?|el z`F21L&`HC#>IiB#Hkn?NZ8`OjJR-a8J>MxKl&q4iH5q{_rjuz9ndk9pnQbc|`zgBk zUz|6X_j#N@m;|?QFx&#_T|y16d+tkc;h4}5M4nU?vcGpXL5cwj1*l1;8>uxS?Sm?y z$^fH9YDB*r6!OxcI8hR(UnPtIeJ_Q1uu>M#BSxK|!3o(2pn;do+=v1l0BA`zx#l&{ zVSXZ^m_5d!rO|+xf=m_rOi#f-NAEpFNj(E@0k>x&YG9fS=f`lJLVrhG`|<}LUis+b zPd@$Zb4M?)Jku(&7O8A5fbp#gY*mt7>Un~!o$v>FGFE*Y=s5^~CK*!y3MM-T28PAV zh(3Z{&yzJE&=!+GqJ6qD-V=uG({2j})%G1cx3Sv`ueG?L3U$BIOYdPe)H_GLzw_Lk zb`IYFy$8St$G##Zc+eH8N#Un~vjW-$i~Ln{EUz=Sq%S_s8a24?S%7Ei%YIGBr)- z=(}{5&d_s|u~~Yap+~*Q5V?09)0^h a#WCcL;A<}Cr5t2x3H9p1gOb7A3;zHMVkT(- literal 0 HcmV?d00001 diff --git a/practice/alphametics/__pycache__/alphametics_test.cpython-38-pytest-6.2.4.pyc b/practice/alphametics/__pycache__/alphametics_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e0cebc209187d5efd5e886f49e6a5971bc71966 GIT binary patch literal 4904 zcmbVQU31&U6$L1YqA1CB{E^0K;-Vi(hLIypW|HY-Cg~Uw0TDA4(IJqBa5{s5wUC8| zB9#SbN1XI2dCo7;L;C3F{)GMuy!MHIpbvd;d+uETf=tPlOAZ&i!0x^GoIQJYiLW;{ zS{gq8_~(Pe`)_I5zo=3D)X{i^U(!J#G@*~Qq0ZOZ@ls9Gwd4A5SyxXQ!v>zzMk~k7 zVN=)kG_fS=KWU;KHU7H#G zjnKnbqd(hlj7?)_$N1_i!|C(xUS=pwl=U3XEb z(500$)%vrBNet~sre+Nt8L=vEpqYKfUZIX@8c)W-@f6`7g-@ekI*z}aM#0l?gz|7A zgD5;W%5mJn$O1;^QW$S&@c#pM!`wBYf=-7qcCH5b0fQVxp@_#%f>|UdK^b721o0Rs zV{xZ~>hnucz0Se{j5m_>X9VWDKUV(E?yg*>NhK|m$~Pss&Gg-?3HfMIYtJTuh@Zr1 z5*)_ka1#dU&(-*@1ogWktC~3-^=u_Y)}WLh4d`nr{c#)e=e2B``Za+DSnZNg54qPy3j z=z@U-ifE@|iati=RTR;Y-vY#Mv6%ezR& z;z!beqxljFB{t@frk;~5YfsTif@ad&EnahyCNbBZEq_Z5qL*ovA5rZZ5?oxH>A3(u zg%Lg>aZ0Y$^o8%g>(^PY6_XeErleZ(y@iI*|E4R>f2f?sM1yh{9R(|#Z{TcpW9Ilr zabi$@F^*u1$5m(=$D`qr&OB1CM=DrbZvr_ALaZx*}xN z*F<|jz9?{HwbB@d4`88eE93S+bs4w}4HgGQ$jWf(mE$^R29EPFaKqpjb1{fv@{peE zsjwZwLcl3P6&DZjR00O2j1E@$ss>vno*Zu8+w>hTrxw;=xT{FPnq!16uRGf^88IzO zA7oma#=ue0@RC%Y!BOO3g|>As#?+(qN8AOw@&z1bJXOO4vD>p2<_0uRay32lR>}M(TJZoPu?Z z-L!3|=U_>aeIFWB>C@O8Kv#=X$WCzX!o>RU3trDp6TC-C-V}Lzq;rMj{g8HPwQnMQ zYsJpUXAL?VNIDHy4rO%Ycxi9!^WmdilXN&5Hq_sXm;bsxTsXp3_Ou`zi{R5Qz6e4g zqOnLiFq9Z5w58gAYwzOU%vD?Gm#;nQzQRqvy^%G8V2t-1L6EhA;CLdYcoh(2>p?&- zAk-6i6M;zj8!hoBNR#vzUf!pIj^6V3RJ5shNW~{q(5r(=L0hz>0}3&e(D}Yd)UFqck2T+4`fC)1YkK4^B>r#Vz%U1aAPgWb{nNX_T#&x3ZPuUJHYn z^iXC^ydc0kjU>hUmGhS({C*{C`nbP~&7J*MqGk{jde;0>G4m&q2%i?4+HI{_TVMVk D%cOqu literal 0 HcmV?d00001 diff --git a/practice/alphametics/alphametics.py b/practice/alphametics/alphametics.py index ca9a272..d0246df 100644 --- a/practice/alphametics/alphametics.py +++ b/practice/alphametics/alphametics.py @@ -1,2 +1,44 @@ -def solve(puzzle): - pass +from itertools import permutations +from typing import Dict, Optional, List, Tuple + + +def parse_puzzle(puzzle: str) -> Tuple[List, str]: + """ + Parse the alphametics puzzle into a list of words and the result. + + Args: + puzzle (str): The alphametics puzzle to parse. + + Returns: + Tuple[List, str]: A tuple containing a list of words and the result. + """ + inputs, value = puzzle.split(" == ") + words = [i.strip() for i in inputs.split("+")] + return (words, value.strip()) + + +def solve(puzzle: str) -> Optional[Dict[str, int]]: + """ + Solve an alphametics puzzle. + + Args: + puzzle (str): The alphametics puzzle to solve. + + Returns: + Optional[Dict[str, int]]: A dictionary mapping characters to digits if a solution is found, + otherwise None. + """ + words, value = parse_puzzle(puzzle) + nonzero = set([w[0] for w in words + [value] if len(w) > 1]) + letters = list(set("".join(words + [value])) - nonzero) + list(nonzero) + for perm in permutations("0123456789", len(letters)): + conv_dict = dict(zip(letters, perm)) + if "0" in perm[-len(nonzero) :]: + continue + + values = [int("".join(conv_dict[w] for w in word)) for word in words] + summed = int("".join(conv_dict[v] for v in value)) + + if sum(values) == summed: + return {k: int(v) for k, v in conv_dict.items()} + return None diff --git a/practice/alphametics/alphametics_test.py b/practice/alphametics/alphametics_test.py index 6279b80..ce78d29 100644 --- a/practice/alphametics/alphametics_test.py +++ b/practice/alphametics/alphametics_test.py @@ -64,7 +64,7 @@ def test_puzzle_with_ten_letters(self): ) # See https://github.com/exercism/python/pull/1358 - @unittest.skip("extra-credit") + # @unittest.skip("extra-credit") def test_puzzle_with_ten_letters_and_199_addends(self): """This test may take a long time to run. Please be patient when running it.""" puzzle = ( From 17163b3ce92eba1e39c377b259634c078e364137 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Sat, 13 Apr 2024 11:10:15 +0530 Subject: [PATCH 12/41] two bucket --- .../__pycache__/two_bucket.cpython-38.pyc | Bin 0 -> 2316 bytes ...wo_bucket_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3614 bytes practice/two-bucket/two_bucket.py | 114 +++++++++++++++++- 3 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 practice/two-bucket/__pycache__/two_bucket.cpython-38.pyc create mode 100644 practice/two-bucket/__pycache__/two_bucket_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/two-bucket/__pycache__/two_bucket.cpython-38.pyc b/practice/two-bucket/__pycache__/two_bucket.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a9f00540628d2505593e9ee783a01e3e4218c6b GIT binary patch literal 2316 zcmZ`)ON(4Z6t35O^zEL>WQ@rqj4^@+df^O+_##M%A&AHz#2_?@L(i?-lVTr zO6sw!Vpo*Yfv+MusjOtbQv2??aOdFupBuY(%EFbq-JOFj-1c{G7Uhv2Pj-ukh0FWp zaChRmx$o!2E*!mIpGo4<&CcXel?;n+Idz4`f#oH1LK(RsH}rX(Nh4EjWJ{fc)Y9%e ztT`cN^^r^)xsEp>Q2j0fHy1^asM8gzp)s|lhq|21*nZtcCp*Y)sgXV4kwzGoe<3EfrbBIq2DxLUUfT@2l0 z*6}*BAzKOZ7gH8Vx==^+t4)zVZ5!C}8{=QilI8q&tH1|2O9{gvnJf3Fk0GTb@jme4 zD0Y97>=RgsF^$l8B3&GeRTo50hQ^XPnNMxT%(*^mhGq~)3hUl|B9AwH19R*Sy51Gw zuP1*};8QEKuxc}8PqWY>M$!6^L3iMr0q3E*0@ZES?Bbd(2tW&}^MdNUAX0JJZ`E~Y zuC*$YkAc+G7R7`mGZ}-DQ8AqOM~>c+Dh2U)$`tHP2Lmp+BM`VIbqRGXbnUe&>W^&k z@Ffi4MHE$(kEbJFCHMQKAG=4Lbjgyk)9UqIx#DJLtt|5K$S$pJgAP7R-6nN!PWGvT-fs(km&9hkYgdRKPr_JAfHcC{ekB|Vei@FVOr6f)JJ8)jTe{yO_oU0o-RdI<5rWvgg8-+*A!K1G zVYVe^c#}9gm<4@g+?Ss1#M6}}5@h=XkJ~loE}x@V`(p3MY{kD4G_;q{{ao)kx(g>6 z&lG{vy^XGI7;c?r&y9!69CsRi^%7TRQ1txiTVKY;9IYhW3b}=}XY#z-mX0mtX!Vgy zx!}7KBrV5<+pB9e?+_Uky)Hjj_x}=2u@2EnK3sC_udnfcp|(n1?a*B%Z?APknK^#R z5zX5Tw@sVqf2QUyQ}+r@soH#P4yjJ;2}W6>_rFT74aasmC_bmlmXwK9rI*q){UD9; H%Tn_%rVOiO literal 0 HcmV?d00001 diff --git a/practice/two-bucket/__pycache__/two_bucket_test.cpython-38-pytest-6.2.4.pyc b/practice/two-bucket/__pycache__/two_bucket_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..28a1505d5b91bc29b4454dce716df25ce58fff6b GIT binary patch literal 3614 zcmcgvU2hXP6!pwxlF1j)Qb6pd&@PAwZ9+kamldkEAf7f7-9lHRm8?nZq_ZS5!FJR( z>KnZC7pV5Bf64o}PxBY{Y45e0XxJuIOQ93ZwLPA(?>#=gK6zQMR|s5xh1Yw3mk9X> z8~LjMjWxLCQ!tD$XFx*7lR z$|5VX3X~;QWi==RR%e%>EVIk(3X~PL#Fn9~va4(b${M={&Ro~^&7Jg@arZS>n_Q}{ z12ax9tOF)w9d7v*n0@krCbcdzt3AQ;RV@>nw^NHN!)tMegWhOkwq6h;&A}@+yvK4f%z{G!?W-Z5-g1_pu6yR`&^D30~--C(%>#s ztTZ@q-mf@B8LeU^fC9MiQ7Tdg$pJRu^nUvE*_Kj@)0l zlu@7S%ByHF=Ffykh0zOhPpTixswAnRqg2YcGvHLERPd;~P1QE1{WKcfgDE90IdN*v zWOWXhCx3qofzyj4fw@L}3nnwf!Y?5MqV}{I@Z>GLZlW{Hz+hxFGIwF*zNp?xsB6q)OA2< zf@Gn(Lg_GNW7ro|*C<8xZF_{-iRLUuQ6X-kLA5WwMuXX1{D|f@8gwP+p3#d&3!(bQ zFeD!HffM+-Um@@UU*H>!st!8ic%b4$>e||959oW;x=BZSxSCBH4#3b9d`HBJ>+ left: + fill(buckets, to_bucket) + buckets[from_bucket]["cur"] -= left + else: + buckets[to_bucket]["cur"] += buckets[from_bucket]["cur"] + empty(buckets, from_bucket) + +# Function to empty a bucket +def empty(buckets, which_bucket): + buckets[which_bucket]["cur"] = 0 + +# Function to fill a bucket +def fill(buckets, which_bucket): + buckets[which_bucket]["cur"] = buckets[which_bucket]["max"] From ed48a2f6d456fb264ffc1549450bf4c2dfce73c6 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Sat, 13 Apr 2024 13:54:40 +0530 Subject: [PATCH 13/41] bank account --- .../__pycache__/bank_account.cpython-38.pyc | Bin 0 -> 1766 bytes ...k_account_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5458 bytes practice/bank-account/bank_account.py | 43 +++++++++++++++--- 3 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 practice/bank-account/__pycache__/bank_account.cpython-38.pyc create mode 100644 practice/bank-account/__pycache__/bank_account_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/bank-account/__pycache__/bank_account.cpython-38.pyc b/practice/bank-account/__pycache__/bank_account.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..05baa07368c9c88f5174a2b9113d664142d7effa GIT binary patch literal 1766 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 literal 0 HcmV?d00001 diff --git a/practice/bank-account/bank_account.py b/practice/bank-account/bank_account.py index edeab45..0d5cdaf 100644 --- a/practice/bank-account/bank_account.py +++ b/practice/bank-account/bank_account.py @@ -1,18 +1,49 @@ class BankAccount: def __init__(self): - pass + # Initialize balance to zero and account status to closed + self._balance = 0 + self._opened = False + + def _raise_error_if_not_open(self): + # Check if account is not open, raise ValueError if closed + if not self._opened: + raise ValueError("account not open") + + def _raise_error_if_amount_less_than_0(self, amount): + # Check if amount is less than 0, raise ValueError if negative + if amount < 0: + raise ValueError("amount must be greater than 0") def get_balance(self): - pass + # Check if account is open, return balance if open + self._raise_error_if_not_open() + return self._balance def open(self): - pass + # Check if account is already open, raise ValueError if already open + if self._opened: + raise ValueError("account already open") + # Set account status to open + self._opened = True def deposit(self, amount): - pass + # Check if account is open and amount is valid + self._raise_error_if_not_open() + self._raise_error_if_amount_less_than_0(amount) + # Add deposit amount to balance + self._balance += amount def withdraw(self, amount): - pass + # Check if account is open, amount is valid, and balance is sufficient + self._raise_error_if_not_open() + self._raise_error_if_amount_less_than_0(amount) + if amount > self._balance: + raise ValueError("amount must be less than balance") + # Deduct withdrawal amount from balance + self._balance -= amount def close(self): - pass + # Check if account is open, close the account, reset balance to zero + self._raise_error_if_not_open() + self._opened = False + self._balance = 0 From 85235c845b24f8bd06118e55b9a20568a84f8c98 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Sat, 13 Apr 2024 16:35:02 +0530 Subject: [PATCH 14/41] react --- .../react/__pycache__/react.cpython-38.pyc | Bin 0 -> 2916 bytes .../react_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 9011 bytes practice/react/react.py | 74 ++++++++++++++++-- 3 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 practice/react/__pycache__/react.cpython-38.pyc create mode 100644 practice/react/__pycache__/react_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/react/__pycache__/react.cpython-38.pyc b/practice/react/__pycache__/react.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d035ee6e467ca398910038dda7feb04c8c2312b GIT binary patch literal 2916 zcmbtWOK;mo5Z+x%6eUY?{HUAOX=)UCKt&;?Xb(YQ7y+E3DNwkFAUPNa2%5V#Xj2dG zQf?#2CmCpa>_2dh{we(ny!K!8)Nhv5vkKZY1ZH-ZJKUL_nQw+KYPAZ(Q~TrY@iu0E z(qi^;uy_J8J7C{2$t1r5jl?0XgmkcSu;Q}toHdFeq~@N<_j`D)806TYkX(u@cIc>r zbY$U*jrd_v6;EAR9IvD+OOPl@PnI!yvVzlB((?D6UO(AaaU6;nH8dyM2bp!SAs;fI zC49s%3dx?c8-CDmQrEu-;=W29qms1ZcaMzH7fPFkNDD^A$7wC~1+v?TT2GZZOS-+5`dR5PGVNAR2VoM0s-+bs8E^Jpr=IWAiM~(fnF1IS zE+4Ehvr1~LM|plc8W`AI^~9Iaw-Peum)zVjAdH17c60FNSHZ;)u}GK zH|IGziO4Fti%I4=sN+xBtLmi~ifi!(wwzbVi`IaKV-3(nh^M8n+eSzfUXnR!xubr{ zo$QU>yI`ZPL9hxk^aXQVQQ>n&k>L}gZec;Uzve^!hI3@#*bI?b-~>`OMCJ?}5rMCnPmHzAdIM+~;7-uZ{z+e1QuoEVZRqzf&m)^)tQJ)>-Gsw{WgL8DAL(h1ti z_mPo)yDR%K&8xnD-VfqzM-xa>ucx~`rIXjzgQ<%o# zUQzH$p};F8uVD8=yq-YewHs5!=!5b(3}Fl z4>C=#JQD>F%oAae>`20MVaTqFl#>`;8Yhuxlu|dM3SrV)xr6=Veh0|xb~ME-Er&rI z9|hr=u{oUH_e~P$Bu|Z~bK>{oBx(nV%3lRXu`<@Xd4}tcaE|_%n04~h(-b3ukfBr{ zn7iDwG}xTE^t%IIui!YnEWZdy4?$z7ug&WD7qIW(yE(Ae3G6_c7y)HV;J%FyY~qcf zUe8@D$9Nz6cF{3p<``i!jk}4wfGE6&>{mY{>B8gG-(u6VNP$zJ~)jWx%%p)iWylg&}`w z$0^91v=W)91K@N*rK!GIOrQo6G;##`H$2^3ilr%F9zdLa3knvfUBdUJgy?%+cQvNPSeo%%%^LU~iP^$azwe+wm(erHSh@PNm3k`ao^hsFDUPTA_#?ASDWnSDckZd&y;H zmvW`jht>vq>8+<;iW)uX&}09Do{FAw3ii+*dMJ46q3ERzn*P2S?vlIY(p0R3!p>tK zGvCbb_kHutH+p|@v8v(s`^K5=i!W)~->EYGvrxH-E4+<_Yh3rWhAwlXZ5o=cwXH@; zrzeJQx66&PEbG40aB$D`EA48d+FocZ=-Rs)w|ME1#!H@axAxF%EOPypR<{ReS=&6+ z<8s#(QOot~MqK$`r`wA*Jl~HOHi9iEw<|)-brvjYnF;4pFYz*WklVb%tH{fIf!B~be3369ukaIm8F`gI!%re#;HUU$H68r=DoG!uDEMK)6=ZTN5OuN?8P9SG)W1 z3shjTMb^Z8hiuo~^O(zIpC`~mNCIiPqaR#Khq*fQtKvymK}*RbaHFp?nhNB1fnPcm z=H`I99GpfnoDWe!SvZu?EXk3pWC_*yq7=vNjE#eZY6Pr_+glzBz33EP4Q(Ve7+XJB z%MIsA-)DwpqL~!i*HB4@6#>~D42PSKw1>t6Lk`fm3u2}NENu>mCYko=2Jz(4$q_Ex+URjm_f&j&FFq0o})gc7^y7r z`V;_X_xUBX5}rgtI7%dS<9~)_|JN!XeCsL3l9}_2Ccc5bQb==}$SoKg(nqsz!1hkS znQ3*VJ_>?%HfY2x1=^2i4z$M^UCu%_=G(=anAkd;Z*^$sdU*bc3(HMF`W z>PFv$8kdH5EUCs8)Yz74Tm~1EYSTR@RqcvW?Ti$KTsTeIoY-bE2D3TwZF)m0@{eXt z7A;wd1uW>W0E#SF#%@kh;pp-XXnmM1?>mXS6RoE5Tc0TJ6f_7J=PyseFIj^daT2HB&$a3F7>fQVUnzxUN4)2WxRNxqp0|Q8Phm<{8ORY>Tl)Z%7Nbk)NI+ z6^2e{(DC<~oN!n;wZKi`h%~8WV#JpzS)=3RXsMs4fp$!p?J;;s#g71Qek(DDasCj37c5hWJ~JM$P7pESbpsJG*B744_lH%F zD|cp^)=NYsm@Cwa#I_L8p*cTVr}xmV+-y(R+vTYS{AgWdFsDsv>Z1Gtl_JdZE(#2~ zg{!0-6Bu<{mP#my!TBQ`m!|iBPF+Zs^rq}BiaF0d`2f`PQ(9m!b__5gr}Fz z9<8-fskcSYX6>FIwYol*0g5Y3s&{4@3w^9}^LZ4%OvDp%Lq!xD(3W%{yNQ%=CH=QwVk`to1In@b~+(axc zaZ2!|-B+xpFCEEha>S+k5|#VrLtU|W?8^!*WkZ%zOR_FQX4Oq`1tZFgw~$72vivt_ zaP|VGCLa+cxFoQ2ZimC{wS&E>8#KgMhilg>C=KdVJw+v2z(B~+ri~m>A)iaal2wUM zsD@L=CpLYrQ?HC@tejw?t@s*}2DtlXmb>EXbU!8Vn|T6f7tP|a{Tj`Lt4Q)zb)2;1 z7cJv2AuuRhw4fIEl!23UIi>HfPa=kp2nAb?Ol%05q?5hm<<#;Hqret28Zky6x9@|L%00F{Rk!a?4oG{Bt z#m1U`@WJObp&80%{DD41E23=PA3)ti;5ZFf$Pk8w5QaSrVU%E>m5%@l!y=bb>zmrp zzRjJyjU;=Mk??74bc!b1t&oMgLC@z{VBzM&R?-6)%b?Trn74-@S8IF3-Aur% zXfH6|2CT^q-}hllN-`g&lGFmbf(QW92Jj zT1sxsblp5Q2>*mGLRyuwx|s>94CDIa0hVMtHleM@CRhgZ%mVXU2zvx=%>@`!U!J@q zyKf~+4Ik~^puuuuKGN6Zj+1yn{p3z%;tqv$;PV{2KK~QLR{Fe`vyc;WPJ6zQIzx%4 z=q}sp;mAQA0S&|2$+Gl?==Q&p(PVHYn^&lXb6Sm0l9ttSxk6Rizz*bDm{i5_HBp`b zyoKkDs_Wl(_hk@M?lIK*mRX{xvbZjr^+)X@BiQI*}Or?vI ze3g Date: Sat, 13 Apr 2024 19:20:28 +0530 Subject: [PATCH 15/41] word-search --- .../__pycache__/word_search.cpython-38.pyc | Bin 0 -> 3567 bytes ...rd_search_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 10606 bytes practice/word-search/word_search.py | 95 +++++++++++++++++- 3 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 practice/word-search/__pycache__/word_search.cpython-38.pyc create mode 100644 practice/word-search/__pycache__/word_search_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/word-search/__pycache__/word_search.cpython-38.pyc b/practice/word-search/__pycache__/word_search.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae46b94ff93cc2ccbbfd6519ebc5f02942eac916 GIT binary patch literal 3567 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 literal 0 HcmV?d00001 diff --git a/practice/word-search/word_search.py b/practice/word-search/word_search.py index b12e6b0..cdf8cf5 100644 --- a/practice/word-search/word_search.py +++ b/practice/word-search/word_search.py @@ -1,15 +1,102 @@ class Point: def __init__(self, x, y): - self.x = None - self.y = None + # Initialize Point object with x and y coordinates + self.x = x + self.y = y def __eq__(self, other): + # Check if two Point objects are equal return self.x == other.x and self.y == other.y + def __repr__(self): + # Return string representation of Point object + return f"Point(x={self.x}, y={self.y})" + class WordSearch: def __init__(self, puzzle): - pass + # Initialize WordSearch object with puzzle + self.puzzle = puzzle def search(self, word): - pass + # Search for the word in all possible directions + return self.left_to_right_search(word) or \ + self.right_to_left_search(word) or \ + self.up_to_down_search(word) or \ + self.down_to_up_search(word) or \ + self.top_right_to_bottom_left_search(word) or \ + self.bottom_left_to_top_right_search(word) or \ + None + + def left_to_right_search(self, word): + # Search for the word from left to right in puzzle rows + for y, row in enumerate(self.puzzle): + if word in row: + x1 = row.find(word) + x2 = x1 + len(word) - 1 + return (Point(x1, y), Point(x2, y)) + + def right_to_left_search(self, word): + # Search for the word from right to left in puzzle rows + for y, row in enumerate(self.puzzle): + row = "".join(reversed(row)) + if word in row: + x1 = len(row) - row.find(word) - 1 + x2 = x1 - len(word) + 1 + return (Point(x1, y), Point(x2, y)) + + def up_to_down_search(self, word): + # Search for the word from top to bottom in puzzle columns + columns = zip(*self.puzzle) + for x, column in enumerate(columns): + column = "".join(column) + if word in column: + y1 = column.find(word) + y2 = y1 + len(word) - 1 + return (Point(x, y1), Point(x, y2)) + + def down_to_up_search(self, word): + # Search for the word from bottom to top in puzzle columns + columns = zip(*self.puzzle) + for x, column in enumerate(columns): + column = "".join(reversed(column)) + if word in column: + y1 = len(column) - column.find(word) - 1 + y2 = y1 - len(word) + 1 + return (Point(x, y1), Point(x, y2)) + + def top_right_to_bottom_left_search(self, word): + # Search for the word diagonally from top right to bottom left + for y in range(0, len(self.puzzle) - len(word)): + for x in range(0, len(self.puzzle[0]) - len(word)): + chars = [] + for i in range(len(word)): + chars.append(self.puzzle[y + i][x + i]) + diag = "".join(chars) + if word in diag: + i1 = diag.find(word) + i2 = i1 + len(word) - 1 + return (Point(x + i1, y + i1), Point(x + i2, y + i2)) + diag = "".join(reversed(diag)) + if word in diag: + i1 = len(diag) - diag.find(word) - 1 + i2 = i1 - len(word) + 1 + return (Point(x + i1, y + i1), Point(x + i2, y + i2)) + + def bottom_left_to_top_right_search(self, word): + # Search for the word diagonally from bottom left to top right + for y in range(len(word) - 1, len(self.puzzle)): + for x in range(0, len(self.puzzle[0]) - len(word)): + chars = [] + for i in range(len(word)): + chars.append(self.puzzle[y - i][x + i]) + diag = "".join(chars) + if word in diag: + i1 = diag.find(word) + i2 = i1 + len(word) - 1 + return (Point(x + i1, y - i1), Point(x + i2, y - i2)) + diag = "".join(reversed(diag)) + if word in diag: + i1 = len(diag) - diag.find(word) - 1 + i2 = i1 - len(word) + 1 + return (Point(x + i1, y - i1), Point(x + i2, y - i2)) From dad37f4113e5c16bda0575160a32eb428806f1f9 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Sun, 14 Apr 2024 08:04:42 +0530 Subject: [PATCH 16/41] robot simulator --- .../robot_simulator.cpython-38.pyc | Bin 0 -> 984 bytes ...simulator_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5342 bytes practice/robot-simulator/robot_simulator.py | 44 +++++++++++++++--- 3 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 practice/robot-simulator/__pycache__/robot_simulator.cpython-38.pyc create mode 100644 practice/robot-simulator/__pycache__/robot_simulator_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/robot-simulator/__pycache__/robot_simulator.cpython-38.pyc b/practice/robot-simulator/__pycache__/robot_simulator.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db85c7033fe3172f121a33330e944c9ae53b91a6 GIT binary patch literal 984 zcmZuwy-yTD6rY)$Sq=m|(Rh#;E1N6i5-JO0BtoeVg301wD)&{u|MRDuK><# z?0gBrFvE961ZfyFq!G}PQ{yQI<#Qgw!|Y8VLSd>ul%N<(+tO zCpOtI?X1{*zsN=%du&~j=7Y}2#XwGM$I+P2^K@|7kBiLJzP|AnM<>3abvjH7t!do6 zx{L_<>1=hw#p}a_ZgssViN>pL`3pwD3SNjJ*p+9Zxu3^Q1Na4M#oe{@5T;433-+K(ZIGh`3rz6096#M|J^L{se-FY2FYG-sIC_o?mJBbA0ad zbgCwT3cBr(=o-cYtF@ofdXSmJKH1Y+9~{R0`o!G_q@#b8dracCcV*E4jwpPHT@j9s ks)}^msxEF)&I1y2Bq;kX7~gnVkML?189Bi>Fh73cKb%k1DF6Tf literal 0 HcmV?d00001 diff --git a/practice/robot-simulator/__pycache__/robot_simulator_test.cpython-38-pytest-6.2.4.pyc b/practice/robot-simulator/__pycache__/robot_simulator_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9404c12298bb4eade0164e87dfd6d9b9547c29bb GIT binary patch literal 5342 zcmcgwOK;mo5avUasE6ON6Wg)lyj%!Pq~_291=_+wVzfXF2bE;6M_#;mfoPD3Ham0y$8TXCV&-+(bSLYp{-d4sO8)@_D!o zcaSf@UATw*8r(;ao54H>w`bX%mf^dsVS0X3#A!ztVIgBb#;^APi7)sfVi8};KZ-Ae z*U}5|nGDizk|^{>8DFFk2&iA)Wu)v};*68B!bm5RkpxA<^GxP%f8Q}$L9yw&3@pd+ zO)toU#muH}xz4#1WIVHVs40y6a4xWE6#e^~>OP8kRikoXfa_S*C#LtE@3yPvsmYp_ zXII+%HpZF4PSSeb!0jEq0zLQBi(VCf4qS2^s-0< zu_R54KU9Y8R=Gs{o!YefA6{jN&Eae~iEOISgFF#hJ*-HiM1(9Bk{P@UHlvw3=8@rB z&rQAUdKMWw!tA*n|9BbyJBazyOE6!qDINYN_>NdeiLWILCy|GfjKP%wxffhCQv7Tb zT<4iExB{`xRMb+=4Fp!kcAuMXnu6ju(H<+@9?fIJIWoP_-@5PWrs4S;DC3cO^t)If z&p%AFLZbX6kTVL#^B!CdY7rm2iIxXLlK10i2_%8#9{&LKjEOcTKQXkCb2+Faw6ruw z@GVD4a8GE>kB>GcKXJ4iR1#WBo+F?okOY=zu#d+_8|+KV;3!`E;W)Er+D@Dbh2 z0Y`5Be0<0p-Ex}D zv`xqN^fPS;{-dQYnEmG+!r!<%#O& zw+GARCk2*zK=vULt;8LRh0TV4!Q zU3U!I)b*gC>$VG>7TuS0oz7jtUl^XU32dIo5|JB3=m3DN5LqX3i^v9%+eGdWxld%1 z2=$Ka0TJq}*drp;a||3l@M8!%fnby)=#3sJQDrr&=6WABnRAKqOrRcgtd?&%UQpU< zpXvS4vfe(UJ);tyDB)2?g_$SJ^35RMe-z}RX9X1ITa3X1wc}Vm4YV0XCrlS7LjxrY o&t2THl*9wIf&YJO;0Y8VNrD)tpM{qGf~2?yRbgIGrJMQx0oE?W(EtDd literal 0 HcmV?d00001 diff --git a/practice/robot-simulator/robot_simulator.py b/practice/robot-simulator/robot_simulator.py index e5da22d..076d7b6 100644 --- a/practice/robot-simulator/robot_simulator.py +++ b/practice/robot-simulator/robot_simulator.py @@ -1,11 +1,43 @@ +# Approach: +# 1. Define the global constants NORTH, EAST, SOUTH, WEST to represent directions. +# 2. Implement the Robot class with attributes direction and coordinates representing its orientation and position. +# 3. Implement the move method to handle the movement instructions for the robot: +# - For each movement instruction in the input string: +# - If it's "R" (right turn), update the direction of the robot accordingly. +# - If it's "L" (left turn), update the direction of the robot accordingly. +# - If it's "A" (advance), update the coordinates of the robot based on its current direction. +# 4. Use index manipulation to handle the rotation of the robot to the right or left. +# 5. Update the coordinates of the robot when advancing based on its current direction. + # Globals for the directions # Change the values as you see fit -EAST = None -NORTH = None -WEST = None -SOUTH = None - +NORTH = [0, 1] +EAST = [1, 0] +SOUTH = [0, -1] +WEST = [-1, 0] class Robot: def __init__(self, direction=NORTH, x_pos=0, y_pos=0): - pass + # Initialize the robot with direction and coordinates + self.direction = direction + self.coordinates = (x_pos, y_pos) + + def move(self, mvr): + # Define directions and iterate through movement instructions + dir = [NORTH, EAST, SOUTH, WEST] + for mv in mvr: + # Update direction for 'R' (right turn) and 'L' (left turn) + if mv == "R": + if dir.index(self.direction) == 3: + self.direction = dir[0] + else: + self.direction = dir[dir.index(self.direction) + 1] + elif mv == "L": + if dir.index(self.direction) == 0: + self.direction = dir[3] + else: + self.direction = dir[dir.index(self.direction) - 1] + # Update coordinates for 'A' (advance) + elif mv == "A": + self.coordinates = (self.coordinates[0] + self.direction[0], + self.coordinates[1] + self.direction[1]) From 57b82ffdc1b887b3e3386ca822b15582cf08d89c Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Sun, 14 Apr 2024 10:45:03 +0530 Subject: [PATCH 17/41] fix: dominoes file --- practice/dominoes/dominoes.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/practice/dominoes/dominoes.py b/practice/dominoes/dominoes.py index e69de29..b982150 100644 --- a/practice/dominoes/dominoes.py +++ b/practice/dominoes/dominoes.py @@ -0,0 +1,2 @@ +def can_chain(dominoes): + pass \ No newline at end of file From 9fea75210876b54c13b4377e63393dab2cccb1b7 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Sun, 14 Apr 2024 13:26:25 +0530 Subject: [PATCH 18/41] circular buffer --- .../circular_buffer.cpython-38.pyc | Bin 0 -> 2982 bytes ...ar_buffer_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5370 bytes practice/circular-buffer/circular_buffer.py | 47 +++++++++++++++--- 3 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 practice/circular-buffer/__pycache__/circular_buffer.cpython-38.pyc create mode 100644 practice/circular-buffer/__pycache__/circular_buffer_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/circular-buffer/__pycache__/circular_buffer.cpython-38.pyc b/practice/circular-buffer/__pycache__/circular_buffer.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d11106a927e63b61d5eb06c2f45bc687f9ae66a8 GIT binary patch literal 2982 zcmcIlTW{P%6!v(%yRLH~&_Yw7)x3bRB6Wba2qJ_^(|{_WAhlFT0m+(rX0vX+_IAeG zG^_GL%Ks>jdE%$=?pL1r7kJ{FGq(4VL_$bdnq$v+=A83==Q0mhRssi}TYp~bKfT~M zf8k{I@nCWrhWQMHboQNZ9m%Bo(vhxW$E|%A<}K;L+@pC5=55)5dFR;O_hk2h)APk2 zEyoGI9*uM^;=y+CNyzW2ev&C(9OgV8n<5`_^*mOiBFQrzr@|OzHu;@#zpwN+<22oE zeu_+1>$}5Ian$_S(sTIS8R$Pn3z=6Yo%6KtQ zJWg~xPKD-=$TUw3?}K@sYp&4TCfCZ0R9qy_RC*K!pN9P2aFnW{$_i4jQz@|4Efikl z+$2NLTPQA0*^r_T+!T5o7h|o$;0EZ-k|GglG69Cbs|BTpNihID2jBycB}O7niX)E1 zh|IbP>T*B_b_aPXNe5a9gPXJd4plM8B_ITJS_zqC2b=s5D5Q`4nbOS!mB*=Tk#r)P!Uo#W3$=k-!NiX^ zscZngb1lqg%_##I)mndzw6XDh1--VD*yN~@+*|Y(m0@O#QW3)$^a*HJrXVV6GsGXV zw1Y(2ZB`|JbcA`O3S^#+H}PvCnkJ?QgIgirg%aX6bdd6KItD{rVVd&+gefHzxy@|S zC9v*BI>GFl7TKAMGv#XF~~ zcJfnGr*kE@kl0nVg#o42P#Gf*)HXN`#AbqeLvFbzyw$!KJ*yx5#<2s#U~7B9UN{kS zt_RKu+dE-pw^DoJmYz{*Ut@;UYl0_b5Ji?ujgCt$P#3SE^@Ds)Bew`EuQu-=guWB~83T!Io>E?4L4;`{_(0~)052Z1VEQ*ph@?$--wlL< z!E@X-fHJwX0E0H2kK=PVxPW8B#zZ>5xmO?(2kbKCPqvKfb%ZKhuhH9{w}=6+0euC< zd@_|6n)~z%_}los?oOjz(cf&G%PKTC*TN~csfF9zX2fKV*?eBG-ll8zHd?Ma?jl>X zVXx=wCD^2wQLLb#UV0h7-a~N}#WfUD3-m?Z04whU7?fc?^V`1fcl@r#^*spqD!j|3 hs@LGly88SMu3C-}%mE^>})^uEFoG_VErqqG^BQ zAp0|6umV?b9~!Dr-P78-?2TT@&~&Y5w#&MDQfXJ^;+O=N2UDvhmHCm$P zTaB8m(w%x!YB#9R^SRYpfiZ-CP z=ro;yzD8&19Q1X1gw8`hMUT=2=o|DHJr4aeJwZ=GKSLMkDd=bEX?h0wIeHe=;*Mm_*a6P8eDha3Vwzr1bE-*uk}rBOAn20{oTxKV^iNMZ3E0twCmaf?VVUAOdxK5xwH8#iM>l%{B( z<%xvltccK|lSnIm3^$1t^)2Atwl3`x*%8K(ZFWj)yaI0v{mPE1@GrmQZpio)%yQi7 zj=|^f9^6vFCo$v;FcjzIMjg8^H7C%+UwfoG1T0WY$oePXy#SZcK;^o=alJ_0eWm1d z%`vtMk`LBZv2`CV8({^wTLms#5tj`dcWbl+Ts9ND$_g)zYDq%#D%>^e5<9+#vk7wC z!Xf$=Z(uWx4Q`&#V1r~(SRyGEpcf>d%yynBBzyLV_p=aydIzk1?gPO zq_2vgJwRR#+#HcsV2v^0BBe^>C{bN@8)Ez zjNq9tTAIMHa?G%1CCjiSgbCy3#)(+1Ox)~15{km6qFzckNy3zM7#a>@9ZHL17CK{y zq>F$ip??`f1SnCluAwhr^eW`s0n%~+Pr|vBSu%J*LfXs0EazlcQ*OEhdoE^OOR~;Z z?$zOp1!OoNjyf?4Sz=6%}OqIw#Ld?o3X8e-`A_>;GjG-`* zXpjk97pvQh>&kkh5RZwa7UQwJ3lGULealGdu^5G<9^=O|C`bTyl@#MpxFmg2?U(ux zzc5^384A9ctwf)o`j{dxf=lJUE+WIh!iu$Cfd$6KDQqacK!^x?|nr{7_%3@!GrA`TG89acvCb8N;j=7wZUstRWV&vt-0vefb@o@Fo|AXpioD9Fo{08zp9LlKD% zEx#DAKVjvuoJ#T16TIRQG|h%(nGGT0(8{j7C^5|BMOlYs#+9TltFG~jh-Z=~IbtmI zFNJN%U`a_tuEC~LD_(GMA}4iWHeA+jCbDO^*b5YpAr824rd3)X*4I4|mYJDj5K# z4PDzK`EW~Y`2OVJ3ECbEq@B4x?9&ZcB*4Q{9KK^)CkMdQB3mD7oweo>VG+`|dyEiK zC#2`oA=Ge0Gzh_uF6s$ChDx8t<}5ZJVsjpw3)o!3rism`*nEZ!=0o1X<|;PVuu0E= z$w82p;Q^M30oGBFsw}H))vc;klNa7q;Igb4`DSxkSnERpgrqE-+&?qR9uk78Xl{J^$6a&W5X9E Z-1j(zgmp_{_$|I6Q?RAYYnHK4{TFRrH+BF3 literal 0 HcmV?d00001 diff --git a/practice/circular-buffer/circular_buffer.py b/practice/circular-buffer/circular_buffer.py index 87583f6..fc441a9 100644 --- a/practice/circular-buffer/circular_buffer.py +++ b/practice/circular-buffer/circular_buffer.py @@ -1,3 +1,17 @@ +""" +Approach: +1. Define two custom exception classes, BufferFullException and BufferEmptyException, inherited from BufferError. + These exceptions are raised when the circular buffer is full or empty, respectively. +2. Implement the CircularBuffer class to simulate a circular buffer data structure. +3. Initialize the CircularBuffer with a given capacity and an empty store to hold the data. +4. Implement methods for reading, writing, overwriting, and clearing the buffer: + - read(): Reads data from the buffer. Raises BufferEmptyException if the buffer is empty. + - write(data): Writes data to the buffer. Raises BufferFullException if the buffer is full. + - overwrite(data): Overwrites data in the buffer. If the buffer is full, replaces the oldest data. + - clear(): Clears the buffer by resetting the store to an empty list. +5. Each method includes error handling to raise the appropriate exception if the buffer is full or empty. +""" + class BufferFullException(BufferError): """Exception raised when CircularBuffer is full. @@ -5,7 +19,8 @@ class BufferFullException(BufferError): """ def __init__(self, message): - pass + # Initialize BufferFullException with an error message + self.message = message class BufferEmptyException(BufferError): @@ -15,21 +30,37 @@ class BufferEmptyException(BufferError): """ def __init__(self, message): - pass + # Initialize BufferEmptyException with an error message + self.message = message class CircularBuffer: def __init__(self, capacity): - pass + # Initialize CircularBuffer with capacity and an empty store + self.capacity = capacity + self.store = [] def read(self): - pass - + # Read data from the buffer + if len(self.store) == 0: + raise BufferEmptyException("Circular buffer is empty") + out = self.store[0] + self.store.remove(out) + return out + def write(self, data): - pass + # Write data to the buffer + if len(self.store) == self.capacity: + raise BufferFullException("Circular buffer is full") + self.store.append(data) def overwrite(self, data): - pass + # Overwrite data in the buffer + if len(self.store) == self.capacity: + self.store = self.store[1:] + [data] + else: + self.store.append(data) def clear(self): - pass + # Clear the buffer + self.store = [] From 1f0f910578fd1cf68fd8e46846f0b56a6a799826 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Sun, 14 Apr 2024 16:07:46 +0530 Subject: [PATCH 19/41] tree building --- .../__pycache__/tree_building.cpython-38.pyc | Bin 0 -> 2365 bytes ..._building_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5562 bytes practice/tree-building/tree_building.py | 60 ++++++++---------- 3 files changed, 25 insertions(+), 35 deletions(-) create mode 100644 practice/tree-building/__pycache__/tree_building.cpython-38.pyc create mode 100644 practice/tree-building/__pycache__/tree_building_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/tree-building/__pycache__/tree_building.cpython-38.pyc b/practice/tree-building/__pycache__/tree_building.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d0018e819f0572171aa15c4c1bd65a01953a5e0 GIT binary patch literal 2365 zcma)7&2QX96rZuZA2CfDK@mv{)d&fpm0E`a4XBDDpy8vJAT^Xj)XH)^vsrh&_GZRg znrL$&mBfcKJc@gF{9A$8P~9X`A`ZRN%ioqk1!!>OU1{#7r_#^pq&HQlc`EiF+GXXC%_Z6e916xR<07 z1_WI(f&We*?hS^i8qg!@`bQ%Od_g+8qbx3x99na+L#J@iDmR55#l=WNMCSvX*2*jY zp!MBAY~{LAI5`wMkx^1WU3Eb2Lb1vWDT3vF0msP+AgFZU-wwpxo{IY->Dq@)uNf=& zBuXcM)mLs)9NEFH+jqoi}Wqm{^~N zvVJK!Q~7P98~E=B$VddLN(`Ong=G*V^-BUjMg^Q3NbjmPu3)3sHb;FpRdt{ST-1P9 zHt*Y1j@_A?w5PjwG0h^DF(0##jUBAevBggKX2&V#rhzQyrcvs+rDs&y)ucpwSWcL3 z;`8TcD-Vp)W+e)CBAI8&%7!xiA|I}(r%K0(8LSL-gglMa3MJ=Fo2iJArNWvDhWlkZ z43jJ=!jRr($Ohw0esH;RC8)WZCmxAr(LjY^>4)JUm!p*Sm%?yw6r~kMw{hP-ab`iQ zVVYyPjA;mrHn(()?YZ%PK=w9KqcKU=gZ4BpK)lOph&6Ema*GlLC04fUEa^D90iIr< zg^;Zl`(kqCWy~{B=E?LKBzkUo;lkB|ZWsbD`gXicU>oe*1UGvKf<>=?N4&v$O(DK5p7JK?|jQ3iL4Ongd z)Iz?){?G7g?_uGL9r)t+z3;ikUi!=Me#}urmp0GAM3B+kvM^y81EMWf#gp5z=I)ORM#L{1*W)|mz;reybPTA8$${)P;uTIsn2e&C-&wic4^zspYSUc)s zyMJ@G-=9J|JGk|EmhKDN9Vgd%(Gw*U)q4HQKKn5PsG!qEx5EF;dQ`fp%1ZysC>^Pf zwa#_f&{4LlY!}ni2+C$O9I8xqJiSb$N4B;b)UJ$v1t%2%OSGeUEa#@qlDr`#829)h zzslQ~i~I_{>zE7tRZR4l*CDZqzT65!na5#hn@)u~v1YQy)~~hFUaLCWI^}_(b8lgx HvC#M%78+j{ literal 0 HcmV?d00001 diff --git a/practice/tree-building/__pycache__/tree_building_test.cpython-38-pytest-6.2.4.pyc b/practice/tree-building/__pycache__/tree_building_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2bc80570684b1def53460ffdd8c76744aef47782 GIT binary patch literal 5562 zcmbtY&2QYs73bIPa;23lOR{6di9@G}69tacq;L;KQMgTmwuh>yYq!Os088zRR#ds< zcF46OK}HYqp@#-V?>*S)NkIRAUiy#l&`VGH19GU5e*E4WlHy8SN2s{i`FNZe&ivkQ z-g`5T78d3VJb&q5-}%#;Vf>RS^~XWwKK|(skqASWk(Lvr8uIM7~h&eHj+!Z~sfV?Xf z#TDdpVo6*@J};KV3i6&<71xk2i0k4tmxYHV z+|HM1wmj`H9zK+5cJRfVS3G)E?<-!MABwx)I8ZXqP+b3(r^Tr^3?Iwb%Mx!}dSjIg zWSUA*jj@#o`F@N5KuqbT^qq zXcdI1^nM;h6Zxr9iSojoVxHx!u@KDTaS(-it^*T#DIXgJ`hS9d`Z|)K@zl(WL-WXd zY8@KS%|q*jNqhl>CJ3OYao!8Ca+Uok-AZD4Z0AlYqn*4{d@*-al4Qq*BC5Xp@#Z76 zO*ey$?LZ`PxcPmV{w7PtoANWM24Ond9IIfEg#)=sP<^;f#Da#n=9e`;gTgk(`}s90 z_;NJP_WdYCF^tEPY>}qlMq-$b>6!<3&gy!jvD-N)X!|e}cTmW%eS~>r4NX8|mXPdO zhhVd?KDP>3>@7uz9-Dcm)V{4~6KJefG*-TTm->+mb`(vO;nB%Fs`&y>5rA^j6^K$7 ziD9|_b!^u#)xIRpbcY|f($;alT;V z&Mkp_cpg#W%QT`j^eRMcAZkt{x{L)dxztrE5hoZwb&X0*B)Z)MiIR`81Eq%MJ#=k` z=Hm-NGd0*bh-gksxsh-JE8I&DoYkn3(Ug3Uvn!>)@_8M}X=z}S`a zvYBQ;hI6=4&f7)3L$pKt7RiU5I;PLbSi$kW;O$JcJzEe`tuwL~WT0=+&MDg!t(_OV z^`F<})T2EmhoorVX^>NUljN)&ck6`dd&+QfKCG-0GQuZhz3OH{U8nc2Q9_oXk^D=n zxa}|w)V`m=Dts3$Qx8d{EiwkC`!A>KT8l6TtL6><9o%l#Ty3lis7u?`Df`M)FV&;- zcA>7$40V~po>G^#zRr|P+mC5=p&j6-*3;_Ja_Z5VQj3-o8K%{Umc=-%#zI{+GsHS$ zb-f8>)h$ZipyVw|nyk_)D`paJ2N7($6s(*_Xnir|yxXjtGvm!x(68{N+J0gM4Xvjp z#Wxw^n?Ei-wKAI=ylMQxxM%#-cwqbzuI{;$wXhS~N7U+c2ekJ(46|La*{Ru@m-jgG ztK!EpP(#d^j)EwX$|I}dh1q*)5m_Q&+&FgGC6=Mp0}AWXeC{-`)6vAdc9x(1b`nIn zlkJaX-j$yX3Aw6&#;J%u2ONc!^K2OQ9Qq42`A41zrb$;l-1 zk{y%~D{QE*QHKvGp@_8>l3iuq#))68G(&?Xgx+qZXua!fWFib&<0l7ZHN&C93i!%P z@U`0hj1+=3-o%U)Z(@!wKBU#p1Y@NDg95oY3*$*LNq5T?PzJhid>B0UWlD-IWs>-7MKj0(j4I~xPr7N3zHQv+1 z{2zEbMQ~B#+~Imh=-es2*d_4pd~-x!{M$}@Hd6Q_mdqzN}jOjuY}Ij znW6Ixaou4zm^*av=C+FB_A@4)!^*!wUfdomlDj+4g2p52 zz(&9Fp>nmxcThREMkBMZBD-88X;IN}0u!y4qwYbVr(bw+f=kbS+Bb0&{CB)e>8pmh zXdaw5xM!wKR}Wk3E4l0YaWIm;pU?UJC=nCb89(p&J{haxO~>~|GVp!XqX`f#6j>jI zOGkr`*UF>PZA$J^vO&ovC10oHBT7D|gadbu*-ux%CA#%cG+h}r literal 0 HcmV?d00001 diff --git a/practice/tree-building/tree_building.py b/practice/tree-building/tree_building.py index 75082a6..dc8ab8e 100644 --- a/practice/tree-building/tree_building.py +++ b/practice/tree-building/tree_building.py @@ -1,50 +1,40 @@ +""" +Approach: +1. Define a Record class to represent each record with attributes record_id and parent_id. +2. Define a Node class to represent each node in the tree with an ID and a list of children nodes. +3. Implement the BuildTree function to build a tree structure from a list of records. +4. Sort the records based on record_id to ensure they are in order. +5. Check if the record_ids are valid and in order, and if the parent_id of each node is smaller than its record_id. +6. Create a list of nodes corresponding to the records. +7. Iterate through the records to build the tree structure: + - For each record, add its corresponding node to the children list of its parent node. +8. Return the root node of the tree. +""" + + class Record: def __init__(self, record_id, parent_id): self.record_id = record_id self.parent_id = parent_id - class Node: def __init__(self, node_id): self.node_id = node_id self.children = [] - def BuildTree(records): root = None records.sort(key=lambda x: x.record_id) - ordered_id = [i.record_id for i in records] - if records: - if ordered_id[-1] != len(ordered_id) - 1: - raise ValueError('broken tree') - if ordered_id[0] != 0: - raise ValueError('invalid') - trees = [] - parent = {} - for i in range(len(ordered_id)): - for j in records: - if ordered_id[i] == j.record_id: - if j.record_id == 0: - if j.parent_id != 0: - raise ValueError('error!') - if j.record_id < j.parent_id: - raise ValueError('something went wrong!') - if j.record_id == j.parent_id: - if j.record_id != 0: - raise ValueError('error!') - trees.append(Node(ordered_id[i])) - for i in range(len(ordered_id)): - for j in trees: - if i == j.node_id: - parent = j - for j in records: - if j.parent_id == i: - for k in trees: - if k.node_id == 0: - continue - if j.record_id == k.node_id: - child = k - parent.children.append(child) + if records and records[-1].record_id != len(records) - 1: + raise ValueError('Record id is invalid or out of order.') + trees = [Node(records[i].record_id) for i in range(len(records))] + for i in range(len(records)): + if records[i].record_id < records[i].parent_id: + raise ValueError('Node parent_id should be smaller than it\'s record_id.') + if (records[i].record_id == records[i].parent_id and records[i].record_id != 0) or (records[i].record_id == 0 and records[i].parent_id != 0): + raise ValueError('Only root should have equal record and parent id.') + if records[i].record_id != 0: + trees[records[i].parent_id].children.append(trees[i]) if len(trees) > 0: root = trees[0] - return root + return root \ No newline at end of file From c2909624be7a7e3403a79ea39c26db71a02b1d5b Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Sun, 14 Apr 2024 18:52:10 +0530 Subject: [PATCH 20/41] custom set --- .../__pycache__/custom_set.cpython-38.pyc | Bin 0 -> 2238 bytes ...ustom_set_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 10839 bytes practice/custom-set/custom_set.py | 28 +++++++++++------- 3 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 practice/custom-set/__pycache__/custom_set.cpython-38.pyc create mode 100644 practice/custom-set/__pycache__/custom_set_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/custom-set/__pycache__/custom_set.cpython-38.pyc b/practice/custom-set/__pycache__/custom_set.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f7b158f5e9459f0e2e54043f3b86d0088116856 GIT binary patch literal 2238 zcmbVN&2J+$6!*;JW11$rZMR!MLSP|rh_oc);{*sTbS1>4mufG$nCaL<+-B^l?NGYv zZTAn^-speBd9IweapuH(o=j#oX%FDYUt>T2e(&e^oR_1~fI#{EkB_o%x`h0RlXi(< z@*Ju?f`*eB`H}E|hi?cEUx%}RN2g@mN&XH98GK(9Mknd~>%r#}`je7QCJXsWP&XI! zcxj!^Plcmb(#>h2s4kq;Dp}Blw2tbGiiOC9a&|(Gwfa>U2ZqvC%ThT_6KcU82141T z5p=2K{W1=k0xy!IvOMUR3S@W?m#l zTCKLJX4+73xdhqVH9ZsVN(e>Wm2Tt%SHEhX*77#tye99xN7+41L|nS+9)O@QR-~vs z`h$nVCR;gE2m=&yuQQifCX7(2@P2~WXaPGCv;`h11jIWfg4uJZ_Gf4Wf#4vs@E4K= zK45}b#3SB$LuMV`BzBmM~b9sZc_K|kR8`~do0{)8Vw zKjcp#=#I*rbx@@tAl3!PSdXFFN6 zen(6Xx_^F{zO$zOe$?YEldJJred1<=>81OTn!lvC&hIc zGbSMs7{es9o@MarV9k3{FQw@D=2go_Nz=MkrJP%L)!oBFlLMYF992iL6inwQQ z`Y7bzP)9O0|wLj29d$r;3haHx50|XIP^TqSlTK(?^cYuK0!D57^Lu|MWb~G^#T8z z!a&+O`OQ9HY+@rWzMl0B95xa(mRsoS2pEDX3V`n8{rhV$`1L-tvd5UXWbA_$;9dh* zEpCCW)kd9awQqv}Ui=NcBY0*E#?z*kPvP5#EznT|3MN~Km}&lg4`2Wp3IYB$1Q&x_ z2=p2=GMEe1MGxCg*L|KF)c9klwa%?jYuj#7dB^#R3KDsrG(^IN$bHadpD~C+#y)Am zw-Rl&x`q6oMd^3d&6f)tL&oAiPqkuVIK}K@ z^B5Zp3xjcN4zaYkMT=H(FpT1jpWlJ+F$l!e4PG{ufEP^?U#T literal 0 HcmV?d00001 diff --git a/practice/custom-set/__pycache__/custom_set_test.cpython-38-pytest-6.2.4.pyc b/practice/custom-set/__pycache__/custom_set_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b5b5b441e6a4a135e60115c501bbef633c527009 GIT binary patch literal 10839 zcmb_iNpsuC6$U_3qG(E%cgy>3(~IO)UPqQKd7F4>k7cJ4R;3V{50WsUNVx&UmZBU| zo~oR3no~|0S1Jb`a>^-Hsmd{@oN@}UIq5Itl=r%U#=>q2^h7MZ2ZBU5zV9vl`hjnT zhf4|5B8%TfiXCMdOIA1L#RjLFdRX>1CGKm)H~rgoIt$`PQoeFyWupP zLA?jg!a3A?p#tYo?}H0)5%qq!1mmd3U;-|qJ^)wXD(Zu94X&d;1UFz3^dUM z&lww5_4P)M(G{Iy-SZsgKl5sXuIDT*`>PvPC+|7U`A*JT@iz=c&h_6X6L0Wq-b8); zZ5`SzcVgD@e&M&5C!7xsYq;Lh#4@Wle7E6DG`L4x@*F=nwDHjP@qWjbS39TZfX;aK zd)HsITW#BEI!jIqPt=)X^II4u3-#vpeUJZ*LtE*kD!OK7srka3}|9``&N~W z;HMjwFz_~E;A-1{)>4A0a4>k+i*9Sdc0Ie%Zuxb$<$&$B?0QRpA(QQi0HIlKDgb2} zMGq>p4Ooy{$c6SvfXfSTo8-HjITV!uX6VOij3+t9_lr);_7~B~gvSwBgh*!)-B^Tf z#9X_gK-c^FzH#MaMk@$hj3{Pg+)Z+SMlPf@+F30ia=!=^t_PtHBB&b~K_$mX03*&R zE_j+bfd|41xwOJ$vu=GdqjbXvN|0~Z03LUWuIH`1Mb7bTkxpR3@vm@sH63dc94Su= zJdvQy>bAJrZqK8CqT@O&a?;~Co=3A#?m##FLV-E^XnO2taE1_jkWP~L;|YaF>wyXDC1$0lBL|CHQ5xhz z1g@mBUiQ)S0I%Xave*1b1hFC3A`KT6H5ZTdA@MNIMLH0O2!FBe+t7AIm;|e_?P7rx zRtb0F#GseF)D!c06X;p`+>~E(J#f8m+HT8NX2A2D6}~uA5gMlY@EQ>?$N?6n_apQ? z!{1V%&oq!8W%lIGh!9pGp-SwRI4qgoC>10jC6d`}92utey9#7k$Jz>9rsSRlTmnHi zKzYBn_qph6-mzEMWwUIqJy2K`Lb5;RI zx_In5{e7Q`-FK`2>AHWm8^0JL7?Ha;J&21*5MiCgVc32fi>_D|`Lj4KTte>j!qt1I zt)Rw0VmPWy#i24PN0inPz!JCLbw|<$ZzEtMR6(kMWgJQm>>N(gm1WF$m_>eA$;GRs zD>{&30pxjr7l*WhC8{CO9wDDxh#>NWqFMkm4WtKnQ34FN;z50!=Nt2GXQkb<-hyHq z5Zx2F^YaeFrcan7qvXfkwHYDgWw2@!mwmJ@m~sOftrjVmlr&=%aAZx^8|Y-1F1sAG zXI1(xju$K4Sw%D=-u?#df-O_0C~u+)03%f6ylj;0s&(4gI9!=%aI=H=iiNA^vz3OA zjihsPS3M%|gPdzz~QFxof-jSMz~$DN|{Vc8+v>23ZVP8VK7=~!m0U*R<#wLz$3 zQNq{SNd*JxtGXabr@nNs9@kB+8Dq*|e3-F9mu&%1BzD1O3@k)W+r+QOpbjbBH7H~)RigRzZ@2|QL^{0_&FF3syE zRngnun0iVGWfa4*rDOG?W&=CP6v@2fx=HLZsw&wd5-A^_;m(o1+c;hX56Su}&B%8+ zu4IH4CSNNY<%i9oXDHs=2v)W%?!(tQEiI4Kw4`_-W)f7TT;=x>F{7COuwt9bLQJ2t z=&4a=Oa5F^R64z!s4^HY?YKMfl=&1fZ4Qtp^+_H@RaDpDu8Qv^A3@{VUJNDnHRWB3n0Fuw$wJ?SNJaJ0?iPvW%^^&p8aQQ#--;n#H_)6^dKG z28!`lF?bhfK6YhWr}%coZDL=+>y)RLS8e%j%wAq4hZq-ae$1NV%z4jT-{}m=Q=P%^ zTnR7c{!?e2BD#l9Z)&9m|K%MmL&0zRUgPPRI{t8vps6r-iuZ(#r>GF&`_rPa(b3f1k literal 0 HcmV?d00001 diff --git a/practice/custom-set/custom_set.py b/practice/custom-set/custom_set.py index d4f71b1..7c02738 100644 --- a/practice/custom-set/custom_set.py +++ b/practice/custom-set/custom_set.py @@ -1,30 +1,38 @@ +""" +Approach: +1. Initialize the CustomSet with an optional list of elements. Convert this list into a set to ensure uniqueness. +2. Define methods to check if the set is empty, if it contains a specific element, if it is a subset of another set, and if it is disjoint from another set. +3. Implement comparison methods to check for equality between two CustomSets. +4. Implement methods to add elements to the set, compute the intersection of two sets, and perform set difference and union operations. +""" + class CustomSet: def __init__(self, elements=[]): - pass + self.elements = set(elements) def isempty(self): - pass + return len(self.elements) == 0 def __contains__(self, element): - pass + return element in self.elements def issubset(self, other): - pass + return self.elements.issubset(other.elements) def isdisjoint(self, other): - pass + return self.elements.isdisjoint(other.elements) def __eq__(self, other): - pass + return self.elements == other.elements def add(self, element): - pass + self.elements.add(element) def intersection(self, other): - pass + return CustomSet(self.elements.intersection(other.elements)) def __sub__(self, other): - pass + return CustomSet(self.elements - other.elements) def __add__(self, other): - pass + return CustomSet(self.elements.union(other.elements)) \ No newline at end of file From ebe931b84c3e803586361f3a89afb837c202d974 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Mon, 15 Apr 2024 08:36:24 +0530 Subject: [PATCH 21/41] bowling --- .../__pycache__/bowling.cpython-38.pyc | Bin 0 -> 4676 bytes .../bowling_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 11070 bytes practice/bowling/bowling.py | 89 +++++++++++++++++- 3 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 practice/bowling/__pycache__/bowling.cpython-38.pyc create mode 100644 practice/bowling/__pycache__/bowling_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/bowling/__pycache__/bowling.cpython-38.pyc b/practice/bowling/__pycache__/bowling.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0caf1fe61d1fc20a865ebbc4b3de29a5aa9f86e7 GIT binary patch literal 4676 zcma)9&u`qu73PrK)oLX>it5C5;wA$Zsk4SExkiBih9lTcqSQelpth41LJflA%u4if z$@P$H*_+iRa*sXa*qe0pKhZy;$G!HXf1#K5dv8dJ`q3a%H%N@4cCCFJ0<7 zc>eLPkNW?->^T3XM)UE}xQ{pg6oqoOoUa`vl>5d}t`-O0mW#Hhe6)RTd#d%s>9xZL zEyw9T7>!I8M!R>r8<~-Ll$ki)k)hnq_7bY?ghRa|i(M^ubgE65$grFt<6IV*jEAE{ z4|Q6|VlR`!FivHZgn6#>yK=)|whU7xAKK-q`w$WuKSDM%2|5bk(l(sE~0QC1ZuzLtX4yQJgcwl*ZeC{A-ZNV8~wUX|^o<)$RQ$*`8) zk`17s4i` zAlXYIPQqNWru+#*k-UT>Aw_a*(@fI5(yr?0$0^uo0f1d-ERnTb`YU6w5KBQ5V2zrn zup7{4v_Vd_tBp=0P5;q+X~rZs?O1sOJfz5?ECCQTQ{y~f=9JcEZefoTIcUo$Bj*5f zw_i(O5cglREPY8jvFWi9?03efO&U?%nzIHXR4+pa%$%+*Rr1;HAB_!kDk?{@ByR}+ zQ>^(vu#yUK0Xr5Jf0K=ON>8+4HO+J4rSK=-3>12Z1*%w4+A!ButYExLUtN)V_&-dg z?)P<6#4mO7x{L;Fh*D0u3?jetpL=WH=Gx?I;p%p%vNT@%Qs;vr8?EVA+C*_aTpO7X_(yuJ46@aC zb@Y1H34%C{iy*j4Vo(lpL|aTQv%srWXC$bje5g(XS@0iFnL5uM^R$5Y&)ox|#K1K- z3a@Or184NO?(+t2_Sp6*M~T0=*Bs1n2kz)GjaU9Pq`QIp#HnXswb8V0wJ?8rdL%>D z-aIBujw!_+lkJZ2I>#jHTc6>Yd5KO9bA(=$qD@_MWkC24jhyo}(6}yc z|JU^5zsCRLoOB`j|y3E>S_8JF9;e+Lf8}2D)nqZi#h*V5x?n9CVJ+H8H-y z^r>^`964sW04WZ{4a{L7`0xslzZ5w5l1}Q&VGWk5PZSgoLqTe z6E7k>$Lv1&)a1jby9m)-r&yh4g-x?}<@fu&IrA>Wm@PgYr$s!}oJ}kT+BpB{RGDS! z?|v61W7|7xBXbSI;;n1>L4-LAl1~w-hmM@UbVNsV-9@p4-=u2+q57z0g z<}XkcK42MdR+s|t27KZE%CqLZ3gxRF@(lCGs)bRQ+w6bhq}{5wgw5Y<*q`Xob6J1$ zj;)iqW(#yk2<#!@tgbDN`*$!b$DtL<`r@+q0PnK9=uQ@_x;*BbLy$wUzQ068i9?DL zh!KbG5t-gQa*jM0*4>Nv5URoMh%yhm*`a zaO=(%8ppMB;Mab53k%zOL;+GAh%cF9l)wHicEnYfB5)PFF7VjT<~C0)Me>mgJi(ij zuTXk=*4-C{bKv~wzCh?<7$_g)g`1s$Z;AJS4JUK{Ce@@Yef zI^C?^OETp5d>xf)+A)Q&r`U%?Vp8|~S<8g!j^?f5xD*fa*<5*Sx`-ca&uQ^c_27Ioti{al9CJ@O=92{_u8a|05AyB~O%Nb_|x&UyZ>$S~$5YT3U?xR%cS2hPQ8o!|~ z_Gvo&oQ0e^{(!d(^6!f-2l{0(S!yE0p`IvGJroP*Wx5bNHjm{?RTfk(+{Yyd$Qz&C z`K!C{?w8Kaz__Y)6+_vfBsMu9bQIl*}Q}a3+OwB7q&F9$gS!ds!x<7g^E;qfKCiOg~=vJ5W1@jcg zQ@UH8#g6FuXS_M39P;xH`T8eK-0Xeg0!O!oYuT_%S#~zBac`$Pi?%GL2;6Jg{7m(k zh|NuW%{3|rds}corU8G#Tc)p$=(xUE#+h!(oxFQapiLYZ2om!vDn6p(BnO;?|C2qq z#v6T%!T0g9&e+E9c%6Ae|862u%>{wVA|#l0w*4H}A&yzx+Yq>3Y}UDFGtxRSi=Ezo IZ|T37#1#k!8%2LU> z>{f26oO0YMtM;T*jydL-)86*PYfk(Nxg^~^BuHvFBqd8p$l^3WkTaNXx_f$h@M?5) z$iUan`CYUAQN#ErowUA^cruNj@IDq`fLSu~CQEBBVHu_|m&~V3c_p1s;}xqkFqg?^ zOyiLO2}u5EK+;WrGx$RyKLq9rBb%yWO-3$jR)_Bf^CizOK62*V0)5%~vhZXYKjFA( z7%n%Ox4;DJMPFYH6P752jcl-uAS96~t;hv5jy?Qj&1q1*w-;WL!u@Hw17 zxf4#pDU`b)3#U=;hBGjMau1w^NtAnG3eKV22j}4e%KdN=E}=XCm*ESP2jL1_MR^FW z!F7~};Rf79c?533ZInmhOPEG^4DP^Pl*i#7g1jFCeCdW!fq*q$G-~v@hoA5e7LoCT z@xfX$?;CHod`K)=AI+u2vS}LM4J}zOj1@DNwFFgAO^TpY$|kGH&@IhYQ*;(qlSLdM zk;3aMh8RTguRBw(LRW-S&g6^(f$vS-cf)U^pgiTicSXSq=cdZSDMVhuotlw@+>myJ zH#=EgsE$(Iw(ri{RQo8_8fLIC%(R&?N6f{&b?us=iGU@jRSjU{v0L^K8>u|8VM`2S^#6dJKuIYCXWB*ZX^>aY`Hr=thoRh&{a6&3>F z;-xfR5(8Aw?K2)(kYQCXP%NWOv$yQz~+D34)@)j_o8>UgESUh5rjMN ze<9Usm=orZxp=!3#M-OtNsFzDEUVi`ODoZ!l}+YqG#E9y^;#YaL4zu`Q9(-6LgiN9 z-S81rB)o6k&<=zhmL1`Sd$6)rKu^{Ms8h{-up-~n?tj9H~}f`++9M#?%?BW=+G zlWOEh0QM|ePB8DHLM=#@vAxiq4+Lsa{VKk3U>ewn) zPZfTMyiBnmZx0YKv<~ES4k%wkvHTFkLkQ`X;FkR5XJJ0Y6fgiesO5}a- z*6qx8ox(f2=tc-G@arUJ0>2WTT*d2_!fP$HDTsDr_3Y1og9m+ib3$kpcWOL(o81u* zaexX^uG$zKY0*4kG!4C}YgEZWmp&_S)*?8eLI>5(iO3`yIu`f^cLLj~JFQ9b>aP@J z8_|k_lDrI~e2fR|;4Rd*uJ7Uw4aRt4%qDVTH*sT@T6i}b@YsQ)HVHp$aZqHSPMxEi z0qqc@L7X4SWY0HwohDw7JMmgi#eEeldOviFKJvmH`Nw$m?ShzW-HwF0rDUt3pO3Rki$Ry|%i$e2vJx{hp%V;Z&V$@E!Q zrk7OjRu3p*_eRr1qt6oDtr(nng0yd10oUf>dRM5>S)Y$fYJFTACALdeKXP<6oG zwVL;|-Bz`pt{qcHPj@$Fmtar#T49HtPU`NbH1oeCDyI%wcIa*SArmE6hE5F)QidMv z=u~~PA;1XN52E^X%ht>G{v@VpGR@}-%};J(LrCJ3qSejTHG-ToNH=S=FxB(B!TcJ* zzn)u6t;sCRt%CMQfwsPS6;f+kdD66NLP8tNsc{P1@Co8X;k+K!V}`|n30Y{PcdZMB zz%MP>{0j++iTZ)xuthl&yl9f+#pg?f+y*qFVBCCX7zcbZaLIP1nQwQ7vF^18!Oe-7 zR;7*QMoVzm$)?}Le5G@oRrtovaU+{mh>zfX@Z@|Q4|E}RaYQpETk)!+9tnCAILGMK z^OyvR8IFc#Vsz}-Wmn9)1@w6oO2=T#12p4Ks$jbPUFjfY9JqrQ@Std{?nq=Un}6PB z8kqA*V8#biVP6@Sjc3Ml;|=G2vR1D4Z+xvJW$tIU%>6ufywDB5!hFqd-7s{DZgud% z`+{4JyujxKS;ut8N$x)RX%`a z1(ab&eddUr)=l~jU*`@tVxh2gCDZGk%gyem~K#M{2N)OAgp zop8#y-A-1LGDj-i>gBG~o-wuNG~INdx@fQ$%8p>zNTAH z24OQazmr35^Do`Ka#@ZBF6J?j8TgnUr(9*{tch0lX^*B665~kFQf<}~ILZ|K;h50m z-T1+u6mwWoN9MnGI~y`aRuAvgVGa;i$w;)(!5bbHWk^2V`~OA34+{QGXjZ`-hnnZ` zhBTq(78zCu_pE(zhe$gd8&b9OD%Rm z*;>6h&eU<^&hlpU`)^I=b=CDdFyF)**bwl#pk50eAD58&-povCmHz8hN{<}_9JP@xE8OF_{`YuK{dpPMIalNQzL!%m`~W2BMFHCCiuE=99{}Qo5bqp4>^QC;(qB@WGg z#jiqY!!Q?*x88AUeJ#nsT=uhS#?cJiYruHqk{6h;szBrsh|x` z@g)`0RNSG0s0rGv6%VL*LSmly2#Y_DBjAVr&$yfNoGDcpJCMVN+-zp4&2 zz8k_nvtBx)nyL6+L?_jO8Tmk>eBLqh62H6W;B$S{cFS{WaVM*pn{wE0)8jQ9QfG|q JM#dUR{RgORfE@q; literal 0 HcmV?d00001 diff --git a/practice/bowling/bowling.py b/practice/bowling/bowling.py index de2dbb0..47b92a5 100644 --- a/practice/bowling/bowling.py +++ b/practice/bowling/bowling.py @@ -1,9 +1,90 @@ -class BowlingGame: +""" +Approach: +For scoring a bowling game, the general approach is to implement two main classes: Frame and BowlingGame. + +1. Frame Class: + - The Frame class manages the state of each frame in the bowling game. + - It includes methods to check if the frame is full and if it's invalid based on the number of pins knocked down. + - The roll method is responsible for adding pins to the frame while ensuring the frame remains valid and full. + - The score method calculates the score for the frame considering the pins knocked down and the next throws. + +2. BowlingGame Class: + - The BowlingGame class handles the overall game state. + - It includes methods for rolling the ball and calculating the final score of the game. + - Error handling is implemented to ensure adherence to game rules and scoring protocols. + - The is_full method checks if the game is complete by verifying if all frames are full. + - The roll method rolls the ball and advances to the next frame if the current frame is full. + - The score method calculates the final score of the game by iterating through frames and calculating each frame's score. + +By implementing these classes and methods, we can effectively manage the state of the bowling game, handle player rolls, and accurately calculate the final score while adhering to game rules and scoring protocols. +""" + +class Frame(object): + def __init__(self, tenth=False): + self.tenth = tenth + self.pins = [] + + def is_full(self): + if self.tenth: + return len(self.pins) == 2 and sum(self.pins) < 10 or \ + len(self.pins) == 3 and (sum(self.pins[:2]) == 10 or self.pins[0] == 10) + else: + return len(self.pins) == 2 or len(self.pins) == 1 and self.pins[0] == 10 + + def is_invalid(self): + if self.tenth: + return len(self.pins) == 2 and self.pins[0] < 10 and sum(self.pins) > 10 or \ + len(self.pins) == 3 and self.pins[0] == 10 and self.pins[1] != 10 and sum(self.pins[1:]) > 10 + else: + return sum(self.pins) > 10 + + def roll(self, pins): + if self.is_full(): + raise RuntimeError("Adding to full frame") + else: + self.pins.append(pins) + if self.is_full() and self.is_invalid(): + raise ValueError ("This frame is not valid: {}".format(self.pins)) + return self.is_full() + + def score(self, next_throws): + if next_throws: + if self.pins[0] == 10: + return sum(self.pins) + sum(next_throws[:2]) + elif sum(self.pins) == 10: + return sum(self.pins) + next_throws[0] + else: + return sum(self.pins) + else: + return sum(self.pins) + + def __repr__(self): + return "pins={}, full={}, is_invalid={}".format(self.pins, self.is_full(), self.is_invalid()) + +class BowlingGame(object): def __init__(self): - pass + self.frames = [Frame() for _ in range(9)] + [Frame(tenth=True)] + self.current = 0 + + def is_full(self): + return all([frame.is_full() for frame in self.frames]) def roll(self, pins): - pass + if not 0 <= pins <= 10: + raise ValueError("Invalid pins value") + elif self.is_full(): + raise IndexError("Trying to roll for full game") + else: + if self.frames[self.current].roll(pins): + self.current += 1 def score(self): - pass + if not self.is_full(): + raise IndexError("An incomplete game cannot be scored") + + score = 0 + for (i, frame) in enumerate(self.frames): + next_throws = [throw for next_frame in self.frames[i+1:] for throw in next_frame.pins] + score += frame.score(next_throws) + + return score \ No newline at end of file From 5a8046897e2fb266a979b9581981ac38c6b78ceb Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Mon, 15 Apr 2024 11:17:46 +0530 Subject: [PATCH 22/41] hangman --- .../__pycache__/hangman.cpython-38.pyc | Bin 0 -> 2627 bytes .../hangman_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3460 bytes practice/hangman/hangman.py | 71 ++++++++++++++---- 3 files changed, 56 insertions(+), 15 deletions(-) create mode 100644 practice/hangman/__pycache__/hangman.cpython-38.pyc create mode 100644 practice/hangman/__pycache__/hangman_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/hangman/__pycache__/hangman.cpython-38.pyc b/practice/hangman/__pycache__/hangman.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f6d4c2ddc6ee916fd9a719ab85d332adf55b013 GIT binary patch literal 2627 zcmZ`*&2JM&6rb5$+v`nYKAIK~G##o^a1|V+_R!KODgu;JAtN<`N>;1YvNN$aUhg_H zvxHbdst6J;2c+IPz%hSMZ+q>Df1!uA@6E0qr_ip?AHUzc_5FnfkHGWWA4^+1 zE+K#7VD_$IY$6hDg;gx5ER}QR>!>b#lSqolTgm~WvNp}z= ztQ!mjiw4733`C*>9i<7&RFrgCz`{6Cs^xi`J;5gX%^VX+7z|Yw2U;kmVL48_QOLGZ z$%b*Thw3;xQ9>gvc1N=yj?-Pmq9oE$5J#iQM&re9qH5K(9DpeveE~BgH!7@`|%*3v> zj2>nfT^#iVlVT9SK}pv)ehF}=Fk8AM1!T_TY!Ilv;Or5&jHyhwOd>F*7PxgQle6A0 zn{2^W79tcFGArYSbQP+FL0-kPGR4YgGd;vx-ufT<9Q@a=K}9@*`;bvWTIG}5d~2VS`i)XeKXNFQzIr>5DRP%>|nK-_Du-@DUZ&#MJR zb2}DEKJORwD74*Di8rm>Q6kDR;}z60yPjXsgT>dKh< zWakCU*srT&@`h6KoIIynP$q#luCBp~dq8giBCyld^tIgxH%r7#TwR0W|eFh%PYUm!+SrC-jL0 z)`3aq$e8qPxwLO37AL=3I}Wgf$`4_)MD?bfTdiw3jq=K)AkM_0CGj+Q0tG@UPl3q2 z)i_c*Ob5fY%P>}GwQ5!W8C{%UVv0>`HBQ4IR%_6i>>r)qEQ=)T1q$joloP%O-vKUo ztKDqKIkbXbDhVGcA{!`>#Q9vwO1$g29dMr4MUoAKgt{dcaEGn3fkd7ZO!toJN$x$s zaBfSP%BEF>V*)cVokJB9SjG5#0mkYq2;z8jkv4#Ht~F2RE%$HNS%m&*;aHrIL8Rz0 zFc6puG()!~=y3WPh_VG=RBi)J=$LF<1x?;i0KpkGr}+M8*lWt=OesFXKR<2?O|zS4l$qi%1OG%3_~mRvQI;R0Ii!uegu=jJdIp9Q-Qy=+Lwm?~ z;xqt+(V73T_znVy!p(^?mPw@h=;}1n>q46}7X@zekv0D^rh6bqhLcB*&Rhg^v{3#A z&6q;&j84z`S1dQ{SkDspbKv{A=lg?{XEFBYeSaql;&P?t`#cR{+E!Z1({QG|h~f&0 zCJJNxNMODsn#C!F_r|4;-EdDXHtJ@+-K@x~xakuV=TVs3g*xv$EO%E6-_|gB3NN8E J=TP`r{{n2#r5peN literal 0 HcmV?d00001 diff --git a/practice/hangman/__pycache__/hangman_test.cpython-38-pytest-6.2.4.pyc b/practice/hangman/__pycache__/hangman_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4834885b571284694f26feb681250e9cce4306fd GIT binary patch literal 3460 zcmc&$TaOzx6duoHlF4N+ETy6p#BwPm6704W2!Wuq>Q<#vm5T0`qLGj_8#~FQlg!qh zu-$4aA#LCJ3tjQlzvNe*_KEjC@f}Z+CY$XgFObXe*d8C-=llE}-(6U!IQaY(o^JiK z;5dI%W%5%%6qZoBNvRiv0dsCR!V`rj zjwr}tw|wA*6~Q*0x_<8GgQ?nV73HB5e7RIcE!H(;clICKRQ?h_~Ua;ITI z_@aoqFG?anSrlbaL0J-2Q9~Js1+j>-ES50ovZ)Ox+mbrdO$NuK56wo~y@tR30w%+D z57=Y2?>uGu?5TU`WL~#$=rSj7>H5N@nsDIRYZ$MUrblHAtQQqIGu23Isj}-222o-v zZJBYMMcF``QYYWBS=`*Zx^;Jx-)`KveY0`HyrpC>iu-ZD&D#Ts(fXNd3R)&DQ)ov$ z`OHy^@cjJh`dxU|>(SbFB+`Doz9IGfEZtd`52b3xy0^ZgqGlF1<@#`{QOPrGd~IjX zoTCShxw1G)l0E({Z$)u3P*U?qNshL3R|;Z>F2Xo0U@Pp=rOEKEy^)KT2l;)toelC- zP!%C!JkELDvq4p~7_&sd>_z&%6nr;TLRHafLz9~&dg=HM`zcRkmLYC-hk1Yny{c&z z?9hGn{!Vr=Nm*>z_#F|7hCNh7 z_vdG~I&ziBwAzXEYLqA$iM>_X7gDU%YdLd$1%gWB+Zfr9s}jbl04A&sNqg(|=5Bh!g=}v}nzDS@lsj3R_DvyDZCx*@8hL`)U`es@q*BL$J8yXv zwEz{rc;N*vvySAna2{)({w~!i_|VHR1YM2Q+!a=1r--Is&C>Ms?xuj8QiDG*#Ry11 z0w@VQ06|cCfUeNBLC;&dMSz>bLj9#fNT03KNPo_emJ(KBN)1zl!fZ#%ux;gINv4Q% zvCX+*X;|dw;`~{VpOSaceGE56yi`O5wL<2kBXiM4z9pp~35s|#RZ2Fq;kn^ZC&XRz z0mz~>I;CEPD^30gg9>85$d-rYqsy}>%;Wk$!Q*vEPT=|iNs9*#*GJg4`j`yCp+12* zq9dZtkvS>A-@H1&*)Aj-Q6Ka(h!lP!@_z}3FAMX=9ASRx1XIEGFxyzgT2PJull=C; zmF7G)xh~RyE6+KyGCr!+nUN#49UW^nJm%%BV)dHZnW)jYDZO^H>b~2pL9cV~Bpj%B z7sLYedXcy-v??XLWsRFTgpfAA8YR5=Jrpslhyw&#~XDL6|%rk7Kylr!Kh=&o|g*(pI zY~KpSgPKLy=I)``<8C`-0ii#g$ESE=5%wFQ7e!H6-fjxnYIowUVUY!`KBL@Ls>f+p z(UsIH_aqd?ZFY_$als;i_}Y79+UH4xo1RVOxPZn$W>R4A9_?8ZoWKF!8mmCXkwt%) zjq)5`8}*6_IPX)!=BC1VFBOA?o@<=bl{oKFl)%;7WLC+1M&@%eqx-xDu zrBPc2gKbEWd4mBi%v7;gq5QHGY@vQF!iAjHbkbr?@O{4d%X9 None: + """ + Try to guess a letter. + """ + if self.status == STATUS_ONGOING: + if char not in self._set_word or char in self._guessed: + self.remaining_guesses -= 1 + if self.remaining_guesses < 0: + self.status = STATUS_LOSE + else: + self._guessed.add(char) + self._masked_word = [ + value if self.word[i] != char else 1 + for i, value in enumerate(self._masked_word) + ] + if sum(self._masked_word) == len(self.word): + self.status = STATUS_WIN + else: + raise ValueError("The game has already ended.") + + def get_masked_word(self) -> str: + """ + Return the masked word. + """ + return "".join( + letter if self._masked_word[i] else "_" + for i, letter in enumerate(self.word) + ) + + def get_status(self) -> str: + """ + Get the status of the game. + """ + return self.status \ No newline at end of file From 360f60187feb51ad1d20414e5f21ce77fe57bfcf Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Mon, 15 Apr 2024 13:58:07 +0530 Subject: [PATCH 23/41] meetup --- .../meetup/__pycache__/meetup.cpython-38.pyc | Bin 0 -> 2782 bytes .../meetup_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 30118 bytes practice/meetup/meetup.py | 77 ++++++++++++++++-- 3 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 practice/meetup/__pycache__/meetup.cpython-38.pyc create mode 100644 practice/meetup/__pycache__/meetup_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/meetup/__pycache__/meetup.cpython-38.pyc b/practice/meetup/__pycache__/meetup.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..041360a27183250eb426729581d6c597b9df1821 GIT binary patch literal 2782 zcmai0&2QX96rZuZUhn3EQa(gLLZ+9n&~Eq?QdL!a6c7h`X`rwYGOlMfYqD!EGvhXi z91f(YMM8)>MQXX_@8RYv64IWzl|%WxncXB56`aiY&G^lm-}}8cZ}yXwl`g~c$8XOM zOGv-d;N%lv@HU!$1D#+4Cb;m%eBuo}PO?At2mXgl1fq45iIxlw{6R~EqJ5JMLg8Ow zy(s0Mo-j%633zLNzosElXa!q2G79zeOg<-$r2f zccvJm+30-tT)c_3$Ga`|H|aJ2J;HAMqU>+=&&KP+TxqioLCdTx#Cq?aJ1*2d#Wc&ksS~pUH7a+(D{-sKd^-h)5*2sG46dbMP&`xdT*JZK5gq`f9p2{pA z=Ahj&ZILR3SQU;f%Se1Z9p?hZj0Cc(0Obxx2}0G}0Yp_x{b)qi{<{7TNJPNNz3qPg zQ`rPA>@-^*G$gLSp4D0bGAUKyZ8l8OTWYMF~pp$ICak@Og2fk?CVnduP5!~zyf?F(LgBH$F z*qnA}=u*1-{sQaX;lt={2HY4SVC3)dA&GI!iqg1<09}md9b;5}twIW%w_}>419I-1 zT}+}GrAQQw7*)`n>BIyW>+{v}+ zXTBxEbtEsEeinn8*DPVRhn^enfZg?L_7%U!K?%Ry3mP9=H0?QxrlqT?R85p5d6AnW z>G@5d<#?!CFr`9thrH<|Nj6TkPLe}*|NO=$S}MJf_OGR)Eb@&@Qg54bx*>O@%5pu~ zn5q=DD3cqG&H1Z8-Bl6nJ%^^rFykTq_MZE9l=??#xT3HlmH=3!6PYAUH%VOigS?z1 zUsvgP{-vEHqRf)SZquyHL1%J2#@sUOxQ+_ATA_}3djd_(=%m%Fup2Pb-tPXy72|AwiL<>`6V^)y zIAPy3b$tLuG+l}Ni&mlcR(Guz>AV>4oNMl{bT&1RGh zy>=72a^JM)#lGoWm7=h9zlkBK4K~)8vGG6fwnOD% z1~I_TmN2y0RPS`{JYJaHyE(2F9ZGoYDv9+ZMU65WN_uodxJddCFyB|g;Mt_Cvh({h8f8G!H zlin$xZRA OS>Zyny38a0)au_rAqDgR literal 0 HcmV?d00001 diff --git a/practice/meetup/__pycache__/meetup_test.cpython-38-pytest-6.2.4.pyc b/practice/meetup/__pycache__/meetup_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9940faa87d97b4b1f740dbd2c42f82b4b9f67f13 GIT binary patch literal 30118 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 literal 0 HcmV?d00001 diff --git a/practice/meetup/meetup.py b/practice/meetup/meetup.py index 10f6bca..7edba46 100644 --- a/practice/meetup/meetup.py +++ b/practice/meetup/meetup.py @@ -1,13 +1,74 @@ -# subclassing the built-in ValueError to create MeetupDayException -class MeetupDayException(ValueError): - """Exception raised when the Meetup weekday and count do not result in a valid date. +""" +Meetup day calculator. - message: explanation of the error. +This module provides a function `meetup` for calculating meetup days based on the year, month, number, and weekday provided. +Approach: +- The `meetup` function takes the year, month, number (e.g., 'first', 'second'), and weekday (e.g., 'Monday', 'Tuesday') as input. +- It maps weekdays and numbers to corresponding numbers and indices for easier manipulation. +- For 'teenth', it iterates through the teenth days of the given weekday in the specified month and returns the first valid date found. +- For other number cases, it iterates through the month's days of the given weekday and returns the date corresponding to the specified number. +- Custom exceptions are used to handle errors like invalid dates or missing teenth days. + +""" + +from datetime import date +import calendar + + +class MeetupDayException(Exception): + """Custom exception for when the meetup day is not valid. + + Attributes: + day -- the day that is causing the error + message -- explanation of the error """ - def __init__(self): - pass + + def __init__(self, err, message="That day does not exist."): + self.err = err + self.message = message + return super().__init__(self.message) + + +def meetup(year, month, number, weekday): + + days_to_numbers = {'Monday' :0, + 'Tuesday' :1, + 'Wednesday':2, + 'Thursday' :3, + 'Friday' :4, + 'Saturday' :5, + 'Sunday' :6} + + number_to_week = {'first' :0, + 'second' :1, + 'third' :2, + 'fourth' :3, + 'fifth' :4, + 'last' :-1} + + day_number = days_to_numbers[weekday] + number = number.lower() + + if number == 'teenth': + teenth_cal = calendar.Calendar() + teenths = sorted(item for item in teenth_cal.itermonthdays4(year, month) + if item[2] in range(13, 20) and item[3] == day_number) + + if teenths: + return date(*teenths[0][:3]) + else: + raise MeetupDayException(f'Teenth not found for {weekday}') + else: + week_number = number_to_week[number] + remaining_cal = calendar.Calendar() + cadidates = sorted(item for item in remaining_cal.itermonthdays4(year, month) + if item[1] == month and item[3] == day_number) -def meetup(year, month, week, day_of_week): - pass + try: + return date(*cadidates[week_number][:3]) + except ValueError as err: + raise MeetupDayException(err) from None + except IndexError as err: + raise MeetupDayException(err) from None From faf37c520277ac76f6ee6be862b61f97c2c3c3d1 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Mon, 15 Apr 2024 16:40:29 +0530 Subject: [PATCH 24/41] food chain --- .../__pycache__/food_chain.cpython-38.pyc | Bin 0 -> 2881 bytes ...ood_chain_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3732 bytes practice/food-chain/food_chain.py | 82 +++++++++++++++++- 3 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 practice/food-chain/__pycache__/food_chain.cpython-38.pyc create mode 100644 practice/food-chain/__pycache__/food_chain_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/food-chain/__pycache__/food_chain.cpython-38.pyc b/practice/food-chain/__pycache__/food_chain.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4558a18b4e6aac19883dd9b618f5c5fba60f81a GIT binary patch literal 2881 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 str: + return f"She swallowed the {curr_animal} to catch the {prev_animal}." + + +def recite(start_verse: int, end_verse: int) -> List[str]: + verses = {} + cumulative_verse = [] + prev_animal = "" + + for verse_num, line in enumerate(ANIMAL_LINES): + curr_animal = line[0] + animal_phrase = line[1] + first_line = f"{FIRST_LINE}{curr_animal}." + second_line = f"{animal_phrase}" + if verse_num == 0: + verses[verse_num] = [first_line, second_line] + prev_animal = curr_animal + cumulative_verse += [second_line] + elif verse_num == 2: + cumulative_verse = [ + she_swallowed(curr_animal, SPIDER_LONG) + ] + cumulative_verse + verse = [first_line, second_line] + cumulative_verse + verses[verse_num] = verse + elif verse_num == 7: + verses[verse_num] = [first_line, second_line] + else: + cumulative_verse = [ + she_swallowed(curr_animal, prev_animal) + ] + cumulative_verse + verse = [first_line, second_line] + cumulative_verse + verses[verse_num] = verse + prev_animal = curr_animal + + recited = [] + for verse_num in range(start_verse, end_verse + 1): + recited += verses[verse_num - 1] + if verse_num < end_verse: + recited.append("") + return recited From 6070a7c7a685a13e59c5752ab59f1c4c71472bd9 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Mon, 15 Apr 2024 19:21:50 +0530 Subject: [PATCH 25/41] go counting --- .../__pycache__/go_counting.cpython-38.pyc | Bin 0 -> 4356 bytes ..._counting_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4449 bytes practice/go-counting/go_counting.py | 83 ++++++++++++++++-- 3 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 practice/go-counting/__pycache__/go_counting.cpython-38.pyc create mode 100644 practice/go-counting/__pycache__/go_counting_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/go-counting/__pycache__/go_counting.cpython-38.pyc b/practice/go-counting/__pycache__/go_counting.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f13050c955a1dd96e8a990d55b76488933ffcce9 GIT binary patch literal 4356 zcmbVQO>f-B8J^+CE_W?Eis3p@Qv|G$4{sr_3@3-wFx=R3nmB1?z#lQNt-GQ)v%9n? zay7%1v;y~18EAfneDq)FwTIq%%88d2=%xM(zO>If+)v34jB>%@a6aC7zn*7?`{?Z1 zI>YtPA3yB;{T;^sO)vA8jh8QR>rYS!)?$LUxUgE5uv@lpTF%!@xT5lmiOP}Haz*t4 zYk0voE@SnFy-53E9B94jZ{AJ=B{o-mGzqDrZX$)BrGAhE@$gXknN%vuQWZ(nG^`xKfCsIKcM9#_SMthP(g=wlplmrA zzuLU+-R>x9g@)$)JaUQ*KcK+ zina!sES+G?g4kPrwx3=R(T+?sln7!9>da=9?rV&C2>&F5oh|ZA$EQY00P@;wXqd*Q zhoW(?lbjq~|9zPxCLHZ{ltfv(eOb%6vswylV9mQ|jec0_}?N+OQk0xqNF>Q;+nj8dS#>V1RTRR%KX28v>+P*HqyxzGhL0` zw}sTLeqW_Q*rO0qc5F`d-W*eaKhTI=;CJFQ6#y<_IPQWyvfd6sITD1@&d`@h7^j-3 zW{ww#Cl>f4Lh2ENkRb~T!kFojKrmvDWz#*R>S>IjV=iq$bfpeNXh<OCN1hB)o80c>5B!{sM($pk@YY=AdQ}^fT6S zgd`_CTet=Shk897B-y;Glui=Cn6S`1IoInxu3M@L z+*6IN5-gYFNN0c0nR?RrDIPGhLb73UQQgM9j$2Rv+9M6R zTnn08fk=~R?T*yjS=wKd2U3NR-dXFb0C5TBS~tBCl9zxx)Z3GKvp+1n3E_MSnYx04 z@d~f=!*j;H%}IAiCQdG@Pfh+DF9Jq6XxirK1(?gWS>jlXv-BEztZ`2hJ$xGmQ_lmY zXt9Q+&fuYFM{n3_36Fvw6ntoGEQ@p0SRGT>Dqgg4KR-NMsyOah(2!))ZGy6iN|%jn z!SApqpNyQG9aE5;_gHQ{x0ILL$I!og?^w?{XS?2btUDfS5P}?bDG9){{#e+{XIL)J+tQcfZYRIqCLoZf7oJ{3EX= zR%VZE^pq|CqPN`6UDCT@2Y-Y6iN(!sIJY@~spjZxyw9CDX-z2stU%Oe&{$Fi5yc{H zP|JaT8HW}S#=6qJUtzKkV~Dw)3}X-g%Qjm1-$Bx3$Ddv=idfs#Sf_wV5_il$4CFRl8QZc}jytq*(h zjRJ5wOX1scy?_)W0kh)*&dq9akc3KalrvTJQ*0))jjlPJaCrW1vWN4Im=mt5NaeW| zi!`=P(eftyaN**J6>b+iEV!bVG?4{QPV!T2V#V;+5Uh!&*tsR3^*qSb0i_bDF5!0$ zKM(h^DXHH>{{+udDIu}QWS%MQ>EcKd>jEaF6$q1U|!Zok2H zujL#VbA!)LVQhR*Isr11ZuBjY#%}?p1fHFN?X_?aQJ5`4f?DXLu7cX`*M<3odQ(8)msNmrVE)WAW#50MSKu$otukE;45 ziWj`xhUomD%(hy)(Uplj=&PGg(WYq|cCbG$;Xcm}KPoqwNmAlq*t`*^VG!$^&FMsg zN_7D<8@0kUpOb0@Z#baQC!$eAeT;^3rzc3N52*ME#du>Zc-E@y1tGpl3%=K~5z4~d z?@1*~oYCQ=RQSxCGJisAxjUY@$bSKBdHj9c=lS8grxf3SayaWG_&{&Bi+a1glZru1 z^`&-ucM!zmo@%=-(y-lD_-BC`rYTv2lvPbCjPqs%xl!T214a(k#45nE>$#ro)xD2R p&jzf#M#CCZ{E7;Sj`}$jH1%~d3-3m$;!R?LGBO`HpbGq~{{g2%kx~Ev literal 0 HcmV?d00001 diff --git a/practice/go-counting/__pycache__/go_counting_test.cpython-38-pytest-6.2.4.pyc b/practice/go-counting/__pycache__/go_counting_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb56dba8a8de71b3c631191f80f340323411ce9a GIT binary patch literal 4449 zcmd5r5FWjDwGTVNaT1%S0-=a0;!Tk_TtW!zn2<_pfjls!qH2(LCcAQWrDdeW zkFrnBmEz7RDNg=Nx^nVg@CCYOw41e8ayAr)NTr^hhgzd=zV7LHJT+A&aQ)?;d-CTr zA%A0K^fIAx3!dnE5R5RbLtIUkde_j2M!KeJX{x8-7NAG(6uY)-cS~-mTXxIcid)gh z9l{J|J|oQJh4t#5;Z8B_Az82vz$$4hn2A*nJ;4%d_1n9TR-ktO>*afi+4!!p(!?R7 zmkyO%@I(v*m(y`|rZN2)aSinu*JKteK;2?RW?P@#Py2c7Pm*4fD^<90}*dfpL9X&Q)=o$gt+%a&5tkRY(jKEi`jYG?E z>W%|N9qvP`?yNd>sI9_{eXEWma3%*R_Vq;DOth_iUA9Rv(5ukDpbIQy`+_A9#iSH- zA^bQLTS>)>A}->UU;AE1;4dZ9s^uY9jr(R|M!fSRvDR>@Tq}yhfQuOzx=+L$6o+?f zkHJP%^A^`U76yLpHjkdhVXwwFxoG-Px7HJ0GxnRj)(S5-Q$Rtd1D(cz?qY8%xr7Q` z>v+wl&?(?U(3Q@Wh5=pLT%vLwr{Tkq4T5Mha96eMFOII&;-r@H7qt%7|LdZ*HC$r3 zpyh@rf+c~o6(tntd!hp30GH#y!0HqTSgUtXe;0MNRuX7&23zH@S=7#=KHhBQ35K|GGwEj&qfs}BoPZTP>hgo2vcH2 zJkDg`Wr>wXWq_bwz-SQ0)XSmahhvD{$UAjgb2mU)kw^EtH+ZP-)!<;?1w>O zdZHEW8v>nMoClE@5H^p;h?-m>UwxXc@ut_0INhXvMB^}|op6Ib3B}7GdkG9hGEtBr zb`IqB&8$_L+~ga)PLkqsuS6G6yXi-$T}1IIieoYN%E@@P{Z{)ZpfxaZ9MG>`3(#?! zZ!V&W^yug^K2L&ZHbb{^8G1bf(1{qDZ}LsY^YZK9na$AQ&yTa|%M3s#V(1Ar#}LIW zTgK-5pkQonX)0ZQuDu`-kJBW1p2ViwxzZMEtfc@^SRcu?jK-nn2uuzaiYlB|2Kl4U zBel=Vgu#I!Dx*TTAB~*ibL=|i=^v{+AmAgr8Ai=EryK3C!&Opx8{SOayR6v|Eg@cB z%W`kXpieY3h8Rv#BK80jxtnP%JsUGTg0u&_6&^NBzzB{cN7@j{!bnz7Xl$EKeN{mx z-hz)n)`UroIya=cJWnWG6-qL1l6V?8Rz^?!gOL&8hBk!X;P-N8?rvInI=_A z@kpq8#M?O8_fUL*;sT1#P%NUrT}@m;aSg>13JlC61dvp~bBe$t^C@^DOjT^nE~IzS z9^P^c&TOskci`+DCDmKKEjp~t)7}>1v#2s9fM-$g4LHz3N;GUrii5T?ye#4LL}K>? xKgNn%899EcWLHvHk{NlN*pFb?vIi$yoO0H`B=!x3*G+survEmXA+|ne{|oWB4~GB% literal 0 HcmV?d00001 diff --git a/practice/go-counting/go_counting.py b/practice/go-counting/go_counting.py index d1c689e..abd7112 100644 --- a/practice/go-counting/go_counting.py +++ b/practice/go-counting/go_counting.py @@ -1,3 +1,34 @@ +""" +This class, `Board`, is designed to analyze territories in a Go game. It defines methods to determine the owner and territories given a coordinate on the board, as well as to find the owners and territories of the entire board. + +Constants: +- `WHITE`: Represents the white player on the Go board. +- `BLACK`: Represents the black player on the Go board. +- `NONE`: Represents an empty intersection on the Go board. +- `UNKNOWN`: Represents an unassigned owner for a territory. + +Class `Board`: +Attributes: +- `board`: A two-dimensional Go board. +- `rows`: The number of rows in the board. +- `cols`: The number of columns in the board. + +Methods: +- `__init__(self, board)`: Initializes the Board instance with the given board configuration. +- `onboard(self, x, y)`: Checks if a given coordinate is within the boundaries of the board. +- `neighbors(self, x, y)`: Finds the neighboring coordinates of a given coordinate. +- `territory(self, x, y)`: Finds the owner and territories given a coordinate on the board. +- `territories(self)`: Finds the owners and territories of the entire board. + +Approach: +- The `territory` method uses a flood fill algorithm to identify enclosed territories and determine their owner. +- The `territories` method iterates over empty intersections on the board, identifies their territories, and assigns them to the respective owners. +""" + +WHITE = "W" +BLACK = "B" +NONE = " " +UNKNOWN = "?" class Board: """Count territories of each player in a Go game @@ -5,10 +36,24 @@ class Board: Args: board (list[str]): A two-dimensional Go board """ - def __init__(self, board): - pass + self.board = board + self.rows = len(board) + self.cols = 0 if self.rows == 0 else len(board[0]) + def onboard(self, x, y): + return 0 <= x < self.cols and 0 <= y < self.rows + + def neighbors(self, x, y): + nbr = [] + for dx in (-1, 1): + if self.onboard(x + dx, y): + nbr.append((x + dx, y)) + for dy in (-1, 1): + if self.onboard(x, y + dy): + nbr.append((x, y + dy)) + return nbr + def territory(self, x, y): """Find the owner and the territories given a coordinate on the board @@ -23,8 +68,29 @@ def territory(self, x, y): second being a set of coordinates, representing the owner's territories. """ - pass - + if not self.onboard(x, y): + raise ValueError("Invalid coordinate") + if self.board[y][x] != NONE: + return NONE, set() + owner = UNKNOWN + visited = set() + enclosed = set() + stack = [(x, y)] + while len(stack) != 0: + c, r = stack.pop() + visited.add((c, r)) + stone = self.board[r][c] + if stone == NONE: + enclosed.add((c, r)) + for n in self.neighbors(c, r): + if n not in visited: + stack.append(n) + elif stone != owner: + owner = stone if owner == UNKNOWN else NONE + if owner == UNKNOWN: + owner = NONE + return owner, enclosed + def territories(self): """Find the owners and the territories of the whole board @@ -36,4 +102,11 @@ def territories(self): , i.e. "W", "B", "". The value being a set of coordinates owned by the owner. """ - pass + t = {WHITE: set(), BLACK: set(), NONE: set()} + vacant = set((c, r) for c in range(self.cols) for r in range(self.rows) if self.board[r][c] == NONE) + while len(vacant) != 0: + v = vacant.pop() + who, where = self.territory(v[0], v[1]) + vacant -= where + t[who] |= where + return t From 09604e2c155e79d580980e0d1ba07ac810a2277e Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Tue, 16 Apr 2024 08:06:04 +0530 Subject: [PATCH 26/41] ledger --- practice/ledger/ledger.py | 46 ++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/practice/ledger/ledger.py b/practice/ledger/ledger.py index c0dcf94..5946496 100644 --- a/practice/ledger/ledger.py +++ b/practice/ledger/ledger.py @@ -1,22 +1,34 @@ -# -*- coding: utf-8 -*- -from datetime import datetime +""" +This script formats ledger entries into tables for different currencies and locales. + +Approach: +- `create_entry`: Creates a `LedgerEntry` object with parsed date. +- `format_entries`: Formats entries into a table. + - Supports 'en_US' and 'nl_NL' locales. + - Generates a header row and sorts entries. + - Formats date and truncates descriptions. + - Formats change according to currency. +""" +from datetime import datetime + + class LedgerEntry: def __init__(self): self.date = None self.description = None self.change = None - - + + def create_entry(date, description, change): entry = LedgerEntry() entry.date = datetime.strptime(date, '%Y-%m-%d') entry.description = description entry.change = change return entry - - + + def format_entries(currency, locale, entries): if locale == 'en_US': # Generate Header Row @@ -29,10 +41,10 @@ def format_entries(currency, locale, entries): table += '| Change' for _ in range(7): table += ' ' - + while len(entries) > 0: table += '\n' - + # Find next entry in order min_entry_index = -1 for i in range(len(entries)): @@ -59,7 +71,7 @@ def format_entries(currency, locale, entries): continue entry = entries[min_entry_index] entries.pop(min_entry_index) - + # Write entry date to table month = entry.date.month month = str(month) @@ -80,7 +92,7 @@ def format_entries(currency, locale, entries): date_str += year table += date_str table += ' | ' - + # Write entry description to table # Truncate if necessary if len(entry.description) > 25: @@ -94,7 +106,7 @@ def format_entries(currency, locale, entries): else: table += ' ' table += ' | ' - + # Write entry change to table if currency == 'USD': change_str = '' @@ -172,10 +184,10 @@ def format_entries(currency, locale, entries): table += '| Verandering' for _ in range(2): table += ' ' - + while len(entries) > 0: table += '\n' - + # Find next entry in order min_entry_index = -1 for i in range(len(entries)): @@ -202,7 +214,7 @@ def format_entries(currency, locale, entries): continue entry = entries[min_entry_index] entries.pop(min_entry_index) - + # Write entry date to table day = entry.date.day day = str(day) @@ -223,7 +235,7 @@ def format_entries(currency, locale, entries): date_str += year table += date_str table += ' | ' - + # Write entry description to table # Truncate if necessary if len(entry.description) > 25: @@ -237,7 +249,7 @@ def format_entries(currency, locale, entries): else: table += ' ' table += ' | ' - + # Write entry change to table if currency == 'USD': change_str = '$ ' @@ -296,4 +308,4 @@ def format_entries(currency, locale, entries): change_str = ' ' + change_str table += change_str return table - + \ No newline at end of file From 8d0274c4479ba1e2ddd16752bd059a472360705e Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Tue, 16 Apr 2024 10:47:26 +0530 Subject: [PATCH 27/41] forth --- .../forth/__pycache__/forth.cpython-38.pyc | Bin 0 -> 2339 bytes .../forth_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 14192 bytes practice/forth/forth.py | 69 +++++++++++++++++- .../ledger/__pycache__/ledger.cpython-38.pyc | Bin 0 -> 4532 bytes .../ledger_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4613 bytes practice/ledger/ledger.py | 1 - 6 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 practice/forth/__pycache__/forth.cpython-38.pyc create mode 100644 practice/forth/__pycache__/forth_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/ledger/__pycache__/ledger.cpython-38.pyc create mode 100644 practice/ledger/__pycache__/ledger_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/forth/__pycache__/forth.cpython-38.pyc b/practice/forth/__pycache__/forth.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4ca54f088597c999ea56021ecac78c10aed10d8 GIT binary patch literal 2339 zcma)7&2QX96rUM;zntC8Miy|y!B zC+*66Aw}YVP`IKVl3R;7mj8gifrAeSiBk{!136HBV{h6ta9~#R=FPr0@8dV)_tqN? zi(vfn+u8nK;QrK`l)k z?pu@)>sl1a(Cuwrwmx;0*R#d8>nCm;O1qEg+A7&lBDTZ6{aGmE%_aR;?DmG2He4mR zjl%=!jz(TEuzfceB;E!h{A>`rT` zuxF3lz>5+;*RXrx2zw6AmGv){?3LTMK-cbG1HEzGR4Zc0<) z;PP;suC{1ana0#&nW==|mj;xc5?R7>_;F`l38^}6d&A{n;B{7n8pdJN5f6myd1};& zq}v1LqJv9}Hw)U19%fa?0b;S^%xK4XM09-SKca0PDXtlM09E%^JUVxdB6|zewbU-F7Cif|( zUJXo>8;{M2=1Q1ly>j!hF){JL@x*h!V z->}nUzj8n()wHVh_Nxa({Z#Pzxf$p_o9-=6a((E?XK{_!cj?!3YZXz}pfQ!g>$!=Q zT4{M$mcOU9w47R}$w$!H`ZcZXLvlbV(L5x%&tk*J6&8cbu-AY+D!(i2#ZBJOS$#!`M~-0W@ca46&GeHunu~ z{LTsA^~p@iw9f$p2JCKOSNmi#&w!F+KDFI%k%@_%n7lK7FE#U+Sz6NTE}Jyc1|%Qk z`81|k=tv8TxBr!ew)kO=jkfqGp5t@-^L$=^vMJNA47UKwZ;%5zpm=jEsN!Z9UgfD# zPj%5ewffrA)o)u@-!;s<9t=oI?$swWrTgT7{J^%%wc@M5CtX4%5b`O@So{5qdMCb< z%v$z66{GM)S7x<2ZMTdfF+MXb$)dgNhdtLXtt)F0g;y?jVNd9GPG4>F$jd|wP)|5bS&zk4%KNx$#)JQ2ipkc>8j z)D6Ik#Yov+P!#NOlY8497xu8bMOTh_jqz2>~ z<||N6B`B__{;26M`$}ses}`G3W`@goW}tgz#whW#D(WyAgtwhl2Ixk}B&%@Y=S)dO zV6vL0kgJehFSG8T35vXIXJt2vL;zb}5NAdNT&T;P`MeEc3 zty}j3;Fh4?qqSxX0hX2Mg$TLS_oPD5XpbimZNrMTr0#tb3l+y(FtH7v1NIe!oipWmc+e&in_U_gW|b literal 0 HcmV?d00001 diff --git a/practice/forth/__pycache__/forth_test.cpython-38-pytest-6.2.4.pyc b/practice/forth/__pycache__/forth_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6dfcaa3a5e9e8acd9302b02fd5e88360af1337dc GIT binary patch literal 14192 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 UFp-NC;&^73mJUei*uK>N0ZJRpiU0rr literal 0 HcmV?d00001 diff --git a/practice/forth/forth.py b/practice/forth/forth.py index 7cf4ff3..460536c 100644 --- a/practice/forth/forth.py +++ b/practice/forth/forth.py @@ -1,6 +1,69 @@ -class StackUnderflowError(Exception): - pass +""" +Approach: +Basic evaluator for a subset of Forth, a stack-based programming language. +Supports arithmetic operations (+, -, *, /), stack manipulation commands (DUP, DROP, SWAP, OVER), and defining new words. +Custom exceptions are raised with meaningful error messages as required. +""" + +import operator +class StackUnderflowError(Exception): + def __init__(self, message): + self.message = message def evaluate(input_data): - pass + data = [i.lower() for i in input_data] + stack = [] + operators = {"+": operator.add, "-": operator.sub, + "*": operator.mul, "/": operator.floordiv} + manipulations = {"dup": operator.getitem , "drop": operator.delitem, + "over": operator.getitem} + index = {"dup": -1, "drop": -1, "over": -2} + user_defined = {} + + for i in data: + if i[0] == ":" and i[-1] == ";": + definition = i[1:-1].split() + if definition[0].isnumeric() or (definition[0][0] == "-" + and definition[0][1:].isnumeric()): + raise ValueError("illegal operation") + else: + instructions = [] + for op in definition[1:]: + if op in user_defined: + instructions += user_defined[op] + else: + instructions.append(op) + user_defined[definition[0]] = instructions + + for i in data[-1].split(): + try: + stack.append(int(i)) + except ValueError: + if i in operators and i not in user_defined: + try: + second, first = stack.pop(), stack.pop() + stack.append(operators[i](first, second)) + except IndexError: + raise StackUnderflowError("Insufficient number of items in stack") + except ZeroDivisionError: + raise ZeroDivisionError("divide by zero") + elif i == "swap" and "swap" not in user_defined: + try: + first, second = stack.pop(), stack.pop() + stack += [first, second] + except IndexError: + raise StackUnderflowError("Insufficient number of items in stack") + elif i in manipulations: + try: + new = manipulations[i](stack, index[i]) + if new: + stack.append(new) + except IndexError: + raise StackUnderflowError("Insufficient number of items in stack") + elif i in user_defined: + stack = evaluate([" ".join([str(i) for i in stack] + user_defined[i])]) + else: + raise ValueError("undefined operation") + + return stack \ No newline at end of file diff --git a/practice/ledger/__pycache__/ledger.cpython-38.pyc b/practice/ledger/__pycache__/ledger.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ef595e5fd9231d86bc9e2ede43d39258ce58c70 GIT binary patch literal 4532 zcmbtX%Wot{8Sm=X^z`(MA8WkX1U3zL*E@j60Yw5WE3{~x3hnx`NZ{UECBCQ(4A#lj##DN2{AmR5_&y3rTbr$H+ zRDD(7`&U(;sveZfwu0|Z?_b?ezN{#Jr9uAFFu09>^ffeGsVkguwZ+=3&Y1F=!Zofx zRJeYi)>UqB^Py7Lc!68!bzZ!$RPDwOn4;L<*=j~^ME0W=M*0%#ccHe5oTW+@@qJX;`dNneUMJ7$a8H~I-3iU*c zjV#KV?Yc|u{oQW2BaqEv5PA>pFUklP!}9`9t-S-y5rjMnad_}8 zXq784!B(qUs#6SUDVIuWX3--+JqlVIzf^<;BS$xvA4GwOmK(M82JeK;<&_}Xi96lp z;O#*8&8WTH6%9Xb`oVIxp+;S;yO&y?*9@Dn=gm+|CK`pA`0dZ-lBkV^R*@Yv!bUsr zywvu*c8Bk_h;}@$x7%oC96<+0#+GY}G^e4N#y=t$EGEZ3O^!bu1pOsM3m{_UKIu~3WFL-vZ|k& zNDX-^PQ{x#`6F`~ijk}Z0H`8i5|qq|1TJBMJjeuYAnAm0wxbSo@iVR>5!8bNwxWF3 z>FWt9!`G2qZyuCE6u9OY?#tj7M%=Ty_hOc)2aH=gI(+;TvPF{RcHfAVj3+H7eG`D0 zSCoDsF(9po!^G?xy+@ceFl!}+Z8fpBRd9Yc;*4ih@dR8ATn*eOXSk0hTvZUQLsEz2 zqfBz*qmZbFMq)fhT_kVYX1^F0lHvhFഩc948E$$@6%SykP6#I5!^D;8BrH0in zL8AnX5;V|{G(u>UpixTfq$H*DTE)HtEeBc-w9xa4^z#d7InZ(jtoI{mI#N?hZ1ftC zoT45Y$Ot;qK$wYtVvS}bqH{o0li31Ql7y8f(3&MW{08KvrChCVj%_3+Y^Y-4q+V!2 zOYVe$+Ed1UvE46W-)Lfs&-KgjqtU8C`wjjXjLUo;e#)^Omn84<3(5gQhLugFKb2JE zeo)1`$<(34Eo5Ke&&@;Pu?p-#Kdn`XQ20GSK;PfpjTfgx6?ehiG>^|Lh!-1P}} zQl~I`T#FPr8e7QAT&LY8tCXQ~dd`&v&sL{`_}ApT6?z|x&l~mew`Zf(NZ@M-fnwHx4ivI;=bOF{4LSk{yv@)!wO9z;y3V+3Gslz z+!0&aR~Ot}iU?NRYB@E)+ze8!6@=M6lx)e{X{vQQ-PCAz!gwpyaC=QP-q=g^y`TZI zu^y!wUV*9E45L8A)k~>0e!Zk-_UcOuqgPUD$fsh;y!uqT8D`Hu-1d3!cFLN9aI6<6 z3{j)8eE4{9D_)|AzDjd;_UfS7dU-_iPOH@rbtmgRyb|N6?u?i|0*LCR(J0szow`kJ zCU*LYT{-!rd=W0A4{24It?JBSHnWafwZbe-XVaLon9fwmL$BJO;Qz6z=V;CTw`%B+ zvY4%rJapw~OjDoHPDbg|@H7j*4m?bwwKN+Vj?|h(YqL3wDzHa!RU|L7OSWa4Dvh(K z|5r`;k(pCe4t}!DWlk|sR^(qt=JL2Xa%TPavy${TUi2OsTr9%r-vmJ=D%YfnEK0>u6-kyHt&))AUy_w1{G!xSj$YB7 zbR{iIHzcZ3?U6(^mb{zUQY%?1uSmJXHjE}M=agt{-Q$iK5atHlW_~ncab^ZgTsJIi z)q5y#u?VNX0fLE{R1_*#RH{(*kyO#BMiWpbXp*L&Oj4bup-j;X%|fZu5jqNGnvT&E zP-f^jJqcx&PS8_Oj?mL|63S6}hMt9TjGlwpPDPp9j8+-H!~DSh>69c{GCaR?B%qRn z^BSCf5d@VtWvXl{RcTYD>SK8Ms{BOW)LPPGIZ#@1OKGWFYD;^fAUMRa9I2}-OHqQk zWOXHyGdl}Q0Ktflma)Wqi`(_U_T2WpPSG;1ZJ2Jg(=?|>+Fj3fqpa!sj0e|$2+bNt zYEKi9=Cj&*q+229%(WU(vgTQ4jYX*rd!0S3Gb>>9sl-o0pPerYt1yaRF!O6B^<29E z6S)_7^#XgyxMllJq0UV!uq{@o2|(?F1OO^uZ$u}tLYPwz8YFHpj*w7DvKD_7WmnnN z63q*HjPv`t4F-M{hUx$hgtgJcmRgkoee$tPQ&g`iZTL!{9sobR%u$0JRk)LxE0*SG zizWE(WWNd1x)A??m*@Brd=kYO6kVnq z+>g{0VCOnudpaKs)`-Cx{2Y#T5XVWu5xfeu17foewL#*zr8<=9 zzG$Mi>+zy}A11~>L@|v*Y;_-DO>A`+p(YIO2!z1cUWd_nVQ{@KDmFY}O(8sX@S45Y zZ-EC7a=hF`6!t2&?LYtOgk8w(NM>bB8(`4onalG-%CFAU9|(BtTD(`82CiXc3>Z>LzEqC4TXC1V5mob%>RHLgWn!=#qj8r2%=mlb%V0Q zqFvZ(=F0iY^Fub8MSb4%Y&vL=~rV`U!b4$F^kou2}xJRlm7ykX-DV) literal 0 HcmV?d00001 diff --git a/practice/ledger/ledger.py b/practice/ledger/ledger.py index 5946496..360da37 100644 --- a/practice/ledger/ledger.py +++ b/practice/ledger/ledger.py @@ -10,7 +10,6 @@ - Formats change according to currency. """ - from datetime import datetime From 8648e7154aca2ead3d2eff2f3ac07883706df216 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Tue, 16 Apr 2024 13:28:47 +0530 Subject: [PATCH 28/41] zebra puzzle --- .../__pycache__/zebra_puzzle.cpython-38.pyc | Bin 0 -> 4341 bytes ...ra_puzzle_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 949 bytes practice/zebra-puzzle/zebra_puzzle.py | 97 +++++++++++++++++- 3 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 practice/zebra-puzzle/__pycache__/zebra_puzzle.cpython-38.pyc create mode 100644 practice/zebra-puzzle/__pycache__/zebra_puzzle_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/zebra-puzzle/__pycache__/zebra_puzzle.cpython-38.pyc b/practice/zebra-puzzle/__pycache__/zebra_puzzle.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d4bf3b56f603b8e828dfeae63341fc452049ad3 GIT binary patch literal 4341 zcmb_f&2JmW6`$EJE@?`!9Xqj-G+j7tVWO_&0%?o3wyHXgoi8u}6!*X)U931mYQ^O) zHM6uWf&_}#fb9Z3G}pF(ebhhDbI&~&D6ofKdh);EQ-5!EDN$nMQ)qbhtBn1}bQXvWehaT|g9z4Pf(t9*L#tzPCT!t6VjWxB4_U_%uJF)v zMNRlcr-Q7(ggS7qb=ZV)9&Fv_%! zcM=(lq#BO%D37yL2U#zO@?6C`<6P>Xm#IKT-Q8d}8*6zrXhfq?auBC|%p`+;d{3r9 z7oX)Siql*NQ7Qr@^RY^eg3gjLO&i?bg<>xor((VF0xq%^FPe+%c1bvYC|2}RRP=8+ zBEn}(STio{nI)W=E!>$SJW+eZayDfT`7OLNSNN5LR}v4ADRt~hQWK3zVpS3!@hWwk zN>ZP?x7b(zeriuWwEuj{r!}IRq&u#Hm>4n8OJN<66{craFu>bY`WM2seWW3#OxkbI5sr#}YM`_XcFzqL? z-W`JXw?|PLM@kg+y93HDDfpj6kV-A_o!eJZriHVUjAdafDGKjECP{X`aN~QKI)I8T zvVP&|G>Q{lxVxFs(ClRo3U?xRR74uNj0$HMCxgQ4X1$)2FPoW)(!LD##&K5`?tQ>k zwcMBf=ZOgJWQizNKG>BS!d@&Bfq6g8vP8dZem3q74uWk!cOZ*1UqmX2qoD*Sy8zJ9 zV}WzAaPqHYea zH%xebG#XDPN!1C<&id$}Xk15*@@_U9ZN7$iHSH7+$!?n8WDT3{o?O44WZfvyn_%YJ zOM&q4r3u7mU`!xxoesn^?7Qa(4qBUVE7)>SglB@a7@(T^4yIIfB26Mb5fdOXSG@y* z65z(EkPp;%Nput_b(y;FftGRUPOUA)(_u?aH8ZWj^dvTmjLCJO3SefpgHK>_% zLn6ErDXtkC)$5q^1?5>?Aab6FapNL!#^!Ic{v0$GtZ%Xluz$(=BQRcpy0Jc3u-?S< z*!m*?I;9aSWQ2({A>q~Lkm;JzFvrT0DMxU)4lQHK`wOOEUkD3fvrX`@Ctevm6QeaU z>MbIaZ}oj5#@aWDdu8w_?hDAK&?&O7%m8gNWt_i69N}bPVjQs5vL;D2>b?!KX(NzOlN7~cC#c?g)3B?qLiU> z4x^;w>R~pJ#?h9g0xVMS_|PqQRPb)WMZre}*JU7%Ku__~gbK>j3-Yw(C{tvt~}xc2GRAzV6h@m37B6mY_8z=uW*<9L5hizR@+DQ6jEherJT{3vi`f zKg6PDM;5LrEEF?M#xm~Af7W?E|M`6W`#o1wU%R9_e+U({nLfa)e*ls*9HsBfP=f^p z*D}QgrDn|>UO2EEb5J>LMcYHYL4>|L=18CNt*|3hc9lFS}ZpOVL(0cB!8b_cJ2KmSck&+5J?9rm(+<;YD+Pf&K||&^KY)LaS*C$vQZm zIu`Ccmarf34sL|P#qG}#9LG_u@V~@i+|Gn-cL_T4hj@aHi8lpr%BL)3Qwx+&ZBUEi zd&t{|cHxL9$6=hvUJii8{oTCf6pofjPi^8;^(!Jh`~M?=Nrtotij<&@_v)H{&!?2ir1I-Cc61OS8@&8w`QrIMmp300PJMTb&`?&-fJQ zJZJk20)(Oypk)<~%Ca0KM~Ief!r7_km^!53m!LTI+Bkd@-;vWtDDe4Y?X+dbXjnAy z1Xd@QgRp?>hOaK=D8>&Ba>+Qs$>2RUv!|B62SnR@)_|)vT3c-ro!R?&^^G0c_~T&h zU#|2Vbr~9t>Jf$BmOA!c<_68NnKEt(#;)NnK`RX=Jc!$VGL~arx2$f5dhw2L=$7>qSK<#4;(0O9+ zPB@BP|Dx~twjz1ERWDHgMAk(atH<~YmD69R@^V2iQdAYq>8NOq68iMz|5~c>ua`A( Vlk%kL(&e~K%fH}RSaoH!@m~g&f=d7Z literal 0 HcmV?d00001 diff --git a/practice/zebra-puzzle/__pycache__/zebra_puzzle_test.cpython-38-pytest-6.2.4.pyc b/practice/zebra-puzzle/__pycache__/zebra_puzzle_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1fcd61e18aaaf5c35e32746fd13854d94434b02d GIT binary patch literal 949 zcmbV~&2AGh5XbG^&DKe`eDr{XRB?|4*%v^lQj0(!MM$(4Uo0nf!F0c{9fd^P+6Mt~ z>MQxmiC5snjF+YXB#^MQvorn}|Nb*R-P;=x7+?6kvos;(D+b#mgWwQ8_Z*BOidKZv z_)ls$KuMkP0qs|Ep2JE~?bM93ddP>AJR>Sq*(Fh#&fkqLQogI`Ycd{ugKT6vPC}uq zY0jNkO0R7gwadndwVqiy#~s@P=z5X^aCD^LiJ~gGBs}eJ;h7ph_B`C?nBvu9y{`0$ zc79H`GNF&Mj^K0qU_O#h#M289_c=i+kRqA#;k30&{l>@!Fn6VM+WM#O7qYTQaz#Vt zbai$`EQ9d-%kmU9xKd7LQnigKkF`7ZZCC0K+Rlxu%MLVoGuLI5_o$0-eIWWkctD+W ztMC9FVYM?#H(o5?wqm-i&rf70BD7`mB z@WR2Lm)|t>F6_9be)wIHTJt49)^4B~9nF;d53vd6v7Cs=cb^Nj2hmfXpI0I8+;WdHyG literal 0 HcmV?d00001 diff --git a/practice/zebra-puzzle/zebra_puzzle.py b/practice/zebra-puzzle/zebra_puzzle.py index 2d78762..3ce6d6f 100644 --- a/practice/zebra-puzzle/zebra_puzzle.py +++ b/practice/zebra-puzzle/zebra_puzzle.py @@ -1,6 +1,97 @@ -def drinks_water(): - pass +""" +Iterate through all possible permutations of attributes for each house, +applying the given constraints and return the solution when found. +""" + +from itertools import permutations + +def solve(): + people = ("Norwegian", "Englishman", "Spaniard", "Ukrainian", "Japanese") + colors = ("green", "blue", "red", "yellow", "ivory") + animals = ("dog", "snails", "horse", "fox", "zebra") + drinks = ("tea", "milk", "coffee", "orange juice", "water") + smokes = ("Old Gold", "Chesterfields", "Kools", "Lucky Strike", "Parliaments") + peoplemix = [x for x in permutations(people) if x[0] == "Norwegian" and x[2] == "Englishman" and x[1] != "Spaniard"] + colormix = [x for x in permutations(colors) if x[1] == "blue" and x.index("ivory") - x.index("green") == 1 and x[0] != "red" and x[2] != "green"] + drinkmix = [x for x in permutations(drinks) if x[2] == "milk" and x[3] == "coffee" and "tea" not in (x[0], x[2]) and x[0] != "orange juice"] + animalmix = [x for x in permutations(animals) if x[0] != "dog" and x[1] == "horse"] + smokemix = [x for x in permutations(smokes) if x[0] == "Kools" and "Lucky Strike" not in (x[2], x[3]) and x[1] != "Old Gold"] + for p in peoplemix: + for c in colormix: + for d in drinkmix: + for a in animalmix: + for s in smokemix: + if p.index("Ukrainian") == d.index("tea") and p.index("Spaniard") == a.index("dog") and abs(s.index("Chesterfields") - a.index("fox")) == 1 and s.index("Old Gold") == a.index("snails") and s.index("Lucky Strike") == d.index("orange juice") and p.index("Japanese") == s.index("Parliaments"): + return [{'person': p[i], 'color': c[i], 'drink': d[i], 'animal': a[i], 'smoke': s[i]} for i in range(5)] + +solution = solve() + +def drinks_water(): + for t in solution: + if t['drink'] == 'water': + return t['person'] def owns_zebra(): - pass + for t in solution: + if t['animal'] == 'zebra': + return t['person'] + + +# //////////////////// binary search tree: + +""" +add() inserts new data item into binary search tree while maintaining the sorted order. +sorted_data() performs in-order traversal of tree to retrieve all data items in sorted order. +""" + +class TreeNode: + def __init__(self, data, left=None, right=None): + self.data = data + self.left = left + self.right = right + + def __str__(self): + return f'TreeNode(data={self.data}, left={self.left}, right={self.right})' + + +class BinarySearchTree: + def __init__(self, tree_data): + self.root = None + for data in tree_data: + self.add(data) + + def add(self, data): + if self.root is None: + self.root = TreeNode(data) + return + inserted = False + cur_node = self.root + + while not inserted: + if data <= cur_node.data: + if cur_node.left: + cur_node = cur_node.left + else: + cur_node.left = TreeNode(data) + inserted = True + elif data > cur_node.data: + if cur_node.right: + cur_node = cur_node.right + else: + cur_node.right = TreeNode(data) + inserted = True + + def _inorder_traverse(self, node, elements): + if node is not None: + self._inorder_traverse(node.left, elements) + elements.append(node.data) + self._inorder_traverse(node.right, elements) + + def data(self): + return self.root + + def sorted_data(self): + elements = [] + self._inorder_traverse(self.root, elements) + return elements \ No newline at end of file From 017dd942e3938e045b1845b8d56a0b62065aa493 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Tue, 16 Apr 2024 16:10:09 +0530 Subject: [PATCH 29/41] scale generator --- .../scale_generator.cpython-38.pyc | Bin 0 -> 2306 bytes ...generator_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4701 bytes practice/scale-generator/scale_generator.py | 54 ++++++++++++++++-- 3 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 practice/scale-generator/__pycache__/scale_generator.cpython-38.pyc create mode 100644 practice/scale-generator/__pycache__/scale_generator_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/scale-generator/__pycache__/scale_generator.cpython-38.pyc b/practice/scale-generator/__pycache__/scale_generator.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99ac8f06768f9babd2bcac3d87c5b22755ebb33e GIT binary patch literal 2306 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 UJ&oM?9cmk3xLC%NVVULJ-@!T$!~g&Q literal 0 HcmV?d00001 diff --git a/practice/scale-generator/scale_generator.py b/practice/scale-generator/scale_generator.py index eddc130..d6e21f3 100644 --- a/practice/scale-generator/scale_generator.py +++ b/practice/scale-generator/scale_generator.py @@ -1,9 +1,51 @@ +""" +Scale Generator - This class, Scale, is designed to generate musical scales based on a given tonic note. +It utilizes a chromatic scale with both sharp and flat keys. The chromatic method +returns a list of notes in the scale based on the given intervals. The intervals are +specified as a string where 'm' stands for minor, 'M' for major, and 'A' for augmented. +The get_scale method generates the appropriate scale based on the key signature, +which can be either sharp or flat, and the get_keysig method determines the key +signature based on the tonic note provided. +""" + class Scale: + NOTES = ["A", "AB", "B", "C", "CD", "D", "DE", "E", "F", "FG", "G", "GA"] + SEL_SHARP = ["C", "a", "G", "D", "A", "E", "B", "e", "b"] + def __init__(self, tonic): - pass - + self.tonic = tonic + def chromatic(self): - pass - - def interval(self, intervals): - pass + return self.interval() + + def interval(self, intervals="".join(["m" for note in NOTES[:-1]])): + scale = self.get_scale(self.get_keysig()) + result = [] + result.append(self.tonic.capitalize()) + index = scale.index(self.tonic.capitalize()) + for interval in intervals: + if interval == "m": + index += 1 + if interval == "M": + index += 2 + if interval == "A": + index += 3 + index = index%len(scale) + result.append(scale[index]) + return result + + def get_scale(self, keysig): + scale = [] + for note in self.NOTES: + if len(note) == 1: + scale.append(note) + elif keysig == "Flat": + scale.append("".join([note[1], "b"])) + else: + scale.append("".join([note[0], "#"])) + return scale + + def get_keysig(self): + if self.tonic in self.SEL_SHARP or self.tonic[-1] == "#": + return "Sharp" + return "Flat" \ No newline at end of file From 400fc30a91513452982c0ce3ac679795a18684a2 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Tue, 16 Apr 2024 18:51:30 +0530 Subject: [PATCH 30/41] palindrome products --- .../palindrome_products.cpython-38.pyc | Bin 0 -> 1400 bytes ..._products_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4997 bytes .../palindrome_products.py | 56 +++++++++++------- 3 files changed, 34 insertions(+), 22 deletions(-) create mode 100644 practice/palindrome-products/__pycache__/palindrome_products.cpython-38.pyc create mode 100644 practice/palindrome-products/__pycache__/palindrome_products_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/palindrome-products/__pycache__/palindrome_products.cpython-38.pyc b/practice/palindrome-products/__pycache__/palindrome_products.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..06f2e228f7b2475d739fc87665b21a9585472b62 GIT binary patch literal 1400 zcmZ{k&2AGh5P^_80yCT67UIZbkL?+cznSdG>S~EV`|;~p^JjsO->57$2b5RP4Fe&_ zDG^jSpU5c{uJB-VL_w^;=!)VI+3|Uw5>h(kT@?u(hmsxYSo8vG_SkV-85V-pl`M!O z%T;8Uy@*+}7X?4dAEy7GIyLz9J5l~WKl0XliIKgW!oxZ zoS8%hs;Q)4nnx|k;7pSTHrA#BfyhNi)9YE#mO;lb)dc&N`XD1#8vA7sIA1UsyO;(z zv&Yck4GXdV8!iSi@j8nZEpEkIW*2P*obs*d+vG+JLDS5FL(t@6ql7jdMjHEB9FPO7pm zb)ZaGO*DX2fvnD7yEjeF!dhdxR!J_i()_HC@!?g3`c$vL7+}p!8`LDhBl$DF!=yz9 zPD)bR@$@4L&lu8=)Y25H@*zGAq;NNg@P=-UypIO1by9aobs5fpm2jVsp#wXw2VUx? z-Z~M5j-wA?543F{=8_K85%{P2Ao3_VKS-S~uxIo0+kmj;e5K=cT?Q+s={SUvBXV9A z1T_GsV)nyj*h(*$Ph* z8HvnQk;P-+urV%TnDhQ*etK_G*p03-HlzKFUgoJA3*?s-C$)MH6tj-kQV(eR^eOZ; z`kZcnexK^cu(O>0H`rZ5Kj%KCiy6oX&)M%TW$yv|+Aa3ooP8~4Ut7W+*7fcU_PaCo zg}N?6q#CP6-$8+2IDHqz0~AeV2$Y+F#wyUN&=y51Ef*D&-nbZ~)y6Y6TWqg8vxX!} zp4wMb@e63h1Ij~xP9K;zgajD=L7zBh)^>bZ2d9Zx%V#dTduHZ4-<&yTZ%s~S2wXoG z=gJok5b`@VdM^taOYoN;f?$NvDk)N38a2}(l+>)EP2)RG(SbWgHC1zqZY^C*Q}O{} zCbRAlW^w0s=B`blD_30A-p@v1uqXY=+H3Il&IHLr`Yf zVKxWlBzuM(f${*GXGfu&V#nBVD5u#8nD(=3ZrQH}btb|ZUlt*2mLho*=S*R0oy&xZ z4gX8yv=rqmJ_3O#t zFYaN8A;aNt+HmKfGQx01pW%#(!7OHh`E3PcO-1m;363pA?0Z6_vB zpb26z4K?*{|8m;79PRJ@TY0hfUFc&b={!(DGPrdlv)j13*I#>3QT3Zh{z~lRy1o2ajHc z=12~m>j!Amu``U%=>dE`9SfiF^$)>=LGL9T^feI4LBK=WiQOs$kGFQz7W@qy3I0K% zpr6jQ1GH=$lYJx$VV#dY`Y&jNc&!nwd4kJk6+)pGsFDiAb4+mJWN`AnCB^C0M{{Y~nM2Xx<$w?+DHL0cdvg z)lWA>A2P@v4DvLGmZ1VsK8ffO=_`-#Y3y>=0QmW0q>wX}) zRGH5(2e>RmD0KFq!%<~LYYnc_e6_?IQ4rRZ1$mj=vP2g2Dw7K#CUGo`$p<6WvoUQ^ z<0#r<{t`&9777lG_3IwYYzb6JJevsw_ebe0UH@c9%I;SG|8A0&rg6VXL=M)MO9}KO z;&l}IA)NxC-xsG)ETYJx7)S=rBtzT7`XpqpfTn(AukH%j|4`otEV#O{vfch9U@$HT z?gP()2eA71IN^_efsh3IY@prfLpP@0_E8w8q#g^o1Xme(O^JN#$vflJ@+tz<@s*HS z?nt~{YcC-toeS&e<+Lw&5h}4Sh>Qq!_FV&ax~>~o@9u9}$XW5mG$oIeS@Rnz4T#`=qz@Ex_9)4$t?}!=DD-NNUM{x|rb0`*2oJ4_(77!T_@hS>D&Ba?N-bSJG;BD6H z8s@6Vj8_THZBg*= zMG%3%>vpMBr!NC9>s{vya max_factor: + raise ValueError("min must be <= max") + for x in range(max_factor ** 2, min_factor ** 2 - 1, -1): + if palindrome(x): + for y in range(min_factor, max_factor + 1): + if x % y == 0 and min_factor <= x / y <= max_factor: + factors_list.append([y, int(x / y)]) + if factors_list: + return x, factors_list + return None, factors_list + def smallest(min_factor, max_factor): - """Given a range of numbers, find the smallest palindromes which - are products of two numbers within that range. - - :param min_factor: int with a default value of 0 - :param max_factor: int - :return: tuple of (palindrome, iterable). - Iterable should contain both factors of the palindrome in an arbitrary order. - """ - - pass + factors_list = [] + if min_factor > max_factor: + raise ValueError("min must be <= max") + for x in range(min_factor ** 2, (max_factor+1) ** 2): + if palindrome(x): + for y in range(min_factor, max_factor + 1): + if x % y == 0 and min_factor <= x / y <= max_factor: + factors_list.append([y, int(x / y)]) + if factors_list: + return x, factors_list + return None, factors_list \ No newline at end of file From bd3666ec172da56d67c8a34db5e17113dad5cc82 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Tue, 16 Apr 2024 21:32:52 +0530 Subject: [PATCH 31/41] spiral matrix --- .../__pycache__/spiral_matrix.cpython-38.pyc | Bin 0 -> 1368 bytes ...al_matrix_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1962 bytes practice/spiral-matrix/spiral_matrix.py | 30 +++++++++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 practice/spiral-matrix/__pycache__/spiral_matrix.cpython-38.pyc create mode 100644 practice/spiral-matrix/__pycache__/spiral_matrix_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/spiral-matrix/__pycache__/spiral_matrix.cpython-38.pyc b/practice/spiral-matrix/__pycache__/spiral_matrix.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4f071e92fa4847a2821622fe64aa03ded769b2d GIT binary patch literal 1368 zcmZuxL2Dd06qYozyW^={LKEx;N>NYs!g|+%LLnH_Lk{hszNEP<4U2Z9-Bov18cQ0- z4zo~bXnpOm*WPmJujr2`bM480q0qSR&1{0VL@<)xd!IhN_w?R8+uKVCjDx>Eo&6RQ z@;3^12Ls_N`1~g@NirsqN|w_V8#78|B;!|P9Ldg8((j6o0GvK8v=cf1Rs^Rn`4RVx zJXy8!Tp8s=P@W6!&r9JH-&pJnRC9fy4EOq_;@TjjB`ZV-%9&yMO#r1~rt{o$9e4vV9sFgB-OYKy{;vc7n$Ad?GKC=$Z+RVAr^FN89*Z%>a(^93K7uOj!(5^m>y8?VE6wd|!Ngdd15^ihxc)YIs&Uhu&r? z&p-FPupSZ%k>geGBH-y%cpwCQbEZiHBC>_bmPm!6O>JqUaC(z?%sHGvVn0l8pm0c^ z)}1C%8AWk35?G<=NCcn%6Q*CtjADVkN&>kiKhY=ft*MN@XKS{O0+lhyabOj!pzEx= zh?AZB4fgqu>t5B9-2+n5iajJ%bV6jWVpZn=u8GK!x*x8|lDOYZOo{mdY*7X1jqT?< zwvUkk&mjw99zyXicibO$??%LzWX%u(Yjl2EQD}tZY%56YAPn+82DuN@oK)obhY%K- z(`)j8{L0Q_I7ZK2lRm52@VKUv*R+nY4IHNCpRY&HJe2K745va`qeoAaUj|!@)TMHn z_N!6h1XNt6Ms3F&wH2|EHqAFIuIlt8*FI!+Rh;gjKj>JOF!J)Vtv(%|p(%CvIA{I1?oB4rW|K+1^RD+B4;w&xF}_H_YR#uj|I>k&h J`HXjV*?;xWaPt5F literal 0 HcmV?d00001 diff --git a/practice/spiral-matrix/__pycache__/spiral_matrix_test.cpython-38-pytest-6.2.4.pyc b/practice/spiral-matrix/__pycache__/spiral_matrix_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3b649820643862dea57c22874fdf9f50168cbc6 GIT binary patch literal 1962 zcmb7FOK;Ok6rS-Tanhvp4F&E6A%rM`MB=eSs1jVUB0>T--i%C+YZ>xl#syljEB}Lg z#j1bFTUPTIKtlI?<2Hl_Bx=iN&Y9=;eP?F;qTOx^em=(=JD&m}z95)=xK3>IXCAR3 zL2@8s=}K?tdqRp~5QnmAsl_#J@dou_J+4dfSddS_M?pbadlen{af9SDu@zdLN%Xd4 z**240Cj&K13Z1|2qk8u7IN0XT+-H-zWn+&dc^^gWS5wCUg;e7>q&h`h)~G>EF6*>F zEiNN!^OB3@(lfWz6Svay)D(TmlO8|tLG&SiW{u4U@vkT($pe{*|2)v+S-hS`$3w4N zNQ_B!@z0yxWS{}_P?mv72RnyCM;v~A(tW`lOgHJgOlUmHyN^=yx)@Ko>HAdob2IEt zbkZ;Ke%h@xxK(Lz6dfs|3I^Jl?3K%KR63j#d#dW+=2Z+<7IOc}Np79F?!RYyj;Hv+ zmSo273}Xw%8rtX@4A@ns!CtxQR^sfv%{h-1v?XphhIaMW(0(2;2M#N_R9t3f1{^0p z^N{$=%e*PbuxBBJUSMN^)cOd2i+SB)uCS`{jxzavs&23Hm}At}evSI%kU88C$Kk%o z&QG{~M$WjgS-Iq`N{!6V{3(ZKPoDv3aL~xD#atE|>qU5V80ca{)SZspoedsyI&ydB z$l;oB4 z8_GI)a5OD|=oOe{7$okLdfeUQF$M|?8OWNv@qPc#Qhs+%6@YfCJY{E2m5_DelvfF- zCi|>Pr3w2>v`j0sN^9(|(*~WTbF`U-SvXbde9y^nLa9o<3%sC(0v1|WCj<1+7ZKuE zThO$w&b7MmEb6cyECjA3L}!f#eIDj77$@-Qw%NT)JkVgElhtd9$ p7YN)>qKuxi`!L}@1D2ct= Date: Mon, 22 Apr 2024 02:02:40 +0530 Subject: [PATCH 32/41] update github workflows --- .github/workflows/python-app.yml | 5 +++-- .../__pycache__/accumulate.cpython-38.pyc | Bin 0 -> 277 bytes ...ccumulate_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2813 bytes .../__pycache__/acronym.cpython-38.pyc | Bin 0 -> 255 bytes .../acronym_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2346 bytes .../__pycache__/affine_cipher.cpython-38.pyc | Bin 2096 -> 2096 bytes .../__pycache__/all_your_base.cpython-38.pyc | Bin 0 -> 289 bytes ...your_base_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5549 bytes .../__pycache__/allergies.cpython-38.pyc | Bin 0 -> 694 bytes ...allergies_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 11202 bytes .../__pycache__/alphametics.cpython-38.pyc | Bin 2380 -> 2380 bytes ...phametics_test.cpython-38-pytest-6.2.4.pyc | Bin 4904 -> 4904 bytes .../__pycache__/anagram.cpython-38.pyc | Bin 0 -> 269 bytes .../anagram_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5214 bytes .../armstrong_numbers.cpython-38.pyc | Bin 0 -> 285 bytes ...g_numbers_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2659 bytes .../__pycache__/atbash_cipher.cpython-38.pyc | Bin 0 -> 383 bytes ...sh_cipher_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3405 bytes .../__pycache__/bank_account.cpython-38.pyc | Bin 1766 -> 1766 bytes .../__pycache__/beer_song.cpython-38.pyc | Bin 0 -> 275 bytes ...beer_song_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 15430 bytes .../binary_search_tree.cpython-38.pyc | Bin 2979 -> 2979 bytes .../__pycache__/binary_search.cpython-38.pyc | Bin 0 -> 274 bytes ...ry_search_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3944 bytes .../binary/__pycache__/binary.cpython-38.pyc | Bin 0 -> 263 bytes .../binary_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3312 bytes practice/bob/__pycache__/bob.cpython-38.pyc | Bin 0 -> 247 bytes .../bob_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5496 bytes .../__pycache__/book_store.cpython-38.pyc | Bin 2301 -> 2301 bytes .../__pycache__/bottle_song.cpython-38.pyc | Bin 0 -> 279 bytes ...ttle_song_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3328 bytes .../__pycache__/bowling.cpython-38.pyc | Bin 4676 -> 4676 bytes .../change/__pycache__/change.cpython-38.pyc | Bin 0 -> 268 bytes .../change_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3894 bytes .../circular_buffer.cpython-38.pyc | Bin 2982 -> 2982 bytes .../clock/__pycache__/clock.cpython-38.pyc | Bin 0 -> 1015 bytes .../clock_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 12080 bytes .../collatz_conjecture.cpython-38.pyc | Bin 0 -> 273 bytes ...onjecture_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1924 bytes .../complex_numbers.cpython-38.pyc | Bin 0 -> 1451 bytes ...x_numbers_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 11156 bytes .../__pycache__/connect.cpython-38.pyc | Bin 0 -> 560 bytes .../connect_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3789 bytes .../__pycache__/crypto_square.cpython-38.pyc | Bin 0 -> 273 bytes ...to_square_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2640 bytes .../__pycache__/custom_set.cpython-38.pyc | Bin 2238 -> 2238 bytes .../darts/__pycache__/darts.cpython-38.pyc | Bin 0 -> 245 bytes .../darts_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3083 bytes .../__pycache__/diamond.cpython-38.pyc | Bin 0 -> 250 bytes .../diamond_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3391 bytes .../difference_of_squares.cpython-38.pyc | Bin 0 -> 516 bytes ...f_squares_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2315 bytes .../__pycache__/diffie_hellman.cpython-38.pyc | Bin 0 -> 505 bytes ...e_hellman_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2886 bytes .../__pycache__/dnd_character.cpython-38.pyc | Bin 0 -> 433 bytes ...character_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5090 bytes .../__pycache__/dominoes.cpython-38.pyc | Bin 0 -> 259 bytes .../dominoes_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5410 bytes .../__pycache__/dot_dsl.cpython-38.pyc | Bin 0 -> 1299 bytes .../dot_dsl_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4393 bytes .../__pycache__/eliuds_eggs.cpython-38.pyc | Bin 0 -> 270 bytes ...iuds_eggs_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1182 bytes .../__pycache__/error_handling.cpython-38.pyc | Bin 0 -> 704 bytes ..._handling_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2714 bytes .../test_utils.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1370 bytes practice/etl/__pycache__/etl.cpython-38.pyc | Bin 0 -> 252 bytes .../etl_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1953 bytes .../__pycache__/flatten_array.cpython-38.pyc | Bin 0 -> 267 bytes ...ten_array_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3344 bytes .../__pycache__/food_chain.cpython-38.pyc | Bin 2881 -> 2881 bytes .../forth/__pycache__/forth.cpython-38.pyc | Bin 2339 -> 2339 bytes .../__pycache__/gigasecond.cpython-38.pyc | Bin 0 -> 255 bytes ...igasecond_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1974 bytes .../__pycache__/go_counting.cpython-38.pyc | Bin 4356 -> 4356 bytes .../__pycache__/grade_school.cpython-38.pyc | Bin 0 -> 912 bytes ...de_school_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 6945 bytes .../grains/__pycache__/grains.cpython-38.pyc | Bin 0 -> 352 bytes .../grains_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2855 bytes practice/grep/__pycache__/grep.cpython-38.pyc | Bin 0 -> 259 bytes .../grep_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 12380 bytes .../__pycache__/hamming.cpython-38.pyc | Bin 0 -> 266 bytes .../hamming_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2652 bytes .../__pycache__/hangman.cpython-38.pyc | Bin 2627 -> 2627 bytes .../__pycache__/hello_world.cpython-38.pyc | Bin 0 -> 270 bytes ...llo_world_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1285 bytes .../__pycache__/hexadecimal.cpython-38.pyc | Bin 0 -> 262 bytes ...xadecimal_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2465 bytes .../__pycache__/high_scores.cpython-38.pyc | Bin 0 -> 439 bytes ...gh_scores_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3588 bytes .../house/__pycache__/house.cpython-38.pyc | Bin 0 -> 264 bytes .../house_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5956 bytes .../__pycache__/isbn_verifier.cpython-38.pyc | Bin 0 -> 264 bytes ..._verifier_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4663 bytes .../__pycache__/isogram.cpython-38.pyc | Bin 0 -> 256 bytes .../isogram_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3643 bytes .../killer_sudoku_helper.cpython-38.pyc | Bin 0 -> 299 bytes ...ku_helper_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3130 bytes .../kindergarten_garden.cpython-38.pyc | Bin 0 -> 458 bytes ...en_garden_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5641 bytes .../__pycache__/knapsack.cpython-38.pyc | Bin 1256 -> 1256 bytes .../largest_series_product.cpython-38.pyc | Bin 0 -> 297 bytes ...s_product_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5428 bytes practice/leap/__pycache__/leap.cpython-38.pyc | Bin 0 -> 247 bytes .../leap_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2608 bytes .../ledger/__pycache__/ledger.cpython-38.pyc | Bin 4532 -> 4532 bytes .../__pycache__/linked_list.cpython-38.pyc | Bin 0 -> 689 bytes ...nked_list_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 8432 bytes .../__pycache__/list_ops.cpython-38.pyc | Bin 0 -> 1012 bytes .../list_ops_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 7645 bytes practice/luhn/__pycache__/luhn.cpython-38.pyc | Bin 0 -> 526 bytes .../luhn_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5861 bytes .../__pycache__/markdown.cpython-38.pyc | Bin 0 -> 1658 bytes .../markdown_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5297 bytes .../matching_brackets.cpython-38.pyc | Bin 0 -> 281 bytes ..._brackets_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4592 bytes .../matrix/__pycache__/matrix.cpython-38.pyc | Bin 0 -> 657 bytes .../matrix_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2595 bytes .../meetup/__pycache__/meetup.cpython-38.pyc | Bin 2782 -> 2782 bytes .../__pycache__/minesweeper.cpython-38.pyc | Bin 0 -> 265 bytes ...nesweeper_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3751 bytes .../__pycache__/nth_prime.cpython-38.pyc | Bin 0 -> 255 bytes ...nth_prime_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2183 bytes .../__pycache__/ocr_numbers.cpython-38.pyc | Bin 0 -> 265 bytes ...r_numbers_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5043 bytes .../octal/__pycache__/octal.cpython-38.pyc | Bin 0 -> 253 bytes .../octal_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2907 bytes .../palindrome_products.cpython-38.pyc | Bin 1400 -> 1400 bytes .../__pycache__/pangram.cpython-38.pyc | Bin 0 -> 258 bytes .../pangram_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3119 bytes .../pascals_triangle.cpython-38.pyc | Bin 0 -> 271 bytes ..._triangle_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2907 bytes .../perfect_numbers.cpython-38.pyc | Bin 0 -> 435 bytes ...t_numbers_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4476 bytes .../__pycache__/phone_number.cpython-38.pyc | Bin 0 -> 443 bytes ...ne_number_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 6555 bytes .../__pycache__/pig_latin.cpython-38.pyc | Bin 0 -> 257 bytes ...pig_latin_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5037 bytes .../point_mutations.cpython-38.pyc | Bin 0 -> 298 bytes ...mutations_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2570 bytes .../poker/__pycache__/poker.cpython-38.pyc | Bin 0 -> 251 bytes .../poker_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 10654 bytes practice/pov/__pycache__/pov.cpython-38.pyc | Bin 4750 -> 4750 bytes .../__pycache__/prime_factors.cpython-38.pyc | Bin 0 -> 264 bytes ...e_factors_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2865 bytes .../protein_translation.cpython-38.pyc | Bin 0 -> 278 bytes ...anslation_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 6541 bytes .../__pycache__/proverb.cpython-38.pyc | Bin 0 -> 248 bytes .../proverb_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2911 bytes .../pythagorean_triplet.cpython-38.pyc | Bin 0 -> 287 bytes ...n_triplet_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2413 bytes .../__pycache__/queen_attack.cpython-38.pyc | Bin 0 -> 573 bytes ...en_attack_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4198 bytes .../rail_fence_cipher.cpython-38.pyc | Bin 0 -> 402 bytes ...ce_cipher_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2084 bytes .../__pycache__/raindrops.cpython-38.pyc | Bin 0 -> 257 bytes ...raindrops_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4720 bytes .../rational_numbers.cpython-38.pyc | Bin 0 -> 1598 bytes ...l_numbers_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 11908 bytes .../react/__pycache__/react.cpython-38.pyc | Bin 2916 -> 2916 bytes .../__pycache__/rectangles.cpython-38.pyc | Bin 0 -> 263 bytes ...ectangles_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3744 bytes .../resistor_color_duo.cpython-38.pyc | Bin 0 -> 273 bytes ...color_duo_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1931 bytes .../resistor_color_expert.cpython-38.pyc | Bin 0 -> 288 bytes ...or_expert_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3068 bytes .../resistor_color_trio.cpython-38.pyc | Bin 0 -> 275 bytes ...olor_trio_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2779 bytes .../__pycache__/resistor_color.cpython-38.pyc | Bin 0 -> 372 bytes ...tor_color_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1313 bytes .../__pycache__/rest_api.cpython-38.pyc | Bin 6804 -> 6804 bytes .../__pycache__/reverse_string.cpython-38.pyc | Bin 0 -> 265 bytes ...se_string_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1820 bytes .../rna_transcription.cpython-38.pyc | Bin 0 -> 276 bytes ...scription_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1802 bytes .../__pycache__/robot_name.cpython-38.pyc | Bin 0 -> 419 bytes ...obot_name_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1602 bytes .../robot_simulator.cpython-38.pyc | Bin 984 -> 984 bytes .../__pycache__/roman_numerals.cpython-38.pyc | Bin 0 -> 265 bytes ..._numerals_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4906 bytes .../rotational_cipher.cpython-38.pyc | Bin 0 -> 275 bytes ...al_cipher_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2696 bytes .../run_length_encoding.cpython-38.pyc | Bin 0 -> 379 bytes ..._encoding_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3611 bytes .../__pycache__/saddle_points.cpython-38.pyc | Bin 0 -> 271 bytes ...le_points_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4115 bytes .../__pycache__/satellite.cpython-38.pyc | Bin 1223 -> 1223 bytes practice/say/__pycache__/say.cpython-38.pyc | Bin 0 -> 241 bytes .../say_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4462 bytes .../scale_generator.cpython-38.pyc | Bin 2306 -> 2306 bytes .../__pycache__/scrabble_score.cpython-38.pyc | Bin 0 -> 263 bytes ...ble_score_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2541 bytes .../secret_handshake.cpython-38.pyc | Bin 0 -> 276 bytes ...handshake_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2811 bytes .../series/__pycache__/series.cpython-38.pyc | Bin 0 -> 258 bytes .../series_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3252 bytes .../__pycache__/sgf_parsing.cpython-38.pyc | Bin 3157 -> 3157 bytes .../sieve/__pycache__/sieve.cpython-38.pyc | Bin 0 -> 247 bytes .../sieve_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2941 bytes .../__pycache__/simple_cipher.cpython-38.pyc | Bin 0 -> 671 bytes ...le_cipher_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3403 bytes .../simple_linked_list.cpython-38.pyc | Bin 0 -> 1654 bytes ...nked_list_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5898 bytes .../__pycache__/space_age.cpython-38.pyc | Bin 0 -> 432 bytes ...space_age_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 2058 bytes .../__pycache__/spiral_matrix.cpython-38.pyc | Bin 1368 -> 1368 bytes .../__pycache__/square_root.cpython-38.pyc | Bin 0 -> 265 bytes ...uare_root_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1499 bytes .../strain/__pycache__/strain.cpython-38.pyc | Bin 0 -> 365 bytes .../strain_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3136 bytes .../__pycache__/sublist.cpython-38.pyc | Bin 0 -> 802 bytes .../sublist_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5197 bytes .../sum_of_multiples.cpython-38.pyc | Bin 0 -> 290 bytes ...multiples_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4272 bytes .../__pycache__/tournament.cpython-38.pyc | Bin 0 -> 255 bytes ...ournament_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5775 bytes .../__pycache__/transpose.cpython-38.pyc | Bin 0 -> 258 bytes ...transpose_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 3945 bytes .../__pycache__/tree_building.cpython-38.pyc | Bin 2365 -> 2365 bytes .../__pycache__/triangle.cpython-38.pyc | Bin 0 -> 468 bytes .../triangle_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 5165 bytes .../__pycache__/trinary.cpython-38.pyc | Bin 0 -> 253 bytes .../trinary_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1730 bytes .../__pycache__/twelve_days.cpython-38.pyc | Bin 0 -> 276 bytes ...elve_days_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 6766 bytes .../__pycache__/two_bucket.cpython-38.pyc | Bin 2316 -> 2316 bytes .../__pycache__/two_fer.cpython-38.pyc | Bin 0 -> 251 bytes .../two_fer_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 1069 bytes .../variable_length_quantity.cpython-38.pyc | Bin 0 -> 395 bytes ..._quantity_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 6531 bytes .../__pycache__/word_count.cpython-38.pyc | Bin 0 -> 265 bytes ...ord_count_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 4877 bytes .../__pycache__/word_search.cpython-38.pyc | Bin 3567 -> 3567 bytes .../wordy/__pycache__/wordy.cpython-38.pyc | Bin 0 -> 250 bytes .../wordy_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 6207 bytes .../yacht/__pycache__/yacht.cpython-38.pyc | Bin 0 -> 442 bytes .../yacht_test.cpython-38-pytest-6.2.4.pyc | Bin 0 -> 6679 bytes .../__pycache__/zebra_puzzle.cpython-38.pyc | Bin 4341 -> 4341 bytes .../zipper/__pycache__/zipper.cpython-38.pyc | Bin 1770 -> 1770 bytes 238 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 practice/accumulate/__pycache__/accumulate.cpython-38.pyc create mode 100644 practice/accumulate/__pycache__/accumulate_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/acronym/__pycache__/acronym.cpython-38.pyc create mode 100644 practice/acronym/__pycache__/acronym_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/all-your-base/__pycache__/all_your_base.cpython-38.pyc create mode 100644 practice/all-your-base/__pycache__/all_your_base_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/allergies/__pycache__/allergies.cpython-38.pyc create mode 100644 practice/allergies/__pycache__/allergies_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/anagram/__pycache__/anagram.cpython-38.pyc create mode 100644 practice/anagram/__pycache__/anagram_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/armstrong-numbers/__pycache__/armstrong_numbers.cpython-38.pyc create mode 100644 practice/armstrong-numbers/__pycache__/armstrong_numbers_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/atbash-cipher/__pycache__/atbash_cipher.cpython-38.pyc create mode 100644 practice/atbash-cipher/__pycache__/atbash_cipher_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/beer-song/__pycache__/beer_song.cpython-38.pyc create mode 100644 practice/beer-song/__pycache__/beer_song_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/binary-search/__pycache__/binary_search.cpython-38.pyc create mode 100644 practice/binary-search/__pycache__/binary_search_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/binary/__pycache__/binary.cpython-38.pyc create mode 100644 practice/binary/__pycache__/binary_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/bob/__pycache__/bob.cpython-38.pyc create mode 100644 practice/bob/__pycache__/bob_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/bottle-song/__pycache__/bottle_song.cpython-38.pyc create mode 100644 practice/bottle-song/__pycache__/bottle_song_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/change/__pycache__/change.cpython-38.pyc create mode 100644 practice/change/__pycache__/change_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/clock/__pycache__/clock.cpython-38.pyc create mode 100644 practice/clock/__pycache__/clock_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/collatz-conjecture/__pycache__/collatz_conjecture.cpython-38.pyc create mode 100644 practice/collatz-conjecture/__pycache__/collatz_conjecture_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/complex-numbers/__pycache__/complex_numbers.cpython-38.pyc create mode 100644 practice/complex-numbers/__pycache__/complex_numbers_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/connect/__pycache__/connect.cpython-38.pyc create mode 100644 practice/connect/__pycache__/connect_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/crypto-square/__pycache__/crypto_square.cpython-38.pyc create mode 100644 practice/crypto-square/__pycache__/crypto_square_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/darts/__pycache__/darts.cpython-38.pyc create mode 100644 practice/darts/__pycache__/darts_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/diamond/__pycache__/diamond.cpython-38.pyc create mode 100644 practice/diamond/__pycache__/diamond_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/difference-of-squares/__pycache__/difference_of_squares.cpython-38.pyc create mode 100644 practice/difference-of-squares/__pycache__/difference_of_squares_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/diffie-hellman/__pycache__/diffie_hellman.cpython-38.pyc create mode 100644 practice/diffie-hellman/__pycache__/diffie_hellman_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/dnd-character/__pycache__/dnd_character.cpython-38.pyc create mode 100644 practice/dnd-character/__pycache__/dnd_character_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/dominoes/__pycache__/dominoes.cpython-38.pyc create mode 100644 practice/dominoes/__pycache__/dominoes_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/dot-dsl/__pycache__/dot_dsl.cpython-38.pyc create mode 100644 practice/dot-dsl/__pycache__/dot_dsl_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/eliuds-eggs/__pycache__/eliuds_eggs.cpython-38.pyc create mode 100644 practice/eliuds-eggs/__pycache__/eliuds_eggs_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/error-handling/__pycache__/error_handling.cpython-38.pyc create mode 100644 practice/error-handling/__pycache__/error_handling_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/error-handling/__pycache__/test_utils.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/etl/__pycache__/etl.cpython-38.pyc create mode 100644 practice/etl/__pycache__/etl_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/flatten-array/__pycache__/flatten_array.cpython-38.pyc create mode 100644 practice/flatten-array/__pycache__/flatten_array_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/gigasecond/__pycache__/gigasecond.cpython-38.pyc create mode 100644 practice/gigasecond/__pycache__/gigasecond_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/grade-school/__pycache__/grade_school.cpython-38.pyc create mode 100644 practice/grade-school/__pycache__/grade_school_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/grains/__pycache__/grains.cpython-38.pyc create mode 100644 practice/grains/__pycache__/grains_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/grep/__pycache__/grep.cpython-38.pyc create mode 100644 practice/grep/__pycache__/grep_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/hamming/__pycache__/hamming.cpython-38.pyc create mode 100644 practice/hamming/__pycache__/hamming_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/hello-world/__pycache__/hello_world.cpython-38.pyc create mode 100644 practice/hello-world/__pycache__/hello_world_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/hexadecimal/__pycache__/hexadecimal.cpython-38.pyc create mode 100644 practice/hexadecimal/__pycache__/hexadecimal_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/high-scores/__pycache__/high_scores.cpython-38.pyc create mode 100644 practice/high-scores/__pycache__/high_scores_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/house/__pycache__/house.cpython-38.pyc create mode 100644 practice/house/__pycache__/house_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/isbn-verifier/__pycache__/isbn_verifier.cpython-38.pyc create mode 100644 practice/isbn-verifier/__pycache__/isbn_verifier_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/isogram/__pycache__/isogram.cpython-38.pyc create mode 100644 practice/isogram/__pycache__/isogram_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/killer-sudoku-helper/__pycache__/killer_sudoku_helper.cpython-38.pyc create mode 100644 practice/killer-sudoku-helper/__pycache__/killer_sudoku_helper_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/kindergarten-garden/__pycache__/kindergarten_garden.cpython-38.pyc create mode 100644 practice/kindergarten-garden/__pycache__/kindergarten_garden_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/largest-series-product/__pycache__/largest_series_product.cpython-38.pyc create mode 100644 practice/largest-series-product/__pycache__/largest_series_product_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/leap/__pycache__/leap.cpython-38.pyc create mode 100644 practice/leap/__pycache__/leap_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/linked-list/__pycache__/linked_list.cpython-38.pyc create mode 100644 practice/linked-list/__pycache__/linked_list_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/list-ops/__pycache__/list_ops.cpython-38.pyc create mode 100644 practice/list-ops/__pycache__/list_ops_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/luhn/__pycache__/luhn.cpython-38.pyc create mode 100644 practice/luhn/__pycache__/luhn_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/markdown/__pycache__/markdown.cpython-38.pyc create mode 100644 practice/markdown/__pycache__/markdown_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/matching-brackets/__pycache__/matching_brackets.cpython-38.pyc create mode 100644 practice/matching-brackets/__pycache__/matching_brackets_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/matrix/__pycache__/matrix.cpython-38.pyc create mode 100644 practice/matrix/__pycache__/matrix_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/minesweeper/__pycache__/minesweeper.cpython-38.pyc create mode 100644 practice/minesweeper/__pycache__/minesweeper_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/nth-prime/__pycache__/nth_prime.cpython-38.pyc create mode 100644 practice/nth-prime/__pycache__/nth_prime_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/ocr-numbers/__pycache__/ocr_numbers.cpython-38.pyc create mode 100644 practice/ocr-numbers/__pycache__/ocr_numbers_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/octal/__pycache__/octal.cpython-38.pyc create mode 100644 practice/octal/__pycache__/octal_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/pangram/__pycache__/pangram.cpython-38.pyc create mode 100644 practice/pangram/__pycache__/pangram_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/pascals-triangle/__pycache__/pascals_triangle.cpython-38.pyc create mode 100644 practice/pascals-triangle/__pycache__/pascals_triangle_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/perfect-numbers/__pycache__/perfect_numbers.cpython-38.pyc create mode 100644 practice/perfect-numbers/__pycache__/perfect_numbers_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/phone-number/__pycache__/phone_number.cpython-38.pyc create mode 100644 practice/phone-number/__pycache__/phone_number_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/pig-latin/__pycache__/pig_latin.cpython-38.pyc create mode 100644 practice/pig-latin/__pycache__/pig_latin_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/point-mutations/__pycache__/point_mutations.cpython-38.pyc create mode 100644 practice/point-mutations/__pycache__/point_mutations_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/poker/__pycache__/poker.cpython-38.pyc create mode 100644 practice/poker/__pycache__/poker_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/prime-factors/__pycache__/prime_factors.cpython-38.pyc create mode 100644 practice/prime-factors/__pycache__/prime_factors_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/protein-translation/__pycache__/protein_translation.cpython-38.pyc create mode 100644 practice/protein-translation/__pycache__/protein_translation_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/proverb/__pycache__/proverb.cpython-38.pyc create mode 100644 practice/proverb/__pycache__/proverb_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/pythagorean-triplet/__pycache__/pythagorean_triplet.cpython-38.pyc create mode 100644 practice/pythagorean-triplet/__pycache__/pythagorean_triplet_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/queen-attack/__pycache__/queen_attack.cpython-38.pyc create mode 100644 practice/queen-attack/__pycache__/queen_attack_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/rail-fence-cipher/__pycache__/rail_fence_cipher.cpython-38.pyc create mode 100644 practice/rail-fence-cipher/__pycache__/rail_fence_cipher_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/raindrops/__pycache__/raindrops.cpython-38.pyc create mode 100644 practice/raindrops/__pycache__/raindrops_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/rational-numbers/__pycache__/rational_numbers.cpython-38.pyc create mode 100644 practice/rational-numbers/__pycache__/rational_numbers_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/rectangles/__pycache__/rectangles.cpython-38.pyc create mode 100644 practice/rectangles/__pycache__/rectangles_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/resistor-color-duo/__pycache__/resistor_color_duo.cpython-38.pyc create mode 100644 practice/resistor-color-duo/__pycache__/resistor_color_duo_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/resistor-color-expert/__pycache__/resistor_color_expert.cpython-38.pyc create mode 100644 practice/resistor-color-expert/__pycache__/resistor_color_expert_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/resistor-color-trio/__pycache__/resistor_color_trio.cpython-38.pyc create mode 100644 practice/resistor-color-trio/__pycache__/resistor_color_trio_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/resistor-color/__pycache__/resistor_color.cpython-38.pyc create mode 100644 practice/resistor-color/__pycache__/resistor_color_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/reverse-string/__pycache__/reverse_string.cpython-38.pyc create mode 100644 practice/reverse-string/__pycache__/reverse_string_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/rna-transcription/__pycache__/rna_transcription.cpython-38.pyc create mode 100644 practice/rna-transcription/__pycache__/rna_transcription_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/robot-name/__pycache__/robot_name.cpython-38.pyc create mode 100644 practice/robot-name/__pycache__/robot_name_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/roman-numerals/__pycache__/roman_numerals.cpython-38.pyc create mode 100644 practice/roman-numerals/__pycache__/roman_numerals_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/rotational-cipher/__pycache__/rotational_cipher.cpython-38.pyc create mode 100644 practice/rotational-cipher/__pycache__/rotational_cipher_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/run-length-encoding/__pycache__/run_length_encoding.cpython-38.pyc create mode 100644 practice/run-length-encoding/__pycache__/run_length_encoding_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/saddle-points/__pycache__/saddle_points.cpython-38.pyc create mode 100644 practice/saddle-points/__pycache__/saddle_points_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/say/__pycache__/say.cpython-38.pyc create mode 100644 practice/say/__pycache__/say_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/scrabble-score/__pycache__/scrabble_score.cpython-38.pyc create mode 100644 practice/scrabble-score/__pycache__/scrabble_score_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/secret-handshake/__pycache__/secret_handshake.cpython-38.pyc create mode 100644 practice/secret-handshake/__pycache__/secret_handshake_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/series/__pycache__/series.cpython-38.pyc create mode 100644 practice/series/__pycache__/series_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/sieve/__pycache__/sieve.cpython-38.pyc create mode 100644 practice/sieve/__pycache__/sieve_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/simple-cipher/__pycache__/simple_cipher.cpython-38.pyc create mode 100644 practice/simple-cipher/__pycache__/simple_cipher_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/simple-linked-list/__pycache__/simple_linked_list.cpython-38.pyc create mode 100644 practice/simple-linked-list/__pycache__/simple_linked_list_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/space-age/__pycache__/space_age.cpython-38.pyc create mode 100644 practice/space-age/__pycache__/space_age_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/square-root/__pycache__/square_root.cpython-38.pyc create mode 100644 practice/square-root/__pycache__/square_root_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/strain/__pycache__/strain.cpython-38.pyc create mode 100644 practice/strain/__pycache__/strain_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/sublist/__pycache__/sublist.cpython-38.pyc create mode 100644 practice/sublist/__pycache__/sublist_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/sum-of-multiples/__pycache__/sum_of_multiples.cpython-38.pyc create mode 100644 practice/sum-of-multiples/__pycache__/sum_of_multiples_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/tournament/__pycache__/tournament.cpython-38.pyc create mode 100644 practice/tournament/__pycache__/tournament_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/transpose/__pycache__/transpose.cpython-38.pyc create mode 100644 practice/transpose/__pycache__/transpose_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/triangle/__pycache__/triangle.cpython-38.pyc create mode 100644 practice/triangle/__pycache__/triangle_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/trinary/__pycache__/trinary.cpython-38.pyc create mode 100644 practice/trinary/__pycache__/trinary_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/twelve-days/__pycache__/twelve_days.cpython-38.pyc create mode 100644 practice/twelve-days/__pycache__/twelve_days_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/two-fer/__pycache__/two_fer.cpython-38.pyc create mode 100644 practice/two-fer/__pycache__/two_fer_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/variable-length-quantity/__pycache__/variable_length_quantity.cpython-38.pyc create mode 100644 practice/variable-length-quantity/__pycache__/variable_length_quantity_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/word-count/__pycache__/word_count.cpython-38.pyc create mode 100644 practice/word-count/__pycache__/word_count_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/wordy/__pycache__/wordy.cpython-38.pyc create mode 100644 practice/wordy/__pycache__/wordy_test.cpython-38-pytest-6.2.4.pyc create mode 100644 practice/yacht/__pycache__/yacht.cpython-38.pyc create mode 100644 practice/yacht/__pycache__/yacht_test.cpython-38-pytest-6.2.4.pyc diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 48d1bde..e1ba390 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -30,10 +30,11 @@ jobs: if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Test with pytest run: | - pytest --continue-on-collection-errors + git fetch --no-tags --prune --depth=1 origin +refs/heads/*:refs/remotes/origin/* + git diff origin/main HEAD --name-only -- practice | xargs dirname | sort | uniq | xargs pytest - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics \ No newline at end of file diff --git a/practice/accumulate/__pycache__/accumulate.cpython-38.pyc b/practice/accumulate/__pycache__/accumulate.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2413c696cc86de25a2eb2eee890a07eb9e6aebd8 GIT binary patch literal 277 zcmYjLu?~VT5N*LhiLCwu3-tqxG3v}>SlDWNCd5LU782e46DNO()lYD9@(MBVlK1Xi z-d%fn97hE4ELN8_*0*n_2(Z~9-4aC-Ngt#jGB}YW6h8aIdx|_D-3&z%oT1r^BtaJm ztrUo+)OE4Y1}yj1`uSeIdzL$}j`8%&rLIeM1b1z;VQ>R0N>?#sIqnN!T!^-66>p|C kHTNzW6aTR5ucOxAk|jeOe;izhSvTKQTDA(de(QrIKXEEMpa1{> literal 0 HcmV?d00001 diff --git a/practice/accumulate/__pycache__/accumulate_test.cpython-38-pytest-6.2.4.pyc b/practice/accumulate/__pycache__/accumulate_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c81d2eabd70d87a63e5b67a9ce00abb14df9a3cf GIT binary patch literal 2813 zcmb7GOK;mo5Z+xrL_I90PGHx0)k)C;0tyMXdo&CONst~4rf3`#;Dw;LYn2HpF-t0r z1@~kF?axTilmF6Qd(yeL0(CmGj49cY8kE4!4wsyrnQy*X^5xP}jllJXw|bbGg#3v& z(-*9fJs8;m2u?VSiAVL!5`z&+64SG2@x=CQc*5dJQt>L3JR{uT<{9CpuwOZ+hF29e zZoOvmM`6FOe*jxfUyznPhMkGqqN)~z;V>D-K`ugEo4y#_?7_%(KnNX!$2jHejCe-j z$1}ObZMe61g*!0Yyvl1ZS9qN_V0QQt_-m@>qtefT$nucFmX{amHjKwGvfCg|$a|90 z9>j{iPFat9V3;rLWVkb?80HH!b+jp`cko5#j`6`cIj4%glNRV&{Qa!+G7~cE1nq9X z2mPq?L}ah?LD~`TgbbrB>7+6U^C%RZ2{u!zpF{lZ^jJANagcO*u#0~Gf#U(K?O zulgcM^J6~~Z-$~DiuO)C2!lA=1*I@QXR01#5L5p2%`k|i4x1`76Y=3BZi!yh%{e<( z;6a8)gpMA5K7bkgaAOU98VU5iO=iJ^gx<&>XvoQj2o zfYvpj#okSLy~K2dIv1ncivzg=05S!$ELmCbv1j~B3xIQaf^4)tfve{eTEbg#rLH@k zCGrl4E4w3M7r-m;qQ!j_i(tiS6|ip3%O)Ho=^%^pXwaXMqlT(G*@3-ItfqY0g9aun5YC`ssD*-_Vts3il?wnV|2_!&C!6vakj_%LRr8Kyb3X%kY z)~W1)GNB=okK54U(AT^Qa}B?DJp(ApiiClnOT38$J(;As>?#^4+Eq04Sg;9WOR->E zvF;{}Esu4#Jr;r(p;*mXv{GyJssPkob2s^%+owQFbx9_n!f{t*UZ- zzaJ#R_f^gJ;XEG3s5g8czvaafxeR+t-I^PyJw)*hicJ){p(jGaa7n!kx$jWNa7@Q? zDvl}f2|7)JsPFr&hH|>YD9)pPrW$+cv0vV;`{^+z+AjVr@IaE{NJhC()pAKyF4t;c ztZ@mXa)$jV$D5*B&H<>81NcKh=W+`pFwy_K(BZeJKw%dNTf|RRh{GDj%7#P#1v^Jx A2LJ#7 literal 0 HcmV?d00001 diff --git a/practice/acronym/__pycache__/acronym.cpython-38.pyc b/practice/acronym/__pycache__/acronym.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45f1a1900b2f08442997704cb0c4d7b8ffab8f1e GIT binary patch literal 255 zcmYjLyAFad6ukva43X8@m4*HQF(x{*7#6nD)`TdO^x}ivKXLMxSp5VyCvPQ0Pjb$= zxA)a73;^d~ZwHYt89j|~vEzn_6A}f~!_o&yKfM^M z(7O6p-U-i8TjU}xgfex>w;B(vX}G>>D@&|+V})!>skxBW)Lk`t+;n{)io)u1DO&AT eqWdE->#nBJ;J;f#t5M(+qrh4l4IFc z+C%HG{3onr^$zWp1wnE>U_5R(tKUtrDa-yc9~YG z2f9MnXbp6g)@cK@N7v~F=ry`Yw?NnE3%U)uPImyuZdN}Dq=;wHh$$V|u+L*Lwjthv zs&+wqw0^a;P3=zr;5Wz6g#}8z`~6EHH5rEt^_adB@&=trl1zD^{L*Fb?7_+EL@6fq z4?m|Ql!nxUowsF36 zN#j7LL~{}E6mY&=z*%ry4dbh`-WBRZWWrFF#5_sEd{=ZS#YB?Gch5TA%jIylbGRf7 zaX=E4M|Q6O_|*d7|G2IO`Jg4DBxDhbHIXwEF-^jE;sd7)DHicS#54`GkiOgM_J_-{ zzy3PZ_>SwTNHxBjau`cU!1fDdnhRtK(SK&{YV3X-h%n^w1odMynljW5g^=iiq?4)X z9SU?#B!wZOQFn$;#YCYNi5TkNGKo%NiY|C?!zk)9e{;|uwJ(O}qwZ;|e{#`X9*b}D zSilN19Ex~?pRPj4z?UWl4G@;?+K%n~;}f>m70%8^I0J4 zMwm>L=3$W=Mr;~kE_3<9h;1Xj-2b^{9syYbVWukM;n`m4>E{_MA3v;T-ZvM9WNN&KUSVuge;8p))0V+oVJ9gF(h*eKe9`jTb+# zFd6Eys$H51P)#89Q9DRRrgmM@QfF)4TfPTnfs0utq$xGuC^$J&adlBP*Kp>Q6}i*7 z;-V;~S5w<5%_WtRYPZa)YZF*S4>TI+3g%h*R~&u)Z|66n1De6&Y-C-iC3U@!>;wHE BKg|FD literal 0 HcmV?d00001 diff --git a/practice/all-your-base/__pycache__/all_your_base_test.cpython-38-pytest-6.2.4.pyc b/practice/all-your-base/__pycache__/all_your_base_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fbf4a5853d8b4551983344eedc07abece88f56ef GIT binary patch literal 5549 zcmcgw$#UC95XD9kqNv4^ti_82%d0Glw39fi>~dneQmG`YikHM@4k$=7rs04~2B2fA zoRfXeFT|CT?)e&AbK)mNhbY|*Vj&4ga+MRX&@)4z2mSi>^fd5rVxlO)@ked`$&XW# z^cN12hX#XNaJqLuFp0^IRFkPy8mc16QbVidv@3VG`;*sd zSNIDqwr#gjX$x!Hv$uK0a-5AWn7V;v;K;<0i6hek)64CyzlvyloWOLGKEM6v;M##s6!V+?C` zH6j|Ypn{l0F@)+6EQ1ITQ()sPOm#4pEX@%t7jNBrPT2Tu6m8qB4R)4^f|vB0YF+rNuer^qw$1=$eF`o zoEZ)Qlt6*p^zB?Z6i~X}(E(u&Ab#?=mnHJSShZ&%0)){kqu5086$-*fOKAg!A`{vy zadquFC2hOu@j4f)pb>I(HkG5n`$wSQbBUW1&QgY6;bBgTb zjkeb{9ozNJCv03vwK2Xo+rGp0)?KhLHjV-()52-8u%9k>xM*P>4Bcp?nwYqG#72A$ z`Ott)=tGET_(3=f)c^u-I*jBf)1h(hI%tH}rIS2(f3|@bE(rq@`|xl+A>R?t==i|1 zae~bB> zopeungaB1fdnrH5y^=kuz3?9#Kg%;^35wV#&*Z9!oPyD_w_rEh9nZju$!K(3=yBub z4dcDtf?o;>wR@KBa@Q|@Z#f-)SBRFNs!d?p_BF5D=KdIevCZ3_-D>)pCF<_3B5=#~ zRW8JE0TXN_^wgkEvt6vnuEG5-PASPHc~PE`cha|$5yfo(eFKvP&4yV!YYJ_CKn}TeU0VoIF$`=DEHVPW@#ol78F6QqyIM>VFJ)IA6vKp!au_DGo+`Dh+kCo=1>hISTSn{r^UP75T+HDLz3#oFBYf z1n9R~-ct&2*R%vTL-Y9&(PyYv*A{)UjN(%ipP`7W z1M1FR$Yd59*QL+PJT8b!_;w&~*LMt#;RpMoVV9i-A=RsyC>~ z%7XtQY!Aw`=r6wz{#OKLibG5IdZ%f7IH*m)?iPPaqk7NRAHbE{P$!ZFX^?z#oqKw|4sb;)7{+eHy+6YNx?UE9ZCW9ln;RsE+FH$&N-{)q_3U^{>-Zn}V)(4}= zj2!6nKmz7`tJ8(+SeY4Z5V$lSlW=aev0*&Ek5#rx!dq=0i!2ZIvowEE1{1 zxCU*aalUa}h-8%%Lf}$c@}b+&k>R**|4-H6a7im*2KhTbDfF^oYr0rG`641kkzt|6 zJZmspPe{B-Eg1j0Pz#opus;F4)E0f1tbo{d*Z@Ii8uai6t9Yq}a04NhnOdh9p9=A` zj?=1Rda%LZ8pm^!<=PY*gFjRYt^6$bN~R`iIb@u1k9&-k)oD=qzs4NDtiZ2u{vDKj E0?TcP=l}o! literal 0 HcmV?d00001 diff --git a/practice/allergies/__pycache__/allergies_test.cpython-38-pytest-6.2.4.pyc b/practice/allergies/__pycache__/allergies_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9efead4eac260a7ede6429f8ce61562f8f5d9c22 GIT binary patch literal 11202 zcmcIqTW{RP6()CA5_OklTk%D*WJ|VnU&~j;u^lB?TPx$v}TWpZYuYsX(9hAEX7E_MDj|HERw@)q}2}bM`Vb{JuGt zxjyOd?=kT8=fcS5gA<1F5Bea#a`<5d|Gm2?zyPyi6ilu&)ojKvjcTsYVTxZm3!V5& zrqWfl3YKZyHy{hSuMNn#o!i}CWeYuEJ~n1Ln%I)DHe)urZ&xZVE0tZZNMFgX41QR_ zfA3qdQf*kFZ7|dpdSWMcf%kIq3(f0 zFpRnv4#N@DeQ*>;Q1`M6JftEkVyeRzQS96W?~QJ;q& z!F#Bu;m5FsdIsKyN2q7v1Nad296W|~)bsEJK0>_!AHyf87vU#RK%IwA;isrCz-RC| z>Lsw@3)C0EfeqA`pa_8aGPr2Y%|?G{#&y^8i)gU$MejTC{|^3p=w8N`#tXwY!Tid6 zk%7#2CSXAF8j-Zt+J60|*~ocrW%H%M zy79Mv-OE40qF&xv+;E^?E9dXJ-p~B{PTu{6%Zg>Mn%`kg(JvR>e5(}~3kTk3`-ppS zXRmRF-q`efyH@vY>4COW+w-@|wNgJm&LcdA`TWA|pamknm|j_(q9AFToOLIsR6;*gzhYNL*5oNUN{Igo2SB zL6KmEv37q7Vz~utTtYvmKp*!0EA=!`H+jZMK|R-w8r>%7$7oQWkvP1W#38X29Y#En z5~BofnvF1uMrDiRS&7hc3Zd9WH2AP#1d!%elWoxv`bk@WPfJ9W6huOs?vKb)deC9O zX8_&amRqT8mc6Y6yNG-nmW++_If;uZ-=?>q!KX|Q_i7ja`6G%{V_EdW9> zzYfrZ4i}ypEWciL{CZ+qILA#D6pT#?4<$O66&6ZuK!Z$^&;4mgPe=!++FdRf*8^Pd zN%-d#_(LPUT2Tl0GCq{0;Es-*0c1rAcwb_XHgYC3qr-{jxtvo%_(xYX(W!d???Z`F z+KMK=6%9rr>{F~X)gC3Gx3q=)6N$=2g^vZ4V`dUM9K;%+xK%IKD~|6b*hZ`Y!jiE8 z|A|CKwFXFUL4!|o0-w%kYLyW2F>8Pj*ryVM1FZqVnmWjL4uCwm1_&Rm2>Q<@9%*ZU zq;_;zJqlPQcvdu%MdLNZ=SZZ|GFd`18k|Jjr}&sy1B9q!A{Qhwsx?4beH|7&@;i6x zxUEo2FpfxIqF8Lqmn0sl1eQ`=gGO@&AI(T41pKIah!?1~v2L(gKdVT-Vag5$cu`FU z^WX82X_%v1VXaP#?(J122C7w8$N&eO*hX~tya@Ot_|Z(e4QSgTG9MST6J zDH-9pd`6th@k&78T}|HAr7YTc0sF;|A57VVSQ4;;nngw6zI@g zP~aP?v?Ns`73Xu+I&*D*%c+UmD8aEq3-=!-+^X}r->Bi!4Ke60Ss{s@HIa-%pW=r?ufb_hI97N!;!lXdqb$Vl z-}jjxo{uRA?jONK*wKjc|Q>RkKdq+g`uSBr5g}=sTy0+cuvF&Odb}RJ0&$ekm6~8cY zW=5CH*dU2RBWGGQL-@-r8Z>#rw2WcH%Jg;o7e<@k$N&HU literal 0 HcmV?d00001 diff --git a/practice/alphametics/__pycache__/alphametics.cpython-38.pyc b/practice/alphametics/__pycache__/alphametics.cpython-38.pyc index 8ea15a0ce13e9957de0a596e60d8f4413fb3afdd..aff30f51152c0dc56b5c8dbc8e6d00c492b4e1b3 100644 GIT binary patch delta 19 ZcmX>jbVi6Pl$V!_0SFF%+Q{X^2>>$D1p5F0 delta 19 ZcmX>jbVi6Pl$V!_0SMR+Z{%{~1OP351P}lK diff --git a/practice/alphametics/__pycache__/alphametics_test.cpython-38-pytest-6.2.4.pyc b/practice/alphametics/__pycache__/alphametics_test.cpython-38-pytest-6.2.4.pyc index 4e0cebc209187d5efd5e886f49e6a5971bc71966..5253a60b11c9f71162289bd972262a2f5d6919a5 100644 GIT binary patch delta 19 ZcmZ3XwnB|7l$V!_0SFF%+Q=m*3;-}I1i=6R delta 19 ZcmZ3XwnB|7l$V!_0SGo9-pC~<3;-_R1cCqn diff --git a/practice/anagram/__pycache__/anagram.cpython-38.pyc b/practice/anagram/__pycache__/anagram.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec8d890664892c2e596f49304dca5b7350abb808 GIT binary patch literal 269 zcmYjLy$ZrG5Ke0aDR%W8x->5!BIw*jx^$74OC@N3$W_$cH*xZnvib;aPF`Aze(?Pq zcb8liMIj^H^I4IQKV9(;pNb_BrzF6@yRn>szhUu6y50bnJ>rUp0SPdg@zMv2eH)x> z12&YR0u7>7XxwNg?>Wy<8RR0_38*X0*9s49-EehLMrtg1V}xwAR9sYIZ$vqG(p+s+ l=nA&q2D(?VyUH_T%4yvD@4G&^`|M<1)^Iwih1+@&*#{lNICKC2 literal 0 HcmV?d00001 diff --git a/practice/anagram/__pycache__/anagram_test.cpython-38-pytest-6.2.4.pyc b/practice/anagram/__pycache__/anagram_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a2ab8537b348e447e38c0624aba187cb8b71d85 GIT binary patch literal 5214 zcmb_gNpIUm6ecN(qGUOC9A|Ny#o6N)u+t(rv`tbcj$s4{l!NUHQD8dKj438u)EUZ- zj06Re{DHJR_RylI0J)_3AN~P6rl`$0BsIhNzPHSqSsNWKDe(Er zIuPi;XxS;O1?9}O-R;3t0v!Q^M6C zdX$}Hr$8TJQ|vV8F*eQ4fF5UO**VZh*?BetdV*bG7eOCmm)K>{lk5sWx*Cn#OHizG z8P-&oZ|9SPMjn2P@RL_TAOM`at-nxh<%RZK`9ld+mVd6k(w=L7YRDxFX;h+oox5%j zE8n1gC;_QM8(h5AqH!uE7vW;i^uwi}n$#7@+}m8FOYW{mr5g2_ z!)VB5Wb$VXUJE&UtB5lE>A!pPYtUED)43{Tf$z*e;PPo0H0Jp;E^3bS<{N_6LZ`;( z+ji<`0^@~qjaD><4dMsHqhYPi!fRWcLBGLG|pExHQ;F?b<2r)K-D}t|QTZ0hjG^%W!-brWhGj za4?@n20rGy7;JKf!JrFfk25`lWz|r(X3_}T7H)S)AwmayxLQ)Tu4Urh*)Ih@m7~y0+uqs%J;YP>B@8nCab;;G()|E(NoJsZ zy#t2VbVH}%_K=WGC#)0Ztgmyy{gBkCOpL(0ndtU4TsG*L*yiB5{eh_s*f>{- zbeGD|(mlwy*+9P;8j^nCcdeFSbr|4uYSbl=vuaOe)BCcA*T6VkO5+`f)BTK^4IBCG zOR`#D=%!O_R0flP^Vt}mA}TIY5!M4Cd1MN3WeKT2Dn1st1cZWS({p`?AGE_!#`Y$T zFS#$B(Aj_(!9eWhUx?|OX*PDo^sqq=3A~ts$ymi&2eX)lYk^rO8|cm9K${Z6J_Q$3 z^%GcvZViB5*czo9_v0<@r2^4yaIFbn7;83oy?|Tfy z>EKbCfq`^zfWZ%ega!>E6Iez_8&HX66EPnXLECjc@tROCHYKEf*Cnv_!x)nAXHaIk zEfV-Oj$4g(;K#VXOX1%CSO5!9@k;r2?nu^J*dPt zxO_MO>{bfcenvSUr1Uao8TVm+J{4GzX5(7jH!i|AxR36fShJnnBxyjpbg=&Et?QL8 z1-aO^KYkJg2YBIUvn7rqOS@CG_Ssa`0uQR85SG0jS8D@Y(L?2G*c-FSx(svaY+hgs z)2s0ZBPIuXu}2SAR+m7pI4+bp*&cSIkG23(p@4h{DGXZefB{ePNwrrb{?KIv%0Vaz zZf7vEufejxe$fWo*{1{W{_SUaThqjCXh*NDE*&yQYP(jQO4qUF2%*J-Luip#OU{21e zrbq+13+Iv(At&(X1m6@+$fIKSRs@^Ug`kg2ho{X<9(~F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEw3~;DYd8wqyS9(3eXQNPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitBLEXpk|Day}F*M*n@)C3cWhl=PGRNfNKERIK)0NGaz m@&N;55y(w`nh+Y{5D1GID0hp)CO1E&G$+*#r0X*fGXMbo%0Hz5 literal 0 HcmV?d00001 diff --git a/practice/armstrong-numbers/__pycache__/armstrong_numbers_test.cpython-38-pytest-6.2.4.pyc b/practice/armstrong-numbers/__pycache__/armstrong_numbers_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8766e462a3c7e0214c5074ac828f5fce22032a8 GIT binary patch literal 2659 zcmbW3PjAyO6u_ONf84Ge`^Th7NFXE*JFJyJzy+bfCI$laLU+l<%4%;5G)b}DjZNIP z?|`_0I1Rp$ublQ3IPqSxRvBB;HL3C($My63z2}$b?Pjx1;QHw<@1B+k`GcMGRf5hs z+-eg9C*0~2*NR&^aBO0cpyZaVWTfI&V8rfM1L{(XY!UA8(kbC3QTb3iaojq$-jmhx zIcOrCRm&{;ig_|nT1Md>3x~mukUbnsUp92s;Z|J`B3|6Jxy9{M;yTF!Zi$z91^Q)P zQ7KWuaWXmUCd|JXgV4fT`~Qom6W0nRK_Qlh_mMkIyq-|hA` zjHGibV6Ya5s))EK7q>-@~E>lc{xvjyGxrYzz zSjdQ>Yr`wvZNlOT4ILdgXb_+6KHVvx5{;O8(^{^CN2HBdSraK6G>)S}Mi zUp&4#W9ZJ%?`uC)rm;RaV&mQl8yw;8ZzbmrKMGq?97pCyiYj-_5979|UW+Kuu*-H+P& literal 0 HcmV?d00001 diff --git a/practice/atbash-cipher/__pycache__/atbash_cipher.cpython-38.pyc b/practice/atbash-cipher/__pycache__/atbash_cipher.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..375aecf48a5854ab28755ab0b0a8e0b5b12414e9 GIT binary patch literal 383 zcmah^!D<3A5S?sSE5hDN|6va`KOjZ0(4M@A7cUYsQw-{ENK&x({z*^%(q8))JvplyGDcPl` z+%acBn8Q)cj!>#*=y%3dt3-zsM7V|T7rlrSqBf(o!Mbw#iQ+cZUekesb#bqKFg7_$ z+N8CKn+NOshQgVxIyUm}O`j@TBZ+?$eNdst_RfmsDDFz6O>*U3>P6(1 z{E!ws`7iO>Q~yE^ZD&ZyrCdt|NP#n4?vD6j|F3y zs=p|W(x32e%G-t(mnpM3WpSAW=xw~8Jv11c!zn+2Vac-%jjB}pq!@+tzl|a-(K3un zbcyQV%d|qP;Fst!t%28Rovwhd&{etyzDn2W2KZ&VNw>h)=rg(vzD{@OF8CF?NB6<6 z(gXS&{2F}$m|wdIu~xwVd9#}&{hG|^uTM()&-n$3(N=QS0z-b`Vr9nreTiY zUkY#I!k9^;&>lGVTD)vY$wc_mUElIV0fO$;xG0&|xmN^k%;&4tdsrY_Rp!>#7;7vwmIx<5*+w6_wRlG3MT$_Mn1;JvD6*VG{ z=`|lM&PP`Zc&z!JD8oYpykaS_gq>K1VZ4%kOu*OS-W1Z|LP!D6hp6!G>M|~PK{y}N zOrE&k#r>RuTAU|XoC{S{dPlCvr9k@gacyLCC3}|5vN%t>%JS%w#SEV z(DlaAY9RdKm~f8@pM<XMlgT5co`3F8tBXHN5zM{p6IKk=G{#QNghJ zd8<2cx`O!O>Dg;Cy`E2JGfOAv`)v^Ciwu!h3yDku@=;j77X8p6t|T276wiZZwAOVy zT}gz~7bDUYoZWcIYtY?M}?{}S$WY9MjqR&RD`pACa5B z-;;z7m>?lcdsZ|il*86Ex^i&SA!5`UyTqe@-y`;2C%7e!#|AEeSsoFqJ@gg``5;T% z@;qS8Opk>j?AsAC$BLw=MYXJIe?=z?`9BKJmx9W`9=IdevLM!{HT+%^OMpUPA%3z% zZY3s)R8#|;Mjrag?d;KmM_>lwl_7>IebUmL8;zKLo zZ5dj&$6U!fAqy-SvR)5VCPN-D@q8Y;?JPUXlq`T?o1GxPneF*fSK29vA#xYJrN$?-(mXPHfzQwwGT@?qUWtVi%JCt^yp1X4yYIy@JrXk}m%lm;AvIDt3-5cAH;fW(+oY0z2b6oD!>muIh!EUl~S|Gg;ZF#d^E%dZ0uZ*Uo!m^I^1S_Qsf| zX4*O9XHc-Aa6=YX9&W`;(|c72PO@r=Snmfe6n+^Rbt~zWC*5&ccd`49^=p{Eu%P8e dz!?$=r=(rgzfY6*ri65`KIzJaqHAmAe*k-}QG);g literal 0 HcmV?d00001 diff --git a/practice/bank-account/__pycache__/bank_account.cpython-38.pyc b/practice/bank-account/__pycache__/bank_account.cpython-38.pyc index 05baa07368c9c88f5174a2b9113d664142d7effa..fa964752d21accc264664ed56e93705ef958d489 100644 GIT binary patch delta 19 ZcmaFH`;3<>l$V!_0SF8}Z{)he1^_dY1u6gl delta 19 ZcmaFH`;3<>l$V!_0SF3CY~;Gb1^_fX1wQ}) diff --git a/practice/beer-song/__pycache__/beer_song.cpython-38.pyc b/practice/beer-song/__pycache__/beer_song.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a87fffb037d0580394b8160c6773e7d1fff895ea GIT binary patch literal 275 zcmYjLy9&ZU5WI_th@hokV3R`c2Sfy|ZN$b#&bw8DkA&S5wD(V}{H3&3)^=9zMnnf@ zc6J!powr&|#kejy>n_i`EdQwSGGbDj#m8Rz=%N?O*JdhB9-2cJv3wz3!ZDL#7O%Ld zr#F>GWkSJXDC1zafYPkwH8OJoBxCz4>+?fqCP3Se7Y0s%E~C9E(7KR0Fe?D;QGVD| tZYi!`oXa|b%L2$@s=m=!XFp9fO2$Lh-^q_lI4c{2eeRDt7)tTURBvx1HzNQ5 literal 0 HcmV?d00001 diff --git a/practice/beer-song/__pycache__/beer_song_test.cpython-38-pytest-6.2.4.pyc b/practice/beer-song/__pycache__/beer_song_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de9fa48d11d6d5dc67a8fd8b97ba34d15db58d3b GIT binary patch literal 15430 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 M=7JSLF5BPrKhWvNp8x;= literal 0 HcmV?d00001 diff --git a/practice/binary-search-tree/__pycache__/binary_search_tree.cpython-38.pyc b/practice/binary-search-tree/__pycache__/binary_search_tree.cpython-38.pyc index 94778a2b2c516db345e3572514339a5eda666f81..efadf415abc32f9dc430ba357962b8a02c4a8c38 100644 GIT binary patch delta 19 ZcmZ21zF3?ql$V!_0SL@KZRDEC4FD?{1b+Yk delta 19 ZcmZ21zF3?ql$V!_0SKP#+{iVP8vrg41oQv^ diff --git a/practice/binary-search/__pycache__/binary_search.cpython-38.pyc b/practice/binary-search/__pycache__/binary_search.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..edf716524fe251aceb563ddbc264c5eb19c25aa3 GIT binary patch literal 274 zcmWIL<>g`k0y|;ZG<6{T7{oyaOhAqU5Et_Ri4=wu#ukPsh7_h?22JKSU*uO zDKRBKFH_$owK%&Zzd%2=BDE+vvp843peQl9Br`cxKPfXWv8YlPVjPqg58>$*RNi7q r%gjpw8C(o@8ec#KP3~G>3C>tUKpSQZJ_ORrVJiPTPS|Hk-cYIL6*&( z+|-%!l)l49puoEz`*cW)6lKi&zQ_$eXE%@;ybx!4)2&=zHc{egFRr70qZ3LOXT(n zhnZ#(j7O}RjZhP7RE^N;xIVOLlsrrv?BJ;Yh0t$nnqYwWk~K52#-;^X$l*8(d9bm~ zK>>=`=Ai^-Y;CB(61D|ch81j!a0yniEx~12!?p}pU>(~ET*Vn}gezaUz9Ywvgd^L% z$3g{d17AKpsGr62E}m)w#S8X33k)#2cpjQyzA}jbYRWXC9Nw4o#E}`69HoQ|?*BY; zJV|yPq0vfsog*d@HhcX|{R#d+)ty?)fr0PV?+Nu&Fc{Xwb0OQV>eq+TX$Njw)LVLn z+e%MyGUD-w2RP%}a2(dD!-=Zm4u9r&Bf(vtJNPf9Gv@nl(BlJNaN&u*@Pi7@LD9UJ zd9ZU5LG7H%P9dYf(#Sr*&J-D#EffiK*>hENFYWrVANPabwTorqGb&3%NvMnS{1} zg?cnmxk`fA%(p(x`A)!T&Mnb(ec$!FNdQ+++Z4b;&Ob}pg&5?Kfi-0y%V%0wP4Vqy zLc)inUDpzJ-CD%4>1s|{M9$FR{1JB2!WnGJLX?4^(yc%dty`K}S6xncIMNYJ`Xcgr zM4pJYNPI%#M-so0piCK!(e3U5uF^OX&Kv!+#gDN+0N|eRyFu?=)U0S-G1D@(nECg? zqH7>s-zi!Y#F|zOJ7?4CmLZ3%GBZ|{1S`3Y&r4z@uacnjE6K(3EfQ~&c!va8B(Ia0 zOK3YKhLY(K35jRIpCEc4bxqgD?M32fzN%w%DBn`z(sZ6;C#Lht`1SfPMxZO*u@q?^ zVs-g}eayaNyX-0bIulqgjJ@ok5g5dbuF!Z7tKc;T#Tmy^lHgbZfI<{ynD1EaTV8LH`%9({xBHF>-8qOTW3w21abbt$wt_np4rJS=kFAHWDV(L5}3PM}MzW|zYJ^jZ-gj@Pja?UC;W uG-y^@`fF?QeWeRsXg|g~cOCp*qgkd+KeRuO5#6ROh+f(@TV=Lc&i(^fd*G)4 literal 0 HcmV?d00001 diff --git a/practice/binary/__pycache__/binary.cpython-38.pyc b/practice/binary/__pycache__/binary.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..137085525b0176e76a296ff5220b6bf55fc4bca1 GIT binary patch literal 263 zcmWIL<>g`kg2ho{X<9(~F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%o0OTCSX3EbTvC*omtF)?2PS@5>4z4l78UC!>Ln$nK7CxCYNL;r|LtDfKqw|mA7~b5{rsc<00Z8Ba1<9Wne5~ g29kc75E@|@gauM^i^C>2KczG$)efZVGY~TX03fk7$p8QV literal 0 HcmV?d00001 diff --git a/practice/binary/__pycache__/binary_test.cpython-38-pytest-6.2.4.pyc b/practice/binary/__pycache__/binary_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..081c15dce76c6268a6eef812da76256c8ed20089 GIT binary patch literal 3312 zcmcguL37(g6yB9&OP1}lP2037g$ig$!@;&fVW7i6hSGstGDAtB| zLJ`GY?Dr!l>c`@dz1~ZWJ-Ic+CMWJY15YZ!Choq9mSe|re)j^OAN3gx!;VNtv3tX) zn|7zR`@?`c(u1+U{ueJ8iYHP6n3sOM4K<|lUtz6yuxkJCa>}uXp7hR9Ow$a z!mon1`87Tdy2`Kf8=!0aCSL$u=eK~<+ll>M$|5q`r7-N#ga5d$kKt1{K)fPvNK851 zhqXP>U`+`4>l+Dm$7p+~B~?!;A>${%4ZT3(Tn=esC=v7yiNpZ<_uJ+(Fi=ge(eZdc z@|)ia^&;*Mnv*3An*-?q* zEuGA%QS33>bTzj%#$jX`1?+}wZs`PN6^hAwxglHAC|9q7!4b+&icscVW`fz)Tz9M^ zxC_F}k@?y6i@?mg%m!0;TdgsMSuxJLc{+3CJY1Lpx?IR--e)$X1|W6EmA68D{}j|5 zLtiaUVSP}HHSaVV*plnEAWrYR745woT6D;T>KAvX@P1l^_pIA&h^s(vD@EOE`P&c? z#R0LL!+qj5jox)vzq~hvf3*mIv3qVFxZ`o{(`@)7{AAhifc`o62aO>|?^8;CC7+X@ z$W!thTlLs@MR!X3G^Us>u?EXKWv(p}t{-PmW20T}dT?CC64U732kTMpBntdkNH2Kg zWJZT(Qp?ipQ#^-MVxOEtY0i}<^pY6yXdse`*zJk|9$tw7=bt*%Bu*mH;dsgt7N+Ga zYh|(PXM-Q5*jVhwtRDrVkHAi0vLm!c=i%Ku6TwBUm&l{rT7?)ohsTK#?na3ra+-+y zX?UHQO?Dq(aHC)yPl?qB;F#y5c{;+*>ETjoiTVR^E-k51AuUVAv?zubAULFV z^Qg`S=QQ{{nOMWfkFk)HJL$bO&3TEn3003_W2R{25}-{C1oVHiO02Il=Dxv%tL8u$ PWsA%cORMSg4U7Hg`kg2ho{X$nC4F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%o{?G^pOl|e1X2MeewpZp7N-^!>nG|ZC8p%(W$L@67H5~_ z7wD%}q!uM-7U$|06eT8?WG1KT12uxMUP0w8j-u4!g8aPVRFFZ%Ah$6v7BK@!KTQaY ZumQpXDY?aAlbfGXnv-e=()AgL832=$F4zD7 literal 0 HcmV?d00001 diff --git a/practice/bob/__pycache__/bob_test.cpython-38-pytest-6.2.4.pyc b/practice/bob/__pycache__/bob_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..81f4425838d33298ece2540989fbdb8570d11a67 GIT binary patch literal 5496 zcmbVQTT|Oc6qalQwt;X7mym>HodgIeh>)byX{Rj^E`ezSGr<{JcP8puyT&S#)>+9V zX8M-?kaqf%|I;VE_Njk?hqmWP*hm3KsRTMlEA4u}@0_z|FE0lNiwazSR3>WmK}Gos z3(+eFg;luS4G>IWs-;xaKxgc1Mo|?zSLsp1FTIss_>!^u?0hA!D$f*_Ww~D!mgBuY z72akmMW*g6^F4pVFDbk8s-KtKZ3xHZ2EK`287Qp6?fwaZ2R&9YOl6s0l}a}J)k==_ zuwE$lus)Ut-OCEB2)d8;vjNa~Hps4kF0dgs47$ih*eK|Jc9o5R9$@2a0`wr8WY<7n zVN>in=plB4-2^?%rr9mfBkVRKphsDW-2r`--DUSckFgmx3woT*vHPGW*gSgxdXjy@ z7C>KPi%bJO#g^DZ(AU{Adj$Fhdkj{1;`coj)iQTILj{iQ3!l;C>u|ecAbwGPQ#_Ta zZ-M;p88kFB&hDOED+_y(wiZ3HKs@JTxB0qBEs0ir zr}{aUTeWwJEI{$}^QD(i!Cj(Sl``R&OB>uh@EQR*YPD+B zsB&6Of;=9D+zFRk5v0?XA??&m2e7bhLa1=bOA-@PcZ-Jc>`^O-gPM>AuQe^JRf+(N z$MeOy=^$!5-keMJz9D9fv>+NFkIi}Hm^vP$Msg^~v5*kULXzFJ{WUFt$4p@6rW-`F zA%)YjUEOqa$q$ z2FAzE0@)!)jyMj+0oj?ux4_{888IBVZBKP#fBpiscpAUZARU+frG!)& zM!tKNm~|Mekf~fP5?Jxbf4^orfPH5G6XInkh!;ob7WX`WwH$#p8HSVR1MA18SJ%&beG)-76GPUmMLL{|mA&WBNO^mc%)ENAdiUP_2d@acdb+c@Pu5;+ zlJ&jk5Wc0-@-o~>z7L0E$D;uy7=ngLEgj}8T%3T>Ka0hzn)&A>J{*(Urz1MLLts2^ z22?jTcgs8b<%CF{4IC6l0}kSE42#;ZkP?n=Q+f1N#8X<#Q;AK}F}c0zFh~{z%}Z8b z{-=&hC~3z3uC9xR^d;zO= z&$G}0!r6*geJW=4XsuM3edTm?%XGL#o^n_wP@HyKADD6m!ay-C?ihS0f@>^>%MB}} zf^D92YW}fg=^eki(|J43A(RRNgz=J z8c5hx(^~<837enL7d%M$VXix8^Fz!RxNVF3;__DM80CtCq>wNI!nL2kEr@=O^2dnH z<7>b7YoMe9@j&^e%?HVE%`(q3{tu zu{(d$&+EEFZLaHnQP*w3nlR*ae?W)ssTF>a{m_-f(;9gN1)hk=5fq~+@EAhk36va1 zfxCG*iQ*cHDHPXH;7(cIL@|wmpujDkyo2H{3fwEn85FZ9=1`m;&IC_*LL;*v@XW-0 z1R}5Iv%z0aN4KAP&)$UJvw1ATx1jxezn`x*O~^8i>kq6pT6(86r8ipW1}!`jgSD0> z`LTq7;}<%w{J!?PA~X)XMx~!`IwmacUC+-}MKw4`^YdjWuTwZZL)@1U^7CJYrvDlb Pfr12=S4Ne5W}xRkdrl0G literal 0 HcmV?d00001 diff --git a/practice/book-store/__pycache__/book_store.cpython-38.pyc b/practice/book-store/__pycache__/book_store.cpython-38.pyc index 7522829d1fb9622a8ac802abe2df5f655d226bf9..a6dc6ebc2c59f979eb4b7b566735d8dde9020870 100644 GIT binary patch delta 19 Zcmew>_*alCl$V!_0SH1qZRGmQ0RT8!1)Kl? delta 19 Zcmew>_*alCl$V!_0SNx=*~s;o0{}Zb1`YrK diff --git a/practice/bottle-song/__pycache__/bottle_song.cpython-38.pyc b/practice/bottle-song/__pycache__/bottle_song.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8356c1b2ac3c9153da5a0484f8015ba11a0ed583 GIT binary patch literal 279 zcmYjLy9xp^5KPWH5#cQT0-Gx|KOiD_wT;-=NK95aeB{VR(B40>@|Ui)vbM8w*9ST< zv$Mm%?leuCf^eR-mmQi{Uj9*|Wk|#piH)ta(MisPtxZIh+$4o2BKd+nha)1!Bvw#S zjxQpMssw}fp^AfEgXiW;9=Vz#cvQN#(AMn=l>@GWD-|5Tn*z70^xA~NfLgc^Hqb@4 wTYdbTeXl%Lbq}Tpz{m0Rk@R))<4k(aXz=ht442ftsJ}|ZoaR#bXECYp&6>ZRj9^t zFAKkBT1BcJDF@k0m`Q0Is9}z?w&Sxl_Tv|U&LRAyO(yNN2vsS0tF$uFoGp!JX%6~X znx{J4bF@H~cEyG=>OSA&_0$m21D`Dlkf$zKQXyA35O!#dzW)SUV;r9e>ehL7# zz#7eTwV%~D%5RFVQn2?$ax{lX12A<*fm~m>m zZgpJ$)}w~gfro5nxFLFjkxLD`-F7JRd>DLgbfn7TW{+{U=eou*GdyQbG0~2Bi3fS1 zhFRg;+`k}U$rgff|Jm!2?Q+~BJktboJE6|bhOF%~dZF-TcrpH=_5y~Anr$B2bl^F) zr%b%^2g4dWW4!H%er?F@w(qoAE!yhm0*IW*7Rr_nteV5~a0>;i<8Z((^B8y9)(Onb zmcWoG11N;3vi+;&g1y;uF|X6Uiv!zl_TaQ;&LEM>Do1Y^KZ+lMe>%8b(Y(xnBG(b{ zG&pWoG91AQbi+-#Mc1C^X9Hd?^0S-7&!X~O(6if2v&RWJ^*A{To}CZ}<|Vq|E!=EN zZlt?dr;gvV9$Ayn`Z$rD{Ummh)bE0yoge4oFfrUC-JxhQ z6WK|Otpx1_atbh=Ook>1?~@^>Kxl;Kx`k<4gyc&L??@~$78@MD8IlH`11VI-dyP~n ztUCT8?p4g`_WTq<$Ma}!3*drqTzaVa_A7RM1g^)D48(PmoF@vOr}8=95%@3Bn?kKx!Tup?bG6CAEOxvKdlK4ZaHc5vgk^JwU+Ka`=f^cmH+PKO z@1_x>m}a;E5bQro=YG{-#%TpRNmCV=!TwRYk=0=4J0zU56d@7p9;F#q4Q2|Bj&qXY z>u3gh&r=PYpM5amX_mhCJk`KC-lgNEm_CXl8A3_XBU8!E(X%Y02gN%Gx@CEGpIKH|w5mW8EY^oHMq1@m=;ZG?{y zK0|nju!Df5VGOW(;TZs|Y6K=WUDXSdR?*kwyMt1wACDZ@cRUf64~OU0w6|>y&yhPb zs!N@LXL5GR;U7R)m_7>g@1GSxIii|}`p9#9?6gY9vecF}rz~niy$R2s*igUX+G6XK Z%a?tf?04K`x@LP-UU{3h-ddio*qr)R^5^idN9jNbvnY_O}&Wh1AOl{r2qf` literal 0 HcmV?d00001 diff --git a/practice/change/__pycache__/change_test.cpython-38-pytest-6.2.4.pyc b/practice/change/__pycache__/change_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6585a82b55fefc21790e92198bfe729cdb74670d GIT binary patch literal 3894 zcmc&%Pjk~o6xZ64EISSf0YVb!)T9BLc8Gy#5A84|Q($`NOs1vKc6{iLqFpNjSyESW zLNfFe?)?g7ddgSQwTF(r0-Y&+Z`W27$qt1cYLDOUO4{f5dw+iW^mul*rNQU--eSKA zvp;ZA{OGXQgkO9g1k)JtwH}dUZBVaiL>uTmgQz=Z&xAWQzcH|S7SX=aSe@xFG^TU& zN%OGYYccYjwr*sgN!wZ{>Dj&)FxuyPJWi++dO_^qt>UK!i%s~&2?#F#x>sX_)m~`5 zx>DcMnZZn08?3=B7){n>Ef^bYhP7d|*ep8(W0TFXc^F&lEL(tahMi;QVQjMtY!Sv; zc9AW?c!n*r6&UB(B{27L+Pb%62QGgERyqXC7=LiyfZsj%#T^jOwcoUapmk`Ot21&4 zwz}kH4IPBgw=&$687R>2*)oWuS~_FLF&D{$pNFF+31= z?Tu}lg@M<-&*P^_7UY>JsP_ ziC76VFTE&@iM_z}xlEH0jCr^@wtcm1d-d_@#;<{*3C5dXJVes1-U>ukmWk`-pPda($J7Loqe5=@wlPtS{h-9YSJr&zp69t4lFdtrac!y$&9J18 z9Uw5cLV5wy)cdo3T7;LR7kpc|oF*s}x@-GG9$$vNF_x)Dbh1b~e;<5M#y??K1#?as zAAzPaW*`l$J7iJGqpp!-gX+5kJ0`+f!W&Z=md{WAz=UU^q4T|IKa)`HAWU{3 zao@($s|CpS%aGqiVFfx8zJ%U^Nipy)9G5D|3uJ4I$QE~HGaytJPep!JA*Zh3ob6LP zibQBTJJgFQc!P#f;tg#7Lr^ph?9B?wH*BsTLSrT(0!qU34^r9H@-SA951F<|Oal9Y z=?Q#EVhcjWKy+X~<@Dw#k3TLTx>iOsdCLhLNELZfZoxuD<|X;{{4XSt&6Y||qWz$K zs(q_H)PBTg>WTiGJTVSQA{!jMg6k(H)0Z`NT()rL=f`~p#G|mjT6OH;deT8C9mO&o zJQF&ux66Z$>;{h-X zkb|$wp8pTp|G)73G!Bozo=6}i2+Xgt0~Mhvh+ZG+3*0i;_5vIIPa(3@W{eIanuMbx z*yYpRcU|TmY(Qd?FG1ry3x~QR&S0Ferxw_h2-yX$;0%v_@g9ozQCvZR=cBlRqKo1d3Vcy1 z2<+Vj);nI0QIkcidj2&FGgCgdK9gG8Ll0WyAWqwx(LT*r%QV_YpKT~QfF#=xd{1}@ z)O~&_ZH%wAV6$|wEm8}QcU+{VDsRagsr3jh-Lv7PN>b7U+f(a~^3)edUov+sZ9%hY GZQ~yb_^J2+ literal 0 HcmV?d00001 diff --git a/practice/circular-buffer/__pycache__/circular_buffer.cpython-38.pyc b/practice/circular-buffer/__pycache__/circular_buffer.cpython-38.pyc index d11106a927e63b61d5eb06c2f45bc687f9ae66a8..d6384f89bdf2875c90a2925b6cf755cc79146ce8 100644 GIT binary patch delta 19 ZcmZ1`zD%4el$V!_0SG33-pDnF8vre`1mpk! delta 19 ZcmZ1`zD%4el$V!_0SHXbZ{(W84FD?E1Y`gJ diff --git a/practice/clock/__pycache__/clock.cpython-38.pyc b/practice/clock/__pycache__/clock.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b03c58e79490798bfda7afbeefa0035a01f05607 GIT binary patch literal 1015 zcmb7Dy>8n;48GHkB|DapX6QS3vDOYj5g-M+c?q&;A(Z0<5n@{oPXgMm&6{-cD{1W` zbjuX-R3&a=6fgynM}0VcA9bheESo5{U&Y7UGp*EbDfTVo;)30sarmlGp?+ll859bG zD>V-dzyHSqt}fW!IR~o>jj9MxWALbo5JQYOM;POXbBqb5oJTmu3Fib)aLPHwjC;?z z_;OX7dm|zSlQj!fm+UU$fa*%^^m4~qy2#npZ5Q3uEp?-HwP_nmvcZR^Px-a8vt+iHhL*LO(OkO8zo!{4cRRL#9Y0j>7iq2XncSq0dNg-qTfPDZs;U2>{(}7BWW0-b-nUelo-CHi6t3(8t?UB9A<&k69NZK5r zaP1AiheH$|SnXrPTdsP9n;WAVL-(Kn@9V$-$T8noBUqCCMRZAVDrZ>5%0As+neWak@BEX9)h^ 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 literal 0 HcmV?d00001 diff --git a/practice/collatz-conjecture/__pycache__/collatz_conjecture_test.cpython-38-pytest-6.2.4.pyc b/practice/collatz-conjecture/__pycache__/collatz_conjecture_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0483573980bea509c08f696215106121a09c3f5b GIT binary patch literal 1924 zcmcIkF>ezw6t?d!$t6t-6k1dvXvKme)MV;bP(?v76#*@vTdeEZtz0g5hwT(n!Blou zMk=QKC9g~wSy{?^KH8?x2B{K`?%B`w^ZVYH_uj_jWP`x?7R_#b4hZ><%IJVSvI3ue z2!az%QxZ`(dtKinlyrlrLd%nCRD}~St#!jFq~tN-J`X+-9*F8recz87oW3Bf$`D>6 zYb|Ok+K56YsE!T~loj~&G6><^MINWz`$QtYd@>4ng;znZ@EQ+cuJSr>z+B@Kya{v2 zC&AT}omtJ(G&XyydA1`G(^FzyXp>NQ`Dox8qg;hgUjy-hd?ki*x(_Z7Jd6#V^4ErV zQK1-kb|ThVDD&uTFHRK#9#9)-k!}r$s)PFTRc8Y(=uX_;jCr2P&O@Q!n7rtS_d+F7 zcRPiO6C)GRNlJ)|$uY*GEq1cS4B&1TeR~}jY)`11Ir`XEu2`OlN${!>388z7XGYyV z$MRxqTn0}=VLBIL z$tD70amHEBdCBV45t!rH{M+(EQ02;lOJw*3oSx6-9mi%Gt8KxuUUyT#-(GTh8v5)A z^m}6%{`X6#Lc!ERE?t>Cfkjy+2lVsQM{1xx_bDZ>$P#%*o|D&j>YLyL-Kp$TL$Qo- z2lbsQr*qIIMoP<7)z8~cv$VfZoTm9Z!3Q)>?HNGM2?%!I*6@*3Ee@#dVW0Y?~67FL!awLaj JnuK1n@(TbE=<)yn literal 0 HcmV?d00001 diff --git a/practice/complex-numbers/__pycache__/complex_numbers.cpython-38.pyc b/practice/complex-numbers/__pycache__/complex_numbers.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20062dc82045f1d06528434ee7fe5121cce9ec15 GIT binary patch literal 1451 zcmb`H&2HN;41i@jKh9se3Ye9a7?xH=ATruhjiEV9r^$} z<&}KhBkZ=*NM%lAcL-3lG(=Jot&g&3T@D6aLGp8Ue06UL@ryg#;!x+5nm#1;L7+hE zj@l19yEw!{vOPQ^=BOB)rST$?%V{3Zr3yI7QrM@Bh%;)sK?=o%SXt8* zqF*X6eF{OX7q&_7=(y zvM`WduukD^Vsg-BAO7_xi`&8l2$L`a;BTT?3G4fDCHF}g5}0WYAz}Z~CKQjFG*`Cb zofXYA`z+N%`l`*NEdY4~&?LWPj_OPfcnVQ?@rVePiI;s<-$(Q`v&*aG#?4-K8P0X`#j$AI@Y=MSV5Y0}5%Uifc{vSq)fmJ*a(Fd{m0>Lv_Szb9+4e8mc@Rb8Who>r@{z WKOI}f{%?W8eYZ~SJ+Jhen)nO4I1OX~ literal 0 HcmV?d00001 diff --git a/practice/complex-numbers/__pycache__/complex_numbers_test.cpython-38-pytest-6.2.4.pyc b/practice/complex-numbers/__pycache__/complex_numbers_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3ac0af656c6dc1d16775f8d04a5a216f51c36af2 GIT binary patch literal 11156 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 literal 0 HcmV?d00001 diff --git a/practice/connect/__pycache__/connect_test.cpython-38-pytest-6.2.4.pyc b/practice/connect/__pycache__/connect_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..983a94a3d73b48a4b17fdb91d2fc1196c963ab7f GIT binary patch literal 3789 zcmc&%OK;pZ5T>**c^`Q=iQ686Zd;(mqUkQuB1jHx;nrz$sspqMUbeq7j!&c_WkSAPe--7WL zUkwU~z!vR} zj)f-~-SZTUMP^SAMpDM*EZegGt+yQO@T<%Z5dLAMhI1{DwOk;3JF#|T1I&;uBsley zfcul=wi*9``Y;KAhl-eb^zOmkbS@u47u5tpECzy2d~Q}y#NnKBHsOjg0VEchM&5G{tC@QJ zrwGc5BQ{|*F%fUg3)I|jTU4Ee+h zDGR)bh_O%z;hhr@;$D7`gYb;XE(J()zUFWlmf?lC1C%)dJaG-LfP+hg%nBd}2FO^9 z1)HPCDe6n1R1i<7$DVmUkMW$Ggk0S(K=ED<#j|L-1PIf4=N;%AzKG5XV#N>|Hgicd*7GkUU^X`-}3PCJa2!WZoOpsRi;b*IU zI7_!M^+o(bgfq<o? zrh$Yj61@N)F{?2}2QI`ftGr-EetXbM97k literal 0 HcmV?d00001 diff --git a/practice/crypto-square/__pycache__/crypto_square.cpython-38.pyc b/practice/crypto-square/__pycache__/crypto_square.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c01d22a3d30df9a56cdb1ebdf99281674031325 GIT binary patch literal 273 zcmWIL<>g`kg2ho{X=*_FF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIs~{&aGcUd*wW6d5qzFv>^3V@0PAw|dPt;3FOv%s7)OSfO z&MwI>&`+&MElSQT&ebm{N=z=vOitBLE~+dj$=59|EKMwe@!}yoy@JYH+{u{*8L35J q3qa-+JzdDrw literal 0 HcmV?d00001 diff --git a/practice/crypto-square/__pycache__/crypto_square_test.cpython-38-pytest-6.2.4.pyc b/practice/crypto-square/__pycache__/crypto_square_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c3c684272b3bffedd0c44dd031d27d7eb8225e6f GIT binary patch literal 2640 zcmb_e-EJc_6rP#ls*K0eF{tWjewElV%0d5-I(^|0YqJj)*e!OB)hsje$*(z4?2Ks>xvK4tc6Vwj$4P{{A8Jz z;1wpl1DD<8Q7-o99ivAm<~cNo^(GvaCVYXTnApnzF3Xi?`!Rfwi)R|k5w`WKkM)Bk zOMhBz=_}8_86oZCm?sI6xe4Z-D9KTr7{n!7Psh(C9iRVa;VpESnBj!Ly(k64Q*L5R zuu+63T#T!o`_TVcCKG7p6DCluk&@ErVEz?P&6rMLH!`B&qJc?gQjR4eLgqPmK^P&Di9u6i zC}kQE8INOu5X3o2@>`ws=_j{&>9gxid*dZDm6exX_L2VhZccigOP(Hd3Lj%ZQigHS z#yFKUPi(!5u?_N7kFp_DZCi2AiZ`uz%ZfcK?9Hv-w!((|1z`i2vJVYg(K{e~*KaKR zT4k>VG0b^lxX?xSD4XFM?H!!W>}d$9hX(||K(VRfh80^kO-1Xvtqp_A!$VZz=Ykun vguSSISzNs(%6CiQpFz(tgq;$>0_M_$GV=OgR%{&F*sOhv-r040uiN++@j}ps literal 0 HcmV?d00001 diff --git a/practice/custom-set/__pycache__/custom_set.cpython-38.pyc b/practice/custom-set/__pycache__/custom_set.cpython-38.pyc index 4f7b158f5e9459f0e2e54043f3b86d0088116856..657d633b34aa0f24f18b1d400d10e087a0207306 100644 GIT binary patch delta 19 ZcmdldxKEHPl$V!_0SI<{-pI9u0{}5y1w;S< delta 19 ZcmdldxKEHPl$V!_0SH!H*vPeo0{}2i1rY!M diff --git a/practice/darts/__pycache__/darts.cpython-38.pyc b/practice/darts/__pycache__/darts.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..913d6fb78cbc0808eefb03c4145c5e376c089b76 GIT binary patch literal 245 zcmWIL<>g`kg2ho{X;MJ?F^Gc(44TZzAUPNSu^EBb z8HkHnfJ6!dPz|HsN(N1)TZ|RA7%PiF(qQ73g??ypYEiL%qFz#BN`79ZzDsIxc1eDL zeriQ(QF3N+u6{vLVsc4la;knxVo^ykgw!jjyv16aoL`g*GN~ABJ7Wi literal 0 HcmV?d00001 diff --git a/practice/darts/__pycache__/darts_test.cpython-38-pytest-6.2.4.pyc b/practice/darts/__pycache__/darts_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1945012171ebba56e14ef3ff74ababa20c0c2f0 GIT binary patch literal 3083 zcmbVO&2Aev5azD_R)3D;IF6mDP3xdQjkFSaZ)yQ?k()0~E_)%?JG8Q?cBPUO92LDK zFVUV_^yEkADek>}fjt!{P(V*mpe^9e>{<#XuOeY7Xog%4$?qG^kbKr`))#^7Sbu*B9x$v?GjYL zL0yI_)KFKT4h_@}G+_gE6>h*L>KfdHE!1_m1>2|_a2s||H{lNKqTYZ#xQqG*+(U@1 zxO(JCt)2>{eG5@c3)Rs}>@oh;4vO#Ck4#$x?v)LNpKS63PEb4!{=U4toK(?7(x7uY zu6s%eslWVYP@CeAPb z=!+|$w+x^UvVqRo=R}%=Rul3=Jwq;us&SC`mS+n0$)7UuKYSVoL1gQ%HZW; zy8o5|ro9S4B#t&I>>Ct5$)d1qU|tTm9+t*M@2b*WpM$XrbJ_k8PBl%sOb*KiuE}9B z{d&LuMx}8f>4;zM{s-CapTqvKf&J4}{+}DUCirVXl={6j-GEki1&i!7Ft3q^28UH? zV2;bnAkE)aw|7;!NYBHir}dIFFrl;!3Yj5frhz#yFNbs&{y3ccN4L$p)A&&mN1hso zq0ln$`EZ~D9pIUMBJ`OM=E3AefUgka>QtW@)SfIvSl&604>n_m^T-PY=W&hmZ~!B` zt$EzwoSs-|kF4X`a)ZQ85_FBrZ4$Rh&}Av_kk}<;R&b21A0I*3%<=nltx*4pF4F*&xKz6{ZwZ7I%VphaAreTpm7Z#5j8 x?t_e-Q50xu#3i7&VDg}hou~Nav4^inLYM_Tc0NxX^##SMatJ@$VvgM?{SOvU^P>O& literal 0 HcmV?d00001 diff --git a/practice/diamond/__pycache__/diamond.cpython-38.pyc b/practice/diamond/__pycache__/diamond.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b44d6c7254f2ff21187ee441764efc189eda0879 GIT binary patch literal 250 zcmWIL<>g`kg2ho{Y0^OYF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEhn|4B( z&`+&MElSQT&ebm{N=z=vOitBL$xO`6&r5;PdIgoYSc>w?i$R7JgPg~}SOl`rPZL5T aY=N+tfpWJvY;yBcN^?@}K)OByF#`aw|1iG* literal 0 HcmV?d00001 diff --git a/practice/diamond/__pycache__/diamond_test.cpython-38-pytest-6.2.4.pyc b/practice/diamond/__pycache__/diamond_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..585b02945a842f41d19602180b0a88d797e0f47c GIT binary patch literal 3391 zcmb_eTXP#V6khGF?Tzh(G^C*^mpQ`>41S3pQr?)7i%Xyd15LtZUo;y_aks2@&1y}^ zPT{5fAuv4k$M6UA$`d~Uo;Z?kyY{-ZJIJ#~M@Q#7()lDyI$vL}8d&~tcP_0h!}v=z zvc<;60e+%|f*FhihD&s9_AJvNM$dLjWY|-7%h+QEm7e1|#5ggS#q4JWvw8XP+EdG| zGIDA(N`GS{qun6Vj-xBlQLSt-v2lQ(xPyZ0(Oi=eWsEYJV!^-^!6@17KMJZ#l;Uv z)Nk^idED_uui1~iPU3fXlMUxLu4#f3-Rob=50pX~@A8nxUcza|6P#Z8$s_7f;fLLT zqk_Dxs{~Xg1}T&DPA1>IWkW0`<{b>H7)Nrf2{~4d9J`%ba0sb&1V@q_#U+Hq6(tlE zLs3Ibo-CeD7^zHXCkhkK4>38qPnj?V(HPFdL?>HRrYUODg_8ES1c8ShWYu<`GxHc4edNGV51xt&&! z0b~S}qBv2CW(AcN+5uXUv=;O8@sj-TpExo%PtdL+2oE;HFin#A{bR4C4_<+;MdQrz zwU0w;zJ5hzw0ZQgrH(9hT(KIfvvsz?USpf=2HRqh?XWl4Ew;;U<97@79kgv@ z-xm68qVEP`>WHmk3J*p7Aia_+f`+TU8fdgb zRs!7{d5`NnxHzXzCQegrV!}OJ#NJ89A*+wgMW9c|ox0Aqw5b5}Sq=j*+b){k{TU3v zoMmpL2Xh#JS=%h=^8yUOjCBU|MIi|8(D75d+{#;x4|$-qyER;Kf~a$@e26{0n@^jqa=W@P-hNQOw*? z+577M)c>?UOdE4|-=f*I8;*1+4ZR+xR8}eNMQnhRr?O6|dJ_+O;yTVh-cVvw33cbj z+e%Cygj!Rt!q`Hg0797@;@J9E*Y-wDIu`>!z;~dK^@IL3owRmo|5{PGH++)&QMecL ztJqJtT$`9=Wo)Y=STpa%(iwz)q8hR?qFuk`rE`Y1V|-=nv5O`vosWho-&GGn;iwrK KTZUuSOaB2@ceell literal 0 HcmV?d00001 diff --git a/practice/difference-of-squares/__pycache__/difference_of_squares.cpython-38.pyc b/practice/difference-of-squares/__pycache__/difference_of_squares.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d0ea9e4dfd3b7f7e042db0f8ae58afe172e2f02 GIT binary patch literal 516 zcmbtRy-veG48Hs{4M<^wi5KY5-V0O+3Fai(WY-r}No12U}PA8QtsNHX7fNipm+? zP+sh-0yR`+iG+25Q(I2mTbmQQ!E|HG&F^&99J;LMe%czb?}Z z_=wx?#{Aaga4NtrJuk-rX!CduUTwmtJ^)48$G?(o4sgZz~= GPU9b{cwm?S literal 0 HcmV?d00001 diff --git a/practice/difference-of-squares/__pycache__/difference_of_squares_test.cpython-38-pytest-6.2.4.pyc b/practice/difference-of-squares/__pycache__/difference_of_squares_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87799fce230ef8eb600a74686e46a6033d65a2d6 GIT binary patch literal 2315 zcmbuA&2G~`5XX1zBzC@9+NLdqQVCHBMWV4Q5x5{!sYP5+IJCW3LMu1BmJD$cb{(Jy zi9^eKfH;K%Z@`QAhB)OB;KYpG1{Wn!nr`Ho{qXMo^7riQVYyr&P`)}V-j56+zp#-m z&_{OQQP03|!fA^*H1=AcYlM;@<78pvNo-2il%1I^e>IKo9>IJFcCeBV54H`S} zr~@z}rgSt;xpqn%Jt1&1Jj-*?&T@mB;B!3B3*Zf2nut?ms;pL_cW=YddRlfs_o1?wo=E#{qQ!>??5|D)eUh5u56|9`8ekL~Co`;PUN=oSadt?4}ZPdi6rO?i$sOpVD z7B(9E1S3r}7?bgTPfQt_BQfiXFft2feKt%E+xeS!KGE@*E2BiQ?d23`?J|1W_SC4u z;F3Amt*^;EIEkS+Qqbju^unoP+t*W|Ta!Wmn>jUS`pZiUw82AU#G^7jX#M7_ptF5@ ziJ|6yuVyEJu8vgHwl`9!)}=JP#Mi%|s)1T2`6Y=0Jjx@*U5}ahFt4RE#P;nJ`2C6C zV-~nVOngJ)wOO$1n^(lXN`$=m{gIBx-k7AeZQo6SKbS>t+ip}#k;z!w4FqFRfw7>& zdo8S&7{e;jr4G?<^{DjG}x@&=l9G`G;;HIy=#k0qvTTtwl)FsZ3u{KezQ za@6x%q2E?fX{US4hOIT$Jw`EV$?fNN+BGTONSzEEkyv(7EfvWr=Vp;Fv$YMa)Nu9*^-2g_n&<7Ky1XI6N4YqPOm@;C-|fTKlUjK|uZsDmFwM@YNATOWaSGl5we_`fSm@Sj zP{x*}g_{?ss=C+><$5UR?$BL2w68@A>n$9Z-7}4lIH9OR#)C2bBM-ULi^@XeiB3Lu z$#C+l82LHf)a^Hw)y%}#PfRJ{e=z0o&pAwJ|2I|aK_j#mBO1mFQpwcFoXDNgV*kIr T(Db%$%)WxV{zJHxMrrg74p>+! literal 0 HcmV?d00001 diff --git a/practice/diffie-hellman/__pycache__/diffie_hellman_test.cpython-38-pytest-6.2.4.pyc b/practice/diffie-hellman/__pycache__/diffie_hellman_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e25368fa779c9a91ac40806083d47fe94cfe813 GIT binary patch literal 2886 zcmb_e-EZ7P5Z|?ZcfQLdZ9*xcfG{c_HKcbf5>kai6x1LPLP4~tK$eQ-^KLF~{Bhm2 zo7~AK9@1BYc&?DBcMXWkaK^J4^?YW^x`Pg^}6Jt;CYAxXCDI^ z8&KpL2(CBe8H_UHA@R&=G0$Q(R)=d?mwc%^CMcBlWTHcIyb|U@_ zkK-grx4Fzi3RCKUNI2u3%_-R&_g$)8|rNgt6vjK}o1&nd}iNe}7RD9Js8 znWbS7lkAb~MoITbY9Uso@d!}Rb4*tI)u7}@@)`Mo+#)}b`xYaxq577)cvORRjv6Qy zP%NTYM)4YoH&DET;$0LUpm0%qf}#szR0l*8{>2emGWyWTirmR|91)~_zUuIU0S|M| zoIG=S+*!Zw1SxaYT&m1O_Q4+wS@aMHfjFyHASD<1wkSCKvm}pqR88wwCOGT~5tm@t zKi_xnz%bbjI=z5pY1G~1axc#YU4Fnt7|EnN5J8wnA@4Gc_|@GC@=4R5H2oY_?hJ^$i)bJze_XP){2tVHqQvbRS8~0-_Wz`;>gN;aFF(K5ZD^Nz8&v>`<@@nS@fta9w zG$A@rsd$$I$q#`VKmeo$&5hhdIvhd`zmLJ$%tG3a9=4pxb2CVtogj)GR&ewNIEZCQ z3I?q@J@8qQ$=r#fJsuC8{V0x|G|N|yXHO;#BrjNY^<=JgXTHmwI1qjAq(#!>!U=aX z$&)9^4ejAFs0HRMya<@IEU=>*OyKx_PPNSz!pZ?-fO$*mhM(3KMzV?14-h!E` zwH8MZLs>FdM_x$OTPFq?ZJf;&l^vb6I17VVu0v(2PSiowmTRe+CbC+ni22q1B8Zh4 z^HiCV=dK|zK)m)0bL8nwUV0u0s+C`#Zkp6q=xFt2Ha&+a+KnNsdGbC~7%+nwV@M5S zQzs7#6Gmy2=Ao(Cf#F}<5^Wf(O+7+;kC4t!4DlZJVlsMSY5No%DB9PqIBi^48y7-= z0D@r=V`e=`s(vA(v_BhHm`Wy5V^MrZU%tTVv+I1-P+(*WOorkk6jx9ny=I8F@!w|e z@AA~|M-M;-K7$Oz1yASl%Vp3vkHf8(#o_-Kd4<4eICS>MoCLhr96{c>6-NY~3f_50 z1(BFxfVY$kXZ?Q~$Q#cAvO0(-+{r*AC=5hC^yQ3VTy7q~Z_fnanUv1~*MybOP#s(z zRHng|6MY7olkZH3jcb!|vkuL19g}id$Iu%$biGz$zYT$DmW|ThgEJj(H4u{KOh^K- zh_wzxfg2DPLAXsFk{WLDF?4v#0bF4q>Q3%8-nm}Zo9j3~8FPHy@s{+EleRqpCh(@U z-f3SgYhS@J?DK;V&cr^)^IxujAUc+9I0f62cXas$?wFmwIJ^97} literal 0 HcmV?d00001 diff --git a/practice/dnd-character/__pycache__/dnd_character.cpython-38.pyc b/practice/dnd-character/__pycache__/dnd_character.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..443ba4888ad10e3557c5ce896c60f95af48cb07f GIT binary patch literal 433 zcmY*UJ5Iwu5S_J+6e7|@h&!af+fgADDM(PcL22BKHlB^J@Q+@EgAlt z$wI0K(ts2Ndq_hHxhCpPSC7V-thFvvoHd%f1uKS+meB)l|`CHck|U2NgH3-2^eO@)l8=dm&J7^TUeq z7*2R|&aF&o5xXg3S<|kN_Zi~z&J;t$os2vFZR_M3H{RFJn5bSSi@_h|_BTpFH@O~0 K+(_j&1AYOxd0Mdm literal 0 HcmV?d00001 diff --git a/practice/dnd-character/__pycache__/dnd_character_test.cpython-38-pytest-6.2.4.pyc b/practice/dnd-character/__pycache__/dnd_character_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e61bae3daaa25e3872b9bf5ad7d90511edeae26a GIT binary patch literal 5090 zcmbuD-E!Mh5P*+lNtPYwxA`F@Euo=J&43*zX`7Z#Cqv2rGmsn78{KFWuac;dC37T` zCKGN*FL{V|;DWpi51?DF{0a;Zc8_ewwKHu;#~$wz z#{Qy%{*Q(SoA`^qK>-XDpIM5~Y9psIg*7xwS5k{%8E8@ce8aTNM!_m5>}v)&&|Wgo zT;qB1EN6{?@&haDZS=;r%W6{CI&ipCk6oUajS##&&*gP8_J347*u-D-I|^6afTe;0 z>Pu$j(hFD`=wRTn4tX$98&H5E>O71<3AG8MFowDS<1m4`2$L{{dIYY)H0lz}z%1%f zn1c^ckHI`#M?DT7!UF0ExB)j&Pr^sAhhFhqw!4iCedKzxS9n>?hjDUBOiKhYd z*mm3~t}A%+-4C@Xv|IR#rcs=-S1eXQIYX+~Dg_k1PClg*sQuQFsfeEs5U9qUfr!i z0H4>pp{FCecVx$Sx0U8`vP=!z+4X!cKDN8rvG+o5NA-}q_L}WQcCbE%*N!MhOgY&Y z#IC%jlWgIk7`Fe#@bEmgc!30kA{F>Rvv*Uh3yQT#{Bw4Sj+1N@I^FR&iR={jQVM#O zvQu=NWTP ziquIq3bAZ2OHzn+cXd^cB6X6DVuAp~Hbmly66@~TJvoZhNj3`F!bwwzb$4w;jv{rE zjbe%@XmH4k3$gC5e<4SaI(dVF#%r%|p@}?ZXY7^on*FR`38S8333I523#ipY1#-Po zM%zvkLnC#koa5xj%6Dpu#7rxjZ=z-7_#Ms?GLo&hioQjae=OOrp&QJwJ$Mxe_}Xo_R2+( z9bUtBVn#7{gZ=m*DS-O|%XBOSlTtklqS%XDu@?qO$qQoF_q}~LsJn@A zOHRis9C&dv#6Lx8(VC{%(x^Hf%<#?r3}05HnB$)u--9plmLi&~m|`dkeczMnTN6F( zX(-3Nhx!-v{$`FbZYsu1p@+GfTkOjX^l22|fj%Ak^npGD`;39UJoe?geWLbPw|C0s zWg_@G-WI31mER}vfCNoa{2_@)BnArKvWTVY)DQZ{N*MUZcHQyoE#HY{Cqew)Ny5}%Tw4Ggc4SRt`Sf~GzGn8amBM2oh6oH9+9jcEEZ6*Kpa zuVxm-IptDf?zTKX_JSxWZ8neX-qF0>Jf>(@(s>L=MTNUZI9A-G(CbR_-M%88ERy5k zTd!8&#dLsgp8DUyq^YO3Jc+r3<}C+b?a-}X#gv$j)A&B2H9Vr~&ty}~R40u80fL7D A6951J literal 0 HcmV?d00001 diff --git a/practice/dominoes/__pycache__/dominoes.cpython-38.pyc b/practice/dominoes/__pycache__/dominoes.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5137c4a54134537940fc1436e5037fe0e2a15e87 GIT binary patch literal 259 zcmWIL<>g`kg67Y1X^KGlF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIBPBmKGcP~2xCo>KO#HIb4=qkDD%MZbOG-@1&&$+zNiEJU z$uH1Ptw=3O&MeN=FDOb(F3C(z)raYZGxQ27Z*e9k=EWyxBxdG;%q#}ElYy}aWV4?p cghp5fVKD>cZgJS;=BJeAq}qXWeFkC%0HTmI>Hq)$ literal 0 HcmV?d00001 diff --git a/practice/dominoes/__pycache__/dominoes_test.cpython-38-pytest-6.2.4.pyc b/practice/dominoes/__pycache__/dominoes_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4ee1e468eda0a1256894c30fa274ee179e3c7f0 GIT binary patch literal 5410 zcmb_gTW{OQ73NJcCCisMjuY>05;_}aqirkiZqcGB(lkK4Efy{G&}3UcML^J+vCM`d zl^H5sd*zopKV*&eC4Y&peKPt33iKuY&Wx^Z_b>pb-7x-1H`AAcnYBbR+&sZw{sRS9OSUX#GV6`e zvh}nrhm}|v_a(N%T-0S&VO7*CY?akeyKIfEqpq+Gwu!pRuCXoDtL!@4MqOh!*beG7 zc9Y#gz0P*oN2oX0$Ltf-o9s5bgZdh~%RJOuY>(YTeVu*E?xWsj`|JVg8|*W{dYIJ? zlWrI%Tt4SAZJQ8$blGT-BA?1@`H86fK2j;-Kv`CH5jJIa)f$7pdP)gy3z|q^q}f=13kLXX|0y>!&^&uA0@7eo7tsEkmqgivK)4_!d*hgP?H~ zup|x-4!L}pCcOjx9T)9Tb`N?YXs2PDAB-j%H~bVp8okr(HZ^?S?WL!_UR1aBf@_4T zjKVM-(>2dNpVmWT>Cj>=-NAIs?3l%Rs$0<06{%TlP*I{{g$e?$iyB(lz7j!(aVO$w z5)Tnf?lp=nygEctCKO-IqnHfQN|@a1DgJLX3dj|ie#`*DkNYW~Wxzs|_j4%IlK@n} z221@Tj3?%Bb~6X^%Vi)J&QOf;9_FSU%IuE4#A;4cTvGtAXjdr20882zBweu?uPcD* ziQwGl5%2OiReNb@v?>|Ro5wRd;6sUDw>0UL$hVfty{qIVO9=iNTak}<>>kEVOaEYA z`bEP&9EK}$N*aj5fCFIh7P>LUFwLe1Ir;A`mVbIkvFsiuBl>i#CFHT2Vjb^|2%}h2 zDD*8QGz(=riDS4=&U_hmdlCQ9L~fT@vp+BQf>Fhy-ye!j=TgU6B7RA8ALLPzliLCm z#i5VUMn6@$qY##M#xnx4q<<7~KT49`7noqksak6IarPNnrvqH95gyC)M-o{)?SM_uwLo?)|-GE(NKXaJbtv_iaF?a6trKa zIBsA5asp?)z;DeCm;*rPtpf0H8UO;KPI(E06-~ei1ht*SZOj4kDI)$aPFV6@AYc~7 zIQi=dn9Tw(vjgV9R7PML6EG(10XP)fbt+3BRYrU2N?AaOPs|f^9sv|>vMbV-27MPT z*lnLW$o9qO&6Xl%jAL_r+#F(nByJm)W#)eWc2?m^?#}aaW`;TFAIOdXs#vISeFg#1 zq2Mjwc%H&IwvIk4nF=ViZJ!ZhlF=}gZGSS4Z^`I3g)*ay+T$RYER-6lNn7s?0^vjB z0>SVF21!x@wY_NA?}4MfprzZ)6V>r2kOF!s_D?&+A;>-J^p9dXqqgD&?1sUOE&dY$k! zk4FPkPz>C31ZAr_b@}>LKZxpOr3*pZTu{21*?{eDt)!Aca~E%tLE9>2+MQIU55G7%%~YslD%mLrMV+CM!aI?El~2%c=7vli&@a7 z{ewkW8vS>T0dmos(5|j`jmwhKx2>Nt6K{;4F&lSE->)`_rFBHWTCHV!qUD7uzCF~5UYkoFsTwRVwR&G+9!bsv zrwnMllh3G^4xaG~+M5lP`5R2g%%M*p??7y}>8k_Uir3Um?SXY+$_6nN{SK6Asy9ly zr5FsKap(C77u=I4Nk3xbAA%v5!8Y&~Tb|UBZD?V?k;uL>L34npEUc=AD7l)!vKl9O~SS@sV6(-oOrKs8n9W!ngCgC zf*5drh1qi(Ol+g?Z}_XjhLGf()}oZZS>MTA-;c@t`B~NXy9w(fKK8Sk?~{+!PXv97 z5t~%ppkkK_LMZ5~lc0|(!lQyxPw^=g_o<*DQq-v+=dFx1v5!){l6ne>`o=<^R|M@? zYRCsDkWZBs{x;kd*LExJs_VKHHKx9rxkvplO2b%YwI{t(e|)#=_f9D?8T#)qi5r6d zRfH+eDq6kh%2q~wRSZ^vOdvA1ABQR3hyxOiPSeb#v*2lf?_ebBA`qGTNGtR)9iwXV MxyF{^TD8)D0h7Y*&j0`b literal 0 HcmV?d00001 diff --git a/practice/dot-dsl/__pycache__/dot_dsl.cpython-38.pyc b/practice/dot-dsl/__pycache__/dot_dsl.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0bb8075c796b7ad4f48e780a68206b008006d808 GIT binary patch literal 1299 zcma)6&2AGh5VpPE?KW+~e+7sW;*tZ+3sfjTtKNb{+sg{cTGnoxHqEB?R)Q$E_DwkD zm3-yID{uhjbN;sUQcE+Q@z1w2^NshY*=#TxKeDak4}!6uaOxu>r%U2?NExQtHUAQ2 zJQG>8&otNKhG}svGD%*fC3%v(n7mjglx7p9}j>aBJI z%!=mi(RZIJ)gSgNrGV=sDaI2%ZX)LG#a@A67X$V(_~+zI*cl~o#?D2#MK&j!pNj)# zk){RYRM<6|d|Xzi#)hzGY8|VIQsz=A*e-mCk2mI@$9iuXBTCdlDc?})qSRLd*qcgS zUgd+?jzveT$-G|pbePW7GvN;B9AOv2w$f)x= ziHKbRc0*yNk&m1$e573!_-xBiB>R-^*=JB-`TsnSWsAgN6I6jL1ac3u-q4L2S+7@Q zm9Pa7CsxEgq0@E)YE{orO4JyeF1$g$$s2!#X#5#(%)61rxEw z${i-qJY5_^9hWamYN4YWPH&9U+lqa>Z}ZVGy|+pF>NAYJ{V;*p`?+-I=xjJ7gG|pcS>&Tbus?EO*?G literal 0 HcmV?d00001 diff --git a/practice/dot-dsl/__pycache__/dot_dsl_test.cpython-38-pytest-6.2.4.pyc b/practice/dot-dsl/__pycache__/dot_dsl_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74dd70558b922c4fa0ece82b0bdb56d9c590bb60 GIT binary patch literal 4393 zcmc&%OLH4V5T4nWR!=|TIJWaZKoTM#HsN)ms61>^a1dY|Na?b*(u|dLcC})5RgP83 z$vIL*6-SB#DNgw#{D`@7@;{)cg3vuHuU4`Y8|Q#j>Y3S{Zf$@4b@%MOa=Ad@^IKza z`{x-#{=h}{W5D7j{G$6H7-7^W4XQ>h&^1CyU^Gmc+_4%K+|m48U^na_-^d4rMjcs=sBcoerN z{Qcnvp9#Uc1Hb4)5HZ;&Pv~RvD}79Nv^IIBQ8HNRBP+vG_ZR{Dv|cj>nvz8~inxe3 zzVErdG&=xKBux(Zz~IKQh@NZGh`7HkY5O@5v!L_Wt+jig6Ro+cO_zloZ*84N596@A z#vgIf@}gj^E8JG>wfGtfTJ@O%DCBK@e(b6~IGGuE5<0)dhAQx_fn+ zyNUA;`QC0QSac5bQ|C+I{0cgM;{?u++L;c;7a1sk1I8!^Mxt%RCZ;oR0+^EFM3x2m z00!Eu4XA)z%TPhF08{cmQUQ~!3Ti1D1wf-hmyV|bY98?)396`Y8zzTT7^lIg_amzW z359|x5qe$f+hHi_jhdCD0FrIo@2Tv+IEfBeP`qX@=C!Qfm;x%}uN}jJRQ-ta_!!Fh z-$$H>G5~F1TaPuY(kzF00dpHm1B_6qSy5fnVUAagScjc?*js|@2Ixce1`zE*88NV6 z#MYs;eGTTIr^bOb$S-|BCET5h?Zo!J4ztuY5KhbN%0q4%tion~QMxJsvvqME5x)RJ znz0xAykFjevgvi&)mvDaRep*^+=OW*X-h1t&A!{@e&4*!WA}AwH2ofzdearsh((Xr z^u+EZ)O!O&t&oYYs&iuu9~Qfp(|lz-=4rs9_u+q{cR{F{M{QbCzXBw`{iju2z|}vN zK2IwzEX{_x2;aZ^S6)Jhq3t7Vz%s4a@B>Vs7eYIDMt`h4p%8Ou2$XzBJ|bU}O>!Ua zLR-M7?o-&6^iCbuI~LQH;aD-ambGD=#)gWiSwFyLE>QFr)S0Bp+}N!KuD>0MfU`!i zE5fGF0~h*dEhkG!f8KPx2wHM}Yp=^Uga}0vGV~Op3KwObKWg!A?1dd^xS|bxTVSJ+ zIu~NRH7%$>rT>|9;Ll-qgguNvaOUB=pe1Afwec{FX-*HoPhc$#z-$r#tjDhqf_bzO z=eFtT?5Hq6Yg5fyh2d-x1~2A8)$6pvpzCv}P`0=V4=>(AfhVP;@?FCjRxj~33RM!{ z!P!{zU!H`pga5GwyHl7K5N5qZ7h&vQJ_cr`J{{{#Fq~q&q)^hayD>fKfn%6M?*p1! z8QNnSSUWjp0PRhry~4_>iz{IH05LdFl|Z4kh!sfH@~RgN={tZ;7QS_%>SUNYY#w6} zPD1a@73$9c(d@NF@+0^eH2$0&wHQ_b+TNnna&+#@t+Q#)tp2j6pc(JsR}XIpAl zZC2XNp6A1XD3Ya{-90B=Ej!&k1YkAkp3oFm1>Y3_sm!OBWbW`<0hAS9a7MCw9WTZO yyuv3htx1Zi(x=Wp!y^(FHED0b<~uID5#ysz@=4mCB;b9D%vWh@lX+rmRsCPEUCuNB literal 0 HcmV?d00001 diff --git a/practice/eliuds-eggs/__pycache__/eliuds_eggs.cpython-38.pyc b/practice/eliuds-eggs/__pycache__/eliuds_eggs.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d42cc3aa834985bb3f9113105d9fc652a147965d GIT binary patch literal 270 zcmYjLI}XAy3{49IAi8n|#6WWagpgonL0!63Au&}%e~McKJ2zqCN?kbu8xuAk!IR$e zbM$N{3W9+kT;kDgO!daiKYVHyL>!VBVZ5`5h4D9H($OA0eZii&Bx0Au2+DZtD@hy} zi&dsh$w6feIL^J~v62yjL#e{8GG$@q3UFVSm4qWWZ84XXQ@XYqBxJTRIE6IDk5AZ# o)v4{1Np#s1HE%}#vhZAobUk_3-^sV*NZXs`rD-yl^VFRvo&mf#S^xk5 literal 0 HcmV?d00001 diff --git a/practice/eliuds-eggs/__pycache__/eliuds_eggs_test.cpython-38-pytest-6.2.4.pyc b/practice/eliuds-eggs/__pycache__/eliuds_eggs_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84437dfd9ee89e528f11e885b0d462f32ae58eed GIT binary patch literal 1182 zcmbW0&2G~`5P*06myMHD{0Kzg2_iuZ0&WOZY9quY7uo~9tX%IlGT4sUwbcfdQ~L-! z0EkoHfhXB3r@R6uX4a4%+kyBrtx&_m6)%g#1EdeRyE(!qod9 z1Q9eRF|}`}a2-NP;l(~}SAsZz6({c$EM}CvA;J~j1reSMK6KCBI28098Tm`dM5ZHZ zx^gz->AWfH6kY2BP}*%DgCgygu_LH(E=cUQX=6|LA^_VL9l_uoh%TfL&CVpx8lfk% znLd!ZPU%`=%!?)M!PE~x2>OMdk#D4?f}Ybe`rW}|AdfRu_~E5vdWqIj)ss(6k}FIA zK2OX1*f4oo$+VW@lBg~${C*o9La2_C@lhh?WftvA{jr``kvx?u&2$k}DoN`sm65cN zPoM?*ug+2DH6V|xh3TQfpIYYta%;pU)T5stZq_$m3;gd|osC-E=@M&Q-U6X;9~Gd$ zl3Iax#DsREXGnA#>?@$*HXs{!a~`BvzDIy-dD;%WupPR$0kpM4ZQ#v`@DMWc_2tR+ zME$ly&n?n$1L@J$9<`CvQO7XO%cPK;n~?KjE}9(mKIeGr+7;EqcI=?Q{;RtvuFlA6 zcu>j((TAxS2u7KQkM)jvh8;CoUT38?{oQK8SJseM3&bC{w>_JeV{VOuYk$Q|?hxkm{XdPM3;6&5 literal 0 HcmV?d00001 diff --git a/practice/error-handling/__pycache__/error_handling.cpython-38.pyc b/practice/error-handling/__pycache__/error_handling.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..990145cf85401d1b16c260c8bb4c3baec5728b6a GIT binary patch literal 704 zcmb7Cy-ve05O&)1SE|?;K|&04pm_m=kYHlyg1U6EQu|6xQ#(34qTP8DroK{FUV({; zyP&Eeh@ofs&fn$i@AEm6!Jse5-lwPYPl_K5s@5QIN7G-D(?UmYVk&e)Hz`Is)-8$+ z-PRq7P2GJG!=9qbUltL%r|DyIT0DtuG~Np2qYv)uF`0NkpQNK%s+~2-1Ndcdc>-%d zW&A41F;&4RNC45{^&+)8Gxqrh$~_$Ao83hTK$eAawvl0h?v-jKtQF+JILo3uOAryV zF2#wx@%oQypC??aWl_ig) zn#M?<*4JVGLX17-U*hYY`Y+^VyQBP7C*Fq1@QFtr@5tZpc+}&?#VUd4kMQE&qY5E^ zqB8w>pxlAKdIo|MP7@MR`*ymnLn!HbVTl$ae(2kgau~qdNh;lHSf%6}!d>pYCEOGK zi-lj^uqGCH>7^r|3jer103V$GNSgjTh(Ov+YJ#me5#PlxMF)GP9|x2>@K?7%2)mNd z;gmaXN$3_)LXVfY4|<80c>r&pS9lfPWxl{`@DBJQM5~*X`%-4|L6q_&PM_}xr8^Y7 zjvj0SAmlFm)f$K+a!fQG(BJEnXy@3)g+C!*k{`%6c?tl4Q`&BN=2E1Tka|0cl~7M& zz5hrk6+IWGa{qNl^mLr1#t|}H+sDv?30wx-J!E=cW(TkoCPsEA)OboHdnZKVQck~b zJqFjR6>aWDJWJ!&J)vIetk)8+h3v$t+v>@vqvMWfS+6&32yj`bY@{*`yWQ*^nhV${ z0#Bj_xMSp<&>HQppMh!fyh&%UE5Uq=-3@3I*c}5^10ajL1D9f-t10w(&{rBbm_(Qc zZ9~6!hv=VfYzvhqx{>WQUPVdF8*$ppbwllEdBPiMrW?DW(aus~Xw+Yy7{}>3=0j5; zXrUnJ{x5lyNFM@)S7xb@Lgz9?E>d(~D`q@Y7)+L7ishpacz(>X#iW>K=hUEAp&+zQ zoxeP%2C~042h6F7?*WM{jDh?X6itpPg80mNL*F<6p>y;epho~FfC=zgOW#_$LrWJ= z1ddstD{YDE+vzucItwnKrSeV(GIuXe$kU%3qaVH&1jxH9p?q|F557w@pX7sW{~#jt;tjg@IOY=~8Gs8ApsfhDBw6s`WX ze4?7Yu~rQa0qSL# zZ&@3T2cY|7rpoP|6I$$g5ixhhMg!$8a$gs-Dox|68A4LH6`Yz<=AY@cu*_?dWvQ?@jFZPO-uER(cIvlLTvRB2tun++%AB`vpJFdujeGg ze~oY^QO3vj0Ysf73Rb=%Ie>B(QosYs$8{0((&!)$$9>SJQ({YA1c&kxh#iSrl9xd= z%LO}F*5t=15N`Pi3f#Q>48;``n88yO?AE^mc>s4=mg@_y(#cfDck9glZ9d-u zkIKfQ{pQ)lPkWuZ*xSvD2^dSGu3*em8S7>|hl`z=8e@3L6eDs0yi2S>@_rmLzzh7K8Y~10b_9cVqc~-(xnzRfJWh0+DpR}DJ7i<+GV2{8 zvzx`@;p1adiUS#I_#PQ|newQw3X^RjMA8I#8f#R-y0G6UqtAz;s#mRDuH!`6oHM}= s*xrrc3kBCLuYoWgE^rF!@!m{uyMXB{yy_KRE&*93ffLZ0yV?rq-+5l;ssI20 literal 0 HcmV?d00001 diff --git a/practice/error-handling/__pycache__/test_utils.cpython-38-pytest-6.2.4.pyc b/practice/error-handling/__pycache__/test_utils.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13f3cbd3b5c7a69b3e8367fee9e555eff5e3cfde GIT binary patch literal 1370 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 ChbDpm diff --git a/practice/forth/__pycache__/forth.cpython-38.pyc b/practice/forth/__pycache__/forth.cpython-38.pyc index b4ca54f088597c999ea56021ecac78c10aed10d8..00d6fe916490acc6c3061f5b2598e8d8363d804a 100644 GIT binary patch delta 26 gcmZ21v{;BMl$V!_0SIirY~g`kg2ho{X;MJ?F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%mYbiOnpaW;QUE4?Iq8QMrxq3KC+a07rsU^k>bs;CXP4v` z=%-es7A0pE=js;}B_@|-Ca3DBXQn3>rzYp;r64i&3My|gC#Ix;Oe_Yuk%6&@8A$qR cLTH3l5Ee+uEe@O9{FKt1R6CHa&p^xo0H#SY4gdfE literal 0 HcmV?d00001 diff --git a/practice/gigasecond/__pycache__/gigasecond_test.cpython-38-pytest-6.2.4.pyc b/practice/gigasecond/__pycache__/gigasecond_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11c1d163ddb9bb9867194a4310121a7b4a5507c3 GIT binary patch literal 1974 zcmb_d&2G~`5Z<-ppZpZ6Qc4TrAF1?`RBCS^R8dfG5fbgimzC??v)o+M5y%sldc~s z6Ko3M9nh?lh_H1))G1hg*=TIRzmkSu-}ZUjmW_KNd7Q?bhIl4aAd{%kQGSrhKs0s+ zz=l+o0?2x&m)$^xA;TXUf+ z2Tp-cyssfnt4;Y1`LiLYdV}~%pTnXO{319wnlg*y*ckKX@sO9n=SV}cxYf6HODaGcBjuycBN%=4ItebrGQWj3 z3{qV}F~FNI;_}$?x%wO4J(=!8_4JsEfr9v{P}ku70q|MuAj^LSKI)>m zWfjJvn0G_eYm8yHEOyj1hI$r-ZnalXyN=>l&1(${Utvqe?vWrim%3K*({}hOxZ7PB zrm~%6wY5%<4OR=R(?iVlqFF<$tShmnWGb@qz?3=9$}V%M>kHWoOWy ib+^ylO)#&+r%1;zF6hj?T|mEM4I(Eqq()t%X8i#9BjJbu literal 0 HcmV?d00001 diff --git a/practice/go-counting/__pycache__/go_counting.cpython-38.pyc b/practice/go-counting/__pycache__/go_counting.cpython-38.pyc index f13050c955a1dd96e8a990d55b76488933ffcce9..dbfb7204a40b4ff60018ef620c413c94d74783c7 100644 GIT binary patch delta 19 ZcmZosYEj|}<>lpK00NmW8@YZ7001ax1f>7~ delta 19 ZcmZosYEj|}<>lpK0D}8hHgf$E001mn1xNq@ diff --git a/practice/grade-school/__pycache__/grade_school.cpython-38.pyc b/practice/grade-school/__pycache__/grade_school.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9741294dc1386a574df1e7aa71a1c2c0704aa1cc GIT binary patch literal 912 zcmbtTy-veG48Hs}v?)j(c!v%&3nN06K(KYGx@0+}@c|KSQhccdtnemGyizvABd{@H zUm98pf&oYVJIDTPUoz=-+k)sR-oJPu{mRZJIphq9b&tfk00Gt`@q--;u*ahBq;&p; zZ1RT0`jCVYu>~Tw!2qN( zs`3o@x^MJ3)=2=QE|;M4l3#9cdn??H@ZTF+LnAM38_UN+mkNUonC=Ruj-+O23Nx|& z+idy_)dBGQdVs#=LIZh zY==_bER$Is!4?%j{xgtUH9cd<*5@ZyTYO*Ge3_aP0xNLp$DEJ)meD^YR>4sXf6Nu$ Gh{Xr?R;BC! literal 0 HcmV?d00001 diff --git a/practice/grade-school/__pycache__/grade_school_test.cpython-38-pytest-6.2.4.pyc b/practice/grade-school/__pycache__/grade_school_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c16fdd0cbf9a8fed1d010bcc8d338b34c6759df GIT binary patch literal 6945 zcmb`M-E-SS5Wpo_vJ}Tj+w_aluk^caX;LWA7HCO7XrTp9q3H~xVbG}Fi=)<-!bzDn zp7sfNVFq4!<)Iyhhs-eiL3-sW{{m0!o-9Xlbjnxl@t#i_-Fbhvx4XA~G&WXK@b#y? zZ|>8Bit;aYvM(JwGx!N_qW}fej$*5#)w&f;QI)Q48)|Z=YFF`&)-k)5ZK=v#1uCHb zq=3$R z4hP_EYf=~T-fBF$V6;8WT zk6j3SZ~8V1pGLvLG<(i?%L}{H3*2o*UW-k)>1SU^21+_k(s3fxVrpS2zCd4`WNOC? z9oAilmYiqv%y<0238O_|endB100v{EVikp=R#jc=T^r&uwW-nM6sK^8gyIYJiAqKS zm0yXU-c|)w4XIXgRE=hA-0-@Ltq|H}E!KUv%VI+ym|fOW;sB{uoE9xMgkqeO5_l6q z+b5n7+TeZ1O`q9~*Fy^h0T{K0y~qC2o)? zQs{(GXn0YbC~%^A);EF!_;6N3t#_$V!}3w&DmQWbqNNoJt)~kudPdrVD!tnk$Jbg@In^97j@$8v-rrB{*- zGfAvyH4VCHB`5sd_6e6-F2^jV#6)l8 z9ABR$gH2HU2*+PTv8MIDE~J<`$F0mHhj_glqS23$#vx2p~P37$@wGLt!6j}>E*1QVlFSjN8<8Ik&;SlkfNizTV|@87+(%^oy;(g&m1^A9aLF9 z)3BOx<(}7F-QltEfZ-uaBsj5t!}r}4I?Bm0Ud&>|QxHbhFyMF^a~>}xDd8YXOmf0G z;y08NYQ32uSr=f(}z%!LD#fFZtK~x53jJRS440(0fb2+Ny@HcQ?c~o>5 z%kSNw5Y+X}fLc4~8cY<^#KHVG{8EzR<*h5*Gt*OuKxpN9Se;1hP~00Gcud^VSh27W zvI!$?Qxc5p!1L{V}619QzR%y7G`W?{C0WAWAcT_Wjhk%a(&Ex=#-CU zycXkgoGsjgBAYYP@n&3|SSRP%(tK-{jgGKl*(UKzvTWIU3aGEuOhrX&3TXYZN^%I^ zi4PVYSCSpwrc`CM;Ni_>${j;H`ez(zwdkQr_VOkMlxzF#KwDu@gSv<4Nsb=kUKI^Z z1nWK}Q6B*-M+w7pepeTnmjJo8q_BOOZj`voUx?;#$kw+(H62(^byF!&vAdhoH*^GM#)M;WQ1=Wy)8cJIJ zD8hpWjjJ2SGc=+cij8xXgpRDmPyt))!~U-9_b|iD)Gfit*-kl@IoNgN_^n8XnhCrF$maf-wl67P_hCUKDj)qVIS z67Q4vfW(I+u8^RA5;B60>zoP#q;N>dhNW6ne4CbKjo`c1|5g*dG0PAw-VskVMq}&o zqKD;EKaA@$3ro(RcfeU#BI;Age;r=nPjU8)dl8FA2A5(py;j4A#Ui;pwibOaqK;i} ti*TL%cac=`ty#Qr%f){}=x1kC5t@-cvGqv;_&QmOsA*fugkouR<9|^k%SiwL literal 0 HcmV?d00001 diff --git a/practice/grains/__pycache__/grains.cpython-38.pyc b/practice/grains/__pycache__/grains.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50a18d0a4f24ed4ed84fd0b725a7b3229e517df7 GIT binary patch literal 352 zcmZWkJ&VFX5S@)l2nTj@{~?WA*&N3qXl)}lcI)mcLG$5E0^0jeto%!9?_XFs6Vwab zgL(62mwEekH5`5bGqQE NymZaM|GX0=;RC-}JF@@) literal 0 HcmV?d00001 diff --git a/practice/grains/__pycache__/grains_test.cpython-38-pytest-6.2.4.pyc b/practice/grains/__pycache__/grains_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f8e795c1d015eda4d9c9acb949ecf65789642ee GIT binary patch literal 2855 zcmcguPjA~c6elHFmj9(`+9u70q27x9@ecNqxIPVQhOX#N2G+IPpbH_JjHgVNJ(6yl zqQeHb_kD#GJNYZ|x|6>`FWq}m?AUJH#Ktg6d=yEM{Jr=1e&pj)DNi8%?Qb8^EFu43 zWi~lbIfSgf1;GiY5%FnKT3y>Blyn_GL(?ADccI6MvR%*jx;Z~b$pgY|?z|-25$mZQAWOPplQ5&0QlLeJS$clpy$_rd=tt%zsk3uEbwdmI+R6zgKtAw;yVECrpZ5$ zK^Ut?Lg_YzWhV*0(H!?6tLq?MkiUqgoDLzsvd{=H-fE8V$B|_Ufl@;1`=DSXQIQcf zjuO$)h)6X0>$|nb@Pn!a)mFfJaaj9Cs9$uiUlY%SY=^2_>&u|6!?vh(5=f^7(*Uj7 zKQTM_!O}j~i&<(*wzmPZD_oJ#=O3MEQ(f}=dRpTA(naB+K#fvSfUjlH_OC+c<)Q6g z8k#kAfZZJ1u*eu)wKBc~^y}sE9jt{zOxd(`dawLh%Y36yvu$!m+Ym+ zdouuUU%dAk>me+|DiOLFll2ZiFTr`R{{ak~IQn9o2W#%cLs%usfS4q2b*zng8Ae|o zYh&K)7^gYN32h;Zr?mBo{<-lR)j+00O39Dp4*8BeBtK!Vt(_P2I5VU=p*3v5`mxLD zF7W$Iq)DW@*SAvMDR&1-ms=tp-ldVAR37KQubs* zj1o>BVjO+a7bYj3wMActz1TQ`?5L3?5xud6l#3*jI`@?IzF?tZVf-YBLVg=YC=4({ zi*yT~=Wn_AoKbUI@xL^i1!l9SW^b^7tS%K zJVKkE>|0PtLu3foovGKXW)jD5eovn(aMCB+Rw4_Xdj!@KZKTix87ojju;h-z;z73s zdi9QGPHyaN^#aN7pl+u}_uWOUR-CI@*)SesanKcvnLK0N9v?*bU1SVzC25Z=q6T

mLRKb5FYjHxySY3N&cx6jn^84 zk%o(wDIWGu*tE9G`X^|)YDyVE1XU@X%1{G0Oq)!0(w2w8iJ=2&yg?jltQfbGT$oaJ lK@S=45wzb6;KG$$49)>>yf0G&eT9Ubgq26Oh-YoO{{m;zqznK6 literal 0 HcmV?d00001 diff --git a/practice/grep/__pycache__/grep.cpython-38.pyc b/practice/grep/__pycache__/grep.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad59ec2fd6c97d94fbdfcca31c5dc9e3a19ff9b4 GIT binary patch literal 259 zcmYjLJr9B~6f6R2jI90#9O&j`jET-HhJ~%t2WjM^>BB^K|A~`-iPfLr=Hx5H=p}de zuD!lA34$3T+|xzAB!AlQj}e6}5$7b5N$18=CPxPrx|vHyU)b3p?uh7-NJbqeeo(QS zXwkM{>dwzgQ6QNr0gdhV@?P--!5|mWQOKrNd=GeP8_nSYCR12(ZA8|p40vHc_Y&!A j=hAGsH<$4VehI=guDe=ASFO>=8Jey& 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 literal 0 HcmV?d00001 diff --git a/practice/hamming/__pycache__/hamming_test.cpython-38-pytest-6.2.4.pyc b/practice/hamming/__pycache__/hamming_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7614f108a407d0dcb7d9cfd3fa056da211feea5b GIT binary patch literal 2652 zcmcguO>f&a7$zmzmTkF9-K;>cp>x*(Lx#@Y4!aFQjI{8ugMqc~Ht0eqCY>nNhfC6E zU391PzQ3?yC;ug0cgkPrY41zTo*m_@J46CsilkogdEPJTS*z6`aQzkDoxG?K@;46F zFAoNL(9|OkoN$_uklNl!U58MTdSQhYE7hq9Ycpx?z|>Kt=PiB<`a1uJZ$aPSw|N`-CcgtHwoUWLC{5$+a3qu-Q`l#D;d2GrJ~VX~ z#2fM_(G<3)Ck}VsIY<{i;SLRv`0~Or%}6OB_2U<_D3OSML5-(GGFcE=hvEBv?-{(H zdQtZv;&~SL9trha=hL2eCFD3(X>Tf{v5v>0cU0h7_Dlo7?sRV2_`pOu)pMq_j54lT z@M(qH5&HVx8lP_Y)&EP8_AN(=7LgDk1s_XFV(6GJ>|P2inFy8$t%YPU7a4Ggk|oeB zcykH#n-b6~l&=Zh0q?jg?|4H)2ZoML(L*1Gp2w4kkicMx{>}%WFDYLW{n^+GTZ2J= ze>CX#`y=SCaKb0n2}zzEmTiwAytMt7CEK5`b4}1^O&$ga8rldkhe3aBc#3&&u_M+P zluWpDHG`7Q1_MkH+}@`2Pw-Hr^gH^;*6&o?%5nl}{VVy7{7jyZ-*Da4-Wz&cIiZ?j zP~i-YkE`6>ftt1ow8}8_z(<471y@-&z3)6N(zBD!lT_77RTtV=XtKTGX%h|HO2Jtfy|L^g*?)z^`%rA-fbM%M1f$Qmoc-8CO>yT02r{=qCx zbet&@>`muvHQHg*IYvRZs4P$~x>CH9v4#?|nliQJTmzJC&_vSsvn+;#TWM1}D*irf j6*B$^=Jq4_b3tt9fj0j4g*kq}9|W6QK4}x*2`c{pfnsa#(~bl$V!_0SK;r-pFOi1pqQP1o;2} delta 19 ZcmX>sa#(~bl$V!_0SG!TZ{)J%0st?`1dIRx diff --git a/practice/hello-world/__pycache__/hello_world.cpython-38.pyc b/practice/hello-world/__pycache__/hello_world.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4be9c68d01f27ea084fea4a93063395fbe67d884 GIT binary patch literal 270 zcmWIL<>g`kf~nDBX_`R#F^Gc(44TZzKoJzc2;?~f zaWM;!NMQu3Ve+fubI;FDNvcfMQSePHDpp*{Py|wjAbz>%hZd(673(MJB_*ch=Vj`< zq!wqFSv_pkdx+4i^D}#1N2jr-?&>K;i~9Qd!o5wPgowG+s}C6RLKk?O{1OlJH@{#ms z4FQ`lYYIoWqV}2wtqa}X&3{0wZ9>qNZ9&BPE4m57yKd#WsLS>rApF0aGa|@u^bl@i zHi7@te+*9`rH|nuh=yps1ksdhvnyv#&=F)0daZNJ97a7-)TT0yv-f1{oS+63Uc#U2 zJdVt{gNpMHIF`;=*<7)187Vx?R4n@W zqRS>xEN`(>$;LcoX=YH73YIArC3&U{GgHYX^K@*Y4DCFTf-QgVGk+iTMrxzk1f9(^ z!b7CAVe+|D<48+9#-xp)VnDgoC`gMZ0{kd~P2xj4i7d z!``pq+{LMH;3CMcZljVbt6-x%W;#lXg987IJw#z1|&Q-&N79@5}(XfY5^F=s~ zzQfoWKOg{c$@0c!X8S9SBP8AnL)$}PSomR>WMUrMb2AKW>Xk*cF;toH%F?nr50`Io zY75aLrQEw(ct`UnHrNkEb0=SfpQOz&Uz7<~>|p=)l{{6EkwyKJs#w3!`FOd^maD>> zr;)Kj&?u>>;Fr`EjbZsQ9w?Qmpi%vjaKfXwaJf3xMXmgo#d;#O=EpLq>9`%TL9Wq`Ly7-^*64p5-v7|JX%+wg literal 0 HcmV?d00001 diff --git a/practice/hexadecimal/__pycache__/hexadecimal.cpython-38.pyc b/practice/hexadecimal/__pycache__/hexadecimal.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d894dc30c715a4db98f49cf2c44f06ea849b9ac GIT binary patch literal 262 zcmWIL<>g`kg2ho{Y4Sk&F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%m62KzUtCg@nU`J!QUoS`x#))$rxq3KC+a07rsU^k>bs;C zXP4v`=%-es7A0pE=js;}B_@|-Ca3BH^(UsJCTHd*<{-263My~0faE}i7K5D1z*xi# fB>glYG{QCr3#8;0hfQvNN@-529Z1(_AZ7pns%A9= literal 0 HcmV?d00001 diff --git a/practice/hexadecimal/__pycache__/hexadecimal_test.cpython-38-pytest-6.2.4.pyc b/practice/hexadecimal/__pycache__/hexadecimal_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..affe7877b153431189b0f491192ba7c79565b8c0 GIT binary patch literal 2465 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 EA8nPvI{*Lx literal 0 HcmV?d00001 diff --git a/practice/isbn-verifier/__pycache__/isbn_verifier.cpython-38.pyc b/practice/isbn-verifier/__pycache__/isbn_verifier.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b6135f3a1c46c5875000ce7004a3a9e603cda112 GIT binary patch literal 264 zcmWIL<>g`kg2ho{X|h22F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%l3ARTR|Jv<6Tdw4LyJ?3iuDuqk`hz$^D^~aQj4=o@(c7+ zD^iP+GmCTe3yKnxOEQyF^+7sy%TkLn(=tk&Jq@N~)M%W5rft1|hu*uC&Da}c>1L^t<#0&rq*)_}n literal 0 HcmV?d00001 diff --git a/practice/isbn-verifier/__pycache__/isbn_verifier_test.cpython-38-pytest-6.2.4.pyc b/practice/isbn-verifier/__pycache__/isbn_verifier_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8c3563b027e92e5c55e44c8e34505514be9f4fc GIT binary patch literal 4663 zcmb`LUsKyg5WpoHjBIcqKuAbJlBOYrNo{P5W0NTNbLnP5isBP=E${Q>*DxCtAsbrfaQ{+Nd6!N!3z#Cea*g88t)KzSkfLBcC)F;i+HJ zACt8V=s#)8qyL~KZF^bw4a;Tk&87u)I-+g~Y;5A+{R;(`PplmoM?}&Z78D`(5*N&_5#89|`I~w36ID$(C~E^=fXlST0m^)!oyCZXuX8A8~o};8YU^Hvj!`8yyEUV&uOplBQENe+gfQ0v+h}S zzG9(+x%XWUWsCJ%%tMFs?PGtEc7jo1bbXfmrRQq;$%Bi8`3o0+2IBSCg1SkhNDyEk zFf=uPK|ap1Wz0zLSiQmP?-*EzmN$i$^gPXndphXWEBjr^?d=Zsd+9ha)KLgRFc8nimnH@U^5-Ivz(t!k83iTrkILp!6E1&5q_2qK$B(AuYwE zT0482D!K0>s4C}T>zq$^5Nb$iJ09}{H$4u_blC|P&b$KnLpWeB>V`KOlQqa3JH>Lf znA?kBEni^m4V)E8dRHNReHrO+Ca=V~x>qh#a#8tWQF0zpd^&dXxSQ2*;Lg2z_Z6PDRrOOe+Uh6a|Bs{jyS;xg0^1u`~8{X+d+loczYY|}*RJ**@_KszUR1|Lq zRJ;9)W4TjH7fWkv<)@X^sF~|_kSFan=6RgG)-e@!XH@r@;^LF=4zem*SqKF3#qU&P*2u;0YS4!0eX8_SWka%J^trCN>PE}Rd}v&_Da!CH50&$MhR zvHG=!T=RCJgYun3nzQLGnwm4&chOw3dohI#1F!pQ5YzAipeb*49a%rSnpT{ zZg`kg2ho{X^KGlF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIt+=EpGcUaeqyS9(ve6GMPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitC$EY43aO3a1PdIgoYxH605p~4^|i$RWLU@QVz>!%5! b5q3dX%s{zY95%W6DWy57b|77!ftUdRTWd35 literal 0 HcmV?d00001 diff --git a/practice/isogram/__pycache__/isogram_test.cpython-38-pytest-6.2.4.pyc b/practice/isogram/__pycache__/isogram_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b0cff6fcb5f9fd8a6c7b65e398d64b064a893c3 GIT binary patch literal 3643 zcmbuCTW{Mo6vriB700=!Nwc+Ev8~vG&Gv%rp#!!dL9-1V&|pB*7rzjU4sElgE+gqV zGWym6`x+bel&_@MJ?$&(X@`=Xs8uRwstoanl1To4hezb`)0LH$g~wn0ox$%-%lg|? zvPTUohj^-EEWiR=SbaOO6|Y*cY|E?l>vsC2(Qn|BifDRH-?6QqET}^5l?64{c((Mi z+HZmV#M-a_gFRU%`*z&oif|PSCG}i$FMCw5a)_sTfdxy(>{q~s$}6j1P5bTFpbibJ z*P#gx+6F8^3vCmYp^eso6<9^P1Z%L4wgnroiFO&bU>j{4Zov-P71)K_Xjfqm-b1?v z@53Fm>u?wKeh@D|N=2SBrCl5K%nx&I9P|)RwT;CK>kmuYV82A6e^!iJu!HJJY@J?I zVuvclq<*BNfxEEdnqp#bVaX+|{(IDWiceLKcF!mTKJOhf^;`#GkDW8=a^>|xNnOod z)|>fkZiz-+-7tzb%mrays3W4Zmgokr910{O=`lurgS@Q5BU!h9gXAi1O> z9MLnTcQS0hlwd3Dyd3z38lM4^9@W86MB#|L1<`mvae@f^q4`uK3j=B9j`>5u)o8vN z?PVwra+Hf&m&0(5W-cz6!h<)a@Ve+D+$SDCHvx&?)}0K=cR7-)SX|swNh%XKM;JH- zR7d}tDqTF1wPV1g(jR6hAHNgjn?0AJo^I*U*gI3MWRuP_8sb7MqJp68Bn}uwVSry9 zuJBaM1JUCyxtb(=W5oQAGO*v|U~k$>Ik4^5!BVn?Q~R2xE1YX%ZV(9E8PH=SrM;h_ z%}?#S^jyvZZN<+!5u>sb2q>7-kCQp&Y2uLX7a87^?XwJ9FE^9LZOf_O{lViRy7%+g zAKrW7jwV#<>GL2Q6o7n^fOr%b8HdED9>WcRYK%}q{dt^zo+0@%N3x)CDU`lLU6=Vf zkOkqF?${Z>UuGI+l{8zN#{mTEX5{C0?8WWN5j3bj3ZMag-PwCN%Z9{Q z?waDZDNNdsX1*q)zsiAS6{~GLmD!FR+o`_om%O>Z96M)YE;RR5+&&B=a#`CWVPyQ; zP5(;p!0+N7Be`br(&eqVIltG!#>q5L89QU2Yg3U%N%9vYc22SW5YvQY-0P&r&bO(z RzBdWJa*Td!({d{9`hU_)&*uOD literal 0 HcmV?d00001 diff --git a/practice/killer-sudoku-helper/__pycache__/killer_sudoku_helper.cpython-38.pyc b/practice/killer-sudoku-helper/__pycache__/killer_sudoku_helper.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc46e45bd559b45e46d9a8b9228e3d7ad59603c6 GIT binary patch literal 299 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 CV`MD= literal 0 HcmV?d00001 diff --git a/practice/leap/__pycache__/leap.cpython-38.pyc b/practice/leap/__pycache__/leap.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c9684fcf10f4afaf3c2dfdc2eb6cf816099faa5 GIT binary patch literal 247 zcmWIL<>g`kg2ho{X>vgNF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIr7|_Ks0bttCVrXehZd(673(MJB_*ch=Vj`gS{;7Jv!8g34Q*AYMGkFpycrAh$6v7J+Q@(}d6nOCT&} WpxiAEo80`A(wtN~kgm@_%m4tER)s3dvQe+h3fCejdSSL4Y%HLc`uNS zW1(M#y?#Ty6RIn<-{>p18_KR|;A%vIg@KQs@q5G@c3dLiTTjnuN^3Dz01CX)f{ z_I$q=L|;_VUbKK%@0(+?`T`2lt-@Da1%(Ty@+c5`B#KZn`x67MS-(3QXa&ZPfsSqg zT2x;;zHh+SUYxIalW%8x8(oH8jvThW2;Us~((!#s=G&X%zb117&K@zTnGU7rF?RyC z83Q|*<+vn8>4=&Tf(a3MIE4t^b90l8d=}egTQRtkS#WdeOvmXZ@4Qw5XJ-&btneGz zo463^V{W_?BR!pmbS|ywSidJn>4Pb(O?020MCRQX()KK*{|BeD{5kvv6aF95q7f&L zt>@0}?OW|$3}|LF&Z#pUCrysVX`H+B?YjGmaL%dotX46UvB32OW2VHI-{S)~TbZda z_IluYqaKC#BUMIGL4oJ2T0*gm0#7Nmiee4LM3u@8K^(X4Dl@09- zq!-FSn@X!c1n>W?ZL$6k~{5CAfY1y}$8 diff --git a/practice/linked-list/__pycache__/linked_list.cpython-38.pyc b/practice/linked-list/__pycache__/linked_list.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ad822341cebca5a2637945c20d1cd415592cc1f GIT binary patch literal 689 zcmZWmu};G<5VaE*qNrs7b!N>#^8*M~q7qA$rRtK!3bu=^rb)1y3Rvk6@C{7;rL6n~ z6L&62TR7=1_v}00yO;T35E8J@bh!9{?-zn&^8t*(?KOl4B8jA1@OLjoPYHI<~nKWONw0$OG>E{!H!xnr{MSC7J(!)vZKk4M66*}<%_1b z$?{sIp{<2bO6uY%4JxBHx~#3i!7hAH;<;7E#@XmGlVzdfiL%ReS;gu_8KLbeu1qG@ zTBtbJ#Zt+eT-)_;&M_ZVuT8+YF7%pn4+&u)^lgB=N9|4ICCQFqWs$8E=S|4@s+4t( zd7ty=I?MMr=DcNh;AzhA3|B^X69Ve+KT&b|7>lkTbfQw}Z3#%~gQTnpr*4-i&=>e% zYwds&T@AkIs6^DD*nepuU-WkI%fsv4`iTinJKZmETlL`rlXfe_N#wch41%M1T~`y_ M?$x{N1i9$_0IF_+1ONa4 literal 0 HcmV?d00001 diff --git a/practice/linked-list/__pycache__/linked_list_test.cpython-38-pytest-6.2.4.pyc b/practice/linked-list/__pycache__/linked_list_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..328516865f8d5be8b5718c96a6ada85bc89aba51 GIT binary patch literal 8432 zcmc&(&2!t<5eEo=+b*{y|9_2wgoA7N z1pkJRyyj9#n4|gC_z}jV;=H(k@tC+M<}n@@3*v2zC&W9@|J`U`s`pnCx|>ij zd6C|P`KR~=y;$R`?o(uy=wq#rSp|heo zZ6{oneDO5a45|=@SvBkC#=FB<%#SfeF60`K_IaP(k z1POvl3px>9)sG33SzRTAt^`I8WNY1Vg>aN?cOFQ`1vb!I`oig~3?P`r3;}x`Lr^zo z%#F`;VR*jzi}BeDpAO(DV?HUemm-2im0;Cd33D+y$C&VWZGYF#r@(R2KSP1{^K>6$ zo?<=6<^g+9h6l_G@~AEF;3%H6&lEUF`seZB{HV?=o`MVHGXE7)d&KNN*+umorh5U} z7kYs@f@f{S!KBvnwb6+H>QE6B+H>P;$qCW`05=FiSA|(8cryo$kMhtMd&Xiw{)Dym z5Edw4SebxPPC_lhZbg*&3|&(hxu!f4R4SQcn!_4|>*`{kVt${3b>AXEAzvMXXjD0b zr!J>#I>oSKf6k}j2ZN|df#1=-<09%L;5Ffk%hKruQaGOPxc<7+Q9`Nu5}& zNPkEoEZxkr2nF~(u2XCq(kZr$@ze~lwLPJYF5TD^A=R)nDjb8Xmh^MI@fgF3HoXt}z=dR+1p2ti(6DqV=k<{en#XeD9og#4>B6hEgpy>#|vdU_y~6e#F4~=8|Qb>Z}jeB9evEWO-JM&v1U4Um`}^8tHfut z8^BdIksVTO9l4`A@;kc;XEAV#SFtK%)IU$(2q;Z}+NfJFTI><*8|)={;GM~U=LJr) zqZGDk$6X1fa@xJn4ZV)f*%s}~8bs{{Hax&KH{L6Tvv9s*Siiv<+h9#o6!U3`;Yr6d z7Fl7LNtMJIP>illwe(2dUCj)TE!y_5vtDKhrN4o zH(d9&&`Us`EHOw0)H~30E1MnV;heVv-1&hJqndM2N_+Qw(Ao7`Y5=)KC9HmPy7b!@ z3;F26|0fe9MG=vI;0#25Ho;JWI%0xCmcK|7tV&n>{$-ee7A`iyXLzI?ZL?nm@)eJDNXfLZ#K^ zUN@ovMKY8bpw+;}bPLbWCyw;*LnvxE6yrC{8{VR6vxyDfZ1#{R`%U>5OcIb^r@Tpa z80;}S@~3dlArz_nrDx_8oU+LnMXm-n%|HM6+qm7y#Y8!*JT9$OpP*8VtLriyuhoQk zJa(Yp7?+GMjJw7++!{qAhZC7+)6{03^MW}p3mZ1)#L<-Qk=}K^Kn79$mM`R^8%m)_ z;BA|B@u(cGcV#poA2nr{iiN1`s(ZnfrKp*ss9P9WQmN4%;d@NbUO-tPmCTCQ;KGy^ zaJ;l5=%A3`$NC#48}x{#kV(&)8=vG+b#K!a1O5jrm_yr4hJ;NZZGh;Eh>jEZD`9nD zB>c`svcejSV#7$)*hm%~uT2OGM&ev+#7LDz9p$J4!sb#$hekb9xNxb*SruF6I$e2# z#Lr3GBtaoqkrRxX;zKqCH9?dNd&+k>w<4oZlLWNK39``*}I zU*y?il+xoZQ*4!A;Q>a1{AC^F2Sw?g!#s*s9p?A{nrfsuzZ1@_pb;ptRFCR>Qpfi+ zbsYom%NfS&(sZnF{x5<$rF@;j`Heh?HRbm(b1}MMiY}!Zy39`-OzFReNdyPh;JCIx zHPg*YVtCrd-Z6$F0pSL=qCTsR;biEc7(Nodzo0AG4r7==Q+^zvbd`)P6(n$&1pmQ8 zLq+n8Ifc3n*2pFN^DVO2I2qZFPLE&X71uf*SPdB8j(2Tq5y4i4RCzCBeO#pV7C^N&J!o?HlS2iMu4IS&`Wj zsSHs32PY+8bQI9+=-gH88h>i`v|YBV_M~0MyNb^g-t?Nr6_fg-=bRNR%vF)y^SzJ`mL^;Lr!)7h lb;@Rch2KAQ@uxMdpQl!2U)9)uTp`^kU$Bi?!!Au#{s#qPCZ+%Y literal 0 HcmV?d00001 diff --git a/practice/list-ops/__pycache__/list_ops.cpython-38.pyc b/practice/list-ops/__pycache__/list_ops.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36c23071f00617e9b14c2d5ef9eb66defba66f52 GIT binary patch literal 1012 zcmb7CO;3YB5M4ftw)m}y2ag^&DABVqCidJ*(@QS~nMH{d$SfMY`%gUam$>>bJUO!s zmb8gYhp_X2<-IqvGx7axLGd*`NzM%+zWJdWCOzEIt%kIK0OM0k1(;w_HoyjlvI#Eq zC|lsc7G)c@p-2SjJYkfu!RnNY}~lW6aDeOy*D3v)^IfVdk}Gwy>{lE%RElsNC<6?lP%G zOB;;;>33}*532Uu^wK=7(kNRNagri~?3nhotv?{Vi45+s$ls*Rk5tp*X@~ZZX*Xy# zazB@8dnn&%ise~{_=xZ*@bow$&kgdqA|C;A%a98~mPg*&q12xB1bR2K0$wwD%LWzy I>e=1v7c^3l>Hq)$ literal 0 HcmV?d00001 diff --git a/practice/list-ops/__pycache__/list_ops_test.cpython-38-pytest-6.2.4.pyc b/practice/list-ops/__pycache__/list_ops_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..399208c6e5888717803e0d8ce9cfd1fb3029f8d7 GIT binary patch literal 7645 zcmc&(OLH5?5#9$L3j!1=k|IUYmPEaw2Prvr#ZFWT9odm9iJ_!q=de|&^$NX25bpxW z>@pEqy3xNPr=)V?f5|V{Yfd=l=5od9p5ZJ8oLPxtF%DUnnFV%cyT9)KrlR$yfw(*mGg$-C>$ChvN-bq}?vaO`zS8ef2&9C7vPFzns-%A>P zBbo7MlBVBGT7D~;^=FfF{#-KepSP{27PwIP#)3*z`{Tla>o0=++-g_H_!O(t_VQXd z8bt%hYu(|X8)kWRXBa~)I+oYsXwb|4kk?uC=ZK|IUfb!%S;TTT2}fO8L;Z8`VjDl{ zKe36p{JsM=INw;lE9CGiP=y*^SD_9b_BCk04EA+sLJNBjX5k$64VZ&@>}TLSEMVV+ zMOebV1s7l$`&n3li`buoRanD*4%Xov?C0TKxP<+AxC~dYUw{p`iv1#7gX`EY!40^H z{ROxMx3OP_Hr&B}1@6K<>@UK7*u;Jnw%`HwYw!^9dM|JOx}RpxM(Gz(nssf|PyW%k zik~O=NtdyCW&O>{?4H%L4xFC#cZZDj+&Z*7hfdxM(==k)r+?ZFV@7Zt+Ic07;+;c_ z&Ew^_Pqx0q8`7h6{AizP8 zp=_I@y?liRfiP?kC8KOFpqtYr5|N&2+56WNeKt$(*YxyoD%bNS4y2xBU@~s6a=?u( z#)aP1&X^z?({slzHRS57Ma?;CNN>@c$5DPs6^6tPvZ12H3f?1ixKpNsK21}lj_Vv# zWugd~ZgM46VT&Z`$poLEPU4e1YbOz0pQZ`kkb-aGK-hpp?K#2Hs51%FUYi z!=b~FH!VgkWOSTmE~lU|MaC<5zZCJRCZcw`CS8H|`?$~)-fjR zN*2saXiFt&Lz-siw%gIB5@9{ZPf8L03U}mX+;hKnkjmYTh#($IL|@3__RHf$<~@qT zx@rtn+i-g<=2^wL{6M*@2DWYTD$mhc|f1%OV6(cUSkkCTN-P+@hE zt0}(po+6}fb?tUdz+#W2c%E2YZ16~T6)C9L8Smm*M%Qf!qg1>8CwJM^6}sr!RaD zB{vm>OxX;(jLn!tVicrCR7HYJs7^oYr#L}IwVojB_iN};db03Z;9v|GW+s&OQHnHQ+a0TIyKhjX;XS&yVB*#zk z3{TKaJaa)1BApPG)gI%MC2AXQe71&J;gQ#Ioe9gR9tm~C&MUBMoB%rt81IlVk0w`oqp{f$f76YvQA-9Gnc7) zz72nz(4Lg2jj8@oZqEsqomQ656>FNg?6fOuwk$btl@ywIT50lOkv$$$s`jiQO3 zJ?i&s@)hT;=}c&H-og>qC6%nadUR4Ll3_+?K1Tb4k@Q3@Pl_^~u<%+3&q?ily_RR5 zqp46-%gA>o$=p#vX;LtvYMHE@VQP#;C0@gvsK$69sZ^1>d=HgE#Z)GirLmx&Vk(9y zS{!CsG>G7LWEWy)swu5m%ir(+SlcsCwvwhUm4&*-v&&(>!e@)!@*__RjHp}g9ZufIL&F$n{dt<*L zUp;J;(}3_R^TU3R%cfK%BlsP=W-VCG_m1m)XYexf3L5OE2^8ObxwqdVF)V9-J9qJA zmpDk4`j{wIO3#pe(tk-?QW|C-mh@bQUHlFRd%70B6tKW-p-ShbD_EPS> z*v0pU{Xv?ywnuwGakUzZ_9&t^#rrWlZEdpXFRY(Md87D>-a?A+W^ghmfRN?h?x2rx zo@Tx$Xke7`H*4ZWL4`!;IUpsnj2wp%6|mdX@V$-n$-OUdg(o4tdm}v+-8mHe#gz9* SSm`k>$N9uVSN5FSt^WdxoF6Oz literal 0 HcmV?d00001 diff --git a/practice/luhn/__pycache__/luhn.cpython-38.pyc b/practice/luhn/__pycache__/luhn.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..526b67b4c9331c7b13b1b733d9016f35acada112 GIT binary patch literal 526 zcmZXQy-vh149Amx992aZ1}0vhOS>^4bP`A`=$6wh9f(4l6BYd;X%Vn;Z^Cr1)RjkI zW5Uj4|iTHD9I?Q;F1jVf)OcSfqdR64J4rE^*LIz~d2 zP1y@Ud#wZEZwXOlQ$-QZWEB6yGt}oeQf`R(56py^j^VScN}zCB5xW)cdXa{N(a2g0 zF~&mFEesXK$3i>}vf5S5j0PVaPIn(bbIkea#Azt zQ}RQS=@b8>ze2Bl>R;$n&so{7Y>Z6Ri5Sk&%G%ZUo!ztN?0G#mH>2S7dt>?F-khTR zNsZ{0!NxBBdrwe+0;;VvRH;*~bV^Z`R;H0v!(VcZ9R8BBr&?M=QrvXT7@M^g4T)FAVsbLg1Vie4#f?Bc)o2MR8~)<}U0sgFt{9gf(@Ko)Y? z&cYOEsBN&UsE2z)GDy*TN zhs$sU^#WXlYpBn|bQyKr<5Hjz(^uT{O%+M?FS;lD?%}_;g5tgMN%2)sKd7HlpV5+^Q)F2jA-x}{<)_E# zKr=j#3;($%$V@@@tzlbmjHdLseQ>M@n#{i+7hmH`UePEt4R9T+_=I~u`)<3)f91lo zyjHO-4AZwvUbGRH6wF6-g?2Z%M>ou~oHsUSV7;-h;R|ef%rqS4xISxgCclg8MezuS zq8@Gb85Yjo|9=>x^i*W=yFw#Dq(d=_cfnPO!02;0;=*N?$1F#JUcguSpzjQWKCMe) zoQ-s;T7Pvq((M7#RvWD?@eyq19~wRryk%I9*L!Ro;Dfg~tsIsj6uvu2;XjR)oLefE zS}m4Zlbddf59WkL$Sp_6eSbD`F{34;cbwionk`kU`qtK#Ua3`Mrf{{#Gn_m05Cbf9 z6P(1=2$7qkL{7e*3@PpmQKZ{3ZV@8wc>($I0O^&}k&b&kInt$CWoJ__S2ip9&Stfu zm#W+K7{n{mwgU))18zp9A>euh@Qq>9j(Iyd-nFt`+1#q?+dH*7!QRrVc&pb-1+i(`s_T-dX-3!_|R)?DX6lxVRZ%Qyb4_@*rP=G> zNODs1y)~-W>T>DEFbm`KSWqrNf5jp(uWgvzyB{I8GrUO8JVs((jSR+7BW5-3NtX+O z^s|-F*)U;odTERSz=2_4^$$7Y4qzTbQK+976e0{?jANK|;Ka1$&i)W%&_j$tG3+0o z#=hNgOuu9J7TUmaOuIt{7-n6LuzoU;^%(|C&UOwX?kx(rw<+ev@ZC9$uh(rgU7OO1 zv0S$zTz4mOoiJE(o+&*pd%Yvc_403-yUK+uy)cr-?nJm0hq+Abn;d$sgqL25*;dvi z{FW;?C9w`WkyA@2eH1}o7)C#-Yhv)2jMvLC$U`r(oOZ|WZ5Va3x9JMOP2cX~orC$e zk1pi9%iJ7Tkc2#MJczm+EFkmEDMGcAi|sl(ZUE5i8ab};=4iHApe%fmw^Gi=*^ z$Kh#YHlGc1PdsLF(y2#rXM#sDR3V<`^9aqov(TI{UUG`rYJI&L$MQ$XlGZ6Em|R$< zoW?K)n1_bI2q&|cmIZ)$buZQNI<2sB;NhB%`$+9;v`w`zaUMHtq-Fg}vs1g4&l+5N=8!`)T5EWImJ1!6 z9~R^p`=w*p;V&YOUl8X=%#)y!lvpG|l^t<`#6=QR3lWz{P<2pHMM12QxJ-hM?cyql zYb5AUEOZh#NYJTL+#*3Iu82WowTud7B8`Hec$E5Ts+Kwo3J`bh`kAkWGvl;9xm%JeYt>aieHG&N7xnZGGdxa17 e3@mFB=y7ZU?d#Cm-%?@Fqr#x3EGk+mpZy1w;Q)mI literal 0 HcmV?d00001 diff --git a/practice/markdown/__pycache__/markdown.cpython-38.pyc b/practice/markdown/__pycache__/markdown.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..203ce25fc2fe380f675234ac1c3c3ff8d17fe403 GIT binary patch literal 1658 zcmai!&u`N(6vu5RY13>gV~iHY?*WAlv}pXiL=h5*6WRs1RG_NVVGB#!V0Qu{=LQnT ziWA2TP9XjOPKduF2ZY3_{{TW<;MrZ>pdmD`$b2f_8WQF*up);Hb0V#HT8Jzho1 zUf9Oan-e=;MS5uovK5tfF{gd6wI~13p4z3g>1k1dtTlDAH&E06>iYWE9lyg}TNL4x zi+b;W)-7ycS2g?ZI?v>4EJGIwdj$KL^1V`LKRf9%e@W}Yf)g$2XK-v1WuM0#S6!9e zpLA7vqppsg-C|DnL+fOv6P@g6PAANP!5n%{R*+iiohQP&ic<1;0qQoOJA|H-z98@| zonOtclcAf*)Jb(6KfAnCPfTz9ia#vEx0G0(3wGlC8NKWe3*+czKPkzmmR|CQ@>5jO zOMYVKV;B9QIgVZQlVVPG!5_kRJCa@Slfoq7ia(V93M%0Wi0&<^z3vRa_ap^~_phz0J5jmD!yZ+n~KC-OP%@Zoo5x1-wxVyUi%%{YH7m zXtv@w=+X>_8SX%sHy`vO+9-h$_FGZd&dl~EV-3<-d5743IPy>5y~_i}-PZDh7VULI z_eQ`s`n}i8IJZ`Bs^#2g-W!Z|F&Rx~@jWuEBlQ!R+vrgUlZM{og<^@w!%ysxokijEHoC{rExaMZNFKi5}XCqxN*|fM!Bu!a?VOt#%RzZbL=E!P{E1NYaM>TRZ6EC5_kB`MH+(k>t z7hCQt5;yY~p+=^>HlA{*O;#ous_og7kZ>KD{D6DzE13)Ho3(z;bg~tROmvI}y)eR7 zoy?ZB%0@Rd?n#>woe;-*!w|3`je9g-n+a>_18nhRO4Qo|HSW7VcKenjhD%98aam$l zbN_~0qwJ@5lT8^*Rb3jthO3*K;iaazDVtc7H)~KldDN~6;3F$AiMdHkW>Ch7&3<9_ zbwtEfLQ%t8qj2MzWW!mmj^U{zPkof94m|agJaviZW*Q#3Nj9F9>NubV0yRc~8UWNt z3Dl5)K2HNAH^~Nc0f5GsXbXw9Mv1n7Xe%YrmPB+Hi6oyeap1`fvvI8=*BG#E1lt}3 z+Xk@hlwjKu*uC^%a>Hz3YXWQx*$$HJjFRmD*-lEb9f@o^J(=7v8`+hZY#7b;0uc+r zB6vT%3Ep7(Bhy`7RV;_*eTk7+QsnZLgp6zdz0u`ydKcN?7w+hf1Lo+P<^D}Qyxr{C zyG`5LjVqcpxJ|OKR${gWk4$y|aoExWX9p`kcvRc+1Ak9K#Ncd9*z!S}Y)tD_{afL5 zt^pJwUqe(PAPK?zV-cCf1>s9{aQ%m2yl(Ce*awb2X*}fY`})ARV5qZxICr{sZk)JB z15^_PHY05-Al@MXAIXmc69Tt=Nn1D|Hb)19@RyVO$fmu!{fPj30z;3TH*5|9Q?Kd} zuIP7k%hdyu=@_ns^&~(@^SIFPFu0aW122@3r5cV$!bmxHMntJeSp52-epk8!Q6_Gg1( z8c)%&9eglv$8?isDnC2jCOErcZ^E2-OE%ps2P0NWB9>rSaXO6Rb{jWzhn{VFN0_rM zm-(H<0C*^Y3(>*oi2vlbJY8RkG(ud%VT43w*vopf2abhA6+-ZECa&Rl$j0YTR8ZiF z35Vl0g`Y)n4#ffrJY?YKQQ*-LUq-Ql0(ab$BM!?>G@BGf zGlQ}+G#2JFc%=1QaI(-g(gsVtIH`)X=TP{-fa59r*l`q*){OPITSOG3)09O;%TOV literal 0 HcmV?d00001 diff --git a/practice/matching-brackets/__pycache__/matching_brackets.cpython-38.pyc b/practice/matching-brackets/__pycache__/matching_brackets.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5fd56938307685854244858e39160fac32d2b49 GIT binary patch literal 281 zcmYjLI|>3Z5S^%nirabw!9sHZ5kc!k5Swk5m_!Zh?uJYR?Y)VWSK8Ji*jYJo@$=xl znR&cnW*tRcAY7CFc0lzWhJQ3@m=Uo@qCl|=B%m5A7&av%>x0k-&WYF}Q9v0M-$;_4 zDeTdw=$$EcF2vsQT=F$)hg^&|LY0N#3yqmCE!QXQq`{n9C!{x0^IUkjr|r>(oJ@QC tI_bw5+jG@1m|9_+R^bYU?}51{X*{g!?|j{bNY$R?r8*w;G;BSH@B&pgJm~-c literal 0 HcmV?d00001 diff --git a/practice/matching-brackets/__pycache__/matching_brackets_test.cpython-38-pytest-6.2.4.pyc b/practice/matching-brackets/__pycache__/matching_brackets_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..81644101b431febae23aca6b531bf18920398f40 GIT binary patch literal 4592 zcmbW5OK;mo5P(VQVM>P{oy7(o>aeuO# z@Ri1!6a3iEQ2+;gldJN+7L1g@@tl#aX87PqwwlE!LUY0pt0K>R%Rvg#Z#YPk><_uu zscIhh?>Ra17xu)R%Dk7;ZKb8^lz_&X!k2(IC-|}dKtcQ=s{-&Kyy2>;pxbI1GLXgl z3`~HCItw|-qn?0CD4-T$3htrK!8FXE&ciIsp`L_!SU_EXMOZ>T1;neu^o*^M+O)B&I0=kKlTEOpSfQ-hX?*Odia~b!ihblPH%)-qjD>Fld5eK>U{HK zTWwMnnp@sW+oXAM%TW<;|2`|9;ScPxS~^$3GWGIvV!v{%R+)4N)pXk^w~)orHBvVE za8J(rbi)>9(4sg9TxxZ_HTI=HMT(81Q!@O~6k}&B9Dno4IFCy)#)+cgaTUs`I8W939iK zw#iUauGEW3%6Hb!weDOg*H=37w^WU+hhSp@+fSPj<7BjHx7LtjLc8gQwxv=>SDVf5 zVBrt8g{=_rL3DT{?UO@)IL5Yaw3J!Z8$8ueN?HH&So&fBx!XCcpy@8sE-P7>1B8gZwC;1%Xr zmSU)8_r10LGz1>A)+6l`GRwud#S$C-Bf3Bmi>Pt49XkZFa15Sf={2RSno6TaZY*S=RuUe%rMWGvm!Ug Ii9#Xs9{{q0^Z)<= literal 0 HcmV?d00001 diff --git a/practice/matrix/__pycache__/matrix.cpython-38.pyc b/practice/matrix/__pycache__/matrix.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43a0f9bbaf5dfde0b8db1246eb1f29a0fea8309a GIT binary patch literal 657 zcmb7Cy-veG48F@HX{d;h7;A~kUK!A(U1rL0T9*l5D(E2xNqw`Hhv%OKy5tj(#q60Q( zJ3ia7$Z1`pie(a(c1#)^uI@BxweIsQUKpiKoK9|2sH;4_Qs%y?SFzeCo#m#CS31p_ zJX3MEVjm`}r#6r>ukuDp5@4(%{(RI4ob%_YIcq$`K^~%pf=wswMSK<>qkm@ zrtzK$%l{$Kqn@rKu)F=NF4kog4AzJH^<8Hc`E=hZEtQn*Sjw`7bwT-|ln?8)=sMb` qGZy8*{zH;Ky^r;Ajo(*^)0%2>jh}-zvP#c_ggcmgVfnZ-Q1$67b1}8ln=N|(Gd(hN#5Mpf4GdShO8{(N-r&r=-Zo#{_`{dm0rnHrzj&oDu_H@NpO338tUn75znle5H1>-@#4VM@+#%0dO=`0gU8`MKSBeQVKPUBOXMDFdB@)=r)+SO#XfmqC)boVqpfh|5Xem z68d8qkcdudX~*aC`$Y|`x1l1mI_|dH0?68KXHyr(Acj() z$$-^iF>X8ac)vtRt53o7sK}GTAy`6Tx4x3vj75GZ7)u?-!kCW+_+DcSZ*M&#uVXl0 zp}2+OTNHRAwg6PU0x-=g^2tnsAs7tqy7%8Gnt0V~6`3VzW>dF(?n6QfwJ?YM8 z>zueuk{LtXtHoi1^-0YbAvSBIo1-YEf*Y%t3U@4xWPqa|$P>3nH$hPhGePk{siuuK zaL`aIOPN95IWHYp$3?amsx_MD;EulSI9$L=?Hb-$A-$HsY2BRxIqC&nd2ubD>VYwADwf1KSAwJ zY?QAGH15G)J^;fAqao=~Rcd`*Bb4+j9fRg~%#I0nw6NN@Iu<2g5vH@sE5a(=e71C? zcWR7&PqvM};7O#tO*6}nqB!vr-o>8sr9tB!{N*b!T)nZQG0L=8q@(9g?Npe-OlTXd z$}A{Nw!~^sR@pMELus)UwhHAETVv}`*4PGXK)KA$uuUlI>?}J6S}Mq8koQr&j!j_$f{s=JQ62oX;Xg@}g{ zdu|_E`|a;fkZ9F<@a)!J9Uaf z5lN=@n^xLydOJ11|Bjs+uG2cr{hLZh`>_bpI7{r*vj!Ht;=-Wk3yU=1MVfOE(w^f6!%I))2z z7R`Ayb0hWjY0MK&L|2VsxBGqy6SEg&1gE`<apGcr*Apni})1W^a%Ww)Fb zv|6{F+ovo^P0{O$Sjtb32MU1D3SFo5H|fQhY}DW>*m$fd<$Ma2l5#LuQfBl_(2j}8 z2_`0Nxn~yYskc)Tk;B$C6$Mp}+R*J_KVGQ`TO0N^lr860s|EdT>y`th3mu=qICa0( zfi_ zkmw8yXL$>#U?&_Z5ZqiBJE4Bs8J_1Cqm0t~{7#vgTHD!K#(2g%tT0b17Pwt3@N4?p z=C3r#!vma%N0gEu$!+o-c|@L~2=t`#l0E~?CMq$)9&A4|S!Ii`v3kw6+KO=I05=VY zVFr0}^YK2ncVk~LJCJq|J@>RT{t&+ltAZTm^6>8Sv}7qANhggGOPXIheQ4l z&Q_t4N@2kBvPyC|;Mo#?(dC0Ah@-3m>o1QrQN_DD7h*C^%L5h*_Vzfw&I@^T7skp} zFof3W1=@hUQX|^m>FnV3&eZuX{RSSF?-_9EdhSxpC>M682JS4M4;!7A+P~03-ygoA=lxMcL8=2*Kk>BT@m(@J4AG2YI^}6R_ zil5&R_?0Eb024NCJGOOPk9C}4-%Nrb`gPOU%Ks8Ol4@8iFkczIX zI_j&zWaUp^WY#bW5^QA4{qdKH(qm>lhW`6LeAyt@StK&+i`;p4QM)QES)@TMt#14S Dw!&F{ literal 0 HcmV?d00001 diff --git a/practice/nth-prime/__pycache__/nth_prime.cpython-38.pyc b/practice/nth-prime/__pycache__/nth_prime.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c667a14ac47c9a5af2c7f56b64f656acb724ee85 GIT binary patch literal 255 zcmWIL<>g`kg2ho{X)-|iF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEw3~;DYd8wqyS9(a?lSgPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitC$E6LC;D9X$Qv*N)ly@JYHtY8+%#A1*e85oN|w)$y8 cXoOV|7Bf)p7Kcr4eoARhsvStzXCP((0QwO!vH$=8 literal 0 HcmV?d00001 diff --git a/practice/nth-prime/__pycache__/nth_prime_test.cpython-38-pytest-6.2.4.pyc b/practice/nth-prime/__pycache__/nth_prime_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..554899e8df44a8487f5a44d027caca4712d35e3d GIT binary patch literal 2183 zcmbVO&u<$=6rNfCT03@{q-mR|O6voqG6=g8>WL6VYNK*M5hN`|E1}iKGf6hsyY9?b zO{{Qo?ua8dDo**A=E`X$_y;&3-ZvYk&W|FLwf5ULzutWF&3jLN)o9chJ--KccmFCe z_6Hi%Pmvny^y;q(1QWc+0`9(Ezu+;>`o*Bc^O15;rV+1K>HC3CeFafGVL|l;6D3hT zVWKR{2eok_m=S!NwJI5TWSghlmIf;B%PvRz?14>m*fVL9@Be|jlJh= z3^&EmM_bYiRic|wvlnaAOm~}RUp9ARMUABCoa+nTJ#vVHZNvK_!5%wiKh%HXh8^=U z|HXS#+-9dtVP4C#Ui*pVvBC-me{XbNX{mH4YVSlMP2$dTsed%-pd$~Z>c+a?8K|gh z;;!r@X8$wC09NR%&`53CgCkp81>bJkAFR!S2{tG*kBuJY^Hh}V$@Xe5?M6MlM#f}z z26j#6w<2aloxZ+k&~41x`li|c2KV`rPI*Cfkj4?+okI0v_8T)?kmAC7=OKv5 zLt#@@X)FV$Q_s#snxr-xZ-!A%70}0RQOn-$%8z{1WEfPFi-;MC7FI(5wlm2Ukf=PrVVVtV|nZ4RHA&t6V7^A5H=i z`86SRjZ#xHZ^S8{f6Q3?_*ecPoMxR;JMmsF)BPz%_pi!yKJNk_L<~a5#n)G4{RR1p$c%X2I z3}^yA2fVK+&Vqyr=?(ETin-7I!r9MvBdxmicZPA##EG``^}$hi-dYX^N06hP$0|i& zTgkU7HWZZSUA8jmtI=YoUZku)Ok#sZP)#OvBadv5u>MOLdKOWscD3gk*4AIm1z1BY QX#DH&*#h&uddV;S3t}SeNB{r; literal 0 HcmV?d00001 diff --git a/practice/ocr-numbers/__pycache__/ocr_numbers.cpython-38.pyc b/practice/ocr-numbers/__pycache__/ocr_numbers.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb794ed038182caad0d28ee67dc967133cb7e392 GIT binary patch literal 265 zcmWIL<>g`kg2ho{Y05zQF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%m6=yiS`wdLl$lZlQUoS`x#))$rxq3KC+a07rsU^k>bs;C zXP4v`=%-es7A0pE=js;}B_@|-Ca3D>Cl~4FmF6aalmprEP_|w{0L28!B65(F(!C(Wy^P;^0a*A88YRF_l} z3+lc5%vrp}Q`^|D^hEIow^BP>gSH?Hq zoYu5Iu+V*(P*{a0ybFS9j8wG>k*QuYbd6{=vyvgIC0ofti(Vb7SrvcPHc8?kH}HSrB66{!`_iGX3Qzbe2rehA=!`J^l~ys-pcRv4 zSQg3|HpDDQvn8WS1ZvVVBtzNYAjV%!YK7U1QfFJ=T^ zVSWgnJMe^;K(w^qw20se5dEgPLs;gujX;? z=kikEircC)wkm_n4yBZ!KUvuc}S;mh7f1fNYg&J-l-#<2W9{?DH$*l z2Fx{qbm6*NF)5226hr|9B2eNKltk3jXH5X%EYG};i&1Y$-(Yyw0oaMC@p(jRA8 zveWPdcbKzY<#fFfQ8y4kZdBc-A<)aH=hqui2!uxs;h*hV$7(OC(+qZCov1$~RBpyK z$f(Wun*1{MGl}GD#f(j3hY;;+ZC?9Id!&7XeT>L#k*&-Qi3qZQHCW!tGIK&Zuzdv{ z5+Z{F)hKZLH%sc}u!9X-F4V4iJ`Zg#wEZBm9lO@3Mqa(jvBO5t5W7QhQEm1|ju-MU z&OdXi4Sr7upbgg`@Suv#XuHni9DnKZdgKLuY&v2y+|@-9TMaJ6;XU(E>Ox|mFTChE zb=o_h1{+j@qS13FqFzV=8MJngVLKwDLIR?WPht2#jKfSJZb!{1lJjJgm?W?1Z=1B2 z+D>rZ{#tzqSQ4#{Ct7X4Xanoj0KIna_@)WxkS%3PDRt(sQr)21sQG==8a)@Bi*o=@ zTtso`Wqy2|V%h^AqZ&E-Vcpm;PokR(`?^_Ap_~6W^#S#ywE)eFNHtuvOR6HZv9Sd| zun&n;8K_Absce)I8!7(wI>X9Q4~a^yT%LxzJU!k2B%3&V&L{u*2&opGG5 zKl)qU(*JIL*o*Kk+ma0PztAR`OPJZG4eF7_F52u~w27;*swU90Ql4HZuN*_qjHGAN z5pc+}#G-mW93x>QJb#lqg2NGCuR1Pt!1HJESl&MC#apWJ--%Fpl%qQ$JrP@;=P{Y- zzdw#R4KwH{4r-BS1_ld`lXM!o&nIPfuETt7oUS;x-c-<{yP?D9K-ZC*jc z3x++h?JD1q*xo`rBu#dU+VD#(IGQSK$2w)(WiQpP{-MUlIeK4}e0gSeZhm2LY55pS zHhI|4x9t}=!Hm0J&8c?G+jq!ZU&FuD%Ybzm{=UN=;TS$gsG#K*WR!c`iJ&2c=%1Mw z`$ODsZWbY;&L_cIVXc`%E+oU4ZPP2Wib>T$64uN~X9;QV^o0t@CJMq4lta}X0mo|= zfYw{U>n$L*|IT|LdF{m7A+I~aiNF2C1G6?c7F(41PK{F<=P9iPtO4OJjf<4xHw)Dw zP?cg71@0Sh8O0S8Hi~N~-be8Pib)h7qqvQtgrbaM7R4Njc@+EMgv?U)DA-o7e z(4;CJ>eS`o&r;ovh^>b2MOdg5g8h#zGLnt0Cs2RKfe$x`x7R{q>k~!grx;d;7OqAc J)hxZ3`4_WO)XM+> literal 0 HcmV?d00001 diff --git a/practice/octal/__pycache__/octal.cpython-38.pyc b/practice/octal/__pycache__/octal.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0efe2e398780352f954395f663fb634df75b182 GIT binary patch literal 253 zcmWIL<>g`kg2ho{X-Yu)F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEhRHOv!u8PqyS9(vd|ALPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitC$PcBK!fslFymAAMH5{rscB?EnA( literal 0 HcmV?d00001 diff --git a/practice/octal/__pycache__/octal_test.cpython-38-pytest-6.2.4.pyc b/practice/octal/__pycache__/octal_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f3342b406bdc29915e6dfce1291311e7d228edf GIT binary patch literal 2907 zcmb`JOK;pZ5P&IZA6o6M6FZ3=rzxT~X$?2P?#kN-uJ3qgyttwxV6 zsjVN#&AIn4#OTRCq<=!!p7t;F)EQ~*$o6i~8j&ClMRCY)hMFN?G@BNI>rZ!jXR<=b z-}q9zO7OA{k9q|KCobU{*8|PfGiih+ooFO1yA>_}Qgy5F#R$x>=GHXwJ>ex@eoJ^+ zRDZRO4Yw{Dyz*L?TcY}|c>=mz|C!8JkN(;cDpB@MEbU}Z*s+(ez!nEWdcG2t^*rna zA{0@=5jl2xb`sk?CY7N1ARddLyS**)R&Fz8vuHR& z)DO3Xv<~CGw0kn%l`OQ?Ufd73Eg8&gGy4}7^u;qNfo$JT_MjycEP@$#`aqbqhe9c~ zD_Yh7oJ2O}wX|L!@UXFX>F}}+kK#}W;%ea6%%5+GYjA^?K!VqJ1!S35xe2nuYuo}^ z<#pZwY4RqY09oTV_)U-&pX5^@>--kK4YI-S@M(}uJ_G)}o7R3rkD`-34Q4&Nu#QXo z6drXOiZ|pPNi?n8R$Zvlq)axYfwTH_YwtJF!iSLPawnBMH6JTrg4%1nzMP2H z=Z7qyP7_8~I3v-H9-iCN8r%PRmg-JtV8R>{!hy)FhGu29$vV{1d&L<$Ma0#c@cj(& z(P+er3fE$Eb!TO81EIz;eo|yyDKa`sw+fJ7jE20VaXm`I>2?N~H^yV$FJg8tx@L8{ z!1?89&dVy-11&9d7FYZ^2!!#Z4+^B%{enw7%iY-m?EFaBQCipItvU3W=P7c}D`<*}4oFhnWuGrSRh2$UhSN;RWumF0IN36h8vK zTUuUOT^kRdM=bUk;qbW&;Fn`|jM5e8|FR*uM#pgm_`{74*@eu{*`F}v?I7#nY3mp#G5kG^rFw;scxVX_zo zn_^cS%m#m??Tar=M4I@_t3@B3PH6oKarZ0Ml2MRrWU1P z%=-b>8BjHST$9@2oXIGnoE*>%BvI{x(Z{hq%J6+)!{%ONxEzCnBw# zH>K6HHVc%qAA-r$>_YY~;#g1pqeH1ug&p delta 19 Zcmeyt^@EEml$V!_0SJ~~-^i863II121vCHv diff --git a/practice/pangram/__pycache__/pangram.cpython-38.pyc b/practice/pangram/__pycache__/pangram.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8c4b0821937611f4edea69feba0fa9d8c7d4e8a GIT binary patch literal 258 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 literal 0 HcmV?d00001 diff --git a/practice/perfect-numbers/__pycache__/perfect_numbers_test.cpython-38-pytest-6.2.4.pyc b/practice/perfect-numbers/__pycache__/perfect_numbers_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c2112cd7bd37e3acd0b08c2f561dd0fd31e19b64 GIT binary patch literal 4476 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 literal 0 HcmV?d00001 diff --git a/practice/pig-latin/__pycache__/pig_latin.cpython-38.pyc b/practice/pig-latin/__pycache__/pig_latin.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..591576525df7a261def8f4c6018b5bec9791b65b GIT binary patch literal 257 zcmWIL<>g`kg2ho{X>vgNF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIr6jeYqzEJpCVn~ShZd(673(MJB_*ch=Vj`KA0D>*geuWafcb@nDu-LFFyZlA^@CVjwpaWNIoX8D004a-Glc*E literal 0 HcmV?d00001 diff --git a/practice/pig-latin/__pycache__/pig_latin_test.cpython-38-pytest-6.2.4.pyc b/practice/pig-latin/__pycache__/pig_latin_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a8153615bb3ae92edf1a6fbef0c3952249355915 GIT binary patch literal 5037 zcmbVQ%Wm676eT55qHNi5Y{!Y6m-A}kJmeN=5um6Gqe&XHNR0wbHnSOwdB-Lrilm0a zS`4~NKBPrg`Gej-_KJMvb1hBvkEoPV87&aT0Z4Fz@u_tHRtc_TT!c%= zD{vXEAfJV+u#LP5*Wfzx8r*=J$m?(mK0`hSx8V-*2JFCHyW5kAo-*qGNs%XrGHEQcah(>{qv|9{bbV znAvYip_qdpaz*2%+5}{C0$nWCD3vRCeom#*OsNwbhjGk0C7G!W*5+3m7^yAV@!?D9 zY35GYOmDm~zuwqLFLSa8q+*?t%+zL^^Q+B_)E17Uo0D})s#E*b^!tVX8lT9JiwO8p z9EMoI`!MH%kFrY@Bj3$<`_*)3-jZfDp7^8u;3C+}w)&Bfy z$EGonOL}KwZb`L@_sTfVd606gB&MXm!(brsiS&Ls;X-q~nJalve1zvIH!2gjcd5{i z9|yW=w}w%r{9OA(iYkAoYVU;osjlC>cTOBjeElrFei#cc%u+4Y_m#=~X*T0C_H5?8 zG0a&jAJ)a@-FKcv%2SDkaH6F~D?Es}K8a6jG_5~W+&%o1yBYd0^6_eUlm*^k`$(jE zTV>I!b*#}NavKjEA!SkRs=QWu#Mt!XQ1S$q@KiplnA!f=%>VyO28uVrq-vBEe;X zD+H7jsA~lD!mVx)+$8vr@s}k^`&AQxuASaTaBa6a>#uCNvsk!?SrFpKkF@CRCpmv# z+vG`3!`PpEX$j(}ujGjev@E*s4;7u$V++`LGU}>uvnarjN;T^yr(aack2Hn*9FIQ2 c*(k66DMN+(&19^g`kg2ho{Y1TmcF^Gc(44TZzAUPNSu^EBb z8HkHnfJ6!dPz|HsN(N1)D4vwO#Q5TpqQtzEctaGPQ4vTJnE2(RA6lGRRIHz2 zpO>lcl3JWyl3$>oT9I0moLQW!Ur>~oT#}ibs$Yl9``Z4B^Ma`FaJF zw*)d0b8|EE(&JMyi%Syol2btz6@#73Si}ru`)NXGgbN@nkdj**Ho5sJr8%i~AYGq< Gm;nHa{zGH{ literal 0 HcmV?d00001 diff --git a/practice/point-mutations/__pycache__/point_mutations_test.cpython-38-pytest-6.2.4.pyc b/practice/point-mutations/__pycache__/point_mutations_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e597ce0722b349a5c18a25f511230850a9d6151 GIT binary patch literal 2570 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 delta 19 ZcmeBE?Nj9n<>lpK0D?2yH*&QI0RSvJ1ikg`kg2ho{X|h22F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIwJb5GG_?pM4<>$j=!X`k78UC!>Ln$nK7CxCYNL;rve$7xv9EoKwdsj1DF>N<>?hv-eQNcL1q_&9LvC11hU>w d6G9^_g|L``a<@2aa`RJ4b5iX}J^YOIb?=XCR^LHmN zUB>>Rg84MCaEO2P7!5G6V&+>qwWp5FEH-WUu2s}D{U+Afack=Np2faq;6URwgNA56 zZ@+T<4p`r@19yQvvGIYGw+nr~8uC+V`Hk7Fnrmsv0Gta>(F`MBQGUF_grPr*8|Okb&giNV8U ziwyZy7z(X?TaTjQc`~0K3%P}_mr#4vQ0C|Fi{%hUE!IF|1xcDc6OxGvAb)4M5jG>+l_KAI=pEF))!8X>??rK_vVI&1lCp;*KX2mR>RI@Rl^c-6MNFi-o(s*l|^kGQ(KR4*E8>E=5T&& zDtp_2-LHmSY4Lw3ZxQAC2)MnftP)|GKq2ji2JQW7T0>g1Wr>=Wu-29oSk)HQZ5ZlC zFL3EE^b)IGXQhb9o<;H;d(XhWJR*#SCF=UM<``?OF$mY@V>E)hp!&q{q-J9*wJD+3&jX?x^WctS zI&0p!gU`Nai!MPQVPHgm{Ept#E{r`rCCdXmO2T*!0yp+JkSC&;kfGtl=hgGEw*B~E zGxs=8f~nvJi_(D4PD!F+afOP~WGKat zGRj2WzIc_lmhU>)SSuRH+?yv+Mg_mG!(n+F(l@Z&dxAAb0baX^v&wZ5kcoJ+NF!cCPJ`nN-l!#{)v;n)YVULbMnqw?1T62 z-SIBDGz`ZKanGj58P+E?efZd{kT5}!OnNt#G3jqv6yzR`I*=!>kuX4!3^QKxK*@&S ztf-`=z*pWoo`SN#MSKv_RGM!ToSdn-x+t4#D0yu~?sTru7^ieKrzfBgPMfNm?R&Gh kzBZ#@7U(0O)0t-j)Ff)_|AN+0q!}$rBhQ6e($)*fK5oT4H2?qr literal 0 HcmV?d00001 diff --git a/practice/protein-translation/__pycache__/protein_translation_test.cpython-38-pytest-6.2.4.pyc b/practice/protein-translation/__pycache__/protein_translation_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5ad009dde385f2c3a57e40c92e6b4854c9f9bc4 GIT binary patch literal 6541 zcmb_hS#R4$5GJXMmaq7T?7OfG$7Lc+C7PMw1Z&gb}2C{ga zfgGr)voHdA)HxW1G1MxI!vyLPn1oBH^DqU|s7GN2W>Js9Wtc-f4)d^pdIA<<3H2l_ z!wTw4a0RZSo`P$zih3HZ!wu9ka1(B!o`u_R2lZvR3-?gZ!5Z90Jr57y6Vwav5Y|yI z!UjA-y#$+3K)noG$iicH?wOB%U+9)?>W)#j_POm;WrW;0Qg}ihDB;h(iUQI$$#!JKX-+sW&$G8!oDbUE62~ zz3LcMjwhZEA3CQnI`>%M9&-@edZXp8&f-j!|#5Sk#wIHNVqaZ~! zlmM=hm>}~nj;1i55Sl^)Xo_y`JKn5D`e)hmkLkbGbd}jPY!9FKB*RK6w&3!-cgH8$kJ@01D5O01y#OgL$BQVGnG*NCH5_ zJhzJN`#Uq-n<*h-gnP3rZY}UQXBGamy;$yY^7Kx@S$iwKZ6zv9n8kOi9_MgJ87q3-C+m($gpq=e?%eP zsWQ9_;>Lu$KM3w&I|*lCusTi_2|yY|wA+h=62UPL+L^?kqdH`~3X*{(m*+9b2<<4G zkX1CHojy~c=`(#gEO0J99TuT6QW}<;W5IblaysPv5+nz+sg@8qeYy&#XRvq~@#BSt zO?1fkS+z5q!@}CISj_-1xfeBk?EN)J4aQAmR*l_TI6H%9)oEe~^D53fMNF`iVSTE+ zRd)2gXJ?>bIzyUmyy=Oi--483zWp&yG@aAe?%Im0GG^&D&X}8LtX796dXu?hj8P%j zeB0<$kF+<`qi8&Hf^AigsmPjm>DpLX;p+h?^vCk+@BQsypH? ziF+j0NZcnuWs^WL)hnw~MO9GAn@;Qk3RPA!!~J>RuZ_CuLDMiD{NI8*w%us4?$sh| zw8)q1eoY+1e_im`!f?1d(!J&8I`{JUvFCbSxN6ff9J?Xg`kg2ho{X%ayCF^Gc(44TZzKoJzc2;?~f zaWM;!NMQh~Vf0(cPy`Z25Wj5nLyJ?3iuDuqk`hz$^D^~aQj4=o@(c7+D^iP+GmCTe z3yKnxOEQyFfsFjJ)S@I9tyfTaiybNkGPD@vI0nWdW+3UO384`dL0BLqw>WHa^HWN5 MQtd#xJ_9iW0EqN25C8xG literal 0 HcmV?d00001 diff --git a/practice/proverb/__pycache__/proverb_test.cpython-38-pytest-6.2.4.pyc b/practice/proverb/__pycache__/proverb_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e639be403bd93c70c81dfa5c2cefc0685a669639 GIT binary patch literal 2911 zcma)8OOx9~5T21_Yy8+J5J)x;Ln_&F4qmF@L{YG*1h{~UDw2yXDy?U%6_F)nMrK)8 zIFU2I0g6+80sm#LocIa2V4-^?+wyw7yK=eb)zdRye?2|(d}E_Y;QQUXG5lkLkUz0e z{TyfQK_Ti#+_&utF8zB0ZivKq!s8^0iD|+or8D!+DU>ambl*Z z-s6OKf;jFBQ`yOnMdu_)@=iMJ1RYfB$r@-$7X_j(LBd~)2ffc&~(J3Lq+2C$y z&q1;Rq}+ySx^|pOh(4rFV$e(ktX2{R(aITbgwC9*X5X{3DDmuYoOrHEV-9In;_eJ3ll#j~166ZGL3`nW$vL)g z5M5PTt0p1(Un$vmNZ>l4Q4M4#+Sa%Q9p8qZEQKi6(-74#3nd2twOc-~R(% z-(NW_7u#6z|NJ_;Fss{mp>d~@)obPPz|5ca{D5=8zd=V-t^n$sO+H$2z}0qEoN@ge(lCyxWDvex$ss%EbBMeFTbA#l zFyVO+$1DoE9ZMgr`4@(3gWWQR3xTB=8P+ z1|}~*#)sGR=h`Lu-Iiv)p9CY}`?~34Adh3Lw|&EFF(TWDZVLs5w#4gQ;?qjrLxE8# z@1sC&DgvJd(guNdhq*u)We%&eCTp=Rw#i&G+HGofG>+mtN|bINW~ctVb<@vI(RaP# zQ3e6mlj1~1xzLSymv(1;O_*G`T52{39x?3G0{&;n OqhcT!*(Jg`kg2ho{X&ONKF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEw3~;DYd8wqyS9(3egWOPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitA=s4U4yOwTV$P0Z6RDatI!Ni9JZi-(Ho6;$35gtCj{ x%QH(d;)_djK{ghH{J_9i1ag(1CWJ;f1;Szm%H86y$<0qG%}KQb>G}-B3;?8CK!pGR literal 0 HcmV?d00001 diff --git a/practice/pythagorean-triplet/__pycache__/pythagorean_triplet_test.cpython-38-pytest-6.2.4.pyc b/practice/pythagorean-triplet/__pycache__/pythagorean_triplet_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8adaeb8066f6527b896eac3a1801d2b646bcd77 GIT binary patch literal 2413 zcmbtW&u<$=6rNrGTDx}QByE}iEfPX17K**8pafB&NGXB?vMMz_bcGmgJQI7`_1c|T zlcwU<3L%7q;4c7iA-Db+J#j#s_JqWRy&+BrP}T3PYscW&742I7=6y4}Gw*%-=FMKO zR7woj_ulIMH+jZ>B{F$sLALQXR{(+uD`1|LwstpTGmCYzUd|ehIX71{6Iw=ZU)^J4NYD)$Tt4z@-ki8 zvxOz>`^?J>r}wfVC-UGqQ4kK=yeNti+JZPG%4i)?5esOGViC(% zp$EItL@jG#VX`3y+o82z0({E8WsxPUdsv&+ZD-oncQyr1AvKdS?nyEPq*#&z9NBTz zH%97cr#A?r_ihjTKvO_RR-835*gs;L9{cM?<2vp#4ZptUi(aT2SERWW_4*BYN9vX` z-9}>w^`}mVS9wDH5|1dsB#;6xMcX~#W&|De5d9i}k4SB?@yKkJV zN`3AG&!<^{g_9QvUM1K7XorAOGL>csegryO@8Rw?@)N236SSrZ zY}NqG%368bvHtb@(|&Y!?w+4H@09vfc~bQ+!}$N|w{v5amzv5QAnpg)c|JREfQ zq{e*AECc?d-rrBtZRU*4S}Aro5B;v>JT7tG?TJA^cA0ZJ=Y}JC0c&ciW||6vMs!S{ zCrEc6ZOe%=PiLW~^w-EvM$FLjc-5KlZ!sOKor;~kfeIoOnz+2(KjdS!&ijW{rs~6! zSM|cWmIqozGA@q0;=-t}goo3r=IhuQgeoH9t)O%Cg)pjd>B${CyBOc`aa@y+CpjNG Vmxp4!OWy#7DvZOHnPZo8j{&XJRUH5T literal 0 HcmV?d00001 diff --git a/practice/queen-attack/__pycache__/queen_attack.cpython-38.pyc b/practice/queen-attack/__pycache__/queen_attack.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57c59f5197e776bbea389c75efd4f084a6567b5c GIT binary patch literal 573 zcmZutOHRWu5Vi9up`r+}V8sQppt%4-l|ZnogsN_`v5f7CsEHHol;4)#gjKKPEk|I- ziW!Gc5RCL@=FP-;&z_G)Ljv)dA1&^oz9IP;A&?2c9zwbzl1RD+yaYLs!HlG#fcdWo zfK34Q7?L76l_U=&mBE_ip$ugNHIgx$9k}>;L(MD2m>V)y)pAv0zsKOuyzDk6LHS)w-!Ig4sAkYE b!oP4rlh9A5DfRWgBQ81Zl+N(nJAixw`(t)- literal 0 HcmV?d00001 diff --git a/practice/queen-attack/__pycache__/queen_attack_test.cpython-38-pytest-6.2.4.pyc b/practice/queen-attack/__pycache__/queen_attack_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8d786709594103334d02081b4b5b24cf8ae741e GIT binary patch literal 4198 zcmcgvNpIUm6y}hWM9cD?IC1Q_io3xLBBf0mpheKS$cD6lfTT`Z=t9t%kwu3hnZk|>3e<)APHzM0`Hdf(gU<}&XmzukB5EdGPQ#4uW$IShBHB}p8q|ENQIn;2CXS49 zmXhDJ^;8>9(n=>JNjZz$*@cF!^_7of4|Q)yjrCvTV{6O~W`vGt`1M zO($p;+6;ipfhw9+AN);^UzMx1$qVA9KA{xp`D`F=yhnP=@PvG?F?O} zE6~o;o51R7G$UF3ISif3>rE!Y3IU!v5B3dsAHpl9frKC*N{)1t2W;0%ZN$Qn09;cr zuX>_!3x@yxT6`%O7e%MA<3+JC)F_u;MOC>5e0LPy<^H z><~CAG!CLXc5J!M-gm>A?bv&c=Tf^72sd;CADI)#hDKU<2Ot&B+uVm451D{hV*Uj> zhuS+WB*)~h**{4r)r9ze*S^!9YcI4vaNY>bL$Z@PBCrnT@C%N2($rW2>%ebPUa3<1 z{psl`PrdkH9y^mGbby~ZSSC=1 z8p)9>WS+FX9wE`>GcHr4$Z8wictE6qpWg}`PI(UJ7Lef5b7cV{umj(gd#}NUkC8?E zj7yY-vMdO5XR=tR1YWc5_gUC*aeOw~G}Ku)Kaj|`7qbp^%w-A%mB<$pg>t@)Bnw4> z=$gr=A1Rc9WBP=G@d3S92BJ0Ss6d2y;z)m|hXgW(aikxUz5t^v01>y-K%Sf!k);C0 zGoj)~w&M6_@s;C}L8q9PRsf42ES;_U3YK-E>sq3=`<7o21^^iWgD=CMZ}Ju7G>P5i z4!fP40j?{Yx{PFZVtn5o#&^QL3j#1uBZGR7Dv*I5$p`?e!vHAbxEsSz7#Bl=j}12` z$mi0W^r3pdy&M6JfT8kA&$iGvsxF5FLtSS(@Ez}73`ufE8MS*%otz7%jY+hPh(>@} zOVSCe1U~JexgSIG%{Y4L-+o~@%EXLrEn$|FtA9QkNs?N^n#+4YzK;PJM=kxk$HdVK zS*CQAR2N6O#1TRpL!C_E=Q(_mZmL0(Lsi(Zvu+~)3ESZe9Lqbf!x~dzZokHSo3pCNDj}n`Q{jOSa@q_0Z7iDy zPx+}U9iw$P%yKV-kv=*1)!nav#ctiba#nYvYa6lxhu$$6sKL!J1vPg%R)b?rp5Dn& z9cu6o{RSgI>;5xe-Xrq6cm+8t!UO*YC>+C@`Y7_Qp9g8@F{$JQRNb7dTYL((bG&uP zq{>&ZH-lsr36{`&9!XN!87nD-Qex*CWA`H9W7sY4Tv&zYp$a!imgw(WBdV?8hn3dn zBFnaY%!_uEwe5O9n;!OaHe9P5Pt9<=D)XyIt|M7Oas$aHNb*Rq65&|y@Gp>jiDVrK z776?|l3tZ9dwA{OSf67ZE-;Z>x@A~t`O82r{!7c1>yweS)pWhk^+lB1XdKwx(URRb zKyN9iss`>n1K5GeTr-!o))dZeH># Xk$@qx9w@Q>m_i`9!qVmeOfK~weFGi0 literal 0 HcmV?d00001 diff --git a/practice/rail-fence-cipher/__pycache__/rail_fence_cipher.cpython-38.pyc b/practice/rail-fence-cipher/__pycache__/rail_fence_cipher.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10533885739726799b2f4716a47dddff3d29df6a GIT binary patch literal 402 zcmah^u};H4481#&v_h&_5dV;&y&pgb3FZo^bjcDOXBQ%xCbEkJJAcB|U&_i~FkxRQ zbi)(b#HabA{!pWeeLh%1)NhQfu>8i8+D^UM9C;if& nZ_0%Z1)!c%d^j}{JTF~3NlK11>DNg(zHB>qS>x5O%W?J%S4>WB literal 0 HcmV?d00001 diff --git a/practice/rail-fence-cipher/__pycache__/rail_fence_cipher_test.cpython-38-pytest-6.2.4.pyc b/practice/rail-fence-cipher/__pycache__/rail_fence_cipher_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c9e745bde3e280b4a17790828b4a68ca380b09c GIT binary patch literal 2084 zcmbVNOK;;g5T@jp>^R#^x(JZAD9}R>IjkMok{>`&#ITu0fFFS6JfI8VHJL`cw(L@J zvsv`E`$Jmvl)t2FPyP!%w4IUStlM=KfhllE&TxkOW`?7)?d=?a_J^}~^+k%1KXI|z zlCU_2?wDAA}+5-L&1B58d$z93-0V>{`fy@Pm;8c9#w3-~`fy?(YHl zmHb8m1&@2L^2F~d0tHjauCsgD`~SDVyMkcZddqgFhA)P`FJ#b}j{~>udV>BuAC6@L z6z-HT>5K8z9g!G`zs`zhu+uLN3$KQJ>bb?1@ZSW}Sy8+da^(7x;!F-lfjbgK32^A%gCoFa{yK#eS7Tio3TJWF2u|D3NDDMhuTvT{mbyM%{ zU(iOMwk*5ZJEt%?X;a!5^tw&DK%Y1uZ}!^*O8YIlN9hS|^qLLpyhXb*4RWa=L3hPu z3ufUrpI-A?3K3)6fgL_-5hbZ;ME&R8;nR?QG_fhxEWM=tre#xmfse__Qv1@Pv}yMr z$MXFrScJ!2?}sos~^-?G30kpzYJvdE4%uwg!OEvS>qY zBgnnMDQ(ent8Lj9DU<(HHm* zog-Z@mCc%7F6m{%G;4L;0ApabTG2tZs+)CCt{DdCSE>~gmI|We=-;HoL{#D8xSr zcj^_SxRGuk!t4Vp%q)31P>xb*C_`=TxdASm9SODkKea!8Wmr!`Z2()EL-?`aCD+|P V)Q)0D{D65Kc~~R6L{p!q{{`FO2^#jP@jr1;wWyf)Csx{Rl-8?4kJsr5l^J zt`tCM_{uwDg;(GiUsYUMquEaRV`Cjt7X?E5nmOR2(Lyoc+DNd@4{qhI-9%V(R?vi< eKKznU2zT?ekHfLv#aQd6>)Oipq&8vdg(M%NHZ$Y^ literal 0 HcmV?d00001 diff --git a/practice/raindrops/__pycache__/raindrops_test.cpython-38-pytest-6.2.4.pyc b/practice/raindrops/__pycache__/raindrops_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3aaec79fd15aa6dc96e16e1a62317acce28b1e18 GIT binary patch literal 4720 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 literal 0 HcmV?d00001 diff --git a/practice/react/__pycache__/react.cpython-38.pyc b/practice/react/__pycache__/react.cpython-38.pyc index 0d035ee6e467ca398910038dda7feb04c8c2312b..0925d6ee5060deb35531887c32b2bc35eba83e13 100644 GIT binary patch delta 19 ZcmaDN_C$;;l$V!_0SLlBZ{&*N1^_f@1mXYy delta 19 ZcmaDN_C$;;l$V!_0SI_cZsdyM1^_YI1a1HT diff --git a/practice/rectangles/__pycache__/rectangles.cpython-38.pyc b/practice/rectangles/__pycache__/rectangles.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ab4f6fb02d7c10d26950f87c66feb88d93b8719 GIT binary patch literal 263 zcmWIL<>g`kg2ho{X-Yu)F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIy||<(GcUck2&4i`{BqI{Elw>e)=$(+N=(Vm%hY#CEzT~< zFVIh|NG(dvEY8(0C`wE&$xKewFG@`=Nz6;nNi9ZV>J?Pp;zG!P3@!$_m4UGcWV@dx cghtp1VKD>cZgJS;=BJeAq}qXWeFkC%08)T9LI3~& literal 0 HcmV?d00001 diff --git a/practice/rectangles/__pycache__/rectangles_test.cpython-38-pytest-6.2.4.pyc b/practice/rectangles/__pycache__/rectangles_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8e961c972f98146f9b663c0a9e10165c58bf9ce GIT binary patch literal 3744 zcmbtXOK;mo5GI$BNXe4?NaDnHk}7SIMi6Yn=o<(M14-bU4ow0Sx-4kzN@6RK$}UyM zgl@?XY0;B^L;ne{J?Y${Xw^eIv$QD6qAa_mpxIsSayZ|&^H{zvl?obMKQ}g8zpQB5 zuQ*6v85kVGUp@!HG^Tg8hOS!DGl-^Zy-XvkM>Dxb4rWN#?3oQy*N!x1u*`dnWq9s8 z>z&caGySDj&5l5mRICbUI%i)}(%Vz=2HXv=Ji zZ9}`tcGz8L*VsL<_kLLZCbshxmwrx`X5ai>y;%oZA@&M z@^~X*)`JCRO;^uZhRBs8Y(r;476Z3!8$g&56PBq5Ms2qi7{khNgpRS8xX4J)S!WnpXLCIv>K1+kQRKpxNv`cN}9q7dVrnkw3@C-7w z-QAj4y%feH1tZ=g>a}QxJME5752zz)(;K)xXCEX`e42)0nSwbGR}Y#osnr5994-O! za308s!~D(+jt>(!K3R%m{`ol=SKSMNZoUM;wnA|5_JB&L6M`rBf0VGhnr3(EQ*+i{ zmIM}rMF1%Pl0YIbc9+1YDj1&IJq7RS^}F1ki4X*K?p03`sJ=`?brmJo0-2KON)RM? zsirnAL55R^l^Cm845RZQ&YrJ;yf~SS6pReqzuJ-P0+X@(6TDtV9V&y=hO~?# zPH&q)S+e{FCLSn|2@?+($N}ELUtp>ONTnh$92V1XA^A(%8^9^JV?%Lnc>@7q#kl+y zR7gCdrLgc9aIivt4=yhX>3Zwc_0Xc!wR@b>us~_gV}maCi#iJ56{^G6Avm@du-{Jk@72BWouontQJD+ zc;Iw>$CY96uzyP9(H8BWVud<-`5%o0|QHd)oZ9}t2G5ar48hUR4 literal 0 HcmV?d00001 diff --git a/practice/resistor-color-duo/__pycache__/resistor_color_duo.cpython-38.pyc b/practice/resistor-color-duo/__pycache__/resistor_color_duo.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..00a23816092b5642aabb673684256b993d55f8eb GIT binary patch literal 273 zcmWIL<>g`kg2ho{X)-|iF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEjd3Yzo@tfqyS9(3epcPPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitA=N-fSTF3B&_1skH9QkoAJiU$kD1BLVoDsQotCFYc- pg6t>;xtf8o2;>ewO$d#!9KvD-%H86y$<0qG%}KQb>G}-B3;-s@I!^!q literal 0 HcmV?d00001 diff --git a/practice/resistor-color-duo/__pycache__/resistor_color_duo_test.cpython-38-pytest-6.2.4.pyc b/practice/resistor-color-duo/__pycache__/resistor_color_duo_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..370c66b10d3ef4dd1e6ea0994d572f4358e7a259 GIT binary patch literal 1931 zcmbVMOK;Oa5Z?7G&a0GCDvEfB6N*q1iCz(^)FN& zr~akAaNy*>z=@gNHZe*QRkh{W*~fUknVtELn#~%4=U1?G{M#nv4^GOD1Cu@YvI7vD za2k_<>d_k77NKP51THl@Uf{uw6<3CS;8XIJaGN{lgge6fTs^ac8mI3`%Prtfq}!s( zJq_cr=;O5fSTNaxPrDS_U0`v_t#cCC=9huPUGBl$uU3z$f7Jy<$fBc@?e}EiY)Kbl3UbW`1aBB0}$WI50X>#JFw0uw|`m~Cj8Cm zDz_)oNdiM0_D>4T;Dx2?VU`J*zxgr_V~IgrP~~JIKE5Eb4%5FMI!ACI>xAuI$kQb1 z9Ej{BPe&c`Rmgsn4Lc(l_VcJOI`R_kP9O2^@Nqg@VtR?e63Zco_Gqd$QDGVr3lq*X ztR}e35C);&TGxf&zRv3QIdOV$naUYRF)grIWCcYP1x9Z~12nZ^9K&&q7A@9c{R-^! z6=2IYw}ISi94Ptkdm&!01h~n8wm?pF4sK#m3?Gn@#nO(43 zfa}4JbU!}?W!}%+9@x;)&J3^%9Sv0|5{Yyt@pQ3^+R~bMtZO0~B&mcV<~+)yGznwV zo7p3d<#E;|s|OXuBCN16!6qd}BEE#co?j$hNv zb@ts>P5F!^;ZQK9YK#q2K8{guFoyJKb|g}iyo=&K3cPoTxswP$>e`u8ht`lkqzwX< zYz>4@eS7}uy;fcMy>S%hQIe^~-e}5Zvu!q-V(e|h)o^KTDJBxzsybUzm8-QH80%Dp yQu*T~%5f5G$V+yfQ?cfI;^SCKs>qsxlt~AREND8ty+bUf;U_ literal 0 HcmV?d00001 diff --git a/practice/resistor-color-expert/__pycache__/resistor_color_expert.cpython-38.pyc b/practice/resistor-color-expert/__pycache__/resistor_color_expert.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1762f00942004d586db3fa7d26ca5bd3821df849 GIT binary patch literal 288 zcmYjMu?oU45KXFxh&uWQ4i0U8Kt#~lMFi$VP`r;n}7jq`{S&T69CSqZNwV1TDWUGPCJr_)BvlziMa`j*- zJKE+J3H?AN@2%PpAgMIkrN*8zwFEj8)+x9E>Wq%cVXBKvgF>K;3X5TNNeCAQSbW{2 ua+BJP+_fAw^GTlWAoov_|Adg}*IG^L_}it<`J|eDm||yj)vrFt~p2@4VisGxirQ z%9jO;WB4b}Kyb#5i1iH`&2i0S1{+&_+t7EMz5{p6s6KZ4uED-#yvD5$j9bF_apirj z-{8jgtZn}dnpm%GsC6llFiB(SN5McuL)155&=cx`08H@NkiiS9t4J>|qQn2dz7 z2T?FQRW&Ji)`a)=_gnFsankzpkG*^6rdkb>1ittDr!0shqCPj2m5Au|Ig_if{O5oknwJZZY#VFkjwgbloq;<4DR-R{`&! z65b^Wu8nP36y+9T+dzTDA~A9q?j7!ajIUb-P^T-w$-|eYZjN$x3p6G!2xeHuIy3*h zB55mBEx<*)ss49hQq=#*fXX-L>00Yi{N6b_CofONEnPDck%wvk2=0L1B0>);BNTu1 z-h!p*0J8M+lBJrdpulXfxLjZq5arB76vby`KE)|pgO~UB4~pWdDy{Ys2GII)co-k5 zH{{NFfHp8d-&7+d8ZD@4xz20iM|#23T)KGGiRlGPctt;CHkdo$Jl4vAa?fvbt%!i-d+_8=h4QK z7+Zt_xXx2bbvR?YW$0AsS46v7U9Y{ST;HDrW8wR%;rrv5XA#buzK`9Lz9W&eBo?p4 zXi7vUk+0<^D3D?0rzntzM2*Jw41v<33076JGvj7VVYLg&E6jIqif}NW%aiy*tfsF~fh|iPW zv;FMEUiJH3LAb65+abj}7ypQ;m=Li?VuX+;j6d+b2t+3vQO0Hr{ z=q>pnEqd}_;`6Y>`h%8v_! z1Nf_#AQ)j*OhU`FcH-E?B8eM%R`JFUeRyNXjU)&Ii+o3z!`yd-x!nI{<*gGone`*t z^!^4*WUy&zFOG&h9^tV3*f2PNzxo*jH_L@KvzYykgic{HbeYF|7<;V20%(1)^_UUjKnBq4G=~W^pEuq{xoA%10Kg zeEDD>m?4MoR}Vn^Mt&!`1rC8rW9O~KoIh-201UbV?PoGd$6R~EI2xVI8#_DQ>~*5f zZQY8L;xhmC*J%_>1bJ?0SMm7xoJib+e}3w}f)7+b>J1~7rK10mtCKvN^!XW=BcYQ1 zL`I`rjCfyOxczj5em~8@@x>f9a}?)j4rqFlneJkT7Ov4KW#z7Mw1eo-DPqm{mXgxD z$wW=oY~~o&+y!giK)b_u%C$R|d@=MRd(XEFbrRW^0Sct45H0BGN5&;oHJDJ_ zbc}&J@Wmyf?FvNKsMkhgT|EPi@DV)c1V|p;NRsykA z0b;3gZ3s&?!~-&UDsRL35_7=3wfn3FlqUv?(S5%YrdOQ3jS`;S3Ov_as10h#zW6g9 z$Jwd&--s;c`Mmwr{#Ff8pBYevuEA2Mn{F|CzXWT)0#=ocj{qhydL?o@Z|&`O6F!cr zPu%1G22KeNM#G~Lnw<(Xi^%yvza|n$peA(eMIvwpMb!8=1^z?heD=#|D@#ovkLE*Yk!3A+BV++hz}rg@nSApJqkXQ8bB8FdI{m!fpsCG^0F^hEFN!sk9p;W*DA(TNy!nG7axlxvbrdGmwfA=Gq=kEi05MK8$tgd}Wpu&8 zmtg6#^7JZTE>Rt9c62~#8YP@k-J~?h*c47S)on`g;!wPiZFCkZoLoh57saP2?xDbR zBp;$c3glxH?@OoYVf~a22(+Y7Kd=Jl!=L$Lv!#RKRK&SRm2MwQW^^&SPbV{Ep;ugO zM3(j>Ka~&#dSx-C8<%rUP&TARQU}viMd;}=2s-$> TVCWkxw+b%_0a+!1-S++kFpkKa literal 0 HcmV?d00001 diff --git a/practice/resistor-color/__pycache__/resistor_color.cpython-38.pyc b/practice/resistor-color/__pycache__/resistor_color.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8f9ca11187424a2d88b8803301f034cf87692ac GIT binary patch literal 372 zcmZWkyK2Kg5Zsd`V+`&>{y~L(b-);dQ>AcY)Tjx{?FED%Cw65>`us^M|B~ALMXKx` zNET#ZXJ_u%xxHesn1kTEe0+bB{-b7$M9fx-AA}Ild_f7A;6%E?^ZpeT{b2e0KAw#G}^*SYH7{nXpqi#=i|oPwtD2l>VWc#%$KCK6fg5pC>V&)Qo20 S2jk#ueGYg%`OUD>Ed2v?@k9>* literal 0 HcmV?d00001 diff --git a/practice/resistor-color/__pycache__/resistor_color_test.cpython-38-pytest-6.2.4.pyc b/practice/resistor-color/__pycache__/resistor_color_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7edd554083ba10f257bb65bc47447cb8e9917aed GIT binary patch literal 1313 zcmbVL&2AGh5VpNP*=*9%R)`-79v}#k7eJ^|L2wEZv=>WgwOPAm>HehlhBQ?1WG}wS35gn&(3@^{$_7&EhezO@;m$QJVL&qvATRPw&B&UKnNme zK{&NvR(gz3Qu;ig?j+{JyHs45{ z>!wyam}gh&CZiB#u~5enci`2xL7bA$q@jYILHI8W3xhD;&;+9*%?=g%Uog{2wU(-R zaWqK_h43z@@wF`WFNnf^{&+pu0|z}w`=eCURX%tw^GdWO~ z0H4_EmnO6X8`A*d{&;3$R1ynf9TI3vO6bXhE9LcnIo`0+>HEBq^ESj+A&LkER^>zo zv`aYFa}(_U!Lg1vgA>*&tq$ZI$oUUE9b2_?#cNyudU#ELoab+du%lR|rNSdnkYUI! zWEQeYv_*Unf1-{eXXKPF3DOy=0RG^?NY&HIcuESj0UIWq$)c#ICOA-1R>mI{6UoDm zd0ohc`>;7vYv9*oss$f~MS_mKH<3IZ%dCM&fArqf>SpCGcBT-O2j z|FG9GQIb??DU-y+NmABgQlQ>V5@feKQC-NOZlTyhff-j|S%An3g|mbOX(UZVBM%?D z+v}QWG|7u5ue9lIk7vo!x}S_^mgjD&^1A9PIaRnSLl$V!_0SM$iZRF~b0st&p1cd+q delta 19 ZcmbPYI>nSLl$V!_0SL}*-N@A?1pqHe1o!{| diff --git a/practice/reverse-string/__pycache__/reverse_string.cpython-38.pyc b/practice/reverse-string/__pycache__/reverse_string.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de8004ef64cc46a6d0430bad1b593e0b14de50d9 GIT binary patch literal 265 zcmWIL<>g`kg2ho{X)-|iF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIr6jeYqzEJpCVqM8hZd(673(MJB_*ch=Vj`KCP!0ad2z7MB!d=B2~9@er^QGJpem{aq7@QV4kQw1getWN^%A5$F21a`-fd%u*JizLNW`r@ za^NR`I8_LKkgo_K{sJdv>@+oPjjC?s*_~a_&bOPH@qWAAAkec;@tO0k2bvciHMzsFUXQdayc3m6LY@q9+@cgKS-zs0 zu(fKT!1|)*P|Tyilvaxoim6An}LVmvP$Kh{klL zt)Duj0z{zv6&k=AEZ__fIA8ep8qnM$2R`Wh8?PUZD|S{t*noH~23w8@|r ZBi?n~sq-wqhv!(L9pacR>n}HVz!(4k literal 0 HcmV?d00001 diff --git a/practice/rna-transcription/__pycache__/rna_transcription.cpython-38.pyc b/practice/rna-transcription/__pycache__/rna_transcription.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c38b9ba5acee560fd0507241dfdb5b238b37869 GIT binary patch literal 276 zcmY*TF$w}P5ZpUOB6dhL=;RDJ=yU~xhDyl#fP3bQh)og=lt~s>l04H+ z78rwcI&kPM&!t$S2`J=fBei!{%nk0MuY@_8pe&Z63Q|R@j0jE+c^y@-RkYr*Q~Wuj m>U3*GU(f@eK>j!+p+UMB)b)G2?l^L5k4vu)do$s!2N7P!d^;Eb literal 0 HcmV?d00001 diff --git a/practice/rna-transcription/__pycache__/rna_transcription_test.cpython-38-pytest-6.2.4.pyc b/practice/rna-transcription/__pycache__/rna_transcription_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..326b1e36389adce774f32030621a4ea5d9131174 GIT binary patch literal 1802 zcmbW2%W~5&6ow@`7w6W}3uQXP12haIFHlN7F5_Jm;B36nxRweA-zv!iVOY^V2n?&f zlD4dP1y-DsG$oxTOdDl%q$Al!|0h`|<6f^#p!^K?&c4}%{6c53)WA80s!qUg!f8rE zI&H1Ywg@FzEv(boOe1W-jFmPsCv+(B3AcIelJJ^nd}v+RVVl#pq+kCHk;te|O+yz< z=249PVzIzEhN=$1i0OKv#VNNgNodbvhBaR24e;x{$sK4Lyv5tlHhG74p>=o<*4i+; zZ}KRRQLbW{lsYN$Kqwtk2s|&?M@kQ>+6D8Kd?%W6dI9x^g=`SX8X0nBnNFmXkoxs` z6{Qk&UQtt1B0akzvIXv+@o)?es9`iXjd+nK!xN!C>Y^Nq&qBtD%7&$kVx7cd2!-wS#hEo?wTGtke_SGN#0NCGuGGP&Dcw^vm;QsDl+R-g^tIn=P^Z zX2>+>V{LeOx*L%+PL(Gbop1}Y!mT_xO~u9uVAhKu|DwKS!i{q{+k+##^U6W>WSclv GxBeG6Wz_-z literal 0 HcmV?d00001 diff --git a/practice/robot-name/__pycache__/robot_name.cpython-38.pyc b/practice/robot-name/__pycache__/robot_name.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..652c6a0ab3e51e35f996224079ac4bbf8b260f51 GIT binary patch literal 419 zcmY*Uu};J=40YO`RGl~mg!qRWXe4HYPJqPL0dz|jtC!@Yinb|9PXbo%Pnh_nu6zO; z6Lw0)Vd*{F@v~#E7mGQNy%%TO3-X_w99m4tir`O(?m&YUd%{~(fQ}wu87q4KXAxy9 zfo@AKa+l}p&AjM=HGj0ezA<{rnk$(^ki8uAu@#H|?*K+NR z^Rmn~rM7J)Z;gNKZ70pMajNo->|Ck(N*U?+r}MUKenaFi>t2Qwv1+Rxk;i%_5UhRe8NNH51P JuDJ7y06#K&RapQ4 literal 0 HcmV?d00001 diff --git a/practice/robot-name/__pycache__/robot_name_test.cpython-38-pytest-6.2.4.pyc b/practice/robot-name/__pycache__/robot_name_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f31f39e9c439c55ffaeaeb109eeec1d1f55a89ad GIT binary patch literal 1602 zcmaJ>OK%f96t+E&ILV}iBDlQ8g3Vk+BEg2m73virRzwJjgocMTjor(nNha7Xmxg3j zen=};{XOiwWp)3;T_Dc!C{0pT%xKOWpRv#RzVF!cs?}-`xV~kVcD{#%{J_ET1u?P- zk9iA55=jRnqyEi?0V9+Q!z`lJmpF_4ms(bXHyiL_J*!jll*mAaUx^G=+;1ENSyLr4 z+GYB+iVs^ykVDd!B#r-r3Z$D-7riLAOWVWY@)f{f6CU#zjPfutrUDiABS{aKxsF~x zhT<&aRmrR_BN=}sSwq$&hj&xfWdq)cY(mMzwS1{=K2%%ESl7&rQQE#x|ESNC_4jZ7 zzMH-Ka&Pulez`xp-J?)k4k{r`+8fu)V85kFi zpp>hj6% zqeOQxPvr`q(gKP0c;B_q5g&5n!|RaSV0l6(*H#F(SLUq{#Q7%#Z^6Kl12Usi+NTuB zGW777Q`HenN(0YR$KcP^eDZNGAEZpzF&25?o^EBD7(M54cnSvS?V1gU8cafH4EN;b z8L*e8uOMG(&1FcjXie3iQ;6MK)%9*^J=6sQ&0+Ovtbcl}ve?;CT8*smgbaxNNr^=i z!I?i`xxpNShREaRj$%75uLKb z5D%M=hoDI`4W=P#0e(D%NWV5$CS~2p`c`T4!C?QE&PTEwwo~rn%Ee8qoxGw$ah>{z~~wp>}M9CGWSl4y6#2wY5bPG0aN`ZAS?_T0cZ!7gN6y6+&DwS z#ma8la$Ho$LAZtx!&2@Iln^cv0(YX{Hp125bmZ1*$M;5s#qy4Cfqj%4cT2lKMA?oJl254Ud&wUs|W&*Qr7TW%d1lL o?HYbUd>VgVE<_kh@I4!UH2GhZfDiFlRYb@J;Xow`Htulx3t)$YZ~y=R literal 0 HcmV?d00001 diff --git a/practice/robot-simulator/__pycache__/robot_simulator.cpython-38.pyc b/practice/robot-simulator/__pycache__/robot_simulator.cpython-38.pyc index db85c7033fe3172f121a33330e944c9ae53b91a6..327d3a270082d109dc1659c05127ec83d0f024fd 100644 GIT binary patch delta 19 Zcmcb?euJGWl$V!_0SJmeZ{#}13;;4h1vCHv delta 19 Zcmcb?euJGWl$V!_0SI=U-N<#082~dV1yle4 diff --git a/practice/roman-numerals/__pycache__/roman_numerals.cpython-38.pyc b/practice/roman-numerals/__pycache__/roman_numerals.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61cc907a43c36593cea0777edcea49d9c49ce479 GIT binary patch literal 265 zcmWIL<>g`kg2ho{X|h22F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEw3~;DYd8wqyS9(^3o42PAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitA=%Fj*A(*>H4T9lYm4B^JZxOxSZw^+d{KxP+%T+6^% h1hU^x6G9^_g|L``a<@2aa`RJ4b5iX@HGEeiD5OIrjekbltr6{5GC@)z1mXLcoLgJ7w2DQJdE4!PgX%r1vK&Sr-V+@9I9 zkN&j`;{`S3ErE?a{0I9ezyPyl*e2I8KOQqo!%x^rQ=CcJDLfNv4f&RBnZ_3e#3Aw2 zfP|a+I{hSW4}agSVZbmqIP(F*RnL8ocrsQVl3Qv|B`52jIk zZ~SI-Ofa9IJARLm-|;r_qnBhDng`Eg;YcG0T-N#Q+p|WCkt?5@VIpu_kDeQhLjBL( z!Z8{Ig+~5i15VmrVc!kD>71Mv+^)--Uf>r_S)>;3D4fFBR8)M5$mU`o)TidaN1D3)ah6yVM#Ye_Quo-4}ADf)U8^hUD8 zgV2n?5&5%CIOp>cjVgbHr5+5WjU9V1Fn=nX##@wdRL<#{>hYvG&p~}quy%Q{y323D z(=*lMp$TKh>roCG6_c0`yL;}fN=Vlg30>+N>p?9LRI-j#5pf$A^L~dM)kQAvrUbUC z0NZ?Ju7_46v{b!@Xc24^oUQyGXKNvww=Ti0Dd1##J-QOnCF-@P{2CK%JZriwuX{%# zTTzi+TI+FrKwR-iERki~yd$K_OH`^XyEN8=`jk7X7Mc6PSrwknEle_UaR2$Da@H$r zJ+7~aD_O5bW|+wSUH;_gHZj4<5}7LdC38KrAGyn_m|*JlOOTbyygq1RhV8rsnPjd< z_Ke6<)mlB$Ym>dDjJvJb>Z0G?m*{RN(!W%ZF3{uqgZPrj7q!xgWuqh#2=UInk0d(P zvLV}R!FfMpHEAcR`%z1p2y3~>tEVP--kyY}N;t_}kL(ky|Lo*`4W9+-j1z9#-r;ou zwD4iT%V#Pb4fC9k#iLhRNztlTymW%=U%%&kMAceRxzxH^?|c> zwLB1C$C+i2l*$y{n+ut!$bAN5Oa2`SS(T@;`{zR2~HJU$y^WY zF9J&-SVY>1DT`h4yhAeYSVB`xS=nBX?bk76OCuZ3ifUAqG|OYVwY$p;5(I4e_?Ye1 zCCYV0blD7O?^j?-@VuH%Hmj^m%eS&Q~Fjzh2Q;tb2+&Dkgks><0Ui5U`eBg;ZXnBFkZ}q(_o=>*7iEoutynvSGoLF!9RqA)_puxZQ$1r8iX`3K2924XniPx T@iD!%2K0TwGA0cxmP!5xGA$e6 literal 0 HcmV?d00001 diff --git a/practice/rotational-cipher/__pycache__/rotational_cipher.cpython-38.pyc b/practice/rotational-cipher/__pycache__/rotational_cipher.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc1cb495d6e2106380f53131fb4c06b008bac118 GIT binary patch literal 275 zcmYjLF$w}P5KQh=M7-A8_6jc_5D~N%L2PU!CMyO#6OssC?@z4!Qd*y2XXWM&(Sezr z-AveBXIYOR?wi4Wi1itpeBf>dW6cxOfByvTRX6h@nXlNJ}Wi{cl6pYxPleRmCRT!yb{2y_S`Fd=BJTR<^c9@ pvTY`XsY0jDL0sYL+o)}$U*t{w?QUGWGIYnKmX{Mu;;$Eyd;sKtJ3#;d literal 0 HcmV?d00001 diff --git a/practice/rotational-cipher/__pycache__/rotational_cipher_test.cpython-38-pytest-6.2.4.pyc b/practice/rotational-cipher/__pycache__/rotational_cipher_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..afcfc3bfc4ecd692eb2f8bd467a1ac2bdec4e061 GIT binary patch literal 2696 zcmbVO-EP}96sG(a*>SoyPO^0yHg>>}1W4_s1$Na9LDL~OZ3<)#PzVDEN@QXs`U^$H zv9P=L3HAgVc9mDs?XLU^yBKzklo)Co&xtAMkcSk>@B4K4bGWqBB9Q*F){cI!6Y@7Y z-GYpU)ERDdcl$ zWVKj&N0&r3!Tsm3cL*QEJ>Ips2m`nGQpTq`jC%4yD#wleUZl9AT}SqEm2!lSog8AR zh7~nT1L|%x%GR;K3SAjz_J}=UG4~}46CEX*@tC;*6qW!(jJSxAKEFwV?kxwpgH+Xt zRJDDDaWzJSpCEkt z!;Ok}O1OW#9quV3-GNP6^33qZ_}eohold7yrsHG$Y(K-8zgB!>Ci1IJbAt@jG766I zF&*aPGR&ZW$%d{Tu%Y4+<0?!7!MGOjjK3{m zp1op=KJ!9d?Zf`(2FG-pKBdnnDhb{gqbXf|>kcn`b$ZoyQFzn;!v||2NPHXg|E|Pk z_FA~=G%uOXE2-CGD!JYQ`FS9G{%E|4R62WUxE|2-Jlvu${Bw6SIDa&q$mivNiju(5 zNq*#gUm~+LGnh&p=Owh&A4qzZxXvlHRX7ajQFuX55+UTj;NE0CZJ-1u7-G~6)2RHL z&K9E7eSdQ)GZ_o;gk@QaF+UWEhvhb7c=i`9Y7r(-_t4<+rB=}3wyJPzQuzskD_ebo z2G>jJAk2?MJPlP9OdH-9`{q?sB-*AkLczWajfi RpPz6S%w;#pGBGRd`hU42rVjuB literal 0 HcmV?d00001 diff --git a/practice/run-length-encoding/__pycache__/run_length_encoding.cpython-38.pyc b/practice/run-length-encoding/__pycache__/run_length_encoding.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68d313950378b339cfe0189ca433927025dd7a6a GIT binary patch literal 379 zcmah^v5vwp3{6Vup_AAU|G)tG0fdmanFUx_P%rjz6_8d=kznUfnE0ix`~?$ss&Z^+ z$06NbG?grkBG&T)Atxafxf7T=yfAn|vY9`af>K*%77ZQUaF1?V z{tnUE9C(rRHg#{)^hU+GN&xu+iVrVuDNPCE|3*nhYJ0603vSyit0X*v!kfJx%;$qB X>?aX_pQ~9I?2HdN9QQbRS?a`3+3-fy literal 0 HcmV?d00001 diff --git a/practice/run-length-encoding/__pycache__/run_length_encoding_test.cpython-38-pytest-6.2.4.pyc b/practice/run-length-encoding/__pycache__/run_length_encoding_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..763bbc8c29b0cbb38a1d1ac31ab0da5096bf7221 GIT binary patch literal 3611 zcmbVP&2HO95GE;!qGZW-{1-cMTQ&s>2uLJUc7hy&!j@~aC|n=%12?=ZDDK)~OOf)D zsv@B`=RsQZADU6Ql&%?`gEy{T5q3benht@AxYQU1n( z-10CufGhj~1XZZ&DV7>*t((&nRq5uff|}gXEgkM?Ua@OfMz>^@RONex=4k%CLi0@j zrF@mMmZM$Kvo9u7B~Gg^{CzN0Wwq4Al`_;RcA`l|Ph7rRo)2e`*+@ zSIV_^DnN)0I}90*e(HOXd*b@+__A+%9FbnDA|EpE{955lFuZx&cmq#{4ZGg9Y2dq! z?^yV26!aSG9pjE0b{jozJCW04F{ib==f@`nU z+&^p04#=Ez=(_J%k^_XZ9uory5z!o^sO|?lHo<#c(HC_G^~;Y;ciw`Bp02 zgvrK1Ux0U-h;v+|q%qmz7PCQnfT(s-q3y~$`H_8+V(Y1dqd9-4{{Q+Nr;(Q88gv^v zNevo7xqNl24y|dYqw;7pGA+wAM^-H-(HO>bDwplcJbWH_=n5t6AsL7G!u^dwImX=! z*SEd#f%9B~_hSmYqEsTtBA68vYbZ8R zU|{$|6nGl)&ry7V!bI^Uibp7rqNQ3iu1c{Wo#t)5jV|aX)^pRuM+K z@4~_ChoW-O8g`kg2ho{X(~YaF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEjO{GD6^snqyS9(^3V@0PAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitA=PE1M3N!2aL&&(?+hVtSeJiUU-Tf7i?s0hf0Vvw5| j7>huz@Y96Q2&*A1W}w_H4x8Nkl+v73JCLr=K+FIDh*UXf literal 0 HcmV?d00001 diff --git a/practice/saddle-points/__pycache__/saddle_points_test.cpython-38-pytest-6.2.4.pyc b/practice/saddle-points/__pycache__/saddle_points_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..309cc66728948e7cb99ef687da54828f67d0ad15 GIT binary patch literal 4115 zcmb`K&2JM&6u@V8*WR^bhY%obC@tv+l`NG+l?p;FLTQ20O4I@ZZDk>iHlE3P!Mp3u zjGM#?C%9Jq2RMLw%D=SNo_y}DQfc3t-8lY;gAv`;zM0vN`S`sz@4bCct(FNKe>9f1 zZd3{R6C1;a1C4dK)NK%)aM~sfYDz1zEka4;Gzv6(Qfw6AiPd%^x8cG)n>)`)!@EUz zfft_ZZ?=I9$6S)MK4=*2IpG%}_;a9qBi9*c5Bo#4lzO&s+I2m=;Q}c6L+mYTJ)C zxql7tlE2_0z4I!OTJZeM)vN8K>9^H2sAO-#jO@o^7m8x`W{oz=W)Rj6l|G!SbfG)o zH{4wXZYc}Lp%Uv&tPUUeY#lE35QH%5Y*-o7hMg8GL$Z#;}ujY zukv{)OZ)_1fU?X_@L}6PN{f-NWw`lRgPODYMP!IqJ|doqyH4JPu}crmiON;qnZ=6{rMc5>r5i@X)$^ z2i}v*CuF%`*IlStZr^D#@dMhUR(mWY{d2`QKlSDeJ+ z9Q2%1IY)c9XP`23*ArmSoB=!Jw}khm^7~?vU({{uurszn6bobKv&%kn6k|5*Q8uX;CU z0QvecW+0e(A%{E0w4A8~fg5*of?4TddxT)AE^$E;1DHI4!mu>L{5+n>TL2;Tdw+ux?>gWw>?9UtX-&qKHJcu1Fzhm`M5aB56Jcm)5J1%t1l=bX}M6V{eq^=`c(rD=V? z4pV?WA0TCA;2ePoQwhhoG*gaXD%3OgZ#LfygiJCw8s|+68&-I}lsx`tzU&}uA~fAf zlwjMTZegTgQ5c6&H)6l~?XLK4fYKhI?971jf1Sj1=C~h>X+lT|oPZud8yuuDN(bEG zxKX+}?Xdu2jMBiL8bBUSTIOq(3~uQ-=>E@-zJFys)*iXFV!lnvAJ2-of^xB6pVI zZ)}h*AGnLdNQ9|zZy}UY1l_hTSF){MbJI$eAm8&tB~)7e5zY3dl!-Knvcx1Xb@XmW zq$RP_6dfHVaq9RoP&Hegg{Sg8e8m=0j%S`{jFtyu=K90GliaZRFa^0st+l1fl={ delta 19 ZcmX@kd7P6gl$V!_0SI`uZsgj_0st&w1YrOG diff --git a/practice/say/__pycache__/say.cpython-38.pyc b/practice/say/__pycache__/say.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e6cbcc9d33eaed9caaf3a48eaaeb196b16f11447 GIT binary patch literal 241 zcmWIL<>g`kg2ho{X;MJ?F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEw3~;DYd8wqyS9(GSLq$PAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitA=POJoBy@JYH%s?7sMlr}$42(q}d;ByZG{SHQiy0_) Ui^C>2KczG$)efZVGY~TX0BZa#5&!@I literal 0 HcmV?d00001 diff --git a/practice/say/__pycache__/say_test.cpython-38-pytest-6.2.4.pyc b/practice/say/__pycache__/say_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e218be8c13beee65310642f7f40af86b1f3d1f2d GIT binary patch literal 4462 zcmcgwOK;mo5MEL*T9)7Ot9dDJtA*{PPZ$YOqlwX?Eete|w$Nokc~&-4iBy+V94YC^ zxfeYZ=&3jM@c7gR31u$GhFWM@Y`=@R=d7CHdbbMJ+03* z0iT{xBYEYqv5vQU69q8PTCA=qt+#VJ(^xxSFK9tev0lU;y;W+L>LrbR%peE(#|-kK zc+c3&)ki?P&1!`M^u#u6nxAvc-WD~ImyV5fyxm_>2=%eL4jSl>Sv?mxtmmNsMQj(K z1P1CNj6fN62}YrU+JG?_M?C@)Fp0VhQ!tHs6lUNU>I%%l9O^NchXvH*un2FUo`B>k8>@eA_i!k~rDd{Jbk# z&3z^fY(8IGy^99!s=3lI!LhB?o5KCZb2_Wyfsk94+g|NRbIY@~#46HEH}??QN~hKPj)E~7i zTX?-?QiI8vROAGvoYd(AqJt#6GlX>|0ZZ{71rv$K znvYYx>8L1J_m5aU-jAaYf>$&~4ueG`j)`)}o9OTZnj-B!n3mUyOn=e8{!(E6lf!Iu zu-|{W8bqlve3U}dYez;YG|B|4g>}oGxj$Gx=K2q5Nr)pNtnD2v3|HJ2b~XG&)wLeP z22HCO7EY9RhhiH3C{PAOL8?+C{DB(sMstSg1@xO7Yl9Ek+T6>yPjLM4$US1-xOoFD7I7+;e;=pV; z_XS^DTT9)C>G&L7r0KZ&N;-z~mSSeu!`{I!h@n4|tO!+XN9}|c;w3OFA|4L8L-Pqw zan;mJ(0{xrhQ^z$4Q(dLHl`08)8`{afSqKMCCaW=Si%RxJ=@0692|hJyCf|T9YbxyGtkx&Bz_` zSHQlaQ8ElQs#f-mM%QY2mhJkL^-hn+twrAH5qm2^9b$E@NUlpK0D|x@8@YaP001Xe1hN1C delta 19 ZcmZn?Y7*iK<>lpK0D_$B8@YaP001XL1gZc4 diff --git a/practice/scrabble-score/__pycache__/scrabble_score.cpython-38.pyc b/practice/scrabble-score/__pycache__/scrabble_score.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..86ced56a4121fe1fb50e4410e9254e8e923c6bde GIT binary patch literal 263 zcmWIL<>g`kg2ho{X;MJ?F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIr98hVr3fSqCVqM8hZd(673(MJB_*ch=Vj`K7*$B_<{1r0NzY=NBQk@nEiALFFx0FbiaMG03e9j71>Z f{WKvo!cqu}87Oy)!zMRBr8Fni4y5Zd5HkP(6r?rK literal 0 HcmV?d00001 diff --git a/practice/scrabble-score/__pycache__/scrabble_score_test.cpython-38-pytest-6.2.4.pyc b/practice/scrabble-score/__pycache__/scrabble_score_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a8e59b89c585188e1248378981a8bbc5c8340d8a GIT binary patch literal 2541 zcmbW3OK;pZ5P&J|!}31-NF3J=iagOa+n~Gs0YTt4DSC4bPEbG>g1e->jP)`}*5;wz^H}7eOZRqi%r8o!!kNi$}gE!w3-W2V(%kLUthkJWu z&?;aivODl>OHWcICfF<&9~wLGXbwWSY)?G|6+0q8bg<{i*W zyvuu_1K#H=pqKe7UjyCY>--kzF2Bt;K==3^z6rX|zX7BzyS_J3Y&?#{9wNOK+DtrH z{Zqj@dg28zyLjB!!hG&B1bQUJ~U}I5~o5e|KViO}LVx$*vKRJh8G^uM+1GK|z zX76ByM(GKdGc9N&j1j62YiV4ccxOLc+2!zBo0@z7MYUiV)kYDZzH`&9TOU z%RF{I{ICPMQ#KZcvSTJAyhfjv=zp&CY=!aeV8sTMCM*_|+76|0 z%5%7ysqImUsde6?+y%9QnCmDoMJxBQZDH*$3jEO3Jroa6JVx<3LAe@cDb)ah(`mF1 zyr6OQ=f(`WHW=qJGBVM&x0B82MQfX8Gjz&u{vSZ5$xw+CC5^Dl7q9Hnr*|DNc0Odv y26-YOZEF**=tb6_r+N1u!UnIQ>jh+Yhj1Og4W7+?^c<71#*ZN&w@BdkTK@qaU0-Sd literal 0 HcmV?d00001 diff --git a/practice/secret-handshake/__pycache__/secret_handshake.cpython-38.pyc b/practice/secret-handshake/__pycache__/secret_handshake.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..765ff5967e8d89f85396c6dba8b9d43dd42f578c GIT binary patch literal 276 zcmYjLI}UAi`SSEBU@c2>?vP+#)i z%)GqGOzis}L)?XY6mPl#7Lx zBmAoq6u`iUm~Uupj%y|}*x2%IBk!sEb?h;t#@O*4gZ;vw2G%DAmZ-mLeysT|FwWSa z{SS`BP7jUD87AX#5Q7?0OSza>Il{jJ6hhDFn_z(XiTSmBRNn#{>R7j-0S@XqG@*sM z0d44@cAyIzsGG0}Tc}&`1h!GPVF#X~?!YtHMcswxh-xp}ITJ%E(q9SCMQ|zJ2$c>E zoWCgaP0MkNf3=I^clHNM4KO|;u#xenNy~sk)lPle#o}ewRTy91m{~heO33u*_tPMf z#O=n&EG44z8z!4ry*=x{MFZ6jdV>IxIP9MYb(toUzW7bZVW`Iai42BmI23)QQNF$? zVBR(Gc>_-ocyBVxHtB;C1b&`K?sW+_&CZPLZ&r})-LroTdC$G=Kr$Uf;$RRV0%_y4 zvO$6f=Yk?H+tah=wp`ohXx%OBE#SVYguBA=5x70qz1;m%MwP~Vx1d% z_)*RcsEy2dc363Kc%GzOk{uEc1P2}ygD@66y-GM`K@zKdbSv;y2geG>N1(=~MbsLw zhW-F*DL!CIe}?+STBuhzE}>rc9P%h0B&AaIBKLJT=5QWUCi1Ms`8a_oZZXd~oYT`H z?~!esK+%jYEMz%Jd(`i7>q>YKijdj z&0#xp2GcM~!&qgVqsffVYx{gMqpj@aZy-Fpds1Ag`kg2ho{X{tc_F^Gc(44TZzAUPNSu^EBb z8HkHnfJ6!dPz|HsN(N1)TWrOtMVYC^x7c!0^U_N)ia-j%#4juTP@r6~exhDdVoH8q zroKyRadt_5fqrU5YEg1#ajt$rQDSmQW^$@N#0)5=ec#Rv_C? c6G9_wfv`Z1y2W9Wo1apelWGUj^%;m602Q7zLI3~& literal 0 HcmV?d00001 diff --git a/practice/series/__pycache__/series_test.cpython-38-pytest-6.2.4.pyc b/practice/series/__pycache__/series_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b7f5bdfdfb941e783b506f10853f6afe02d9d11 GIT binary patch literal 3252 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 Q5}^goI%08GYwH{T0p_$JzW@LL literal 0 HcmV?d00001 diff --git a/practice/simple-linked-list/__pycache__/simple_linked_list.cpython-38.pyc b/practice/simple-linked-list/__pycache__/simple_linked_list.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13371d945c188bd7718ccee17aa2d6ae6bcc177a GIT binary patch literal 1654 zcmbtU&2G~`5Z<*N$N2@)QVEFz2QEGk^8g4%f{IJ!1641%tc+(vtva^Zb*hwW`zBn- zEBVS>aAIatH*OPzN;cYA&rWvco1Jg=Y%u6D96zQo-W8#Rua11;2A(z>>%Hn^wEZ^wA*-mp-c;MA{CNH*obrWSCpZWx}i!NC>% zfQxGj+UUcpoG=F&)5&_!H=<=9aB6}G?3Ar|xMC}-axtk5XThc@fB^RB@u`L7}3!Okx@6WL~85O`2pE5^&Mw?Uqy@gxRIfHSTLV2 zoJ=lDui?C7oYQXTyOdxS&7}}kSBQBIiDr>`w85x|N}C&RWKid=DHV@< zwr4Ba+oA`RYl2ggsOj;Q&A6cm-$fDdkSZ>8po?o8deFz!g8@=!SanZK4NtIM|0d9; z5WZy!QMu-lbt5NJ5XyK!C~qr%u!-_tb>CT;wh*bzgm~HrG`bhanD=MExs2eT5#&iD z2-zNUaf+Jp!F5$mvC!v7e~Cc0y>qaOym-+FFl?lNroH`pN?zjIA>m~sNVDp-J@h-O zM_14%K^$4P2Nh90BQYXD*R2jo+`UhYZW*G1&TA4L?_;;De~K(yJwuH&!D;?p_Y834 zzg3Nn=S6u%^gmw4vM7^03w`?`#9bhsqsLd|l{oHkMSAEvrfm(5s&nVk7wsY~kh; z;rz&i6I7qq_wDwg;9s*=t7K;lr1mU>x>F!wx-{ z{#ZDCdO59RlJGu zjJPJQV_Xw&i5nQtiksqXjORoPHop_Cecc<3`@ziOCxHq(9EKzxvW^hHkDq!CB4qn) zkMFWqJhXQCJ{SDJBDA5;+LZL_p)KjHXwg?Hkm1AcCw@P&`@!(giX0X6pGCHsgojKn z;;G-h-S`GisSSVqsV_#u-o}GKeHV_#8^Oy!c6w^CF_wNO>~(?-r6>DdU;77x3gb(j zxr9N5UI-J`$J^0mI`9H=pt-T-D-W~qb^+{|($LI~{48h7S zuqnpr(AqpAoMeTBOM;LvqJg96ivDZW8+Q9aI2vZBKN<#0cqpEIo$q{5KKpVNLVMX+?;FLoFNR!d80FuGU$ZlmDA7=o3zY#ZkL-h zUroj=niV-(b9WO5Y3?5I|1IxKo|Y$vSjTF1 zE%F$>a%!F=@bfTH~1>PJAW(36Z#9)WRT2c zfrKD4h66?GfDw|jY#^60k3&bppske`$ezjzzds2IS#JWifU*SGWwOcyEGR!GU`yUF zH|IJu8@_j~gzYJVrtWUR-NbmgO5zHMqS(ED64}X`Cf<&%Y4Dwo%Dpp(?WCvNs(0}Z zxhUqZxNr`*CbSjWI(a(@nOl{#b!YJQ5ux2O4vd`fL~R*2)^NGda+9?>{?Ma`y>R4Z zXHP&Y;yvTbe16_4S5j{AZ77ZdoGj%zOOsHhkas}VN}8>Ehtc=fC^8Yukf8a<=#J8T{#^8z+dDDfSPTH zEp!^!H9SQFI!}Q!BR;4>gpk)r+#o?AkieufnLQqjrDn!_n3@_U?cUMYdnQMN97#5y zImTxh=m4Kv<@n6elL01E2%h2}2$+2OGN}t7*dd}ME)HNxt~l_piegYhanP}&LBsiT zS6C!a?7L{T{gD7OD)L=rn(eFkY;Sl<5#Fj5rauk*{NO%4&4Hdj6durdKp3w zkt#^6q#WWV6c>dubs_`@tx9wsl9aKy9s5#kqKh^Si8BmdhJ`8JRPtOnP!9KKB{4*K z!<+xa6lQ(NoJxLzo{W)Hd5PoqN%A%1VFL(k)aY|}%7lc@&E?`c`mFUSpl?l0`^=VgwK}q ziOi69*yd zvSejKzNhrI&u7GzAL60RQtLJ@M6L{U+=)U?+|YO=kEGkxgxwm8Eoh3J@A92b$}K-p zQ@M@TwT>HfzJH>da<6Z;&PT524GADGs(apGBqn`2 zZg?K;-f`E|J*-L6mbj8oeX;+owQe#-joEb qrs>4APt?~(?h`z7-^T_gSx{tJ;Fw2ns z0*z$_H>?nb8?k3aWFnl2L$d0Wwl`a=se1y&9C?fMF&e|Lo97>FAwukJwFxKQ>b5c7 zQSV^BGr9KGd8yI|W!k2cch*1lZ71!sb-MJm?3~hlsjc+1^-67jBfu!_UP1y;Hf0Y$ zpZY-&e?6Ndrc*U1;Q)=QEkKw7)UDZ76rTb-?Nl{Z-0>vsPoz7dH@b~DtVsBf=Zn!F S^bV)dKuE5~6-%1>Lb4w(Oj-#5 literal 0 HcmV?d00001 diff --git a/practice/space-age/__pycache__/space_age_test.cpython-38-pytest-6.2.4.pyc b/practice/space-age/__pycache__/space_age_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b212026b8f5840240a498e4f498137d49fcb601 GIT binary patch literal 2058 zcmbW2ziSjh6vtX(SB!vVaNwWyc=4NtkyxZH%>>4kK z76}L`Ok*V?38~TqTRXM%4^UVX6dUaXv9a>K-Mg@hcOW;%zWMdtna_Loc4nne$Py@r z`qslX#|f#Jc9y22<^c8IQqtLh1s zWGUz;S(<53r&xw%p-!_L%R{ZP0vmuj!v@(9)LAwRyN~$!&aTT`x>X7rbPBf7-x+x1 zX)q7TK5;3d+jL(!0M8B-^b}T67cKJs`L)`{jqJz6S5uXu>gP-;xp3z;JhLv4U)P$p z!A;@bJ)(X>^7`5l5owtCGgn>#sVtkNRg*Pst31o)J-6wU`2#MhmTZ(AVOCwM%F7ZX zbj7T-TL!cY7r0AK%OA!@Fw)tmfZ(_{p|KgOj&UIEANR@huSa2W{hW^DrZL8*=uSHn3oxk0BCuzBM;Da+v%cJY zJ6T(RbU2<@z-q|Tyza?EFap!@d$D6d}xdNhbGS^H)~geLgUaGfR?7~3A-!v zNHoNu?o0%EqGympZU4k?5*HT2lyE*z#XdVE_Jr9hg=55_ZsNa)Lv8=WUta9iYimLI z5GTgOu({)UHt!nbSYot=7bDEQ6QeC&EarU8Fl@8I4a3hGMx)8RI=1tMfhTl0BQmh4 zzzb01(B#qJAu0yY45GmUDsqqoM;e}HLIr~_NK|N4Q=`9N79mzWtL|F1^z#*`Wt{ZJ z4X1^fR0?kmt7(@6-xTnv_?eR-KiwJ2!pmXe319PU%f*hKk$5}c4G^5azP1dbGbY?E Z$kq+o*RF?=xQXYpL_ah#LNq0x{0rxj?2iBd literal 0 HcmV?d00001 diff --git a/practice/spiral-matrix/__pycache__/spiral_matrix.cpython-38.pyc b/practice/spiral-matrix/__pycache__/spiral_matrix.cpython-38.pyc index b4f071e92fa4847a2821622fe64aa03ded769b2d..ae0d7debb4ff4a09519b42b5de0041ca2b80ae18 100644 GIT binary patch delta 37 qcmcb?b%Tp5l$V!_0SNlOY~<=>VZ1eY3QGy2$Yf4d1t6)#ss{kS`3YwL delta 37 qcmcb?b%Tp5l$V!_0SLrzY~<=>VT_tQg{6d1crque0+7^V)dK*jy$DhO diff --git a/practice/square-root/__pycache__/square_root.cpython-38.pyc b/practice/square-root/__pycache__/square_root.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d1a41e9e5f2763e7f6718c388fa14d96d93426a0 GIT binary patch literal 265 zcmWIL<>g`kg2ho{X-Yu)F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEw3~;DYd8wqyS9(a?uYhPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitA=E-XzfO4TjO&o6oX8D007`aH#GnN literal 0 HcmV?d00001 diff --git a/practice/square-root/__pycache__/square_root_test.cpython-38-pytest-6.2.4.pyc b/practice/square-root/__pycache__/square_root_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0be44e4a49ad82aa0033638b9279663fa3a3cbc GIT binary patch literal 1499 zcmbW1&2AGh5Plr1r=4|M;vn?OQNPKQiUqD2yux7Z7+MVwy`5^+06!fBM9Qw zJ_v|Y-h-#`l~Z1U17&8HL>ok-D2_ayv7MQ3#$KP->lFg+yT3EIF$npIMzL9796?tn zAUNSPB0kMVBQ^~}No@Hx%~wi(3092Ai5=gem(D)vS)=%-;{czOQM zF#o@LRtuH_WNS3h4OH@}WWd^WaIY{Vp`RZur_@^Bxps!eB15w`!!pd!zqC;}C@`g5 z;63?=Xm1PV)*{;5jA$49&oY=>iS8_A-s#>eAU$4Hq)vA;rnktHm1Rw)gZ9q4Ob6}F zn0_Er1H|nox3yHK_KSV2?fmSXtSS`j-H0lrzk%vzCDry4)qeMRr~9zL^>h_iw!7CX zYnQQM5DUh1g|Rr{;|TQ{WB85cE3%3hS%vPRh9A0ofC9@h#GW-!lkY` z|79!9igqu?VU&hLrE5o{30qjZY&5~NTKP*6Cc~B#A7z*dU0zISXFgYfKW9}4q;|){ lFhwJKS+siw>Tv+i3Bvr3QoDzF!Y}bMDi=}7HgS!b{RetXQ8WMm literal 0 HcmV?d00001 diff --git a/practice/strain/__pycache__/strain.cpython-38.pyc b/practice/strain/__pycache__/strain.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b181553415b7f0e338f7a18d24656c9e47c61edd GIT binary patch literal 365 zcmah^yKVw85VVgYTq4m$`~wZ{5kg2wO@pqXGv1A40e5Eikf6_>q`F_aHh+;SYx7E% zk!E*B^6rky;qXNXzSg6UQu=o^f02n<2>DeCDA1p3tssM*bPf4Rjr%UXxglyTd=qjm z1=LEldfBQr>k7uh5i5t?b07roY=aahQu&#hl9AZh$;LumdGn6EZR%j~gycN$O(5$U z@6d2V)>qdy3Fj`~B8GUFQyNVJ(f=o-IC6>5yQ`GwNo+R&&(0F`#oQJbqLonAV+*qQ0@!l4C3qD_$uKqWE9 zJ~=-jBX?HfZWITVX?s5g@rnS>vwPM-5)j~e`06) zvY@jIkNgb;BaBAGqq;Tvra>s_Tb@meFOKKH7bB|mUC-^$d2^KfLYT>{&xBdrIjo!jT@ly$^;s%k8hoj|Y-4o_bObavs9zk=X86whFk z8J~$~7Op&t+022y&1%er)?st34sDIivj(&-TVRXO&aox73~imQKnSaG`=s>U^{4Adj6G-3i5H2sZ8N7H0!e#zJ%XLS-eagny=sGvIM=v{1%v+ zFps5H_w24Y#eG%5_3WGCBkhGHvTnZOw(%hw31Segx*Kdyu{`n3eClpWh(HEz^1QN8FrK-_2E#T+%(C`-G}iv0UYWuPVqemWnnN?Sl|>{ V5VV7fRTJ)#RpJ`U=IRTV{tNgJv(Nwl literal 0 HcmV?d00001 diff --git a/practice/sublist/__pycache__/sublist.cpython-38.pyc b/practice/sublist/__pycache__/sublist.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c831c56e9f39b39e71f2b2522770bd28460c9dc1 GIT binary patch literal 802 zcmZuw!H&}~5OvxvT_P1CGXd9*@Uw-X!z0vsm!>ws^Mu)Dz-YSo}NKCtk97;7N&vP|+e{ z>#_CO2CAp}U&P`>MKduPv_B#t;@eVtzp4e`g=7Glet!Pyp~l*}ZH&vME;JfS z;wuU#CDW~IYoKwmAYE{gmaA{9Bgidt`&&(?!m>3S#Rak+l3-)qx+@{3((+};;OBUs zbebJqtX2@w`g7JWZ=5aAGXd7tA=Fm275Wit_QAHDL={SBc!PIKba(+JQR6St6iu?x zYu%vIGO=!zhE;l$I-_la@w5o-Ka7C6yW%yQAMm6Ew>+AD7o*Gx$i_vm~olU#DobovJUnrxHqKax5XY*IrSF_vQ)miZ?Lc?tNa_KFbi32b2kl-2#yDWUQV literal 0 HcmV?d00001 diff --git a/practice/sublist/__pycache__/sublist_test.cpython-38-pytest-6.2.4.pyc b/practice/sublist/__pycache__/sublist_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb53a191557e7cac02b8d4a90552fbf2b86d6fa8 GIT binary patch literal 5197 zcmb7ITW=dh6yBR}xi$A&Q<^qSQkRlI3lb_-)zX%Ws4O6fko>aR_>9ehckRxuTT=0s z{tysP`49X6B>us^@`C>YNWeL>+0CqHw;{GXXU3ixf8V*ynLU`C9MkaiOLMXP`?#k4 zK?C_^;ou>Df_-d21HG#?bs-JUG&EiFtY%4%e0l4c$H?wt2V1%ty%NNnq%I0 zb6nRx)xZSnwFVX|e>ZV#HYY*f)9R%m?yNQHrKl1N4!dp;MwPvTkDqIje2`W%US%w;n zp{&3-OrWg7But^K!6leRIR-N@i*g+1U>@ZJEWjelNmznqlvA(*t0*tQWmrQw4OieT zlrwM@)=|#FHMov)4mRKh%6Zs?EtCte4L4CPLLF|QT!OdZHp*pq2Nkjtjqk;Z*k?i5 z(veT{qJ9ZKkMR>MV)LW+lNRb7t)m?qq4BdpmcT9a#)%n?J3+vB`1JX}>2gvJr==%) zWCg6-KGFCD4*zA;ync9Oll_7j+&G|r)bv+t5|^FPi3+(2t`X$cu#=D@D}vcEWr` zuu3>(4aYCx%nT8Vzg!~Qf=Cv&-Rk+F{aIPOp`*2P<7=T0R9 z-jcw_xX(e09v`sQAaq}_jW?o|CMsx28A91NWwavaoGMwI9G$X^^#m0yG@ErBzKnbD z%hVJ?Ul9Hh#7W+E!dTl|xF*r|HN{~@XJ3c}!52vsy(L3}ye0Mc82TBfHP2lTS1(^rWo>Q$fjD3wS5sSFDF_?7sw#~Ktg;&K^*%*W`P1X zJv7%d8tzaIG$|{}x~(T!P`I>k-xXYz>lyC~%x#zB0V+;K&kX|C@7S!%JUWZoyyw}N zB74Y*CVVJyxvy}!z(xv3I$VU~uVY8{BFy>7vXk{6s&x1{v?SP=U2=Gx!TkugOF~wq zb%BkFX}y)96`L+gDm5J0Y)JKaF~fUBhI0Vi(Czt7*9NzP)sSMs2NKs${*MXI-%??n zI&4mrhYkyR)@9==uh5)pf^3fiybpm=#Zh1= zIwgi8;}&Ay64(RBV~ITu2O)NoV$UCVhsfuN#Nv*^;@ss5AF7x~qA4^&Gql1|SngQI z`Y~2f>4nc|h@-Dw5qF@->@q(x0~T@tVw(!FycG(U)HY|gIKR!80S!y1tM86!e`I3%-z0 zUQtlWGZl2Hrtje%ao!?L18SIbJg>zgK%~d|Qar-@1C20iTd5674fjt}xBCp$?Y^eo zD)#E7vukN&Q3j4m-0?dswo2YQPsA63Pw8`vu&>jgD&+aY@4o+@h_Zo#px2yMG~ev zFsBMb*QB+YRw9A5A>$AKB?>#qJ-G_wU3{ckrOt z;p`=MLl)K2ucAuw-54$w!Q$|!iouGxHwdL?Bb0J~6sJf3oKX&km5D~~@7FF-Z SN`F8JMVPOu&1zL+t@a<%)Tagj literal 0 HcmV?d00001 diff --git a/practice/sum-of-multiples/__pycache__/sum_of_multiples.cpython-38.pyc b/practice/sum-of-multiples/__pycache__/sum_of_multiples.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9fecdc40a46d04db5f8d703bf077e1164277543a GIT binary patch literal 290 zcmWIL<>g`kg2ho{X@)@hF^Gc(44TZzAUPNSu^EBb z8HkHnfJ6!dPz|HsN(N1)TdX;mxtS$VoVlerC7A^|sl`PgrC{QhpMGd@YEiL%qFz#B zN`79ZzDsIxc1eDLeriQ(QF3N+u6{vLVsc4la;koDX|8U5nl9WFkU)HXT0C4pub}dl r0Jng3PLQ0v>aAQqsh+fX26eS#->Td ztvw=+91)09{sI0D&c1TN{{knzZyfJ>wV7=~@M^zr#`cWA-}jzpQ&Zy>T)#IL+kd#0 z^%qWxR~aU|@K=w4FpJrq)wDHt{E}nYmS1jG?CeRkS%oK#SMzJlnr%I?Sc#QiS**;f z-?%SJ%`s;0SsRrUcCs29b~3ACpM-7V$6h459#<`VQoJ0P?80CD2!!h|Hyvg(=atng zWxF@atiq}=udo_(fmhiW8wXxv6KoQ=%cj^g@G&;SW`U2hIW`Y`f-SI1z$e*dwg`NR zU13YWr`a;Q3VepW!L9+HW!KpX@HuvatpcBCYk*=sncs{3FWX<_vOnc2YS|!We&M(Z z|3~mwSAqOs{c1%vO3z9i=cU8Szd5Km)JY@7*V7V`3J{6YV<(xQN^u!|@?A_liP|`} zld|Go``D5bF#Tt*{tRAFb-J}rSr~}=W3Il9!fu@(a@i8fuXiPFMWV&)pzY1Dz1h~3F;yvlQ2r|Xc5AIlQw`4B{`tV0A?26&%u0T0&}LFhJc}<+WJc{=v%*I zgY8R2SQ-buooX;fShqDSKa`wA2Q(lkR&LG#3oR5teP9B0hJA)0ox`Cquk>w|Ucspm z*@IJ%otO?iuZL0%z+5cA{Pb)vU%%-^FtY*7Vj9e8#(Ya-=Csv^M}z{SdPk%c#zDjx zOj>-ofbyXUjNxgXWm$ebdvaC?d2`3(h8|2<;%nGNh8%=|Z2e}a)R3V4tWPu}Sl0-kk;|jo z=QIEq0pWf(IwC6ew+jFsm;j92!7TqNea`>_-OgdBYeulD5rD^Mbum{yM#4R;miO)# z4qM}v6M1CiMQL}ww-k~M9&c`Jf`j-xdO`*8rNgFQFj zdj+h`QCKhbnIV;6SE}pnDhzUm#A6K8hp$crT(j1zxo+l~DV`AeO+!|Ku}>GD9e(YY zE#A<|QlS?|A_QlRl?XaS1T8OSobbbp`!SqQ_+i8$`$r*ZQOQI=JpoSLk(@@*bLbX% z=OKJCOE0At)TFcj?Q4yVg~TN!pisIVDga|z=iVZjk{7*E{& zSU|A}R5H2SJtDo?GU*PrWj454V!{A!;mg`Jb{sk?1JWv1t literal 0 HcmV?d00001 diff --git a/practice/tournament/__pycache__/tournament.cpython-38.pyc b/practice/tournament/__pycache__/tournament.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..88d0ff4aedcd6656acb841d3e16a458f34b3b421 GIT binary patch literal 255 zcmWIL<>g`kg2ho{X;MJ?F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIr6|9=xCkT-CVn~ThZd(673(MJB_*ch=Vj`X+n~7Ud=8rskC(G4%>6Z?Tpn=Hyg@%q#}Ek%6%YWUHSh cghp5fVKD>cZgJS;=BJeAq}qXWeFkC%03vfUI{*Lx literal 0 HcmV?d00001 diff --git a/practice/tournament/__pycache__/tournament_test.cpython-38-pytest-6.2.4.pyc b/practice/tournament/__pycache__/tournament_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9be7278335cf8a2d2e14947dfef577894fbe3778 GIT binary patch literal 5775 zcmb_gTW{Mo6qe+h;y7uW-n&a(U@MTcv(sxZWZ2p!Lti$dz)}n_1`v$NIBI0cBju(x z(!I1lU_W8Qp8A*c+Nb>muN!s_1=>Y+nw^2R!p^dD&@Qp_>;kmQ z>>^C zi7tuYfot7G4L7F$ z|5jiC_ZtYlGV9n==GJgy+N*Y8Iwo-;3UFIdLW2QHOa*%JxcmVpe#5i-Ovjn zNht9{De?4xi*R&y1x866YS~4{vEln~zA*Sshx;5}KS~@1Yt!&-PD8zkPo)AOPQYV` zlW2?ptxW*bq5+}449PAh{8<;sFF7Oh7^zRd(KIw)o1vNE@8f{7nhlg=at^X`>|JsW zva&imIX@d=&%C`oE`Uq4DnTP4tuHHc3|(CrLkfe{+(GpZ=z-@ zlalRj7WCd3lN_4S`%)1Ub)G9$f-ZDI=tuiNQG~KXqt^aiL=jcSLc#nmUl_~gZ5>%> zxtocoqY#BXixrH!R*WgZ=9kLwYZX^Dz$V%js+C|nZ}P>#JZoX> zaw-;>3#zR6CUlZmByngLAtI2WV|LCK+XX{RDx;XJZ}X>AMl`|%ZaWMPcwcTBaN9&> zAFSy{Xd?372x^#s5gc68T+rPQ|2(W|?rNGk%x1JFY1|zX0$W_eV^vKT_ePdvHXWF5 zOqt|Z4NPyQXm~3Nf7QVBW{I$vm1HGRl781~Q9pUJ_yzbQKLs-)D`vX3Gt4iHC~G_a zPXhf%|8nqZkSU9((hIHhtF%wv=M z7@t4$wyENj2J3c~I3>b@yh=wynxlEVcet3|CynyDIly;RfW4prRI)yYHqDhVry7$|V}McCB9lu*jWEwjud?*lxLJ$MNiRZ(Op zBB&Asy$)1^RKR}6fSm&~mKEGgTqP`6OwndSvz#_oPsA=ESTH0cE)#eWVLc!F6+*Cb zms}B8F%zfIU?oSKMuRz-zzK; zF*#R;!D>-Z5xc#>i|`;WN8?(es#3=84xHYiP>RG!>SiCi-y|@7i}aQ*7}r{{T&Gg_ EAFaX(TL1t6 literal 0 HcmV?d00001 diff --git a/practice/transpose/__pycache__/transpose.cpython-38.pyc b/practice/transpose/__pycache__/transpose.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fcf645ac9753430973b1b7abe7d3b60a27af6b85 GIT binary patch literal 258 zcmWIL<>g`kg2ho{Y4Sk&F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIH77GKwYUf*4<>#&=!X`k78UC!>Ln$nK7CxCYNL;r|Op!CFT_uWHa^HWN5Qtd#xJ_9iW0Pk5eZ~y=R literal 0 HcmV?d00001 diff --git a/practice/transpose/__pycache__/transpose_test.cpython-38-pytest-6.2.4.pyc b/practice/transpose/__pycache__/transpose_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..41b50d54cf97beacb03dd114aa9f78922f1c6759 GIT binary patch literal 3945 zcmcgv&2HO95aup_Ow01WW5=zLuxZiO1uEB$lLAFhShktefFlPIec214Xx9`|ic(1$ zv5DlAyg^?eK~H(5z4p{od(Npdq(rN+Yy~LV6*x1yTvGdeGqXE9o}Ml#(0*gfC%?`p z%J0}2ZW?rU;EMM_aD|gVVImH_hATR~0tsM}Y9YITFtPPlS`%OnO#zx_yD`O{ZJ+k*FEHs#PbWRj;A@QlJ;Xbrn- zq9)bq?w(XPx9(=}7~S1sbnosMm{S?d*zfcLu{I2;MAFp}kn)+AmX8sUW!`SK{6VDQ z^0|SV07%$zz?$^R1)Nd=2d!Z^Q?<0*fD{OXg;`gTq#=nfNhpaYNg#=MPb^6)W6;g@ z(cz0+e9>nY5Dl_M(pw`T7Sk``#1P7G9%eX)-PFek8y#+PxWVD(h8vqVS0G+25TiAW zc&V1oIc;H`bWfwCouf`?vl0JfFd(VpNZM{oD#UwgS(2WdFxvGQJw1^$N+eC%DQ#OR zwE{*1Us6AmG!!WnmFN~Mc?@4)Wqh6Z5$r@rmm73LPeg9gZiX(L1>KNm<6k0;C=_B+ zO0NC=r7fiQM$kO|U;bbA`& ztJPF%Tb9K%5d=Z1SzX8tEeOMqXYM-EJJznC{f=+Wwe5q<^A7 z6%`2|8OSS`88UOliIUB{1PTj{EYx;}K#dAD&nyCKx(F<^h68J+#>|KH>Yj64x0!i# z>>M7{?0shL9v&S%KBzrnX2X8s*p6c}?cvdGgK72SL$IsP(G#Za9UeIlUI&k12^e`uwdY%EU##6SRe$XE{ z`#Me}aTv92s2r+QrZu2}-?1^Ho;7ATcC}&GQ^Oi)tKYY*d>pbZyARr`k0E0^BLiyN zjEne!i#ak!(oaWlF_`<`Q$aVO*xh24&5m$gS#sS@m!CqdwP6yKrPM1j?3w2k6>6hEN2sP;1pOa4d&fxY-92$Pt4 z@mn^R&6T{D%~~%>^XaJ{Bz_pn@=ovEEqbeN?;Lrk^bBdE_TTP8LIQVlY;M vhcnumku*<3KfzA^p=LT@?ls{v3>P+P#nOC`Q}ZK!#>BY0n971;(z5>tp1hfDE delta 19 Zcmdlhv{#5Ll$V!_0SL@4Y~(WL1OP0b1RnqZ diff --git a/practice/triangle/__pycache__/triangle.cpython-38.pyc b/practice/triangle/__pycache__/triangle.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f73666756d018454331406dfbf044aca9bb0825 GIT binary patch literal 468 zcmbtQy-ou$3{LK+cLjB2;sv@iFMz5_Fn6iC+!kVkBGS8Se3fA5O_=&hU3m*8>{O-Q z7;4F%KU>M?FIi6}H;Ut{xqGo(zoog1jGF}~-7|m!{izxS8RT3w6i{-_V6;-x%4t4w z3gMEEoK!G?TB*HW?irerJRn8UPVh4~Yr;sz&YmrFtv63dZ$sA`e8=cKZA>4n8@xj^ zL~q;Ia3-_<<8X`Hoey@vXoGAekybjEjQ`t;a^>hI|6|FV7(a|Xb>uK0iQGwg#QbXM pikuDD;`l+IytsGPWpdwG2I3q)C1s`S`v^KU-R=8F2mSUOf7% zY8bEaMZHS!vI{pKfFTAkL&G)2)9TrlVH&-XyI{(ivRj54E3EV!*XdQ=YOm(jOyg^V z*rfEzASGJ#(^QqCO4q;TI-LR8I`r}Cu`Y~mG zm{bGa=Up07o>X|(4{1cZ_(S!w;AIzXeh&;4pk0fY#Cm18wglvsBn)>!4i50Eqz3gB zvIv9MldZ4b4%%UXA03CZLwVdaq0jWf?`636;O6gv`NjC%h)oy@KF9V;81fGbX9&8q z+e5_FIkOVS=bW zm&T|U+QS7Hc!(Qei1>4$Z;3gJ`jhj0K|$Wio$u+k1%YSz8bjC2fqP@T#4jjILBo7U zeefDD^{Yz?_=maR(bMvJnuE$400GxOk2|v*N4k2?KlKi&cNF&hn7r{e zYhWPQF$Z68-)HXlZQ+NZ55X#ap8DZ9SY3r?>FV9hgegOnu6<#zn;>xp@e1)XWYS^i zM49NX2=qq*%Z7hVfqyRtzP5vc_^0A6+eXA%*w+-;endPmeG@wIiGuyXOzgT|3KGbS zV8Vg)B<=_jpblwjFpgSM?fj7UK|w~zLPMdmmqVv$e+7wIWLi^%5(>`}KDMu=D5A-2 z1^AsD;B%|ms*>yBG&}c;+bAN2gF;RUh>SJ-odcC+mf!g`S9mIS!*?20?MDHZ! z8L?^=ph+o2W@A0aj5tdX#jHJq%2c&)W#EyTJx9QrK3a_;=}jFh%+PifShuyXGLB3I zeHspX=To6`S;RimflFjAE~6g`=_qzg2=bl+|A7|%tX>LonaU`}F$YyShs$+E6p)Jy z8530Y6)N`&P|571Fq4T@VVDZcT8z;WXc-(R4D^dJtCzwQrZ?tLoS}sZ$b+fYyQEBG z1jMtQ6lIzva^EPNcC@Qfprbix2@PPFdmi5v*J}_09W@b-zg1A{cXj6Bt~MzHBIJw1 z+-J}$yM+exFV;k(4gQ}(?GD@=m*af!XIR%*Nt{DSQ{y1wNqu(!$J6xfvNt%z9n+Nm z2tl&cWb`=;VwzOPMM)(st3hM2!F-lDCs7dNOX8#%i}*W9p0zMQCr$^d_k8#_2@jnN kMMwZrj-=v*is#bA*^#H)NBCQgMUJsg`kg2ho{X>vgNF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIt+=EpGcUaeqyS9(ve6GMPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitAYX-zDugwc8hmABZTVj%O1K`vxqECSi-rwO4E7C~6d WK)G8SHo5sJr8%i~AYGqg2R$$X&#|a$RF=97y1DBFlgqz&DBHR+rJMYpADx%8m3q!sZ&UNhu?sEE; zw46D-Oio%)qP;LNLKpewBS3$eH z#_OOx-r#GXD|{V{Zs^*eFg6e>8`6?B9HZAq(A5@*FXWnJl+#Nvcw?Zi@PK)uX;jRMW( z{uBcLI1gd7cvQq5G8ir^M#Um6=6j-C=4vNPpu;7#gCZoh$ zaiA-_>QT@9{mb{zb`nM@W39UO&L&ZuMXA#D!|{~e&vw~(npdNu+C`(ZEyYI}WkOf( zm$ZAgR)x!XTtcb6Ng8E1$*ZIG1~5Ddp(N%>jFHk7+AneEZsaA#dsYPFIaVT7M-NDo Lct+i9?s)VUH#3TU literal 0 HcmV?d00001 diff --git a/practice/twelve-days/__pycache__/twelve_days.cpython-38.pyc b/practice/twelve-days/__pycache__/twelve_days.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0bdb9f1a7db9f715ac76e32abbbf274f98ea839f GIT binary patch literal 276 zcmYk0I}XAy42IM45YLr6bSSw1LP&IGK`dRWkQgcA(JBrFc5cGNm9laKHYS`F1i$p# zpJhAoYB=mM(k&frV#*I+{41nlM#cdJ#Z+)*DO2H+MGfhDUwID5b22t5C`L2E;?APb z_0bArvl0w~>%u|RX#7GIUI||zb-5U?g~|__CxBa<7aY!Dq{cljjF47K;PwQ&5@IDT r_~Fd+xVX5s0jVwcXR$giFfHOmROjD+HTg4LXR^=LaR*bs^(3=5ee^rK literal 0 HcmV?d00001 diff --git a/practice/twelve-days/__pycache__/twelve_days_test.cpython-38-pytest-6.2.4.pyc b/practice/twelve-days/__pycache__/twelve_days_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a171ee5eba4687d382909c5e72bdfd02c408beff GIT binary patch literal 6766 zcmd^ETW=dh6y9B5vcBckYkHj)T1eYCMNovQDpbT!Ky9d+R3J-ewDpYbrF(H_H#d_$ zr9S{3cyGl6L?FQfzk?sJukg};fOvs(X4Xwyt(_Q`LSZGJnc4N6Ip_Ok&g`7MT`J`@ zxW29)tUo%eX}@4&=aq)WRrm!J5KLpbqg8cT8g9zabj?jyGrD?`t!Ckg;f%Ou)zr0X z8cVVC1C6D5_Osk(s+wo|qBfm*44SlsEj`K#Ub919!}iY0fW}q$1rI=QIbPLZIx`+< z)s)g%O|uNkLOa7om!?X>;#k(>?GJsqS2*Q?yT^NwH_?-Agt+NTIWK0Gw_>- zUvLZr(;NDIeM5Vwg%^~<`KGXg(6s{M zu9HwKbK>|boHQ&Dp-)_XnONkeB|>4d1}CPOYBsecWMuWDDs9*&F7va12mMur5 z)V*}ToqA;QwHB|1oNZ~M01tluVD>irHJG)^cP!?6_H2a*cSFB5%h$N5*?~LT5>_p= zYkW48&d-3QL0qR;ry)R5ZmmbtSfSD#d_XPQ>KICG51U{p4Z+X}7&*v-&qA|f4D zW=QB@02;~xD8m6@QSJaN)1FNNtWW>paQZyPDQwzeAefrKHF-~Puht~*a}RJD966l6 zyCEkHQ^4Vnv@VCFO&F4NA(u@?u228rko%&u#(f~OIlv67LkBW%Igaf$$U6W#V)rcI z#8BQF&eLk;NoysZXa}t+JLny>W4a5_k@jmzQxUs`%^n(tgY;nsQoBAFqBexkYrezC zEx;7u{M#VLU7$C_C*t4+)+>C#F4_RQs6e}3?}FEC&m_W&z9;n_4%(kO@z7oy2-?72 zBiA?&_>47k-C74X0Nv*Xw~VSiL+dFOTG1m37}!c1Xe;bTjxV|I$z=5V6bBkvbbt_0RX?aYP+t4{-32|r0?v1CEn?zuZj@#f(GaXP!hymeAq=w zzWrt*DGIVaYKEic*O(e^H<|-6BRh~Amd%iv8@6*-5%aGkOumrxTt8$~FAmM&3| z{Gq=P`OsfzOMiJ6d&T4}y|0F$sIy9NY>C+m2aJL6e{$W2*Am=%xYd&Ez4(;kalH2{ zgrZbJB`Jj(br1yH(-a6{7p0|SO8aUUj?%N+lyXOf=>gt;RTpy8Zo$zM3rXvLlxukw z>=}R0s`wjYs3Ndz(3V683qS{xB-?I-vK$R~eQVT($HiY?Q^YsS3dMRo8qNOU|(DMN#i5aSn!1`M6N# z_%@A-wy82+dT2m~F4L9q$}S|TT0}#SfM{qN+NYEE^-$Z;H}p+|X;a#l#=Z2SwxtWq zYYEJuKyu3{UyO9`=@d%-iUWzWn(wyezD1RI&dq9u)?QeW5LM!woysk#oMR9ttK`9& zuE4Z|J<+dI$jZ^c_ZsCZjt^(wU=AuBy8VfO&!hI|#+`T>k&@Z3Gg#|Re2G`#-uGzG6S_X>=WZ8Kb>X{` zD%WPr;kyziIm1MnIEVuC7>UWaOI=j$b;$2JUP#g^&%%orgT5a-j?2|H*WYnYSDQX? z)pvD0E+I9iQS>C~=u;%^RQyB7B1y%$y<4;}JsFvldX~#6jq;SbK3fKBX;h>XbLr}d zkoJwCeVE7=`%oM}aR|i}ilZowqd1A;6pEKnoJVm1MH$8RdXP04{&6i}Yza<)Fm-dp zG|iluHw$LbESaO`m^p4vn3HDOObh()bRjbDEZa_KdqGsZ+FGYiT2r*Oj!2c&2Lapn z%7U*7_}&ubp4^H?I`{I>SpsW`$Xxd95F6D(7;iEVLgm+l$XtT^^A>zK!10ruh|DVr Syg7`Q0ft0Vo77CBnEMkq{D*D; literal 0 HcmV?d00001 diff --git a/practice/two-bucket/__pycache__/two_bucket.cpython-38.pyc b/practice/two-bucket/__pycache__/two_bucket.cpython-38.pyc index 4a9f00540628d2505593e9ee783a01e3e4218c6b..7caf5a8a3e58fc3af4b83cba3c33cff81984ec17 100644 GIT binary patch delta 19 YcmeAX>Jj1!<>lpK00NcI8@ZS`0VSLRod5s; delta 19 YcmeAX>Jj1!<>lpK00PV78@ZS`0VO^Ih5!Hn diff --git a/practice/two-fer/__pycache__/two_fer.cpython-38.pyc b/practice/two-fer/__pycache__/two_fer.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..da170fd83d9551074cf7f565c5473da29c9b8620 GIT binary patch literal 251 zcmWIL<>g`kg2ho{X)-|iF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIB`+~IwFo2)CVtuIhZd(673(MJB_*ch=Vj`X($~>!zg^f#`T3tyfTaiyg`anO6*Q9|L0%$VNX+2#v4^ Y!eR!>-Quvx%}*)KNwov%`V7Pj0M^$q{{R30 literal 0 HcmV?d00001 diff --git a/practice/two-fer/__pycache__/two_fer_test.cpython-38-pytest-6.2.4.pyc b/practice/two-fer/__pycache__/two_fer_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4027e8d61526c1abc612f4427e554a003a5f6380 GIT binary patch literal 1069 zcmbW0&5qMB5XbF&x}`->5MKhRLR=~>$qOK~%Pw#$2ii+6R$99dNaEt8lvdn!9|Xjy zujDHyUV#%c32g%f31KOdnaOzk`%m3*x7#MLzC<@>V~dcl7&Mmy!7)6=85ltXO-V$n zx0Trzp(Jx6m)2jr$b&Cd>SuoBQ}Ub$TR0a)IMRE=&h4lr=u0wizdw-jf-86E9D?Er@;X_kq+M}gp^qX?;VF7x zK9WzQq~{>zvxVTW+ZwKKy~t&MrgVR$7Ds*cGstAHvCO5oD5Nf*zFWkpMz#$#P9f9T zhG+)i_mgl81w|MKlUS%c3D0Elwp8;_egJhzk%e;|Ps?N~Ly-IsB;y;U^AdQ2`O5Ur z;kn{@oJsyFc`x%W660}%uJ7&D1&5V?7knLd*MbE-hXL*++e71?q(HR3vsGS&zi8Ju zIPIZ9owaF!XRcNdaf9{>q_?zpf2VC0{vWLUL{0WT5(NJUdb0-2RrwmGy&vwi2JZa> z+=KGrz%z{3`?+azo++_NCFiEYIo^w^GuQZM(j7FH(d?&Ic{n<4gTaad=gKIvnO)@u zZNnyuBrTJ?FrDN1itnP^e7-^*L46Sul?Pfbby7;x+NF%Y&9z~3En6G5$deL->f#zU d0{1kA+lm-};xp_~t?jXkkjTwQk1(s_{s6`G2EPCR literal 0 HcmV?d00001 diff --git a/practice/variable-length-quantity/__pycache__/variable_length_quantity.cpython-38.pyc b/practice/variable-length-quantity/__pycache__/variable_length_quantity.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eaf3135e648d5961d7cfad27c468770fde178b3b GIT binary patch literal 395 zcmah^y-ve05Vk{_R!H3t?~tMO3jjibxl7fh1Cir9z#@Ox4k9~m!qivF%3CmTXOz;7 zlkU4af4c8J@0QDRLGii2e7vUm#lvYNG~8193jz=zKg3=@0%ueuq+5~Cj3jCb?m6!$ zeM$ggD-LpV5V;)ZO<$Mjykpe}-w$f%=|$;vsiAGGx<~&K+D_p+I%9pUI;Tyr2GyH( zR+km7Dr}y@^Xj$NO|W4&62&i3OvJhy#ta+N0yJbJSn#oq(P4(4 z-|{mL-cB&~7u~3z1m3LT&;0@gFwjaYuSuNXkW9%WCN|S+@kKMfETL3{S>c|F3|t#N5`90{JDRk;Ii+$ z4jSmMSl$S1=M#{G6y7Ic2u#!|NW(DdAsB%SY7<6b40RgDVFL9q?14$tBQOQis57t^ zW>Am9KA1&426HfvdK~t{0n`(45I#b^2M)mk>Pa{ZM^I0}Q8ETf)-ESy6<59i?m>iw_+7f~O8OE@N%{rUU0aO|}b|B6?N-ox8< zyW%So2 zCtEO=N)qQ1+LSJkb39>-b<1@s#S*vH);+!lpNAMP#bNAe;ln_0>bb@XLb)yI zSqZviiz1Du0(n}2yb=ewNBan1f*^S|j~5+0)4?d}Ev6-Mji2$2#xE!&=e7qwC&9aA zyHq0dP^}~7<$&+Q#^Hcpj6>hcz;58P1%&^5Jp69LDEMiNLi_^|MzOFP2bv$F15I*Z zoJ61GQ93`U!0($pO8W@-6dIJ|Ie-`4bbvGD?JmJ)~IJAI` z!#U`mLyCc2dEqcN!NlG^z38Trg5s#+#sE}OEDYoaE#~%Y;9_nz4>3WxWgs#s-Jeh# z=$lMR`v`mr-jYlo;YEZ@SY;Fw9dyF=+&7&LbcQ6%TOjHoqZSoUuJj$1I&JLI8>AI8 z`=-^wu9VgZ<*ee))i`(BS*_E^K>p}J^lHzJq*rsiAA0TYNOYYTvWg>@;~WWdU8jkN z8z$P6BwN6X9wZ~0B^8>{#7ulR&76wYqS*yB6$Y+BXr|g2(4Pcg>8$vZ%9RX6fuElY z)_9G&@ehiA0&3|&Z$NQbWZLL6z7t;cjR32Me~Kh#BuVgkN9?260mGP zbISFywQ|A2I?+N@yvPOWTHU*<_;x*xhC3OG_}8kv)bt5@QKu@Obc={aPGrcTofChs zn7pS|wPLiM*rhsmuPI){E~eflBKXs2Q!b`sco8n9E&RBUXxBzNwqmN~M>;2{hHBiu zIN2S%8-LJ)xAG~9?aP}WsS?C;z2rHvu-tO;1~znQi8C#s4YRT4Mr>;BX(!?-l`Ya! z>Y?o^?N78&fM@Y~XPEc(u2Pa4a z6vf37iDeRPCbui7Z41DF2W7jm9vvd-1?6rUqDfuXcKH6S|GN>(mEPS%MzF8_te{=v zrY@+i6tsElxuYAEOSW1G_7vaYYhma)6}LRYMiF?erKoO$LMj)v*5oB}!Su)}lhb&9 zJD6hSPpk zSFSm=BkFK*_DVQh@t}`|*ULnQH?)LWLHbL)2}0K!?e)Zunuo`1bfBcMZ`dVvo84jG z(sRR0Jl7tfm!4!j{X_SUQlQV_VV}AZB)w=Qyq|LLbgzsBwZ|7+{t=G7p=FbYe<~h}hpTJWO7lQyzgKuylx=(bD%Xx42 zXoWpm1-p(NS=gp39%A#YT#(VGwMlJbHI5T;CjZZ|ZSRqJHat$tF_zT^?HPlD%A>(Mje-)X9+ya)`qbFFjcnZTcJ+~4 zJm{O2Rk6$5vixDoDp#S72rNHi(cx<;cp^p+g%~A)NBm4ok(ePdM`Aw-DlrA^ti=L} z!z7N9pxRBGB(X?>JQB3?66Z+JrbVofxJZKPd~un?Dv3`>d`g0%j3VgdRZz+&P%bq! zHPeXsCe0b;jg*;^78WzUxmI_u(yO?BX0^6%weIGu8f8{*IS4ZtJeCE2DjW~vN$W3v zDEx028_Surg>Tj?jz>57*(Y14-Q9=UL5wmGyKmmbH*eZ_eoj6qeoD8=S>L=K%*_p| OBxKw%k>#d7k@^pmWDjcq literal 0 HcmV?d00001 diff --git a/practice/word-count/__pycache__/word_count.cpython-38.pyc b/practice/word-count/__pycache__/word_count.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..694ccaa429e727f0fd225a872c5fc41d7959ff0d GIT binary patch literal 265 zcmWIL<>g`kg2ho{X(~YaF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIqc}CMBsDKNwFsmHO#E`v4=qkDD%MZbOG-@1&&$+zNiEJU z$uH1Ptw=3O&MeN=FDOb(F3C(z)i2L4O3_WuFU>0fGvmQby@JYH++bEbNWK_kaxuuY k42(q}`~5T_G{Q;2KczG$)efZVGY~TX0OIC1CIA2c literal 0 HcmV?d00001 diff --git a/practice/word-count/__pycache__/word_count_test.cpython-38-pytest-6.2.4.pyc b/practice/word-count/__pycache__/word_count_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2241ea58ce7dd0975883f6a6b32a392a3ab010ec GIT binary patch literal 4877 zcmbtYUz6Lm5$9itlJ0!A@9c~1G{O0wtVF%5-F7;0JLyfG#4~-kJlJVc&NLi|fFwE; z$pBO?(&R1q2z|VVcKYP6gx5aZ2k1;E)3Lh?N;>I8UgN1GEjgjNKX7Qxv*Wig2*GHc3nZ{Ft z+06ODU=FXnXnb$`O=dnbI_@c0GLAZ?YK7@I$%ErmFd1Uw^2dUkL%8H$L2&(2-(n`S zelUEyFzh?bWi_~WS)F-M)>wlzp{%nO+knzzo9q&l4YtKDL)m0k*i|T7Y@6*sxxucn z>rig8UG^4~m)H$<6Ur@ii@goyW%e`n4wP5eyNp12mF=HLFr7p^C8$+tj!XZ+2`O=f-%7qcSs?-sHKX6z&7AO)wW^3qZ*DkT^B$6t?W zERcnlrg9{Y`!5ZFbM@oXgU_IYJfQnM%F-k{_=wA|@-#c(-*OQ~a&(Xh8s<^R576$< zHOsmh6olt6*!^sxwy`p6OB1dqViVpV@vVkA-CKdTU($OGavc;k88BOi_9Jj!Aoq+vJ~f+r!D0l=Y}fo-rWkv7A0%$j-W)%0Nr z4;R~5#iMA@tA-JPN{%>s~LpEWA;p)wy;1KTNpC1E^fJV?f)9>nDK3M!n}+hwR$mDV8P zqR@foCREM^9_Peb4mno`DR~ONPsuaL07QZ~wGquN5FJZdgA|env{nNtvH;A_h{n;B z2O*Wb3)=G~R+a@;d#?f50Cf%EK2**DnEND_&WX1S=7aVpk&yXg0$Ht{lbDVN!+r96 z$dh?fC?@;l&*``=I2rI9r;Cr9|97p*upjj$&k!C|K50D^C>pH+%mbvo%xASUxr)1*KTUjFxlbj~*HdI!K zD`>;SGAxS^MtfxDh9kwAnE{X9QSCtm z5j4xX1Vqd=7qsA^;|X+5fh$%#K+ypKptDT5y0>@_8%$cw!EGG^zDP#_ zI9kx-gD6R$4R_5K`^hg#{NzHDYkXCQ3*_i5TmVPAWS;X0A;-fA0Av()4n^>@lsA8@ zTFX!I4W+xV_ca4^rJyhtBxxQnp7St=d`IPMPx1_@SnNp*@AdS966in8)*1)ZSpa?J z+`ejEg=|f ztWo&JTgMwiKIx7o#Y*o{5kxZRiS#R;6dbt9h8}=?;(Iz8Kp)7jQq^X?Dv=g>Hc69! z#u@B<$0IJH@Eb(E2pYIeEX%9swbpP}ox~wDESco3*&5R6hbhVx#aHi7{E8z`O#%$5R| zg4jWE9mOsR+&qeRP@va{dnn#VfqNJ62*oc^{0hZm6u(Dth~n(9t!sGV7Pzg%muV;T zOwWdI4K5d?3*{D+TTsLAj#tzDJ1yn)#t|G<6R9>1vq`YHyAfm)Byhj@y915{`+^?} zNJ*-(Xj1igTN9Ku-{4Q)IEiw+@teo+2S@P_hW@KWdC#Hw3G86?>&tK`?{@{0AEHxe N-|~#BhG%WK{{=IB%gz7* literal 0 HcmV?d00001 diff --git a/practice/word-search/__pycache__/word_search.cpython-38.pyc b/practice/word-search/__pycache__/word_search.cpython-38.pyc index ae46b94ff93cc2ccbbfd6519ebc5f02942eac916..e943f5a28e7fc0ec4d3cf2f1baad12eb05288fc5 100644 GIT binary patch delta 19 ZcmaDa{a%_Yl$V!_0SMAQZ{&K)3jjC}1)cx^ delta 19 ZcmaDa{a%_Yl$V!_0SLC7+{pEm7XUdD1;PLT diff --git a/practice/wordy/__pycache__/wordy.cpython-38.pyc b/practice/wordy/__pycache__/wordy.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..81215e4a2a9525eaebcf05090895bfd77552a061 GIT binary patch literal 250 zcmWIL<>g`kg2ho{Y4Sk&F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%QCONX+virBp&ly@JYHY>9cr<*8s(ib2j}U@T$=l75;H b8es>71yXX0!zMRBr8Fni4&;E(K+FIDmMAcv literal 0 HcmV?d00001 diff --git a/practice/wordy/__pycache__/wordy_test.cpython-38-pytest-6.2.4.pyc b/practice/wordy/__pycache__/wordy_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..065a46109423019a1fea484e8260adb7a5643804 GIT binary patch literal 6207 zcmc&&OK;mo5GM69Ez9vUemh~}=3ytYEXj_GzGNUt+e2ZrdDMXpC1?#D(~(GJNkz7i zo}7FCLW`b!EzsZ4KhP7eJ^9`OMK0+KUnZ%DF?3KRXhx)V#qaxec6N534i9HJeEnLT z+WTXSjuzS*dciNl>~XbHr=tOp&}tPXypa#S1m;4dbMTG4HCE zFRoS2{(1NAU3ZjAA^oJbYVJ##@?196SBg92##8`yzKg2w@7WuVX^%&-#73c?vYs9sHnfk28W}l*Qp=(zIV55qLTlR)` z*27yai=e(z!2z2uS6IBPP9~r(2Ex1^fEmpMUYp(k&UgU56y;~CWbCj{+r#ckbRMC` zjR4YXk7b}#8kkv_dK@WZ&Y=3@6| zToEHw^p=W^sq%7saXVW4~V9D2cV!t^yTC1@+spmi9u^+nT616=ttn zrvp~bDVHC~s-YNG_ItVBQXVpceck4<+YN&>xYR_@KbD}_lFFOQSi%gvl{zd-; z5nMss5x-00+*N?$`vh<{54y+RkaXtG2b~$;bZGHuycV(l)<0RM!g1nl{_Hfv;ze@y zR_+j+ZC4nY8HS|dDlRd-{is8h=ngBsfB%G-hzL=_&G|)Ca8}6x3+Eu=T!LpE5=7U^ zn9lv-lhc zP=chPgY=DVi6GRkf1LeIeF;a}+16v(M0LdnCcIlax$A&m3e-CoM@s>3>F~SskF4lT z>rE%Md8Mek?Y`J}y9Wg>ac6?F4%QvV1)=ua%L|quNt)bHB+1H3QbUJUoxbNJEGgu= z^9viIaiC*JHbMrEusJqPh7M2JWioVN#b(INk(np6NahL|I>BHfnH4g$2V{9Nw4GuF zGHYaLE5b@-%4DdR4-`K3IV2rHGTQd%@MBP0fftgo?~D+93qr>3zdU3KyDb%uXEejg zZ8eW1|7uoh9?^7Kb*fiP8>>udGpy09LI0LD;N8n&XM6U^%o18y%F%_DZqxCuUFTZD l6TEX@#)Dz|z~cNs)u&_$pE=@xL8qH`2`6yloRG++{{u|c&kz6r literal 0 HcmV?d00001 diff --git a/practice/yacht/__pycache__/yacht.cpython-38.pyc b/practice/yacht/__pycache__/yacht.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a664a3b96dfb969277af3c8ee70dcdb12696b6a0 GIT binary patch literal 442 zcmZvXOHRWu5Qd#6CA1(m2#%0Vvt>~sN}4nlQ6lBRBbz8V1|lel>>$xSH(|w zfW2C&)pt~kYm_2ei->IY8}beVkqdAgWGGUiPh_jmwINiDNY&GamaUmA9OV1d$vI`* zsit>T-M%!=g7T-n?Hu|>8EN>+=~zX2c5+O37bNz3S=95?KtFgewp2;+9{ z2AR;~$V-KuUB{^~vmo)n8Gf86GT|%fQhWo+^7Ak(gE&t;u`dhC*e~bhC5{&2AjDY~ vdS#j=bG(GE;|sjpI@1ke?0UoG?WZ<34Ym=Z*{ZEypXr%&{1`-6{yo|cbnao- literal 0 HcmV?d00001 diff --git a/practice/yacht/__pycache__/yacht_test.cpython-38-pytest-6.2.4.pyc b/practice/yacht/__pycache__/yacht_test.cpython-38-pytest-6.2.4.pyc new file mode 100644 index 0000000000000000000000000000000000000000..419a0617a69b5eb15b4cbd44657b46dfbc1be597 GIT binary patch literal 6679 zcmcIoTT|Oc6qc_Ta|_o%LI}BsTujLQ+L90mOc^r+rcKE|3(pBtwr9m7LpEO7q>35kw6UAYQTE_17fhK#f%fHWNH?e~?tLL_Ks8-C`mxlG;uI|km9}QVDt@7-i)JwKm zGG_U1t`#<-&+Y9ySvnAWh2&*Xe6`r`BOb+Et3hP8$d9Dpu}yhw)A>3LQ$0b3o+ar> z(tnbMLDB#+G1v6ssngF8D%A$gKK!qVbKHm1YZMtPMF!D&SX+@v<|WQEO%9MDm;fqZz*%ipj!HYn{|!f2dj$3T(d`==w1*lWt=kX3Q#$ zjMCIC!L5@_+mWW0);8CJp}GlSyIPahq=MC-5V%2Pu$|JMs{zt)JI-`rd3`ZthE1{> z_9;V(QngmG4G_8|>>X(s)>#GmWuH1ix_mn_oX*;kMKQIs@?!{>a|#!nl6NeX(YE=U zVVze9T@NG_+%GaK%GhciOnQ1sHS!?OP>NHXRtiZ&9GGGn3L?~(6x3}Bq6Wu;hjoP~ zcW+6NG^5&;liFB$9WvN1KFj=QSXVpX;|7uO(PYH0hwspIYAySRH|=pHt}g z=WeHdk;$<1!UDrZ0WV!#Wrgy%;))CtKUD>~cyCr9h|OJv&75CoNA`})spFEt0qRU= zN=c~!F?pb{xawoE&udCRr(=NUqCa@1Q1Ku+8;s*odp78&#aXN^iRa>nmHf-VSu`9F ztj7waGd@bRT(`n{3?3W?k4LLGPPip!oeFe$lT1*xc})pINw0`4oanTd;g$L@re_NJ zyFT=8K#sVLAkE*Zfw_)Z{@fYWm7uuQizF2wHnbyT1T2xZvisaE;QfTHn)AVS9 zh0|SA=)UlU^($@{nSaL+vvxVAtY@!+l=Lo4-XjyVs0{KTsFQMCVRzccPHp#XU^C)Y zO635y3X)J|y6HuQLkYq+{WcXQ{`7K0*Z+?kPem4HXiQvk0TV|B{kj9WBf3T==T5kg zx}HPDk)s&a$+RyN>4oLBm4)DqSPx6Dv{S{`sXr@hMt!1lTO0#)hcb($bq*gUzatYg zBisdfpUYO%l>78w6ny>#+1E5bGwo!AsOV)w2q!B|1Lf$9yfXqWO zkH}DEE1!^gO6Geq^JM4^xMH{%rMJp7NEY?V#4?Gm`%1dcOxDS4)y!SntXNL({N6rh z*v8p}*xM&Hs_X&pdS_@?DCE(L242HpJxq13G5F>i_@% literal 0 HcmV?d00001 diff --git a/practice/zebra-puzzle/__pycache__/zebra_puzzle.cpython-38.pyc b/practice/zebra-puzzle/__pycache__/zebra_puzzle.cpython-38.pyc index 6d4bf3b56f603b8e828dfeae63341fc452049ad3..ba58c41d8a2dd67d6ae73fdc8277f19766b28ad0 100644 GIT binary patch delta 493 zcmZ8e%SyvQ6m|M?lJsE_Q8$&SAlZlu>#Nni@X-gw2f7d>geHrkH037fZ-^IND~RCI z&k%9vLb4Fog5bjLojch%Fo%;fXU@HIGtdXRdYDS7Lt@o`pVTAH0<`!I%j2ce#G2B= zoSMa3rIA6aY%eB& zGc^uH)RGUY>*CXh1Tk=3KZshkZA76ev_SE}aZKCtEs!;GLIerZ#A^7JeASyoDLV9& ziB$v`F&P3Sd{51>)>Zm?Q5K2^S+m=7!FIs(!8&)qb7c2H!s_>(o*m}M2+;>Vr)O9j zztbnWyv{%t+@v!9`YGXQ=6EuE4YbKXRwEMjv4f=7Y$wxI;WrfIt!(+rfZ?||>RXC6ev8RQ9;3FtZ$2;_JgB6l3$ GM)W^!YHd{j delta 493 zcmZ8e%SyvQ6m|NDlcW!eh`JG?f@GsEs#2@9tOojchXn8TSfcg{U?(>MBtc9hL(1N6N=X~&#d=uQUY z1hbR{aSluPtIp!3TEIE&TCb3_Mo`5U?Vhg+`pBS$7kXQ%lfH>x`q*$;(0Q?flmO1O zG?Y=#Jd{?%)=Wex@cl4KI<9Lbp(Zp-4Z-tl*9jevJtl+*5+;e&@jLTs>=GsGxF*ga zwq{D2Km|XtGpu=&yDiE_>8N0Lx<0rb*daLQ9t56DA1O|+=XKrKr%Dzg2R`SfSPOr0 zCx*PvKsMZ}h;!`YXZ~P%i{x#B9RfL>CNWtrUwJ^oI&27W zS*(D531>XbN4Ub1K>D7kMuWEP`fb~e)K2I@==)~@B*YmM2^I-T1mqEqry+bt@omWX E1D-Z)ApigX diff --git a/practice/zipper/__pycache__/zipper.cpython-38.pyc b/practice/zipper/__pycache__/zipper.cpython-38.pyc index 3d216fe83bf2033556e1b4f82b9162205e767a0e..022b4e8e0fd95a24f524525b42cd067c2a2d892a 100644 GIT binary patch delta 19 ZcmaFG`-+z Date: Mon, 22 Apr 2024 03:21:37 +0530 Subject: [PATCH 33/41] changed pycache files --- .../__pycache__/accumulate.cpython-38.pyc | Bin 277 -> 0 bytes .../accumulate_test.cpython-38-pytest-6.2.4.pyc | Bin 2813 -> 0 bytes .../acronym/__pycache__/acronym.cpython-38.pyc | Bin 255 -> 0 bytes .../acronym_test.cpython-38-pytest-6.2.4.pyc | Bin 2346 -> 0 bytes .../__pycache__/affine_cipher.cpython-38.pyc | Bin 2096 -> 0 bytes ...fine_cipher_test.cpython-38-pytest-6.2.4.pyc | Bin 4368 -> 0 bytes .../__pycache__/all_your_base.cpython-38.pyc | Bin 289 -> 0 bytes ...l_your_base_test.cpython-38-pytest-6.2.4.pyc | Bin 5549 -> 0 bytes .../__pycache__/allergies.cpython-38.pyc | Bin 694 -> 0 bytes .../allergies_test.cpython-38-pytest-6.2.4.pyc | Bin 11202 -> 0 bytes .../__pycache__/alphametics.cpython-38.pyc | Bin 2380 -> 0 bytes ...alphametics_test.cpython-38-pytest-6.2.4.pyc | Bin 4904 -> 0 bytes .../anagram/__pycache__/anagram.cpython-38.pyc | Bin 269 -> 0 bytes .../anagram_test.cpython-38-pytest-6.2.4.pyc | Bin 5214 -> 0 bytes .../armstrong_numbers.cpython-38.pyc | Bin 285 -> 0 bytes ...ong_numbers_test.cpython-38-pytest-6.2.4.pyc | Bin 2659 -> 0 bytes .../__pycache__/atbash_cipher.cpython-38.pyc | Bin 383 -> 0 bytes ...bash_cipher_test.cpython-38-pytest-6.2.4.pyc | Bin 3405 -> 0 bytes .../__pycache__/bank_account.cpython-38.pyc | Bin 1766 -> 0 bytes ...ank_account_test.cpython-38-pytest-6.2.4.pyc | Bin 5458 -> 0 bytes .../__pycache__/beer_song.cpython-38.pyc | Bin 275 -> 0 bytes .../beer_song_test.cpython-38-pytest-6.2.4.pyc | Bin 15430 -> 0 bytes .../binary_search_tree.cpython-38.pyc | Bin 2979 -> 0 bytes ...search_tree_test.cpython-38-pytest-6.2.4.pyc | Bin 3604 -> 0 bytes .../__pycache__/binary_search.cpython-38.pyc | Bin 274 -> 0 bytes ...nary_search_test.cpython-38-pytest-6.2.4.pyc | Bin 3944 -> 0 bytes .../binary/__pycache__/binary.cpython-38.pyc | Bin 263 -> 0 bytes .../binary_test.cpython-38-pytest-6.2.4.pyc | Bin 3312 -> 0 bytes practice/bob/__pycache__/bob.cpython-38.pyc | Bin 247 -> 0 bytes .../bob_test.cpython-38-pytest-6.2.4.pyc | Bin 5496 -> 0 bytes .../__pycache__/book_store.cpython-38.pyc | Bin 2301 -> 0 bytes .../book_store_test.cpython-38-pytest-6.2.4.pyc | Bin 5872 -> 0 bytes .../__pycache__/bottle_song.cpython-38.pyc | Bin 279 -> 0 bytes ...bottle_song_test.cpython-38-pytest-6.2.4.pyc | Bin 3328 -> 0 bytes .../bowling/__pycache__/bowling.cpython-38.pyc | Bin 4676 -> 0 bytes .../bowling_test.cpython-38-pytest-6.2.4.pyc | Bin 11070 -> 0 bytes .../change/__pycache__/change.cpython-38.pyc | Bin 268 -> 0 bytes .../change_test.cpython-38-pytest-6.2.4.pyc | Bin 3894 -> 0 bytes .../__pycache__/circular_buffer.cpython-38.pyc | Bin 2982 -> 0 bytes ...ular_buffer_test.cpython-38-pytest-6.2.4.pyc | Bin 5370 -> 0 bytes practice/clock/__pycache__/clock.cpython-38.pyc | Bin 1015 -> 0 bytes .../clock_test.cpython-38-pytest-6.2.4.pyc | Bin 12080 -> 0 bytes .../collatz_conjecture.cpython-38.pyc | Bin 273 -> 0 bytes ..._conjecture_test.cpython-38-pytest-6.2.4.pyc | Bin 1924 -> 0 bytes .../__pycache__/complex_numbers.cpython-38.pyc | Bin 1451 -> 0 bytes ...lex_numbers_test.cpython-38-pytest-6.2.4.pyc | Bin 11156 -> 0 bytes .../connect/__pycache__/connect.cpython-38.pyc | Bin 560 -> 0 bytes .../connect_test.cpython-38-pytest-6.2.4.pyc | Bin 3789 -> 0 bytes .../__pycache__/crypto_square.cpython-38.pyc | Bin 273 -> 0 bytes ...ypto_square_test.cpython-38-pytest-6.2.4.pyc | Bin 2640 -> 0 bytes .../__pycache__/custom_set.cpython-38.pyc | Bin 2238 -> 0 bytes .../custom_set_test.cpython-38-pytest-6.2.4.pyc | Bin 10839 -> 0 bytes practice/darts/__pycache__/darts.cpython-38.pyc | Bin 245 -> 0 bytes .../darts_test.cpython-38-pytest-6.2.4.pyc | Bin 3083 -> 0 bytes .../diamond/__pycache__/diamond.cpython-38.pyc | Bin 250 -> 0 bytes .../diamond_test.cpython-38-pytest-6.2.4.pyc | Bin 3391 -> 0 bytes .../difference_of_squares.cpython-38.pyc | Bin 516 -> 0 bytes ..._of_squares_test.cpython-38-pytest-6.2.4.pyc | Bin 2315 -> 0 bytes .../__pycache__/diffie_hellman.cpython-38.pyc | Bin 505 -> 0 bytes ...fie_hellman_test.cpython-38-pytest-6.2.4.pyc | Bin 2886 -> 0 bytes .../__pycache__/dnd_character.cpython-38.pyc | Bin 433 -> 0 bytes ...d_character_test.cpython-38-pytest-6.2.4.pyc | Bin 5090 -> 0 bytes .../__pycache__/dominoes.cpython-38.pyc | Bin 259 -> 0 bytes .../dominoes_test.cpython-38-pytest-6.2.4.pyc | Bin 5410 -> 0 bytes .../dot-dsl/__pycache__/dot_dsl.cpython-38.pyc | Bin 1299 -> 0 bytes .../dot_dsl_test.cpython-38-pytest-6.2.4.pyc | Bin 4393 -> 0 bytes .../__pycache__/eliuds_eggs.cpython-38.pyc | Bin 270 -> 0 bytes ...eliuds_eggs_test.cpython-38-pytest-6.2.4.pyc | Bin 1182 -> 0 bytes .../__pycache__/error_handling.cpython-38.pyc | Bin 704 -> 0 bytes ...or_handling_test.cpython-38-pytest-6.2.4.pyc | Bin 2714 -> 0 bytes .../test_utils.cpython-38-pytest-6.2.4.pyc | Bin 1370 -> 0 bytes practice/etl/__pycache__/etl.cpython-38.pyc | Bin 252 -> 0 bytes .../etl_test.cpython-38-pytest-6.2.4.pyc | Bin 1953 -> 0 bytes .../__pycache__/flatten_array.cpython-38.pyc | Bin 267 -> 0 bytes ...atten_array_test.cpython-38-pytest-6.2.4.pyc | Bin 3344 -> 0 bytes .../__pycache__/food_chain.cpython-38.pyc | Bin 2881 -> 0 bytes .../food_chain_test.cpython-38-pytest-6.2.4.pyc | Bin 3732 -> 0 bytes practice/forth/__pycache__/forth.cpython-38.pyc | Bin 2339 -> 0 bytes .../forth_test.cpython-38-pytest-6.2.4.pyc | Bin 14192 -> 0 bytes .../__pycache__/gigasecond.cpython-38.pyc | Bin 255 -> 0 bytes .../gigasecond_test.cpython-38-pytest-6.2.4.pyc | Bin 1974 -> 0 bytes .../__pycache__/go_counting.cpython-38.pyc | Bin 4356 -> 0 bytes ...go_counting_test.cpython-38-pytest-6.2.4.pyc | Bin 4449 -> 0 bytes .../__pycache__/grade_school.cpython-38.pyc | Bin 912 -> 0 bytes ...rade_school_test.cpython-38-pytest-6.2.4.pyc | Bin 6945 -> 0 bytes .../grains/__pycache__/grains.cpython-38.pyc | Bin 352 -> 0 bytes .../grains_test.cpython-38-pytest-6.2.4.pyc | Bin 2855 -> 0 bytes practice/grep/__pycache__/grep.cpython-38.pyc | Bin 259 -> 0 bytes .../grep_test.cpython-38-pytest-6.2.4.pyc | Bin 12380 -> 0 bytes .../hamming/__pycache__/hamming.cpython-38.pyc | Bin 266 -> 0 bytes .../hamming_test.cpython-38-pytest-6.2.4.pyc | Bin 2652 -> 0 bytes .../hangman/__pycache__/hangman.cpython-38.pyc | Bin 2627 -> 0 bytes .../hangman_test.cpython-38-pytest-6.2.4.pyc | Bin 3460 -> 0 bytes .../__pycache__/hello_world.cpython-38.pyc | Bin 270 -> 0 bytes ...hello_world_test.cpython-38-pytest-6.2.4.pyc | Bin 1285 -> 0 bytes .../__pycache__/hexadecimal.cpython-38.pyc | Bin 262 -> 0 bytes ...hexadecimal_test.cpython-38-pytest-6.2.4.pyc | Bin 2465 -> 0 bytes .../__pycache__/high_scores.cpython-38.pyc | Bin 439 -> 0 bytes ...high_scores_test.cpython-38-pytest-6.2.4.pyc | Bin 3588 -> 0 bytes practice/house/__pycache__/house.cpython-38.pyc | Bin 264 -> 0 bytes .../house_test.cpython-38-pytest-6.2.4.pyc | Bin 5956 -> 0 bytes .../__pycache__/isbn_verifier.cpython-38.pyc | Bin 264 -> 0 bytes ...bn_verifier_test.cpython-38-pytest-6.2.4.pyc | Bin 4663 -> 0 bytes .../isogram/__pycache__/isogram.cpython-38.pyc | Bin 256 -> 0 bytes .../isogram_test.cpython-38-pytest-6.2.4.pyc | Bin 3643 -> 0 bytes .../killer_sudoku_helper.cpython-38.pyc | Bin 299 -> 0 bytes ...doku_helper_test.cpython-38-pytest-6.2.4.pyc | Bin 3130 -> 0 bytes .../kindergarten_garden.cpython-38.pyc | Bin 458 -> 0 bytes ...rten_garden_test.cpython-38-pytest-6.2.4.pyc | Bin 5641 -> 0 bytes .../__pycache__/knapsack.cpython-38.pyc | Bin 1256 -> 0 bytes .../knapsack_test.cpython-38-pytest-6.2.4.pyc | Bin 2542 -> 0 bytes .../largest_series_product.cpython-38.pyc | Bin 297 -> 0 bytes ...ies_product_test.cpython-38-pytest-6.2.4.pyc | Bin 5428 -> 0 bytes practice/leap/__pycache__/leap.cpython-38.pyc | Bin 247 -> 0 bytes .../leap_test.cpython-38-pytest-6.2.4.pyc | Bin 2608 -> 0 bytes .../ledger/__pycache__/ledger.cpython-38.pyc | Bin 4532 -> 0 bytes .../ledger_test.cpython-38-pytest-6.2.4.pyc | Bin 4613 -> 0 bytes .../__pycache__/linked_list.cpython-38.pyc | Bin 689 -> 0 bytes ...linked_list_test.cpython-38-pytest-6.2.4.pyc | Bin 8432 -> 0 bytes .../__pycache__/list_ops.cpython-38.pyc | Bin 1012 -> 0 bytes .../list_ops_test.cpython-38-pytest-6.2.4.pyc | Bin 7645 -> 0 bytes practice/luhn/__pycache__/luhn.cpython-38.pyc | Bin 526 -> 0 bytes .../luhn_test.cpython-38-pytest-6.2.4.pyc | Bin 5861 -> 0 bytes .../__pycache__/markdown.cpython-38.pyc | Bin 1658 -> 0 bytes .../markdown_test.cpython-38-pytest-6.2.4.pyc | Bin 5297 -> 0 bytes .../matching_brackets.cpython-38.pyc | Bin 281 -> 0 bytes ...ng_brackets_test.cpython-38-pytest-6.2.4.pyc | Bin 4592 -> 0 bytes .../matrix/__pycache__/matrix.cpython-38.pyc | Bin 657 -> 0 bytes .../matrix_test.cpython-38-pytest-6.2.4.pyc | Bin 2595 -> 0 bytes .../meetup/__pycache__/meetup.cpython-38.pyc | Bin 2782 -> 0 bytes .../meetup_test.cpython-38-pytest-6.2.4.pyc | Bin 30118 -> 0 bytes .../__pycache__/minesweeper.cpython-38.pyc | Bin 265 -> 0 bytes ...minesweeper_test.cpython-38-pytest-6.2.4.pyc | Bin 3751 -> 0 bytes .../__pycache__/nth_prime.cpython-38.pyc | Bin 255 -> 0 bytes .../nth_prime_test.cpython-38-pytest-6.2.4.pyc | Bin 2183 -> 0 bytes .../__pycache__/ocr_numbers.cpython-38.pyc | Bin 265 -> 0 bytes ...ocr_numbers_test.cpython-38-pytest-6.2.4.pyc | Bin 5043 -> 0 bytes practice/octal/__pycache__/octal.cpython-38.pyc | Bin 253 -> 0 bytes .../octal_test.cpython-38-pytest-6.2.4.pyc | Bin 2907 -> 0 bytes .../paasio/__pycache__/paasio.cpython-38.pyc | Bin 4432 -> 0 bytes .../paasio_test.cpython-38-pytest-6.2.4.pyc | Bin 14362 -> 0 bytes .../test_utils.cpython-38-pytest-6.2.4.pyc | Bin 6316 -> 0 bytes .../palindrome_products.cpython-38.pyc | Bin 1400 -> 0 bytes ...me_products_test.cpython-38-pytest-6.2.4.pyc | Bin 4997 -> 0 bytes .../pangram/__pycache__/pangram.cpython-38.pyc | Bin 258 -> 0 bytes .../pangram_test.cpython-38-pytest-6.2.4.pyc | Bin 3119 -> 0 bytes .../__pycache__/pascals_triangle.cpython-38.pyc | Bin 271 -> 0 bytes ...ls_triangle_test.cpython-38-pytest-6.2.4.pyc | Bin 2907 -> 0 bytes .../__pycache__/perfect_numbers.cpython-38.pyc | Bin 435 -> 0 bytes ...ect_numbers_test.cpython-38-pytest-6.2.4.pyc | Bin 4476 -> 0 bytes .../__pycache__/phone_number.cpython-38.pyc | Bin 443 -> 0 bytes ...hone_number_test.cpython-38-pytest-6.2.4.pyc | Bin 6555 -> 0 bytes .../__pycache__/pig_latin.cpython-38.pyc | Bin 257 -> 0 bytes .../pig_latin_test.cpython-38-pytest-6.2.4.pyc | Bin 5037 -> 0 bytes .../__pycache__/point_mutations.cpython-38.pyc | Bin 298 -> 0 bytes ...t_mutations_test.cpython-38-pytest-6.2.4.pyc | Bin 2570 -> 0 bytes practice/poker/__pycache__/poker.cpython-38.pyc | Bin 251 -> 0 bytes .../poker_test.cpython-38-pytest-6.2.4.pyc | Bin 10654 -> 0 bytes practice/pov/__pycache__/pov.cpython-38.pyc | Bin 4750 -> 0 bytes .../pov_test.cpython-38-pytest-6.2.4.pyc | Bin 5573 -> 0 bytes .../__pycache__/prime_factors.cpython-38.pyc | Bin 264 -> 0 bytes ...ime_factors_test.cpython-38-pytest-6.2.4.pyc | Bin 2865 -> 0 bytes .../protein_translation.cpython-38.pyc | Bin 278 -> 0 bytes ...translation_test.cpython-38-pytest-6.2.4.pyc | Bin 6541 -> 0 bytes .../proverb/__pycache__/proverb.cpython-38.pyc | Bin 248 -> 0 bytes .../proverb_test.cpython-38-pytest-6.2.4.pyc | Bin 2911 -> 0 bytes .../pythagorean_triplet.cpython-38.pyc | Bin 287 -> 0 bytes ...ean_triplet_test.cpython-38-pytest-6.2.4.pyc | Bin 2413 -> 0 bytes .../__pycache__/queen_attack.cpython-38.pyc | Bin 573 -> 0 bytes ...ueen_attack_test.cpython-38-pytest-6.2.4.pyc | Bin 4198 -> 0 bytes .../rail_fence_cipher.cpython-38.pyc | Bin 402 -> 0 bytes ...ence_cipher_test.cpython-38-pytest-6.2.4.pyc | Bin 2084 -> 0 bytes .../__pycache__/raindrops.cpython-38.pyc | Bin 257 -> 0 bytes .../raindrops_test.cpython-38-pytest-6.2.4.pyc | Bin 4720 -> 0 bytes .../__pycache__/rational_numbers.cpython-38.pyc | Bin 1598 -> 0 bytes ...nal_numbers_test.cpython-38-pytest-6.2.4.pyc | Bin 11908 -> 0 bytes practice/react/__pycache__/react.cpython-38.pyc | Bin 2916 -> 0 bytes .../react_test.cpython-38-pytest-6.2.4.pyc | Bin 9011 -> 0 bytes .../__pycache__/rectangles.cpython-38.pyc | Bin 263 -> 0 bytes .../rectangles_test.cpython-38-pytest-6.2.4.pyc | Bin 3744 -> 0 bytes .../resistor_color_duo.cpython-38.pyc | Bin 273 -> 0 bytes ...r_color_duo_test.cpython-38-pytest-6.2.4.pyc | Bin 1931 -> 0 bytes .../resistor_color_expert.cpython-38.pyc | Bin 288 -> 0 bytes ...olor_expert_test.cpython-38-pytest-6.2.4.pyc | Bin 3068 -> 0 bytes .../resistor_color_trio.cpython-38.pyc | Bin 275 -> 0 bytes ..._color_trio_test.cpython-38-pytest-6.2.4.pyc | Bin 2779 -> 0 bytes .../__pycache__/resistor_color.cpython-38.pyc | Bin 372 -> 0 bytes ...istor_color_test.cpython-38-pytest-6.2.4.pyc | Bin 1313 -> 0 bytes .../__pycache__/rest_api.cpython-38.pyc | Bin 6804 -> 0 bytes .../rest_api_test.cpython-38-pytest-6.2.4.pyc | Bin 3879 -> 0 bytes .../__pycache__/reverse_string.cpython-38.pyc | Bin 265 -> 0 bytes ...erse_string_test.cpython-38-pytest-6.2.4.pyc | Bin 1820 -> 0 bytes .../rna_transcription.cpython-38.pyc | Bin 276 -> 0 bytes ...anscription_test.cpython-38-pytest-6.2.4.pyc | Bin 1802 -> 0 bytes .../__pycache__/robot_name.cpython-38.pyc | Bin 419 -> 0 bytes .../robot_name_test.cpython-38-pytest-6.2.4.pyc | Bin 1602 -> 0 bytes .../__pycache__/robot_simulator.cpython-38.pyc | Bin 984 -> 0 bytes ...t_simulator_test.cpython-38-pytest-6.2.4.pyc | Bin 5342 -> 0 bytes .../__pycache__/roman_numerals.cpython-38.pyc | Bin 265 -> 0 bytes ...an_numerals_test.cpython-38-pytest-6.2.4.pyc | Bin 4906 -> 0 bytes .../rotational_cipher.cpython-38.pyc | Bin 275 -> 0 bytes ...onal_cipher_test.cpython-38-pytest-6.2.4.pyc | Bin 2696 -> 0 bytes .../run_length_encoding.cpython-38.pyc | Bin 379 -> 0 bytes ...th_encoding_test.cpython-38-pytest-6.2.4.pyc | Bin 3611 -> 0 bytes .../__pycache__/saddle_points.cpython-38.pyc | Bin 271 -> 0 bytes ...ddle_points_test.cpython-38-pytest-6.2.4.pyc | Bin 4115 -> 0 bytes .../__pycache__/satellite.cpython-38.pyc | Bin 1223 -> 0 bytes .../satellite_test.cpython-38-pytest-6.2.4.pyc | Bin 2381 -> 0 bytes practice/say/__pycache__/say.cpython-38.pyc | Bin 241 -> 0 bytes .../say_test.cpython-38-pytest-6.2.4.pyc | Bin 4462 -> 0 bytes .../__pycache__/scale_generator.cpython-38.pyc | Bin 2306 -> 0 bytes ...e_generator_test.cpython-38-pytest-6.2.4.pyc | Bin 4701 -> 0 bytes .../__pycache__/scrabble_score.cpython-38.pyc | Bin 263 -> 0 bytes ...abble_score_test.cpython-38-pytest-6.2.4.pyc | Bin 2541 -> 0 bytes .../__pycache__/secret_handshake.cpython-38.pyc | Bin 276 -> 0 bytes ...t_handshake_test.cpython-38-pytest-6.2.4.pyc | Bin 2811 -> 0 bytes .../series/__pycache__/series.cpython-310.pyc | Bin 233 -> 0 bytes .../series/__pycache__/series.cpython-38.pyc | Bin 258 -> 0 bytes .../__pycache__/series_test.cpython-310.pyc | Bin 2827 -> 0 bytes .../series_test.cpython-38-pytest-6.2.4.pyc | Bin 3252 -> 0 bytes .../__pycache__/sgf_parsing.cpython-38.pyc | Bin 3157 -> 0 bytes ...sgf_parsing_test.cpython-38-pytest-6.2.4.pyc | Bin 7358 -> 0 bytes practice/sieve/__pycache__/sieve.cpython-38.pyc | Bin 247 -> 0 bytes .../sieve_test.cpython-38-pytest-6.2.4.pyc | Bin 2941 -> 0 bytes .../__pycache__/simple_cipher.cpython-38.pyc | Bin 671 -> 0 bytes ...mple_cipher_test.cpython-38-pytest-6.2.4.pyc | Bin 3403 -> 0 bytes .../simple_linked_list.cpython-38.pyc | Bin 1654 -> 0 bytes ...linked_list_test.cpython-38-pytest-6.2.4.pyc | Bin 5898 -> 0 bytes .../__pycache__/space_age.cpython-38.pyc | Bin 432 -> 0 bytes .../space_age_test.cpython-38-pytest-6.2.4.pyc | Bin 2058 -> 0 bytes .../__pycache__/spiral_matrix.cpython-38.pyc | Bin 1368 -> 0 bytes ...iral_matrix_test.cpython-38-pytest-6.2.4.pyc | Bin 1962 -> 0 bytes .../__pycache__/square_root.cpython-38.pyc | Bin 265 -> 0 bytes ...square_root_test.cpython-38-pytest-6.2.4.pyc | Bin 1499 -> 0 bytes .../strain/__pycache__/strain.cpython-38.pyc | Bin 365 -> 0 bytes .../strain_test.cpython-38-pytest-6.2.4.pyc | Bin 3136 -> 0 bytes .../sublist/__pycache__/sublist.cpython-38.pyc | Bin 802 -> 0 bytes .../sublist_test.cpython-38-pytest-6.2.4.pyc | Bin 5197 -> 0 bytes .../__pycache__/sum_of_multiples.cpython-38.pyc | Bin 290 -> 0 bytes ...f_multiples_test.cpython-38-pytest-6.2.4.pyc | Bin 4272 -> 0 bytes .../__pycache__/tournament.cpython-38.pyc | Bin 255 -> 0 bytes .../tournament_test.cpython-38-pytest-6.2.4.pyc | Bin 5775 -> 0 bytes .../__pycache__/transpose.cpython-38.pyc | Bin 258 -> 0 bytes .../transpose_test.cpython-38-pytest-6.2.4.pyc | Bin 3945 -> 0 bytes .../__pycache__/tree_building.cpython-38.pyc | Bin 2365 -> 0 bytes ...ee_building_test.cpython-38-pytest-6.2.4.pyc | Bin 5562 -> 0 bytes .../__pycache__/triangle.cpython-38.pyc | Bin 468 -> 0 bytes .../triangle_test.cpython-38-pytest-6.2.4.pyc | Bin 5165 -> 0 bytes .../trinary/__pycache__/trinary.cpython-38.pyc | Bin 253 -> 0 bytes .../trinary_test.cpython-38-pytest-6.2.4.pyc | Bin 1730 -> 0 bytes .../__pycache__/twelve_days.cpython-38.pyc | Bin 276 -> 0 bytes ...twelve_days_test.cpython-38-pytest-6.2.4.pyc | Bin 6766 -> 0 bytes .../__pycache__/two_bucket.cpython-38.pyc | Bin 2316 -> 0 bytes .../two_bucket_test.cpython-38-pytest-6.2.4.pyc | Bin 3614 -> 0 bytes .../two-fer/__pycache__/two_fer.cpython-38.pyc | Bin 251 -> 0 bytes .../two_fer_test.cpython-38-pytest-6.2.4.pyc | Bin 1069 -> 0 bytes .../variable_length_quantity.cpython-38.pyc | Bin 395 -> 0 bytes ...th_quantity_test.cpython-38-pytest-6.2.4.pyc | Bin 6531 -> 0 bytes .../__pycache__/word_count.cpython-38.pyc | Bin 265 -> 0 bytes .../word_count_test.cpython-38-pytest-6.2.4.pyc | Bin 4877 -> 0 bytes .../__pycache__/word_search.cpython-38.pyc | Bin 3567 -> 0 bytes ...word_search_test.cpython-38-pytest-6.2.4.pyc | Bin 10606 -> 0 bytes practice/wordy/__pycache__/wordy.cpython-38.pyc | Bin 250 -> 0 bytes .../wordy_test.cpython-38-pytest-6.2.4.pyc | Bin 6207 -> 0 bytes practice/yacht/__pycache__/yacht.cpython-38.pyc | Bin 442 -> 0 bytes .../yacht_test.cpython-38-pytest-6.2.4.pyc | Bin 6679 -> 0 bytes .../__pycache__/zebra_puzzle.cpython-38.pyc | Bin 4341 -> 0 bytes ...ebra_puzzle_test.cpython-38-pytest-6.2.4.pyc | Bin 949 -> 0 bytes .../zipper/__pycache__/zipper.cpython-38.pyc | Bin 1770 -> 0 bytes .../zipper_test.cpython-38-pytest-6.2.4.pyc | Bin 5143 -> 0 bytes 270 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 practice/accumulate/__pycache__/accumulate.cpython-38.pyc delete mode 100644 practice/accumulate/__pycache__/accumulate_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/acronym/__pycache__/acronym.cpython-38.pyc delete mode 100644 practice/acronym/__pycache__/acronym_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/affine-cipher/__pycache__/affine_cipher.cpython-38.pyc delete mode 100644 practice/affine-cipher/__pycache__/affine_cipher_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/all-your-base/__pycache__/all_your_base.cpython-38.pyc delete mode 100644 practice/all-your-base/__pycache__/all_your_base_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/allergies/__pycache__/allergies.cpython-38.pyc delete mode 100644 practice/allergies/__pycache__/allergies_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/alphametics/__pycache__/alphametics.cpython-38.pyc delete mode 100644 practice/alphametics/__pycache__/alphametics_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/anagram/__pycache__/anagram.cpython-38.pyc delete mode 100644 practice/anagram/__pycache__/anagram_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/armstrong-numbers/__pycache__/armstrong_numbers.cpython-38.pyc delete mode 100644 practice/armstrong-numbers/__pycache__/armstrong_numbers_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/atbash-cipher/__pycache__/atbash_cipher.cpython-38.pyc delete mode 100644 practice/atbash-cipher/__pycache__/atbash_cipher_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/bank-account/__pycache__/bank_account.cpython-38.pyc delete mode 100644 practice/bank-account/__pycache__/bank_account_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/beer-song/__pycache__/beer_song.cpython-38.pyc delete mode 100644 practice/beer-song/__pycache__/beer_song_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/binary-search-tree/__pycache__/binary_search_tree.cpython-38.pyc delete mode 100644 practice/binary-search-tree/__pycache__/binary_search_tree_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/binary-search/__pycache__/binary_search.cpython-38.pyc delete mode 100644 practice/binary-search/__pycache__/binary_search_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/binary/__pycache__/binary.cpython-38.pyc delete mode 100644 practice/binary/__pycache__/binary_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/bob/__pycache__/bob.cpython-38.pyc delete mode 100644 practice/bob/__pycache__/bob_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/book-store/__pycache__/book_store.cpython-38.pyc delete mode 100644 practice/book-store/__pycache__/book_store_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/bottle-song/__pycache__/bottle_song.cpython-38.pyc delete mode 100644 practice/bottle-song/__pycache__/bottle_song_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/bowling/__pycache__/bowling.cpython-38.pyc delete mode 100644 practice/bowling/__pycache__/bowling_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/change/__pycache__/change.cpython-38.pyc delete mode 100644 practice/change/__pycache__/change_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/circular-buffer/__pycache__/circular_buffer.cpython-38.pyc delete mode 100644 practice/circular-buffer/__pycache__/circular_buffer_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/clock/__pycache__/clock.cpython-38.pyc delete mode 100644 practice/clock/__pycache__/clock_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/collatz-conjecture/__pycache__/collatz_conjecture.cpython-38.pyc delete mode 100644 practice/collatz-conjecture/__pycache__/collatz_conjecture_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/complex-numbers/__pycache__/complex_numbers.cpython-38.pyc delete mode 100644 practice/complex-numbers/__pycache__/complex_numbers_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/connect/__pycache__/connect.cpython-38.pyc delete mode 100644 practice/connect/__pycache__/connect_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/crypto-square/__pycache__/crypto_square.cpython-38.pyc delete mode 100644 practice/crypto-square/__pycache__/crypto_square_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/custom-set/__pycache__/custom_set.cpython-38.pyc delete mode 100644 practice/custom-set/__pycache__/custom_set_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/darts/__pycache__/darts.cpython-38.pyc delete mode 100644 practice/darts/__pycache__/darts_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/diamond/__pycache__/diamond.cpython-38.pyc delete mode 100644 practice/diamond/__pycache__/diamond_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/difference-of-squares/__pycache__/difference_of_squares.cpython-38.pyc delete mode 100644 practice/difference-of-squares/__pycache__/difference_of_squares_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/diffie-hellman/__pycache__/diffie_hellman.cpython-38.pyc delete mode 100644 practice/diffie-hellman/__pycache__/diffie_hellman_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/dnd-character/__pycache__/dnd_character.cpython-38.pyc delete mode 100644 practice/dnd-character/__pycache__/dnd_character_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/dominoes/__pycache__/dominoes.cpython-38.pyc delete mode 100644 practice/dominoes/__pycache__/dominoes_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/dot-dsl/__pycache__/dot_dsl.cpython-38.pyc delete mode 100644 practice/dot-dsl/__pycache__/dot_dsl_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/eliuds-eggs/__pycache__/eliuds_eggs.cpython-38.pyc delete mode 100644 practice/eliuds-eggs/__pycache__/eliuds_eggs_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/error-handling/__pycache__/error_handling.cpython-38.pyc delete mode 100644 practice/error-handling/__pycache__/error_handling_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/error-handling/__pycache__/test_utils.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/etl/__pycache__/etl.cpython-38.pyc delete mode 100644 practice/etl/__pycache__/etl_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/flatten-array/__pycache__/flatten_array.cpython-38.pyc delete mode 100644 practice/flatten-array/__pycache__/flatten_array_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/food-chain/__pycache__/food_chain.cpython-38.pyc delete mode 100644 practice/food-chain/__pycache__/food_chain_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/forth/__pycache__/forth.cpython-38.pyc delete mode 100644 practice/forth/__pycache__/forth_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/gigasecond/__pycache__/gigasecond.cpython-38.pyc delete mode 100644 practice/gigasecond/__pycache__/gigasecond_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/go-counting/__pycache__/go_counting.cpython-38.pyc delete mode 100644 practice/go-counting/__pycache__/go_counting_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/grade-school/__pycache__/grade_school.cpython-38.pyc delete mode 100644 practice/grade-school/__pycache__/grade_school_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/grains/__pycache__/grains.cpython-38.pyc delete mode 100644 practice/grains/__pycache__/grains_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/grep/__pycache__/grep.cpython-38.pyc delete mode 100644 practice/grep/__pycache__/grep_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/hamming/__pycache__/hamming.cpython-38.pyc delete mode 100644 practice/hamming/__pycache__/hamming_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/hangman/__pycache__/hangman.cpython-38.pyc delete mode 100644 practice/hangman/__pycache__/hangman_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/hello-world/__pycache__/hello_world.cpython-38.pyc delete mode 100644 practice/hello-world/__pycache__/hello_world_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/hexadecimal/__pycache__/hexadecimal.cpython-38.pyc delete mode 100644 practice/hexadecimal/__pycache__/hexadecimal_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/high-scores/__pycache__/high_scores.cpython-38.pyc delete mode 100644 practice/high-scores/__pycache__/high_scores_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/house/__pycache__/house.cpython-38.pyc delete mode 100644 practice/house/__pycache__/house_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/isbn-verifier/__pycache__/isbn_verifier.cpython-38.pyc delete mode 100644 practice/isbn-verifier/__pycache__/isbn_verifier_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/isogram/__pycache__/isogram.cpython-38.pyc delete mode 100644 practice/isogram/__pycache__/isogram_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/killer-sudoku-helper/__pycache__/killer_sudoku_helper.cpython-38.pyc delete mode 100644 practice/killer-sudoku-helper/__pycache__/killer_sudoku_helper_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/kindergarten-garden/__pycache__/kindergarten_garden.cpython-38.pyc delete mode 100644 practice/kindergarten-garden/__pycache__/kindergarten_garden_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/knapsack/__pycache__/knapsack.cpython-38.pyc delete mode 100644 practice/knapsack/__pycache__/knapsack_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/largest-series-product/__pycache__/largest_series_product.cpython-38.pyc delete mode 100644 practice/largest-series-product/__pycache__/largest_series_product_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/leap/__pycache__/leap.cpython-38.pyc delete mode 100644 practice/leap/__pycache__/leap_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/ledger/__pycache__/ledger.cpython-38.pyc delete mode 100644 practice/ledger/__pycache__/ledger_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/linked-list/__pycache__/linked_list.cpython-38.pyc delete mode 100644 practice/linked-list/__pycache__/linked_list_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/list-ops/__pycache__/list_ops.cpython-38.pyc delete mode 100644 practice/list-ops/__pycache__/list_ops_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/luhn/__pycache__/luhn.cpython-38.pyc delete mode 100644 practice/luhn/__pycache__/luhn_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/markdown/__pycache__/markdown.cpython-38.pyc delete mode 100644 practice/markdown/__pycache__/markdown_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/matching-brackets/__pycache__/matching_brackets.cpython-38.pyc delete mode 100644 practice/matching-brackets/__pycache__/matching_brackets_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/matrix/__pycache__/matrix.cpython-38.pyc delete mode 100644 practice/matrix/__pycache__/matrix_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/meetup/__pycache__/meetup.cpython-38.pyc delete mode 100644 practice/meetup/__pycache__/meetup_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/minesweeper/__pycache__/minesweeper.cpython-38.pyc delete mode 100644 practice/minesweeper/__pycache__/minesweeper_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/nth-prime/__pycache__/nth_prime.cpython-38.pyc delete mode 100644 practice/nth-prime/__pycache__/nth_prime_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/ocr-numbers/__pycache__/ocr_numbers.cpython-38.pyc delete mode 100644 practice/ocr-numbers/__pycache__/ocr_numbers_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/octal/__pycache__/octal.cpython-38.pyc delete mode 100644 practice/octal/__pycache__/octal_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/paasio/__pycache__/paasio.cpython-38.pyc delete mode 100644 practice/paasio/__pycache__/paasio_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/paasio/__pycache__/test_utils.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/palindrome-products/__pycache__/palindrome_products.cpython-38.pyc delete mode 100644 practice/palindrome-products/__pycache__/palindrome_products_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/pangram/__pycache__/pangram.cpython-38.pyc delete mode 100644 practice/pangram/__pycache__/pangram_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/pascals-triangle/__pycache__/pascals_triangle.cpython-38.pyc delete mode 100644 practice/pascals-triangle/__pycache__/pascals_triangle_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/perfect-numbers/__pycache__/perfect_numbers.cpython-38.pyc delete mode 100644 practice/perfect-numbers/__pycache__/perfect_numbers_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/phone-number/__pycache__/phone_number.cpython-38.pyc delete mode 100644 practice/phone-number/__pycache__/phone_number_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/pig-latin/__pycache__/pig_latin.cpython-38.pyc delete mode 100644 practice/pig-latin/__pycache__/pig_latin_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/point-mutations/__pycache__/point_mutations.cpython-38.pyc delete mode 100644 practice/point-mutations/__pycache__/point_mutations_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/poker/__pycache__/poker.cpython-38.pyc delete mode 100644 practice/poker/__pycache__/poker_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/pov/__pycache__/pov.cpython-38.pyc delete mode 100644 practice/pov/__pycache__/pov_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/prime-factors/__pycache__/prime_factors.cpython-38.pyc delete mode 100644 practice/prime-factors/__pycache__/prime_factors_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/protein-translation/__pycache__/protein_translation.cpython-38.pyc delete mode 100644 practice/protein-translation/__pycache__/protein_translation_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/proverb/__pycache__/proverb.cpython-38.pyc delete mode 100644 practice/proverb/__pycache__/proverb_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/pythagorean-triplet/__pycache__/pythagorean_triplet.cpython-38.pyc delete mode 100644 practice/pythagorean-triplet/__pycache__/pythagorean_triplet_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/queen-attack/__pycache__/queen_attack.cpython-38.pyc delete mode 100644 practice/queen-attack/__pycache__/queen_attack_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/rail-fence-cipher/__pycache__/rail_fence_cipher.cpython-38.pyc delete mode 100644 practice/rail-fence-cipher/__pycache__/rail_fence_cipher_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/raindrops/__pycache__/raindrops.cpython-38.pyc delete mode 100644 practice/raindrops/__pycache__/raindrops_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/rational-numbers/__pycache__/rational_numbers.cpython-38.pyc delete mode 100644 practice/rational-numbers/__pycache__/rational_numbers_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/react/__pycache__/react.cpython-38.pyc delete mode 100644 practice/react/__pycache__/react_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/rectangles/__pycache__/rectangles.cpython-38.pyc delete mode 100644 practice/rectangles/__pycache__/rectangles_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/resistor-color-duo/__pycache__/resistor_color_duo.cpython-38.pyc delete mode 100644 practice/resistor-color-duo/__pycache__/resistor_color_duo_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/resistor-color-expert/__pycache__/resistor_color_expert.cpython-38.pyc delete mode 100644 practice/resistor-color-expert/__pycache__/resistor_color_expert_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/resistor-color-trio/__pycache__/resistor_color_trio.cpython-38.pyc delete mode 100644 practice/resistor-color-trio/__pycache__/resistor_color_trio_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/resistor-color/__pycache__/resistor_color.cpython-38.pyc delete mode 100644 practice/resistor-color/__pycache__/resistor_color_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/rest-api/__pycache__/rest_api.cpython-38.pyc delete mode 100644 practice/rest-api/__pycache__/rest_api_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/reverse-string/__pycache__/reverse_string.cpython-38.pyc delete mode 100644 practice/reverse-string/__pycache__/reverse_string_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/rna-transcription/__pycache__/rna_transcription.cpython-38.pyc delete mode 100644 practice/rna-transcription/__pycache__/rna_transcription_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/robot-name/__pycache__/robot_name.cpython-38.pyc delete mode 100644 practice/robot-name/__pycache__/robot_name_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/robot-simulator/__pycache__/robot_simulator.cpython-38.pyc delete mode 100644 practice/robot-simulator/__pycache__/robot_simulator_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/roman-numerals/__pycache__/roman_numerals.cpython-38.pyc delete mode 100644 practice/roman-numerals/__pycache__/roman_numerals_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/rotational-cipher/__pycache__/rotational_cipher.cpython-38.pyc delete mode 100644 practice/rotational-cipher/__pycache__/rotational_cipher_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/run-length-encoding/__pycache__/run_length_encoding.cpython-38.pyc delete mode 100644 practice/run-length-encoding/__pycache__/run_length_encoding_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/saddle-points/__pycache__/saddle_points.cpython-38.pyc delete mode 100644 practice/saddle-points/__pycache__/saddle_points_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/satellite/__pycache__/satellite.cpython-38.pyc delete mode 100644 practice/satellite/__pycache__/satellite_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/say/__pycache__/say.cpython-38.pyc delete mode 100644 practice/say/__pycache__/say_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/scale-generator/__pycache__/scale_generator.cpython-38.pyc delete mode 100644 practice/scale-generator/__pycache__/scale_generator_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/scrabble-score/__pycache__/scrabble_score.cpython-38.pyc delete mode 100644 practice/scrabble-score/__pycache__/scrabble_score_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/secret-handshake/__pycache__/secret_handshake.cpython-38.pyc delete mode 100644 practice/secret-handshake/__pycache__/secret_handshake_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/series/__pycache__/series.cpython-310.pyc delete mode 100644 practice/series/__pycache__/series.cpython-38.pyc delete mode 100644 practice/series/__pycache__/series_test.cpython-310.pyc delete mode 100644 practice/series/__pycache__/series_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/sgf-parsing/__pycache__/sgf_parsing.cpython-38.pyc delete mode 100644 practice/sgf-parsing/__pycache__/sgf_parsing_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/sieve/__pycache__/sieve.cpython-38.pyc delete mode 100644 practice/sieve/__pycache__/sieve_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/simple-cipher/__pycache__/simple_cipher.cpython-38.pyc delete mode 100644 practice/simple-cipher/__pycache__/simple_cipher_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/simple-linked-list/__pycache__/simple_linked_list.cpython-38.pyc delete mode 100644 practice/simple-linked-list/__pycache__/simple_linked_list_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/space-age/__pycache__/space_age.cpython-38.pyc delete mode 100644 practice/space-age/__pycache__/space_age_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/spiral-matrix/__pycache__/spiral_matrix.cpython-38.pyc delete mode 100644 practice/spiral-matrix/__pycache__/spiral_matrix_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/square-root/__pycache__/square_root.cpython-38.pyc delete mode 100644 practice/square-root/__pycache__/square_root_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/strain/__pycache__/strain.cpython-38.pyc delete mode 100644 practice/strain/__pycache__/strain_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/sublist/__pycache__/sublist.cpython-38.pyc delete mode 100644 practice/sublist/__pycache__/sublist_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/sum-of-multiples/__pycache__/sum_of_multiples.cpython-38.pyc delete mode 100644 practice/sum-of-multiples/__pycache__/sum_of_multiples_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/tournament/__pycache__/tournament.cpython-38.pyc delete mode 100644 practice/tournament/__pycache__/tournament_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/transpose/__pycache__/transpose.cpython-38.pyc delete mode 100644 practice/transpose/__pycache__/transpose_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/tree-building/__pycache__/tree_building.cpython-38.pyc delete mode 100644 practice/tree-building/__pycache__/tree_building_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/triangle/__pycache__/triangle.cpython-38.pyc delete mode 100644 practice/triangle/__pycache__/triangle_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/trinary/__pycache__/trinary.cpython-38.pyc delete mode 100644 practice/trinary/__pycache__/trinary_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/twelve-days/__pycache__/twelve_days.cpython-38.pyc delete mode 100644 practice/twelve-days/__pycache__/twelve_days_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/two-bucket/__pycache__/two_bucket.cpython-38.pyc delete mode 100644 practice/two-bucket/__pycache__/two_bucket_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/two-fer/__pycache__/two_fer.cpython-38.pyc delete mode 100644 practice/two-fer/__pycache__/two_fer_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/variable-length-quantity/__pycache__/variable_length_quantity.cpython-38.pyc delete mode 100644 practice/variable-length-quantity/__pycache__/variable_length_quantity_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/word-count/__pycache__/word_count.cpython-38.pyc delete mode 100644 practice/word-count/__pycache__/word_count_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/word-search/__pycache__/word_search.cpython-38.pyc delete mode 100644 practice/word-search/__pycache__/word_search_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/wordy/__pycache__/wordy.cpython-38.pyc delete mode 100644 practice/wordy/__pycache__/wordy_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/yacht/__pycache__/yacht.cpython-38.pyc delete mode 100644 practice/yacht/__pycache__/yacht_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/zebra-puzzle/__pycache__/zebra_puzzle.cpython-38.pyc delete mode 100644 practice/zebra-puzzle/__pycache__/zebra_puzzle_test.cpython-38-pytest-6.2.4.pyc delete mode 100644 practice/zipper/__pycache__/zipper.cpython-38.pyc delete mode 100644 practice/zipper/__pycache__/zipper_test.cpython-38-pytest-6.2.4.pyc diff --git a/practice/accumulate/__pycache__/accumulate.cpython-38.pyc b/practice/accumulate/__pycache__/accumulate.cpython-38.pyc deleted file mode 100644 index 2413c696cc86de25a2eb2eee890a07eb9e6aebd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277 zcmYjLu?~VT5N*LhiLCwu3-tqxG3v}>SlDWNCd5LU782e46DNO()lYD9@(MBVlK1Xi z-d%fn97hE4ELN8_*0*n_2(Z~9-4aC-Ngt#jGB}YW6h8aIdx|_D-3&z%oT1r^BtaJm ztrUo+)OE4Y1}yj1`uSeIdzL$}j`8%&rLIeM1b1z;VQ>R0N>?#sIqnN!T!^-66>p|C kHTNzW6aTR5ucOxAk|jeOe;izhSvTKQTDA(de(QrIKXEEMpa1{> diff --git a/practice/accumulate/__pycache__/accumulate_test.cpython-38-pytest-6.2.4.pyc b/practice/accumulate/__pycache__/accumulate_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index c81d2eabd70d87a63e5b67a9ce00abb14df9a3cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2813 zcmb7GOK;mo5Z+xrL_I90PGHx0)k)C;0tyMXdo&CONst~4rf3`#;Dw;LYn2HpF-t0r z1@~kF?axTilmF6Qd(yeL0(CmGj49cY8kE4!4wsyrnQy*X^5xP}jllJXw|bbGg#3v& z(-*9fJs8;m2u?VSiAVL!5`z&+64SG2@x=CQc*5dJQt>L3JR{uT<{9CpuwOZ+hF29e zZoOvmM`6FOe*jxfUyznPhMkGqqN)~z;V>D-K`ugEo4y#_?7_%(KnNX!$2jHejCe-j z$1}ObZMe61g*!0Yyvl1ZS9qN_V0QQt_-m@>qtefT$nucFmX{amHjKwGvfCg|$a|90 z9>j{iPFat9V3;rLWVkb?80HH!b+jp`cko5#j`6`cIj4%glNRV&{Qa!+G7~cE1nq9X z2mPq?L}ah?LD~`TgbbrB>7+6U^C%RZ2{u!zpF{lZ^jJANagcO*u#0~Gf#U(K?O zulgcM^J6~~Z-$~DiuO)C2!lA=1*I@QXR01#5L5p2%`k|i4x1`76Y=3BZi!yh%{e<( z;6a8)gpMA5K7bkgaAOU98VU5iO=iJ^gx<&>XvoQj2o zfYvpj#okSLy~K2dIv1ncivzg=05S!$ELmCbv1j~B3xIQaf^4)tfve{eTEbg#rLH@k zCGrl4E4w3M7r-m;qQ!j_i(tiS6|ip3%O)Ho=^%^pXwaXMqlT(G*@3-ItfqY0g9aun5YC`ssD*-_Vts3il?wnV|2_!&C!6vakj_%LRr8Kyb3X%kY z)~W1)GNB=okK54U(AT^Qa}B?DJp(ApiiClnOT38$J(;As>?#^4+Eq04Sg;9WOR->E zvF;{}Esu4#Jr;r(p;*mXv{GyJssPkob2s^%+owQFbx9_n!f{t*UZ- zzaJ#R_f^gJ;XEG3s5g8czvaafxeR+t-I^PyJw)*hicJ){p(jGaa7n!kx$jWNa7@Q? zDvl}f2|7)JsPFr&hH|>YD9)pPrW$+cv0vV;`{^+z+AjVr@IaE{NJhC()pAKyF4t;c ztZ@mXa)$jV$D5*B&H<>81NcKh=W+`pFwy_K(BZeJKw%dNTf|RRh{GDj%7#P#1v^Jx A2LJ#7 diff --git a/practice/acronym/__pycache__/acronym.cpython-38.pyc b/practice/acronym/__pycache__/acronym.cpython-38.pyc deleted file mode 100644 index 45f1a1900b2f08442997704cb0c4d7b8ffab8f1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmYjLyAFad6ukva43X8@m4*HQF(x{*7#6nD)`TdO^x}ivKXLMxSp5VyCvPQ0Pjb$= zxA)a73;^d~ZwHYt89j|~vEzn_6A}f~!_o&yKfM^M z(7O6p-U-i8TjU}xgfex>w;B(vX}G>>D@&|+V})!>skxBW)Lk`t+;n{)io)u1DO&AT eqWdE->#nBJ;J;f#t5M(+qrh4l4IFc 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 BKg|FD diff --git a/practice/all-your-base/__pycache__/all_your_base_test.cpython-38-pytest-6.2.4.pyc b/practice/all-your-base/__pycache__/all_your_base_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index fbf4a5853d8b4551983344eedc07abece88f56ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5549 zcmcgw$#UC95XD9kqNv4^ti_82%d0Glw39fi>~dneQmG`YikHM@4k$=7rs04~2B2fA zoRfXeFT|CT?)e&AbK)mNhbY|*Vj&4ga+MRX&@)4z2mSi>^fd5rVxlO)@ked`$&XW# z^cN12hX#XNaJqLuFp0^IRFkPy8mc16QbVidv@3VG`;*sd zSNIDqwr#gjX$x!Hv$uK0a-5AWn7V;v;K;<0i6hek)64CyzlvyloWOLGKEM6v;M##s6!V+?C` zH6j|Ypn{l0F@)+6EQ1ITQ()sPOm#4pEX@%t7jNBrPT2Tu6m8qB4R)4^f|vB0YF+rNuer^qw$1=$eF`o zoEZ)Qlt6*p^zB?Z6i~X}(E(u&Ab#?=mnHJSShZ&%0)){kqu5086$-*fOKAg!A`{vy zadquFC2hOu@j4f)pb>I(HkG5n`$wSQbBUW1&QgY6;bBgTb zjkeb{9ozNJCv03vwK2Xo+rGp0)?KhLHjV-()52-8u%9k>xM*P>4Bcp?nwYqG#72A$ z`Ott)=tGET_(3=f)c^u-I*jBf)1h(hI%tH}rIS2(f3|@bE(rq@`|xl+A>R?t==i|1 zae~bB> zopeungaB1fdnrH5y^=kuz3?9#Kg%;^35wV#&*Z9!oPyD_w_rEh9nZju$!K(3=yBub z4dcDtf?o;>wR@KBa@Q|@Z#f-)SBRFNs!d?p_BF5D=KdIevCZ3_-D>)pCF<_3B5=#~ zRW8JE0TXN_^wgkEvt6vnuEG5-PASPHc~PE`cha|$5yfo(eFKvP&4yV!YYJ_CKn}TeU0VoIF$`=DEHVPW@#ol78F6QqyIM>VFJ)IA6vKp!au_DGo+`Dh+kCo=1>hISTSn{r^UP75T+HDLz3#oFBYf z1n9R~-ct&2*R%vTL-Y9&(PyYv*A{)UjN(%ipP`7W z1M1FR$Yd59*QL+PJT8b!_;w&~*LMt#;RpMoVV9i-A=RsyC>~ z%7XtQY!Aw`=r6wz{#OKLibG5IdZ%f7IH*m)?iPPaqk7NRAHbE{P$!ZFX^?z#oqKw|4sb;)7{+eHy+6YNx?UE9ZCW9ln;RsE+FH$&N-{)q_3U^{>-Zn}V)(4}= zj2!6nKmz7`tJ8(+SeY4Z5V$lSlW=aev0*&Ek5#rx!dq=0i!2ZIvowEE1{1 zxCU*aalUa}h-8%%Lf}$c@}b+&k>R**|4-H6a7im*2KhTbDfF^oYr0rG`641kkzt|6 zJZmspPe{B-Eg1j0Pz#opus;F4)E0f1tbo{d*Z@Ii8uai6t9Yq}a04NhnOdh9p9=A` zj?=1Rda%LZ8pm^!<=PY*gFjRYt^6$bN~R`iIb@u1k9&-k)oD=qzs4NDtiZ2u{vDKj E0?TcP=l}o! diff --git a/practice/allergies/__pycache__/allergies_test.cpython-38-pytest-6.2.4.pyc b/practice/allergies/__pycache__/allergies_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 9efead4eac260a7ede6429f8ce61562f8f5d9c22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11202 zcmcIqTW{RP6()CA5_OklTk%D*WJ|VnU&~j;u^lB?TPx$v}TWpZYuYsX(9hAEX7E_MDj|HERw@)q}2}bM`Vb{JuGt zxjyOd?=kT8=fcS5gA<1F5Bea#a`<5d|Gm2?zyPyi6ilu&)ojKvjcTsYVTxZm3!V5& zrqWfl3YKZyHy{hSuMNn#o!i}CWeYuEJ~n1Ln%I)DHe)urZ&xZVE0tZZNMFgX41QR_ zfA3qdQf*kFZ7|dpdSWMcf%kIq3(f0 zFpRnv4#N@DeQ*>;Q1`M6JftEkVyeRzQS96W?~QJ;q& z!F#Bu;m5FsdIsKyN2q7v1Nad296W|~)bsEJK0>_!AHyf87vU#RK%IwA;isrCz-RC| z>Lsw@3)C0EfeqA`pa_8aGPr2Y%|?G{#&y^8i)gU$MejTC{|^3p=w8N`#tXwY!Tid6 zk%7#2CSXAF8j-Zt+J60|*~ocrW%H%M zy79Mv-OE40qF&xv+;E^?E9dXJ-p~B{PTu{6%Zg>Mn%`kg(JvR>e5(}~3kTk3`-ppS zXRmRF-q`efyH@vY>4COW+w-@|wNgJm&LcdA`TWA|pamknm|j_(q9AFToOLIsR6;*gzhYNL*5oNUN{Igo2SB zL6KmEv37q7Vz~utTtYvmKp*!0EA=!`H+jZMK|R-w8r>%7$7oQWkvP1W#38X29Y#En z5~BofnvF1uMrDiRS&7hc3Zd9WH2AP#1d!%elWoxv`bk@WPfJ9W6huOs?vKb)deC9O zX8_&amRqT8mc6Y6yNG-nmW++_If;uZ-=?>q!KX|Q_i7ja`6G%{V_EdW9> zzYfrZ4i}ypEWciL{CZ+qILA#D6pT#?4<$O66&6ZuK!Z$^&;4mgPe=!++FdRf*8^Pd zN%-d#_(LPUT2Tl0GCq{0;Es-*0c1rAcwb_XHgYC3qr-{jxtvo%_(xYX(W!d???Z`F z+KMK=6%9rr>{F~X)gC3Gx3q=)6N$=2g^vZ4V`dUM9K;%+xK%IKD~|6b*hZ`Y!jiE8 z|A|CKwFXFUL4!|o0-w%kYLyW2F>8Pj*ryVM1FZqVnmWjL4uCwm1_&Rm2>Q<@9%*ZU zq;_;zJqlPQcvdu%MdLNZ=SZZ|GFd`18k|Jjr}&sy1B9q!A{Qhwsx?4beH|7&@;i6x zxUEo2FpfxIqF8Lqmn0sl1eQ`=gGO@&AI(T41pKIah!?1~v2L(gKdVT-Vag5$cu`FU z^WX82X_%v1VXaP#?(J122C7w8$N&eO*hX~tya@Ot_|Z(e4QSgTG9MST6J zDH-9pd`6th@k&78T}|HAr7YTc0sF;|A57VVSQ4;;nngw6zI@g zP~aP?v?Ns`73Xu+I&*D*%c+UmD8aEq3-=!-+^X}r->Bi!4Ke60Ss{s@HIa-%pW=r?ufb_hI97N!;!lXdqb$Vl z-}jjxo{uRA?jONK*wKjc|Q>RkKdq+g`uSBr5g}=sTy0+cuvF&Odb}RJ0&$ekm6~8cY zW=5CH*dU2RBWGGQL-@-r8Z>#rw2WcH%Jg;o7e<@k$N&HU diff --git a/practice/alphametics/__pycache__/alphametics.cpython-38.pyc b/practice/alphametics/__pycache__/alphametics.cpython-38.pyc deleted file mode 100644 index aff30f51152c0dc56b5c8dbc8e6d00c492b4e1b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2380 zcmbtVOK%)S5bo~jnSJ;Hm=J6TVGu}Ul(060r{!2g_=pU`i4W^o(XicX51yC1d!1x8 zD~w{I;J3?SK+llY#VQt;=SJ@P1>0 z3xAKd>)_|o1KYrr(OMvCu+|jy6%sX`Km`&}J6=ka^-OG%BG(bOd@1P|TmPy=N1R&z zWulGs@AS%4M$86fuisCl4U{xJm3Jtn8C@KH@%{pC-2zjQeb~bRy~hT0zyuTC9;qn! z_yJuayL8}HUd8t50qHX6$?yNw4B`4ZR$7K;Q-*O`ZpN83Nk@mn!eNq|B8e0V!Fh)mciauX+cl5hNLbJ$IvhqrEpXV7CK^i~kPOJFttzxD9}MZ^xs&up8o zkV8B&A4(@B90qI6S(>N@1UvI|Y4)y`O3%ivZ(~v9$?THUTc#*yy@x}72`7hl9?@Js{3NPh^<{UMaCg|z6zsa}MKqwuHnI<)2MGEIy^ zsz+Sa;HMoVdD%1C`a5yjlh${~cG9?-fFPhEVn0fcQqTby(wwB1sCpTm&frxC2j=$R z)_;I8fYj&>W`#LMGdOft0B7sQ^#7)Ul$GV zL%vB`kAG3%g?lmtVJs8YhYZfA+{>WK6N}n){gjtJQ=D!^3*hhKa&ipe-o2k1_Q%l zazG!$u4l+95NMkTAkiUR9_|T44r#jqgKFnKp4-svgx6Tukhy$Vs>OFP8|s~--rs)i zPFu%sfZjdegXP~9Ngj=WfDnZDWFyn( zH*&P!Gc6#TICk6wehnTH1a)fo^{S9ip#NXo9Cq7^sJaSKa5_WwY^k^4?{LR%COdGO z3y8Lxrq^M4#3VOQpJCE*WHjamp7pc@XmP%(H!(M|UA+Rva*VZJKPg=k5ZTMDpBS0x zsP2ZYn!@0hz_e?5k@ux4Y%P@rwP`ti_HE$Cv2F+Oawf&Fb$4v8b>G2;-y)6tBV*%q zn!ZD)=p?;N8JnV47<$xuu(lkH*#?wXrYKVF8nuCWgfl@QunJkF5MG5-9r`uO?a{UG aQk+8W1it!0R)}6I7g4VcJSgc+zwi%@7bjEz diff --git a/practice/alphametics/__pycache__/alphametics_test.cpython-38-pytest-6.2.4.pyc b/practice/alphametics/__pycache__/alphametics_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 5253a60b11c9f71162289bd972262a2f5d6919a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4904 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 Cpnoy| diff --git a/practice/anagram/__pycache__/anagram.cpython-38.pyc b/practice/anagram/__pycache__/anagram.cpython-38.pyc deleted file mode 100644 index ec8d890664892c2e596f49304dca5b7350abb808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmYjLy$ZrG5Ke0aDR%W8x->5!BIw*jx^$74OC@N3$W_$cH*xZnvib;aPF`Aze(?Pq zcb8liMIj^H^I4IQKV9(;pNb_BrzF6@yRn>szhUu6y50bnJ>rUp0SPdg@zMv2eH)x> z12&YR0u7>7XxwNg?>Wy<8RR0_38*X0*9s49-EehLMrtg1V}xwAR9sYIZ$vqG(p+s+ l=nA&q2D(?VyUH_T%4yvD@4G&^`|M<1)^Iwih1+@&*#{lNICKC2 diff --git a/practice/anagram/__pycache__/anagram_test.cpython-38-pytest-6.2.4.pyc b/practice/anagram/__pycache__/anagram_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 4a2ab8537b348e447e38c0624aba187cb8b71d85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5214 zcmb_gNpIUm6ecN(qGUOC9A|Ny#o6N)u+t(rv`tbcj$s4{l!NUHQD8dKj438u)EUZ- zj06Re{DHJR_RylI0J)_3AN~P6rl`$0BsIhNzPHSqSsNWKDe(Er zIuPi;XxS;O1?9}O-R;3t0v!Q^M6C zdX$}Hr$8TJQ|vV8F*eQ4fF5UO**VZh*?BetdV*bG7eOCmm)K>{lk5sWx*Cn#OHizG z8P-&oZ|9SPMjn2P@RL_TAOM`at-nxh<%RZK`9ld+mVd6k(w=L7YRDxFX;h+oox5%j zE8n1gC;_QM8(h5AqH!uE7vW;i^uwi}n$#7@+}m8FOYW{mr5g2_ z!)VB5Wb$VXUJE&UtB5lE>A!pPYtUED)43{Tf$z*e;PPo0H0Jp;E^3bS<{N_6LZ`;( z+ji<`0^@~qjaD><4dMsHqhYPi!fRWcLBGLG|pExHQ;F?b<2r)K-D}t|QTZ0hjG^%W!-brWhGj za4?@n20rGy7;JKf!JrFfk25`lWz|r(X3_}T7H)S)AwmayxLQ)Tu4Urh*)Ih@m7~y0+uqs%J;YP>B@8nCab;;G()|E(NoJsZ zy#t2VbVH}%_K=WGC#)0Ztgmyy{gBkCOpL(0ndtU4TsG*L*yiB5{eh_s*f>{- zbeGD|(mlwy*+9P;8j^nCcdeFSbr|4uYSbl=vuaOe)BCcA*T6VkO5+`f)BTK^4IBCG zOR`#D=%!O_R0flP^Vt}mA}TIY5!M4Cd1MN3WeKT2Dn1st1cZWS({p`?AGE_!#`Y$T zFS#$B(Aj_(!9eWhUx?|OX*PDo^sqq=3A~ts$ymi&2eX)lYk^rO8|cm9K${Z6J_Q$3 z^%GcvZViB5*czo9_v0<@r2^4yaIFbn7;83oy?|Tfy z>EKbCfq`^zfWZ%ega!>E6Iez_8&HX66EPnXLECjc@tROCHYKEf*Cnv_!x)nAXHaIk zEfV-Oj$4g(;K#VXOX1%CSO5!9@k;r2?nu^J*dPt zxO_MO>{bfcenvSUr1Uao8TVm+J{4GzX5(7jH!i|AxR36fShJnnBxyjpbg=&Et?QL8 z1-aO^KYkJg2YBIUvn7rqOS@CG_Ssa`0uQR85SG0jS8D@Y(L?2G*c-FSx(svaY+hgs z)2s0ZBPIuXu}2SAR+m7pI4+bp*&cSIkG23(p@4h{DGXZefB{ePNwrrb{?KIv%0Vaz zZf7vEufejxe$fWo*{1{W{_SUaThqjCXh*NDE*&yQYP(jQO4qUF2%*J-Luip#OU{21e zrbq+13+Iv(At&(X1m6@+$fIKSRs@^Ug`kg2ho{X<9(~F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEw3~;DYd8wqyS9(3eXQNPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitBLEXpk|Day}F*M*n@)C3cWhl=PGRNfNKERIK)0NGaz m@&N;55y(w`nh+Y{5D1GID0hp)CO1E&G$+*#r0X*fGXMbo%0Hz5 diff --git a/practice/armstrong-numbers/__pycache__/armstrong_numbers_test.cpython-38-pytest-6.2.4.pyc b/practice/armstrong-numbers/__pycache__/armstrong_numbers_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index f8766e462a3c7e0214c5074ac828f5fce22032a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2659 zcmbW3PjAyO6u_ONf84Ge`^Th7NFXE*JFJyJzy+bfCI$laLU+l<%4%;5G)b}DjZNIP z?|`_0I1Rp$ublQ3IPqSxRvBB;HL3C($My63z2}$b?Pjx1;QHw<@1B+k`GcMGRf5hs z+-eg9C*0~2*NR&^aBO0cpyZaVWTfI&V8rfM1L{(XY!UA8(kbC3QTb3iaojq$-jmhx zIcOrCRm&{;ig_|nT1Md>3x~mukUbnsUp92s;Z|J`B3|6Jxy9{M;yTF!Zi$z91^Q)P zQ7KWuaWXmUCd|JXgV4fT`~Qom6W0nRK_Qlh_mMkIyq-|hA` zjHGibV6Ya5s))EK7q>-@~E>lc{xvjyGxrYzz zSjdQ>Yr`wvZNlOT4ILdgXb_+6KHVvx5{;O8(^{^CN2HBdSraK6G>)S}Mi zUp&4#W9ZJ%?`uC)rm;RaV&mQl8yw;8ZzbmrKMGq?97pCyiYj-_5979|UW+Kuu*-H+P& diff --git a/practice/atbash-cipher/__pycache__/atbash_cipher.cpython-38.pyc b/practice/atbash-cipher/__pycache__/atbash_cipher.cpython-38.pyc deleted file mode 100644 index 375aecf48a5854ab28755ab0b0a8e0b5b12414e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 383 zcmah^!D<3A5S?sSE5hDN|6va`KOjZ0(4M@A7cUYsQw-{ENK&x({z*^%(q8))JvplyGDcPl` z+%acBn8Q)cj!>#*=y%3dt3-zsM7V|T7rlrSqBf(o!Mbw#iQ+cZUekesb#bqKFg7_$ z+N8CKn+NOshQgVxIyUm}O`j@TBZ+?$eNdst_RfmsDDFz6O>*U3>P6(1 z{E!ws`7iO>Q~yE^ZD&ZyrCdt|NP#n4?vD6j|F3y zs=p|W(x32e%G-t(mnpM3WpSAW=xw~8Jv11c!zn+2Vac-%jjB}pq!@+tzl|a-(K3un zbcyQV%d|qP;Fst!t%28Rovwhd&{etyzDn2W2KZ&VNw>h)=rg(vzD{@OF8CF?NB6<6 z(gXS&{2F}$m|wdIu~xwVd9#}&{hG|^uTM()&-n$3(N=QS0z-b`Vr9nreTiY zUkY#I!k9^;&>lGVTD)vY$wc_mUElIV0fO$;xG0&|xmN^k%;&4tdsrY_Rp!>#7;7vwmIx<5*+w6_wRlG3MT$_Mn1;JvD6*VG{ z=`|lM&PP`Zc&z!JD8oYpykaS_gq>K1VZ4%kOu*OS-W1Z|LP!D6hp6!G>M|~PK{y}N zOrE&k#r>RuTAU|XoC{S{dPlCvr9k@gacyLCC3}|5vN%t>%JS%w#SEV z(DlaAY9RdKm~f8@pM<XMlgT5co`3F8tBXHN5zM{p6IKk=G{#QNghJ zd8<2cx`O!O>Dg;Cy`E2JGfOAv`)v^Ciwu!h3yDku@=;j77X8p6t|T276wiZZwAOVy zT}gz~7bDUYoZWcIYtY?M}?{}S$WY9MjqR&RD`pACa5B z-;;z7m>?lcdsZ|il*86Ex^i&SA!5`UyTqe@-y`;2C%7e!#|AEeSsoFqJ@gg``5;T% z@;qS8Opk>j?AsAC$BLw=MYXJIe?=z?`9BKJmx9W`9=IdevLM!{HT+%^OMpUPA%3z% zZY3s)R8#|;Mjrag?d;KmM_>lwl_7>IebUmL8;zKLo zZ5dj&$6U!fAqy-SvR)5VCPN-D@q8Y;?JPUXlq`T?o1GxPneF*fSK29vA#xYJrN$?-(mXPHfzQwwGT@?qUWtVi%JCt^yp1X4yYIy@JrXk}m%lm;AvIDt3-5cAH;fW(+oY0z2b6oD!>muIh!EUl~S|Gg;ZF#d^E%dZ0uZ*Uo!m^I^1S_Qsf| zX4*O9XHc-Aa6=YX9&W`;(|c72PO@r=Snmfe6n+^Rbt~zWC*5&ccd`49^=p{Eu%P8e dz!?$=r=(rgzfY6*ri65`KIzJaqHAmAe*k-}QG);g diff --git a/practice/bank-account/__pycache__/bank_account.cpython-38.pyc b/practice/bank-account/__pycache__/bank_account.cpython-38.pyc deleted file mode 100644 index fa964752d21accc264664ed56e93705ef958d489..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1766 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 diff --git a/practice/beer-song/__pycache__/beer_song.cpython-38.pyc b/practice/beer-song/__pycache__/beer_song.cpython-38.pyc deleted file mode 100644 index a87fffb037d0580394b8160c6773e7d1fff895ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275 zcmYjLy9&ZU5WI_th@hokV3R`c2Sfy|ZN$b#&bw8DkA&S5wD(V}{H3&3)^=9zMnnf@ zc6J!powr&|#kejy>n_i`EdQwSGGbDj#m8Rz=%N?O*JdhB9-2cJv3wz3!ZDL#7O%Ld zr#F>GWkSJXDC1zafYPkwH8OJoBxCz4>+?fqCP3Se7Y0s%E~C9E(7KR0Fe?D;QGVD| tZYi!`oXa|b%L2$@s=m=!XFp9fO2$Lh-^q_lI4c{2eeRDt7)tTURBvx1HzNQ5 diff --git a/practice/beer-song/__pycache__/beer_song_test.cpython-38-pytest-6.2.4.pyc b/practice/beer-song/__pycache__/beer_song_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index de9fa48d11d6d5dc67a8fd8b97ba34d15db58d3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15430 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 M=7JSLF5BPrKhWvNp8x;= diff --git a/practice/binary-search-tree/__pycache__/binary_search_tree.cpython-38.pyc b/practice/binary-search-tree/__pycache__/binary_search_tree.cpython-38.pyc deleted file mode 100644 index efadf415abc32f9dc430ba357962b8a02c4a8c38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2979 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 OF;r1%kws!@IrD#z*L&vx diff --git a/practice/binary-search/__pycache__/binary_search.cpython-38.pyc b/practice/binary-search/__pycache__/binary_search.cpython-38.pyc deleted file mode 100644 index edf716524fe251aceb563ddbc264c5eb19c25aa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274 zcmWIL<>g`k0y|;ZG<6{T7{oyaOhAqU5Et_Ri4=wu#ukPsh7_h?22JKSU*uO zDKRBKFH_$owK%&Zzd%2=BDE+vvp843peQl9Br`cxKPfXWv8YlPVjPqg58>$*RNi7q r%gjpw8C(o@8ec#KP3~G>3C>tUKpSQZJ_ORrVJiPTPS|Hk-cYIL6*&( z+|-%!l)l49puoEz`*cW)6lKi&zQ_$eXE%@;ybx!4)2&=zHc{egFRr70qZ3LOXT(n zhnZ#(j7O}RjZhP7RE^N;xIVOLlsrrv?BJ;Yh0t$nnqYwWk~K52#-;^X$l*8(d9bm~ zK>>=`=Ai^-Y;CB(61D|ch81j!a0yniEx~12!?p}pU>(~ET*Vn}gezaUz9Ywvgd^L% z$3g{d17AKpsGr62E}m)w#S8X33k)#2cpjQyzA}jbYRWXC9Nw4o#E}`69HoQ|?*BY; zJV|yPq0vfsog*d@HhcX|{R#d+)ty?)fr0PV?+Nu&Fc{Xwb0OQV>eq+TX$Njw)LVLn z+e%MyGUD-w2RP%}a2(dD!-=Zm4u9r&Bf(vtJNPf9Gv@nl(BlJNaN&u*@Pi7@LD9UJ zd9ZU5LG7H%P9dYf(#Sr*&J-D#EffiK*>hENFYWrVANPabwTorqGb&3%NvMnS{1} zg?cnmxk`fA%(p(x`A)!T&Mnb(ec$!FNdQ+++Z4b;&Ob}pg&5?Kfi-0y%V%0wP4Vqy zLc)inUDpzJ-CD%4>1s|{M9$FR{1JB2!WnGJLX?4^(yc%dty`K}S6xncIMNYJ`Xcgr zM4pJYNPI%#M-so0piCK!(e3U5uF^OX&Kv!+#gDN+0N|eRyFu?=)U0S-G1D@(nECg? zqH7>s-zi!Y#F|zOJ7?4CmLZ3%GBZ|{1S`3Y&r4z@uacnjE6K(3EfQ~&c!va8B(Ia0 zOK3YKhLY(K35jRIpCEc4bxqgD?M32fzN%w%DBn`z(sZ6;C#Lht`1SfPMxZO*u@q?^ zVs-g}eayaNyX-0bIulqgjJ@ok5g5dbuF!Z7tKc;T#Tmy^lHgbZfI<{ynD1EaTV8LH`%9({xBHF>-8qOTW3w21abbt$wt_np4rJS=kFAHWDV(L5}3PM}MzW|zYJ^jZ-gj@Pja?UC;W uG-y^@`fF?QeWeRsXg|g~cOCp*qgkd+KeRuO5#6ROh+f(@TV=Lc&i(^fd*G)4 diff --git a/practice/binary/__pycache__/binary.cpython-38.pyc b/practice/binary/__pycache__/binary.cpython-38.pyc deleted file mode 100644 index 137085525b0176e76a296ff5220b6bf55fc4bca1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmWIL<>g`kg2ho{X<9(~F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%o0OTCSX3EbTvC*omtF)?2PS@5>4z4l78UC!>Ln$nK7CxCYNL;r|LtDfKqw|mA7~b5{rsc<00Z8Ba1<9Wne5~ g29kc75E@|@gauM^i^C>2KczG$)efZVGY~TX03fk7$p8QV diff --git a/practice/binary/__pycache__/binary_test.cpython-38-pytest-6.2.4.pyc b/practice/binary/__pycache__/binary_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 081c15dce76c6268a6eef812da76256c8ed20089..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3312 zcmcguL37(g6yB9&OP1}lP2037g$ig$!@;&fVW7i6hSGstGDAtB| zLJ`GY?Dr!l>c`@dz1~ZWJ-Ic+CMWJY15YZ!Choq9mSe|re)j^OAN3gx!;VNtv3tX) zn|7zR`@?`c(u1+U{ueJ8iYHP6n3sOM4K<|lUtz6yuxkJCa>}uXp7hR9Ow$a z!mon1`87Tdy2`Kf8=!0aCSL$u=eK~<+ll>M$|5q`r7-N#ga5d$kKt1{K)fPvNK851 zhqXP>U`+`4>l+Dm$7p+~B~?!;A>${%4ZT3(Tn=esC=v7yiNpZ<_uJ+(Fi=ge(eZdc z@|)ia^&;*Mnv*3An*-?q* zEuGA%QS33>bTzj%#$jX`1?+}wZs`PN6^hAwxglHAC|9q7!4b+&icscVW`fz)Tz9M^ zxC_F}k@?y6i@?mg%m!0;TdgsMSuxJLc{+3CJY1Lpx?IR--e)$X1|W6EmA68D{}j|5 zLtiaUVSP}HHSaVV*plnEAWrYR745woT6D;T>KAvX@P1l^_pIA&h^s(vD@EOE`P&c? z#R0LL!+qj5jox)vzq~hvf3*mIv3qVFxZ`o{(`@)7{AAhifc`o62aO>|?^8;CC7+X@ z$W!thTlLs@MR!X3G^Us>u?EXKWv(p}t{-PmW20T}dT?CC64U732kTMpBntdkNH2Kg zWJZT(Qp?ipQ#^-MVxOEtY0i}<^pY6yXdse`*zJk|9$tw7=bt*%Bu*mH;dsgt7N+Ga zYh|(PXM-Q5*jVhwtRDrVkHAi0vLm!c=i%Ku6TwBUm&l{rT7?)ohsTK#?na3ra+-+y zX?UHQO?Dq(aHC)yPl?qB;F#y5c{;+*>ETjoiTVR^E-k51AuUVAv?zubAULFV z^Qg`S=QQ{{nOMWfkFk)HJL$bO&3TEn3003_W2R{25}-{C1oVHiO02Il=Dxv%tL8u$ PWsA%cORMSg4U7Hg`kg2ho{X$nC4F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%o{?G^pOl|e1X2MeewpZp7N-^!>nG|ZC8p%(W$L@67H5~_ z7wD%}q!uM-7U$|06eT8?WG1KT12uxMUP0w8j-u4!g8aPVRFFZ%Ah$6v7BK@!KTQaY ZumQpXDY?aAlbfGXnv-e=()AgL832=$F4zD7 diff --git a/practice/bob/__pycache__/bob_test.cpython-38-pytest-6.2.4.pyc b/practice/bob/__pycache__/bob_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 81f4425838d33298ece2540989fbdb8570d11a67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5496 zcmbVQTT|Oc6qalQwt;X7mym>HodgIeh>)byX{Rj^E`ezSGr<{JcP8puyT&S#)>+9V zX8M-?kaqf%|I;VE_Njk?hqmWP*hm3KsRTMlEA4u}@0_z|FE0lNiwazSR3>WmK}Gos z3(+eFg;luS4G>IWs-;xaKxgc1Mo|?zSLsp1FTIss_>!^u?0hA!D$f*_Ww~D!mgBuY z72akmMW*g6^F4pVFDbk8s-KtKZ3xHZ2EK`287Qp6?fwaZ2R&9YOl6s0l}a}J)k==_ zuwE$lus)Ut-OCEB2)d8;vjNa~Hps4kF0dgs47$ih*eK|Jc9o5R9$@2a0`wr8WY<7n zVN>in=plB4-2^?%rr9mfBkVRKphsDW-2r`--DUSckFgmx3woT*vHPGW*gSgxdXjy@ z7C>KPi%bJO#g^DZ(AU{Adj$Fhdkj{1;`coj)iQTILj{iQ3!l;C>u|ecAbwGPQ#_Ta zZ-M;p88kFB&hDOED+_y(wiZ3HKs@JTxB0qBEs0ir zr}{aUTeWwJEI{$}^QD(i!Cj(Sl``R&OB>uh@EQR*YPD+B zsB&6Of;=9D+zFRk5v0?XA??&m2e7bhLa1=bOA-@PcZ-Jc>`^O-gPM>AuQe^JRf+(N z$MeOy=^$!5-keMJz9D9fv>+NFkIi}Hm^vP$Msg^~v5*kULXzFJ{WUFt$4p@6rW-`F zA%)YjUEOqa$q$ z2FAzE0@)!)jyMj+0oj?ux4_{888IBVZBKP#fBpiscpAUZARU+frG!)& zM!tKNm~|Mekf~fP5?Jxbf4^orfPH5G6XInkh!;ob7WX`WwH$#p8HSVR1MA18SJ%&beG)-76GPUmMLL{|mA&WBNO^mc%)ENAdiUP_2d@acdb+c@Pu5;+ zlJ&jk5Wc0-@-o~>z7L0E$D;uy7=ngLEgj}8T%3T>Ka0hzn)&A>J{*(Urz1MLLts2^ z22?jTcgs8b<%CF{4IC6l0}kSE42#;ZkP?n=Q+f1N#8X<#Q;AK}F}c0zFh~{z%}Z8b z{-=&hC~3z3uC9xR^d;zO= z&$G}0!r6*geJW=4XsuM3edTm?%XGL#o^n_wP@HyKADD6m!ay-C?ihS0f@>^>%MB}} zf^D92YW}fg=^eki(|J43A(RRNgz=J z8c5hx(^~<837enL7d%M$VXix8^Fz!RxNVF3;__DM80CtCq>wNI!nL2kEr@=O^2dnH z<7>b7YoMe9@j&^e%?HVE%`(q3{tu zu{(d$&+EEFZLaHnQP*w3nlR*ae?W)ssTF>a{m_-f(;9gN1)hk=5fq~+@EAhk36va1 zfxCG*iQ*cHDHPXH;7(cIL@|wmpujDkyo2H{3fwEn85FZ9=1`m;&IC_*LL;*v@XW-0 z1R}5Iv%z0aN4KAP&)$UJvw1ATx1jxezn`x*O~^8i>kq6pT6(86r8ipW1}!`jgSD0> z`LTq7;}<%w{J!?PA~X)XMx~!`IwmacUC+-}MKw4`^YdjWuTwZZL)@1U^7CJYrvDlb Pfr12=S4Ne5W}xRkdrl0G diff --git a/practice/book-store/__pycache__/book_store.cpython-38.pyc b/practice/book-store/__pycache__/book_store.cpython-38.pyc deleted file mode 100644 index a6dc6ebc2c59f979eb4b7b566735d8dde9020870..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2301 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 IZ|Tz>% diff --git a/practice/bowling/__pycache__/bowling_test.cpython-38-pytest-6.2.4.pyc b/practice/bowling/__pycache__/bowling_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index ccb827be4f222d1eff08b69033d27317caa3f362..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11070 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 JM#dUR{RgORfE@q; diff --git a/practice/change/__pycache__/change.cpython-38.pyc b/practice/change/__pycache__/change.cpython-38.pyc deleted file mode 100644 index f5fb844b3ec7e0e40c568613920ad4d0e8b6577d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmYjLI|{-;5Z%NNBBrqM4r#KzhzMGzku+&!-JR&7`LMI1_TI$GE2Z@ac2>?tf?04K`x@LP-UU{3h-ddio*qr)R^5^idN9jNbvnY_O}&Wh1AOl{r2qf` diff --git a/practice/change/__pycache__/change_test.cpython-38-pytest-6.2.4.pyc b/practice/change/__pycache__/change_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 6585a82b55fefc21790e92198bfe729cdb74670d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3894 zcmc&%Pjk~o6xZ64EISSf0YVb!)T9BLc8Gy#5A84|Q($`NOs1vKc6{iLqFpNjSyESW zLNfFe?)?g7ddgSQwTF(r0-Y&+Z`W27$qt1cYLDOUO4{f5dw+iW^mul*rNQU--eSKA zvp;ZA{OGXQgkO9g1k)JtwH}dUZBVaiL>uTmgQz=Z&xAWQzcH|S7SX=aSe@xFG^TU& zN%OGYYccYjwr*sgN!wZ{>Dj&)FxuyPJWi++dO_^qt>UK!i%s~&2?#F#x>sX_)m~`5 zx>DcMnZZn08?3=B7){n>Ef^bYhP7d|*ep8(W0TFXc^F&lEL(tahMi;QVQjMtY!Sv; zc9AW?c!n*r6&UB(B{27L+Pb%62QGgERyqXC7=LiyfZsj%#T^jOwcoUapmk`Ot21&4 zwz}kH4IPBgw=&$687R>2*)oWuS~_FLF&D{$pNFF+31= z?Tu}lg@M<-&*P^_7UY>JsP_ ziC76VFTE&@iM_z}xlEH0jCr^@wtcm1d-d_@#;<{*3C5dXJVes1-U>ukmWk`-pPda($J7Loqe5=@wlPtS{h-9YSJr&zp69t4lFdtrac!y$&9J18 z9Uw5cLV5wy)cdo3T7;LR7kpc|oF*s}x@-GG9$$vNF_x)Dbh1b~e;<5M#y??K1#?as zAAzPaW*`l$J7iJGqpp!-gX+5kJ0`+f!W&Z=md{WAz=UU^q4T|IKa)`HAWU{3 zao@($s|CpS%aGqiVFfx8zJ%U^Nipy)9G5D|3uJ4I$QE~HGaytJPep!JA*Zh3ob6LP zibQBTJJgFQc!P#f;tg#7Lr^ph?9B?wH*BsTLSrT(0!qU34^r9H@-SA951F<|Oal9Y z=?Q#EVhcjWKy+X~<@Dw#k3TLTx>iOsdCLhLNELZfZoxuD<|X;{{4XSt&6Y||qWz$K zs(q_H)PBTg>WTiGJTVSQA{!jMg6k(H)0Z`NT()rL=f`~p#G|mjT6OH;deT8C9mO&o zJQF&ux66Z$>;{h-X zkb|$wp8pTp|G)73G!Bozo=6}i2+Xgt0~Mhvh+ZG+3*0i;_5vIIPa(3@W{eIanuMbx z*yYpRcU|TmY(Qd?FG1ry3x~QR&S0Ferxw_h2-yX$;0%v_@g9ozQCvZR=cBlRqKo1d3Vcy1 z2<+Vj);nI0QIkcidj2&FGgCgdK9gG8Ll0WyAWqwx(LT*r%QV_YpKT~QfF#=xd{1}@ z)O~&_ZH%wAV6$|wEm8}QcU+{VDsRagsr3jh-Lv7PN>b7U+f(a~^3)edUov+sZ9%hY GZQ~yb_^J2+ diff --git a/practice/circular-buffer/__pycache__/circular_buffer.cpython-38.pyc b/practice/circular-buffer/__pycache__/circular_buffer.cpython-38.pyc deleted file mode 100644 index d6384f89bdf2875c90a2925b6cf755cc79146ce8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2982 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 Z-1j(zgmp_{_$|I6Q?RAYYnHK4{TFRrH+BF3 diff --git a/practice/clock/__pycache__/clock.cpython-38.pyc b/practice/clock/__pycache__/clock.cpython-38.pyc deleted file mode 100644 index b03c58e79490798bfda7afbeefa0035a01f05607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1015 zcmb7Dy>8n;48GHkB|DapX6QS3vDOYj5g-M+c?q&;A(Z0<5n@{oPXgMm&6{-cD{1W` zbjuX-R3&a=6fgynM}0VcA9bheESo5{U&Y7UGp*EbDfTVo;)30sarmlGp?+ll859bG zD>V-dzyHSqt}fW!IR~o>jj9MxWALbo5JQYOM;POXbBqb5oJTmu3Fib)aLPHwjC;?z z_;OX7dm|zSlQj!fm+UU$fa*%^^m4~qy2#npZ5Q3uEp?-HwP_nmvcZR^Px-a8vt+iHhL*LO(OkO8zo!{4cRRL#9Y0j>7iq2XncSq0dNg-qTfPDZs;U2>{(}7BWW0-b-nUelo-CHi6t3(8t?UB9A<&k69NZK5r zaP1AiheH$|SnXrPTdsP9n;WAVL-(Kn@9V$-$T8noBUqCCMRZAVDrZ>5%0As+neWak@BEX9)h^ zJ=0bFUe&MvfBo(|0|UJ={QP8g-~49>VzIx|iTp|7$yNM!ZlHh|#4EAcIM<2AWFi)i zEv9DEaq&ynY#08LsB|x8W;5~FOEE}7>XR6xtgib#YsuMOh~J70r#XUC;x)sJo#L`cY?K z0Jfp-f$gvZbua9MU8wtDH|#;(4|`!B>H*jf2T*T=K{$wdI~;<;sCU2-IEs2F9D^a$ zyWlvSK)oAI!YR~y;53{;y%)~HIn?`L7|x^K4;Nqr^#K@#G1P-F4q4O(AqRQXhoArx zs1HLCCQ%=Oi!g=yC`>~M^)Yx3E}Ei>Ob- zOYk!4Gw=$$iux?P2Ct(&2XDX(>S1^j-a>sI-iCKjUw~V18}$g>fp<}l!h7&O>M{5L zW>JsBhwu^VEPMk#Mx6r#?xN0v33I3mPzFFf0T#@oF2X%nKs^aI+(&&89zX^46f8m& z^)%FQ%Il3DKGnA^$1UTe`X4&(!vE{|?;J$&&DiHLH}3N3UQ4XSA^AmutP49y&3OHI z1*0~r{k*?(x%|jbcKAuM(Pui2#oU_@m&{5d#jHAGWJXWojg(_m=AXnEnfcSp<9F~f zXWSf{Goe}Uz z6TuS9o%llw<`D&E@X9Dqci~;UqbODfnv*j%GE~TFuA1pV+K#F~TB{oFf@Lh!mKeH9e@IoN(q&PQ(sX(~C|1+C zTq!%vXmr}5+r`JR&ZoPH?~sJ=uriW?3!@;ULEy{rX*!$5u?$Ceh$CFIp=#e-a1Glr zRxMWJBk7RIw5;>A0=0dMD3}K&%s8qV%zHRynrwsBDiz15J+jzw3G7h?ta51-l+Z%C zn$AvWQ66uH(kR!eu3cTKEjg8yQxfD0ddPuxQSj3O^Dd!4{CO?@V;sL@KXzA)MTCr} zWFA%PvCGZltb~48K_A{K0(NfD-sdgs6B-NI$Fa9ilaX*6IWIvTQXp@*I4V;6cj&&j zl}r@E*WbzZNCWdtQKq#HM>m5VXc>jW5xgrqEk?Ug(v7yT6u!vJD)`3Y4|`U^uUblY zs|eV=Kj0nh-=d#>$~|;0eEdiF_=lqi3}-};ts5bD-wx` z4oL($h`@-Qz?<8DMp`__$!ns)-XNotVcFxay%V+trJfAE+TMZIbuRi9IY&?wX)IRYS<9B=4$Q&cT_xOnvrN-3|l3e z^bvuV{V7h9J>xZ3PfoMSOIzXmAS61*}hSQ<`7bs_H@3QWv%rMxD=5J7_=V2g*bo15`NqPJ6?%s1W3zTW10pX(5So;B=lv!pq$MI8bDj~F@--$LXl*^;S zrh=q5MB*=ah_EM1g?zXniS#cxnq){|t{AyuHcJcF$QO+T=G>ErsOeuv9dt}BzLtOl zcaw6}S)_nJM=!(+ae2*Tv|AozVaUq4FVWC1k5-G0aVH4(0dnsF+8SdHd0T`Fio(NS*oJ_z)kfh_5vg#4Uh z`=O2gZxp;21%;_nQA43w`0~fx_owJmDbsN!4r&_ib6EGn%~nxKaF|gSe3iJ-R))Qf0$2Nl zHdu@YSNr-*g+z>RW2ddqHyyV8H|-@VNebT{J+rZYgC#;Xfk)x-a43voD;TUvoX&5~ zsnsl;#9{1EY!T?u`dY$`3+-A9JdSnVxyDSq{9hO*|T&sfnk<9da<6QP42!CUZaAoI|j| zmN+D7{3Q+^?H@RN;RPtOZaeCO@~Af>fB^g*3Gm7GgC4j(5?&F#X}CQqmoeJDw8bmJ zwmj*4Pfril<}0=3?@FN6upQbc8gdGCjHlf68cH~F@k~DygfX{bI2O_{D?Hizp2TFT z{qXbsMu5KBNhD_8KH@{wNAEvWgWAHJ__Z-Y_kD?pZcYM?q9LaYkkQ20f7K!%maU%; zX8;84PF-V}nRVv}5{ZIlI>OpV%RDmU~H zi5NrA5#w8T`;SDd`%gMz#c&(l0BhY`ee#4-bK*cYN zzcEUW`Wd~R$aqpTNJq5&VaG@uC&4!iXXuDtIAT=0XBS9}lAu>hSe^vEo56}CE|Qoc zQ6j-Bw)D82(c^0N0ttGnmE9yk6(RNti8n~hka&~CTO{5gahn7^QDN_rc#p&fBt9Z> zm&6$_fT%$JqP8kwc4?b1mj&5e(5{Ti9u_|0__-vcJr?S`X~xg^Z#dCXv9PKL%L KwhPClKm9)>Tag`kg2ho{X)-|iF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEw3~;DYd8wqyS9(3epcPPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitBL&d&d?j7gnt`zh-Quvx%}*)KNwov%`V7Pj04EtbUH||9 diff --git a/practice/collatz-conjecture/__pycache__/collatz_conjecture_test.cpython-38-pytest-6.2.4.pyc b/practice/collatz-conjecture/__pycache__/collatz_conjecture_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 0483573980bea509c08f696215106121a09c3f5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1924 zcmcIkF>ezw6t?d!$t6t-6k1dvXvKme)MV;bP(?v76#*@vTdeEZtz0g5hwT(n!Blou zMk=QKC9g~wSy{?^KH8?x2B{K`?%B`w^ZVYH_uj_jWP`x?7R_#b4hZ><%IJVSvI3ue z2!az%QxZ`(dtKinlyrlrLd%nCRD}~St#!jFq~tN-J`X+-9*F8recz87oW3Bf$`D>6 zYb|Ok+K56YsE!T~loj~&G6><^MINWz`$QtYd@>4ng;znZ@EQ+cuJSr>z+B@Kya{v2 zC&AT}omtJ(G&XyydA1`G(^FzyXp>NQ`Dox8qg;hgUjy-hd?ki*x(_Z7Jd6#V^4ErV zQK1-kb|ThVDD&uTFHRK#9#9)-k!}r$s)PFTRc8Y(=uX_;jCr2P&O@Q!n7rtS_d+F7 zcRPiO6C)GRNlJ)|$uY*GEq1cS4B&1TeR~}jY)`11Ir`XEu2`OlN${!>388z7XGYyV z$MRxqTn0}=VLBIL z$tD70amHEBdCBV45t!rH{M+(EQ02;lOJw*3oSx6-9mi%Gt8KxuUUyT#-(GTh8v5)A z^m}6%{`X6#Lc!ERE?t>Cfkjy+2lVsQM{1xx_bDZ>$P#%*o|D&j>YLyL-Kp$TL$Qo- z2lbsQr*qIIMoP<7)z8~cv$VfZoTm9Z!3Q)>?HNGM2?%!I*6@*3Ee@#dVW0Y?~67FL!awLaj JnuK1n@(TbE=<)yn diff --git a/practice/complex-numbers/__pycache__/complex_numbers.cpython-38.pyc b/practice/complex-numbers/__pycache__/complex_numbers.cpython-38.pyc deleted file mode 100644 index 20062dc82045f1d06528434ee7fe5121cce9ec15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1451 zcmb`H&2HN;41i@jKh9se3Ye9a7?xH=ATruhjiEV9r^$} z<&}KhBkZ=*NM%lAcL-3lG(=Jot&g&3T@D6aLGp8Ue06UL@ryg#;!x+5nm#1;L7+hE zj@l19yEw!{vOPQ^=BOB)rST$?%V{3Zr3yI7QrM@Bh%;)sK?=o%SXt8* zqF*X6eF{OX7q&_7=(y zvM`WduukD^Vsg-BAO7_xi`&8l2$L`a;BTT?3G4fDCHF}g5}0WYAz}Z~CKQjFG*`Cb zofXYA`z+N%`l`*NEdY4~&?LWPj_OPfcnVQ?@rVePiI;s<-$(Q`v&*aG#?4-K8P0X`#j$AI@Y=MSV5Y0}5%Uifc{vSq)fmJ*a(Fd{m0>Lv_Szb9+4e8mc@Rb8Who>r@{z WKOI}f{%?W8eYZ~SJ+Jhen)nO4I1OX~ diff --git a/practice/complex-numbers/__pycache__/complex_numbers_test.cpython-38-pytest-6.2.4.pyc b/practice/complex-numbers/__pycache__/complex_numbers_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 3ac0af656c6dc1d16775f8d04a5a216f51c36af2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11156 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 diff --git a/practice/connect/__pycache__/connect_test.cpython-38-pytest-6.2.4.pyc b/practice/connect/__pycache__/connect_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 983a94a3d73b48a4b17fdb91d2fc1196c963ab7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3789 zcmc&%OK;pZ5T>**c^`Q=iQ686Zd;(mqUkQuB1jHx;nrz$sspqMUbeq7j!&c_WkSAPe--7WL zUkwU~z!vR} zj)f-~-SZTUMP^SAMpDM*EZegGt+yQO@T<%Z5dLAMhI1{DwOk;3JF#|T1I&;uBsley zfcul=wi*9``Y;KAhl-eb^zOmkbS@u47u5tpECzy2d~Q}y#NnKBHsOjg0VEchM&5G{tC@QJ zrwGc5BQ{|*F%fUg3)I|jTU4Ee+h zDGR)bh_O%z;hhr@;$D7`gYb;XE(J()zUFWlmf?lC1C%)dJaG-LfP+hg%nBd}2FO^9 z1)HPCDe6n1R1i<7$DVmUkMW$Ggk0S(K=ED<#j|L-1PIf4=N;%AzKG5XV#N>|Hgicd*7GkUU^X`-}3PCJa2!WZoOpsRi;b*IU zI7_!M^+o(bgfq<o? zrh$Yj61@N)F{?2}2QI`ftGr-EetXbM97k diff --git a/practice/crypto-square/__pycache__/crypto_square.cpython-38.pyc b/practice/crypto-square/__pycache__/crypto_square.cpython-38.pyc deleted file mode 100644 index 3c01d22a3d30df9a56cdb1ebdf99281674031325..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmWIL<>g`kg2ho{X=*_FF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIs~{&aGcUd*wW6d5qzFv>^3V@0PAw|dPt;3FOv%s7)OSfO z&MwI>&`+&MElSQT&ebm{N=z=vOitBLE~+dj$=59|EKMwe@!}yoy@JYH+{u{*8L35J q3qa-+JzdDrw diff --git a/practice/crypto-square/__pycache__/crypto_square_test.cpython-38-pytest-6.2.4.pyc b/practice/crypto-square/__pycache__/crypto_square_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index c3c684272b3bffedd0c44dd031d27d7eb8225e6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2640 zcmb_e-EJc_6rP#ls*K0eF{tWjewElV%0d5-I(^|0YqJj)*e!OB)hsje$*(z4?2Ks>xvK4tc6Vwj$4P{{A8Jz z;1wpl1DD<8Q7-o99ivAm<~cNo^(GvaCVYXTnApnzF3Xi?`!Rfwi)R|k5w`WKkM)Bk zOMhBz=_}8_86oZCm?sI6xe4Z-D9KTr7{n!7Psh(C9iRVa;VpESnBj!Ly(k64Q*L5R zuu+63T#T!o`_TVcCKG7p6DCluk&@ErVEz?P&6rMLH!`B&qJc?gQjR4eLgqPmK^P&Di9u6i zC}kQE8INOu5X3o2@>`ws=_j{&>9gxid*dZDm6exX_L2VhZccigOP(Hd3Lj%ZQigHS z#yFKUPi(!5u?_N7kFp_DZCi2AiZ`uz%ZfcK?9Hv-w!((|1z`i2vJVYg(K{e~*KaKR zT4k>VG0b^lxX?xSD4XFM?H!!W>}d$9hX(||K(VRfh80^kO-1Xvtqp_A!$VZz=Ykun vguSSISzNs(%6CiQpFz(tgq;$>0_M_$GV=OgR%{&F*sOhv-r040uiN++@j}ps diff --git a/practice/custom-set/__pycache__/custom_set.cpython-38.pyc b/practice/custom-set/__pycache__/custom_set.cpython-38.pyc deleted file mode 100644 index 657d633b34aa0f24f18b1d400d10e087a0207306..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2238 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 diff --git a/practice/darts/__pycache__/darts.cpython-38.pyc b/practice/darts/__pycache__/darts.cpython-38.pyc deleted file mode 100644 index 913d6fb78cbc0808eefb03c4145c5e376c089b76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmWIL<>g`kg2ho{X;MJ?F^Gc(44TZzAUPNSu^EBb z8HkHnfJ6!dPz|HsN(N1)TZ|RA7%PiF(qQ73g??ypYEiL%qFz#BN`79ZzDsIxc1eDL zeriQ(QF3N+u6{vLVsc4la;knxVo^ykgw!jjyv16aoL`g*GN~ABJ7Wi diff --git a/practice/darts/__pycache__/darts_test.cpython-38-pytest-6.2.4.pyc b/practice/darts/__pycache__/darts_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index b1945012171ebba56e14ef3ff74ababa20c0c2f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3083 zcmbVO&2Aev5azD_R)3D;IF6mDP3xdQjkFSaZ)yQ?k()0~E_)%?JG8Q?cBPUO92LDK zFVUV_^yEkADek>}fjt!{P(V*mpe^9e>{<#XuOeY7Xog%4$?qG^kbKr`))#^7Sbu*B9x$v?GjYL zL0yI_)KFKT4h_@}G+_gE6>h*L>KfdHE!1_m1>2|_a2s||H{lNKqTYZ#xQqG*+(U@1 zxO(JCt)2>{eG5@c3)Rs}>@oh;4vO#Ck4#$x?v)LNpKS63PEb4!{=U4toK(?7(x7uY zu6s%eslWVYP@CeAPb z=!+|$w+x^UvVqRo=R}%=Rul3=Jwq;us&SC`mS+n0$)7UuKYSVoL1gQ%HZW; zy8o5|ro9S4B#t&I>>Ct5$)d1qU|tTm9+t*M@2b*WpM$XrbJ_k8PBl%sOb*KiuE}9B z{d&LuMx}8f>4;zM{s-CapTqvKf&J4}{+}DUCirVXl={6j-GEki1&i!7Ft3q^28UH? zV2;bnAkE)aw|7;!NYBHir}dIFFrl;!3Yj5frhz#yFNbs&{y3ccN4L$p)A&&mN1hso zq0ln$`EZ~D9pIUMBJ`OM=E3AefUgka>QtW@)SfIvSl&604>n_m^T-PY=W&hmZ~!B` zt$EzwoSs-|kF4X`a)ZQ85_FBrZ4$Rh&}Av_kk}<;R&b21A0I*3%<=nltx*4pF4F*&xKz6{ZwZ7I%VphaAreTpm7Z#5j8 x?t_e-Q50xu#3i7&VDg}hou~Nav4^inLYM_Tc0NxX^##SMatJ@$VvgM?{SOvU^P>O& diff --git a/practice/diamond/__pycache__/diamond.cpython-38.pyc b/practice/diamond/__pycache__/diamond.cpython-38.pyc deleted file mode 100644 index b44d6c7254f2ff21187ee441764efc189eda0879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmWIL<>g`kg2ho{Y0^OYF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEhn|4B( z&`+&MElSQT&ebm{N=z=vOitBL$xO`6&r5;PdIgoYSc>w?i$R7JgPg~}SOl`rPZL5T aY=N+tfpWJvY;yBcN^?@}K)OByF#`aw|1iG* diff --git a/practice/diamond/__pycache__/diamond_test.cpython-38-pytest-6.2.4.pyc b/practice/diamond/__pycache__/diamond_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 585b02945a842f41d19602180b0a88d797e0f47c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3391 zcmb_eTXP#V6khGF?Tzh(G^C*^mpQ`>41S3pQr?)7i%Xyd15LtZUo;y_aks2@&1y}^ zPT{5fAuv4k$M6UA$`d~Uo;Z?kyY{-ZJIJ#~M@Q#7()lDyI$vL}8d&~tcP_0h!}v=z zvc<;60e+%|f*FhihD&s9_AJvNM$dLjWY|-7%h+QEm7e1|#5ggS#q4JWvw8XP+EdG| zGIDA(N`GS{qun6Vj-xBlQLSt-v2lQ(xPyZ0(Oi=eWsEYJV!^-^!6@17KMJZ#l;Uv z)Nk^idED_uui1~iPU3fXlMUxLu4#f3-Rob=50pX~@A8nxUcza|6P#Z8$s_7f;fLLT zqk_Dxs{~Xg1}T&DPA1>IWkW0`<{b>H7)Nrf2{~4d9J`%ba0sb&1V@q_#U+Hq6(tlE zLs3Ibo-CeD7^zHXCkhkK4>38qPnj?V(HPFdL?>HRrYUODg_8ES1c8ShWYu<`GxHc4edNGV51xt&&! z0b~S}qBv2CW(AcN+5uXUv=;O8@sj-TpExo%PtdL+2oE;HFin#A{bR4C4_<+;MdQrz zwU0w;zJ5hzw0ZQgrH(9hT(KIfvvsz?USpf=2HRqh?XWl4Ew;;U<97@79kgv@ z-xm68qVEP`>WHmk3J*p7Aia_+f`+TU8fdgb zRs!7{d5`NnxHzXzCQegrV!}OJ#NJ89A*+wgMW9c|ox0Aqw5b5}Sq=j*+b){k{TU3v zoMmpL2Xh#JS=%h=^8yUOjCBU|MIi|8(D75d+{#;x4|$-qyER;Kf~a$@e26{0n@^jqa=W@P-hNQOw*? z+577M)c>?UOdE4|-=f*I8;*1+4ZR+xR8}eNMQnhRr?O6|dJ_+O;yTVh-cVvw33cbj z+e%Cygj!Rt!q`Hg0797@;@J9E*Y-wDIu`>!z;~dK^@IL3owRmo|5{PGH++)&QMecL ztJqJtT$`9=Wo)Y=STpa%(iwz)q8hR?qFuk`rE`Y1V|-=nv5O`vosWho-&GGn;iwrK KTZUuSOaB2@ceell diff --git a/practice/difference-of-squares/__pycache__/difference_of_squares.cpython-38.pyc b/practice/difference-of-squares/__pycache__/difference_of_squares.cpython-38.pyc deleted file mode 100644 index 5d0ea9e4dfd3b7f7e042db0f8ae58afe172e2f02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmbtRy-veG48Hs{4M<^wi5KY5-V0O+3Fai(WY-r}No12U}PA8QtsNHX7fNipm+? zP+sh-0yR`+iG+25Q(I2mTbmQQ!E|HG&F^&99J;LMe%czb?}Z z_=wx?#{Aaga4NtrJuk-rX!CduUTwmtJ^)48$G?(o4sgZz~= GPU9b{cwm?S diff --git a/practice/difference-of-squares/__pycache__/difference_of_squares_test.cpython-38-pytest-6.2.4.pyc b/practice/difference-of-squares/__pycache__/difference_of_squares_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 87799fce230ef8eb600a74686e46a6033d65a2d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2315 zcmbuA&2G~`5XX1zBzC@9+NLdqQVCHBMWV4Q5x5{!sYP5+IJCW3LMu1BmJD$cb{(Jy zi9^eKfH;K%Z@`QAhB)OB;KYpG1{Wn!nr`Ho{qXMo^7riQVYyr&P`)}V-j56+zp#-m z&_{OQQP03|!fA^*H1=AcYlM;@<78pvNo-2il%1I^e>IKo9>IJFcCeBV54H`S} zr~@z}rgSt;xpqn%Jt1&1Jj-*?&T@mB;B!3B3*Zf2nut?ms;pL_cW=YddRlfs_o1?wo=E#{qQ!>??5|D)eUh5u56|9`8ekL~Co`;PUN=oSadt?4}ZPdi6rO?i$sOpVD z7B(9E1S3r}7?bgTPfQt_BQfiXFft2feKt%E+xeS!KGE@*E2BiQ?d23`?J|1W_SC4u z;F3Amt*^;EIEkS+Qqbju^unoP+t*W|Ta!Wmn>jUS`pZiUw82AU#G^7jX#M7_ptF5@ ziJ|6yuVyEJu8vgHwl`9!)}=JP#Mi%|s)1T2`6Y=0Jjx@*U5}ahFt4RE#P;nJ`2C6C zV-~nVOngJ)wOO$1n^(lXN`$=m{gIBx-k7AeZQo6SKbS>t+ip}#k;z!w4FqFRfw7>& zdo8S&7{e;jr4G?<^{DjG}x@&=l9G`G;;HIy=#k0qvTTtwl)FsZ3u{KezQ za@6x%q2E?fX{US4hOIT$Jw`EV$?fNN+BGTONSzEEkyv(7EfvWr=Vp;Fv$YMa)Nu9*^-2g_n&<7Ky1XI6N4YqPOm@;C-|fTKlUjK|uZsDmFwM@YNATOWaSGl5we_`fSm@Sj zP{x*}g_{?ss=C+><$5UR?$BL2w68@A>n$9Z-7}4lIH9OR#)C2bBM-ULi^@XeiB3Lu z$#C+l82LHf)a^Hw)y%}#PfRJ{e=z0o&pAwJ|2I|aK_j#mBO1mFQpwcFoXDNgV*kIr T(Db%$%)WxV{zJHxMrrg74p>+! diff --git a/practice/diffie-hellman/__pycache__/diffie_hellman_test.cpython-38-pytest-6.2.4.pyc b/practice/diffie-hellman/__pycache__/diffie_hellman_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 0e25368fa779c9a91ac40806083d47fe94cfe813..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2886 zcmb_e-EZ7P5Z|?ZcfQLdZ9*xcfG{c_HKcbf5>kai6x1LPLP4~tK$eQ-^KLF~{Bhm2 zo7~AK9@1BYc&?DBcMXWkaK^J4^?YW^x`Pg^}6Jt;CYAxXCDI^ z8&KpL2(CBe8H_UHA@R&=G0$Q(R)=d?mwc%^CMcBlWTHcIyb|U@_ zkK-grx4Fzi3RCKUNI2u3%_-R&_g$)8|rNgt6vjK}o1&nd}iNe}7RD9Js8 znWbS7lkAb~MoITbY9Uso@d!}Rb4*tI)u7}@@)`Mo+#)}b`xYaxq577)cvORRjv6Qy zP%NTYM)4YoH&DET;$0LUpm0%qf}#szR0l*8{>2emGWyWTirmR|91)~_zUuIU0S|M| zoIG=S+*!Zw1SxaYT&m1O_Q4+wS@aMHfjFyHASD<1wkSCKvm}pqR88wwCOGT~5tm@t zKi_xnz%bbjI=z5pY1G~1axc#YU4Fnt7|EnN5J8wnA@4Gc_|@GC@=4R5H2oY_?hJ^$i)bJze_XP){2tVHqQvbRS8~0-_Wz`;>gN;aFF(K5ZD^Nz8&v>`<@@nS@fta9w zG$A@rsd$$I$q#`VKmeo$&5hhdIvhd`zmLJ$%tG3a9=4pxb2CVtogj)GR&ewNIEZCQ z3I?q@J@8qQ$=r#fJsuC8{V0x|G|N|yXHO;#BrjNY^<=JgXTHmwI1qjAq(#!>!U=aX z$&)9^4ejAFs0HRMya<@IEU=>*OyKx_PPNSz!pZ?-fO$*mhM(3KMzV?14-h!E` zwH8MZLs>FdM_x$OTPFq?ZJf;&l^vb6I17VVu0v(2PSiowmTRe+CbC+ni22q1B8Zh4 z^HiCV=dK|zK)m)0bL8nwUV0u0s+C`#Zkp6q=xFt2Ha&+a+KnNsdGbC~7%+nwV@M5S zQzs7#6Gmy2=Ao(Cf#F}<5^Wf(O+7+;kC4t!4DlZJVlsMSY5No%DB9PqIBi^48y7-= z0D@r=V`e=`s(vA(v_BhHm`Wy5V^MrZU%tTVv+I1-P+(*WOorkk6jx9ny=I8F@!w|e z@AA~|M-M;-K7$Oz1yASl%Vp3vkHf8(#o_-Kd4<4eICS>MoCLhr96{c>6-NY~3f_50 z1(BFxfVY$kXZ?Q~$Q#cAvO0(-+{r*AC=5hC^yQ3VTy7q~Z_fnanUv1~*MybOP#s(z zRHng|6MY7olkZH3jcb!|vkuL19g}id$Iu%$biGz$zYT$DmW|ThgEJj(H4u{KOh^K- zh_wzxfg2DPLAXsFk{WLDF?4v#0bF4q>Q3%8-nm}Zo9j3~8FPHy@s{+EleRqpCh(@U z-f3SgYhS@J?DK;V&cr^)^IxujAUc+9I0f62cXas$?wFmwIJ^97} diff --git a/practice/dnd-character/__pycache__/dnd_character.cpython-38.pyc b/practice/dnd-character/__pycache__/dnd_character.cpython-38.pyc deleted file mode 100644 index 443ba4888ad10e3557c5ce896c60f95af48cb07f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 433 zcmY*UJ5Iwu5S_J+6e7|@h&!af+fgADDM(PcL22BKHlB^J@Q+@EgAlt z$wI0K(ts2Ndq_hHxhCpPSC7V-thFvvoHd%f1uKS+meB)l|`CHck|U2NgH3-2^eO@)l8=dm&J7^TUeq z7*2R|&aF&o5xXg3S<|kN_Zi~z&J;t$os2vFZR_M3H{RFJn5bSSi@_h|_BTpFH@O~0 K+(_j&1AYOxd0Mdm diff --git a/practice/dnd-character/__pycache__/dnd_character_test.cpython-38-pytest-6.2.4.pyc b/practice/dnd-character/__pycache__/dnd_character_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index e61bae3daaa25e3872b9bf5ad7d90511edeae26a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5090 zcmbuD-E!Mh5P*+lNtPYwxA`F@Euo=J&43*zX`7Z#Cqv2rGmsn78{KFWuac;dC37T` zCKGN*FL{V|;DWpi51?DF{0a;Zc8_ewwKHu;#~$wz z#{Qy%{*Q(SoA`^qK>-XDpIM5~Y9psIg*7xwS5k{%8E8@ce8aTNM!_m5>}v)&&|Wgo zT;qB1EN6{?@&haDZS=;r%W6{CI&ipCk6oUajS##&&*gP8_J347*u-D-I|^6afTe;0 z>Pu$j(hFD`=wRTn4tX$98&H5E>O71<3AG8MFowDS<1m4`2$L{{dIYY)H0lz}z%1%f zn1c^ckHI`#M?DT7!UF0ExB)j&Pr^sAhhFhqw!4iCedKzxS9n>?hjDUBOiKhYd z*mm3~t}A%+-4C@Xv|IR#rcs=-S1eXQIYX+~Dg_k1PClg*sQuQFsfeEs5U9qUfr!i z0H4>pp{FCecVx$Sx0U8`vP=!z+4X!cKDN8rvG+o5NA-}q_L}WQcCbE%*N!MhOgY&Y z#IC%jlWgIk7`Fe#@bEmgc!30kA{F>Rvv*Uh3yQT#{Bw4Sj+1N@I^FR&iR={jQVM#O zvQu=NWTP ziquIq3bAZ2OHzn+cXd^cB6X6DVuAp~Hbmly66@~TJvoZhNj3`F!bwwzb$4w;jv{rE zjbe%@XmH4k3$gC5e<4SaI(dVF#%r%|p@}?ZXY7^on*FR`38S8333I523#ipY1#-Po zM%zvkLnC#koa5xj%6Dpu#7rxjZ=z-7_#Ms?GLo&hioQjae=OOrp&QJwJ$Mxe_}Xo_R2+( z9bUtBVn#7{gZ=m*DS-O|%XBOSlTtklqS%XDu@?qO$qQoF_q}~LsJn@A zOHRis9C&dv#6Lx8(VC{%(x^Hf%<#?r3}05HnB$)u--9plmLi&~m|`dkeczMnTN6F( zX(-3Nhx!-v{$`FbZYsu1p@+GfTkOjX^l22|fj%Ak^npGD`;39UJoe?geWLbPw|C0s zWg_@G-WI31mER}vfCNoa{2_@)BnArKvWTVY)DQZ{N*MUZcHQyoE#HY{Cqew)Ny5}%Tw4Ggc4SRt`Sf~GzGn8amBM2oh6oH9+9jcEEZ6*Kpa zuVxm-IptDf?zTKX_JSxWZ8neX-qF0>Jf>(@(s>L=MTNUZI9A-G(CbR_-M%88ERy5k zTd!8&#dLsgp8DUyq^YO3Jc+r3<}C+b?a-}X#gv$j)A&B2H9Vr~&ty}~R40u80fL7D A6951J diff --git a/practice/dominoes/__pycache__/dominoes.cpython-38.pyc b/practice/dominoes/__pycache__/dominoes.cpython-38.pyc deleted file mode 100644 index 5137c4a54134537940fc1436e5037fe0e2a15e87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmWIL<>g`kg67Y1X^KGlF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIBPBmKGcP~2xCo>KO#HIb4=qkDD%MZbOG-@1&&$+zNiEJU z$uH1Ptw=3O&MeN=FDOb(F3C(z)raYZGxQ27Z*e9k=EWyxBxdG;%q#}ElYy}aWV4?p cghp5fVKD>cZgJS;=BJeAq}qXWeFkC%0HTmI>Hq)$ diff --git a/practice/dominoes/__pycache__/dominoes_test.cpython-38-pytest-6.2.4.pyc b/practice/dominoes/__pycache__/dominoes_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index c4ee1e468eda0a1256894c30fa274ee179e3c7f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5410 zcmb_gTW{OQ73NJcCCisMjuY>05;_}aqirkiZqcGB(lkK4Efy{G&}3UcML^J+vCM`d zl^H5sd*zopKV*&eC4Y&peKPt33iKuY&Wx^Z_b>pb-7x-1H`AAcnYBbR+&sZw{sRS9OSUX#GV6`e zvh}nrhm}|v_a(N%T-0S&VO7*CY?akeyKIfEqpq+Gwu!pRuCXoDtL!@4MqOh!*beG7 zc9Y#gz0P*oN2oX0$Ltf-o9s5bgZdh~%RJOuY>(YTeVu*E?xWsj`|JVg8|*W{dYIJ? zlWrI%Tt4SAZJQ8$blGT-BA?1@`H86fK2j;-Kv`CH5jJIa)f$7pdP)gy3z|q^q}f=13kLXX|0y>!&^&uA0@7eo7tsEkmqgivK)4_!d*hgP?H~ zup|x-4!L}pCcOjx9T)9Tb`N?YXs2PDAB-j%H~bVp8okr(HZ^?S?WL!_UR1aBf@_4T zjKVM-(>2dNpVmWT>Cj>=-NAIs?3l%Rs$0<06{%TlP*I{{g$e?$iyB(lz7j!(aVO$w z5)Tnf?lp=nygEctCKO-IqnHfQN|@a1DgJLX3dj|ie#`*DkNYW~Wxzs|_j4%IlK@n} z221@Tj3?%Bb~6X^%Vi)J&QOf;9_FSU%IuE4#A;4cTvGtAXjdr20882zBweu?uPcD* ziQwGl5%2OiReNb@v?>|Ro5wRd;6sUDw>0UL$hVfty{qIVO9=iNTak}<>>kEVOaEYA z`bEP&9EK}$N*aj5fCFIh7P>LUFwLe1Ir;A`mVbIkvFsiuBl>i#CFHT2Vjb^|2%}h2 zDD*8QGz(=riDS4=&U_hmdlCQ9L~fT@vp+BQf>Fhy-ye!j=TgU6B7RA8ALLPzliLCm z#i5VUMn6@$qY##M#xnx4q<<7~KT49`7noqksak6IarPNnrvqH95gyC)M-o{)?SM_uwLo?)|-GE(NKXaJbtv_iaF?a6trKa zIBsA5asp?)z;DeCm;*rPtpf0H8UO;KPI(E06-~ei1ht*SZOj4kDI)$aPFV6@AYc~7 zIQi=dn9Tw(vjgV9R7PML6EG(10XP)fbt+3BRYrU2N?AaOPs|f^9sv|>vMbV-27MPT z*lnLW$o9qO&6Xl%jAL_r+#F(nByJm)W#)eWc2?m^?#}aaW`;TFAIOdXs#vISeFg#1 zq2Mjwc%H&IwvIk4nF=ViZJ!ZhlF=}gZGSS4Z^`I3g)*ay+T$RYER-6lNn7s?0^vjB z0>SVF21!x@wY_NA?}4MfprzZ)6V>r2kOF!s_D?&+A;>-J^p9dXqqgD&?1sUOE&dY$k! zk4FPkPz>C31ZAr_b@}>LKZxpOr3*pZTu{21*?{eDt)!Aca~E%tLE9>2+MQIU55G7%%~YslD%mLrMV+CM!aI?El~2%c=7vli&@a7 z{ewkW8vS>T0dmos(5|j`jmwhKx2>Nt6K{;4F&lSE->)`_rFBHWTCHV!qUD7uzCF~5UYkoFsTwRVwR&G+9!bsv zrwnMllh3G^4xaG~+M5lP`5R2g%%M*p??7y}>8k_Uir3Um?SXY+$_6nN{SK6Asy9ly zr5FsKap(C77u=I4Nk3xbAA%v5!8Y&~Tb|UBZD?V?k;uL>L34npEUc=AD7l)!vKl9O~SS@sV6(-oOrKs8n9W!ngCgC zf*5drh1qi(Ol+g?Z}_XjhLGf()}oZZS>MTA-;c@t`B~NXy9w(fKK8Sk?~{+!PXv97 z5t~%ppkkK_LMZ5~lc0|(!lQyxPw^=g_o<*DQq-v+=dFx1v5!){l6ne>`o=<^R|M@? zYRCsDkWZBs{x;kd*LExJs_VKHHKx9rxkvplO2b%YwI{t(e|)#=_f9D?8T#)qi5r6d zRfH+eDq6kh%2q~wRSZ^vOdvA1ABQR3hyxOiPSeb#v*2lf?_ebBA`qGTNGtR)9iwXV MxyF{^TD8)D0h7Y*&j0`b diff --git a/practice/dot-dsl/__pycache__/dot_dsl.cpython-38.pyc b/practice/dot-dsl/__pycache__/dot_dsl.cpython-38.pyc deleted file mode 100644 index 0bb8075c796b7ad4f48e780a68206b008006d808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1299 zcma)6&2AGh5VpPE?KW+~e+7sW;*tZ+3sfjTtKNb{+sg{cTGnoxHqEB?R)Q$E_DwkD zm3-yID{uhjbN;sUQcE+Q@z1w2^NshY*=#TxKeDak4}!6uaOxu>r%U2?NExQtHUAQ2 zJQG>8&otNKhG}svGD%*fC3%v(n7mjglx7p9}j>aBJI z%!=mi(RZIJ)gSgNrGV=sDaI2%ZX)LG#a@A67X$V(_~+zI*cl~o#?D2#MK&j!pNj)# zk){RYRM<6|d|Xzi#)hzGY8|VIQsz=A*e-mCk2mI@$9iuXBTCdlDc?})qSRLd*qcgS zUgd+?jzveT$-G|pbePW7GvN;B9AOv2w$f)x= ziHKbRc0*yNk&m1$e573!_-xBiB>R-^*=JB-`TsnSWsAgN6I6jL1ac3u-q4L2S+7@Q zm9Pa7CsxEgq0@E)YE{orO4JyeF1$g$$s2!#X#5#(%)61rxEw z${i-qJY5_^9hWamYN4YWPH&9U+lqa>Z}ZVGy|+pF>NAYJ{V;*p`?+-I=xjJ7gG|pcS>&Tbus?EO*?G diff --git a/practice/dot-dsl/__pycache__/dot_dsl_test.cpython-38-pytest-6.2.4.pyc b/practice/dot-dsl/__pycache__/dot_dsl_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 74dd70558b922c4fa0ece82b0bdb56d9c590bb60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4393 zcmc&%OLH4V5T4nWR!=|TIJWaZKoTM#HsN)ms61>^a1dY|Na?b*(u|dLcC})5RgP83 z$vIL*6-SB#DNgw#{D`@7@;{)cg3vuHuU4`Y8|Q#j>Y3S{Zf$@4b@%MOa=Ad@^IKza z`{x-#{=h}{W5D7j{G$6H7-7^W4XQ>h&^1CyU^Gmc+_4%K+|m48U^na_-^d4rMjcs=sBcoerN z{Qcnvp9#Uc1Hb4)5HZ;&Pv~RvD}79Nv^IIBQ8HNRBP+vG_ZR{Dv|cj>nvz8~inxe3 zzVErdG&=xKBux(Zz~IKQh@NZGh`7HkY5O@5v!L_Wt+jig6Ro+cO_zloZ*84N596@A z#vgIf@}gj^E8JG>wfGtfTJ@O%DCBK@e(b6~IGGuE5<0)dhAQx_fn+ zyNUA;`QC0QSac5bQ|C+I{0cgM;{?u++L;c;7a1sk1I8!^Mxt%RCZ;oR0+^EFM3x2m z00!Eu4XA)z%TPhF08{cmQUQ~!3Ti1D1wf-hmyV|bY98?)396`Y8zzTT7^lIg_amzW z359|x5qe$f+hHi_jhdCD0FrIo@2Tv+IEfBeP`qX@=C!Qfm;x%}uN}jJRQ-ta_!!Fh z-$$H>G5~F1TaPuY(kzF00dpHm1B_6qSy5fnVUAagScjc?*js|@2Ixce1`zE*88NV6 z#MYs;eGTTIr^bOb$S-|BCET5h?Zo!J4ztuY5KhbN%0q4%tion~QMxJsvvqME5x)RJ znz0xAykFjevgvi&)mvDaRep*^+=OW*X-h1t&A!{@e&4*!WA}AwH2ofzdearsh((Xr z^u+EZ)O!O&t&oYYs&iuu9~Qfp(|lz-=4rs9_u+q{cR{F{M{QbCzXBw`{iju2z|}vN zK2IwzEX{_x2;aZ^S6)Jhq3t7Vz%s4a@B>Vs7eYIDMt`h4p%8Ou2$XzBJ|bU}O>!Ua zLR-M7?o-&6^iCbuI~LQH;aD-ambGD=#)gWiSwFyLE>QFr)S0Bp+}N!KuD>0MfU`!i zE5fGF0~h*dEhkG!f8KPx2wHM}Yp=^Uga}0vGV~Op3KwObKWg!A?1dd^xS|bxTVSJ+ zIu~NRH7%$>rT>|9;Ll-qgguNvaOUB=pe1Afwec{FX-*HoPhc$#z-$r#tjDhqf_bzO z=eFtT?5Hq6Yg5fyh2d-x1~2A8)$6pvpzCv}P`0=V4=>(AfhVP;@?FCjRxj~33RM!{ z!P!{zU!H`pga5GwyHl7K5N5qZ7h&vQJ_cr`J{{{#Fq~q&q)^hayD>fKfn%6M?*p1! z8QNnSSUWjp0PRhry~4_>iz{IH05LdFl|Z4kh!sfH@~RgN={tZ;7QS_%>SUNYY#w6} zPD1a@73$9c(d@NF@+0^eH2$0&wHQ_b+TNnna&+#@t+Q#)tp2j6pc(JsR}XIpAl zZC2XNp6A1XD3Ya{-90B=Ej!&k1YkAkp3oFm1>Y3_sm!OBWbW`<0hAS9a7MCw9WTZO yyuv3htx1Zi(x=Wp!y^(FHED0b<~uID5#ysz@=4mCB;b9D%vWh@lX+rmRsCPEUCuNB diff --git a/practice/eliuds-eggs/__pycache__/eliuds_eggs.cpython-38.pyc b/practice/eliuds-eggs/__pycache__/eliuds_eggs.cpython-38.pyc deleted file mode 100644 index d42cc3aa834985bb3f9113105d9fc652a147965d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmYjLI}XAy3{49IAi8n|#6WWagpgonL0!63Au&}%e~McKJ2zqCN?kbu8xuAk!IR$e zbM$N{3W9+kT;kDgO!daiKYVHyL>!VBVZ5`5h4D9H($OA0eZii&Bx0Au2+DZtD@hy} zi&dsh$w6feIL^J~v62yjL#e{8GG$@q3UFVSm4qWWZ84XXQ@XYqBxJTRIE6IDk5AZ# o)v4{1Np#s1HE%}#vhZAobUk_3-^sV*NZXs`rD-yl^VFRvo&mf#S^xk5 diff --git a/practice/eliuds-eggs/__pycache__/eliuds_eggs_test.cpython-38-pytest-6.2.4.pyc b/practice/eliuds-eggs/__pycache__/eliuds_eggs_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 84437dfd9ee89e528f11e885b0d462f32ae58eed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1182 zcmbW0&2G~`5P*06myMHD{0Kzg2_iuZ0&WOZY9quY7uo~9tX%IlGT4sUwbcfdQ~L-! z0EkoHfhXB3r@R6uX4a4%+kyBrtx&_m6)%g#1EdeRyE(!qod9 z1Q9eRF|}`}a2-NP;l(~}SAsZz6({c$EM}CvA;J~j1reSMK6KCBI28098Tm`dM5ZHZ zx^gz->AWfH6kY2BP}*%DgCgygu_LH(E=cUQX=6|LA^_VL9l_uoh%TfL&CVpx8lfk% znLd!ZPU%`=%!?)M!PE~x2>OMdk#D4?f}Ybe`rW}|AdfRu_~E5vdWqIj)ss(6k}FIA zK2OX1*f4oo$+VW@lBg~${C*o9La2_C@lhh?WftvA{jr``kvx?u&2$k}DoN`sm65cN zPoM?*ug+2DH6V|xh3TQfpIYYta%;pU)T5stZq_$m3;gd|osC-E=@M&Q-U6X;9~Gd$ zl3Iax#DsREXGnA#>?@$*HXs{!a~`BvzDIy-dD;%WupPR$0kpM4ZQ#v`@DMWc_2tR+ zME$ly&n?n$1L@J$9<`CvQO7XO%cPK;n~?KjE}9(mKIeGr+7;EqcI=?Q{;RtvuFlA6 zcu>j((TAxS2u7KQkM)jvh8;CoUT38?{oQK8SJseM3&bC{w>_JeV{VOuYk$Q|?hxkm{XdPM3;6&5 diff --git a/practice/error-handling/__pycache__/error_handling.cpython-38.pyc b/practice/error-handling/__pycache__/error_handling.cpython-38.pyc deleted file mode 100644 index 990145cf85401d1b16c260c8bb4c3baec5728b6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 704 zcmb7Cy-ve05O&)1SE|?;K|&04pm_m=kYHlyg1U6EQu|6xQ#(34qTP8DroK{FUV({; zyP&Eeh@ofs&fn$i@AEm6!Jse5-lwPYPl_K5s@5QIN7G-D(?UmYVk&e)Hz`Is)-8$+ z-PRq7P2GJG!=9qbUltL%r|DyIT0DtuG~Np2qYv)uF`0NkpQNK%s+~2-1Ndcdc>-%d zW&A41F;&4RNC45{^&+)8Gxqrh$~_$Ao83hTK$eAawvl0h?v-jKtQF+JILo3uOAryV zF2#wx@%oQypC??aWl_ig) zn#M?<*4JVGLX17-U*hYY`Y+^VyQBP7C*Fq1@QFtr@5tZpc+}&?#VUd4kMQE&qY5E^ zqB8w>pxlAKdIo|MP7@MR`*ymnLn!HbVTl$ae(2kgau~qdNh;lHSf%6}!d>pYCEOGK zi-lj^uqGCH>7^r|3jer103V$GNSgjTh(Ov+YJ#me5#PlxMF)GP9|x2>@K?7%2)mNd z;gmaXN$3_)LXVfY4|<80c>r&pS9lfPWxl{`@DBJQM5~*X`%-4|L6q_&PM_}xr8^Y7 zjvj0SAmlFm)f$K+a!fQG(BJEnXy@3)g+C!*k{`%6c?tl4Q`&BN=2E1Tka|0cl~7M& zz5hrk6+IWGa{qNl^mLr1#t|}H+sDv?30wx-J!E=cW(TkoCPsEA)OboHdnZKVQck~b zJqFjR6>aWDJWJ!&J)vIetk)8+h3v$t+v>@vqvMWfS+6&32yj`bY@{*`yWQ*^nhV${ z0#Bj_xMSp<&>HQppMh!fyh&%UE5Uq=-3@3I*c}5^10ajL1D9f-t10w(&{rBbm_(Qc zZ9~6!hv=VfYzvhqx{>WQUPVdF8*$ppbwllEdBPiMrW?DW(aus~Xw+Yy7{}>3=0j5; zXrUnJ{x5lyNFM@)S7xb@Lgz9?E>d(~D`q@Y7)+L7ishpacz(>X#iW>K=hUEAp&+zQ zoxeP%2C~042h6F7?*WM{jDh?X6itpPg80mNL*F<6p>y;epho~FfC=zgOW#_$LrWJ= z1ddstD{YDE+vzucItwnKrSeV(GIuXe$kU%3qaVH&1jxH9p?q|F557w@pX7sW{~#jt;tjg@IOY=~8Gs8ApsfhDBw6s`WX ze4?7Yu~rQa0qSL# zZ&@3T2cY|7rpoP|6I$$g5ixhhMg!$8a$gs-Dox|68A4LH6`Yz<=AY@cu*_?dWvQ?@jFZPO-uER(cIvlLTvRB2tun++%AB`vpJFdujeGg ze~oY^QO3vj0Ysf73Rb=%Ie>B(QosYs$8{0((&!)$$9>SJQ({YA1c&kxh#iSrl9xd= z%LO}F*5t=15N`Pi3f#Q>48;``n88yO?AE^mc>s4=mg@_y(#cfDck9glZ9d-u zkIKfQ{pQ)lPkWuZ*xSvD2^dSGu3*em8S7>|hl`z=8e@3L6eDs0yi2S>@_rmLzzh7K8Y~10b_9cVqc~-(xnzRfJWh0+DpR}DJ7i<+GV2{8 zvzx`@;p1adiUS#I_#PQ|newQw3X^RjMA8I#8f#R-y0G6UqtAz;s#mRDuH!`6oHM}= s*xrrc3kBCLuYoWgE^rF!@!m{uyMXB{yy_KRE&*93ffLZ0yV?rq-+5l;ssI20 diff --git a/practice/error-handling/__pycache__/test_utils.cpython-38-pytest-6.2.4.pyc b/practice/error-handling/__pycache__/test_utils.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 13f3cbd3b5c7a69b3e8367fee9e555eff5e3cfde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1370 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 diff --git a/practice/food-chain/__pycache__/food_chain_test.cpython-38-pytest-6.2.4.pyc b/practice/food-chain/__pycache__/food_chain_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index b65319b445ef499fc4c1d267d129a7e105e2d12c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3732 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 diff --git a/practice/forth/__pycache__/forth_test.cpython-38-pytest-6.2.4.pyc b/practice/forth/__pycache__/forth_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 6dfcaa3a5e9e8acd9302b02fd5e88360af1337dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14192 zcmcgzOKcnG5#HrX)Wh=Ii4!N;Bz9~`mSnx0Sn}JFY^M%oTd|!mNjEFbl3s`8vi~lv zh)4?*$uU4KJ@(L`1q%1rV}Sy_6e!S3fu71s4@H3r1qu}CNqx98|If$na(B6uY?0v1 z?s7T1^ZhgP&(1%*w`b3Qgs-1wkK~VyNYYm?TT3 zL^dglZ&KM5eiJM9mD1UCsXyBjzhDE%({IGUzN{G}o6HGg*#KbG~A@a~VI@*Rmw({8q9tkRkS!l#Po^WfPEu z6z(UX57Nj}&<_L1`(O};kf&h}3?uJ{y|54Y0PKeY$Oqvd96~+>hv5kFJ@5j&hdJ=HM*ySKw`U2l=aT4(5@+1`BW=xdIp9BJ$Va z5?n_923&!w$lru(u!#IPEWtAJ6L1}FAb$&P!n?>%!gt^n@>B30WRQ=*3fx9M3U}Zx z@-bM2_mQ85dvG85I6Qz4kWavekVQTTAHm1S&%h_}UF1`s!l%fmLBkgpwWO8lHbP2j!;xzrq(~DOe-_WtTMMr zzu%;B-;5I>gWOCac@nD+YL=xld+B>st;pzBamLi4EiK)`iJ?c!D*lO{{5P zmW|0p-TKTnE0g-?I?EYWX|lq!oNeUv$voY>psI~JOjI`NmuN$+Xv{Lo1yw79TCSGX zP+*Hcs^SR+9Z#xS4|Pz@vTdsNLtVAVnCTuYx-Utt-E5&Vu|uglM|XI9N*SM4#%GlA zS!H}~^C`YI|3~D%ME*nM-$)q61~x>5R1st^ZiOJjfk1%tf@T|!^%hcYWcH(wUXY0< zwF4P47H)Sh;)dJq3UbTd;+a~K>}`zo;c3B2zs?6v12AmEEUP)Ktm2MpubWLR4>{Bt z^9*>{?_4)d2Gfrpe&ZS35I6p<{LQ}a%Qi+kavWKDAk9g4q`T4w^nKh;d?7zdekt2r zEq)|LM;`S-?5Ko}7H_GW$ZW}DjNEGL#Lco*&F77rp_gq%7`I~P6~op`mSU6@ZpKg2 z^&#PDcQwP(Ek=&W{f!OcRy|>FRP=hk{&`NX5Hj_+WwUxhV+HF;jP0RQ;yPnq8=7;& ziD#JTSw^1xhv}+;Mr7I#$@38GmQTHa;w-X8Ngk39$p_?wJS@eY)-DCX9Z~Ks4?!(H zh4w~+z>X4miHJhP<7wx+qGXnf8wioE(oCwmz&d?{w%N(UwO8 zhW%;?G!aGbGE(Fwk+2d|b#rWKtbG&;G3Dt1$h_0`_OIYVt~Y0yMrRq_q$DcXSx$3f zDOHQMQ7IZZoO~Pp(m1r?wD)<3znt|LMMM!Ub)LV=)aB7AF0O?%S{6L$t|Cm`;^#y`VF-d3U!R8cYRg5cq4C z63^f1Ysp#V42~QPcWqb8h(J!6HMFVj}yjO$UJ(EM%8a+>!-?T@p=^jyLVZZ~F8L znppxQLOR~7++D_q!eu0sL^>X(O-Kw|3joWTj&D=E3$va=Brms&MM%k~xTECE(wb4m za)-tY`(a7P0t!6|i^pOrlQ^=ZN2D`_3ao)FczmT7IXh5}r%w@L=xm^Jo}7qOY>rXM zq2I*_`h|$lq-t zS`&(30WPhc|D;!s69(kIT>|!*76$F9CbV?&n2_*^)$=~6L=@@5#uajoct*S+wahh^ zsimeAU}h!QR7F}!=cr6CnUB#}gGY#pMutrlBRZ!UfPdf^cyB7YBf-H+cPlfdxrvkF z;f}g2hPGGjae{Us@Iwazx4nbBQ{gTYp1)h*vJT-E!7s!d#YZ@z6@L}r7~c7+7nv@2 z=&r+pdE61q6PX$}6Kh?oFdhZNZRIAn6*^lb()JUoOY@ST<*ErbDy$ngd1J_Q_>1+m z!(3K9=JG7$cR&(8JtQ2{Lo!nv5KBTF7LEun)`w3M@9hK|uQyrWwD5`79y}X-I+7%F=TtCd+zJFX0MPdvS+i4~GPU)X!ROCD*Qb z+-f`WI+UhB!Lv{*0(4}d3Cu$it=yy?XgrFCFAZMoS^JX7!!NEOA_PBoKyYIR5V(Z8 zaM+Dd!V!xcO8C(Fc#2<@;TMFDPv+{KpnH+I%kWUj8xf}ZE~hjo*I z#TVi+%vc8YVwib#t!fl8)Ra~J?XMiJy+a1EKwTL4Z5K1R5Cj1AV{i|nqCIvFpq+GT_Zz~3 z7jUt0U`R?otzGYqNF>P};ItBcXYr%$AnufZXr3n;0vUE0@3IRFGm&6$`@(NYd725Z z7I&dXwcV0}m35Y?n#wwQZ7{9qn^(q^Q5tS)0vOxm{Y8PDMsN3~r-^G9nvIPlzjNq% zWxKkzq;=@q$|)4Qj??nd;uC25)X~;1&{0R5F!njr8=YWHW84uIn#a%L@xI1UM%_P~ z;pvvBk968M4~BRc>y!CBw$WhHC4%HSR%-dvd~xPBy_iUSl7(+39zA<=A#6PDQR zgy|0iQ^RSzPsPtdz6+=4pQe%f(d4thODS9Xjbag7^@@rxbzJ&<(pXp*JiV2FLSYR@ZouWu_qHK)m!V=Sgb3x8wS!gc0q6N$+bDxk6OBJU3br3DL}tWW zc(J7rJA*#QOtBdm|J(tdx8-O1vRxRGZmn6vnKL)~pko*cV~!_LT-4b!r7YgNtt^Uc zxl2MY$tTL3hOyr$TRNu0*nex-8!F~jR2uhuqyLo@Z^X58o(a-(Ziti)6(hF*9uX<< ztg?7_1$D&Yu2>S_wY|V}KrDLr-5=GneboG$Lrw2OM-O5;^b8wH-qP+EN=*H^wyO`W z+{SgtRV?IS=EDn1e3s`KKh4BlhB#1pUPALx{_njhA0(zjdAe6#QBiQCnfy^9r|n zMj@>(s>=3}O0?|Bs7IZ>LF7#$$BDc}vOwfK5$aoH7l~XVa)roMBIKcLk;oE}Wg^#!+$8cYky}JEMD7r| zN8~<{2Sh#~@*$Bdk&lRcOymjiMSp7ew?0LZmeXkYdrk#2+Pk#&&J!NrJs-Auy4`0J+mS5fvg?jqD UFp-NC;&^73mJUei*uK>N0ZJRpiU0rr diff --git a/practice/gigasecond/__pycache__/gigasecond.cpython-38.pyc b/practice/gigasecond/__pycache__/gigasecond.cpython-38.pyc deleted file mode 100644 index 0ce6c7a83ac119a044da7b2edec3f90bbc2eca75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmWIL<>g`kg2ho{X;MJ?F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%mYbiOnpaW;QUE4?Iq8QMrxq3KC+a07rsU^k>bs;CXP4v` z=%-es7A0pE=js;}B_@|-Ca3DBXQn3>rzYp;r64i&3My|gC#Ix;Oe_Yuk%6&@8A$qR cLTH3l5Ee+uEe@O9{FKt1R6CHa&p^xo0H#SY4gdfE diff --git a/practice/gigasecond/__pycache__/gigasecond_test.cpython-38-pytest-6.2.4.pyc b/practice/gigasecond/__pycache__/gigasecond_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 11c1d163ddb9bb9867194a4310121a7b4a5507c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1974 zcmb_d&2G~`5Z<-ppZpZ6Qc4TrAF1?`RBCS^R8dfG5fbgimzC??v)o+M5y%sldc~s z6Ko3M9nh?lh_H1))G1hg*=TIRzmkSu-}ZUjmW_KNd7Q?bhIl4aAd{%kQGSrhKs0s+ zz=l+o0?2x&m)$^xA;TXUf+ z2Tp-cyssfnt4;Y1`LiLYdV}~%pTnXO{319wnlg*y*ckKX@sO9n=SV}cxYf6HODaGcBjuycBN%=4ItebrGQWj3 z3{qV}F~FNI;_}$?x%wO4J(=!8_4JsEfr9v{P}ku70q|MuAj^LSKI)>m zWfjJvn0G_eYm8yHEOyj1hI$r-ZnalXyN=>l&1(${Utvqe?vWrim%3K*({}hOxZ7PB zrm~%6wY5%<4OR=R(?iVlqFF<$tShmnWGb@qz?3=9$}V%M>kHWoOWy ib+^ylO)#&+r%1;zF6hj?T|mEM4I(Eqq()t%X8i#9BjJbu diff --git a/practice/go-counting/__pycache__/go_counting.cpython-38.pyc b/practice/go-counting/__pycache__/go_counting.cpython-38.pyc deleted file mode 100644 index dbfb7204a40b4ff60018ef620c413c94d74783c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4356 zcmbVQ%WvGq9iHK1m%El7#c-Xd2?Ey0!&}HJ!^t5v3^%r%CQe!z@FNDcbypN;c9#}K zu4cHBR^VPL1I?cyAN?=%+Cy(W^~6(wUg~>KzO>(OxKGIrjB>%@a2~(;y}oaT`{?Z1 zI>Ythe?IE`?H$JcMKAN0jhC-*>rYV#)?$LUxUgE5uv@lpTFy62xT5lmiOP}Haz*t4 zYk0x8E@SnFy-53E9B94jZ{AJ=B{o-mGzqDrZX$)BrGAhE@$gXknN%vuQWZ(nG^`xKfCsIKcM9#_SMthP(g=wlplmr@iSdfrwXgxfzgZ{yy^iRFUC zmplDz2rt4HT83GK1z)%3qmA!3?mgaETouy?2_jYosPtR>x9g@)$)JaUQ*KcK+ zina!sES+G?g4kPrwx3=R(T+?sln7!9>da=9?rV&C2>&F5oh|ZA$EQY00P@;wXqd*Q zhoW(?lbjq~|6Q3RCLHZ{ltfv(eOb%6vswylV9mQ|jec0_}?H)OQk0xqNF>Q;+nj8dS#>V1RTRR%KX28v>+P*HqyxzGhL0` zw}sTLeqW_Q*rO0qc5F`d-W*eaKhTI=;CJFQ6#y<_IPQWyvfd6sITD1@&d`@h7^j-3 zW{ww#Cl>f4Lh2ENkRb~T!kFojKrmvDWz#*R>S>IjV=iq$bfpeNXh<OCN4;s{t|^`pk@YY=AdQ}^fT6S zgd`_CTet=Shk897B-y;Glui=Cn6S`1IoInxu3M@L z+*6IN5-gYFNN2y-nR?RrDIPGhLb73UQQgM9j$2Rv+9M6R zTnn08fk=~R?T*yjS=wKd2U3NR-dXFb0C5TBS~tBCl9zxx)Z3GKvp+1n3E_MOnYx04 z@d~f=!*j;H%}IAiCQdG@Pfh*;F9Jq6XxirK1(?gWS>jlXv-BEztZ`2hJ$xGmQ_lmY zXt9Q+&fuYFM{n3_36Fvw6ntoGEQ@p0SRGT>Dqgg4KR-NMsyOah(2!))ZGy6iN|%jn z!SApqpN^cI9aE5;_gHQ{x0ILL$I!og?^w?{XS?2btUDfS5P}?bDG9){{#e+{XHUqcXALxuq{;NWUZgC#2?6E4NnQi4~UF+qSxz*_m_1 zI@SZ0xg%2_In*+8;T@}Eb@`~0Rr1OaPE#2FkGyhRea`-1jjAIrcaFWhntP>BjBF3G zt1E0&%WIHtslVjz;+W$a&3JAhDi=rfyq-JTRdo!hsGBGp?|zrpa?ujCHfKFYxKSFn>51ct71=95o$wUuFZ9%<&Q}a2bTO>T5}B;BYeN$8y!E z)`^tPd>Km|RWg4|(w0gp8;hqhNyPkR_Us_@10{o|@882=6it^NUt0Aq-KOFaS|9f0 z8wKEWmcqB?dI2d$0%peroSW6;APJS;C}*nbXV^?;8(nic;qd(3WDn;ZF(+JAk;;uT zC9>*21o1$AtyHQEEfx-)EDIYd71i-UQPnV^u={Dhumd5~MZBt?l|qPWW_T=Iv@o=14<=QUBd4i zeje^+Q&PW&{t2F^QbJ;p$u(g!;#{4h$gsT}vCJ~1O=V<{c*g(CIzYFuo_U$`BYWx| zf$@%j_K^kLTEHz~=^(cVwV^yd^)Itu0N$yLOV zA#R8mIME+jsLyk>rIt%3{sBAa?((ih$A<>rpp%0NlCCuSsDXoeA0iueVKuKRA64}W z6fbzW4bk~QnQgUpqbn16&{sE~qD|8_>|lRh!hN0{eq3%clcdDKuz4d+!ywi-o70H~ zmFfa!Hfn`yJ}1=*-f%#pPeh}L`UDN-PEU|jA5ifzit)x+@T^tY3qpLA7JRQ|Bb0@^ z-;+v~IHSW!sqmROW&ViPa(6s)k$(tmdHj9c=lS8grxf3SayaWG_&{&Bi+a1glZru1 z^`&-ucM!zmo@%=-(y-lD_-BC`rYTv2lvPbCjPqs%xl!T214a(k#45nE>$#ro)xA$l p&jzf#M#CCZ{E`Zaj`}$jH1%~d3-3m$;!R?LGBO`HpbGq~{{hwtkgos$ diff --git a/practice/go-counting/__pycache__/go_counting_test.cpython-38-pytest-6.2.4.pyc b/practice/go-counting/__pycache__/go_counting_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index fb56dba8a8de71b3c631191f80f340323411ce9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4449 zcmd5r5FWjDwGTVNaT1%S0-=a0;!Tk_TtW!zn2<_pfjls!qH2(LCcAQWrDdeW zkFrnBmEz7RDNg=Nx^nVg@CCYOw41e8ayAr)NTr^hhgzd=zV7LHJT+A&aQ)?;d-CTr zA%A0K^fIAx3!dnE5R5RbLtIUkde_j2M!KeJX{x8-7NAG(6uY)-cS~-mTXxIcid)gh z9l{J|J|oQJh4t#5;Z8B_Az82vz$$4hn2A*nJ;4%d_1n9TR-ktO>*afi+4!!p(!?R7 zmkyO%@I(v*m(y`|rZN2)aSinu*JKteK;2?RW?P@#Py2c7Pm*4fD^<90}*dfpL9X&Q)=o$gt+%a&5tkRY(jKEi`jYG?E z>W%|N9qvP`?yNd>sI9_{eXEWma3%*R_Vq;DOth_iUA9Rv(5ukDpbIQy`+_A9#iSH- zA^bQLTS>)>A}->UU;AE1;4dZ9s^uY9jr(R|M!fSRvDR>@Tq}yhfQuOzx=+L$6o+?f zkHJP%^A^`U76yLpHjkdhVXwwFxoG-Px7HJ0GxnRj)(S5-Q$Rtd1D(cz?qY8%xr7Q` z>v+wl&?(?U(3Q@Wh5=pLT%vLwr{Tkq4T5Mha96eMFOII&;-r@H7qt%7|LdZ*HC$r3 zpyh@rf+c~o6(tntd!hp30GH#y!0HqTSgUtXe;0MNRuX7&23zH@S=7#=KHhBQ35K|GGwEj&qfs}BoPZTP>hgo2vcH2 zJkDg`Wr>wXWq_bwz-SQ0)XSmahhvD{$UAjgb2mU)kw^EtH+ZP-)!<;?1w>O zdZHEW8v>nMoClE@5H^p;h?-m>UwxXc@ut_0INhXvMB^}|op6Ib3B}7GdkG9hGEtBr zb`IqB&8$_L+~ga)PLkqsuS6G6yXi-$T}1IIieoYN%E@@P{Z{)ZpfxaZ9MG>`3(#?! zZ!V&W^yug^K2L&ZHbb{^8G1bf(1{qDZ}LsY^YZK9na$AQ&yTa|%M3s#V(1Ar#}LIW zTgK-5pkQonX)0ZQuDu`-kJBW1p2ViwxzZMEtfc@^SRcu?jK-nn2uuzaiYlB|2Kl4U zBel=Vgu#I!Dx*TTAB~*ibL=|i=^v{+AmAgr8Ai=EryK3C!&Opx8{SOayR6v|Eg@cB z%W`kXpieY3h8Rv#BK80jxtnP%JsUGTg0u&_6&^NBzzB{cN7@j{!bnz7Xl$EKeN{mx z-hz)n)`UroIya=cJWnWG6-qL1l6V?8Rz^?!gOL&8hBk!X;P-N8?rvInI=_A z@kpq8#M?O8_fUL*;sT1#P%NUrT}@m;aSg>13JlC61dvp~bBe$t^C@^DOjT^nE~IzS z9^P^c&TOskci`+DCDmKKEjp~t)7}>1v#2s9fM-$g4LHz3N;GUrii5T?ye#4LL}K>? xKgNn%899EcWLHvHk{NlN*pFb?vIi$yoO0H`B=!x3*G+survEmXA+|ne{|oWB4~GB% diff --git a/practice/grade-school/__pycache__/grade_school.cpython-38.pyc b/practice/grade-school/__pycache__/grade_school.cpython-38.pyc deleted file mode 100644 index 9741294dc1386a574df1e7aa71a1c2c0704aa1cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 912 zcmbtTy-veG48Hs}v?)j(c!v%&3nN06K(KYGx@0+}@c|KSQhccdtnemGyizvABd{@H zUm98pf&oYVJIDTPUoz=-+k)sR-oJPu{mRZJIphq9b&tfk00Gt`@q--;u*ahBq;&p; zZ1RT0`jCVYu>~Tw!2qN( zs`3o@x^MJ3)=2=QE|;M4l3#9cdn??H@ZTF+LnAM38_UN+mkNUonC=Ruj-+O23Nx|& z+idy_)dBGQdVs#=LIZh zY==_bER$Is!4?%j{xgtUH9cd<*5@ZyTYO*Ge3_aP0xNLp$DEJ)meD^YR>4sXf6Nu$ Gh{Xr?R;BC! diff --git a/practice/grade-school/__pycache__/grade_school_test.cpython-38-pytest-6.2.4.pyc b/practice/grade-school/__pycache__/grade_school_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 8c16fdd0cbf9a8fed1d010bcc8d338b34c6759df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6945 zcmb`M-E-SS5Wpo_vJ}Tj+w_aluk^caX;LWA7HCO7XrTp9q3H~xVbG}Fi=)<-!bzDn zp7sfNVFq4!<)Iyhhs-eiL3-sW{{m0!o-9Xlbjnxl@t#i_-Fbhvx4XA~G&WXK@b#y? zZ|>8Bit;aYvM(JwGx!N_qW}fej$*5#)w&f;QI)Q48)|Z=YFF`&)-k)5ZK=v#1uCHb zq=3$R z4hP_EYf=~T-fBF$V6;8WT zk6j3SZ~8V1pGLvLG<(i?%L}{H3*2o*UW-k)>1SU^21+_k(s3fxVrpS2zCd4`WNOC? z9oAilmYiqv%y<0238O_|endB100v{EVikp=R#jc=T^r&uwW-nM6sK^8gyIYJiAqKS zm0yXU-c|)w4XIXgRE=hA-0-@Ltq|H}E!KUv%VI+ym|fOW;sB{uoE9xMgkqeO5_l6q z+b5n7+TeZ1O`q9~*Fy^h0T{K0y~qC2o)? zQs{(GXn0YbC~%^A);EF!_;6N3t#_$V!}3w&DmQWbqNNoJt)~kudPdrVD!tnk$Jbg@In^97j@$8v-rrB{*- zGfAvyH4VCHB`5sd_6e6-F2^jV#6)l8 z9ABR$gH2HU2*+PTv8MIDE~J<`$F0mHhj_glqS23$#vx2p~P37$@wGLt!6j}>E*1QVlFSjN8<8Ik&;SlkfNizTV|@87+(%^oy;(g&m1^A9aLF9 z)3BOx<(}7F-QltEfZ-uaBsj5t!}r}4I?Bm0Ud&>|QxHbhFyMF^a~>}xDd8YXOmf0G z;y08NYQ32uSr=f(}z%!LD#fFZtK~x53jJRS440(0fb2+Ny@HcQ?c~o>5 z%kSNw5Y+X}fLc4~8cY<^#KHVG{8EzR<*h5*Gt*OuKxpN9Se;1hP~00Gcud^VSh27W zvI!$?Qxc5p!1L{V}619QzR%y7G`W?{C0WAWAcT_Wjhk%a(&Ex=#-CU zycXkgoGsjgBAYYP@n&3|SSRP%(tK-{jgGKl*(UKzvTWIU3aGEuOhrX&3TXYZN^%I^ zi4PVYSCSpwrc`CM;Ni_>${j;H`ez(zwdkQr_VOkMlxzF#KwDu@gSv<4Nsb=kUKI^Z z1nWK}Q6B*-M+w7pepeTnmjJo8q_BOOZj`voUx?;#$kw+(H62(^byF!&vAdhoH*^GM#)M;WQ1=Wy)8cJIJ zD8hpWjjJ2SGc=+cij8xXgpRDmPyt))!~U-9_b|iD)Gfit*-kl@IoNgN_^n8XnhCrF$maf-wl67P_hCUKDj)qVIS z67Q4vfW(I+u8^RA5;B60>zoP#q;N>dhNW6ne4CbKjo`c1|5g*dG0PAw-VskVMq}&o zqKD;EKaA@$3ro(RcfeU#BI;Age;r=nPjU8)dl8FA2A5(py;j4A#Ui;pwibOaqK;i} ti*TL%cac=`ty#Qr%f){}=x1kC5t@-cvGqv;_&QmOsA*fugkouR<9|^k%SiwL diff --git a/practice/grains/__pycache__/grains.cpython-38.pyc b/practice/grains/__pycache__/grains.cpython-38.pyc deleted file mode 100644 index 50a18d0a4f24ed4ed84fd0b725a7b3229e517df7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352 zcmZWkJ&VFX5S@)l2nTj@{~?WA*&N3qXl)}lcI)mcLG$5E0^0jeto%!9?_XFs6Vwab zgL(62mwEekH5`5bGqQE NymZaM|GX0=;RC-}JF@@) diff --git a/practice/grains/__pycache__/grains_test.cpython-38-pytest-6.2.4.pyc b/practice/grains/__pycache__/grains_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 8f8e795c1d015eda4d9c9acb949ecf65789642ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2855 zcmcguPjA~c6elHFmj9(`+9u70q27x9@ecNqxIPVQhOX#N2G+IPpbH_JjHgVNJ(6yl zqQeHb_kD#GJNYZ|x|6>`FWq}m?AUJH#Ktg6d=yEM{Jr=1e&pj)DNi8%?Qb8^EFu43 zWi~lbIfSgf1;GiY5%FnKT3y>Blyn_GL(?ADccI6MvR%*jx;Z~b$pgY|?z|-25$mZQAWOPplQ5&0QlLeJS$clpy$_rd=tt%zsk3uEbwdmI+R6zgKtAw;yVECrpZ5$ zK^Ut?Lg_YzWhV*0(H!?6tLq?MkiUqgoDLzsvd{=H-fE8V$B|_Ufl@;1`=DSXQIQcf zjuO$)h)6X0>$|nb@Pn!a)mFfJaaj9Cs9$uiUlY%SY=^2_>&u|6!?vh(5=f^7(*Uj7 zKQTM_!O}j~i&<(*wzmPZD_oJ#=O3MEQ(f}=dRpTA(naB+K#fvSfUjlH_OC+c<)Q6g z8k#kAfZZJ1u*eu)wKBc~^y}sE9jt{zOxd(`dawLh%Y36yvu$!m+Ym+ zdouuUU%dAk>me+|DiOLFll2ZiFTr`R{{ak~IQn9o2W#%cLs%usfS4q2b*zng8Ae|o zYh&K)7^gYN32h;Zr?mBo{<-lR)j+00O39Dp4*8BeBtK!Vt(_P2I5VU=p*3v5`mxLD zF7W$Iq)DW@*SAvMDR&1-ms=tp-ldVAR37KQubs* zj1o>BVjO+a7bYj3wMActz1TQ`?5L3?5xud6l#3*jI`@?IzF?tZVf-YBLVg=YC=4({ zi*yT~=Wn_AoKbUI@xL^i1!l9SW^b^7tS%K zJVKkE>|0PtLu3foovGKXW)jD5eovn(aMCB+Rw4_Xdj!@KZKTix87ojju;h-z;z73s zdi9QGPHyaN^#aN7pl+u}_uWOUR-CI@*)SesanKcvnLK0N9v?*bU1SVzC25Z=q6T

mLRKb5FYjHxySY3N&cx6jn^84 zk%o(wDIWGu*tE9G`X^|)YDyVE1XU@X%1{G0Oq)!0(w2w8iJ=2&yg?jltQfbGT$oaJ lK@S=45wzb6;KG$$49)>>yf0G&eT9Ubgq26Oh-YoO{{m;zqznK6 diff --git a/practice/grep/__pycache__/grep.cpython-38.pyc b/practice/grep/__pycache__/grep.cpython-38.pyc deleted file mode 100644 index ad59ec2fd6c97d94fbdfcca31c5dc9e3a19ff9b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmYjLJr9B~6f6R2jI90#9O&j`jET-HhJ~%t2WjM^>BB^K|A~`-iPfLr=Hx5H=p}de zuD!lA34$3T+|xzAB!AlQj}e6}5$7b5N$18=CPxPrx|vHyU)b3p?uh7-NJbqeeo(QS zXwkM{>dwzgQ6QNr0gdhV@?P--!5|mWQOKrNd=GeP8_nSYCR12(ZA8|p40vHc_Y&!A j=hAGsH<$4VehI=guDe=ASFO>=8Jey& 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 diff --git a/practice/hamming/__pycache__/hamming_test.cpython-38-pytest-6.2.4.pyc b/practice/hamming/__pycache__/hamming_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 7614f108a407d0dcb7d9cfd3fa056da211feea5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2652 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 diff --git a/practice/hexadecimal/__pycache__/hexadecimal.cpython-38.pyc b/practice/hexadecimal/__pycache__/hexadecimal.cpython-38.pyc deleted file mode 100644 index 0d894dc30c715a4db98f49cf2c44f06ea849b9ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmWIL<>g`kg2ho{Y4Sk&F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%m62KzUtCg@nU`J!QUoS`x#))$rxq3KC+a07rsU^k>bs;C zXP4v`=%-es7A0pE=js;}B_@|-Ca3BH^(UsJCTHd*<{-263My~0faE}i7K5D1z*xi# fB>glYG{QCr3#8;0hfQvNN@-529Z1(_AZ7pns%A9= diff --git a/practice/hexadecimal/__pycache__/hexadecimal_test.cpython-38-pytest-6.2.4.pyc b/practice/hexadecimal/__pycache__/hexadecimal_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index affe7877b153431189b0f491192ba7c79565b8c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2465 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 EA8nPvI{*Lx diff --git a/practice/isbn-verifier/__pycache__/isbn_verifier.cpython-38.pyc b/practice/isbn-verifier/__pycache__/isbn_verifier.cpython-38.pyc deleted file mode 100644 index b6135f3a1c46c5875000ce7004a3a9e603cda112..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmWIL<>g`kg2ho{X|h22F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%l3ARTR|Jv<6Tdw4LyJ?3iuDuqk`hz$^D^~aQj4=o@(c7+ zD^iP+GmCTe3yKnxOEQyF^+7sy%TkLn(=tk&Jq@N~)M%W5rft1|hu*uC&Da}c>1L^t<#0&rq*)_}n diff --git a/practice/isbn-verifier/__pycache__/isbn_verifier_test.cpython-38-pytest-6.2.4.pyc b/practice/isbn-verifier/__pycache__/isbn_verifier_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index e8c3563b027e92e5c55e44c8e34505514be9f4fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4663 zcmb`LUsKyg5WpoHjBIcqKuAbJlBOYrNo{P5W0NTNbLnP5isBP=E${Q>*DxCtAsbrfaQ{+Nd6!N!3z#Cea*g88t)KzSkfLBcC)F;i+HJ zACt8V=s#)8qyL~KZF^bw4a;Tk&87u)I-+g~Y;5A+{R;(`PplmoM?}&Z78D`(5*N&_5#89|`I~w36ID$(C~E^=fXlST0m^)!oyCZXuX8A8~o};8YU^Hvj!`8yyEUV&uOplBQENe+gfQ0v+h}S zzG9(+x%XWUWsCJ%%tMFs?PGtEc7jo1bbXfmrRQq;$%Bi8`3o0+2IBSCg1SkhNDyEk zFf=uPK|ap1Wz0zLSiQmP?-*EzmN$i$^gPXndphXWEBjr^?d=Zsd+9ha)KLgRFc8nimnH@U^5-Ivz(t!k83iTrkILp!6E1&5q_2qK$B(AuYwE zT0482D!K0>s4C}T>zq$^5Nb$iJ09}{H$4u_blC|P&b$KnLpWeB>V`KOlQqa3JH>Lf znA?kBEni^m4V)E8dRHNReHrO+Ca=V~x>qh#a#8tWQF0zpd^&dXxSQ2*;Lg2z_Z6PDRrOOe+Uh6a|Bs{jyS;xg0^1u`~8{X+d+loczYY|}*RJ**@_KszUR1|Lq zRJ;9)W4TjH7fWkv<)@X^sF~|_kSFan=6RgG)-e@!XH@r@;^LF=4zem*SqKF3#qU&P*2u;0YS4!0eX8_SWka%J^trCN>PE}Rd}v&_Da!CH50&$MhR zvHG=!T=RCJgYun3nzQLGnwm4&chOw3dohI#1F!pQ5YzAipeb*49a%rSnpT{ zZg`kg2ho{X^KGlF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIt+=EpGcUaeqyS9(ve6GMPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitC$EY43aO3a1PdIgoYxH605p~4^|i$RWLU@QVz>!%5! b5q3dX%s{zY95%W6DWy57b|77!ftUdRTWd35 diff --git a/practice/isogram/__pycache__/isogram_test.cpython-38-pytest-6.2.4.pyc b/practice/isogram/__pycache__/isogram_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 2b0cff6fcb5f9fd8a6c7b65e398d64b064a893c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3643 zcmbuCTW{Mo6vriB700=!Nwc+Ev8~vG&Gv%rp#!!dL9-1V&|pB*7rzjU4sElgE+gqV zGWym6`x+bel&_@MJ?$&(X@`=Xs8uRwstoanl1To4hezb`)0LH$g~wn0ox$%-%lg|? zvPTUohj^-EEWiR=SbaOO6|Y*cY|E?l>vsC2(Qn|BifDRH-?6QqET}^5l?64{c((Mi z+HZmV#M-a_gFRU%`*z&oif|PSCG}i$FMCw5a)_sTfdxy(>{q~s$}6j1P5bTFpbibJ z*P#gx+6F8^3vCmYp^eso6<9^P1Z%L4wgnroiFO&bU>j{4Zov-P71)K_Xjfqm-b1?v z@53Fm>u?wKeh@D|N=2SBrCl5K%nx&I9P|)RwT;CK>kmuYV82A6e^!iJu!HJJY@J?I zVuvclq<*BNfxEEdnqp#bVaX+|{(IDWiceLKcF!mTKJOhf^;`#GkDW8=a^>|xNnOod z)|>fkZiz-+-7tzb%mrays3W4Zmgokr910{O=`lurgS@Q5BU!h9gXAi1O> z9MLnTcQS0hlwd3Dyd3z38lM4^9@W86MB#|L1<`mvae@f^q4`uK3j=B9j`>5u)o8vN z?PVwra+Hf&m&0(5W-cz6!h<)a@Ve+D+$SDCHvx&?)}0K=cR7-)SX|swNh%XKM;JH- zR7d}tDqTF1wPV1g(jR6hAHNgjn?0AJo^I*U*gI3MWRuP_8sb7MqJp68Bn}uwVSry9 zuJBaM1JUCyxtb(=W5oQAGO*v|U~k$>Ik4^5!BVn?Q~R2xE1YX%ZV(9E8PH=SrM;h_ z%}?#S^jyvZZN<+!5u>sb2q>7-kCQp&Y2uLX7a87^?XwJ9FE^9LZOf_O{lViRy7%+g zAKrW7jwV#<>GL2Q6o7n^fOr%b8HdED9>WcRYK%}q{dt^zo+0@%N3x)CDU`lLU6=Vf zkOkqF?${Z>UuGI+l{8zN#{mTEX5{C0?8WWN5j3bj3ZMag-PwCN%Z9{Q z?waDZDNNdsX1*q)zsiAS6{~GLmD!FR+o`_om%O>Z96M)YE;RR5+&&B=a#`CWVPyQ; zP5(;p!0+N7Be`br(&eqVIltG!#>q5L89QU2Yg3U%N%9vYc22SW5YvQY-0P&r&bO(z RzBdWJa*Td!({d{9`hU_)&*uOD diff --git a/practice/killer-sudoku-helper/__pycache__/killer_sudoku_helper.cpython-38.pyc b/practice/killer-sudoku-helper/__pycache__/killer_sudoku_helper.cpython-38.pyc deleted file mode 100644 index dc46e45bd559b45e46d9a8b9228e3d7ad59603c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 299 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 UQx&l@Oj4f5V&qzBT)}?lF9Eq=IsgCw diff --git a/practice/knapsack/__pycache__/knapsack_test.cpython-38-pytest-6.2.4.pyc b/practice/knapsack/__pycache__/knapsack_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 1a4b013b2baeff264fffbf57cf81b6a0a6d7ded2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2542 zcmcImO=u)V6t1rM>zT|X*=&9`tGj9xF`^k(aP=T-FsmZs;Lol?AGYXBbtb);?wPIb z$tJd)k8+PaegaH}T-1!IOAs1W`c|74dzqGs8IJNIck0fA77nu2=QG zdiAQW)@l_&*KKEU>x-%o-@q8Y@?@;j6I~|ILR)R&SS)3blfn`~-YHmFOVKG(i)@zy z+p#V2ywEwFKNLFe6|a|X<(!JPUK6W@lst*Xs+H6Nch3)cf!cN3J+Fz^! zyeMv3L&HHY(6fON7YW`JABfn}R!iKHT7D=IB>BiSQcbM}-`|nRlp95!iJ!gEbK3?p zzGEf%$ZK!i5vEM$ZyWWi^g&d2*EU_<3H|zIFWQMa-MY8unWi5F^{#Q7vETISJI8Yy zC@Q8|u66g58Wa_FlplLRR3pC;#uC=S+2MfJ{`T2ecqQt=;hiU?AD)(=@<_HU3bQZ> zv)D+H7zXQ~X0bZOo1Wj=j*|kf7c*c$nSo=DHUo4_mUu3m(BnC)xYJSFp1Zq0OO5@> zKQKP|@eX5QOpyl;;}R*OVf4cplNMzP!Yqu0X(;PO3N}-YWg6N7!Q{{$=FqnM-7L09 zHQg}m#A?%1E#rB5Uv2KIjH}b+C^|zRth^;HDQ)Zc{$2hlEAr=qC&oEAk>~$`mf~Rb zOAV&QoT7=R^8|)zc?{;uFefhi>Pfia{8=GC|4z-t|4dC*NJh6c@{tqfA}K=&W9i(H z)F>g4MJgegZ9}&5lqlr^Bb8%D<`6xT!8_w2GSeaed&;10qz<%+1T8Q@-kuwD+n(Av z-trfy4_BR$Jo$sNq%40qSQ)2c)WujrV3r*A>!b{Y&D$My6Z-*mlO@$nmXazb-dCw| zLQYdf9g;1ZXqg$%GTTVE$$Pp?;9n!+Gj8sO`7W91qtHG>12cz>l|Bc^0c-+JGXIe5 z$)r`8v?sIj_cV2iK=%k&{hjqIaaNN*9W0M?cI;t{Dol&1dWVz~Q$?~u(4W6Y^6ds z@RUj_N(CL=qphWqs!}+XvlfG6!{GEWT+mRI4R6{9p*;h@fjtC#08(BG91#(=6V>h< z-7|Dg+j9nOt5b=++4I}6A4W-ay-UTvZ!N3tJ`#5=`$zCQ;hOPo8al(1^59ic>c6W{ zXU=oiBz7onMc87tm=m_F7XAW$ CYer@O diff --git a/practice/largest-series-product/__pycache__/largest_series_product.cpython-38.pyc b/practice/largest-series-product/__pycache__/largest_series_product.cpython-38.pyc deleted file mode 100644 index 3b03b12dfbbc32c99681d6ea07f45dc31f892999..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297 zcmYjLI|{-;5Z!zb5rds~2x#^KB7)XwBu$zScSl)FOxTH_*51U*E2Z@ac2>^jgATm; zyf?qd^G1y95l{CsiZ4_An@z=vfMar!N$bvHChaZr9bvTIOl}d@1a!$sMm<*eWWF5_ z5VQiUT~s&FrmbKoij7v@ZrM3tcT+t z{Tmy9z3h4aqKl(P2N!qnFYcpop7V!Z->>V|sNM2>Z`A2`{ibEAKZTaoaC+41_k8bX zo@=|#=bq~%Q;%kzwEMHp|HxbE?!%JzV8yR45953@DavS)kKOj598km2qlJq*_!o~+ zBz4FAmh)ZfbFbfSjQ2aP>!xtsbP7bkoPM*q`K!j+kCHr1ir+LIe+=&j zKAbx|=)8;nJ^YIsC?0!%_e!69e$sO7FIq$u>~$XWTf*)W!2PQz_FC0kTog%Oe(>k* zc$ibeo?mr}WVo^C4pjeAn*JC%%(zW|Z@uzY;SxY`k@lW*HY!=^!*Vr}W+bIf{IWiXIh2W>d`Jta`upZ2(+^ z{6yg6jYveFrsY7KRg@#1$($43;h`#28Ic)WJ3ZY)Tfg0 z_W4M7?FihTyd>NU0?R4k_S-1Z|6sJ84(WVxl_$rQhVK6PoeaXPe3nFU*OOt21_@kE(tUfuguO9*Wk^}aX9xe#KFG9(KkcWYm zTuK%QWw{kXb8drBDG}&Ug-S@RCABCk)jo~q^q+q`i!JtaWN#+rX|r1#t*4s@liT-* zA(|*XzvK7(*4Mkgc=1R-r|pY!(_uL3c`ThCdPKhf;(I4TjEBQ|ai*ndFx++xz;})S zy#MV0o^0?KJYsGJ|61()5+{w=`NIF(;$Qr-7HUr*cz*9`@3-EE-XEyFU3MP(kGfC% z(kC%Qcj)@jlxr_RDLxfQ-3L`0%lJMm;58v%{(!W{@@Ts#m)Dc!Vgv`1e7W4h&7#cH zY;(C0Bzx1DE$tBW@PCx4TQ?^E%dj(YbXFB=5OXj1MRauP#VW#gMb9>nE{u z??owk4%@Ggoc&TU|g)PhMa!cb`zND&Aq zJ;*(77)Pr@Wdf^0V>CBP8f^lu1BR^*=K`8QS*^6yjE6F`+DOT*7Dh|KjA0sDf(xw} zEI~_fZM2XkkW4dN1Xc>HLFg2(2q+H86vRdt1jYt|GO((Y7W9WuK?mGGgEGlrjO_AI zz?$S-20{pHpihL91`il6wZvVR;z}4{SfFqiSS1HSNEs%zu`CoefDe#2z@!ulL%@e` z(r~89T|5}tfZ@#$5QP#U`ZZ9)@WF;FkEZA>lU6$`F0)5E2W@ioqD%0f$@& z20^7@gV|6MH(*DDUoZghLK}tt0T2CY_ylZBk@z-1fO{ZIDGtMeLzcmW3~XpPd=3?3xAcc2m-`U{jkt}iG+Y2F0q6 z9AiL_a3ELV8;uAEX$CUE0pTaNEJBN5f*b}%5egvC7;bnMiG?77ZXI$M5dpSW=n!ZC z%?Q{wh&%&pctT@f2!<5FSOMSrv>_eRhSXy##q~49>GgWLO17a}j_7UrI&rWVcKjCo zzHW6|U+u1*JzqU<=E2I9sux9BJW8UdnvJ3nzNroAd_IckgH6+t&!f8>U;4cK3Kg`Y z&#zHITi*O86|@=5Z&C3!6)RM{OT`bVSf%3G+Fzg1hm@QsAnOI~v3h>5edIS)pZ9P~ z^``45SLUkT`gS@j)2yiG?@V^0r&mkSWQV9)ZDbt8*=nAAnx`f7+S6Or^x?f(yj(LI z=T&bzOG~=w-xwZzTs;1%U_d`AJs@H4HcmE4| CV`MD= diff --git a/practice/leap/__pycache__/leap.cpython-38.pyc b/practice/leap/__pycache__/leap.cpython-38.pyc deleted file mode 100644 index 0c9684fcf10f4afaf3c2dfdc2eb6cf816099faa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247 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 diff --git a/practice/ledger/__pycache__/ledger_test.cpython-38-pytest-6.2.4.pyc b/practice/ledger/__pycache__/ledger_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 6bbaa10083e7a01fc0aeeec80dd3161572c27b33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4613 zcmchbPjk~o6u|Y*wrnRM1OlYcsoJI#w~7D6BvWQ+n<=3%1C!1)q%-wpN6~H^fhD;s z39!exG#q;ECn!u$%=9yKdh4-w9qFa{3K<}MZ)H2ii5)^oW$W!q-d(MJ@9o?7ygE9X zk>L2Xa%TPavy${TUi2OsTr9%r-vmJ=D%YfnEK0>u6-kyHt&))AUy_w1{G!xSj$YB7 zbR{iIHzcZ3?U6(^mb{zUQY%?1uSmJXHjE}M=agt{-Q$iK5atHlW_~ncab^ZgTsJIi z)q5y#u?VNX0fLE{R1_*#RH{(*kyO#BMiWpbXp*L&Oj4bup-j;X%|fZu5jqNGnvT&E zP-f^jJqcx&PS8_Oj?mL|63S6}hMt9TjGlwpPDPp9j8+-H!~DSh>69c{GCaR?B%qRn z^BSCf5d@VtWvXl{RcTYD>SK8Ms{BOW)LPPGIZ#@1OKGWFYD;^fAUMRa9I2}-OHqQk zWOXHyGdl}Q0Ktflma)Wqi`(_U_T2WpPSG;1ZJ2Jg(=?|>+Fj3fqpa!sj0e|$2+bNt zYEKi9=Cj&*q+229%(WU(vgTQ4jYX*rd!0S3Gb>>9sl-o0pPerYt1yaRF!O6B^<29E z6S)_7^#XgyxMllJq0UV!uq{@o2|(?F1OO^uZ$u}tLYPwz8YFHpj*w7DvKD_7WmnnN z63q*HjPv`t4F-M{hUx$hgtgJcmRgkoee$tPQ&g`iZTL!{9sobR%u$0JRk)LxE0*SG zizWE(WWNd1x)A??m*@Brd=kYO6kVnq z+>g{0VCOnudpaKs)`-Cx{2Y#T5XVWu5xfeu17foewL#*zr8<=9 zzG$Mi>+zy}A11~>L@|v*Y;_-DO>A`+p(YIO2!z1cUWd_nVQ{@KDmFY}O(8sX@S45Y zZ-EC7a=hF`6!t2&?LYtOgk8w(NM>bB8(`4onalG-%CFAU9|(BtTD(`82CiXc3>Z>LzEqC4TXC1V5mob%>RHLgWn!=#qj8r2%=mlb%V0Q zqFvZ(=F0iY^Fub8MSb4%Y&vL=~rV`U!b4$F^kou2}xJRlm7ykX-DV) diff --git a/practice/linked-list/__pycache__/linked_list.cpython-38.pyc b/practice/linked-list/__pycache__/linked_list.cpython-38.pyc deleted file mode 100644 index 0ad822341cebca5a2637945c20d1cd415592cc1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 689 zcmZWmu};G<5VaE*qNrs7b!N>#^8*M~q7qA$rRtK!3bu=^rb)1y3Rvk6@C{7;rL6n~ z6L&62TR7=1_v}00yO;T35E8J@bh!9{?-zn&^8t*(?KOl4B8jA1@OLjoPYHI<~nKWONw0$OG>E{!H!xnr{MSC7J(!)vZKk4M66*}<%_1b z$?{sIp{<2bO6uY%4JxBHx~#3i!7hAH;<;7E#@XmGlVzdfiL%ReS;gu_8KLbeu1qG@ zTBtbJ#Zt+eT-)_;&M_ZVuT8+YF7%pn4+&u)^lgB=N9|4ICCQFqWs$8E=S|4@s+4t( zd7ty=I?MMr=DcNh;AzhA3|B^X69Ve+KT&b|7>lkTbfQw}Z3#%~gQTnpr*4-i&=>e% zYwds&T@AkIs6^DD*nepuU-WkI%fsv4`iTinJKZmETlL`rlXfe_N#wch41%M1T~`y_ M?$x{N1i9$_0IF_+1ONa4 diff --git a/practice/linked-list/__pycache__/linked_list_test.cpython-38-pytest-6.2.4.pyc b/practice/linked-list/__pycache__/linked_list_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 328516865f8d5be8b5718c96a6ada85bc89aba51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8432 zcmc&(&2!t<5eEo=+b*{y|9_2wgoA7N z1pkJRyyj9#n4|gC_z}jV;=H(k@tC+M<}n@@3*v2zC&W9@|J`U`s`pnCx|>ij zd6C|P`KR~=y;$R`?o(uy=wq#rSp|heo zZ6{oneDO5a45|=@SvBkC#=FB<%#SfeF60`K_IaP(k z1POvl3px>9)sG33SzRTAt^`I8WNY1Vg>aN?cOFQ`1vb!I`oig~3?P`r3;}x`Lr^zo z%#F`;VR*jzi}BeDpAO(DV?HUemm-2im0;Cd33D+y$C&VWZGYF#r@(R2KSP1{^K>6$ zo?<=6<^g+9h6l_G@~AEF;3%H6&lEUF`seZB{HV?=o`MVHGXE7)d&KNN*+umorh5U} z7kYs@f@f{S!KBvnwb6+H>QE6B+H>P;$qCW`05=FiSA|(8cryo$kMhtMd&Xiw{)Dym z5Edw4SebxPPC_lhZbg*&3|&(hxu!f4R4SQcn!_4|>*`{kVt${3b>AXEAzvMXXjD0b zr!J>#I>oSKf6k}j2ZN|df#1=-<09%L;5Ffk%hKruQaGOPxc<7+Q9`Nu5}& zNPkEoEZxkr2nF~(u2XCq(kZr$@ze~lwLPJYF5TD^A=R)nDjb8Xmh^MI@fgF3HoXt}z=dR+1p2ti(6DqV=k<{en#XeD9og#4>B6hEgpy>#|vdU_y~6e#F4~=8|Qb>Z}jeB9evEWO-JM&v1U4Um`}^8tHfut z8^BdIksVTO9l4`A@;kc;XEAV#SFtK%)IU$(2q;Z}+NfJFTI><*8|)={;GM~U=LJr) zqZGDk$6X1fa@xJn4ZV)f*%s}~8bs{{Hax&KH{L6Tvv9s*Siiv<+h9#o6!U3`;Yr6d z7Fl7LNtMJIP>illwe(2dUCj)TE!y_5vtDKhrN4o zH(d9&&`Us`EHOw0)H~30E1MnV;heVv-1&hJqndM2N_+Qw(Ao7`Y5=)KC9HmPy7b!@ z3;F26|0fe9MG=vI;0#25Ho;JWI%0xCmcK|7tV&n>{$-ee7A`iyXLzI?ZL?nm@)eJDNXfLZ#K^ zUN@ovMKY8bpw+;}bPLbWCyw;*LnvxE6yrC{8{VR6vxyDfZ1#{R`%U>5OcIb^r@Tpa z80;}S@~3dlArz_nrDx_8oU+LnMXm-n%|HM6+qm7y#Y8!*JT9$OpP*8VtLriyuhoQk zJa(Yp7?+GMjJw7++!{qAhZC7+)6{03^MW}p3mZ1)#L<-Qk=}K^Kn79$mM`R^8%m)_ z;BA|B@u(cGcV#poA2nr{iiN1`s(ZnfrKp*ss9P9WQmN4%;d@NbUO-tPmCTCQ;KGy^ zaJ;l5=%A3`$NC#48}x{#kV(&)8=vG+b#K!a1O5jrm_yr4hJ;NZZGh;Eh>jEZD`9nD zB>c`svcejSV#7$)*hm%~uT2OGM&ev+#7LDz9p$J4!sb#$hekb9xNxb*SruF6I$e2# z#Lr3GBtaoqkrRxX;zKqCH9?dNd&+k>w<4oZlLWNK39``*}I zU*y?il+xoZQ*4!A;Q>a1{AC^F2Sw?g!#s*s9p?A{nrfsuzZ1@_pb;ptRFCR>Qpfi+ zbsYom%NfS&(sZnF{x5<$rF@;j`Heh?HRbm(b1}MMiY}!Zy39`-OzFReNdyPh;JCIx zHPg*YVtCrd-Z6$F0pSL=qCTsR;biEc7(Nodzo0AG4r7==Q+^zvbd`)P6(n$&1pmQ8 zLq+n8Ifc3n*2pFN^DVO2I2qZFPLE&X71uf*SPdB8j(2Tq5y4i4RCzCBeO#pV7C^N&J!o?HlS2iMu4IS&`Wj zsSHs32PY+8bQI9+=-gH88h>i`v|YBV_M~0MyNb^g-t?Nr6_fg-=bRNR%vF)y^SzJ`mL^;Lr!)7h lb;@Rch2KAQ@uxMdpQl!2U)9)uTp`^kU$Bi?!!Au#{s#qPCZ+%Y diff --git a/practice/list-ops/__pycache__/list_ops.cpython-38.pyc b/practice/list-ops/__pycache__/list_ops.cpython-38.pyc deleted file mode 100644 index 36c23071f00617e9b14c2d5ef9eb66defba66f52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1012 zcmb7CO;3YB5M4ftw)m}y2ag^&DABVqCidJ*(@QS~nMH{d$SfMY`%gUam$>>bJUO!s zmb8gYhp_X2<-IqvGx7axLGd*`NzM%+zWJdWCOzEIt%kIK0OM0k1(;w_HoyjlvI#Eq zC|lsc7G)c@p-2SjJYkfu!RnNY}~lW6aDeOy*D3v)^IfVdk}Gwy>{lE%RElsNC<6?lP%G zOB;;;>33}*532Uu^wK=7(kNRNagri~?3nhotv?{Vi45+s$ls*Rk5tp*X@~ZZX*Xy# zazB@8dnn&%ise~{_=xZ*@bow$&kgdqA|C;A%a98~mPg*&q12xB1bR2K0$wwD%LWzy I>e=1v7c^3l>Hq)$ diff --git a/practice/list-ops/__pycache__/list_ops_test.cpython-38-pytest-6.2.4.pyc b/practice/list-ops/__pycache__/list_ops_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 399208c6e5888717803e0d8ce9cfd1fb3029f8d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7645 zcmc&(OLH5?5#9$L3j!1=k|IUYmPEaw2Prvr#ZFWT9odm9iJ_!q=de|&^$NX25bpxW z>@pEqy3xNPr=)V?f5|V{Yfd=l=5od9p5ZJ8oLPxtF%DUnnFV%cyT9)KrlR$yfw(*mGg$-C>$ChvN-bq}?vaO`zS8ef2&9C7vPFzns-%A>P zBbo7MlBVBGT7D~;^=FfF{#-KepSP{27PwIP#)3*z`{Tla>o0=++-g_H_!O(t_VQXd z8bt%hYu(|X8)kWRXBa~)I+oYsXwb|4kk?uC=ZK|IUfb!%S;TTT2}fO8L;Z8`VjDl{ zKe36p{JsM=INw;lE9CGiP=y*^SD_9b_BCk04EA+sLJNBjX5k$64VZ&@>}TLSEMVV+ zMOebV1s7l$`&n3li`buoRanD*4%Xov?C0TKxP<+AxC~dYUw{p`iv1#7gX`EY!40^H z{ROxMx3OP_Hr&B}1@6K<>@UK7*u;Jnw%`HwYw!^9dM|JOx}RpxM(Gz(nssf|PyW%k zik~O=NtdyCW&O>{?4H%L4xFC#cZZDj+&Z*7hfdxM(==k)r+?ZFV@7Zt+Ic07;+;c_ z&Ew^_Pqx0q8`7h6{AizP8 zp=_I@y?liRfiP?kC8KOFpqtYr5|N&2+56WNeKt$(*YxyoD%bNS4y2xBU@~s6a=?u( z#)aP1&X^z?({slzHRS57Ma?;CNN>@c$5DPs6^6tPvZ12H3f?1ixKpNsK21}lj_Vv# zWugd~ZgM46VT&Z`$poLEPU4e1YbOz0pQZ`kkb-aGK-hpp?K#2Hs51%FUYi z!=b~FH!VgkWOSTmE~lU|MaC<5zZCJRCZcw`CS8H|`?$~)-fjR zN*2saXiFt&Lz-siw%gIB5@9{ZPf8L03U}mX+;hKnkjmYTh#($IL|@3__RHf$<~@qT zx@rtn+i-g<=2^wL{6M*@2DWYTD$mhc|f1%OV6(cUSkkCTN-P+@hE zt0}(po+6}fb?tUdz+#W2c%E2YZ16~T6)C9L8Smm*M%Qf!qg1>8CwJM^6}sr!RaD zB{vm>OxX;(jLn!tVicrCR7HYJs7^oYr#L}IwVojB_iN};db03Z;9v|GW+s&OQHnHQ+a0TIyKhjX;XS&yVB*#zk z3{TKaJaa)1BApPG)gI%MC2AXQe71&J;gQ#Ioe9gR9tm~C&MUBMoB%rt81IlVk0w`oqp{f$f76YvQA-9Gnc7) zz72nz(4Lg2jj8@oZqEsqomQ656>FNg?6fOuwk$btl@ywIT50lOkv$$$s`jiQO3 zJ?i&s@)hT;=}c&H-og>qC6%nadUR4Ll3_+?K1Tb4k@Q3@Pl_^~u<%+3&q?ily_RR5 zqp46-%gA>o$=p#vX;LtvYMHE@VQP#;C0@gvsK$69sZ^1>d=HgE#Z)GirLmx&Vk(9y zS{!CsG>G7LWEWy)swu5m%ir(+SlcsCwvwhUm4&*-v&&(>!e@)!@*__RjHp}g9ZufIL&F$n{dt<*L zUp;J;(}3_R^TU3R%cfK%BlsP=W-VCG_m1m)XYexf3L5OE2^8ObxwqdVF)V9-J9qJA zmpDk4`j{wIO3#pe(tk-?QW|C-mh@bQUHlFRd%70B6tKW-p-ShbD_EPS> z*v0pU{Xv?ywnuwGakUzZ_9&t^#rrWlZEdpXFRY(Md87D>-a?A+W^ghmfRN?h?x2rx zo@Tx$Xke7`H*4ZWL4`!;IUpsnj2wp%6|mdX@V$-n$-OUdg(o4tdm}v+-8mHe#gz9* SSm`k>$N9uVSN5FSt^WdxoF6Oz diff --git a/practice/luhn/__pycache__/luhn.cpython-38.pyc b/practice/luhn/__pycache__/luhn.cpython-38.pyc deleted file mode 100644 index 526b67b4c9331c7b13b1b733d9016f35acada112..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmZXQy-vh149Amx992aZ1}0vhOS>^4bP`A`=$6wh9f(4l6BYd;X%Vn;Z^Cr1)RjkI zW5Uj4|iTHD9I?Q;F1jVf)OcSfqdR64J4rE^*LIz~d2 zP1y@Ud#wZEZwXOlQ$-QZWEB6yGt}oeQf`R(56py^j^VScN}zCB5xW)cdXa{N(a2g0 zF~&mFEesXK$3i>}vf5S5j0PVaPIn(bbIkea#Azt zQ}RQS=@b8>ze2Bl>R;$n&so{7Y>Z6Ri5Sk&%G%ZUo!ztN?0G#mH>2S7dt>?F-khTR zNsZ{0!NxBBdrwe+0;;VvRH;*~bV^Z`R;H0v!(VcZ9R8BBr&?M=QrvXT7@M^g4T)FAVsbLg1Vie4#f?Bc)o2MR8~)<}U0sgFt{9gf(@Ko)Y? z&cYOEsBN&UsE2z)GDy*TN zhs$sU^#WXlYpBn|bQyKr<5Hjz(^uT{O%+M?FS;lD?%}_;g5tgMN%2)sKd7HlpV5+^Q)F2jA-x}{<)_E# zKr=j#3;($%$V@@@tzlbmjHdLseQ>M@n#{i+7hmH`UePEt4R9T+_=I~u`)<3)f91lo zyjHO-4AZwvUbGRH6wF6-g?2Z%M>ou~oHsUSV7;-h;R|ef%rqS4xISxgCclg8MezuS zq8@Gb85Yjo|9=>x^i*W=yFw#Dq(d=_cfnPO!02;0;=*N?$1F#JUcguSpzjQWKCMe) zoQ-s;T7Pvq((M7#RvWD?@eyq19~wRryk%I9*L!Ro;Dfg~tsIsj6uvu2;XjR)oLefE zS}m4Zlbddf59WkL$Sp_6eSbD`F{34;cbwionk`kU`qtK#Ua3`Mrf{{#Gn_m05Cbf9 z6P(1=2$7qkL{7e*3@PpmQKZ{3ZV@8wc>($I0O^&}k&b&kInt$CWoJ__S2ip9&Stfu zm#W+K7{n{mwgU))18zp9A>euh@Qq>9j(Iyd-nFt`+1#q?+dH*7!QRrVc&pb-1+i(`s_T-dX-3!_|R)?DX6lxVRZ%Qyb4_@*rP=G> zNODs1y)~-W>T>DEFbm`KSWqrNf5jp(uWgvzyB{I8GrUO8JVs((jSR+7BW5-3NtX+O z^s|-F*)U;odTERSz=2_4^$$7Y4qzTbQK+976e0{?jANK|;Ka1$&i)W%&_j$tG3+0o z#=hNgOuu9J7TUmaOuIt{7-n6LuzoU;^%(|C&UOwX?kx(rw<+ev@ZC9$uh(rgU7OO1 zv0S$zTz4mOoiJE(o+&*pd%Yvc_403-yUK+uy)cr-?nJm0hq+Abn;d$sgqL25*;dvi z{FW;?C9w`WkyA@2eH1}o7)C#-Yhv)2jMvLC$U`r(oOZ|WZ5Va3x9JMOP2cX~orC$e zk1pi9%iJ7Tkc2#MJczm+EFkmEDMGcAi|sl(ZUE5i8ab};=4iHApe%fmw^Gi=*^ z$Kh#YHlGc1PdsLF(y2#rXM#sDR3V<`^9aqov(TI{UUG`rYJI&L$MQ$XlGZ6Em|R$< zoW?K)n1_bI2q&|cmIZ)$buZQNI<2sB;NhB%`$+9;v`w`zaUMHtq-Fg}vs1g4&l+5N=8!`)T5EWImJ1!6 z9~R^p`=w*p;V&YOUl8X=%#)y!lvpG|l^t<`#6=QR3lWz{P<2pHMM12QxJ-hM?cyql zYb5AUEOZh#NYJTL+#*3Iu82WowTud7B8`Hec$E5Ts+Kwo3J`bh`kAkWGvl;9xm%JeYt>aieHG&N7xnZGGdxa17 e3@mFB=y7ZU?d#Cm-%?@Fqr#x3EGk+mpZy1w;Q)mI diff --git a/practice/markdown/__pycache__/markdown.cpython-38.pyc b/practice/markdown/__pycache__/markdown.cpython-38.pyc deleted file mode 100644 index 203ce25fc2fe380f675234ac1c3c3ff8d17fe403..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1658 zcmai!&u`N(6vu5RY13>gV~iHY?*WAlv}pXiL=h5*6WRs1RG_NVVGB#!V0Qu{=LQnT ziWA2TP9XjOPKduF2ZY3_{{TW<;MrZ>pdmD`$b2f_8WQF*up);Hb0V#HT8Jzho1 zUf9Oan-e=;MS5uovK5tfF{gd6wI~13p4z3g>1k1dtTlDAH&E06>iYWE9lyg}TNL4x zi+b;W)-7ycS2g?ZI?v>4EJGIwdj$KL^1V`LKRf9%e@W}Yf)g$2XK-v1WuM0#S6!9e zpLA7vqppsg-C|DnL+fOv6P@g6PAANP!5n%{R*+iiohQP&ic<1;0qQoOJA|H-z98@| zonOtclcAf*)Jb(6KfAnCPfTz9ia#vEx0G0(3wGlC8NKWe3*+czKPkzmmR|CQ@>5jO zOMYVKV;B9QIgVZQlVVPG!5_kRJCa@Slfoq7ia(V93M%0Wi0&<^z3vRa_ap^~_phz0J5jmD!yZ+n~KC-OP%@Zoo5x1-wxVyUi%%{YH7m zXtv@w=+X>_8SX%sHy`vO+9-h$_FGZd&dl~EV-3<-d5743IPy>5y~_i}-PZDh7VULI z_eQ`s`n}i8IJZ`Bs^#2g-W!Z|F&Rx~@jWuEBlQ!R+vrgUlZM{og<^@w!%ysxokijEHoC{rExaMZNFKi5}XCqxN*|fM!Bu!a?VOt#%RzZbL=E!P{E1NYaM>TRZ6EC5_kB`MH+(k>t z7hCQt5;yY~p+=^>HlA{*O;#ous_og7kZ>KD{D6DzE13)Ho3(z;bg~tROmvI}y)eR7 zoy?ZB%0@Rd?n#>woe;-*!w|3`je9g-n+a>_18nhRO4Qo|HSW7VcKenjhD%98aam$l zbN_~0qwJ@5lT8^*Rb3jthO3*K;iaazDVtc7H)~KldDN~6;3F$AiMdHkW>Ch7&3<9_ zbwtEfLQ%t8qj2MzWW!mmj^U{zPkof94m|agJaviZW*Q#3Nj9F9>NubV0yRc~8UWNt z3Dl5)K2HNAH^~Nc0f5GsXbXw9Mv1n7Xe%YrmPB+Hi6oyeap1`fvvI8=*BG#E1lt}3 z+Xk@hlwjKu*uC^%a>Hz3YXWQx*$$HJjFRmD*-lEb9f@o^J(=7v8`+hZY#7b;0uc+r zB6vT%3Ep7(Bhy`7RV;_*eTk7+QsnZLgp6zdz0u`ydKcN?7w+hf1Lo+P<^D}Qyxr{C zyG`5LjVqcpxJ|OKR${gWk4$y|aoExWX9p`kcvRc+1Ak9K#Ncd9*z!S}Y)tD_{afL5 zt^pJwUqe(PAPK?zV-cCf1>s9{aQ%m2yl(Ce*awb2X*}fY`})ARV5qZxICr{sZk)JB z15^_PHY05-Al@MXAIXmc69Tt=Nn1D|Hb)19@RyVO$fmu!{fPj30z;3TH*5|9Q?Kd} zuIP7k%hdyu=@_ns^&~(@^SIFPFu0aW122@3r5cV$!bmxHMntJeSp52-epk8!Q6_Gg1( z8c)%&9eglv$8?isDnC2jCOErcZ^E2-OE%ps2P0NWB9>rSaXO6Rb{jWzhn{VFN0_rM zm-(H<0C*^Y3(>*oi2vlbJY8RkG(ud%VT43w*vopf2abhA6+-ZECa&Rl$j0YTR8ZiF z35Vl0g`Y)n4#ffrJY?YKQQ*-LUq-Ql0(ab$BM!?>G@BGf zGlQ}+G#2JFc%=1QaI(-g(gsVtIH`)X=TP{-fa59r*l`q*){OPITSOG3)09O;%TOV diff --git a/practice/matching-brackets/__pycache__/matching_brackets.cpython-38.pyc b/practice/matching-brackets/__pycache__/matching_brackets.cpython-38.pyc deleted file mode 100644 index e5fd56938307685854244858e39160fac32d2b49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmYjLI|>3Z5S^%nirabw!9sHZ5kc!k5Swk5m_!Zh?uJYR?Y)VWSK8Ji*jYJo@$=xl znR&cnW*tRcAY7CFc0lzWhJQ3@m=Uo@qCl|=B%m5A7&av%>x0k-&WYF}Q9v0M-$;_4 zDeTdw=$$EcF2vsQT=F$)hg^&|LY0N#3yqmCE!QXQq`{n9C!{x0^IUkjr|r>(oJ@QC tI_bw5+jG@1m|9_+R^bYU?}51{X*{g!?|j{bNY$R?r8*w;G;BSH@B&pgJm~-c diff --git a/practice/matching-brackets/__pycache__/matching_brackets_test.cpython-38-pytest-6.2.4.pyc b/practice/matching-brackets/__pycache__/matching_brackets_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 81644101b431febae23aca6b531bf18920398f40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4592 zcmbW5OK;mo5P(VQVM>P{oy7(o>aeuO# z@Ri1!6a3iEQ2+;gldJN+7L1g@@tl#aX87PqwwlE!LUY0pt0K>R%Rvg#Z#YPk><_uu zscIhh?>Ra17xu)R%Dk7;ZKb8^lz_&X!k2(IC-|}dKtcQ=s{-&Kyy2>;pxbI1GLXgl z3`~HCItw|-qn?0CD4-T$3htrK!8FXE&ciIsp`L_!SU_EXMOZ>T1;neu^o*^M+O)B&I0=kKlTEOpSfQ-hX?*Odia~b!ihblPH%)-qjD>Fld5eK>U{HK zTWwMnnp@sW+oXAM%TW<;|2`|9;ScPxS~^$3GWGIvV!v{%R+)4N)pXk^w~)orHBvVE za8J(rbi)>9(4sg9TxxZ_HTI=HMT(81Q!@O~6k}&B9Dno4IFCy)#)+cgaTUs`I8W939iK zw#iUauGEW3%6Hb!weDOg*H=37w^WU+hhSp@+fSPj<7BjHx7LtjLc8gQwxv=>SDVf5 zVBrt8g{=_rL3DT{?UO@)IL5Yaw3J!Z8$8ueN?HH&So&fBx!XCcpy@8sE-P7>1B8gZwC;1%Xr zmSU)8_r10LGz1>A)+6l`GRwud#S$C-Bf3Bmi>Pt49XkZFa15Sf={2RSno6TaZY*S=RuUe%rMWGvm!Ug Ii9#Xs9{{q0^Z)<= diff --git a/practice/matrix/__pycache__/matrix.cpython-38.pyc b/practice/matrix/__pycache__/matrix.cpython-38.pyc deleted file mode 100644 index 43a0f9bbaf5dfde0b8db1246eb1f29a0fea8309a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 657 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 diff --git a/practice/minesweeper/__pycache__/minesweeper.cpython-38.pyc b/practice/minesweeper/__pycache__/minesweeper.cpython-38.pyc deleted file mode 100644 index fe2c7310fa550a2f96aeef579cdf0a9292d8e99d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmYjLF%H5o3`|>wg6PU0x-=g^2tnsAs7tqy7%8Gnt0V~6`3VzW>dF(?n6QfwJ?YM8 z>zueuk{LtXtHoi1^-0YbAvSBIo1-YEf*Y%t3U@4xWPqa|$P>3nH$hPhGePk{siuuK zaL`aIOPN95IWHYp$3?amsx_MD;EulSI9$L=?Hb-$A-$HsY2BRxIqC&nd2ubD>VYwADwf1KSAwJ zY?QAGH15G)J^;fAqao=~Rcd`*Bb4+j9fRg~%#I0nw6NN@Iu<2g5vH@sE5a(=e71C? zcWR7&PqvM};7O#tO*6}nqB!vr-o>8sr9tB!{N*b!T)nZQG0L=8q@(9g?Npe-OlTXd z$}A{Nw!~^sR@pMELus)UwhHAETVv}`*4PGXK)KA$uuUlI>?}J6S}Mq8koQr&j!j_$f{s=JQ62oX;Xg@}g{ zdu|_E`|a;fkZ9F<@a)!J9Uaf z5lN=@n^xLydOJ11|Bjs+uG2cr{hLZh`>_bpI7{r*vj!Ht;=-Wk3yU=1MVfOE(w^f6!%I))2z z7R`Ayb0hWjY0MK&L|2VsxBGqy6SEg&1gE`<apGcr*Apni})1W^a%Ww)Fb zv|6{F+ovo^P0{O$Sjtb32MU1D3SFo5H|fQhY}DW>*m$fd<$Ma2l5#LuQfBl_(2j}8 z2_`0Nxn~yYskc)Tk;B$C6$Mp}+R*J_KVGQ`TO0N^lr860s|EdT>y`th3mu=qICa0( zfi_ zkmw8yXL$>#U?&_Z5ZqiBJE4Bs8J_1Cqm0t~{7#vgTHD!K#(2g%tT0b17Pwt3@N4?p z=C3r#!vma%N0gEu$!+o-c|@L~2=t`#l0E~?CMq$)9&A4|S!Ii`v3kw6+KO=I05=VY zVFr0}^YK2ncVk~LJCJq|J@>RT{t&+ltAZTm^6>8Sv}7qANhggGOPXIheQ4l z&Q_t4N@2kBvPyC|;Mo#?(dC0Ah@-3m>o1QrQN_DD7h*C^%L5h*_Vzfw&I@^T7skp} zFof3W1=@hUQX|^m>FnV3&eZuX{RSSF?-_9EdhSxpC>M682JS4M4;!7A+P~03-ygoA=lxMcL8=2*Kk>BT@m(@J4AG2YI^}6R_ zil5&R_?0Eb024NCJGOOPk9C}4-%Nrb`gPOU%Ks8Ol4@8iFkczIX zI_j&zWaUp^WY#bW5^QA4{qdKH(qm>lhW`6LeAyt@StK&+i`;p4QM)QES)@TMt#14S Dw!&F{ diff --git a/practice/nth-prime/__pycache__/nth_prime.cpython-38.pyc b/practice/nth-prime/__pycache__/nth_prime.cpython-38.pyc deleted file mode 100644 index c667a14ac47c9a5af2c7f56b64f656acb724ee85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmWIL<>g`kg2ho{X)-|iF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEw3~;DYd8wqyS9(a?lSgPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitC$E6LC;D9X$Qv*N)ly@JYHtY8+%#A1*e85oN|w)$y8 cXoOV|7Bf)p7Kcr4eoARhsvStzXCP((0QwO!vH$=8 diff --git a/practice/nth-prime/__pycache__/nth_prime_test.cpython-38-pytest-6.2.4.pyc b/practice/nth-prime/__pycache__/nth_prime_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 554899e8df44a8487f5a44d027caca4712d35e3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2183 zcmbVO&u<$=6rNfCT03@{q-mR|O6voqG6=g8>WL6VYNK*M5hN`|E1}iKGf6hsyY9?b zO{{Qo?ua8dDo**A=E`X$_y;&3-ZvYk&W|FLwf5ULzutWF&3jLN)o9chJ--KccmFCe z_6Hi%Pmvny^y;q(1QWc+0`9(Ezu+;>`o*Bc^O15;rV+1K>HC3CeFafGVL|l;6D3hT zVWKR{2eok_m=S!NwJI5TWSghlmIf;B%PvRz?14>m*fVL9@Be|jlJh= z3^&EmM_bYiRic|wvlnaAOm~}RUp9ARMUABCoa+nTJ#vVHZNvK_!5%wiKh%HXh8^=U z|HXS#+-9dtVP4C#Ui*pVvBC-me{XbNX{mH4YVSlMP2$dTsed%-pd$~Z>c+a?8K|gh z;;!r@X8$wC09NR%&`53CgCkp81>bJkAFR!S2{tG*kBuJY^Hh}V$@Xe5?M6MlM#f}z z26j#6w<2aloxZ+k&~41x`li|c2KV`rPI*Cfkj4?+okI0v_8T)?kmAC7=OKv5 zLt#@@X)FV$Q_s#snxr-xZ-!A%70}0RQOn-$%8z{1WEfPFi-;MC7FI(5wlm2Ukf=PrVVVtV|nZ4RHA&t6V7^A5H=i z`86SRjZ#xHZ^S8{f6Q3?_*ecPoMxR;JMmsF)BPz%_pi!yKJNk_L<~a5#n)G4{RR1p$c%X2I z3}^yA2fVK+&Vqyr=?(ETin-7I!r9MvBdxmicZPA##EG``^}$hi-dYX^N06hP$0|i& zTgkU7HWZZSUA8jmtI=YoUZku)Ok#sZP)#OvBadv5u>MOLdKOWscD3gk*4AIm1z1BY QX#DH&*#h&uddV;S3t}SeNB{r; diff --git a/practice/ocr-numbers/__pycache__/ocr_numbers.cpython-38.pyc b/practice/ocr-numbers/__pycache__/ocr_numbers.cpython-38.pyc deleted file mode 100644 index cb794ed038182caad0d28ee67dc967133cb7e392..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmWIL<>g`kg2ho{Y05zQF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%m6=yiS`wdLl$lZlQUoS`x#))$rxq3KC+a07rsU^k>bs;C zXP4v`=%-es7A0pE=js;}B_@|-Ca3D>Cl~4FmF6aalmprEP_|w{0L28!B65(F(!C(Wy^P;^0a*A88YRF_l} z3+lc5%vrp}Q`^|D^hEIow^BP>gSH?Hq zoYu5Iu+V*(P*{a0ybFS9j8wG>k*QuYbd6{=vyvgIC0ofti(Vb7SrvcPHc8?kH}HSrB66{!`_iGX3Qzbe2rehA=!`J^l~ys-pcRv4 zSQg3|HpDDQvn8WS1ZvVVBtzNYAjV%!YK7U1QfFJ=T^ zVSWgnJMe^;K(w^qw20se5dEgPLs;gujX;? z=kikEircC)wkm_n4yBZ!KUvuc}S;mh7f1fNYg&J-l-#<2W9{?DH$*l z2Fx{qbm6*NF)5226hr|9B2eNKltk3jXH5X%EYG};i&1Y$-(Yyw0oaMC@p(jRA8 zveWPdcbKzY<#fFfQ8y4kZdBc-A<)aH=hqui2!uxs;h*hV$7(OC(+qZCov1$~RBpyK z$f(Wun*1{MGl}GD#f(j3hY;;+ZC?9Id!&7XeT>L#k*&-Qi3qZQHCW!tGIK&Zuzdv{ z5+Z{F)hKZLH%sc}u!9X-F4V4iJ`Zg#wEZBm9lO@3Mqa(jvBO5t5W7QhQEm1|ju-MU z&OdXi4Sr7upbgg`@Suv#XuHni9DnKZdgKLuY&v2y+|@-9TMaJ6;XU(E>Ox|mFTChE zb=o_h1{+j@qS13FqFzV=8MJngVLKwDLIR?WPht2#jKfSJZb!{1lJjJgm?W?1Z=1B2 z+D>rZ{#tzqSQ4#{Ct7X4Xanoj0KIna_@)WxkS%3PDRt(sQr)21sQG==8a)@Bi*o=@ zTtso`Wqy2|V%h^AqZ&E-Vcpm;PokR(`?^_Ap_~6W^#S#ywE)eFNHtuvOR6HZv9Sd| zun&n;8K_Absce)I8!7(wI>X9Q4~a^yT%LxzJU!k2B%3&V&L{u*2&opGG5 zKl)qU(*JIL*o*Kk+ma0PztAR`OPJZG4eF7_F52u~w27;*swU90Ql4HZuN*_qjHGAN z5pc+}#G-mW93x>QJb#lqg2NGCuR1Pt!1HJESl&MC#apWJ--%Fpl%qQ$JrP@;=P{Y- zzdw#R4KwH{4r-BS1_ld`lXM!o&nIPfuETt7oUS;x-c-<{yP?D9K-ZC*jc z3x++h?JD1q*xo`rBu#dU+VD#(IGQSK$2w)(WiQpP{-MUlIeK4}e0gSeZhm2LY55pS zHhI|4x9t}=!Hm0J&8c?G+jq!ZU&FuD%Ybzm{=UN=;TS$gsG#K*WR!c`iJ&2c=%1Mw z`$ODsZWbY;&L_cIVXc`%E+oU4ZPP2Wib>T$64uN~X9;QV^o0t@CJMq4lta}X0mo|= zfYw{U>n$L*|IT|LdF{m7A+I~aiNF2C1G6?c7F(41PK{F<=P9iPtO4OJjf<4xHw)Dw zP?cg71@0Sh8O0S8Hi~N~-be8Pib)h7qqvQtgrbaM7R4Njc@+EMgv?U)DA-o7e z(4;CJ>eS`o&r;ovh^>b2MOdg5g8h#zGLnt0Cs2RKfe$x`x7R{q>k~!grx;d;7OqAc J)hxZ3`4_WO)XM+> diff --git a/practice/octal/__pycache__/octal.cpython-38.pyc b/practice/octal/__pycache__/octal.cpython-38.pyc deleted file mode 100644 index b0efe2e398780352f954395f663fb634df75b182..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmWIL<>g`kg2ho{X-Yu)F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEhRHOv!u8PqyS9(vd|ALPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitC$PcBK!fslFymAAMH5{rscB?EnA( diff --git a/practice/octal/__pycache__/octal_test.cpython-38-pytest-6.2.4.pyc b/practice/octal/__pycache__/octal_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 3f3342b406bdc29915e6dfce1291311e7d228edf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2907 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 UM)1Uc+qt~tEI;3Pz48420nV9^^Z)<= diff --git a/practice/palindrome-products/__pycache__/palindrome_products.cpython-38.pyc b/practice/palindrome-products/__pycache__/palindrome_products.cpython-38.pyc deleted file mode 100644 index 8739e93bc2d8b8c6c89a915fc56273edf5daecbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1400 zcmZ{k&2AGh5PjTOG&{rkJ^&KnHCRhtW6aHk;{%|*R!A_gRWt!1@>+ANk*(Z@yj4^zGO0SF$-{R zkD%ImKhU;m<{GPEpyrBbw7x#79UCB9jNt+Cv zl%%xl=_eMRF`}QTr72Y9V|*G&;jR7*>44qsRvhoKW_T_u6W1SW9a?LShMV=%w z5}B(ai^srWb5g`G=Y#3|DEwfX=Qvxe7F4`}=JIrLTf zlCFdPkm{$fb2t6(uzLsnocn|>W*{fLV83%Gdk@&xZ?O+^_Vt{7{SNl9u6J&*-H8=ip}=BWg5%HrL>sVvgU;qnItZ?@?PaBAQ^Y~DnP(|yrg3Y@ YZ+=5g-rt*i@m^!X4OX{T@;!g$FAVo$XaE2J diff --git a/practice/palindrome-products/__pycache__/palindrome_products_test.cpython-38-pytest-6.2.4.pyc b/practice/palindrome-products/__pycache__/palindrome_products_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 016f7c865900aaf68f0a5d6c80e4a70efc91981e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4997 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 diff --git a/practice/perfect-numbers/__pycache__/perfect_numbers_test.cpython-38-pytest-6.2.4.pyc b/practice/perfect-numbers/__pycache__/perfect_numbers_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index c2112cd7bd37e3acd0b08c2f561dd0fd31e19b64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4476 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 diff --git a/practice/pig-latin/__pycache__/pig_latin.cpython-38.pyc b/practice/pig-latin/__pycache__/pig_latin.cpython-38.pyc deleted file mode 100644 index 591576525df7a261def8f4c6018b5bec9791b65b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257 zcmWIL<>g`kg2ho{X>vgNF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIr6jeYqzEJpCVn~ShZd(673(MJB_*ch=Vj`KA0D>*geuWafcb@nDu-LFFyZlA^@CVjwpaWNIoX8D004a-Glc*E diff --git a/practice/pig-latin/__pycache__/pig_latin_test.cpython-38-pytest-6.2.4.pyc b/practice/pig-latin/__pycache__/pig_latin_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index a8153615bb3ae92edf1a6fbef0c3952249355915..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5037 zcmbVQ%Wm676eT55qHNi5Y{!Y6m-A}kJmeN=5um6Gqe&XHNR0wbHnSOwdB-Lrilm0a zS`4~NKBPrg`Gej-_KJMvb1hBvkEoPV87&aT0Z4Fz@u_tHRtc_TT!c%= zD{vXEAfJV+u#LP5*Wfzx8r*=J$m?(mK0`hSx8V-*2JFCHyW5kAo-*qGNs%XrGHEQcah(>{qv|9{bbV znAvYip_qdpaz*2%+5}{C0$nWCD3vRCeom#*OsNwbhjGk0C7G!W*5+3m7^yAV@!?D9 zY35GYOmDm~zuwqLFLSa8q+*?t%+zL^^Q+B_)E17Uo0D})s#E*b^!tVX8lT9JiwO8p z9EMoI`!MH%kFrY@Bj3$<`_*)3-jZfDp7^8u;3C+}w)&Bfy z$EGonOL}KwZb`L@_sTfVd606gB&MXm!(brsiS&Ls;X-q~nJalve1zvIH!2gjcd5{i z9|yW=w}w%r{9OA(iYkAoYVU;osjlC>cTOBjeElrFei#cc%u+4Y_m#=~X*T0C_H5?8 zG0a&jAJ)a@-FKcv%2SDkaH6F~D?Es}K8a6jG_5~W+&%o1yBYd0^6_eUlm*^k`$(jE zTV>I!b*#}NavKjEA!SkRs=QWu#Mt!XQ1S$q@KiplnA!f=%>VyO28uVrq-vBEe;X zD+H7jsA~lD!mVx)+$8vr@s}k^`&AQxuASaTaBa6a>#uCNvsk!?SrFpKkF@CRCpmv# z+vG`3!`PpEX$j(}ujGjev@E*s4;7u$V++`LGU}>uvnarjN;T^yr(aack2Hn*9FIQ2 c*(k66DMN+(&19^g`kg2ho{Y1TmcF^Gc(44TZzAUPNSu^EBb z8HkHnfJ6!dPz|HsN(N1)D4vwO#Q5TpqQtzEctaGPQ4vTJnE2(RA6lGRRIHz2 zpO>lcl3JWyl3$>oT9I0moLQW!Ur>~oT#}ibs$Yl9``Z4B^Ma`FaJF zw*)d0b8|EE(&JMyi%Syol2btz6@#73Si}ru`)NXGgbN@nkdj**Ho5sJr8%i~AYGq< Gm;nHa{zGH{ diff --git a/practice/point-mutations/__pycache__/point_mutations_test.cpython-38-pytest-6.2.4.pyc b/practice/point-mutations/__pycache__/point_mutations_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 1e597ce0722b349a5c18a25f511230850a9d6151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2570 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 sV{PJWTqE}apA>W)h+{-;C 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 KwT5Qv^VZMp5qCHM diff --git a/practice/prime-factors/__pycache__/prime_factors.cpython-38.pyc b/practice/prime-factors/__pycache__/prime_factors.cpython-38.pyc deleted file mode 100644 index 1805b73de60474ef749fa36ec242e48a6a8444f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmWIL<>g`kg2ho{X|h22F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIwJb5GG_?pM4<>$j=!X`k78UC!>Ln$nK7CxCYNL;rve$7xv9EoKwdsj1DF>N<>?hv-eQNcL1q_&9LvC11hU>w d6G9^_g|L``a<@2aa`RJ4b5iX}J^YOIb?=XCR^LHmN zUB>>Rg84MCaEO2P7!5G6V&+>qwWp5FEH-WUu2s}D{U+Afack=Np2faq;6URwgNA56 zZ@+T<4p`r@19yQvvGIYGw+nr~8uC+V`Hk7Fnrmsv0Gta>(F`MBQGUF_grPr*8|Okb&giNV8U ziwyZy7z(X?TaTjQc`~0K3%P}_mr#4vQ0C|Fi{%hUE!IF|1xcDc6OxGvAb)4M5jG>+l_KAI=pEF))!8X>??rK_vVI&1lCp;*KX2mR>RI@Rl^c-6MNFi-o(s*l|^kGQ(KR4*E8>E=5T&& zDtp_2-LHmSY4Lw3ZxQAC2)MnftP)|GKq2ji2JQW7T0>g1Wr>=Wu-29oSk)HQZ5ZlC zFL3EE^b)IGXQhb9o<;H;d(XhWJR*#SCF=UM<``?OF$mY@V>E)hp!&q{q-J9*wJD+3&jX?x^WctS zI&0p!gU`Nai!MPQVPHgm{Ept#E{r`rCCdXmO2T*!0yp+JkSC&;kfGtl=hgGEw*B~E zGxs=8f~nvJi_(D4PD!F+afOP~WGKat zGRj2WzIc_lmhU>)SSuRH+?yv+Mg_mG!(n+F(l@Z&dxAAb0baX^v&wZ5kcoJ+NF!cCPJ`nN-l!#{)v;n)YVULbMnqw?1T62 z-SIBDGz`ZKanGj58P+E?efZd{kT5}!OnNt#G3jqv6yzR`I*=!>kuX4!3^QKxK*@&S ztf-`=z*pWoo`SN#MSKv_RGM!ToSdn-x+t4#D0yu~?sTru7^ieKrzfBgPMfNm?R&Gh kzBZ#@7U(0O)0t-j)Ff)_|AN+0q!}$rBhQ6e($)*fK5oT4H2?qr diff --git a/practice/protein-translation/__pycache__/protein_translation_test.cpython-38-pytest-6.2.4.pyc b/practice/protein-translation/__pycache__/protein_translation_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index a5ad009dde385f2c3a57e40c92e6b4854c9f9bc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6541 zcmb_hS#R4$5GJXMmaq7T?7OfG$7Lc+C7PMw1Z&gb}2C{ga zfgGr)voHdA)HxW1G1MxI!vyLPn1oBH^DqU|s7GN2W>Js9Wtc-f4)d^pdIA<<3H2l_ z!wTw4a0RZSo`P$zih3HZ!wu9ka1(B!o`u_R2lZvR3-?gZ!5Z90Jr57y6Vwav5Y|yI z!UjA-y#$+3K)noG$iicH?wOB%U+9)?>W)#j_POm;WrW;0Qg}ihDB;h(iUQI$$#!JKX-+sW&$G8!oDbUE62~ zz3LcMjwhZEA3CQnI`>%M9&-@edZXp8&f-j!|#5Sk#wIHNVqaZ~! zlmM=hm>}~nj;1i55Sl^)Xo_y`JKn5D`e)hmkLkbGbd}jPY!9FKB*RK6w&3!-cgH8$kJ@01D5O01y#OgL$BQVGnG*NCH5_ zJhzJN`#Uq-n<*h-gnP3rZY}UQXBGamy;$yY^7Kx@S$iwKZ6zv9n8kOi9_MgJ87q3-C+m($gpq=e?%eP zsWQ9_;>Lu$KM3w&I|*lCusTi_2|yY|wA+h=62UPL+L^?kqdH`~3X*{(m*+9b2<<4G zkX1CHojy~c=`(#gEO0J99TuT6QW}<;W5IblaysPv5+nz+sg@8qeYy&#XRvq~@#BSt zO?1fkS+z5q!@}CISj_-1xfeBk?EN)J4aQAmR*l_TI6H%9)oEe~^D53fMNF`iVSTE+ zRd)2gXJ?>bIzyUmyy=Oi--483zWp&yG@aAe?%Im0GG^&D&X}8LtX796dXu?hj8P%j zeB0<$kF+<`qi8&Hf^AigsmPjm>DpLX;p+h?^vCk+@BQsypH? ziF+j0NZcnuWs^WL)hnw~MO9GAn@;Qk3RPA!!~J>RuZ_CuLDMiD{NI8*w%us4?$sh| zw8)q1eoY+1e_im`!f?1d(!J&8I`{JUvFCbSxN6ff9J?Xg`kg2ho{X%ayCF^Gc(44TZzKoJzc2;?~f zaWM;!NMQh~Vf0(cPy`Z25Wj5nLyJ?3iuDuqk`hz$^D^~aQj4=o@(c7+D^iP+GmCTe z3yKnxOEQyFfsFjJ)S@I9tyfTaiybNkGPD@vI0nWdW+3UO384`dL0BLqw>WHa^HWN5 MQtd#xJ_9iW0EqN25C8xG diff --git a/practice/proverb/__pycache__/proverb_test.cpython-38-pytest-6.2.4.pyc b/practice/proverb/__pycache__/proverb_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index e639be403bd93c70c81dfa5c2cefc0685a669639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2911 zcma)8OOx9~5T21_Yy8+J5J)x;Ln_&F4qmF@L{YG*1h{~UDw2yXDy?U%6_F)nMrK)8 zIFU2I0g6+80sm#LocIa2V4-^?+wyw7yK=eb)zdRye?2|(d}E_Y;QQUXG5lkLkUz0e z{TyfQK_Ti#+_&utF8zB0ZivKq!s8^0iD|+or8D!+DU>ambl*Z z-s6OKf;jFBQ`yOnMdu_)@=iMJ1RYfB$r@-$7X_j(LBd~)2ffc&~(J3Lq+2C$y z&q1;Rq}+ySx^|pOh(4rFV$e(ktX2{R(aITbgwC9*X5X{3DDmuYoOrHEV-9In;_eJ3ll#j~166ZGL3`nW$vL)g z5M5PTt0p1(Un$vmNZ>l4Q4M4#+Sa%Q9p8qZEQKi6(-74#3nd2twOc-~R(% z-(NW_7u#6z|NJ_;Fss{mp>d~@)obPPz|5ca{D5=8zd=V-t^n$sO+H$2z}0qEoN@ge(lCyxWDvex$ss%EbBMeFTbA#l zFyVO+$1DoE9ZMgr`4@(3gWWQR3xTB=8P+ z1|}~*#)sGR=h`Lu-Iiv)p9CY}`?~34Adh3Lw|&EFF(TWDZVLs5w#4gQ;?qjrLxE8# z@1sC&DgvJd(guNdhq*u)We%&eCTp=Rw#i&G+HGofG>+mtN|bINW~ctVb<@vI(RaP# zQ3e6mlj1~1xzLSymv(1;O_*G`T52{39x?3G0{&;n OqhcT!*(Jg`kg2ho{X&ONKF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEw3~;DYd8wqyS9(3egWOPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitA=s4U4yOwTV$P0Z6RDatI!Ni9JZi-(Ho6;$35gtCj{ x%QH(d;)_djK{ghH{J_9i1ag(1CWJ;f1;Szm%H86y$<0qG%}KQb>G}-B3;?8CK!pGR diff --git a/practice/pythagorean-triplet/__pycache__/pythagorean_triplet_test.cpython-38-pytest-6.2.4.pyc b/practice/pythagorean-triplet/__pycache__/pythagorean_triplet_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index d8adaeb8066f6527b896eac3a1801d2b646bcd77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2413 zcmbtW&u<$=6rNrGTDx}QByE}iEfPX17K**8pafB&NGXB?vMMz_bcGmgJQI7`_1c|T zlcwU<3L%7q;4c7iA-Db+J#j#s_JqWRy&+BrP}T3PYscW&742I7=6y4}Gw*%-=FMKO zR7woj_ulIMH+jZ>B{F$sLALQXR{(+uD`1|LwstpTGmCYzUd|ehIX71{6Iw=ZU)^J4NYD)$Tt4z@-ki8 zvxOz>`^?J>r}wfVC-UGqQ4kK=yeNti+JZPG%4i)?5esOGViC(% zp$EItL@jG#VX`3y+o82z0({E8WsxPUdsv&+ZD-oncQyr1AvKdS?nyEPq*#&z9NBTz zH%97cr#A?r_ihjTKvO_RR-835*gs;L9{cM?<2vp#4ZptUi(aT2SERWW_4*BYN9vX` z-9}>w^`}mVS9wDH5|1dsB#;6xMcX~#W&|De5d9i}k4SB?@yKkJV zN`3AG&!<^{g_9QvUM1K7XorAOGL>csegryO@8Rw?@)N236SSrZ zY}NqG%368bvHtb@(|&Y!?w+4H@09vfc~bQ+!}$N|w{v5amzv5QAnpg)c|JREfQ zq{e*AECc?d-rrBtZRU*4S}Aro5B;v>JT7tG?TJA^cA0ZJ=Y}JC0c&ciW||6vMs!S{ zCrEc6ZOe%=PiLW~^w-EvM$FLjc-5KlZ!sOKor;~kfeIoOnz+2(KjdS!&ijW{rs~6! zSM|cWmIqozGA@q0;=-t}goo3r=IhuQgeoH9t)O%Cg)pjd>B${CyBOc`aa@y+CpjNG Vmxp4!OWy#7DvZOHnPZo8j{&XJRUH5T diff --git a/practice/queen-attack/__pycache__/queen_attack.cpython-38.pyc b/practice/queen-attack/__pycache__/queen_attack.cpython-38.pyc deleted file mode 100644 index 57c59f5197e776bbea389c75efd4f084a6567b5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 573 zcmZutOHRWu5Vi9up`r+}V8sQppt%4-l|ZnogsN_`v5f7CsEHHol;4)#gjKKPEk|I- ziW!Gc5RCL@=FP-;&z_G)Ljv)dA1&^oz9IP;A&?2c9zwbzl1RD+yaYLs!HlG#fcdWo zfK34Q7?L76l_U=&mBE_ip$ugNHIgx$9k}>;L(MD2m>V)y)pAv0zsKOuyzDk6LHS)w-!Ig4sAkYE b!oP4rlh9A5DfRWgBQ81Zl+N(nJAixw`(t)- diff --git a/practice/queen-attack/__pycache__/queen_attack_test.cpython-38-pytest-6.2.4.pyc b/practice/queen-attack/__pycache__/queen_attack_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index f8d786709594103334d02081b4b5b24cf8ae741e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4198 zcmcgvNpIUm6y}hWM9cD?IC1Q_io3xLBBf0mpheKS$cD6lfTT`Z=t9t%kwu3hnZk|>3e<)APHzM0`Hdf(gU<}&XmzukB5EdGPQ#4uW$IShBHB}p8q|ENQIn;2CXS49 zmXhDJ^;8>9(n=>JNjZz$*@cF!^_7of4|Q)yjrCvTV{6O~W`vGt`1M zO($p;+6;ipfhw9+AN);^UzMx1$qVA9KA{xp`D`F=yhnP=@PvG?F?O} zE6~o;o51R7G$UF3ISif3>rE!Y3IU!v5B3dsAHpl9frKC*N{)1t2W;0%ZN$Qn09;cr zuX>_!3x@yxT6`%O7e%MA<3+JC)F_u;MOC>5e0LPy<^H z><~CAG!CLXc5J!M-gm>A?bv&c=Tf^72sd;CADI)#hDKU<2Ot&B+uVm451D{hV*Uj> zhuS+WB*)~h**{4r)r9ze*S^!9YcI4vaNY>bL$Z@PBCrnT@C%N2($rW2>%ebPUa3<1 z{psl`PrdkH9y^mGbby~ZSSC=1 z8p)9>WS+FX9wE`>GcHr4$Z8wictE6qpWg}`PI(UJ7Lef5b7cV{umj(gd#}NUkC8?E zj7yY-vMdO5XR=tR1YWc5_gUC*aeOw~G}Ku)Kaj|`7qbp^%w-A%mB<$pg>t@)Bnw4> z=$gr=A1Rc9WBP=G@d3S92BJ0Ss6d2y;z)m|hXgW(aikxUz5t^v01>y-K%Sf!k);C0 zGoj)~w&M6_@s;C}L8q9PRsf42ES;_U3YK-E>sq3=`<7o21^^iWgD=CMZ}Ju7G>P5i z4!fP40j?{Yx{PFZVtn5o#&^QL3j#1uBZGR7Dv*I5$p`?e!vHAbxEsSz7#Bl=j}12` z$mi0W^r3pdy&M6JfT8kA&$iGvsxF5FLtSS(@Ez}73`ufE8MS*%otz7%jY+hPh(>@} zOVSCe1U~JexgSIG%{Y4L-+o~@%EXLrEn$|FtA9QkNs?N^n#+4YzK;PJM=kxk$HdVK zS*CQAR2N6O#1TRpL!C_E=Q(_mZmL0(Lsi(Zvu+~)3ESZe9Lqbf!x~dzZokHSo3pCNDj}n`Q{jOSa@q_0Z7iDy zPx+}U9iw$P%yKV-kv=*1)!nav#ctiba#nYvYa6lxhu$$6sKL!J1vPg%R)b?rp5Dn& z9cu6o{RSgI>;5xe-Xrq6cm+8t!UO*YC>+C@`Y7_Qp9g8@F{$JQRNb7dTYL((bG&uP zq{>&ZH-lsr36{`&9!XN!87nD-Qex*CWA`H9W7sY4Tv&zYp$a!imgw(WBdV?8hn3dn zBFnaY%!_uEwe5O9n;!OaHe9P5Pt9<=D)XyIt|M7Oas$aHNb*Rq65&|y@Gp>jiDVrK z776?|l3tZ9dwA{OSf67ZE-;Z>x@A~t`O82r{!7c1>yweS)pWhk^+lB1XdKwx(URRb zKyN9iss`>n1K5GeTr-!o))dZeH># Xk$@qx9w@Q>m_i`9!qVmeOfK~weFGi0 diff --git a/practice/rail-fence-cipher/__pycache__/rail_fence_cipher.cpython-38.pyc b/practice/rail-fence-cipher/__pycache__/rail_fence_cipher.cpython-38.pyc deleted file mode 100644 index 10533885739726799b2f4716a47dddff3d29df6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmah^u};H4481#&v_h&_5dV;&y&pgb3FZo^bjcDOXBQ%xCbEkJJAcB|U&_i~FkxRQ zbi)(b#HabA{!pWeeLh%1)NhQfu>8i8+D^UM9C;if& nZ_0%Z1)!c%d^j}{JTF~3NlK11>DNg(zHB>qS>x5O%W?J%S4>WB diff --git a/practice/rail-fence-cipher/__pycache__/rail_fence_cipher_test.cpython-38-pytest-6.2.4.pyc b/practice/rail-fence-cipher/__pycache__/rail_fence_cipher_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 6c9e745bde3e280b4a17790828b4a68ca380b09c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2084 zcmbVNOK;;g5T@jp>^R#^x(JZAD9}R>IjkMok{>`&#ITu0fFFS6JfI8VHJL`cw(L@J zvsv`E`$Jmvl)t2FPyP!%w4IUStlM=KfhllE&TxkOW`?7)?d=?a_J^}~^+k%1KXI|z zlCU_2?wDAA}+5-L&1B58d$z93-0V>{`fy@Pm;8c9#w3-~`fy?(YHl zmHb8m1&@2L^2F~d0tHjauCsgD`~SDVyMkcZddqgFhA)P`FJ#b}j{~>udV>BuAC6@L z6z-HT>5K8z9g!G`zs`zhu+uLN3$KQJ>bb?1@ZSW}Sy8+da^(7x;!F-lfjbgK32^A%gCoFa{yK#eS7Tio3TJWF2u|D3NDDMhuTvT{mbyM%{ zU(iOMwk*5ZJEt%?X;a!5^tw&DK%Y1uZ}!^*O8YIlN9hS|^qLLpyhXb*4RWa=L3hPu z3ufUrpI-A?3K3)6fgL_-5hbZ;ME&R8;nR?QG_fhxEWM=tre#xmfse__Qv1@Pv}yMr z$MXFrScJ!2?}sos~^-?G30kpzYJvdE4%uwg!OEvS>qY zBgnnMDQ(ent8Lj9DU<(HHm* zog-Z@mCc%7F6m{%G;4L;0ApabTG2tZs+)CCt{DdCSE>~gmI|We=-;HoL{#D8xSr zcj^_SxRGuk!t4Vp%q)31P>xb*C_`=TxdASm9SODkKea!8Wmr!`Z2()EL-?`aCD+|P V)Q)0D{D65Kc~~R6L{p!q{{`FO2^#jP@jr1;wWyf)Csx{Rl-8?4kJsr5l^J zt`tCM_{uwDg;(GiUsYUMquEaRV`Cjt7X?E5nmOR2(Lyoc+DNd@4{qhI-9%V(R?vi< eKKznU2zT?ekHfLv#aQd6>)Oipq&8vdg(M%NHZ$Y^ diff --git a/practice/raindrops/__pycache__/raindrops_test.cpython-38-pytest-6.2.4.pyc b/practice/raindrops/__pycache__/raindrops_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 3aaec79fd15aa6dc96e16e1a62317acce28b1e18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4720 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 diff --git a/practice/react/__pycache__/react.cpython-38.pyc b/practice/react/__pycache__/react.cpython-38.pyc deleted file mode 100644 index 0925d6ee5060deb35531887c32b2bc35eba83e13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2916 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 diff --git a/practice/rectangles/__pycache__/rectangles_test.cpython-38-pytest-6.2.4.pyc b/practice/rectangles/__pycache__/rectangles_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index e8e961c972f98146f9b663c0a9e10165c58bf9ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3744 zcmbtXOK;mo5GI$BNXe4?NaDnHk}7SIMi6Yn=o<(M14-bU4ow0Sx-4kzN@6RK$}UyM zgl@?XY0;B^L;ne{J?Y${Xw^eIv$QD6qAa_mpxIsSayZ|&^H{zvl?obMKQ}g8zpQB5 zuQ*6v85kVGUp@!HG^Tg8hOS!DGl-^Zy-XvkM>Dxb4rWN#?3oQy*N!x1u*`dnWq9s8 z>z&caGySDj&5l5mRICbUI%i)}(%Vz=2HXv=Ji zZ9}`tcGz8L*VsL<_kLLZCbshxmwrx`X5ai>y;%oZA@&M z@^~X*)`JCRO;^uZhRBs8Y(r;476Z3!8$g&56PBq5Ms2qi7{khNgpRS8xX4J)S!WnpXLCIv>K1+kQRKpxNv`cN}9q7dVrnkw3@C-7w z-QAj4y%feH1tZ=g>a}QxJME5752zz)(;K)xXCEX`e42)0nSwbGR}Y#osnr5994-O! za308s!~D(+jt>(!K3R%m{`ol=SKSMNZoUM;wnA|5_JB&L6M`rBf0VGhnr3(EQ*+i{ zmIM}rMF1%Pl0YIbc9+1YDj1&IJq7RS^}F1ki4X*K?p03`sJ=`?brmJo0-2KON)RM? zsirnAL55R^l^Cm845RZQ&YrJ;yf~SS6pReqzuJ-P0+X@(6TDtV9V&y=hO~?# zPH&q)S+e{FCLSn|2@?+($N}ELUtp>ONTnh$92V1XA^A(%8^9^JV?%Lnc>@7q#kl+y zR7gCdrLgc9aIivt4=yhX>3Zwc_0Xc!wR@b>us~_gV}maCi#iJ56{^G6Avm@du-{Jk@72BWouontQJD+ zc;Iw>$CY96uzyP9(H8BWVud<-`5%o0|QHd)oZ9}t2G5ar48hUR4 diff --git a/practice/resistor-color-duo/__pycache__/resistor_color_duo.cpython-38.pyc b/practice/resistor-color-duo/__pycache__/resistor_color_duo.cpython-38.pyc deleted file mode 100644 index 00a23816092b5642aabb673684256b993d55f8eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmWIL<>g`kg2ho{X)-|iF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEjd3Yzo@tfqyS9(3epcPPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitA=N-fSTF3B&_1skH9QkoAJiU$kD1BLVoDsQotCFYc- pg6t>;xtf8o2;>ewO$d#!9KvD-%H86y$<0qG%}KQb>G}-B3;-s@I!^!q diff --git a/practice/resistor-color-duo/__pycache__/resistor_color_duo_test.cpython-38-pytest-6.2.4.pyc b/practice/resistor-color-duo/__pycache__/resistor_color_duo_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 370c66b10d3ef4dd1e6ea0994d572f4358e7a259..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1931 zcmbVMOK;Oa5Z?7G&a0GCDvEfB6N*q1iCz(^)FN& zr~akAaNy*>z=@gNHZe*QRkh{W*~fUknVtELn#~%4=U1?G{M#nv4^GOD1Cu@YvI7vD za2k_<>d_k77NKP51THl@Uf{uw6<3CS;8XIJaGN{lgge6fTs^ac8mI3`%Prtfq}!s( zJq_cr=;O5fSTNaxPrDS_U0`v_t#cCC=9huPUGBl$uU3z$f7Jy<$fBc@?e}EiY)Kbl3UbW`1aBB0}$WI50X>#JFw0uw|`m~Cj8Cm zDz_)oNdiM0_D>4T;Dx2?VU`J*zxgr_V~IgrP~~JIKE5Eb4%5FMI!ACI>xAuI$kQb1 z9Ej{BPe&c`Rmgsn4Lc(l_VcJOI`R_kP9O2^@Nqg@VtR?e63Zco_Gqd$QDGVr3lq*X ztR}e35C);&TGxf&zRv3QIdOV$naUYRF)grIWCcYP1x9Z~12nZ^9K&&q7A@9c{R-^! z6=2IYw}ISi94Ptkdm&!01h~n8wm?pF4sK#m3?Gn@#nO(43 zfa}4JbU!}?W!}%+9@x;)&J3^%9Sv0|5{Yyt@pQ3^+R~bMtZO0~B&mcV<~+)yGznwV zo7p3d<#E;|s|OXuBCN16!6qd}BEE#co?j$hNv zb@ts>P5F!^;ZQK9YK#q2K8{guFoyJKb|g}iyo=&K3cPoTxswP$>e`u8ht`lkqzwX< zYz>4@eS7}uy;fcMy>S%hQIe^~-e}5Zvu!q-V(e|h)o^KTDJBxzsybUzm8-QH80%Dp yQu*T~%5f5G$V+yfQ?cfI;^SCKs>qsxlt~AREND8ty+bUf;U_ diff --git a/practice/resistor-color-expert/__pycache__/resistor_color_expert.cpython-38.pyc b/practice/resistor-color-expert/__pycache__/resistor_color_expert.cpython-38.pyc deleted file mode 100644 index 1762f00942004d586db3fa7d26ca5bd3821df849..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288 zcmYjMu?oU45KXFxh&uWQ4i0U8Kt#~lMFi$VP`r;n}7jq`{S&T69CSqZNwV1TDWUGPCJr_)BvlziMa`j*- zJKE+J3H?AN@2%PpAgMIkrN*8zwFEj8)+x9E>Wq%cVXBKvgF>K;3X5TNNeCAQSbW{2 ua+BJP+_fAw^GTlWAoov_|Adg}*IG^L_}it<`J|eDm||yj)vrFt~p2@4VisGxirQ z%9jO;WB4b}Kyb#5i1iH`&2i0S1{+&_+t7EMz5{p6s6KZ4uED-#yvD5$j9bF_apirj z-{8jgtZn}dnpm%GsC6llFiB(SN5McuL)155&=cx`08H@NkiiS9t4J>|qQn2dz7 z2T?FQRW&Ji)`a)=_gnFsankzpkG*^6rdkb>1ittDr!0shqCPj2m5Au|Ig_if{O5oknwJZZY#VFkjwgbloq;<4DR-R{`&! z65b^Wu8nP36y+9T+dzTDA~A9q?j7!ajIUb-P^T-w$-|eYZjN$x3p6G!2xeHuIy3*h zB55mBEx<*)ss49hQq=#*fXX-L>00Yi{N6b_CofONEnPDck%wvk2=0L1B0>);BNTu1 z-h!p*0J8M+lBJrdpulXfxLjZq5arB76vby`KE)|pgO~UB4~pWdDy{Ys2GII)co-k5 zH{{NFfHp8d-&7+d8ZD@4xz20iM|#23T)KGGiRlGPctt;CHkdo$Jl4vAa?fvbt%!i-d+_8=h4QK z7+Zt_xXx2bbvR?YW$0AsS46v7U9Y{ST;HDrW8wR%;rrv5XA#buzK`9Lz9W&eBo?p4 zXi7vUk+0<^D3D?0rzntzM2*Jw41v<33076JGvj7VVYLg&E6jIqif}NW%aiy*tfsF~fh|iPW zv;FMEUiJH3LAb65+abj}7ypQ;m=Li?VuX+;j6d+b2t+3vQO0Hr{ z=q>pnEqd}_;`6Y>`h%8v_! z1Nf_#AQ)j*OhU`FcH-E?B8eM%R`JFUeRyNXjU)&Ii+o3z!`yd-x!nI{<*gGone`*t z^!^4*WUy&zFOG&h9^tV3*f2PNzxo*jH_L@KvzYykgic{HbeYF|7<;V20%(1)^_UUjKnBq4G=~W^pEuq{xoA%10Kg zeEDD>m?4MoR}Vn^Mt&!`1rC8rW9O~KoIh-201UbV?PoGd$6R~EI2xVI8#_DQ>~*5f zZQY8L;xhmC*J%_>1bJ?0SMm7xoJib+e}3w}f)7+b>J1~7rK10mtCKvN^!XW=BcYQ1 zL`I`rjCfyOxczj5em~8@@x>f9a}?)j4rqFlneJkT7Ov4KW#z7Mw1eo-DPqm{mXgxD z$wW=oY~~o&+y!giK)b_u%C$R|d@=MRd(XEFbrRW^0Sct45H0BGN5&;oHJDJ_ zbc}&J@Wmyf?FvNKsMkhgT|EPi@DV)c1V|p;NRsykA z0b;3gZ3s&?!~-&UDsRL35_7=3wfn3FlqUv?(S5%YrdOQ3jS`;S3Ov_as10h#zW6g9 z$Jwd&--s;c`Mmwr{#Ff8pBYevuEA2Mn{F|CzXWT)0#=ocj{qhydL?o@Z|&`O6F!cr zPu%1G22KeNM#G~Lnw<(Xi^%yvza|n$peA(eMIvwpMb!8=1^z?heD=#|D@#ovkLE*Yk!3A+BV++hz}rg@nSApJqkXQ8bB8FdI{m!fpsCG^0F^hEFN!sk9p;W*DA(TNy!nG7axlxvbrdGmwfA=Gq=kEi05MK8$tgd}Wpu&8 zmtg6#^7JZTE>Rt9c62~#8YP@k-J~?h*c47S)on`g;!wPiZFCkZoLoh57saP2?xDbR zBp;$c3glxH?@OoYVf~a22(+Y7Kd=Jl!=L$Lv!#RKRK&SRm2MwQW^^&SPbV{Ep;ugO zM3(j>Ka~&#dSx-C8<%rUP&TARQU}viMd;}=2s-$> TVCWkxw+b%_0a+!1-S++kFpkKa diff --git a/practice/resistor-color/__pycache__/resistor_color.cpython-38.pyc b/practice/resistor-color/__pycache__/resistor_color.cpython-38.pyc deleted file mode 100644 index f8f9ca11187424a2d88b8803301f034cf87692ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmZWkyK2Kg5Zsd`V+`&>{y~L(b-);dQ>AcY)Tjx{?FED%Cw65>`us^M|B~ALMXKx` zNET#ZXJ_u%xxHesn1kTEe0+bB{-b7$M9fx-AA}Ild_f7A;6%E?^ZpeT{b2e0KAw#G}^*SYH7{nXpqi#=i|oPwtD2l>VWc#%$KCK6fg5pC>V&)Qo20 S2jk#ueGYg%`OUD>Ed2v?@k9>* diff --git a/practice/resistor-color/__pycache__/resistor_color_test.cpython-38-pytest-6.2.4.pyc b/practice/resistor-color/__pycache__/resistor_color_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 7edd554083ba10f257bb65bc47447cb8e9917aed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1313 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 ZBi?n~sq-wqhv!(L9pacR>n}HVz!(4k diff --git a/practice/rna-transcription/__pycache__/rna_transcription.cpython-38.pyc b/practice/rna-transcription/__pycache__/rna_transcription.cpython-38.pyc deleted file mode 100644 index 6c38b9ba5acee560fd0507241dfdb5b238b37869..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276 zcmY*TF$w}P5ZpUOB6dhL=;RDJ=yU~xhDyl#fP3bQh)og=lt~s>l04H+ z78rwcI&kPM&!t$S2`J=fBei!{%nk0MuY@_8pe&Z63Q|R@j0jE+c^y@-RkYr*Q~Wuj m>U3*GU(f@eK>j!+p+UMB)b)G2?l^L5k4vu)do$s!2N7P!d^;Eb diff --git a/practice/rna-transcription/__pycache__/rna_transcription_test.cpython-38-pytest-6.2.4.pyc b/practice/rna-transcription/__pycache__/rna_transcription_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 326b1e36389adce774f32030621a4ea5d9131174..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1802 zcmbW2%W~5&6ow@`7w6W}3uQXP12haIFHlN7F5_Jm;B36nxRweA-zv!iVOY^V2n?&f zlD4dP1y-DsG$oxTOdDl%q$Al!|0h`|<6f^#p!^K?&c4}%{6c53)WA80s!qUg!f8rE zI&H1Ywg@FzEv(boOe1W-jFmPsCv+(B3AcIelJJ^nd}v+RVVl#pq+kCHk;te|O+yz< z=249PVzIzEhN=$1i0OKv#VNNgNodbvhBaR24e;x{$sK4Lyv5tlHhG74p>=o<*4i+; zZ}KRRQLbW{lsYN$Kqwtk2s|&?M@kQ>+6D8Kd?%W6dI9x^g=`SX8X0nBnNFmXkoxs` z6{Qk&UQtt1B0akzvIXv+@o)?es9`iXjd+nK!xN!C>Y^Nq&qBtD%7&$kVx7cd2!-wS#hEo?wTGtke_SGN#0NCGuGGP&Dcw^vm;QsDl+R-g^tIn=P^Z zX2>+>V{LeOx*L%+PL(Gbop1}Y!mT_xO~u9uVAhKu|DwKS!i{q{+k+##^U6W>WSclv GxBeG6Wz_-z diff --git a/practice/robot-name/__pycache__/robot_name.cpython-38.pyc b/practice/robot-name/__pycache__/robot_name.cpython-38.pyc deleted file mode 100644 index 652c6a0ab3e51e35f996224079ac4bbf8b260f51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmY*Uu};J=40YO`RGl~mg!qRWXe4HYPJqPL0dz|jtC!@Yinb|9PXbo%Pnh_nu6zO; z6Lw0)Vd*{F@v~#E7mGQNy%%TO3-X_w99m4tir`O(?m&YUd%{~(fQ}wu87q4KXAxy9 zfo@AKa+l}p&AjM=HGj0ezA<{rnk$(^ki8uAu@#H|?*K+NR z^Rmn~rM7J)Z;gNKZ70pMajNo->|Ck(N*U?+r}MUKenaFi>t2Qwv1+Rxk;i%_5UhRe8NNH51P JuDJ7y06#K&RapQ4 diff --git a/practice/robot-name/__pycache__/robot_name_test.cpython-38-pytest-6.2.4.pyc b/practice/robot-name/__pycache__/robot_name_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index f31f39e9c439c55ffaeaeb109eeec1d1f55a89ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1602 zcmaJ>OK%f96t+E&ILV}iBDlQ8g3Vk+BEg2m73virRzwJjgocMTjor(nNha7Xmxg3j zen=};{XOiwWp)3;T_Dc!C{0pT%xKOWpRv#RzVF!cs?}-`xV~kVcD{#%{J_ET1u?P- zk9iA55=jRnqyEi?0V9+Q!z`lJmpF_4ms(bXHyiL_J*!jll*mAaUx^G=+;1ENSyLr4 z+GYB+iVs^ykVDd!B#r-r3Z$D-7riLAOWVWY@)f{f6CU#zjPfutrUDiABS{aKxsF~x zhT<&aRmrR_BN=}sSwq$&hj&xfWdq)cY(mMzwS1{=K2%%ESl7&rQQE#x|ESNC_4jZ7 zzMH-Ka&Pulez`xp-J?)k4k{r`+8fu)V85kFi zpp>hj6% zqeOQxPvr`q(gKP0c;B_q5g&5n!|RaSV0l6(*H#F(SLUq{#Q7%#Z^6Kl12Usi+NTuB zGW777Q`HenN(0YR$KcP^eDZNGAEZpzF&25?o^EBD7(M54cnSvS?V1gU8cafH4EN;b z8L*e8uOMG(&1FcjXie3iQ;6MK)%9*^J=6sQ&0+Ovtbcl}ve?;CT8*smgbaxNNr^=i z!I?i`xxpNShREaRj$%75uLKb z5D%M=hoDI`4W=P#0e(D%NWV5$CS~2p`c`T4!C?QE&PTEwwo~rn%Ee8qoxGw$ah>{z~~wp>}M9CGWSl4y6#2wY5bPG0aN`ZAS?_T0cZ!7gN6y6+&DwS z#ma8la$Ho$LAZtx!&2@Iln^cv0(YX{Hp125bmZ1*$M;5s#qy4Cfqj%4cT2lKMA?oJl254Ud&wUs|W&*Qr7TW%d1lL o?HYbUd>VgVE<_kh@I4!UH2GhZfDiFlRYb@J;Xow`Htulx3t)$YZ~y=R diff --git a/practice/robot-simulator/__pycache__/robot_simulator.cpython-38.pyc b/practice/robot-simulator/__pycache__/robot_simulator.cpython-38.pyc deleted file mode 100644 index 327d3a270082d109dc1659c05127ec83d0f024fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 984 zcmZuwzfTlF6rP#gSq=m|(Fi2Q%H|5W#LB`Li4ZNwVGfANCT6ni%#nq=+q;>C09h(2 z{Ufxr@lUYwub9?~&cx0JzqiYeE11i?U-RDg-pseRGdDNGu-xCLy+2co{U&E}1#sSA zyB83eX}%|7NX?)jwSX2{RDSS|=|G3)OoyLE9BR46TG0jS*aatXiItK&xo#RfL)0(= zjfDx&g7*Rd2j?7606S-~)Da-3yzJ(?d0`1O4JW|J7T9mG-6M#SmrSuzltE9x0ygS- zrzQNf&a6p`EFb!NX`Wl14U@vSR_H@#`aLUA9m``i%3Ul^NPTCvf#AQ5_Kq{wwUd?I zMCZe-y=L4&k&oKu*w{34gZ9WKKu%5D(wNU(HaP4jMQ&?f-S{h`6W>rO8)k)4G_I>I zBO-n}U)^x!`Y@$iT`x+a@v2+?f>E%77orIE!ZT6wHTLPpSy18y4}|?timzeG_T@LO z1^kyKUUZq^E#&wo-sSc*Tx3`ACTb;ezf7D4@C($6yK9#wYa`?~(KD($?Mu>&=!r;3 z^@u<(vWk;v+^krc>UiG0ps%6g)zXbU-|&2u2=8omx8M74eRXTw%dO2Faz3t;lMS^w zuIRE6N?M`CXUyVYaAbV|lD&XM#MNS&V8cOvWR_vMClE}`@`h;eCZ82c{7S=L;0u?h zGc^%Z&}l_P*Dx6vrTmOigIpi>$(~hee36MG+!mi|@tF^SvWl|=(sqVOShML0Uj jD$;4my0}R>4@fMKpzOO~eB)I;!s~ftID&6re*DCLA}Q4g diff --git a/practice/robot-simulator/__pycache__/robot_simulator_test.cpython-38-pytest-6.2.4.pyc b/practice/robot-simulator/__pycache__/robot_simulator_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 9404c12298bb4eade0164e87dfd6d9b9547c29bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5342 zcmcgwOK;mo5avUasE6ON6Wg)lyj%!Pq~_291=_+wVzfXF2bE;6M_#;mfoPD3Ham0y$8TXCV&-+(bSLYp{-d4sO8)@_D!o zcaSf@UATw*8r(;ao54H>w`bX%mf^dsVS0X3#A!ztVIgBb#;^APi7)sfVi8};KZ-Ae z*U}5|nGDizk|^{>8DFFk2&iA)Wu)v};*68B!bm5RkpxA<^GxP%f8Q}$L9yw&3@pd+ zO)toU#muH}xz4#1WIVHVs40y6a4xWE6#e^~>OP8kRikoXfa_S*C#LtE@3yPvsmYp_ zXII+%HpZF4PSSeb!0jEq0zLQBi(VCf4qS2^s-0< zu_R54KU9Y8R=Gs{o!YefA6{jN&Eae~iEOISgFF#hJ*-HiM1(9Bk{P@UHlvw3=8@rB z&rQAUdKMWw!tA*n|9BbyJBazyOE6!qDINYN_>NdeiLWILCy|GfjKP%wxffhCQv7Tb zT<4iExB{`xRMb+=4Fp!kcAuMXnu6ju(H<+@9?fIJIWoP_-@5PWrs4S;DC3cO^t)If z&p%AFLZbX6kTVL#^B!CdY7rm2iIxXLlK10i2_%8#9{&LKjEOcTKQXkCb2+Faw6ruw z@GVD4a8GE>kB>GcKXJ4iR1#WBo+F?okOY=zu#d+_8|+KV;3!`E;W)Er+D@Dbh2 z0Y`5Be0<0p-Ex}D zv`xqN^fPS;{-dQYnEmG+!r!<%#O& zw+GARCk2*zK=vULt;8LRh0TV4!Q zU3U!I)b*gC>$VG>7TuS0oz7jtUl^XU32dIo5|JB3=m3DN5LqX3i^v9%+eGdWxld%1 z2=$Ka0TJq}*drp;a||3l@M8!%fnby)=#3sJQDrr&=6WABnRAKqOrRcgtd?&%UQpU< zpXvS4vfe(UJ);tyDB)2?g_$SJ^35RMe-z}RX9X1ITa3X1wc}Vm4YV0XCrlS7LjxrY o&t2THl*9wIf&YJO;0Y8VNrD)tpM{qGf~2?yRbgIGrJMQx0oE?W(EtDd diff --git a/practice/roman-numerals/__pycache__/roman_numerals.cpython-38.pyc b/practice/roman-numerals/__pycache__/roman_numerals.cpython-38.pyc deleted file mode 100644 index 61cc907a43c36593cea0777edcea49d9c49ce479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmWIL<>g`kg2ho{X|h22F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEw3~;DYd8wqyS9(^3o42PAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitA=%Fj*A(*>H4T9lYm4B^JZxOxSZw^+d{KxP+%T+6^% h1hU^x6G9^_g|L``a<@2aa`RJ4b5iX@HGEeiD5OIrjekbltr6{5GC@)z1mXLcoLgJ7w2DQJdE4!PgX%r1vK&Sr-V+@9I9 zkN&j`;{`S3ErE?a{0I9ezyPyl*e2I8KOQqo!%x^rQ=CcJDLfNv4f&RBnZ_3e#3Aw2 zfP|a+I{hSW4}agSVZbmqIP(F*RnL8ocrsQVl3Qv|B`52jIk zZ~SI-Ofa9IJARLm-|;r_qnBhDng`Eg;YcG0T-N#Q+p|WCkt?5@VIpu_kDeQhLjBL( z!Z8{Ig+~5i15VmrVc!kD>71Mv+^)--Uf>r_S)>;3D4fFBR8)M5$mU`o)TidaN1D3)ah6yVM#Ye_Quo-4}ADf)U8^hUD8 zgV2n?5&5%CIOp>cjVgbHr5+5WjU9V1Fn=nX##@wdRL<#{>hYvG&p~}quy%Q{y323D z(=*lMp$TKh>roCG6_c0`yL;}fN=Vlg30>+N>p?9LRI-j#5pf$A^L~dM)kQAvrUbUC z0NZ?Ju7_46v{b!@Xc24^oUQyGXKNvww=Ti0Dd1##J-QOnCF-@P{2CK%JZriwuX{%# zTTzi+TI+FrKwR-iERki~yd$K_OH`^XyEN8=`jk7X7Mc6PSrwknEle_UaR2$Da@H$r zJ+7~aD_O5bW|+wSUH;_gHZj4<5}7LdC38KrAGyn_m|*JlOOTbyygq1RhV8rsnPjd< z_Ke6<)mlB$Ym>dDjJvJb>Z0G?m*{RN(!W%ZF3{uqgZPrj7q!xgWuqh#2=UInk0d(P zvLV}R!FfMpHEAcR`%z1p2y3~>tEVP--kyY}N;t_}kL(ky|Lo*`4W9+-j1z9#-r;ou zwD4iT%V#Pb4fC9k#iLhRNztlTymW%=U%%&kMAceRxzxH^?|c> zwLB1C$C+i2l*$y{n+ut!$bAN5Oa2`SS(T@;`{zR2~HJU$y^WY zF9J&-SVY>1DT`h4yhAeYSVB`xS=nBX?bk76OCuZ3ifUAqG|OYVwY$p;5(I4e_?Ye1 zCCYV0blD7O?^j?-@VuH%Hmj^m%eS&Q~Fjzh2Q;tb2+&Dkgks><0Ui5U`eBg;ZXnBFkZ}q(_o=>*7iEoutynvSGoLF!9RqA)_puxZQ$1r8iX`3K2924XniPx T@iD!%2K0TwGA0cxmP!5xGA$e6 diff --git a/practice/rotational-cipher/__pycache__/rotational_cipher.cpython-38.pyc b/practice/rotational-cipher/__pycache__/rotational_cipher.cpython-38.pyc deleted file mode 100644 index dc1cb495d6e2106380f53131fb4c06b008bac118..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275 zcmYjLF$w}P5KQh=M7-A8_6jc_5D~N%L2PU!CMyO#6OssC?@z4!Qd*y2XXWM&(Sezr z-AveBXIYOR?wi4Wi1itpeBf>dW6cxOfByvTRX6h@nXlNJ}Wi{cl6pYxPleRmCRT!yb{2y_S`Fd=BJTR<^c9@ pvTY`XsY0jDL0sYL+o)}$U*t{w?QUGWGIYnKmX{Mu;;$Eyd;sKtJ3#;d diff --git a/practice/rotational-cipher/__pycache__/rotational_cipher_test.cpython-38-pytest-6.2.4.pyc b/practice/rotational-cipher/__pycache__/rotational_cipher_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index afcfc3bfc4ecd692eb2f8bd467a1ac2bdec4e061..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2696 zcmbVO-EP}96sG(a*>SoyPO^0yHg>>}1W4_s1$Na9LDL~OZ3<)#PzVDEN@QXs`U^$H zv9P=L3HAgVc9mDs?XLU^yBKzklo)Co&xtAMkcSk>@B4K4bGWqBB9Q*F){cI!6Y@7Y z-GYpU)ERDdcl$ zWVKj&N0&r3!Tsm3cL*QEJ>Ips2m`nGQpTq`jC%4yD#wleUZl9AT}SqEm2!lSog8AR zh7~nT1L|%x%GR;K3SAjz_J}=UG4~}46CEX*@tC;*6qW!(jJSxAKEFwV?kxwpgH+Xt zRJDDDaWzJSpCEkt z!;Ok}O1OW#9quV3-GNP6^33qZ_}eohold7yrsHG$Y(K-8zgB!>Ci1IJbAt@jG766I zF&*aPGR&ZW$%d{Tu%Y4+<0?!7!MGOjjK3{m zp1op=KJ!9d?Zf`(2FG-pKBdnnDhb{gqbXf|>kcn`b$ZoyQFzn;!v||2NPHXg|E|Pk z_FA~=G%uOXE2-CGD!JYQ`FS9G{%E|4R62WUxE|2-Jlvu${Bw6SIDa&q$mivNiju(5 zNq*#gUm~+LGnh&p=Owh&A4qzZxXvlHRX7ajQFuX55+UTj;NE0CZJ-1u7-G~6)2RHL z&K9E7eSdQ)GZ_o;gk@QaF+UWEhvhb7c=i`9Y7r(-_t4<+rB=}3wyJPzQuzskD_ebo z2G>jJAk2?MJPlP9OdH-9`{q?sB-*AkLczWajfi RpPz6S%w;#pGBGRd`hU42rVjuB diff --git a/practice/run-length-encoding/__pycache__/run_length_encoding.cpython-38.pyc b/practice/run-length-encoding/__pycache__/run_length_encoding.cpython-38.pyc deleted file mode 100644 index 68d313950378b339cfe0189ca433927025dd7a6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 379 zcmah^v5vwp3{6Vup_AAU|G)tG0fdmanFUx_P%rjz6_8d=kznUfnE0ix`~?$ss&Z^+ z$06NbG?grkBG&T)Atxafxf7T=yfAn|vY9`af>K*%77ZQUaF1?V z{tnUE9C(rRHg#{)^hU+GN&xu+iVrVuDNPCE|3*nhYJ0603vSyit0X*v!kfJx%;$qB X>?aX_pQ~9I?2HdN9QQbRS?a`3+3-fy diff --git a/practice/run-length-encoding/__pycache__/run_length_encoding_test.cpython-38-pytest-6.2.4.pyc b/practice/run-length-encoding/__pycache__/run_length_encoding_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 763bbc8c29b0cbb38a1d1ac31ab0da5096bf7221..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3611 zcmbVP&2HO95GE;!qGZW-{1-cMTQ&s>2uLJUc7hy&!j@~aC|n=%12?=ZDDK)~OOf)D zsv@B`=RsQZADU6Ql&%?`gEy{T5q3benht@AxYQU1n( z-10CufGhj~1XZZ&DV7>*t((&nRq5uff|}gXEgkM?Ua@OfMz>^@RONex=4k%CLi0@j zrF@mMmZM$Kvo9u7B~Gg^{CzN0Wwq4Al`_;RcA`l|Ph7rRo)2e`*+@ zSIV_^DnN)0I}90*e(HOXd*b@+__A+%9FbnDA|EpE{955lFuZx&cmq#{4ZGg9Y2dq! z?^yV26!aSG9pjE0b{jozJCW04F{ib==f@`nU z+&^p04#=Ez=(_J%k^_XZ9uory5z!o^sO|?lHo<#c(HC_G^~;Y;ciw`Bp02 zgvrK1Ux0U-h;v+|q%qmz7PCQnfT(s-q3y~$`H_8+V(Y1dqd9-4{{Q+Nr;(Q88gv^v zNevo7xqNl24y|dYqw;7pGA+wAM^-H-(HO>bDwplcJbWH_=n5t6AsL7G!u^dwImX=! z*SEd#f%9B~_hSmYqEsTtBA68vYbZ8R zU|{$|6nGl)&ry7V!bI^Uibp7rqNQ3iu1c{Wo#t)5jV|aX)^pRuM+K z@4~_ChoW-O8g`kg2ho{X(~YaF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEjO{GD6^snqyS9(^3V@0PAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitA=PE1M3N!2aL&&(?+hVtSeJiUU-Tf7i?s0hf0Vvw5| j7>huz@Y96Q2&*A1W}w_H4x8Nkl+v73JCLr=K+FIDh*UXf diff --git a/practice/saddle-points/__pycache__/saddle_points_test.cpython-38-pytest-6.2.4.pyc b/practice/saddle-points/__pycache__/saddle_points_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 309cc66728948e7cb99ef687da54828f67d0ad15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4115 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 Ui^C>2KczG$)efZVGY~TX0BZa#5&!@I diff --git a/practice/say/__pycache__/say_test.cpython-38-pytest-6.2.4.pyc b/practice/say/__pycache__/say_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index e218be8c13beee65310642f7f40af86b1f3d1f2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4462 zcmcgwOK;mo5MEL*T9)7Ot9dDJtA*{PPZ$YOqlwX?Eete|w$Nokc~&-4iBy+V94YC^ zxfeYZ=&3jM@c7gR31u$GhFWM@Y`=@R=d7CHdbbMJ+03* z0iT{xBYEYqv5vQU69q8PTCA=qt+#VJ(^xxSFK9tev0lU;y;W+L>LrbR%peE(#|-kK zc+c3&)ki?P&1!`M^u#u6nxAvc-WD~ImyV5fyxm_>2=%eL4jSl>Sv?mxtmmNsMQj(K z1P1CNj6fN62}YrU+JG?_M?C@)Fp0VhQ!tHs6lUNU>I%%l9O^NchXvH*un2FUo`B>k8>@eA_i!k~rDd{Jbk# z&3z^fY(8IGy^99!s=3lI!LhB?o5KCZb2_Wyfsk94+g|NRbIY@~#46HEH}??QN~hKPj)E~7i zTX?-?QiI8vROAGvoYd(AqJt#6GlX>|0ZZ{71rv$K znvYYx>8L1J_m5aU-jAaYf>$&~4ueG`j)`)}o9OTZnj-B!n3mUyOn=e8{!(E6lf!Iu zu-|{W8bqlve3U}dYez;YG|B|4g>}oGxj$Gx=K2q5Nr)pNtnD2v3|HJ2b~XG&)wLeP z22HCO7EY9RhhiH3C{PAOL8?+C{DB(sMstSg1@xO7Yl9Ek+T6>yPjLM4$US1-xOoFD7I7+;e;=pV; z_XS^DTT9)C>G&L7r0KZ&N;-z~mSSeu!`{I!h@n4|tO!+XN9}|c;w3OFA|4L8L-Pqw zan;mJ(0{xrhQ^z$4Q(dLHl`08)8`{afSqKMCCaW=Si%RxJ=@0692|hJyCf|T9YbxyGtkx&Bz_` zSHQlaQ8ElQs#f-mM%QY2mhJkL^-hn+twrAH5qm2^9b$E@NUB#^k27@1R&14ZFraFPNg6+u$9DQauHGm_SpcIBBB z57+to)ed(d)AT=#Y)qfe(ZGj*WIJ%^Ya0L=eK`vw11x=Y!1VZYhlS;wzjCD$D$@)W`!23+&A)0M-4F*}tIO`-YWeT=w60p@3L1(-eubv5Z&c!z<4THyT^03E8pk_#3bK)r7!btCITh%p-S>X(x~e$CGuglC;BKb)}MQ zwZ94i2u-s#K-EvuOs%oir>iB)caX)%S2s!#A9nf@yopAD8FXYGl~I)$jDgfPU_KbA zY@iaJe>8YNf?*9fWG&ZN@T!}{T^93{ZA&HrKdH{ZgV+$eG8UURI7T3o4mLRZ$ax zm=$xKxe%rEu&;nk6>Jv7xlS$g#G*KVL_%L&5EtRMA}$@zh|6N>h)7pl5m*0omdPeL zq$jjZ#j;pAqG45B6W77ECO#22;5QIgpuKMzzlB|C=tk&ld}kOQkGBln3Z1PDL%E?~z8%9@j33(8}RdYw16xqwMn-;{bc&j#!AwN!DU`|AV6W0(QCZoA^n*<59+qX+ln(5t`{up@KQd->KOX;6!B6>P7$^GjH!)p2@~M9oLf_Y+d-zn zHkb)wK1gzom#OiSRLIxH?a8!Wv2_ew%lo!abxG&@TXRr*IMay`X?= z0zmv8Wx_p%;t0A-gx7ISV9>3_MB{^|^1h}7^%{6H-eb7-6y~93ftHS(1bbNB1cFM99070wItQOBU2#_E{@F;3 z3pX_oQ)BoUyp4FkqPrEnf_s}Q=6?hKmj#Z9-&8ALsp>#NzlHyZY8Cc%r>uXi_2@~| z`hMe=pVdXQ`yg5dvb(S}4g#So5btPiCLL9u#VaM{eHle2h@yTbhCSTRMbX}n_ezcW z5>8NSNX{d=aYISB7>UU$M847yJ+U=rn); diff --git a/practice/scale-generator/__pycache__/scale_generator_test.cpython-38-pytest-6.2.4.pyc b/practice/scale-generator/__pycache__/scale_generator_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 494272b478f1ca7d0b7e781fcb20a66d28219f71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4701 zcmcJTOIO=Q6vs94OE%_BAOw=|%7dKNZj&y$$mzj>ge;0rdy;Il(UCoaQEJ)lNHoAn zSII}{2MDJtcKtlF?W$jaRqwq5$+8*JQfi|+Gqy&a-~HdYGsBzF(UJkL-|gAmKgx#j zCpP+DS!is)6>Ndw24`)lJf#x$7WXYCw|zRBBp_{MA(e9N|&v2E}S&wey`R^;Cn zKV<9@XRnO)++Xk{qrT2m?p4!mizYVvUnVp*;0k^NBk1RBlQV99H0(_DNIT1OJP++0 zFK`RWJTLMRlm$M*%TQW;l#fAK%9BeiOju*$;D*wvf8=s7jarS|IGLMb-?ASzy!tadM727;DH&+$gIyJYT zc&^xsQ}YGXwolD%C~8M$4T@(c88zYtfsoLDj7^T;A84dWUKWD^C2|4)t^1dEuTD?76ZRjH6dDvJAG!j-Cwrvhukn{4dUyMHrDX zw;OVVDz%0jrOLC09D|C)AuDsMA@fvu-jEi4j5u-<4SF;(H=w5O>M?fPZWv6%O^F{K z|0_Sx1BTpyJL4F_~sKU;UzXR7vMo!?@ z7--7!I-!uiK-^vAhB_h91_C@HGU{-aQn%>vVI-u!1B4J$j$$mNO!o{ozViM^g^h|@JzDQB7>f*Ss$Cc4&)gR8piE@;jP&t_v7r3Ix)pN~6Q`I}@wh#F^+gB;J z2Rb%C-RsJHnn1;cHCj|@N*1t5i)lP-6>|}h81;yebbWZZ*-8RbD_viY>qaAtfixR$ zAEK=T6LtYo&gE%miqz}v$-~yUcHgGp?&-8k^|@|5T|6eqMzI#*A)#KmNy2M)oAIoB znxb3N(e-z^Za8g5p}9vn^*)R;$|-)$*W*nS9&C4g*i<(i9~0t63h=%TFx_bg5krgi zcsP>>_IMU&t>VBgZ)jmmmV26Z6sqyGOBPGpg7~Djo^p&RyUh?zL4diH0M4?bWgTFA z{}3Avh}bX#r`TAlFu+wvE%;Vl4lH@;U7ekWXuLEaBbGgJ5V5>WSf(yviSHj`!B`@e zM`;$;$`6p_QzV6YqJgCB7$-(Mx3g2*sp<6?k8+0SoC)%M0x`jkR&;{&;toR;_}fHr zwG#!2K$|d1fl0EDqYhF<4RrA@nM;u}qT{vbF#AIS1?L8Bl*RYg*JqUFI33p)j-yHr zF7f+t6meA9aqzSpeIsY#xe|BlatX~cniVv-$CLNaJV5gh4T>r;N+mi*R?*;ulwYHH zjOGcNQ z0K9IeBE>uDg+dkMk5u9Ovl4WsFma`__B&pP4SPJm(|vN9KRejHhVM3A_zwY&`63u) UJ&oM?9cmk3xLC%NVVULJ-@!T$!~g&Q diff --git a/practice/scrabble-score/__pycache__/scrabble_score.cpython-38.pyc b/practice/scrabble-score/__pycache__/scrabble_score.cpython-38.pyc deleted file mode 100644 index 86ced56a4121fe1fb50e4410e9254e8e923c6bde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmWIL<>g`kg2ho{X;MJ?F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIr98hVr3fSqCVqM8hZd(673(MJB_*ch=Vj`K7*$B_<{1r0NzY=NBQk@nEiALFFx0FbiaMG03e9j71>Z f{WKvo!cqu}87Oy)!zMRBr8Fni4y5Zd5HkP(6r?rK diff --git a/practice/scrabble-score/__pycache__/scrabble_score_test.cpython-38-pytest-6.2.4.pyc b/practice/scrabble-score/__pycache__/scrabble_score_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index a8e59b89c585188e1248378981a8bbc5c8340d8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2541 zcmbW3OK;pZ5P&J|!}31-NF3J=iagOa+n~Gs0YTt4DSC4bPEbG>g1e->jP)`}*5;wz^H}7eOZRqi%r8o!!kNi$}gE!w3-W2V(%kLUthkJWu z&?;aivODl>OHWcICfF<&9~wLGXbwWSY)?G|6+0q8bg<{i*W zyvuu_1K#H=pqKe7UjyCY>--kzF2Bt;K==3^z6rX|zX7BzyS_J3Y&?#{9wNOK+DtrH z{Zqj@dg28zyLjB!!hG&B1bQUJ~U}I5~o5e|KViO}LVx$*vKRJh8G^uM+1GK|z zX76ByM(GKdGc9N&j1j62YiV4ccxOLc+2!zBo0@z7MYUiV)kYDZzH`&9TOU z%RF{I{ICPMQ#KZcvSTJAyhfjv=zp&CY=!aeV8sTMCM*_|+76|0 z%5%7ysqImUsde6?+y%9QnCmDoMJxBQZDH*$3jEO3Jroa6JVx<3LAe@cDb)ah(`mF1 zyr6OQ=f(`WHW=qJGBVM&x0B82MQfX8Gjz&u{vSZ5$xw+CC5^Dl7q9Hnr*|DNc0Odv y26-YOZEF**=tb6_r+N1u!UnIQ>jh+Yhj1Og4W7+?^c<71#*ZN&w@BdkTK@qaU0-Sd diff --git a/practice/secret-handshake/__pycache__/secret_handshake.cpython-38.pyc b/practice/secret-handshake/__pycache__/secret_handshake.cpython-38.pyc deleted file mode 100644 index 765ff5967e8d89f85396c6dba8b9d43dd42f578c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276 zcmYjLI}UAi`SSEBU@c2>?vP+#)i z%)GqGOzis}L)?XY6mPl#7Lx zBmAoq6u`iUm~Uupj%y|}*x2%IBk!sEb?h;t#@O*4gZ;vw2G%DAmZ-mLeysT|FwWSa z{SS`BP7jUD87AX#5Q7?0OSza>Il{jJ6hhDFn_z(XiTSmBRNn#{>R7j-0S@XqG@*sM z0d44@cAyIzsGG0}Tc}&`1h!GPVF#X~?!YtHMcswxh-xp}ITJ%E(q9SCMQ|zJ2$c>E zoWCgaP0MkNf3=I^clHNM4KO|;u#xenNy~sk)lPle#o}ewRTy91m{~heO33u*_tPMf z#O=n&EG44z8z!4ry*=x{MFZ6jdV>IxIP9MYb(toUzW7bZVW`Iai42BmI23)QQNF$? zVBR(Gc>_-ocyBVxHtB;C1b&`K?sW+_&CZPLZ&r})-LroTdC$G=Kr$Uf;$RRV0%_y4 zvO$6f=Yk?H+tah=wp`ohXx%OBE#SVYguBA=5x70qz1;m%MwP~Vx1d% z_)*RcsEy2dc363Kc%GzOk{uEc1P2}ygD@66y-GM`K@zKdbSv;y2geG>N1(=~MbsLw zhW-F*DL!CIe}?+STBuhzE}>rc9P%h0B&AaIBKLJT=5QWUCi1Ms`8a_oZZXd~oYT`H z?~!esK+%jYEMz%Jd(`i7>q>YKijdj z&0#xp2GcM~!&qgVqsffVYx{gMqpj@aZy-Fpds1Ag`k0^fBaX{tc_F^Gc(44TZzAUPNSu^EBb z8HkHnfJ6!dPz|HsN(N1)TWrOtMVYC^x7c!0^U_N)ia-j%#4maM;-X~z%)FA+qO#1? za(#$GD5Y0W3DlaCnVeb-(oqbugN3n(6-fDMLTH3h5EjVhTO2mI`6;D2sdjK(JPZK- C^eNN; diff --git a/practice/series/__pycache__/series.cpython-38.pyc b/practice/series/__pycache__/series.cpython-38.pyc deleted file mode 100644 index 10d154aaa585f1e700198ffa0e1be4dd18ae358c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmWIL<>g`kg2ho{X{tc_F^Gc(44TZzAUPNSu^EBb z8HkHnfJ6!dPz|HsN(N1)TWrOtMVYC^x7c!0^U_N)ia-j%#4juTP@r6~exhDdVoH8q zroKyRadt_5fqrU5YEg1#ajt$rQDSmQW^$@N#0)5=ec#Rv_C? c6G9_wfv`Z1y2W9Wo1apelWGUj^%;m602Q7zLI3~& diff --git a/practice/series/__pycache__/series_test.cpython-310.pyc b/practice/series/__pycache__/series_test.cpython-310.pyc deleted file mode 100644 index 6da9459e9e65f2e3b74dddd68c8599049d800074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2827 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 diff --git a/practice/sgf-parsing/__pycache__/sgf_parsing_test.cpython-38-pytest-6.2.4.pyc b/practice/sgf-parsing/__pycache__/sgf_parsing_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 11fb1e8716bfda0e9f5b4b65786d99ffe4f8cc46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7358 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 diff --git a/practice/sieve/__pycache__/sieve.cpython-38.pyc b/practice/sieve/__pycache__/sieve.cpython-38.pyc deleted file mode 100644 index 59e909fb80f2a5de4a628e171f989a7c859f53f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247 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 Q5}^goI%08GYwH{T0p_$JzW@LL diff --git a/practice/simple-linked-list/__pycache__/simple_linked_list.cpython-38.pyc b/practice/simple-linked-list/__pycache__/simple_linked_list.cpython-38.pyc deleted file mode 100644 index 13371d945c188bd7718ccee17aa2d6ae6bcc177a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1654 zcmbtU&2G~`5Z<*N$N2@)QVEFz2QEGk^8g4%f{IJ!1641%tc+(vtva^Zb*hwW`zBn- zEBVS>aAIatH*OPzN;cYA&rWvco1Jg=Y%u6D96zQo-W8#Rua11;2A(z>>%Hn^wEZ^wA*-mp-c;MA{CNH*obrWSCpZWx}i!NC>% zfQxGj+UUcpoG=F&)5&_!H=<=9aB6}G?3Ar|xMC}-axtk5XThc@fB^RB@u`L7}3!Okx@6WL~85O`2pE5^&Mw?Uqy@gxRIfHSTLV2 zoJ=lDui?C7oYQXTyOdxS&7}}kSBQBIiDr>`w85x|N}C&RWKid=DHV@< zwr4Ba+oA`RYl2ggsOj;Q&A6cm-$fDdkSZ>8po?o8deFz!g8@=!SanZK4NtIM|0d9; z5WZy!QMu-lbt5NJ5XyK!C~qr%u!-_tb>CT;wh*bzgm~HrG`bhanD=MExs2eT5#&iD z2-zNUaf+Jp!F5$mvC!v7e~Cc0y>qaOym-+FFl?lNroH`pN?zjIA>m~sNVDp-J@h-O zM_14%K^$4P2Nh90BQYXD*R2jo+`UhYZW*G1&TA4L?_;;De~K(yJwuH&!D;?p_Y834 zzg3Nn=S6u%^gmw4vM7^03w`?`#9bhsqsLd|l{oHkMSAEvrfm(5s&nVk7wsY~kh; z;rz&i6I7qq_wDwg;9s*=t7K;lr1mU>x>F!wx-{ z{#ZDCdO59RlJGu zjJPJQV_Xw&i5nQtiksqXjORoPHop_Cecc<3`@ziOCxHq(9EKzxvW^hHkDq!CB4qn) zkMFWqJhXQCJ{SDJBDA5;+LZL_p)KjHXwg?Hkm1AcCw@P&`@!(giX0X6pGCHsgojKn z;;G-h-S`GisSSVqsV_#u-o}GKeHV_#8^Oy!c6w^CF_wNO>~(?-r6>DdU;77x3gb(j zxr9N5UI-J`$J^0mI`9H=pt-T-D-W~qb^+{|($LI~{48h7S zuqnpr(AqpAoMeTBOM;LvqJg96ivDZW8+Q9aI2vZBKN<#0cqpEIo$q{5KKpVNLVMX+?;FLoFNR!d80FuGU$ZlmDA7=o3zY#ZkL-h zUroj=niV-(b9WO5Y3?5I|1IxKo|Y$vSjTF1 zE%F$>a%!F=@bfTH~1>PJAW(36Z#9)WRT2c zfrKD4h66?GfDw|jY#^60k3&bppske`$ezjzzds2IS#JWifU*SGWwOcyEGR!GU`yUF zH|IJu8@_j~gzYJVrtWUR-NbmgO5zHMqS(ED64}X`Cf<&%Y4Dwo%Dpp(?WCvNs(0}Z zxhUqZxNr`*CbSjWI(a(@nOl{#b!YJQ5ux2O4vd`fL~R*2)^NGda+9?>{?Ma`y>R4Z zXHP&Y;yvTbe16_4S5j{AZ77ZdoGj%zOOsHhkas}VN}8>Ehtc=fC^8Yukf8a<=#J8T{#^8z+dDDfSPTH zEp!^!H9SQFI!}Q!BR;4>gpk)r+#o?AkieufnLQqjrDn!_n3@_U?cUMYdnQMN97#5y zImTxh=m4Kv<@n6elL01E2%h2}2$+2OGN}t7*dd}ME)HNxt~l_piegYhanP}&LBsiT zS6C!a?7L{T{gD7OD)L=rn(eFkY;Sl<5#Fj5rauk*{NO%4&4Hdj6durdKp3w zkt#^6q#WWV6c>dubs_`@tx9wsl9aKy9s5#kqKh^Si8BmdhJ`8JRPtOnP!9KKB{4*K z!<+xa6lQ(NoJxLzo{W)Hd5PoqN%A%1VFL(k)aY|}%7lc@&E?`c`mFUSpl?l0`^=VgwK}q ziOi69*yd zvSejKzNhrI&u7GzAL60RQtLJ@M6L{U+=)U?+|YO=kEGkxgxwm8Eoh3J@A92b$}K-p zQ@M@TwT>HfzJH>da<6Z;&PT524GADGs(apGBqn`2 zZg?K;-f`E|J*-L6mbj8oeX;+owQe#-joEb qrs>4APt?~(?h`z7-^T_gSx{tJ;Fw2ns z0*z$_H>?nb8?k3aWFnl2L$d0Wwl`a=se1y&9C?fMF&e|Lo97>FAwukJwFxKQ>b5c7 zQSV^BGr9KGd8yI|W!k2cch*1lZ71!sb-MJm?3~hlsjc+1^-67jBfu!_UP1y;Hf0Y$ zpZY-&e?6Ndrc*U1;Q)=QEkKw7)UDZ76rTb-?Nl{Z-0>vsPoz7dH@b~DtVsBf=Zn!F S^bV)dKuE5~6-%1>Lb4w(Oj-#5 diff --git a/practice/space-age/__pycache__/space_age_test.cpython-38-pytest-6.2.4.pyc b/practice/space-age/__pycache__/space_age_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 4b212026b8f5840240a498e4f498137d49fcb601..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2058 zcmbW2ziSjh6vtX(SB!vVaNwWyc=4NtkyxZH%>>4kK z76}L`Ok*V?38~TqTRXM%4^UVX6dUaXv9a>K-Mg@hcOW;%zWMdtna_Loc4nne$Py@r z`qslX#|f#Jc9y22<^c8IQqtLh1s zWGUz;S(<53r&xw%p-!_L%R{ZP0vmuj!v@(9)LAwRyN~$!&aTT`x>X7rbPBf7-x+x1 zX)q7TK5;3d+jL(!0M8B-^b}T67cKJs`L)`{jqJz6S5uXu>gP-;xp3z;JhLv4U)P$p z!A;@bJ)(X>^7`5l5owtCGgn>#sVtkNRg*Pst31o)J-6wU`2#MhmTZ(AVOCwM%F7ZX zbj7T-TL!cY7r0AK%OA!@Fw)tmfZ(_{p|KgOj&UIEANR@huSa2W{hW^DrZL8*=uSHn3oxk0BCuzBM;Da+v%cJY zJ6T(RbU2<@z-q|Tyza?EFap!@d$D6d}xdNhbGS^H)~geLgUaGfR?7~3A-!v zNHoNu?o0%EqGympZU4k?5*HT2lyE*z#XdVE_Jr9hg=55_ZsNa)Lv8=WUta9iYimLI z5GTgOu({)UHt!nbSYot=7bDEQ6QeC&EarU8Fl@8I4a3hGMx)8RI=1tMfhTl0BQmh4 zzzb01(B#qJAu0yY45GmUDsqqoM;e}HLIr~_NK|N4Q=`9N79mzWtL|F1^z#*`Wt{ZJ z4X1^fR0?kmt7(@6-xTnv_?eR-KiwJ2!pmXe319PU%f*hKk$5}c4G^5azP1dbGbY?E Z$kq+o*RF?=xQXYpL_ah#LNq0x{0rxj?2iBd diff --git a/practice/spiral-matrix/__pycache__/spiral_matrix.cpython-38.pyc b/practice/spiral-matrix/__pycache__/spiral_matrix.cpython-38.pyc deleted file mode 100644 index ae0d7debb4ff4a09519b42b5de0041ca2b80ae18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1368 zcmZux&ube;6rPz~N$ag$LKB<@N|~N&fh;*tCd+jZk{uTWz_S%#0Jrx@Fy(du zCgd*^ZVv{+S1|o2ut+i{l1i4-6&o{3WF+HPWE{!P6VmUBj{uxLDYO$g|5gO2FZdz% zjXYVk@?06^L{Od!?$1i$6yI3v3{-P{t_=73h2q*Eq$Mjv2+EmZ`b_}64qD^@L5|Jk z=Q=F-sWpn9i@ZdOkvuGbYo_zua~*gCG39Ei9LVn@|8Al9tTb8B*6`8;i-uQ&wYeW= zmszfOu#F1*2Xbf2`2t*MP2m2@o~xBIflKXF!{Q&M2S_WJa;TUL}ECkss+}m}@Gd@7bEIqd;X0avWF%JLo#= zF5+b8Zi9XHa^0(XvU{IYv|_Z5P z%;^=mM}B2zF>@NSo#x7MFE;oNFI4yDCoh&>wWHOBi|a*;bzpk8_)e+@HYV zExykje!FJr#~bMyRdB|iNNZ_P*EcXg|G``RHKySfEUG(Bn7MMOuVbSwLO*dm6uPbR zHFY)3#$BoMApDp~S2LN_R5v+sUF5?8s`s{B-vyN)z(VLgP2z;^(mV7HW2AeNP5=0mvwe&LR0GQ0sgcf*S*O^+H5kZci#1W<6#46AI2}zo|@N_T--i%C+YZ>xl#syljEB}Lg z#j1bFTUPTIKtlI?<2Hl_Bx=iN&Y9=;eP?F;qTOx^em=(=JD&m}z95)=xK3>IXCAR3 zL2@8s=}K?tdqRp~5QnmAsl_#J@dou_J+4dfSddS_M?pbadlen{af9SDu@zdLN%Xd4 z**240Cj&K13Z1|2qk8u7IN0XT+-H-zWn+&dc^^gWS5wCUg;e7>q&h`h)~G>EF6*>F zEiNN!^OB3@(lfWz6Svay)D(TmlO8|tLG&SiW{u4U@vkT($pe{*|2)v+S-hS`$3w4N zNQ_B!@z0yxWS{}_P?mv72RnyCM;v~A(tW`lOgHJgOlUmHyN^=yx)@Ko>HAdob2IEt zbkZ;Ke%h@xxK(Lz6dfs|3I^Jl?3K%KR63j#d#dW+=2Z+<7IOc}Np79F?!RYyj;Hv+ zmSo273}Xw%8rtX@4A@ns!CtxQR^sfv%{h-1v?XphhIaMW(0(2;2M#N_R9t3f1{^0p z^N{$=%e*PbuxBBJUSMN^)cOd2i+SB)uCS`{jxzavs&23Hm}At}evSI%kU88C$Kk%o z&QG{~M$WjgS-Iq`N{!6V{3(ZKPoDv3aL~xD#atE|>qU5V80ca{)SZspoedsyI&ydB z$l;oB4 z8_GI)a5OD|=oOe{7$okLdfeUQF$M|?8OWNv@qPc#Qhs+%6@YfCJY{E2m5_DelvfF- zCi|>Pr3w2>v`j0sN^9(|(*~WTbF`U-SvXbde9y^nLa9o<3%sC(0v1|WCj<1+7ZKuE zThO$w&b7MmEb6cyECjA3L}!f#eIDj77$@-Qw%NT)JkVgElhtd9$ p7YN)>qKuxi`!L}@1D2ct=g`kg2ho{X-Yu)F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIEw3~;DYd8wqyS9(a?uYhPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitA=E-XzfO4TjO&o6oX8D007`aH#GnN diff --git a/practice/square-root/__pycache__/square_root_test.cpython-38-pytest-6.2.4.pyc b/practice/square-root/__pycache__/square_root_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index a0be44e4a49ad82aa0033638b9279663fa3a3cbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1499 zcmbW1&2AGh5Plr1r=4|M;vn?OQNPKQiUqD2yux7Z7+MVwy`5^+06!fBM9Qw zJ_v|Y-h-#`l~Z1U17&8HL>ok-D2_ayv7MQ3#$KP->lFg+yT3EIF$npIMzL9796?tn zAUNSPB0kMVBQ^~}No@Hx%~wi(3092Ai5=gem(D)vS)=%-;{czOQM zF#o@LRtuH_WNS3h4OH@}WWd^WaIY{Vp`RZur_@^Bxps!eB15w`!!pd!zqC;}C@`g5 z;63?=Xm1PV)*{;5jA$49&oY=>iS8_A-s#>eAU$4Hq)vA;rnktHm1Rw)gZ9q4Ob6}F zn0_Er1H|nox3yHK_KSV2?fmSXtSS`j-H0lrzk%vzCDry4)qeMRr~9zL^>h_iw!7CX zYnQQM5DUh1g|Rr{;|TQ{WB85cE3%3hS%vPRh9A0ofC9@h#GW-!lkY` z|79!9igqu?VU&hLrE5o{30qjZY&5~NTKP*6Cc~B#A7z*dU0zISXFgYfKW9}4q;|){ lFhwJKS+siw>Tv+i3Bvr3QoDzF!Y}bMDi=}7HgS!b{RetXQ8WMm diff --git a/practice/strain/__pycache__/strain.cpython-38.pyc b/practice/strain/__pycache__/strain.cpython-38.pyc deleted file mode 100644 index b181553415b7f0e338f7a18d24656c9e47c61edd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 365 zcmah^yKVw85VVgYTq4m$`~wZ{5kg2wO@pqXGv1A40e5Eikf6_>q`F_aHh+;SYx7E% zk!E*B^6rky;qXNXzSg6UQu=o^f02n<2>DeCDA1p3tssM*bPf4Rjr%UXxglyTd=qjm z1=LEldfBQr>k7uh5i5t?b07roY=aahQu&#hl9AZh$;LumdGn6EZR%j~gycN$O(5$U z@6d2V)>qdy3Fj`~B8GUFQyNVJ(f=o-IC6>5yQ`GwNo+R&&(0F`#oQJbqLonAV+*qQ0@!l4C3qD_$uKqWE9 zJ~=-jBX?HfZWITVX?s5g@rnS>vwPM-5)j~e`06) zvY@jIkNgb;BaBAGqq;Tvra>s_Tb@meFOKKH7bB|mUC-^$d2^KfLYT>{&xBdrIjo!jT@ly$^;s%k8hoj|Y-4o_bObavs9zk=X86whFk z8J~$~7Op&t+022y&1%er)?st34sDIivj(&-TVRXO&aox73~imQKnSaG`=s>U^{4Adj6G-3i5H2sZ8N7H0!e#zJ%XLS-eagny=sGvIM=v{1%v+ zFps5H_w24Y#eG%5_3WGCBkhGHvTnZOw(%hw31Segx*Kdyu{`n3eClpWh(HEz^1QN8FrK-_2E#T+%(C`-G}iv0UYWuPVqemWnnN?Sl|>{ V5VV7fRTJ)#RpJ`U=IRTV{tNgJv(Nwl diff --git a/practice/sublist/__pycache__/sublist.cpython-38.pyc b/practice/sublist/__pycache__/sublist.cpython-38.pyc deleted file mode 100644 index c831c56e9f39b39e71f2b2522770bd28460c9dc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 802 zcmZuw!H&}~5OvxvT_P1CGXd9*@Uw-X!z0vsm!>ws^Mu)Dz-YSo}NKCtk97;7N&vP|+e{ z>#_CO2CAp}U&P`>MKduPv_B#t;@eVtzp4e`g=7Glet!Pyp~l*}ZH&vME;JfS z;wuU#CDW~IYoKwmAYE{gmaA{9Bgidt`&&(?!m>3S#Rak+l3-)qx+@{3((+};;OBUs zbebJqtX2@w`g7JWZ=5aAGXd7tA=Fm275Wit_QAHDL={SBc!PIKba(+JQR6St6iu?x zYu%vIGO=!zhE;l$I-_la@w5o-Ka7C6yW%yQAMm6Ew>+AD7o*Gx$i_vm~olU#DobovJUnrxHqKax5XY*IrSF_vQ)miZ?Lc?tNa_KFbi32b2kl-2#yDWUQV diff --git a/practice/sublist/__pycache__/sublist_test.cpython-38-pytest-6.2.4.pyc b/practice/sublist/__pycache__/sublist_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index eb53a191557e7cac02b8d4a90552fbf2b86d6fa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5197 zcmb7ITW=dh6yBR}xi$A&Q<^qSQkRlI3lb_-)zX%Ws4O6fko>aR_>9ehckRxuTT=0s z{tysP`49X6B>us^@`C>YNWeL>+0CqHw;{GXXU3ixf8V*ynLU`C9MkaiOLMXP`?#k4 zK?C_^;ou>Df_-d21HG#?bs-JUG&EiFtY%4%e0l4c$H?wt2V1%ty%NNnq%I0 zb6nRx)xZSnwFVX|e>ZV#HYY*f)9R%m?yNQHrKl1N4!dp;MwPvTkDqIje2`W%US%w;n zp{&3-OrWg7But^K!6leRIR-N@i*g+1U>@ZJEWjelNmznqlvA(*t0*tQWmrQw4OieT zlrwM@)=|#FHMov)4mRKh%6Zs?EtCte4L4CPLLF|QT!OdZHp*pq2Nkjtjqk;Z*k?i5 z(veT{qJ9ZKkMR>MV)LW+lNRb7t)m?qq4BdpmcT9a#)%n?J3+vB`1JX}>2gvJr==%) zWCg6-KGFCD4*zA;ync9Oll_7j+&G|r)bv+t5|^FPi3+(2t`X$cu#=D@D}vcEWr` zuu3>(4aYCx%nT8Vzg!~Qf=Cv&-Rk+F{aIPOp`*2P<7=T0R9 z-jcw_xX(e09v`sQAaq}_jW?o|CMsx28A91NWwavaoGMwI9G$X^^#m0yG@ErBzKnbD z%hVJ?Ul9Hh#7W+E!dTl|xF*r|HN{~@XJ3c}!52vsy(L3}ye0Mc82TBfHP2lTS1(^rWo>Q$fjD3wS5sSFDF_?7sw#~Ktg;&K^*%*W`P1X zJv7%d8tzaIG$|{}x~(T!P`I>k-xXYz>lyC~%x#zB0V+;K&kX|C@7S!%JUWZoyyw}N zB74Y*CVVJyxvy}!z(xv3I$VU~uVY8{BFy>7vXk{6s&x1{v?SP=U2=Gx!TkugOF~wq zb%BkFX}y)96`L+gDm5J0Y)JKaF~fUBhI0Vi(Czt7*9NzP)sSMs2NKs${*MXI-%??n zI&4mrhYkyR)@9==uh5)pf^3fiybpm=#Zh1= zIwgi8;}&Ay64(RBV~ITu2O)NoV$UCVhsfuN#Nv*^;@ss5AF7x~qA4^&Gql1|SngQI z`Y~2f>4nc|h@-Dw5qF@->@q(x0~T@tVw(!FycG(U)HY|gIKR!80S!y1tM86!e`I3%-z0 zUQtlWGZl2Hrtje%ao!?L18SIbJg>zgK%~d|Qar-@1C20iTd5674fjt}xBCp$?Y^eo zD)#E7vukN&Q3j4m-0?dswo2YQPsA63Pw8`vu&>jgD&+aY@4o+@h_Zo#px2yMG~ev zFsBMb*QB+YRw9A5A>$AKB?>#qJ-G_wU3{ckrOt z;p`=MLl)K2ucAuw-54$w!Q$|!iouGxHwdL?Bb0J~6sJf3oKX&km5D~~@7FF-Z SN`F8JMVPOu&1zL+t@a<%)Tagj diff --git a/practice/sum-of-multiples/__pycache__/sum_of_multiples.cpython-38.pyc b/practice/sum-of-multiples/__pycache__/sum_of_multiples.cpython-38.pyc deleted file mode 100644 index 9fecdc40a46d04db5f8d703bf077e1164277543a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 290 zcmWIL<>g`kg2ho{X@)@hF^Gc(44TZzAUPNSu^EBb z8HkHnfJ6!dPz|HsN(N1)TdX;mxtS$VoVlerC7A^|sl`PgrC{QhpMGd@YEiL%qFz#B zN`79ZzDsIxc1eDLeriQ(QF3N+u6{vLVsc4la;koDX|8U5nl9WFkU)HXT0C4pub}dl r0Jng3PLQ0v>aAQqsh+fX26eS#->Td ztvw=+91)09{sI0D&c1TN{{knzZyfJ>wV7=~@M^zr#`cWA-}jzpQ&Zy>T)#IL+kd#0 z^%qWxR~aU|@K=w4FpJrq)wDHt{E}nYmS1jG?CeRkS%oK#SMzJlnr%I?Sc#QiS**;f z-?%SJ%`s;0SsRrUcCs29b~3ACpM-7V$6h459#<`VQoJ0P?80CD2!!h|Hyvg(=atng zWxF@atiq}=udo_(fmhiW8wXxv6KoQ=%cj^g@G&;SW`U2hIW`Y`f-SI1z$e*dwg`NR zU13YWr`a;Q3VepW!L9+HW!KpX@HuvatpcBCYk*=sncs{3FWX<_vOnc2YS|!We&M(Z z|3~mwSAqOs{c1%vO3z9i=cU8Szd5Km)JY@7*V7V`3J{6YV<(xQN^u!|@?A_liP|`} zld|Go``D5bF#Tt*{tRAFb-J}rSr~}=W3Il9!fu@(a@i8fuXiPFMWV&)pzY1Dz1h~3F;yvlQ2r|Xc5AIlQw`4B{`tV0A?26&%u0T0&}LFhJc}<+WJc{=v%*I zgY8R2SQ-buooX;fShqDSKa`wA2Q(lkR&LG#3oR5teP9B0hJA)0ox`Cquk>w|Ucspm z*@IJ%otO?iuZL0%z+5cA{Pb)vU%%-^FtY*7Vj9e8#(Ya-=Csv^M}z{SdPk%c#zDjx zOj>-ofbyXUjNxgXWm$ebdvaC?d2`3(h8|2<;%nGNh8%=|Z2e}a)R3V4tWPu}Sl0-kk;|jo z=QIEq0pWf(IwC6ew+jFsm;j92!7TqNea`>_-OgdBYeulD5rD^Mbum{yM#4R;miO)# z4qM}v6M1CiMQL}ww-k~M9&c`Jf`j-xdO`*8rNgFQFj zdj+h`QCKhbnIV;6SE}pnDhzUm#A6K8hp$crT(j1zxo+l~DV`AeO+!|Ku}>GD9e(YY zE#A<|QlS?|A_QlRl?XaS1T8OSobbbp`!SqQ_+i8$`$r*ZQOQI=JpoSLk(@@*bLbX% z=OKJCOE0At)TFcj?Q4yVg~TN!pisIVDga|z=iVZjk{7*E{& zSU|A}R5H2SJtDo?GU*PrWj454V!{A!;mg`Jb{sk?1JWv1t diff --git a/practice/tournament/__pycache__/tournament.cpython-38.pyc b/practice/tournament/__pycache__/tournament.cpython-38.pyc deleted file mode 100644 index 88d0ff4aedcd6656acb841d3e16a458f34b3b421..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmWIL<>g`kg2ho{X;MJ?F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIr6|9=xCkT-CVn~ThZd(673(MJB_*ch=Vj`X+n~7Ud=8rskC(G4%>6Z?Tpn=Hyg@%q#}Ek%6%YWUHSh cghp5fVKD>cZgJS;=BJeAq}qXWeFkC%03vfUI{*Lx diff --git a/practice/tournament/__pycache__/tournament_test.cpython-38-pytest-6.2.4.pyc b/practice/tournament/__pycache__/tournament_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 9be7278335cf8a2d2e14947dfef577894fbe3778..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5775 zcmb_gTW{Mo6qe+h;y7uW-n&a(U@MTcv(sxZWZ2p!Lti$dz)}n_1`v$NIBI0cBju(x z(!I1lU_W8Qp8A*c+Nb>muN!s_1=>Y+nw^2R!p^dD&@Qp_>;kmQ z>>^C zi7tuYfot7G4L7F$ z|5jiC_ZtYlGV9n==GJgy+N*Y8Iwo-;3UFIdLW2QHOa*%JxcmVpe#5i-Ovjn zNht9{De?4xi*R&y1x866YS~4{vEln~zA*Sshx;5}KS~@1Yt!&-PD8zkPo)AOPQYV` zlW2?ptxW*bq5+}449PAh{8<;sFF7Oh7^zRd(KIw)o1vNE@8f{7nhlg=at^X`>|JsW zva&imIX@d=&%C`oE`Uq4DnTP4tuHHc3|(CrLkfe{+(GpZ=z-@ zlalRj7WCd3lN_4S`%)1Ub)G9$f-ZDI=tuiNQG~KXqt^aiL=jcSLc#nmUl_~gZ5>%> zxtocoqY#BXixrH!R*WgZ=9kLwYZX^Dz$V%js+C|nZ}P>#JZoX> zaw-;>3#zR6CUlZmByngLAtI2WV|LCK+XX{RDx;XJZ}X>AMl`|%ZaWMPcwcTBaN9&> zAFSy{Xd?372x^#s5gc68T+rPQ|2(W|?rNGk%x1JFY1|zX0$W_eV^vKT_ePdvHXWF5 zOqt|Z4NPyQXm~3Nf7QVBW{I$vm1HGRl781~Q9pUJ_yzbQKLs-)D`vX3Gt4iHC~G_a zPXhf%|8nqZkSU9((hIHhtF%wv=M z7@t4$wyENj2J3c~I3>b@yh=wynxlEVcet3|CynyDIly;RfW4prRI)yYHqDhVry7$|V}McCB9lu*jWEwjud?*lxLJ$MNiRZ(Op zBB&Asy$)1^RKR}6fSm&~mKEGgTqP`6OwndSvz#_oPsA=ESTH0cE)#eWVLc!F6+*Cb zms}B8F%zfIU?oSKMuRz-zzK; zF*#R;!D>-Z5xc#>i|`;WN8?(es#3=84xHYiP>RG!>SiCi-y|@7i}aQ*7}r{{T&Gg_ EAFaX(TL1t6 diff --git a/practice/transpose/__pycache__/transpose.cpython-38.pyc b/practice/transpose/__pycache__/transpose.cpython-38.pyc deleted file mode 100644 index fcf645ac9753430973b1b7abe7d3b60a27af6b85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmWIL<>g`kg2ho{Y4Sk&F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIH77GKwYUf*4<>#&=!X`k78UC!>Ln$nK7CxCYNL;r|Op!CFT_uWHa^HWN5Qtd#xJ_9iW0Pk5eZ~y=R diff --git a/practice/transpose/__pycache__/transpose_test.cpython-38-pytest-6.2.4.pyc b/practice/transpose/__pycache__/transpose_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 41b50d54cf97beacb03dd114aa9f78922f1c6759..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3945 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 diff --git a/practice/triangle/__pycache__/triangle.cpython-38.pyc b/practice/triangle/__pycache__/triangle.cpython-38.pyc deleted file mode 100644 index 6f73666756d018454331406dfbf044aca9bb0825..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmbtQy-ou$3{LK+cLjB2;sv@iFMz5_Fn6iC+!kVkBGS8Se3fA5O_=&hU3m*8>{O-Q z7;4F%KU>M?FIi6}H;Ut{xqGo(zoog1jGF}~-7|m!{izxS8RT3w6i{-_V6;-x%4t4w z3gMEEoK!G?TB*HW?irerJRn8UPVh4~Yr;sz&YmrFtv63dZ$sA`e8=cKZA>4n8@xj^ zL~q;Ia3-_<<8X`Hoey@vXoGAekybjEjQ`t;a^>hI|6|FV7(a|Xb>uK0iQGwg#QbXM pikuDD;`l+IytsGPWpdwG2I3q)C1s`S`v^KU-R=8F2mSUOf7% zY8bEaMZHS!vI{pKfFTAkL&G)2)9TrlVH&-XyI{(ivRj54E3EV!*XdQ=YOm(jOyg^V z*rfEzASGJ#(^QqCO4q;TI-LR8I`r}Cu`Y~mG zm{bGa=Up07o>X|(4{1cZ_(S!w;AIzXeh&;4pk0fY#Cm18wglvsBn)>!4i50Eqz3gB zvIv9MldZ4b4%%UXA03CZLwVdaq0jWf?`636;O6gv`NjC%h)oy@KF9V;81fGbX9&8q z+e5_FIkOVS=bW zm&T|U+QS7Hc!(Qei1>4$Z;3gJ`jhj0K|$Wio$u+k1%YSz8bjC2fqP@T#4jjILBo7U zeefDD^{Yz?_=maR(bMvJnuE$400GxOk2|v*N4k2?KlKi&cNF&hn7r{e zYhWPQF$Z68-)HXlZQ+NZ55X#ap8DZ9SY3r?>FV9hgegOnu6<#zn;>xp@e1)XWYS^i zM49NX2=qq*%Z7hVfqyRtzP5vc_^0A6+eXA%*w+-;endPmeG@wIiGuyXOzgT|3KGbS zV8Vg)B<=_jpblwjFpgSM?fj7UK|w~zLPMdmmqVv$e+7wIWLi^%5(>`}KDMu=D5A-2 z1^AsD;B%|ms*>yBG&}c;+bAN2gF;RUh>SJ-odcC+mf!g`S9mIS!*?20?MDHZ! z8L?^=ph+o2W@A0aj5tdX#jHJq%2c&)W#EyTJx9QrK3a_;=}jFh%+PifShuyXGLB3I zeHspX=To6`S;RimflFjAE~6g`=_qzg2=bl+|A7|%tX>LonaU`}F$YyShs$+E6p)Jy z8530Y6)N`&P|571Fq4T@VVDZcT8z;WXc-(R4D^dJtCzwQrZ?tLoS}sZ$b+fYyQEBG z1jMtQ6lIzva^EPNcC@Qfprbix2@PPFdmi5v*J}_09W@b-zg1A{cXj6Bt~MzHBIJw1 z+-J}$yM+exFV;k(4gQ}(?GD@=m*af!XIR%*Nt{DSQ{y1wNqu(!$J6xfvNt%z9n+Nm z2tl&cWb`=;VwzOPMM)(st3hM2!F-lDCs7dNOX8#%i}*W9p0zMQCr$^d_k8#_2@jnN kMMwZrj-=v*is#bA*^#H)NBCQgMUJsg`kg2ho{X>vgNF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIt+=EpGcUaeqyS9(ve6GMPAw|dPt;3FOv%s7)OSfO&MwI> z&`+&MElSQT&ebm{N=z=vOitAYX-zDugwc8hmABZTVj%O1K`vxqECSi-rwO4E7C~6d WK)G8SHo5sJr8%i~AYGqg2R$$X&#|a$RF=97y1DBFlgqz&DBHR+rJMYpADx%8m3q!sZ&UNhu?sEE; zw46D-Oio%)qP;LNLKpewBS3$eH z#_OOx-r#GXD|{V{Zs^*eFg6e>8`6?B9HZAq(A5@*FXWnJl+#Nvcw?Zi@PK)uX;jRMW( z{uBcLI1gd7cvQq5G8ir^M#Um6=6j-C=4vNPpu;7#gCZoh$ zaiA-_>QT@9{mb{zb`nM@W39UO&L&ZuMXA#D!|{~e&vw~(npdNu+C`(ZEyYI}WkOf( zm$ZAgR)x!XTtcb6Ng8E1$*ZIG1~5Ddp(N%>jFHk7+AneEZsaA#dsYPFIaVT7M-NDo Lct+i9?s)VUH#3TU diff --git a/practice/twelve-days/__pycache__/twelve_days.cpython-38.pyc b/practice/twelve-days/__pycache__/twelve_days.cpython-38.pyc deleted file mode 100644 index 0bdb9f1a7db9f715ac76e32abbbf274f98ea839f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276 zcmYk0I}XAy42IM45YLr6bSSw1LP&IGK`dRWkQgcA(JBrFc5cGNm9laKHYS`F1i$p# zpJhAoYB=mM(k&frV#*I+{41nlM#cdJ#Z+)*DO2H+MGfhDUwID5b22t5C`L2E;?APb z_0bArvl0w~>%u|RX#7GIUI||zb-5U?g~|__CxBa<7aY!Dq{cljjF47K;PwQ&5@IDT r_~Fd+xVX5s0jVwcXR$giFfHOmROjD+HTg4LXR^=LaR*bs^(3=5ee^rK diff --git a/practice/twelve-days/__pycache__/twelve_days_test.cpython-38-pytest-6.2.4.pyc b/practice/twelve-days/__pycache__/twelve_days_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index a171ee5eba4687d382909c5e72bdfd02c408beff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6766 zcmd^ETW=dh6y9B5vcBckYkHj)T1eYCMNovQDpbT!Ky9d+R3J-ewDpYbrF(H_H#d_$ zr9S{3cyGl6L?FQfzk?sJukg};fOvs(X4Xwyt(_Q`LSZGJnc4N6Ip_Ok&g`7MT`J`@ zxW29)tUo%eX}@4&=aq)WRrm!J5KLpbqg8cT8g9zabj?jyGrD?`t!Ckg;f%Ou)zr0X z8cVVC1C6D5_Osk(s+wo|qBfm*44SlsEj`K#Ub919!}iY0fW}q$1rI=QIbPLZIx`+< z)s)g%O|uNkLOa7om!?X>;#k(>?GJsqS2*Q?yT^NwH_?-Agt+NTIWK0Gw_>- zUvLZr(;NDIeM5Vwg%^~<`KGXg(6s{M zu9HwKbK>|boHQ&Dp-)_XnONkeB|>4d1}CPOYBsecWMuWDDs9*&F7va12mMur5 z)V*}ToqA;QwHB|1oNZ~M01tluVD>irHJG)^cP!?6_H2a*cSFB5%h$N5*?~LT5>_p= zYkW48&d-3QL0qR;ry)R5ZmmbtSfSD#d_XPQ>KICG51U{p4Z+X}7&*v-&qA|f4D zW=QB@02;~xD8m6@QSJaN)1FNNtWW>paQZyPDQwzeAefrKHF-~Puht~*a}RJD966l6 zyCEkHQ^4Vnv@VCFO&F4NA(u@?u228rko%&u#(f~OIlv67LkBW%Igaf$$U6W#V)rcI z#8BQF&eLk;NoysZXa}t+JLny>W4a5_k@jmzQxUs`%^n(tgY;nsQoBAFqBexkYrezC zEx;7u{M#VLU7$C_C*t4+)+>C#F4_RQs6e}3?}FEC&m_W&z9;n_4%(kO@z7oy2-?72 zBiA?&_>47k-C74X0Nv*Xw~VSiL+dFOTG1m37}!c1Xe;bTjxV|I$z=5V6bBkvbbt_0RX?aYP+t4{-32|r0?v1CEn?zuZj@#f(GaXP!hymeAq=w zzWrt*DGIVaYKEic*O(e^H<|-6BRh~Amd%iv8@6*-5%aGkOumrxTt8$~FAmM&3| z{Gq=P`OsfzOMiJ6d&T4}y|0F$sIy9NY>C+m2aJL6e{$W2*Am=%xYd&Ez4(;kalH2{ zgrZbJB`Jj(br1yH(-a6{7p0|SO8aUUj?%N+lyXOf=>gt;RTpy8Zo$zM3rXvLlxukw z>=}R0s`wjYs3Ndz(3V683qS{xB-?I-vK$R~eQVT($HiY?Q^YsS3dMRo8qNOU|(DMN#i5aSn!1`M6N# z_%@A-wy82+dT2m~F4L9q$}S|TT0}#SfM{qN+NYEE^-$Z;H}p+|X;a#l#=Z2SwxtWq zYYEJuKyu3{UyO9`=@d%-iUWzWn(wyezD1RI&dq9u)?QeW5LM!woysk#oMR9ttK`9& zuE4Z|J<+dI$jZ^c_ZsCZjt^(wU=AuBy8VfO&!hI|#+`T>k&@Z3Gg#|Re2G`#-uGzG6S_X>=WZ8Kb>X{` zD%WPr;kyziIm1MnIEVuC7>UWaOI=j$b;$2JUP#g^&%%orgT5a-j?2|H*WYnYSDQX? z)pvD0E+I9iQS>C~=u;%^RQyB7B1y%$y<4;}JsFvldX~#6jq;SbK3fKBX;h>XbLr}d zkoJwCeVE7=`%oM}aR|i}ilZowqd1A;6pEKnoJVm1MH$8RdXP04{&6i}Yza<)Fm-dp zG|iluHw$LbESaO`m^p4vn3HDOObh()bRjbDEZa_KdqGsZ+FGYiT2r*Oj!2c&2Lapn z%7U*7_}&ubp4^H?I`{I>SpsW`$Xxd95F6D(7;iEVLgm+l$XtT^^A>zK!10ruh|DVr Syg7`Q0ft0Vo77CBnEMkq{D*D; diff --git a/practice/two-bucket/__pycache__/two_bucket.cpython-38.pyc b/practice/two-bucket/__pycache__/two_bucket.cpython-38.pyc deleted file mode 100644 index 7caf5a8a3e58fc3af4b83cba3c33cff81984ec17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2316 zcmZ`)&5K+`5bv+|F>hu!n>8kzu*MbQ!W_(kh>8RWF$57=gcyV&ahZMnW;5)3rC*Op zpyxC>ddNla;2{Aox%nsfcRaj#an9a6`Kx*}*|;%p=>J++FB;?UHSWR z@9Me`f70aDPhoN$t^69D6;=*JM_6U`6VZ{@*a)Mtu}v^)o7x6OV>8>t7}=Ix!x-Cj zdj?}-H|$xAsg<`ydvk#k#eQyRSbhzRDcTok<&Wr&#LNWqOayqg>KFA~O2Kn^GWRl= zpshYu?jtKl%9^>7!YgRiT+N~oxo>P7qMy}mIxqIxMss;n+}oWc-h_nKVL$vF$$30W zL+b8^7(P?-_Ta9MLOiF4lYJ)ZGZ1(Q6Bs8WUqKsxV&Eu z_a?5J`+i>R!O;ixnItaVT%A0wl3~#;r>@XAu)Ks$C?hxIhCZ(|X=JL6Y^igQTH2k5 zH7BI3K9Xr8*YPF9 zev2>OR_+X`*QldR)ZN=85wzYxD;e)}6aKM2r`oMP+DwZ%_8v;>#WNY?b2*DCCW;=| ziV1&nEyc(}tDyauwaQA??n6t6{K{)uONbnO2AzTKd)5J)(CtDOLFa(P)w)gSV(6Z* zj@OY5*-DVVn6gOHg*uvFZHoM9+rWEd9lx*&QoG?vWCd}=dh&h=R{G=n%+Sa;>Ae6Z;om}7U)^{xPa zJ^7OYpIV`XRhuDumW38Eiq?k=xt1Yp+#Ne`JeC zuV4r-qNt*LJRSKex!*7S*gfu~OO}+KR7Rbnsc~HmQ4yx>J~> z0NzI{Z=e%0)2UpSb!%Zr&eS_>r`!%iTDf_l&(~Fu-oz}zq{rvvwTBokCgZ1B`l}sT}%1B4L*TSG; zau{Si31cY%(g3)mclP)KBtB)W=2x9jR0-O?ukcFj$ z*_N2$P2%ie7WA=kUwXC^Pgj;mknK}EZr7N*e2!x6%e|kl75_@m&|X6K3%&2?E}UdM zQv^=;F1og1xOJL6Hy$o?+-dmLOI(>j(etNoeHj~bw32WuX?1udda+Lu6F+y8K+-|4TH*Iz%h^aLKX1xyJv6+A4XqL$^!b-sp%j^WYUn zG;cTDHf^H+nVP>$-5r`zwfWi{Qk~cnjIu=Uf0bSvj_q_%d`_1wDHEwmFQsYvVH)F? GrRHCCORIYT diff --git a/practice/two-bucket/__pycache__/two_bucket_test.cpython-38-pytest-6.2.4.pyc b/practice/two-bucket/__pycache__/two_bucket_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 28a1505d5b91bc29b4454dce716df25ce58fff6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3614 zcmcgvU2hXP6!pwxlF1j)Qb6pd&@PAwZ9+kamldkEAf7f7-9lHRm8?nZq_ZS5!FJR( z>KnZC7pV5Bf64o}PxBY{Y45e0XxJuIOQ93ZwLPA(?>#=gK6zQMR|s5xh1Yw3mk9X> z8~LjMjWxLCQ!tD$XFx*7lR z$|5VX3X~;QWi==RR%e%>EVIk(3X~PL#Fn9~va4(b${M={&Ro~^&7Jg@arZS>n_Q}{ z12ax9tOF)w9d7v*n0@krCbcdzt3AQ;RV@>nw^NHN!)tMegWhOkwq6h;&A}@+yvK4f%z{G!?W-Z5-g1_pu6yR`&^D30~--C(%>#s ztTZ@q-mf@B8LeU^fC9MiQ7Tdg$pJRu^nUvE*_Kj@)0l zlu@7S%ByHF=Ffykh0zOhPpTixswAnRqg2YcGvHLERPd;~P1QE1{WKcfgDE90IdN*v zWOWXhCx3qofzyj4fw@L}3nnwf!Y?5MqV}{I@Z>GLZlW{Hz+hxFGIwF*zNp?xsB6q)OA2< zf@Gn(Lg_GNW7ro|*C<8xZF_{-iRLUuQ6X-kLA5WwMuXX1{D|f@8gwP+p3#d&3!(bQ zFeD!HffM+-Um@@UU*H>!st!8ic%b4$>e||959oW;x=BZSxSCBH4#3b9d`HBJ>+g`kg2ho{X)-|iF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIB`+~IwFo2)CVtuIhZd(673(MJB_*ch=Vj`X($~>!zg^f#`T3tyfTaiyg`anO6*Q9|L0%$VNX+2#v4^ Y!eR!>-Quvx%}*)KNwov%`V7Pj0M^$q{{R30 diff --git a/practice/two-fer/__pycache__/two_fer_test.cpython-38-pytest-6.2.4.pyc b/practice/two-fer/__pycache__/two_fer_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 4027e8d61526c1abc612f4427e554a003a5f6380..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1069 zcmbW0&5qMB5XbF&x}`->5MKhRLR=~>$qOK~%Pw#$2ii+6R$99dNaEt8lvdn!9|Xjy zujDHyUV#%c32g%f31KOdnaOzk`%m3*x7#MLzC<@>V~dcl7&Mmy!7)6=85ltXO-V$n zx0Trzp(Jx6m)2jr$b&Cd>SuoBQ}Ub$TR0a)IMRE=&h4lr=u0wizdw-jf-86E9D?Er@;X_kq+M}gp^qX?;VF7x zK9WzQq~{>zvxVTW+ZwKKy~t&MrgVR$7Ds*cGstAHvCO5oD5Nf*zFWkpMz#$#P9f9T zhG+)i_mgl81w|MKlUS%c3D0Elwp8;_egJhzk%e;|Ps?N~Ly-IsB;y;U^AdQ2`O5Ur z;kn{@oJsyFc`x%W660}%uJ7&D1&5V?7knLd*MbE-hXL*++e71?q(HR3vsGS&zi8Ju zIPIZ9owaF!XRcNdaf9{>q_?zpf2VC0{vWLUL{0WT5(NJUdb0-2RrwmGy&vwi2JZa> z+=KGrz%z{3`?+azo++_NCFiEYIo^w^GuQZM(j7FH(d?&Ic{n<4gTaad=gKIvnO)@u zZNnyuBrTJ?FrDN1itnP^e7-^*L46Sul?Pfbby7;x+NF%Y&9z~3En6G5$deL->f#zU d0{1kA+lm-};xp_~t?jXkkjTwQk1(s_{s6`G2EPCR diff --git a/practice/variable-length-quantity/__pycache__/variable_length_quantity.cpython-38.pyc b/practice/variable-length-quantity/__pycache__/variable_length_quantity.cpython-38.pyc deleted file mode 100644 index eaf3135e648d5961d7cfad27c468770fde178b3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 395 zcmah^y-ve05Vk{_R!H3t?~tMO3jjibxl7fh1Cir9z#@Ox4k9~m!qivF%3CmTXOz;7 zlkU4af4c8J@0QDRLGii2e7vUm#lvYNG~8193jz=zKg3=@0%ueuq+5~Cj3jCb?m6!$ zeM$ggD-LpV5V;)ZO<$Mjykpe}-w$f%=|$;vsiAGGx<~&K+D_p+I%9pUI;Tyr2GyH( zR+km7Dr}y@^Xj$NO|W4&62&i3OvJhy#ta+N0yJbJSn#oq(P4(4 z-|{mL-cB&~7u~3z1m3LT&;0@gFwjaYuSuNXkW9%WCN|S+@kKMfETL3{S>c|F3|t#N5`90{JDRk;Ii+$ z4jSmMSl$S1=M#{G6y7Ic2u#!|NW(DdAsB%SY7<6b40RgDVFL9q?14$tBQOQis57t^ zW>Am9KA1&426HfvdK~t{0n`(45I#b^2M)mk>Pa{ZM^I0}Q8ETf)-ESy6<59i?m>iw_+7f~O8OE@N%{rUU0aO|}b|B6?N-ox8< zyW%So2 zCtEO=N)qQ1+LSJkb39>-b<1@s#S*vH);+!lpNAMP#bNAe;ln_0>bb@XLb)yI zSqZviiz1Du0(n}2yb=ewNBan1f*^S|j~5+0)4?d}Ev6-Mji2$2#xE!&=e7qwC&9aA zyHq0dP^}~7<$&+Q#^Hcpj6>hcz;58P1%&^5Jp69LDEMiNLi_^|MzOFP2bv$F15I*Z zoJ61GQ93`U!0($pO8W@-6dIJ|Ie-`4bbvGD?JmJ)~IJAI` z!#U`mLyCc2dEqcN!NlG^z38Trg5s#+#sE}OEDYoaE#~%Y;9_nz4>3WxWgs#s-Jeh# z=$lMR`v`mr-jYlo;YEZ@SY;Fw9dyF=+&7&LbcQ6%TOjHoqZSoUuJj$1I&JLI8>AI8 z`=-^wu9VgZ<*ee))i`(BS*_E^K>p}J^lHzJq*rsiAA0TYNOYYTvWg>@;~WWdU8jkN z8z$P6BwN6X9wZ~0B^8>{#7ulR&76wYqS*yB6$Y+BXr|g2(4Pcg>8$vZ%9RX6fuElY z)_9G&@ehiA0&3|&Z$NQbWZLL6z7t;cjR32Me~Kh#BuVgkN9?260mGP zbISFywQ|A2I?+N@yvPOWTHU*<_;x*xhC3OG_}8kv)bt5@QKu@Obc={aPGrcTofChs zn7pS|wPLiM*rhsmuPI){E~eflBKXs2Q!b`sco8n9E&RBUXxBzNwqmN~M>;2{hHBiu zIN2S%8-LJ)xAG~9?aP}WsS?C;z2rHvu-tO;1~znQi8C#s4YRT4Mr>;BX(!?-l`Ya! z>Y?o^?N78&fM@Y~XPEc(u2Pa4a z6vf37iDeRPCbui7Z41DF2W7jm9vvd-1?6rUqDfuXcKH6S|GN>(mEPS%MzF8_te{=v zrY@+i6tsElxuYAEOSW1G_7vaYYhma)6}LRYMiF?erKoO$LMj)v*5oB}!Su)}lhb&9 zJD6hSPpk zSFSm=BkFK*_DVQh@t}`|*ULnQH?)LWLHbL)2}0K!?e)Zunuo`1bfBcMZ`dVvo84jG z(sRR0Jl7tfm!4!j{X_SUQlQV_VV}AZB)w=Qyq|LLbgzsBwZ|7+{t=G7p=FbYe<~h}hpTJWO7lQyzgKuylx=(bD%Xx42 zXoWpm1-p(NS=gp39%A#YT#(VGwMlJbHI5T;CjZZ|ZSRqJHat$tF_zT^?HPlD%A>(Mje-)X9+ya)`qbFFjcnZTcJ+~4 zJm{O2Rk6$5vixDoDp#S72rNHi(cx<;cp^p+g%~A)NBm4ok(ePdM`Aw-DlrA^ti=L} z!z7N9pxRBGB(X?>JQB3?66Z+JrbVofxJZKPd~un?Dv3`>d`g0%j3VgdRZz+&P%bq! zHPeXsCe0b;jg*;^78WzUxmI_u(yO?BX0^6%weIGu8f8{*IS4ZtJeCE2DjW~vN$W3v zDEx028_Surg>Tj?jz>57*(Y14-Q9=UL5wmGyKmmbH*eZ_eoj6qeoD8=S>L=K%*_p| OBxKw%k>#d7k@^pmWDjcq diff --git a/practice/word-count/__pycache__/word_count.cpython-38.pyc b/practice/word-count/__pycache__/word_count.cpython-38.pyc deleted file mode 100644 index 694ccaa429e727f0fd225a872c5fc41d7959ff0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmWIL<>g`kg2ho{X(~YaF^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+5BIqc}CMBsDKNwFsmHO#E`v4=qkDD%MZbOG-@1&&$+zNiEJU z$uH1Ptw=3O&MeN=FDOb(F3C(z)i2L4O3_WuFU>0fGvmQby@JYH++bEbNWK_kaxuuY k42(q}`~5T_G{Q;2KczG$)efZVGY~TX0OIC1CIA2c diff --git a/practice/word-count/__pycache__/word_count_test.cpython-38-pytest-6.2.4.pyc b/practice/word-count/__pycache__/word_count_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 2241ea58ce7dd0975883f6a6b32a392a3ab010ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4877 zcmbtYUz6Lm5$9itlJ0!A@9c~1G{O0wtVF%5-F7;0JLyfG#4~-kJlJVc&NLi|fFwE; z$pBO?(&R1q2z|VVcKYP6gx5aZ2k1;E)3Lh?N;>I8UgN1GEjgjNKX7Qxv*Wig2*GHc3nZ{Ft z+06ODU=FXnXnb$`O=dnbI_@c0GLAZ?YK7@I$%ErmFd1Uw^2dUkL%8H$L2&(2-(n`S zelUEyFzh?bWi_~WS)F-M)>wlzp{%nO+knzzo9q&l4YtKDL)m0k*i|T7Y@6*sxxucn z>rig8UG^4~m)H$<6Ur@ii@goyW%e`n4wP5eyNp12mF=HLFr7p^C8$+tj!XZ+2`O=f-%7qcSs?-sHKX6z&7AO)wW^3qZ*DkT^B$6t?W zERcnlrg9{Y`!5ZFbM@oXgU_IYJfQnM%F-k{_=wA|@-#c(-*OQ~a&(Xh8s<^R576$< zHOsmh6olt6*!^sxwy`p6OB1dqViVpV@vVkA-CKdTU($OGavc;k88BOi_9Jj!Aoq+vJ~f+r!D0l=Y}fo-rWkv7A0%$j-W)%0Nr z4;R~5#iMA@tA-JPN{%>s~LpEWA;p)wy;1KTNpC1E^fJV?f)9>nDK3M!n}+hwR$mDV8P zqR@foCREM^9_Peb4mno`DR~ONPsuaL07QZ~wGquN5FJZdgA|env{nNtvH;A_h{n;B z2O*Wb3)=G~R+a@;d#?f50Cf%EK2**DnEND_&WX1S=7aVpk&yXg0$Ht{lbDVN!+r96 z$dh?fC?@;l&*``=I2rI9r;Cr9|97p*upjj$&k!C|K50D^C>pH+%mbvo%xASUxr)1*KTUjFxlbj~*HdI!K zD`>;SGAxS^MtfxDh9kwAnE{X9QSCtm z5j4xX1Vqd=7qsA^;|X+5fh$%#K+ypKptDT5y0>@_8%$cw!EGG^zDP#_ zI9kx-gD6R$4R_5K`^hg#{NzHDYkXCQ3*_i5TmVPAWS;X0A;-fA0Av()4n^>@lsA8@ zTFX!I4W+xV_ca4^rJyhtBxxQnp7St=d`IPMPx1_@SnNp*@AdS966in8)*1)ZSpa?J z+`ejEg=|f ztWo&JTgMwiKIx7o#Y*o{5kxZRiS#R;6dbt9h8}=?;(Iz8Kp)7jQq^X?Dv=g>Hc69! z#u@B<$0IJH@Eb(E2pYIeEX%9swbpP}ox~wDESco3*&5R6hbhVx#aHi7{E8z`O#%$5R| zg4jWE9mOsR+&qeRP@va{dnn#VfqNJ62*oc^{0hZm6u(Dth~n(9t!sGV7Pzg%muV;T zOwWdI4K5d?3*{D+TTsLAj#tzDJ1yn)#t|G<6R9>1vq`YHyAfm)Byhj@y915{`+^?} zNJ*-(Xj1igTN9Ku-{4Q)IEiw+@teo+2S@P_hW@KWdC#Hw3G86?>&tK`?{@{0AEHxe N-|~#BhG%WK{{=IB%gz7* diff --git a/practice/word-search/__pycache__/word_search.cpython-38.pyc b/practice/word-search/__pycache__/word_search.cpython-38.pyc deleted file mode 100644 index e943f5a28e7fc0ec4d3cf2f1baad12eb05288fc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3567 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 diff --git a/practice/wordy/__pycache__/wordy.cpython-38.pyc b/practice/wordy/__pycache__/wordy.cpython-38.pyc deleted file mode 100644 index 81215e4a2a9525eaebcf05090895bfd77552a061..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmWIL<>g`kg2ho{Y4Sk&F^Gc(44TZzj6fk60I@;X z8HkHnfJ6!dPz|HsN+1!%QCONX+virBp&ly@JYHY>9cr<*8s(ib2j}U@T$=l75;H b8es>71yXX0!zMRBr8Fni4&;E(K+FIDmMAcv diff --git a/practice/wordy/__pycache__/wordy_test.cpython-38-pytest-6.2.4.pyc b/practice/wordy/__pycache__/wordy_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 065a46109423019a1fea484e8260adb7a5643804..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6207 zcmc&&OK;mo5GM69Ez9vUemh~}=3ytYEXj_GzGNUt+e2ZrdDMXpC1?#D(~(GJNkz7i zo}7FCLW`b!EzsZ4KhP7eJ^9`OMK0+KUnZ%DF?3KRXhx)V#qaxec6N534i9HJeEnLT z+WTXSjuzS*dciNl>~XbHr=tOp&}tPXypa#S1m;4dbMTG4HCE zFRoS2{(1NAU3ZjAA^oJbYVJ##@?196SBg92##8`yzKg2w@7WuVX^%&-#73c?vYs9sHnfk28W}l*Qp=(zIV55qLTlR)` z*27yai=e(z!2z2uS6IBPP9~r(2Ex1^fEmpMUYp(k&UgU56y;~CWbCj{+r#ckbRMC` zjR4YXk7b}#8kkv_dK@WZ&Y=3@6| zToEHw^p=W^sq%7saXVW4~V9D2cV!t^yTC1@+spmi9u^+nT616=ttn zrvp~bDVHC~s-YNG_ItVBQXVpceck4<+YN&>xYR_@KbD}_lFFOQSi%gvl{zd-; z5nMss5x-00+*N?$`vh<{54y+RkaXtG2b~$;bZGHuycV(l)<0RM!g1nl{_Hfv;ze@y zR_+j+ZC4nY8HS|dDlRd-{is8h=ngBsfB%G-hzL=_&G|)Ca8}6x3+Eu=T!LpE5=7U^ zn9lv-lhc zP=chPgY=DVi6GRkf1LeIeF;a}+16v(M0LdnCcIlax$A&m3e-CoM@s>3>F~SskF4lT z>rE%Md8Mek?Y`J}y9Wg>ac6?F4%QvV1)=ua%L|quNt)bHB+1H3QbUJUoxbNJEGgu= z^9viIaiC*JHbMrEusJqPh7M2JWioVN#b(INk(np6NahL|I>BHfnH4g$2V{9Nw4GuF zGHYaLE5b@-%4DdR4-`K3IV2rHGTQd%@MBP0fftgo?~D+93qr>3zdU3KyDb%uXEejg zZ8eW1|7uoh9?^7Kb*fiP8>>udGpy09LI0LD;N8n&XM6U^%o18y%F%_DZqxCuUFTZD l6TEX@#)Dz|z~cNs)u&_$pE=@xL8qH`2`6yloRG++{{u|c&kz6r diff --git a/practice/yacht/__pycache__/yacht.cpython-38.pyc b/practice/yacht/__pycache__/yacht.cpython-38.pyc deleted file mode 100644 index a664a3b96dfb969277af3c8ee70dcdb12696b6a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmZvXOHRWu5Qd#6CA1(m2#%0Vvt>~sN}4nlQ6lBRBbz8V1|lel>>$xSH(|w zfW2C&)pt~kYm_2ei->IY8}beVkqdAgWGGUiPh_jmwINiDNY&GamaUmA9OV1d$vI`* zsit>T-M%!=g7T-n?Hu|>8EN>+=~zX2c5+O37bNz3S=95?KtFgewp2;+9{ z2AR;~$V-KuUB{^~vmo)n8Gf86GT|%fQhWo+^7Ak(gE&t;u`dhC*e~bhC5{&2AjDY~ vdS#j=bG(GE;|sjpI@1ke?0UoG?WZ<34Ym=Z*{ZEypXr%&{1`-6{yo|cbnao- diff --git a/practice/yacht/__pycache__/yacht_test.cpython-38-pytest-6.2.4.pyc b/practice/yacht/__pycache__/yacht_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 419a0617a69b5eb15b4cbd44657b46dfbc1be597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6679 zcmcIoTT|Oc6qc_Ta|_o%LI}BsTujLQ+L90mOc^r+rcKE|3(pBtwr9m7LpEO7q>35kw6UAYQTE_17fhK#f%fHWNH?e~?tLL_Ks8-C`mxlG;uI|km9}QVDt@7-i)JwKm zGG_U1t`#<-&+Y9ySvnAWh2&*Xe6`r`BOb+Et3hP8$d9Dpu}yhw)A>3LQ$0b3o+ar> z(tnbMLDB#+G1v6ssngF8D%A$gKK!qVbKHm1YZMtPMF!D&SX+@v<|WQEO%9MDm;fqZz*%ipj!HYn{|!f2dj$3T(d`==w1*lWt=kX3Q#$ zjMCIC!L5@_+mWW0);8CJp}GlSyIPahq=MC-5V%2Pu$|JMs{zt)JI-`rd3`ZthE1{> z_9;V(QngmG4G_8|>>X(s)>#GmWuH1ix_mn_oX*;kMKQIs@?!{>a|#!nl6NeX(YE=U zVVze9T@NG_+%GaK%GhciOnQ1sHS!?OP>NHXRtiZ&9GGGn3L?~(6x3}Bq6Wu;hjoP~ zcW+6NG^5&;liFB$9WvN1KFj=QSXVpX;|7uO(PYH0hwspIYAySRH|=pHt}g z=WeHdk;$<1!UDrZ0WV!#Wrgy%;))CtKUD>~cyCr9h|OJv&75CoNA`})spFEt0qRU= zN=c~!F?pb{xawoE&udCRr(=NUqCa@1Q1Ku+8;s*odp78&#aXN^iRa>nmHf-VSu`9F ztj7waGd@bRT(`n{3?3W?k4LLGPPip!oeFe$lT1*xc})pINw0`4oanTd;g$L@re_NJ zyFT=8K#sVLAkE*Zfw_)Z{@fYWm7uuQizF2wHnbyT1T2xZvisaE;QfTHn)AVS9 zh0|SA=)UlU^($@{nSaL+vvxVAtY@!+l=Lo4-XjyVs0{KTsFQMCVRzccPHp#XU^C)Y zO635y3X)J|y6HuQLkYq+{WcXQ{`7K0*Z+?kPem4HXiQvk0TV|B{kj9WBf3T==T5kg zx}HPDk)s&a$+RyN>4oLBm4)DqSPx6Dv{S{`sXr@hMt!1lTO0#)hcb($bq*gUzatYg zBisdfpUYO%l>78w6ny>#+1E5bGwo!AsOV)w2q!B|1Lf$9yfXqWO zkH}DEE1!^gO6Geq^JM4^xMH{%rMJp7NEY?V#4?Gm`%1dcOxDS4)y!SntXNL({N6rh z*v8p}*xM&Hs_X&pdS_@?DCE(L242HpJxq13G5F>i_@% diff --git a/practice/zebra-puzzle/__pycache__/zebra_puzzle.cpython-38.pyc b/practice/zebra-puzzle/__pycache__/zebra_puzzle.cpython-38.pyc deleted file mode 100644 index ba58c41d8a2dd67d6ae73fdc8277f19766b28ad0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4341 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 WHz-b;E?u7AaDsCc2fMDU*8dC5S%dEY diff --git a/practice/zebra-puzzle/__pycache__/zebra_puzzle_test.cpython-38-pytest-6.2.4.pyc b/practice/zebra-puzzle/__pycache__/zebra_puzzle_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index 1fcd61e18aaaf5c35e32746fd13854d94434b02d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 949 zcmbV~&2AGh5XbG^&DKe`eDr{XRB?|4*%v^lQj0(!MM$(4Uo0nf!F0c{9fd^P+6Mt~ z>MQxmiC5snjF+YXB#^MQvorn}|Nb*R-P;=x7+?6kvos;(D+b#mgWwQ8_Z*BOidKZv z_)ls$KuMkP0qs|Ep2JE~?bM93ddP>AJR>Sq*(Fh#&fkqLQogI`Ycd{ugKT6vPC}uq zY0jNkO0R7gwadndwVqiy#~s@P=z5X^aCD^LiJ~gGBs}eJ;h7ph_B`C?nBvu9y{`0$ zc79H`GNF&Mj^K0qU_O#h#M289_c=i+kRqA#;k30&{l>@!Fn6VM+WM#O7qYTQaz#Vt zbai$`EQ9d-%kmU9xKd7LQnigKkF`7ZZCC0K+Rlxu%MLVoGuLI5_o$0-eIWWkctD+W ztMC9FVYM?#H(o5?wqm-i&rf70BD7`mB z@WR2Lm)|t>F6_9be)wIHTJt49)^4B~9nF;d53vd6v7Cs=cb^Nj2hmfXpI0I8+;WdHyG diff --git a/practice/zipper/__pycache__/zipper.cpython-38.pyc b/practice/zipper/__pycache__/zipper.cpython-38.pyc deleted file mode 100644 index 022b4e8e0fd95a24f524525b42cd067c2a2d892a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1770 zcmb_cOK;Oa5Z+xoiQ_!_ZdE{t144>Gjkux;A%Vm#m#UXsjPY(;w|TMNAR6VC@?&!5 z-}uUjE8Muid}})`NiLOGX=lcs^*p}$yr+$Z&uD%7`S|R(%-DB4++7YmyrG?JlX%Z0 zll+GEOmvwPC#>Z}^!}f<_~HY-R;k8#aF2xO-@vbW!>E5tzNtR@pbXiuUN4g@b z(kJc7nyizq%7$!`_T`4$BwdqRa+`Er?#Nxz4Y^18_tSDW9*vZa_?;?XqmH+#*vxx)HPbEIn#sz`~9kYnkb#L!=sO(91i04JC$6S;i#>? zP@*{Lw?{gROdP59#3s+x(das@p6OvfKs15m5X_luWzp*r;*y>7gN#6ggWFSQX6|IzgG<=}(8W@PdW+ue(N4fFCYs#klUfc6qTCA; zG?}5FV**kvWlTLZjnEItc?(G~_rm*s5h>~T{K9D56nY&D`{a0ndhWnbaKnCjFB|}< z#X;}DLd;B9;#*SKpwEyoWBw8;vYZ%Qv0wvEONystVCadzLI!&eeiet73@y?5@rM?1 z)c%5&3v2pM#d!3bV&?6a!Gdbeg7Ii&6pLT*0exdo37>Jj3!VLpWZ?#;>~w%`;?xNT z*I5ac66;E+n4!I!Uf$N>bAqLr*O9wBttPIHLD*M8korN;AIfnLc0C9_jl*8i1dp#`wIerIt>5- diff --git a/practice/zipper/__pycache__/zipper_test.cpython-38-pytest-6.2.4.pyc b/practice/zipper/__pycache__/zipper_test.cpython-38-pytest-6.2.4.pyc deleted file mode 100644 index d6f28d0ba6efb818fc945addba28e2aba415f650..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5143 zcmbuD&2HO95XZUv5=F}&abm}^lhpZaRG>Cmpy;J&gC<4Wi!Vuf5YR4Y?J8kPQS6dR zVpTphr#?XsJ=n;}@6h)sz-vze`T{9Xq%%v47AexEQwp5risX{}+u8rl@bUb-t-$uW zz1lsxttfwCWqQ-0au4?K0T`w*;wfz+OSPw|3Q>A`+aSpqvu(l|)vNWawndb$6{a!$ zmBMsxKCAztwQWWoDlKCSEh#%K5}R!|2)O8AeR@-&au4=!1cuA!wN*x#`bueQNtu1Fa%Ap|@m0piX{>=c(qiMe;|+MM zd%PRPhH#%ejm9{3EnVPcalI@0JsJtl<66{D4(6ONmxpyAI=`!MGSB@W;ux2+7-&yao0` z;M5XxXzFMd!5r!00v<1;xrAl~4FXNfWjKnPvNJfAR1PI|d`9I6-+|L1-j|~TJeJ7t zR-Q*u6Xi_4fo9){3HmAW0G~Z1iI*lc67M^q5jPT_`!?L^`&=~Pf%(4ACj-eHM!C;E zfh$V-+aSZWe1F;TZJ9o1=BlXJ#|j)~=4$F2IA@LNIeVIKEFc8*4Y7o#&=qjvQaObg z=K<~ZI|Hf6l_pA&V-z)*ftHyp4=O^-PnI*CB31{1*uZWVxx$8Yg-AHhL1$e52^~P! zrH=K3@8PBr#{gltlXr~bM#_8q!#nnP;sUZnxd5p+Fpj5(IV%^nyj)yE7+K9IWV2c% z5re=h$FfO=*Yj9%`Y;H}iG25eiR4L;tZ>edkPsw}R6Pqxe42O(t|iW{>$%Y$g%ytR zumk!*d$3};fyb%GpK~viN(xKOK=?nGqgo@wFY~D6Q_l5(49koNMHN|s2w_NdT2N6S zLd-lQa*3Lep`+T4z!woF8e9v7g{A>!j3-+8b;zd~!3)M=Rv zn|ao0E9D3=Hmso07<0V?!pX#yD9z(2td>!93{hHEe)^s`?JYQe2C^GjWYpXW z=(@h+iHmTYPfu=2(#-94x!`_811EYKV*C|4Jx+)6!@=DW;PrJalhfCi)!|ki_~}jW zv@XOJr9M84#x|wBJ{v%=N8<*i_+2A8Bi8WM*U_MeiK}SdL$itII-1*PFufLc(R_er z3(Yo~kI0HRYA9x!BqrxDb;1VcfVE z?9sH=q`@A-+)6TJx9@KW{zAABkL&4Qac%OS4L3{nj)<)Re6zty@ Date: Mon, 22 Apr 2024 03:40:04 +0530 Subject: [PATCH 34/41] series file edited --- practice/series/series.py | 1 + 1 file changed, 1 insertion(+) diff --git a/practice/series/series.py b/practice/series/series.py index 3b59aa9..0dd0604 100644 --- a/practice/series/series.py +++ b/practice/series/series.py @@ -1,2 +1,3 @@ +# changes def slices(series, length): pass From 71695e3ca8c81f628d1c6031987441e0b2ae9f27 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Mon, 22 Apr 2024 03:41:50 +0530 Subject: [PATCH 35/41] series file deleted --- practice/series/instructions.append.md | 23 --------- practice/series/instructions.md | 19 -------- practice/series/series.py | 3 -- practice/series/series_test.py | 66 -------------------------- 4 files changed, 111 deletions(-) delete mode 100644 practice/series/instructions.append.md delete mode 100644 practice/series/instructions.md delete mode 100644 practice/series/series.py delete mode 100644 practice/series/series_test.py diff --git a/practice/series/instructions.append.md b/practice/series/instructions.append.md deleted file mode 100644 index 1e76e54..0000000 --- a/practice/series/instructions.append.md +++ /dev/null @@ -1,23 +0,0 @@ -# Instructions append - -## Exception messages - -Sometimes it is necessary to [raise an exception](https://docs.python.org/3/tutorial/errors.html#raising-exceptions). When you do this, you should always include a **meaningful error message** to indicate what the source of the error is. This makes your code more readable and helps significantly with debugging. For situations where you know that the error source will be a certain type, you can choose to raise one of the [built in error types](https://docs.python.org/3/library/exceptions.html#base-classes), but should still include a meaningful message. - -This particular exercise requires that you use the [raise statement](https://docs.python.org/3/reference/simple_stmts.html#the-raise-statement) to "throw" a `ValueError` if the series and/or length parameters input into the `slice()` function are empty or out of range. The tests will only pass if you both `raise` the `exception` and include a message with it. - -To raise a `ValueError` with a message, write the message as an argument to the `exception` type: - -```python -# if the slice length is zero. -raise ValueError("slice length cannot be zero") - -# if the slice length is negative. -raise ValueError("slice length cannot be negative") - -# if the series provided is empty. -raise ValueError("series cannot be empty") - -# if the slice length is longer than the series. -raise ValueError("slice length cannot be greater than series length") -``` diff --git a/practice/series/instructions.md b/practice/series/instructions.md deleted file mode 100644 index fd97a67..0000000 --- a/practice/series/instructions.md +++ /dev/null @@ -1,19 +0,0 @@ -# Instructions - -Given a string of digits, output all the contiguous substrings of length `n` in that string in the order that they appear. - -For example, the string "49142" has the following 3-digit series: - -- "491" -- "914" -- "142" - -And the following 4-digit series: - -- "4914" -- "9142" - -And if you ask for a 6-digit series from a 5-digit string, you deserve whatever you get. - -Note that these series are only required to occupy _adjacent positions_ in the input; -the digits need not be _numerically consecutive_. diff --git a/practice/series/series.py b/practice/series/series.py deleted file mode 100644 index 0dd0604..0000000 --- a/practice/series/series.py +++ /dev/null @@ -1,3 +0,0 @@ -# changes -def slices(series, length): - pass diff --git a/practice/series/series_test.py b/practice/series/series_test.py deleted file mode 100644 index 5e0a33d..0000000 --- a/practice/series/series_test.py +++ /dev/null @@ -1,66 +0,0 @@ -# These tests are auto-generated with test data from: -# https://github.com/exercism/problem-specifications/tree/main/exercises/series/canonical-data.json -# File last updated on 2023-07-19 - -import unittest - -from series import ( - slices, -) - - -class SeriesTest(unittest.TestCase): - def test_slices_of_one_from_one(self): - self.assertEqual(slices("1", 1), ["1"]) - - def test_slices_of_one_from_two(self): - self.assertEqual(slices("12", 1), ["1", "2"]) - - def test_slices_of_two(self): - self.assertEqual(slices("35", 2), ["35"]) - - def test_slices_of_two_overlap(self): - self.assertEqual(slices("9142", 2), ["91", "14", "42"]) - - def test_slices_can_include_duplicates(self): - self.assertEqual(slices("777777", 3), ["777", "777", "777", "777"]) - - def test_slices_of_a_long_series(self): - self.assertEqual( - slices("918493904243", 5), - ["91849", "18493", "84939", "49390", "93904", "39042", "90424", "04243"], - ) - - def test_slice_length_is_too_large(self): - with self.assertRaises(ValueError) as err: - slices("12345", 6) - self.assertEqual(type(err.exception), ValueError) - self.assertEqual( - err.exception.args[0], "slice length cannot be greater than series length" - ) - - def test_slice_length_is_way_too_large(self): - with self.assertRaises(ValueError) as err: - slices("12345", 42) - self.assertEqual(type(err.exception), ValueError) - self.assertEqual( - err.exception.args[0], "slice length cannot be greater than series length" - ) - - def test_slice_length_cannot_be_zero(self): - with self.assertRaises(ValueError) as err: - slices("12345", 0) - self.assertEqual(type(err.exception), ValueError) - self.assertEqual(err.exception.args[0], "slice length cannot be zero") - - def test_slice_length_cannot_be_negative(self): - with self.assertRaises(ValueError) as err: - slices("123", -1) - self.assertEqual(type(err.exception), ValueError) - self.assertEqual(err.exception.args[0], "slice length cannot be negative") - - def test_empty_series_is_invalid(self): - with self.assertRaises(ValueError) as err: - slices("", 1) - self.assertEqual(type(err.exception), ValueError) - self.assertEqual(err.exception.args[0], "series cannot be empty") From 80ca33b0a7830cd3933663cc95263c7be79130db Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Mon, 22 Apr 2024 03:48:22 +0530 Subject: [PATCH 36/41] series file deleted --- .DS_Store | Bin 0 -> 6148 bytes practice/.DS_Store | Bin 0 -> 14340 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .DS_Store create mode 100644 practice/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..bf04d668e5c4b60f536fb8b8bd1001c28ffb867a GIT binary patch literal 6148 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 G{{IhGcOo_b literal 0 HcmV?d00001 From 62e44801d9a7b07271dba80e93ce9c363d1e7792 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Mon, 22 Apr 2024 04:03:53 +0530 Subject: [PATCH 37/41] fixed series files --- .DS_Store | Bin 6148 -> 6148 bytes practice/.DS_Store | Bin 14340 -> 14340 bytes practice/series/instructions.append.md | 23 +++++++++ practice/series/instructions.md | 19 +++++++ practice/series/series.py | 2 + practice/series/series_test.py | 66 +++++++++++++++++++++++++ 6 files changed, 110 insertions(+) create mode 100644 practice/series/instructions.append.md create mode 100644 practice/series/instructions.md create mode 100644 practice/series/series.py create mode 100644 practice/series/series_test.py diff --git a/.DS_Store b/.DS_Store index bf04d668e5c4b60f536fb8b8bd1001c28ffb867a..02c4747d554d936bc87d95cbe58079072720ff93 100644 GIT binary patch delta 73 zcmZoMXfc@J&&aVcU^nwbJ+{q)EV7L3MrH;&3dW|JO%B}R5b0}~wu6T{7>to2NjZ?Nl6Y*5+E&heKY01G(` ATmS$7 diff --git a/practice/.DS_Store b/practice/.DS_Store index c44c138f9d52a7f96dde36ddcbbda068db5e3bd0..144571b3c5590616c7560242aff12d32331bd337 100644 GIT binary patch delta 33 pcmZoEXepTB&)BvxU^hRb#bzFX{p_2cOQ^7Kd?3TPnOotfH~`vN3}FBO delta 89 zcmZoEXepTB&)B&!U^hRb^=2M{{p{Rq48;to3`Go?45^bFL`5a%{RaaE5I~Y+D4u*p U>^Luq$mTub#_XH96@H2X03;+FCIA2c diff --git a/practice/series/instructions.append.md b/practice/series/instructions.append.md new file mode 100644 index 0000000..1e76e54 --- /dev/null +++ b/practice/series/instructions.append.md @@ -0,0 +1,23 @@ +# Instructions append + +## Exception messages + +Sometimes it is necessary to [raise an exception](https://docs.python.org/3/tutorial/errors.html#raising-exceptions). When you do this, you should always include a **meaningful error message** to indicate what the source of the error is. This makes your code more readable and helps significantly with debugging. For situations where you know that the error source will be a certain type, you can choose to raise one of the [built in error types](https://docs.python.org/3/library/exceptions.html#base-classes), but should still include a meaningful message. + +This particular exercise requires that you use the [raise statement](https://docs.python.org/3/reference/simple_stmts.html#the-raise-statement) to "throw" a `ValueError` if the series and/or length parameters input into the `slice()` function are empty or out of range. The tests will only pass if you both `raise` the `exception` and include a message with it. + +To raise a `ValueError` with a message, write the message as an argument to the `exception` type: + +```python +# if the slice length is zero. +raise ValueError("slice length cannot be zero") + +# if the slice length is negative. +raise ValueError("slice length cannot be negative") + +# if the series provided is empty. +raise ValueError("series cannot be empty") + +# if the slice length is longer than the series. +raise ValueError("slice length cannot be greater than series length") +``` diff --git a/practice/series/instructions.md b/practice/series/instructions.md new file mode 100644 index 0000000..fd97a67 --- /dev/null +++ b/practice/series/instructions.md @@ -0,0 +1,19 @@ +# Instructions + +Given a string of digits, output all the contiguous substrings of length `n` in that string in the order that they appear. + +For example, the string "49142" has the following 3-digit series: + +- "491" +- "914" +- "142" + +And the following 4-digit series: + +- "4914" +- "9142" + +And if you ask for a 6-digit series from a 5-digit string, you deserve whatever you get. + +Note that these series are only required to occupy _adjacent positions_ in the input; +the digits need not be _numerically consecutive_. diff --git a/practice/series/series.py b/practice/series/series.py new file mode 100644 index 0000000..3b59aa9 --- /dev/null +++ b/practice/series/series.py @@ -0,0 +1,2 @@ +def slices(series, length): + pass diff --git a/practice/series/series_test.py b/practice/series/series_test.py new file mode 100644 index 0000000..5e0a33d --- /dev/null +++ b/practice/series/series_test.py @@ -0,0 +1,66 @@ +# These tests are auto-generated with test data from: +# https://github.com/exercism/problem-specifications/tree/main/exercises/series/canonical-data.json +# File last updated on 2023-07-19 + +import unittest + +from series import ( + slices, +) + + +class SeriesTest(unittest.TestCase): + def test_slices_of_one_from_one(self): + self.assertEqual(slices("1", 1), ["1"]) + + def test_slices_of_one_from_two(self): + self.assertEqual(slices("12", 1), ["1", "2"]) + + def test_slices_of_two(self): + self.assertEqual(slices("35", 2), ["35"]) + + def test_slices_of_two_overlap(self): + self.assertEqual(slices("9142", 2), ["91", "14", "42"]) + + def test_slices_can_include_duplicates(self): + self.assertEqual(slices("777777", 3), ["777", "777", "777", "777"]) + + def test_slices_of_a_long_series(self): + self.assertEqual( + slices("918493904243", 5), + ["91849", "18493", "84939", "49390", "93904", "39042", "90424", "04243"], + ) + + def test_slice_length_is_too_large(self): + with self.assertRaises(ValueError) as err: + slices("12345", 6) + self.assertEqual(type(err.exception), ValueError) + self.assertEqual( + err.exception.args[0], "slice length cannot be greater than series length" + ) + + def test_slice_length_is_way_too_large(self): + with self.assertRaises(ValueError) as err: + slices("12345", 42) + self.assertEqual(type(err.exception), ValueError) + self.assertEqual( + err.exception.args[0], "slice length cannot be greater than series length" + ) + + def test_slice_length_cannot_be_zero(self): + with self.assertRaises(ValueError) as err: + slices("12345", 0) + self.assertEqual(type(err.exception), ValueError) + self.assertEqual(err.exception.args[0], "slice length cannot be zero") + + def test_slice_length_cannot_be_negative(self): + with self.assertRaises(ValueError) as err: + slices("123", -1) + self.assertEqual(type(err.exception), ValueError) + self.assertEqual(err.exception.args[0], "slice length cannot be negative") + + def test_empty_series_is_invalid(self): + with self.assertRaises(ValueError) as err: + slices("", 1) + self.assertEqual(type(err.exception), ValueError) + self.assertEqual(err.exception.args[0], "series cannot be empty") From a225f3445857d13454f9f450e4d6606b47021b99 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Mon, 22 Apr 2024 04:05:17 +0530 Subject: [PATCH 38/41] fixed series files pycache --- .DS_Store | Bin 6148 -> 6148 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.DS_Store b/.DS_Store index 02c4747d554d936bc87d95cbe58079072720ff93..806f3179b222394563d7db4075dfea80bb6c5cf2 100644 GIT binary patch delta 31 ncmZoMXfc@J&&a+pU^g=(`(_@N70i=wulaq4tlNcBn1Q-|?e*$T}|6nk& L&}1_^$6tN`E`$`A From 85a11223e1aa8db7d5f877412b3106c376d427fb Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Mon, 22 Apr 2024 04:11:47 +0530 Subject: [PATCH 39/41] fixed series file added pycache --- .../series/__pycache__/series.cpython-310.pyc | Bin 0 -> 233 bytes .../__pycache__/series_test.cpython-310.pyc | Bin 0 -> 2827 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 practice/series/__pycache__/series.cpython-310.pyc create mode 100644 practice/series/__pycache__/series_test.cpython-310.pyc diff --git a/practice/series/__pycache__/series.cpython-310.pyc b/practice/series/__pycache__/series.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..32bba9edaecac47ecfff668396e7ba5328b88cc6 GIT binary patch literal 233 zcmd1j<>g`k0^fBaX{tc_F^Gc(44TZzAUPNSu^EBb z8HkHnfJ6!dPz|HsN(N1)TWrOtMVYC^x7c!0^U_N)ia-j%#4maM;-X~z%)FA+qO#1? za(#$GD5Y0W3DlaCnVeb-(oqbugN3n(6-fDMLTH3h5EjVhTO2mI`6;D2sdjK(JPZK- C^eNN; literal 0 HcmV?d00001 diff --git a/practice/series/__pycache__/series_test.cpython-310.pyc b/practice/series/__pycache__/series_test.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6da9459e9e65f2e3b74dddd68c8599049d800074 GIT binary patch literal 2827 zcmcIm&2t+y6qokH**JD+(gAZu7mf~(^vumVv zLOkV^-uV|Ow_Nyxbmio8Zaom*)5fv$A-5N_vrp3Qdr!ajxto^DMFQjdzvs8R(}etk zoAKen<}uvrGa#IB8j}{zPE2>5mP5&RguC2(O}Hn>j(g~~JWijHsy_gJ(yUTlP;t~2 zs*U^c;lSoG+=>Gcq(wPtIh=CmHEFrIPSEA^0_=T0#RHfNe3}q`G_A`i+(2UF1{tel3Ex>kXZz_jU@)MU-w!m1SV2q7 zKyzW+7K2d}BUty-fl=M7BlY}LSt z4eh`qtM8UC17+!+ka5^uM8I4gI71JIzefJA?-F6SNo)u0xlSB&ZR!uumz$>u0z@#?8D}bjLrW znMpu=g8Q8UcW*)i9xr6SR^MoB4ood$w|ZMM{iPC%q?5g@KunS}tGp1Ejua3^S;=08 zNhP=Xl<8xRD@RKIdIdTojI+9H!2I>g!SQU(&wjUmhFdJ15K(>E%71-pgNY($6CJv;D zdzL0%?g!(7{)#0(`U1jjbxq}RDD%`}F9bu;I{4%mGhrA^_>SG17|8STRtF73sa?qQ z!3m7qj@uSH6442>2%4Y2lzg`(B>(hcM)ns^OL0`FVz-+e z*wN>G%rKocFD$Ak*$d-{KRQEwsef4{n$=kyFqVY7f-zlWY&Ye-7}q7n@P8+NBk})4 zUPrQkWCh7>B&H(n Date: Mon, 22 Apr 2024 04:15:01 +0530 Subject: [PATCH 40/41] fixed dominoes file --- practice/dominoes/dominoes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/practice/dominoes/dominoes.py b/practice/dominoes/dominoes.py index b982150..d71e6a8 100644 --- a/practice/dominoes/dominoes.py +++ b/practice/dominoes/dominoes.py @@ -1,2 +1,2 @@ def can_chain(dominoes): - pass \ No newline at end of file + pass From 606eb65051ecfe6e4b9487201a5fb337fd340af6 Mon Sep 17 00:00:00 2001 From: Aayush Badoni Date: Mon, 22 Apr 2024 17:29:14 +0530 Subject: [PATCH 41/41] added comments --- practice/affine-cipher/affine_cipher.py | 54 +++++-- practice/alphametics/alphametics.py | 17 +- practice/bank-account/bank_account.py | 52 ++++-- .../binary-search-tree/binary_search_tree.py | 72 +++++++-- practice/book-store/book_store.py | 54 ++++--- practice/bowling/bowling.py | 81 +++++++--- practice/circular-buffer/circular_buffer.py | 80 ++++++---- practice/custom-set/custom_set.py | 92 +++++++++-- practice/food-chain/food_chain.py | 62 ++++---- practice/forth/forth.py | 30 ++-- practice/go-counting/go_counting.py | 82 ++++------ practice/hangman/hangman.py | 44 ++--- practice/knapsack/knapsack.py | 24 +-- practice/markdown/markdown.py | 9 +- practice/meetup/meetup.py | 64 +++----- practice/paasio/paasio.py | 91 +++++++---- .../palindrome_products.py | 46 ++++-- practice/pov/pov.py | 97 ++++++----- practice/react/react.py | 76 +++++++-- practice/rest-api/rest_api.py | 150 +++++++++++++----- practice/robot-simulator/robot_simulator.py | 57 +++---- practice/satellite/satellite.py | 28 +++- practice/scale-generator/scale_generator.py | 45 ++++-- practice/sgf-parsing/sgf_parsing.py | 30 ++-- practice/tree-building/tree_building.py | 37 ++++- practice/two-bucket/two_bucket.py | 98 +++++++----- practice/word-search/word_search.py | 38 ++--- practice/zebra-puzzle/zebra_puzzle.py | 80 ++++++++-- practice/zipper/zipper.py | 86 ++++++++-- 29 files changed, 1210 insertions(+), 566 deletions(-) diff --git a/practice/affine-cipher/affine_cipher.py b/practice/affine-cipher/affine_cipher.py index e282866..0101c10 100644 --- a/practice/affine-cipher/affine_cipher.py +++ b/practice/affine-cipher/affine_cipher.py @@ -1,29 +1,47 @@ -""" -Approach: -- The provided code implements a simple affine cipher, which is a type of substitution cipher. -- The `encode` function encodes plain text using the formula E(x) = (ax + b) mod m, where 'a' and 'm' are coprime, and 'b' is any integer. -- The `decode` function decodes the ciphered text using the formula D(x) = a^(-1)(x - b) mod m. -- The `is_coprime` function checks whether two numbers are coprime. -- The implementation ensures that 'a' and the length of the alphabet are coprime to ensure that every letter is mapped to a unique value. -""" - import math import string def is_coprime(x, y): + """ + Check if two numbers are coprime. + + Args: + x (int): First number. + y (int): Second number. + + Returns: + bool: True if x and y are coprime, False otherwise. + """ return math.gcd(x, y) == 1 def encode(plain_text, a, b): + """ + Encode plain text using the affine cipher. + + Args: + plain_text (str): The plain text to be encoded. + a (int): Coefficient 'a' for the affine cipher. + b (int): Coefficient 'b' for the affine cipher. + + Returns: + str: The encoded cipher text. + + Raises: + ValueError: If 'a' and the length of the alphabet are not coprime. + """ alphabet = list(string.ascii_lowercase) numbers = list(string.digits) + if not is_coprime(a, len(alphabet)): raise ValueError("a and m must be coprime.") + indexes = [] for letter in plain_text.lower(): if letter in alphabet: indexes.append((a * alphabet.index(letter) + b) % len(alphabet)) elif letter in numbers: indexes.append(int(letter) + 1000) + out = "" for place, index in enumerate(indexes): if place % 5 == 0 and place > 1: @@ -37,13 +55,30 @@ def encode(plain_text, a, b): out += alphabet[index] else: out += str(index - 1000) + return out def decode(ciphered_text, a, b): + """ + Decode ciphered text using the affine cipher. + + Args: + ciphered_text (str): The ciphered text to be decoded. + a (int): Coefficient 'a' for the affine cipher. + b (int): Coefficient 'b' for the affine cipher. + + Returns: + str: The decoded plain text. + + Raises: + ValueError: If 'a' and the length of the alphabet are not coprime. + """ alphabet = list(string.ascii_lowercase) numbers = list(string.digits) + if not is_coprime(a, len(alphabet)): raise ValueError("a and m must be coprime.") + indexes = [] for letter in ciphered_text: if letter in numbers: @@ -52,6 +87,7 @@ def decode(ciphered_text, a, b): indexes.append( pow(a, -1, len(alphabet)) * (alphabet.index(letter) - b) % len(alphabet) ) + return "".join( [ str(letter - 1000) if letter > len(alphabet) else alphabet[letter] diff --git a/practice/alphametics/alphametics.py b/practice/alphametics/alphametics.py index d0246df..7fc185c 100644 --- a/practice/alphametics/alphametics.py +++ b/practice/alphametics/alphametics.py @@ -2,7 +2,7 @@ from typing import Dict, Optional, List, Tuple -def parse_puzzle(puzzle: str) -> Tuple[List, str]: +def parse_puzzle(puzzle: str) -> Tuple[List[str], str]: """ Parse the alphametics puzzle into a list of words and the result. @@ -10,9 +10,11 @@ def parse_puzzle(puzzle: str) -> Tuple[List, str]: puzzle (str): The alphametics puzzle to parse. Returns: - Tuple[List, str]: A tuple containing a list of words and the result. + Tuple[List[str], str]: A tuple containing a list of words and the result. """ + # Split the puzzle into words and the result inputs, value = puzzle.split(" == ") + # Split the words based on the '+' sign and strip whitespace words = [i.strip() for i in inputs.split("+")] return (words, value.strip()) @@ -28,17 +30,26 @@ def solve(puzzle: str) -> Optional[Dict[str, int]]: Optional[Dict[str, int]]: A dictionary mapping characters to digits if a solution is found, otherwise None. """ + # Parse the puzzle into words and the result words, value = parse_puzzle(puzzle) + # Find the first character of each word and the result nonzero = set([w[0] for w in words + [value] if len(w) > 1]) + # Gather all unique letters in the puzzle letters = list(set("".join(words + [value])) - nonzero) + list(nonzero) + + # Iterate through all permutations of digits for perm in permutations("0123456789", len(letters)): conv_dict = dict(zip(letters, perm)) - if "0" in perm[-len(nonzero) :]: + # Skip permutations where leading letters map to '0' + if "0" in perm[-len(nonzero):]: continue + # Convert words to integers based on the permutation values = [int("".join(conv_dict[w] for w in word)) for word in words] + # Convert the result to an integer based on the permutation summed = int("".join(conv_dict[v] for v in value)) + # Check if the sum of the words equals the result if sum(values) == summed: return {k: int(v) for k, v in conv_dict.items()} return None diff --git a/practice/bank-account/bank_account.py b/practice/bank-account/bank_account.py index 0d5cdaf..b31c61f 100644 --- a/practice/bank-account/bank_account.py +++ b/practice/bank-account/bank_account.py @@ -1,49 +1,79 @@ class BankAccount: def __init__(self): - # Initialize balance to zero and account status to closed + """Initialize a BankAccount object. + + The balance is set to zero and the account status is closed by default. + """ self._balance = 0 self._opened = False def _raise_error_if_not_open(self): - # Check if account is not open, raise ValueError if closed + """Raise ValueError if the account is closed.""" if not self._opened: raise ValueError("account not open") def _raise_error_if_amount_less_than_0(self, amount): - # Check if amount is less than 0, raise ValueError if negative + """Raise ValueError if the amount is less than zero.""" if amount < 0: raise ValueError("amount must be greater than 0") def get_balance(self): - # Check if account is open, return balance if open + """Get the current balance of the account. + + Returns: + int: The current balance of the account. + + Raises: + ValueError: If the account is closed. + """ self._raise_error_if_not_open() return self._balance def open(self): - # Check if account is already open, raise ValueError if already open + """Open the bank account. + + Raises: + ValueError: If the account is already open. + """ if self._opened: raise ValueError("account already open") - # Set account status to open self._opened = True def deposit(self, amount): - # Check if account is open and amount is valid + """Deposit funds into the bank account. + + Args: + amount (int): The amount to deposit. + + Raises: + ValueError: If the account is closed or the amount is negative. + """ self._raise_error_if_not_open() self._raise_error_if_amount_less_than_0(amount) - # Add deposit amount to balance self._balance += amount def withdraw(self, amount): - # Check if account is open, amount is valid, and balance is sufficient + """Withdraw funds from the bank account. + + Args: + amount (int): The amount to withdraw. + + Raises: + ValueError: If the account is closed, the amount is negative, + or the withdrawal amount exceeds the balance. + """ self._raise_error_if_not_open() self._raise_error_if_amount_less_than_0(amount) if amount > self._balance: raise ValueError("amount must be less than balance") - # Deduct withdrawal amount from balance self._balance -= amount def close(self): - # Check if account is open, close the account, reset balance to zero + """Close the bank account and reset the balance to zero. + + Raises: + ValueError: If the account is already closed. + """ self._raise_error_if_not_open() self._opened = False self._balance = 0 diff --git a/practice/binary-search-tree/binary_search_tree.py b/practice/binary-search-tree/binary_search_tree.py index 1dd6f57..7fe270b 100644 --- a/practice/binary-search-tree/binary_search_tree.py +++ b/practice/binary-search-tree/binary_search_tree.py @@ -1,36 +1,58 @@ -""" -Approach: -- The provided code defines two classes: TreeNode and BinarySearchTree. -- TreeNode represents a single node in a binary search tree, while BinarySearchTree represents the binary search tree itself. -- TreeNode contains the data stored in the node and references to its left and right child nodes. -- BinarySearchTree initializes with a list of data elements and inserts each element into the binary search tree. -- Insertion is done recursively by comparing the data with each node and traversing either the left or right subtree accordingly. -- The search method recursively searches for a specific data element in the binary search tree. -""" - class TreeNode: + """Represents a single node in a binary search tree.""" + def __init__(self, data, left=None, right=None): + """ + Initialize a TreeNode. + + Args: + data: The data stored in the node. + left (TreeNode): Reference to the left child node. + right (TreeNode): Reference to the right child node. + """ self.data = data self.left = left self.right = right def __str__(self): + """Return a string representation of the TreeNode.""" return f'TreeNode(data={self.data}, left={self.left}, right={self.right})' class BinarySearchTree: + """Represents a binary search tree.""" + def __init__(self, tree_data): + """ + Initialize a BinarySearchTree with a list of data elements. + + Args: + tree_data (list): List of data elements to insert into the binary search tree. + """ self.root = None for data in tree_data: self.insert(data) def insert(self, data): + """ + Insert a data element into the binary search tree. + + Args: + data: The data element to insert. + """ if self.root is None: self.root = TreeNode(data) else: self._insert_recursive(data, self.root) def _insert_recursive(self, data, node): + """ + Recursively insert a data element into the binary search tree. + + Args: + data: The data element to insert. + node (TreeNode): The current node being considered. + """ if data <= node.data: if node.left is None: node.left = TreeNode(data) @@ -43,9 +65,28 @@ def _insert_recursive(self, data, node): self._insert_recursive(data, node.right) def search(self, data): + """ + Search for a specific data element in the binary search tree. + + Args: + data: The data element to search for. + + Returns: + TreeNode: The node containing the data if found, otherwise None. + """ return self._search_recursive(data, self.root) def _search_recursive(self, data, node): + """ + Recursively search for a specific data element in the binary search tree. + + Args: + data: The data element to search for. + node (TreeNode): The current node being considered. + + Returns: + TreeNode: The node containing the data if found, otherwise None. + """ if node is None or node.data == data: return node if data < node.data: @@ -54,12 +95,23 @@ def _search_recursive(self, data, node): return self._search_recursive(data, node.right) def data(self): + """Get the root node of the binary search tree.""" return self.root def sorted_data(self): + """Get a list of data elements in sorted order.""" return self._inorder_traversal(self.root) def _inorder_traversal(self, node): + """ + Perform an inorder traversal of the binary search tree. + + Args: + node (TreeNode): The current node being considered. + + Returns: + list: A list of data elements in sorted order. + """ if node is None: return [] return self._inorder_traversal(node.left) + [node.data] + self._inorder_traversal(node.right) diff --git a/practice/book-store/book_store.py b/practice/book-store/book_store.py index 36762b6..3c588d7 100644 --- a/practice/book-store/book_store.py +++ b/practice/book-store/book_store.py @@ -1,39 +1,57 @@ -""" -Approach: -- The problem involves optimizing the total cost of purchasing books in bundles, considering different bundle sizes and discounts. -- The code implements a solution using a greedy approach, initially aiming to create bundles with the maximum size possible. -- However, there's a special case where having two bundles of four books is cheaper than bundles of three and five, making the greedy solution less effective. -- To address this, after applying the greedy solution, the code adjusts any (5, 3) bundle pairs to (4, 4) bundles to optimize the cost. -- Here's how the algorithm works: - 1. Count the number of each book title in the basket using Counter. - 2. Initialize a defaultdict to track the number of bundles by size. - 3. While there are still books in the basket: - - Determine the size of the current bundle (number of distinct titles). - - Update the bundle count for the current size. - - Remove the titles of the current bundle from the basket. - 4. Identify the number of fixes needed to adjust (5, 3) bundle pairs to (4, 4) bundles. - 5. Adjust the bundle counts accordingly: decrease counts for 5-bundles and 3-bundles and increase counts for 4-bundles. - 6. Calculate the total cost by summing the cost of each bundle size multiplied by the number of bundles and the book price, considering discounted rates for each bundle size. -""" from collections import Counter, defaultdict +# Bundle rates for different sizes of bundles BUNDLE_RATES = [1.0, 1.0, 0.95, 0.90, 0.80, 0.75] def total(basket): + """ + Calculate the total cost of purchasing books in bundles. + + Args: + basket (list): A list representing the basket containing book titles. + + Returns: + float: The total cost of purchasing the books. + + Approach: + - The problem involves optimizing the total cost of purchasing books in bundles, considering different bundle sizes and discounts. + - The code implements a solution using a greedy approach, initially aiming to create bundles with the maximum size possible. + - However, there's a special case where having two bundles of four books is cheaper than bundles of three and five, making the greedy solution less effective. + - To address this, after applying the greedy solution, the code adjusts any (5, 3) bundle pairs to (4, 4) bundles to optimize the cost. + - Here's how the algorithm works: + 1. Count the number of each book title in the basket using Counter. + 2. Initialize a defaultdict to track the number of bundles by size. + 3. While there are still books in the basket: + - Determine the size of the current bundle (number of distinct titles). + - Update the bundle count for the current size. + - Remove the titles of the current bundle from the basket. + 4. Identify the number of fixes needed to adjust (5, 3) bundle pairs to (4, 4) bundles. + 5. Adjust the bundle counts accordingly: decrease counts for 5-bundles and 3-bundles and increase counts for 4-bundles. + 6. Calculate the total cost by summing the cost of each bundle size multiplied by the number of bundles and the book price, considering discounted rates for each bundle size. + """ + # Dictionary to store the number of bundles by size num_bundles_by_size = defaultdict(int) + # Count the number of each book title in the basket title_counts = Counter(basket) + # Iterate until all titles are processed while title_counts: + # Get the distinct titles in the basket titles = title_counts.keys() + # Determine the size of the current bundle and update the bundle count num_bundles_by_size[len(titles)] += 1 + # Remove the titles of the current bundle from the basket title_counts.subtract(titles) title_counts += Counter() + # Identify the number of fixes needed to adjust (5, 3) bundle pairs to (4, 4) bundles fixes = min(num_bundles_by_size[5], num_bundles_by_size[3]) + # Adjust the bundle counts accordingly num_bundles_by_size[5] -= fixes num_bundles_by_size[3] -= fixes num_bundles_by_size[4] += 2 * fixes + # Calculate the total cost return sum( num_bundles * bundle_size * 800 * BUNDLE_RATES[bundle_size] for (bundle_size, num_bundles) in num_bundles_by_size.items() - ) \ No newline at end of file + ) diff --git a/practice/bowling/bowling.py b/practice/bowling/bowling.py index 47b92a5..9eaa557 100644 --- a/practice/bowling/bowling.py +++ b/practice/bowling/bowling.py @@ -1,30 +1,18 @@ -""" -Approach: -For scoring a bowling game, the general approach is to implement two main classes: Frame and BowlingGame. - -1. Frame Class: - - The Frame class manages the state of each frame in the bowling game. - - It includes methods to check if the frame is full and if it's invalid based on the number of pins knocked down. - - The roll method is responsible for adding pins to the frame while ensuring the frame remains valid and full. - - The score method calculates the score for the frame considering the pins knocked down and the next throws. - -2. BowlingGame Class: - - The BowlingGame class handles the overall game state. - - It includes methods for rolling the ball and calculating the final score of the game. - - Error handling is implemented to ensure adherence to game rules and scoring protocols. - - The is_full method checks if the game is complete by verifying if all frames are full. - - The roll method rolls the ball and advances to the next frame if the current frame is full. - - The score method calculates the final score of the game by iterating through frames and calculating each frame's score. - -By implementing these classes and methods, we can effectively manage the state of the bowling game, handle player rolls, and accurately calculate the final score while adhering to game rules and scoring protocols. -""" - class Frame(object): + """Represents a single frame in a bowling game.""" + def __init__(self, tenth=False): + """ + Initialize a Frame. + + Args: + tenth (bool): Indicates whether the frame is the tenth frame. + """ self.tenth = tenth self.pins = [] def is_full(self): + """Check if the frame is full.""" if self.tenth: return len(self.pins) == 2 and sum(self.pins) < 10 or \ len(self.pins) == 3 and (sum(self.pins[:2]) == 10 or self.pins[0] == 10) @@ -32,6 +20,7 @@ def is_full(self): return len(self.pins) == 2 or len(self.pins) == 1 and self.pins[0] == 10 def is_invalid(self): + """Check if the frame is invalid.""" if self.tenth: return len(self.pins) == 2 and self.pins[0] < 10 and sum(self.pins) > 10 or \ len(self.pins) == 3 and self.pins[0] == 10 and self.pins[1] != 10 and sum(self.pins[1:]) > 10 @@ -39,15 +28,37 @@ def is_invalid(self): return sum(self.pins) > 10 def roll(self, pins): + """ + Add pins to the frame. + + Args: + pins (int): The number of pins knocked down. + + Returns: + bool: True if the frame is full after the roll, False otherwise. + + Raises: + RuntimeError: If trying to add to a full frame. + ValueError: If the frame becomes invalid after the roll. + """ if self.is_full(): raise RuntimeError("Adding to full frame") else: self.pins.append(pins) if self.is_full() and self.is_invalid(): - raise ValueError ("This frame is not valid: {}".format(self.pins)) + raise ValueError("This frame is not valid: {}".format(self.pins)) return self.is_full() def score(self, next_throws): + """ + Calculate the score for the frame. + + Args: + next_throws (list): The pins knocked down in the next throws. + + Returns: + int: The score for the frame. + """ if next_throws: if self.pins[0] == 10: return sum(self.pins) + sum(next_throws[:2]) @@ -59,17 +70,32 @@ def score(self, next_throws): return sum(self.pins) def __repr__(self): + """Return a string representation of the Frame.""" return "pins={}, full={}, is_invalid={}".format(self.pins, self.is_full(), self.is_invalid()) class BowlingGame(object): + """Represents a bowling game.""" + def __init__(self): + """Initialize a BowlingGame.""" self.frames = [Frame() for _ in range(9)] + [Frame(tenth=True)] self.current = 0 def is_full(self): + """Check if the game is full.""" return all([frame.is_full() for frame in self.frames]) def roll(self, pins): + """ + Roll the ball and add pins to the current frame. + + Args: + pins (int): The number of pins knocked down. + + Raises: + ValueError: If the pins value is invalid. + IndexError: If trying to roll for a full game. + """ if not 0 <= pins <= 10: raise ValueError("Invalid pins value") elif self.is_full(): @@ -79,6 +105,15 @@ def roll(self, pins): self.current += 1 def score(self): + """ + Calculate the final score of the game. + + Returns: + int: The final score of the game. + + Raises: + IndexError: If the game is incomplete. + """ if not self.is_full(): raise IndexError("An incomplete game cannot be scored") @@ -87,4 +122,4 @@ def score(self): next_throws = [throw for next_frame in self.frames[i+1:] for throw in next_frame.pins] score += frame.score(next_throws) - return score \ No newline at end of file + return score diff --git a/practice/circular-buffer/circular_buffer.py b/practice/circular-buffer/circular_buffer.py index fc441a9..137995b 100644 --- a/practice/circular-buffer/circular_buffer.py +++ b/practice/circular-buffer/circular_buffer.py @@ -1,66 +1,82 @@ -""" -Approach: -1. Define two custom exception classes, BufferFullException and BufferEmptyException, inherited from BufferError. - These exceptions are raised when the circular buffer is full or empty, respectively. -2. Implement the CircularBuffer class to simulate a circular buffer data structure. -3. Initialize the CircularBuffer with a given capacity and an empty store to hold the data. -4. Implement methods for reading, writing, overwriting, and clearing the buffer: - - read(): Reads data from the buffer. Raises BufferEmptyException if the buffer is empty. - - write(data): Writes data to the buffer. Raises BufferFullException if the buffer is full. - - overwrite(data): Overwrites data in the buffer. If the buffer is full, replaces the oldest data. - - clear(): Clears the buffer by resetting the store to an empty list. -5. Each method includes error handling to raise the appropriate exception if the buffer is full or empty. -""" - class BufferFullException(BufferError): - """Exception raised when CircularBuffer is full. - - message: explanation of the error. - - """ + """Exception raised when CircularBuffer is full.""" def __init__(self, message): - # Initialize BufferFullException with an error message + """ + Initialize BufferFullException. + + Args: + message (str): Explanation of the error. + """ self.message = message class BufferEmptyException(BufferError): - """Exception raised when CircularBuffer is empty. - - message: explanation of the error. - - """ + """Exception raised when CircularBuffer is empty.""" def __init__(self, message): - # Initialize BufferEmptyException with an error message + """ + Initialize BufferEmptyException. + + Args: + message (str): Explanation of the error. + """ self.message = message class CircularBuffer: + """Simulates a circular buffer data structure.""" + def __init__(self, capacity): - # Initialize CircularBuffer with capacity and an empty store + """ + Initialize CircularBuffer. + + Args: + capacity (int): The maximum capacity of the buffer. + """ self.capacity = capacity self.store = [] def read(self): - # Read data from the buffer + """ + Read data from the buffer. + + Returns: + Any: The data read from the buffer. + + Raises: + BufferEmptyException: If the buffer is empty. + """ if len(self.store) == 0: raise BufferEmptyException("Circular buffer is empty") out = self.store[0] self.store.remove(out) return out - + def write(self, data): - # Write data to the buffer + """ + Write data to the buffer. + + Args: + data (Any): The data to be written to the buffer. + + Raises: + BufferFullException: If the buffer is full. + """ if len(self.store) == self.capacity: raise BufferFullException("Circular buffer is full") self.store.append(data) def overwrite(self, data): - # Overwrite data in the buffer + """ + Overwrite data in the buffer. + + Args: + data (Any): The data to overwrite in the buffer. + """ if len(self.store) == self.capacity: self.store = self.store[1:] + [data] else: self.store.append(data) def clear(self): - # Clear the buffer + """Clear the buffer.""" self.store = [] diff --git a/practice/custom-set/custom_set.py b/practice/custom-set/custom_set.py index 7c02738..6f9e586 100644 --- a/practice/custom-set/custom_set.py +++ b/practice/custom-set/custom_set.py @@ -1,38 +1,112 @@ -""" -Approach: -1. Initialize the CustomSet with an optional list of elements. Convert this list into a set to ensure uniqueness. -2. Define methods to check if the set is empty, if it contains a specific element, if it is a subset of another set, and if it is disjoint from another set. -3. Implement comparison methods to check for equality between two CustomSets. -4. Implement methods to add elements to the set, compute the intersection of two sets, and perform set difference and union operations. -""" - class CustomSet: + """Implements a custom set data structure.""" + def __init__(self, elements=[]): + """ + Initialize CustomSet. + + Args: + elements (list, optional): List of elements to initialize the set. Defaults to an empty list. + """ self.elements = set(elements) def isempty(self): + """Check if the set is empty. + + Returns: + bool: True if the set is empty, False otherwise. + """ return len(self.elements) == 0 def __contains__(self, element): + """ + Check if the set contains a specific element. + + Args: + element: The element to check for membership. + + Returns: + bool: True if the element is in the set, False otherwise. + """ return element in self.elements def issubset(self, other): + """ + Check if the set is a subset of another set. + + Args: + other (CustomSet): The other set to compare against. + + Returns: + bool: True if the set is a subset of the other set, False otherwise. + """ return self.elements.issubset(other.elements) def isdisjoint(self, other): + """ + Check if the set is disjoint from another set. + + Args: + other (CustomSet): The other set to check for disjointness. + + Returns: + bool: True if the set is disjoint from the other set, False otherwise. + """ return self.elements.isdisjoint(other.elements) def __eq__(self, other): + """ + Check if two CustomSets are equal. + + Args: + other (CustomSet): The other CustomSet to compare against. + + Returns: + bool: True if the two sets are equal, False otherwise. + """ return self.elements == other.elements def add(self, element): + """ + Add an element to the set. + + Args: + element: The element to add to the set. + """ self.elements.add(element) def intersection(self, other): + """ + Compute the intersection of two sets. + + Args: + other (CustomSet): The other set to compute the intersection with. + + Returns: + CustomSet: The intersection of the two sets. + """ return CustomSet(self.elements.intersection(other.elements)) def __sub__(self, other): + """ + Compute the set difference between two sets. + + Args: + other (CustomSet): The other set to compute the difference with. + + Returns: + CustomSet: The set difference. + """ return CustomSet(self.elements - other.elements) def __add__(self, other): - return CustomSet(self.elements.union(other.elements)) \ No newline at end of file + """ + Compute the union of two sets. + + Args: + other (CustomSet): The other set to compute the union with. + + Returns: + CustomSet: The union of the two sets. + """ + return CustomSet(self.elements.union(other.elements)) diff --git a/practice/food-chain/food_chain.py b/practice/food-chain/food_chain.py index b57e620..1268ba3 100644 --- a/practice/food-chain/food_chain.py +++ b/practice/food-chain/food_chain.py @@ -1,29 +1,6 @@ -""" -This script generates verses of the song "I Know an Old Lady Who Swallowed a Fly" -based on a specified range of verses. It defines a function `recite` that takes -`start_verse` and `end_verse` parameters to determine which verses to generate. - -Approach: -- Define constants: - - `ANIMAL_LINES`: Contains tuples of animals and their associated phrases. - - `SPIDER_LONG`: The extended phrase for the spider. - - `FIRST_LINE`: The beginning of each verse. -- Define utility functions: - - `she_swallowed`: Constructs the line describing the swallowing of one animal to catch another. -- Generate the verses: - - Iterate over the animals and their phrases. - - For each verse, construct the lines: - - For the first verse, use the initial phrase and the animal's line. - - For the second verse, add the phrase about the spider. - - For the last verse, use only the animal's line. - - For other verses, construct the line describing the swallowing of the current animal to catch the previous one. - - Store the verses in a dictionary indexed by verse number. -- Recite the requested verses: - - Concatenate the lines of the requested verses into a list. - - Return the list of verses with empty strings between verses. -""" from typing import List +# Constants defining the animals and their associated phrases ANIMAL_LINES = [ ("fly", "I don't know why she swallowed the fly. Perhaps she'll die."), ("spider", "It wriggled and jiggled and tickled inside her."), @@ -39,42 +16,59 @@ def she_swallowed(curr_animal: str, prev_animal: str) -> str: + """Constructs the line describing swallowing one animal to catch another.""" return f"She swallowed the {curr_animal} to catch the {prev_animal}." def recite(start_verse: int, end_verse: int) -> List[str]: - verses = {} - cumulative_verse = [] - prev_animal = "" + """ + Generate verses of the song "I Know an Old Lady Who Swallowed a Fly" for the specified range. + + Args: + start_verse (int): The starting verse number. + end_verse (int): The ending verse number. + Returns: + List[str]: A list of strings containing the requested verses of the song, with empty strings between verses. + """ + verses = {} # Dictionary to store verses indexed by verse number + cumulative_verse = [] # List to store lines of each verse + prev_animal = "" # Track the previous animal for constructing "swallowed" lines + + # Iterate over the ANIMAL_LINES to construct the verses for verse_num, line in enumerate(ANIMAL_LINES): curr_animal = line[0] animal_phrase = line[1] first_line = f"{FIRST_LINE}{curr_animal}." second_line = f"{animal_phrase}" + + # For the first verse, use the initial phrase and the animal's line if verse_num == 0: verses[verse_num] = [first_line, second_line] prev_animal = curr_animal cumulative_verse += [second_line] + + # For the second verse, add the phrase about the spider elif verse_num == 2: - cumulative_verse = [ - she_swallowed(curr_animal, SPIDER_LONG) - ] + cumulative_verse + cumulative_verse = [she_swallowed(curr_animal, SPIDER_LONG)] + cumulative_verse verse = [first_line, second_line] + cumulative_verse verses[verse_num] = verse + + # For the last verse, use only the animal's line elif verse_num == 7: verses[verse_num] = [first_line, second_line] + + # For other verses, construct the "swallowed" line and add to the cumulative verse else: - cumulative_verse = [ - she_swallowed(curr_animal, prev_animal) - ] + cumulative_verse + cumulative_verse = [she_swallowed(curr_animal, prev_animal)] + cumulative_verse verse = [first_line, second_line] + cumulative_verse verses[verse_num] = verse prev_animal = curr_animal + # Recite the requested verses recited = [] for verse_num in range(start_verse, end_verse + 1): recited += verses[verse_num - 1] if verse_num < end_verse: - recited.append("") + recited.append("") # Add an empty string between verses return recited diff --git a/practice/forth/forth.py b/practice/forth/forth.py index 460536c..1dccfdc 100644 --- a/practice/forth/forth.py +++ b/practice/forth/forth.py @@ -1,31 +1,34 @@ -""" -Approach: -Basic evaluator for a subset of Forth, a stack-based programming language. -Supports arithmetic operations (+, -, *, /), stack manipulation commands (DUP, DROP, SWAP, OVER), and defining new words. -Custom exceptions are raised with meaningful error messages as required. -""" - import operator class StackUnderflowError(Exception): + """Exception raised when attempting to pop from an empty stack.""" def __init__(self, message): self.message = message def evaluate(input_data): + """ + Evaluate Forth-like expressions. + + Args: + input_data (list): List of Forth-like expressions. + + Returns: + list: Resulting stack after evaluating the input data. + """ data = [i.lower() for i in input_data] stack = [] operators = {"+": operator.add, "-": operator.sub, - "*": operator.mul, "/": operator.floordiv} - manipulations = {"dup": operator.getitem , "drop": operator.delitem, - "over": operator.getitem} + "*": operator.mul, "/": operator.floordiv} + manipulations = {"dup": operator.getitem, "drop": operator.delitem, + "over": operator.getitem} index = {"dup": -1, "drop": -1, "over": -2} user_defined = {} + # Define user-defined operations for i in data: if i[0] == ":" and i[-1] == ";": definition = i[1:-1].split() - if definition[0].isnumeric() or (definition[0][0] == "-" - and definition[0][1:].isnumeric()): + if definition[0].isnumeric() or (definition[0][0] == "-" and definition[0][1:].isnumeric()): raise ValueError("illegal operation") else: instructions = [] @@ -36,6 +39,7 @@ def evaluate(input_data): instructions.append(op) user_defined[definition[0]] = instructions + # Evaluate input expressions for i in data[-1].split(): try: stack.append(int(i)) @@ -66,4 +70,4 @@ def evaluate(input_data): else: raise ValueError("undefined operation") - return stack \ No newline at end of file + return stack diff --git a/practice/go-counting/go_counting.py b/practice/go-counting/go_counting.py index abd7112..b8442a3 100644 --- a/practice/go-counting/go_counting.py +++ b/practice/go-counting/go_counting.py @@ -1,50 +1,43 @@ -""" -This class, `Board`, is designed to analyze territories in a Go game. It defines methods to determine the owner and territories given a coordinate on the board, as well as to find the owners and territories of the entire board. - -Constants: -- `WHITE`: Represents the white player on the Go board. -- `BLACK`: Represents the black player on the Go board. -- `NONE`: Represents an empty intersection on the Go board. -- `UNKNOWN`: Represents an unassigned owner for a territory. - -Class `Board`: -Attributes: -- `board`: A two-dimensional Go board. -- `rows`: The number of rows in the board. -- `cols`: The number of columns in the board. - -Methods: -- `__init__(self, board)`: Initializes the Board instance with the given board configuration. -- `onboard(self, x, y)`: Checks if a given coordinate is within the boundaries of the board. -- `neighbors(self, x, y)`: Finds the neighboring coordinates of a given coordinate. -- `territory(self, x, y)`: Finds the owner and territories given a coordinate on the board. -- `territories(self)`: Finds the owners and territories of the entire board. - -Approach: -- The `territory` method uses a flood fill algorithm to identify enclosed territories and determine their owner. -- The `territories` method iterates over empty intersections on the board, identifies their territories, and assigns them to the respective owners. -""" - WHITE = "W" BLACK = "B" NONE = " " UNKNOWN = "?" class Board: - """Count territories of each player in a Go game + """Class to analyze territories in a Go game.""" - Args: - board (list[str]): A two-dimensional Go board - """ def __init__(self, board): + """Initialize the Board instance with the given board configuration. + + Args: + board (list[str]): A two-dimensional Go board + """ self.board = board self.rows = len(board) self.cols = 0 if self.rows == 0 else len(board[0]) def onboard(self, x, y): + """Check if a given coordinate is within the boundaries of the board. + + Args: + x (int): Column index + y (int): Row index + + Returns: + bool: True if the coordinate is within the board boundaries, False otherwise. + """ return 0 <= x < self.cols and 0 <= y < self.rows def neighbors(self, x, y): + """Find the neighboring coordinates of a given coordinate. + + Args: + x (int): Column index + y (int): Row index + + Returns: + list: List of neighboring coordinates. + """ nbr = [] for dx in (-1, 1): if self.onboard(x + dx, y): @@ -55,18 +48,14 @@ def neighbors(self, x, y): return nbr def territory(self, x, y): - """Find the owner and the territories given a coordinate on - the board + """Find the owner and territories given a coordinate on the board. Args: - x (int): Column on the board - y (int): Row on the board + x (int): Column index + y (int): Row index Returns: - (str, set): A tuple, the first element being the owner - of that area. One of "W", "B", "". The - second being a set of coordinates, representing - the owner's territories. + tuple: A tuple containing the owner of the area ("W", "B", or ""), and a set of coordinates representing the owner's territories. """ if not self.onboard(x, y): raise ValueError("Invalid coordinate") @@ -92,21 +81,16 @@ def territory(self, x, y): return owner, enclosed def territories(self): - """Find the owners and the territories of the whole board - - Args: - none + """Find the owners and territories of the entire board. Returns: - dict(str, set): A dictionary whose key being the owner - , i.e. "W", "B", "". The value being a set - of coordinates owned by the owner. + dict: A dictionary containing the owners ("W", "B", or "") as keys, and sets of coordinates representing their territories as values. """ - t = {WHITE: set(), BLACK: set(), NONE: set()} + territories = {WHITE: set(), BLACK: set(), NONE: set()} vacant = set((c, r) for c in range(self.cols) for r in range(self.rows) if self.board[r][c] == NONE) while len(vacant) != 0: v = vacant.pop() who, where = self.territory(v[0], v[1]) vacant -= where - t[who] |= where - return t + territories[who] |= where + return territories diff --git a/practice/hangman/hangman.py b/practice/hangman/hangman.py index 51a34f1..f126990 100644 --- a/practice/hangman/hangman.py +++ b/practice/hangman/hangman.py @@ -1,14 +1,3 @@ -""" -Hangman game implementation using a class. - -The Hangman class encapsulates the logic for playing the Hangman game. It allows initializing the game with a word, guessing letters, and checking the game's status. - -Approach: -- The class initializes with a word chosen for the game, setting attributes like remaining_guesses, status, and creating a masked version of the word. -- During the game, players can guess letters. If the guessed letter is correct, it updates the masked word; otherwise, it decreases the remaining guesses. -- The game ends either when the word is completely guessed (STATUS_WIN) or when the remaining guesses run out (STATUS_LOSE). - -""" STATUS_WIN = "win" STATUS_LOSE = "lose" STATUS_ONGOING = "ongoing" @@ -17,17 +6,30 @@ class Hangman: """ Class for the Hangman game. """ + def __init__(self, word: str): + """ + Initializes a Hangman game instance. + + Args: + word (str): The word to be guessed in the game. + """ self.word = word self._set_word = set(word) self.remaining_guesses = 9 self.status = STATUS_ONGOING self._masked_word = [0] * len(self.word) self._guessed: set[str] = set() - + def guess(self, char: str) -> None: """ - Try to guess a letter. + Attempts to guess a letter in the word. + + Args: + char (str): The character to be guessed. + + Raises: + ValueError: If the game has already ended. """ if self.status == STATUS_ONGOING: if char not in self._set_word or char in self._guessed: @@ -44,18 +46,24 @@ def guess(self, char: str) -> None: self.status = STATUS_WIN else: raise ValueError("The game has already ended.") - + def get_masked_word(self) -> str: """ - Return the masked word. + Returns the word with guessed letters revealed and unguessed letters masked. + + Returns: + str: The masked word. """ return "".join( letter if self._masked_word[i] else "_" for i, letter in enumerate(self.word) ) - + def get_status(self) -> str: """ - Get the status of the game. + Returns the status of the game. + + Returns: + str: The status of the game ('win', 'lose', or 'ongoing'). """ - return self.status \ No newline at end of file + return self.status diff --git a/practice/knapsack/knapsack.py b/practice/knapsack/knapsack.py index 030ed00..3d1ffca 100644 --- a/practice/knapsack/knapsack.py +++ b/practice/knapsack/knapsack.py @@ -1,20 +1,24 @@ -""" -Approach: -- This code utilizes dynamic programming to solve the knapsack problem, aiming to determine the maximum value achievable with a given maximum weight limit. -- It initializes a 2D array, dp, to store the maximum values for different combinations of items and weight limits. -- The algorithm iterates through each item and each weight limit, computing the maximum value achievable considering whether to include or exclude the current item. -- The function returns the maximum value that can be achieved with the provided weight limit. -""" - def maximum_value(max_weight, items): + """ + Computes the maximum value achievable with a given maximum weight limit using dynamic programming. + + Args: + max_weight (int): The maximum weight limit. + items (list): A list of dictionaries representing items, where each dictionary has keys "weight" and "value". + + Returns: + int: The maximum value achievable with the provided weight limit. + """ n = len(items) + # Initialize a 2D array to store maximum values for different combinations of items and weight limits dp = [[0] * (max_weight + 1) for _ in range(n + 1)] - + for i in range(1, n + 1): for j in range(1, max_weight + 1): + # Decide whether to include or exclude the current item based on weight if items[i - 1]["weight"] <= j: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - items[i - 1]["weight"]] + items[i - 1]["value"]) else: dp[i][j] = dp[i - 1][j] - + return dp[n][max_weight] diff --git a/practice/markdown/markdown.py b/practice/markdown/markdown.py index 3c4bd2f..184a3aa 100644 --- a/practice/markdown/markdown.py +++ b/practice/markdown/markdown.py @@ -1,7 +1,14 @@ import re - def parse(markdown): + """Parses markdown text into HTML. + + Args: + markdown (str): The markdown text to be parsed. + + Returns: + str: The HTML representation of the parsed markdown. + """ lines = markdown.split('\n') res = '' in_list = False diff --git a/practice/meetup/meetup.py b/practice/meetup/meetup.py index 7edba46..238c601 100644 --- a/practice/meetup/meetup.py +++ b/practice/meetup/meetup.py @@ -1,51 +1,35 @@ -""" -Meetup day calculator. - -This module provides a function `meetup` for calculating meetup days based on the year, month, number, and weekday provided. - -Approach: -- The `meetup` function takes the year, month, number (e.g., 'first', 'second'), and weekday (e.g., 'Monday', 'Tuesday') as input. -- It maps weekdays and numbers to corresponding numbers and indices for easier manipulation. -- For 'teenth', it iterates through the teenth days of the given weekday in the specified month and returns the first valid date found. -- For other number cases, it iterates through the month's days of the given weekday and returns the date corresponding to the specified number. -- Custom exceptions are used to handle errors like invalid dates or missing teenth days. - -""" - from datetime import date import calendar class MeetupDayException(Exception): - """Custom exception for when the meetup day is not valid. - - Attributes: - day -- the day that is causing the error - message -- explanation of the error - """ + """Custom exception for invalid meetup days.""" def __init__(self, err, message="That day does not exist."): + """Initialize the MeetupDayException.""" self.err = err self.message = message - return super().__init__(self.message) + super().__init__(self.message) def meetup(year, month, number, weekday): + """ + Calculate meetup days based on the provided year, month, number, and weekday. - days_to_numbers = {'Monday' :0, - 'Tuesday' :1, - 'Wednesday':2, - 'Thursday' :3, - 'Friday' :4, - 'Saturday' :5, - 'Sunday' :6} + Args: + year (int): The year. + month (int): The month (1-12). + number (str): The position of the meetup day ('first', 'second', 'third', 'fourth', 'fifth', 'teenth', 'last'). + weekday (str): The weekday ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'). - number_to_week = {'first' :0, - 'second' :1, - 'third' :2, - 'fourth' :3, - 'fifth' :4, - 'last' :-1} + Returns: + date: The calculated meetup day. + + Raises: + MeetupDayException: If the meetup day is not valid. + """ + days_to_numbers = {'Monday': 0, 'Tuesday': 1, 'Wednesday': 2, 'Thursday': 3, 'Friday': 4, 'Saturday': 5, 'Sunday': 6} + number_to_week = {'first': 0, 'second': 1, 'third': 2, 'fourth': 3, 'fifth': 4, 'last': -1} day_number = days_to_numbers[weekday] number = number.lower() @@ -53,7 +37,7 @@ def meetup(year, month, number, weekday): if number == 'teenth': teenth_cal = calendar.Calendar() teenths = sorted(item for item in teenth_cal.itermonthdays4(year, month) - if item[2] in range(13, 20) and item[3] == day_number) + if 13 <= item[2] <= 19 and item[3] == day_number) if teenths: return date(*teenths[0][:3]) @@ -63,12 +47,10 @@ def meetup(year, month, number, weekday): else: week_number = number_to_week[number] remaining_cal = calendar.Calendar() - cadidates = sorted(item for item in remaining_cal.itermonthdays4(year, month) - if item[1] == month and item[3] == day_number) + candidates = sorted(item for item in remaining_cal.itermonthdays4(year, month) + if item[1] == month and item[3] == day_number) try: - return date(*cadidates[week_number][:3]) - except ValueError as err: - raise MeetupDayException(err) from None - except IndexError as err: + return date(*candidates[week_number][:3]) + except (ValueError, IndexError) as err: raise MeetupDayException(err) from None diff --git a/practice/paasio/paasio.py b/practice/paasio/paasio.py index 4371a37..3378a4b 100644 --- a/practice/paasio/paasio.py +++ b/practice/paasio/paasio.py @@ -1,108 +1,139 @@ -""" -Approach: -- The code defines two classes, MeteredFile and MeteredSocket, to measure the I/O operations performed on files and sockets. -- MeteredFile subclass extends BufferedRandom for file I/O operations. -- MeteredSocket encapsulates socket operations. -- Each class tracks read and write operations along with the number of bytes read and written. -- Renamed variables to adhere to Python naming conventions (snake_case) and improve readability. -""" import io + class MeteredFile(io.BufferedRandom): - """Implement using a subclassing model.""" - + """ + Measure I/O operations performed on files. + + Attributes: + _read_ops (int): Number of read operations. + _write_ops (int): Number of write operations. + _read_bytes (int): Number of bytes read. + _write_bytes (int): Number of bytes written. + """ + def __init__(self, *args, **kwargs): + """Initialize MeteredFile.""" super().__init__(*args, **kwargs) self._read_ops = 0 self._write_ops = 0 self._read_bytes = 0 self._write_bytes = 0 - + def __enter__(self): + """Enter context manager.""" return self - + def __exit__(self, exc_type, exc_val, exc_tb): + """Exit context manager.""" return super().__exit__(exc_type, exc_val, exc_tb) - + def __iter__(self): + """Iterator.""" return self - + def __next__(self): + """Next iterator.""" line = super().readline() self._read_ops += 1 self._read_bytes += len(line) if line: return line raise StopIteration() - + def read(self, size=-1): + """Read from file.""" buf = super().read(size) self._read_ops += 1 self._read_bytes += len(buf) return buf - + @property def read_bytes(self): + """Get number of bytes read.""" return self._read_bytes - + @property def read_ops(self): + """Get number of read operations.""" return self._read_ops - + def write(self, b): + """Write to file.""" bytes_written = super().write(b) self._write_ops += 1 self._write_bytes += bytes_written return bytes_written - + @property def write_bytes(self): + """Get number of bytes written.""" return self._write_bytes - + @property def write_ops(self): + """Get number of write operations.""" return self._write_ops + class MeteredSocket: - """Implement using a delegation model.""" - + """ + Measure I/O operations performed on sockets. + + Attributes: + _recv_ops (int): Number of receive operations. + _send_ops (int): Number of send operations. + _recv_bytes (int): Number of bytes received. + _send_bytes (int): Number of bytes sent. + _socket: The underlying socket object. + """ + def __init__(self, socket): + """Initialize MeteredSocket.""" self._recv_ops = 0 self._send_ops = 0 self._recv_bytes = 0 self._send_bytes = 0 self._socket = socket - + def __enter__(self): + """Enter context manager.""" return self - + def __exit__(self, exc_type, exc_val, exc_tb): + """Exit context manager.""" return self._socket.__exit__(exc_type, exc_val, exc_tb) - + def recv(self, bufsize, flags=0): + """Receive data from the socket.""" self._recv_ops += 1 received_data = self._socket.recv(bufsize, flags) self._recv_bytes += len(received_data) return received_data - + @property def recv_bytes(self): + """Get number of bytes received.""" return self._recv_bytes - + @property def recv_ops(self): + """Get number of receive operations.""" return self._recv_ops - + def send(self, data, flags=0): + """Send data through the socket.""" self._send_ops += 1 bytes_sent = self._socket.send(data, flags) self._send_bytes += bytes_sent return bytes_sent - + @property def send_bytes(self): + """Get number of bytes sent.""" return self._send_bytes - + @property def send_ops(self): + """Get number of send operations.""" return self._send_ops diff --git a/practice/palindrome-products/palindrome_products.py b/practice/palindrome-products/palindrome_products.py index 3038d62..b380d39 100644 --- a/practice/palindrome-products/palindrome_products.py +++ b/practice/palindrome-products/palindrome_products.py @@ -1,15 +1,28 @@ -""" -Palindrome Products- This module contains two functions to find the largest and smallest palindrome products -of numbers within a specified range of factors. The palindrome function checks if a given -number is a palindrome. The largest function finds the largest palindrome product of -numbers within the specified range, while the smallest function finds the smallest one. -""" - def palindrome(s): + """ + Check if a number or string is a palindrome. + + Args: + s (int or str): The number or string to check. + + Returns: + bool: True if the input is a palindrome, False otherwise. + """ s = str(s) return s[::-1] == s - + + def largest(min_factor, max_factor): + """ + Find the largest palindrome product of numbers within the specified range. + + Args: + min_factor (int): The minimum factor. + max_factor (int): The maximum factor. + + Returns: + tuple: A tuple containing the largest palindrome product and its factors. + """ factors_list = [] if min_factor > max_factor: raise ValueError("min must be <= max") @@ -21,16 +34,27 @@ def largest(min_factor, max_factor): if factors_list: return x, factors_list return None, factors_list - + + def smallest(min_factor, max_factor): + """ + Find the smallest palindrome product of numbers within the specified range. + + Args: + min_factor (int): The minimum factor. + max_factor (int): The maximum factor. + + Returns: + tuple: A tuple containing the smallest palindrome product and its factors. + """ factors_list = [] if min_factor > max_factor: raise ValueError("min must be <= max") - for x in range(min_factor ** 2, (max_factor+1) ** 2): + for x in range(min_factor ** 2, (max_factor + 1) ** 2): if palindrome(x): for y in range(min_factor, max_factor + 1): if x % y == 0 and min_factor <= x / y <= max_factor: factors_list.append([y, int(x / y)]) if factors_list: return x, factors_list - return None, factors_list \ No newline at end of file + return None, factors_list diff --git a/practice/pov/pov.py b/practice/pov/pov.py index dc66499..320a48c 100644 --- a/practice/pov/pov.py +++ b/practice/pov/pov.py @@ -1,80 +1,77 @@ -""" -Approach: -- The provided code defines a Tree class for representing trees and performing tree-related operations. -- The class includes methods for initialization, converting the tree to a dictionary, string representation, comparison, reorienting the tree from a specific node's point of view, and finding a path between two nodes. -""" - from json import dumps + class Tree: + """A class representing a tree and its operations.""" + def __init__(self, label, children=None): """ Initialize a Tree object with a label and optional children. - + Args: - label (any): The label of the tree node. - children (list, optional): List of child Tree objects. Defaults to None. + label (any): The label of the tree node. + children (list, optional): List of child Tree objects. Defaults to None. """ self.label = label self.children = children if children is not None else [] - - def __dict__(self): + + def to_dict(self): """ Convert the tree to a dictionary representation. - + Returns: - dict: Dictionary representation of the tree. + dict: Dictionary representation of the tree. """ - return {self.label: [c.__dict__() for c in sorted(self.children)]} - + return {self.label: [c.to_dict() for c in sorted(self.children)]} + def __str__(self, indent=None): """ Convert the tree to a JSON-formatted string. - + Args: - indent (int, optional): Indentation level. Defaults to None. - + indent (int, optional): Indentation level. Defaults to None. + Returns: - str: JSON-formatted string representing the tree. + str: JSON-formatted string representing the tree. """ - return dumps(self.__dict__(), indent=indent) - + return dumps(self.to_dict(), indent=indent) + def __lt__(self, other): """ Compare two Tree objects based on their labels. - + Args: - other (Tree): Another Tree object. - + other (Tree): Another Tree object. + Returns: - bool: True if the current object's label is less than the other object's label, False otherwise. + bool: True if the current object's label is less than the other object's label, False otherwise. """ return self.label < other.label - + def __eq__(self, other): """ Compare two Tree objects for equality. - + Args: - other (Tree): Another Tree object. - + other (Tree): Another Tree object. + Returns: - bool: True if the two objects are equal, False otherwise. + bool: True if the two objects are equal, False otherwise. """ - return self.__dict__() == other.__dict__() - + return self.to_dict() == other.to_dict() + def from_pov(self, from_node): """ Reorient the tree from the perspective of a specific node. - + Args: - from_node (any): The label of the node from which the tree should be reoriented. - + from_node (any): The label of the node from which the tree should be reoriented. + Returns: - Tree: The reoriented tree. - + Tree: The reoriented tree. + Raises: - ValueError: If the specified node is not found in the tree. + ValueError: If the specified node is not found in the tree. """ cur_path = [[self, 0]] while cur_path: @@ -96,25 +93,25 @@ def from_pov(self, from_node): c[0].children.append(p[0]) p = c return cur_path[-1][0] - + def path_to(self, from_node, to_node): """ Find the path between two nodes in the tree. - + Args: - from_node (any): The label of the starting node. - to_node (any): The label of the target node. - + from_node (any): The label of the starting node. + to_node (any): The label of the target node. + Returns: - list: The path from the starting node to the target node. - + list: The path from the starting node to the target node. + Raises: - ValueError: If the starting node is not found in the tree or if no path is found between the two nodes. + ValueError: If the starting node is not found in the tree or if no path is found between the two nodes. """ to_find = {from_node, to_node} found_paths = dict() cur_path = [] - + def helper(subtree): nonlocal to_find, found_paths, cur_path cur_path.append(subtree.label) @@ -126,18 +123,18 @@ def helper(subtree): break helper(c) cur_path.pop() - + helper(self) if from_node in to_find: raise ValueError("Tree could not be reoriented") if to_node in to_find: raise ValueError("No path found") - + from_path = found_paths[from_node] to_path = found_paths[to_node] from_part = [] to_part = [] - + while len(from_path) > len(to_path): from_part.append(from_path.pop()) while len(to_path) > len(from_path): diff --git a/practice/react/react.py b/practice/react/react.py index ba8b873..d5f4bed 100644 --- a/practice/react/react.py +++ b/practice/react/react.py @@ -1,34 +1,62 @@ class InputCell: def __init__(self, initial_value): - # Initialize the value and set of observers + """ + Initialize an InputCell. + + Args: + initial_value: The initial value of the InputCell. + """ self._value = initial_value self._observers = set() @property def value(self): - # Getter for the value property + """ + Getter for the value property. + + Returns: + The current value of the InputCell. + """ return self._value @value.setter def value(self, new_value): - # Setter for the value property + """ + Setter for the value property. + + Args: + new_value: The new value to be set. + """ self._value = new_value # Notify observers upon value change for observer in self._observers: observer.compute() def register_observer(self, observer): - # Add observer to the set of observers + """ + Register an observer for this InputCell. + + Args: + observer: The observer to be registered. + """ self._observers.add(observer) def compute(self): - # Placeholder method for computing the value of InputCell + """ + Placeholder method for computing the value of InputCell. + """ pass class ComputeCell: def __init__(self, inputs, compute_function): - # Initialize inputs, compute function, callbacks, and value + """ + Initialize a ComputeCell. + + Args: + inputs: The list of InputCells that this ComputeCell depends on. + compute_function: The function used to compute the value based on inputs. + """ self.inputs = inputs self.compute_function = compute_function self.callbacks = set() @@ -38,27 +66,49 @@ def __init__(self, inputs, compute_function): @property def value(self): - # Getter for the value property + """ + Getter for the value property. + + Returns: + The current value of the ComputeCell. + """ return self._value @value.setter def value(self, computed_value): - # Setter for the value property + """ + Setter for the value property. + + Args: + computed_value: The new computed value to be set. + """ self._value = computed_value # Notify callbacks upon value change for callback in self.callbacks: callback(self.value) def add_callback(self, callback): - # Add callback to the set of callbacks + """ + Add a callback function to be called when the value changes. + + Args: + callback: The callback function to be added. + """ self.callbacks.add(callback) def remove_callback(self, callback): - # Remove callback from the set of callbacks + """ + Remove a callback function. + + Args: + callback: The callback function to be removed. + """ self.callbacks.discard(callback) def _start_observing_ultimate_observables(self): - # Method to start observing ultimate observables + """ + Start observing ultimate observables in the input hierarchy. + """ def ultimate_observables(inputs): for input_ in inputs: if isinstance(input_, ComputeCell): @@ -70,7 +120,9 @@ def ultimate_observables(inputs): ultimate_observable.register_observer(self) def compute(self): - # Compute the value based on inputs and compute function + """ + Compute the value based on inputs and compute function. + """ for input_ in self.inputs: input_.compute() computed_value = self.compute_function([input_.value for input_ in self.inputs]) diff --git a/practice/rest-api/rest_api.py b/practice/rest-api/rest_api.py index 7078453..ab3229e 100644 --- a/practice/rest-api/rest_api.py +++ b/practice/rest-api/rest_api.py @@ -1,74 +1,91 @@ -""" -The RestAPI class provides a simple RESTful API interface for managing user data. Here's an overview of the approach: -1. Class Structure: - - The class maintains a `user_database` dictionary to store user data. - - Separate dictionaries `get_handlers` and `post_handlers` are used to map URLs to corresponding handler methods. -2. Initialization: - - In the `__init__` method, the user-provided database (if any) is assigned to `user_database`. - - Default handlers for GET and POST requests are set for the `/users`, `/add`, and `/iou` endpoints. -3. GET and POST Handling: - - The `get` and `post` methods handle HTTP GET and POST requests respectively by delegating to the `execute_handler` method. - - The `execute_handler` method retrieves the appropriate handler function for the given URL from the corresponding dictionary. -4. Handler Execution: - - The handler functions defined for various endpoints process the requests and return the appropriate responses. - - Handlers are responsible for validating input, performing operations on the user database, and generating responses. -5. User Management: - - The `get_users`, `get_named_users`, and `add_user` methods handle user-related requests. - - `get_users` returns a JSON string of all users or filtered users based on provided names. - - `add_user` adds a new user to the database if it doesn't already exist. - - `get_named_users` filters users based on provided names. -6. IOU Management: - - The `add_iou` method handles IOU-related requests. - - It parses the payload to extract lender, borrower, and amount information. - - It adjusts balances for both lender and borrower accordingly and updates the user database. - - The method ensures that both lender and borrower exist in the database before proceeding. -7. Balances Adjustment: - - The `adjust_balances` method updates balances for a user after an IOU is added. - - It determines the appropriate balance types (`owes` or `owed_by`) based on whether the user is the lender or borrower. - - It adjusts balances and handles cases where previous balances need to be cancelled or reduced. -8. Error Handling: - - Various exceptions are raised to handle error conditions such as missing keys in payload, user not found, etc. - - Exceptions provide informative error messages to aid in debugging and troubleshooting. -9. Utility Methods: - - Utility methods like `create_user`, `increase_named_balance`, and `find_user` are used to perform common tasks in a modular manner. - -""" import json -class RestAPI(): +class RestAPI: user_database = dict() get_handlers = dict() post_handlers = dict() def __init__(self, database=None): - pass - self.user_database = database + """ + Initialize the RestAPI with an optional database. + + Args: + database (dict, optional): The initial user database. Defaults to None. + """ + self.user_database = database or {'users': []} self.get_handlers['/users'] = self.get_users self.post_handlers['/add'] = self.add_user self.post_handlers['/iou'] = self.add_iou def get(self, url, payload=None): - pass + """ + Handle GET requests. + + Args: + url (str): The URL for the GET request. + payload (str, optional): The payload for the GET request. Defaults to None. + + Returns: + str: The response to the GET request. + """ return self.execute_handler(self.get_handlers, url, payload) def post(self, url, payload=None): - pass + """ + Handle POST requests. + + Args: + url (str): The URL for the POST request. + payload (str, optional): The payload for the POST request. Defaults to None. + + Returns: + str: The response to the POST request. + """ return self.execute_handler(self.post_handlers, url, payload) @staticmethod def execute_handler(handlers, url, payload): + """ + Execute the handler for the given URL. + + Args: + handlers (dict): Dictionary of handlers. + url (str): The URL for the request. + payload (str): The payload for the request. + + Returns: + str: The response to the request. + """ handler = handlers.get(url) if not handler: raise ValueError(f"No route defined for {url}.") return handler(payload) def get_users(self, payload): + """ + Handle GET request for users. + + Args: + payload (str): The payload for the request. + + Returns: + str: The response to the request. + """ if payload: return self.get_named_users(payload) else: return json.dumps(self.user_database) def get_named_users(self, payload): + """ + Handle GET request for named users. + + Args: + payload (str): The payload for the request. + + Returns: + str: The response to the request. + """ try: names = json.loads(payload)['users'] names.sort() @@ -81,6 +98,15 @@ def get_named_users(self, payload): return json.dumps({"users": users}) def add_user(self, payload): + """ + Handle POST request to add a user. + + Args: + payload (str): The payload for the request. + + Returns: + str: The response to the request. + """ try: name = json.loads(payload)['user'] except KeyError: @@ -97,9 +123,27 @@ def add_user(self, payload): @staticmethod def create_user(name): + """ + Create a user with the given name. + + Args: + name (str): The name of the user. + + Returns: + dict: The user dictionary. + """ return {"name": name, "owes": {}, "owed_by": {}, "balance": 0.0} def add_iou(self, payload): + """ + Handle POST request to add an IOU. + + Args: + payload (str): The payload for the request. + + Returns: + str: The response to the request. + """ try: iou = json.loads(payload) lender = self.find_user(iou['lender']) @@ -125,6 +169,15 @@ def add_iou(self, payload): return json.dumps({"users": users}) def adjust_balances(self, user, user_is_lender, name, amount): + """ + Adjust balances for a user. + + Args: + user (dict): The user dictionary. + user_is_lender (bool): Indicates if the user is the lender. + name (str): The name of the other party involved. + amount (float): The amount of the IOU. + """ reduce_balance = 'owes' if user_is_lender else 'owed_by' increase_balance = 'owed_by' if user_is_lender else 'owes' @@ -142,6 +195,14 @@ def adjust_balances(self, user, user_is_lender, name, amount): @staticmethod def increase_named_balance(balances, name, amount): + """ + Increase the named balance. + + Args: + balances (dict): The balance dictionary. + name (str): The name of the other party involved. + amount (float): The amount of the IOU. + """ if name in balances: new_balance = balances[name] + amount if new_balance: @@ -152,6 +213,15 @@ def increase_named_balance(balances, name, amount): balances[name] = amount def find_user(self, name): + """ + Find a user by name. + + Args: + name (str): The name of the user. + + Returns: + dict: The user dictionary if found, None otherwise. + """ for user in self.user_database['users']: if user['name'] == name: return user diff --git a/practice/robot-simulator/robot_simulator.py b/practice/robot-simulator/robot_simulator.py index 076d7b6..a918537 100644 --- a/practice/robot-simulator/robot_simulator.py +++ b/practice/robot-simulator/robot_simulator.py @@ -1,16 +1,5 @@ -# Approach: -# 1. Define the global constants NORTH, EAST, SOUTH, WEST to represent directions. -# 2. Implement the Robot class with attributes direction and coordinates representing its orientation and position. -# 3. Implement the move method to handle the movement instructions for the robot: -# - For each movement instruction in the input string: -# - If it's "R" (right turn), update the direction of the robot accordingly. -# - If it's "L" (left turn), update the direction of the robot accordingly. -# - If it's "A" (advance), update the coordinates of the robot based on its current direction. -# 4. Use index manipulation to handle the rotation of the robot to the right or left. -# 5. Update the coordinates of the robot when advancing based on its current direction. - # Globals for the directions -# Change the values as you see fit +# Change the values as needed NORTH = [0, 1] EAST = [1, 0] SOUTH = [0, -1] @@ -18,26 +7,30 @@ class Robot: def __init__(self, direction=NORTH, x_pos=0, y_pos=0): - # Initialize the robot with direction and coordinates + """ + Initialize the Robot with direction and coordinates. + + Args: + direction (list, optional): Initial direction. Defaults to NORTH. + x_pos (int, optional): Initial x-coordinate. Defaults to 0. + y_pos (int, optional): Initial y-coordinate. Defaults to 0. + """ self.direction = direction self.coordinates = (x_pos, y_pos) - def move(self, mvr): - # Define directions and iterate through movement instructions - dir = [NORTH, EAST, SOUTH, WEST] - for mv in mvr: - # Update direction for 'R' (right turn) and 'L' (left turn) - if mv == "R": - if dir.index(self.direction) == 3: - self.direction = dir[0] - else: - self.direction = dir[dir.index(self.direction) + 1] - elif mv == "L": - if dir.index(self.direction) == 0: - self.direction = dir[3] - else: - self.direction = dir[dir.index(self.direction) - 1] - # Update coordinates for 'A' (advance) - elif mv == "A": - self.coordinates = (self.coordinates[0] + self.direction[0], - self.coordinates[1] + self.direction[1]) + def move(self, instructions): + """ + Move the robot based on the provided instructions. + + Args: + instructions (str): A string containing movement instructions ('R', 'L', 'A'). + """ + directions = [NORTH, EAST, SOUTH, WEST] + for instruction in instructions: + if instruction == "R": + self.direction = directions[(directions.index(self.direction) + 1) % 4] + elif instruction == "L": + self.direction = directions[(directions.index(self.direction) - 1) % 4] + elif instruction == "A": + dx, dy = self.direction + self.coordinates = (self.coordinates[0] + dx, self.coordinates[1] + dy) diff --git a/practice/satellite/satellite.py b/practice/satellite/satellite.py index 4f592fa..bcc11ad 100644 --- a/practice/satellite/satellite.py +++ b/practice/satellite/satellite.py @@ -1,11 +1,13 @@ -""" -Approach: -- The provided code defines a function, tree_from_traversals, that constructs a binary tree from its preorder and inorder traversals. -- It first checks for validity conditions such as the lengths of the traversals being equal, containing the same elements, and unique elements. -- Then, it calls the build_tree function which recursively constructs the binary tree. -""" - def build_tree(preorder_traversal, inorder_traversal): + """Recursively constructs a binary tree. + + Args: + preorder_traversal (list): Preorder traversal of the binary tree. + inorder_traversal (list): Inorder traversal of the binary tree. + + Returns: + dict: The constructed binary tree. + """ if len(preorder_traversal) == 0: return {} root_val = preorder_traversal.pop(0) @@ -18,6 +20,18 @@ def build_tree(preorder_traversal, inorder_traversal): def tree_from_traversals(preorder, inorder): + """Constructs a binary tree from its preorder and inorder traversals. + + Args: + preorder (list): Preorder traversal of the binary tree. + inorder (list): Inorder traversal of the binary tree. + + Returns: + dict: The constructed binary tree. + + Raises: + ValueError: If traversals are invalid. + """ if len(preorder) != len(inorder): raise ValueError("traversals must have the same length") if set(preorder) != set(inorder): diff --git a/practice/scale-generator/scale_generator.py b/practice/scale-generator/scale_generator.py index d6e21f3..2764093 100644 --- a/practice/scale-generator/scale_generator.py +++ b/practice/scale-generator/scale_generator.py @@ -1,24 +1,32 @@ -""" -Scale Generator - This class, Scale, is designed to generate musical scales based on a given tonic note. -It utilizes a chromatic scale with both sharp and flat keys. The chromatic method -returns a list of notes in the scale based on the given intervals. The intervals are -specified as a string where 'm' stands for minor, 'M' for major, and 'A' for augmented. -The get_scale method generates the appropriate scale based on the key signature, -which can be either sharp or flat, and the get_keysig method determines the key -signature based on the tonic note provided. -""" - class Scale: NOTES = ["A", "AB", "B", "C", "CD", "D", "DE", "E", "F", "FG", "G", "GA"] SEL_SHARP = ["C", "a", "G", "D", "A", "E", "B", "e", "b"] def __init__(self, tonic): + """Initialize the Scale object with the tonic note. + + Args: + tonic (str): The tonic note for the scale. + """ self.tonic = tonic def chromatic(self): + """Generate a chromatic scale based on the tonic note. + + Returns: + list: A list of notes in the chromatic scale. + """ return self.interval() def interval(self, intervals="".join(["m" for note in NOTES[:-1]])): + """Generate a scale based on specified intervals. + + Args: + intervals (str, optional): String specifying intervals ('m' for minor, 'M' for major, 'A' for augmented). Defaults to "mmmmmmmmmmmm". + + Returns: + list: A list of notes in the scale based on the specified intervals. + """ scale = self.get_scale(self.get_keysig()) result = [] result.append(self.tonic.capitalize()) @@ -30,11 +38,19 @@ def interval(self, intervals="".join(["m" for note in NOTES[:-1]])): index += 2 if interval == "A": index += 3 - index = index%len(scale) + index = index % len(scale) result.append(scale[index]) return result def get_scale(self, keysig): + """Determine the scale based on the key signature. + + Args: + keysig (str): The key signature ("Sharp" or "Flat"). + + Returns: + list: A list of notes in the scale. + """ scale = [] for note in self.NOTES: if len(note) == 1: @@ -46,6 +62,11 @@ def get_scale(self, keysig): return scale def get_keysig(self): + """Determine the key signature based on the tonic note. + + Returns: + str: The key signature ("Sharp" or "Flat"). + """ if self.tonic in self.SEL_SHARP or self.tonic[-1] == "#": return "Sharp" - return "Flat" \ No newline at end of file + return "Flat" diff --git a/practice/sgf-parsing/sgf_parsing.py b/practice/sgf-parsing/sgf_parsing.py index e1bf33a..b1144d2 100644 --- a/practice/sgf-parsing/sgf_parsing.py +++ b/practice/sgf-parsing/sgf_parsing.py @@ -1,21 +1,30 @@ -""" -Approach: -- The provided code defines a class `SgfTree` to represent a tree structure with properties and children, and a function `parse` to parse SGF (Smart Game Format) strings into tree structures. -- The `SgfTree` class has methods for equality comparison, representation, and inequality comparison. -- The `parse` function takes an SGF string as input and constructs an `SgfTree` object representing the parsed tree structure. -- The parsing process involves handling property-value pairs, nested tree structures, and handling escape characters. -- The function iterates through the input string, extracting property-value pairs and recursively parsing nested tree structures. -- The code utilizes regular expressions to extract property-value pairs and handle escape characters efficiently. -""" +''' Approach: +The provided code defines a class `SgfTree` to represent a tree structure with properties and children, and a function `parse` to parse SGF (Smart Game Format) strings into tree structures. +The `SgfTree` class has methods for equality comparison, representation, and inequality comparison. +The `parse` function takes an SGF string as input and constructs an `SgfTree` object representing the parsed tree structure. +The parsing process involves handling property-value pairs, nested tree structures, and handling escape characters. +The function iterates through the input string, extracting property-value pairs and recursively parsing nested tree structures. +The code utilizes regular expressions to extract property-value pairs and handle escape characters efficiently. +''' import re class SgfTree: + """Represent a tree structure with properties and children.""" + def __init__(self, properties=None, children=None): + """ + Initialize an SgfTree object with properties and children. + + Args: + properties (dict, optional): Dictionary of properties. Defaults to None. + children (list, optional): List of child SgfTree objects. Defaults to None. + """ self.properties = properties or {} self.children = children or [] def __eq__(self, other): + """Check if two SgfTree objects are equal.""" if not isinstance(other, SgfTree): return False for key, value in self.properties.items(): @@ -34,12 +43,15 @@ def __eq__(self, other): return True def __repr__(self): + """Return a string representation of the SgfTree object.""" return f"SgfTree(properties={self.properties!r}, children={self.children!r})" def __ne__(self, other): + """Check if two SgfTree objects are not equal.""" return not self == other def parse(input_string): + """Parse an SGF string into an SgfTree object.""" if input_string == "(;)": return SgfTree() if not input_string.startswith("("): diff --git a/practice/tree-building/tree_building.py b/practice/tree-building/tree_building.py index dc8ab8e..0584ed7 100644 --- a/practice/tree-building/tree_building.py +++ b/practice/tree-building/tree_building.py @@ -1,4 +1,6 @@ -""" +"""" +Build Tree - Build a tree structure from a list of records. + Approach: 1. Define a Record class to represent each record with attributes record_id and parent_id. 2. Define a Node class to represent each node in the tree with an ID and a list of children nodes. @@ -9,20 +11,49 @@ 7. Iterate through the records to build the tree structure: - For each record, add its corresponding node to the children list of its parent node. 8. Return the root node of the tree. -""" +Args: + records (list): A list of Record objects representing records with record_id and parent_id. + +Returns: + Node or None: The root node of the built tree structure, or None if no records are provided. + +Raises: + ValueError: If record_id is invalid or out of order, if parent_id is not smaller than the record_id, + or if a node other than the root has equal record and parent id. + +Example: + >>> records = [Record(0, 0), Record(1, 0), Record(2, 0)] + >>> BuildTree(records) + Node(node_id=0, children=[Node(node_id=1, children=[]), Node(node_id=2, children=[])]) +""" class Record: + """Represents a record with attributes record_id and parent_id.""" def __init__(self, record_id, parent_id): self.record_id = record_id self.parent_id = parent_id class Node: + """Represents a node in the tree with an ID and a list of children nodes.""" def __init__(self, node_id): self.node_id = node_id self.children = [] def BuildTree(records): + """ + Build a tree structure from a list of records. + + Args: + records (list): A list of Record objects representing records with record_id and parent_id. + + Returns: + Node or None: The root node of the built tree structure, or None if no records are provided. + + Raises: + ValueError: If record_id is invalid or out of order, if parent_id is not smaller than the record_id, + or if a node other than the root has equal record and parent id. + """ root = None records.sort(key=lambda x: x.record_id) if records and records[-1].record_id != len(records) - 1: @@ -37,4 +68,4 @@ def BuildTree(records): trees[records[i].parent_id].children.append(trees[i]) if len(trees) > 0: root = trees[0] - return root \ No newline at end of file + return root diff --git a/practice/two-bucket/two_bucket.py b/practice/two-bucket/two_bucket.py index 2df386f..13ce247 100644 --- a/practice/two-bucket/two_bucket.py +++ b/practice/two-bucket/two_bucket.py @@ -1,43 +1,77 @@ +"""" +Water Bucket Problem - Measure the minimum number of moves required to achieve a specific goal volume of water using two buckets of different sizes. + +Approach: +1. Initialize the buckets with their maximum capacities and current volumes. +2. Fill the specified start bucket to begin the process. +3. Check if the goal is already achieved. If yes, return the result. +4. Explore all possible moves by pouring, emptying, or filling the buckets, considering the constraints and avoiding redundant states. +5. Perform depth-first search (DFS) to find the minimum moves required to reach the goal. +6. Utilize a recursive approach to explore all possible move sequences, keeping track of visited states to avoid cycles. +7. Return the minimum move required to reach the goal. + +Args: + bucket_one (int): The maximum capacity of the first bucket. + bucket_two (int): The maximum capacity of the second bucket. + goal (int): The desired volume of water to measure. + start_bucket (str): The bucket to start with, either "one" or "two". + +Returns: + tuple: A tuple containing the minimum number of moves required to achieve the goal and the corresponding bucket status upon reaching the goal. + +Raises: + ValueError: If the start_bucket is neither "one" nor "two". + +Example: + >>> measure(5, 7, 3, "one") + (1, "one", 0) +""" + import copy def measure(bucket_one, bucket_two, goal, start_bucket): - # Initialize the buckets - buckets = [] - buckets.append({"max": bucket_one, "cur": 0}) - buckets.append({"max": bucket_two, "cur": 0}) - - # Fill the specified start bucket + """ + Measure the minimum number of moves required to achieve a specific goal volume of water. + + Args: + bucket_one (int): The maximum capacity of the first bucket. + bucket_two (int): The maximum capacity of the second bucket. + goal (int): The desired volume of water to measure. + start_bucket (str): The bucket to start with, either "one" or "two". + + Returns: + tuple: A tuple containing the minimum number of moves required to achieve the goal and the corresponding bucket status upon reaching the goal. + + Raises: + ValueError: If the start_bucket is neither "one" nor "two". + """ + buckets = [{"max": bucket_one, "cur": 0}, {"max": bucket_two, "cur": 0}] fill(buckets, 0 if start_bucket == "one" else 1) - - # Check if the goal is already achieved + result = is_done(buckets, goal) if result: return (1, *result) - # List to store all possible moves moves = [] for i in range(6): - # Try each move and store the result _r = move(i, buckets, goal, start_bucket, 1, [buckets]) if _r: moves.append(_r) - - # Return the minimum move required to reach the goal + return min(moves) -# Function to check if the goal is achieved def is_done(buckets, goal): + """Check if the goal is achieved.""" if buckets[0]["cur"] == goal: return ("one", buckets[1]["cur"]) if buckets[1]["cur"] == goal: return ("two", buckets[0]["cur"]) return False -# Function to perform a move def move(index, buckets, goal, start_bucket, count, history): + """Perform a move and explore subsequent moves recursively.""" _buckets = copy.deepcopy(buckets) - - # Perform the move based on the index + if index == 0: pour(_buckets, 0, 1) # Pour from bucket one to bucket two elif index == 1: @@ -51,26 +85,21 @@ def move(index, buckets, goal, start_bucket, count, history): elif index == 5: fill(_buckets, 1) # Fill bucket two - # Check if both buckets are empty if _buckets[0]["cur"] + _buckets[1]["cur"] == 0: return False - - # Determine which bucket is first and second based on the start bucket + first_bucket = 0 if start_bucket == "one" else 1 second_bucket = 1 if start_bucket == "one" else 0 - - # Check if the move results in an invalid state or if it's already been visited + if is_empty(_buckets, first_bucket) and is_full(_buckets, second_bucket): return False if _buckets in history: return False - - # Check if the goal is achieved after the move + result = is_done(_buckets, goal) if result: return (count+1, *result) - # List to store all possible subsequent moves moves = [] for i in range(6): if i == index: @@ -78,25 +107,20 @@ def move(index, buckets, goal, start_bucket, count, history): _r = move(i, _buckets, goal, start_bucket, count+1, [*history, _buckets]) if _r: moves.append(_r) - - # Return the minimum move required to reach the goal + if moves: return min(moves) -# Function to check if a bucket is empty def is_empty(buckets, which_bucket): - if buckets[which_bucket]["cur"] == 0: - return True - return False + """Check if a bucket is empty.""" + return buckets[which_bucket]["cur"] == 0 -# Function to check if a bucket is full def is_full(buckets, which_bucket): - if buckets[which_bucket]["cur"] == buckets[which_bucket]["max"]: - return True - return False + """Check if a bucket is full.""" + return buckets[which_bucket]["cur"] == buckets[which_bucket]["max"] -# Function to pour water from one bucket to another def pour(buckets, from_bucket, to_bucket): + """Pour water from one bucket to another.""" left = buckets[to_bucket]["max"] - buckets[to_bucket]["cur"] if buckets[from_bucket]["cur"] > left: fill(buckets, to_bucket) @@ -105,10 +129,10 @@ def pour(buckets, from_bucket, to_bucket): buckets[to_bucket]["cur"] += buckets[from_bucket]["cur"] empty(buckets, from_bucket) -# Function to empty a bucket def empty(buckets, which_bucket): + """Empty a bucket.""" buckets[which_bucket]["cur"] = 0 -# Function to fill a bucket def fill(buckets, which_bucket): + """Fill a bucket.""" buckets[which_bucket]["cur"] = buckets[which_bucket]["max"] diff --git a/practice/word-search/word_search.py b/practice/word-search/word_search.py index cdf8cf5..4d5ccde 100644 --- a/practice/word-search/word_search.py +++ b/practice/word-search/word_search.py @@ -1,35 +1,37 @@ class Point: def __init__(self, x, y): - # Initialize Point object with x and y coordinates + """Initialize Point object with x and y coordinates.""" self.x = x self.y = y def __eq__(self, other): - # Check if two Point objects are equal + """Check if two Point objects are equal.""" return self.x == other.x and self.y == other.y def __repr__(self): - # Return string representation of Point object + """Return string representation of Point object.""" return f"Point(x={self.x}, y={self.y})" class WordSearch: def __init__(self, puzzle): - # Initialize WordSearch object with puzzle + """Initialize WordSearch object with puzzle.""" self.puzzle = puzzle def search(self, word): - # Search for the word in all possible directions - return self.left_to_right_search(word) or \ - self.right_to_left_search(word) or \ - self.up_to_down_search(word) or \ - self.down_to_up_search(word) or \ - self.top_right_to_bottom_left_search(word) or \ - self.bottom_left_to_top_right_search(word) or \ - None + """Search for the word in all possible directions.""" + return ( + self.left_to_right_search(word) + or self.right_to_left_search(word) + or self.up_to_down_search(word) + or self.down_to_up_search(word) + or self.top_right_to_bottom_left_search(word) + or self.bottom_left_to_top_right_search(word) + or None + ) def left_to_right_search(self, word): - # Search for the word from left to right in puzzle rows + """Search for the word from left to right in puzzle rows.""" for y, row in enumerate(self.puzzle): if word in row: x1 = row.find(word) @@ -37,7 +39,7 @@ def left_to_right_search(self, word): return (Point(x1, y), Point(x2, y)) def right_to_left_search(self, word): - # Search for the word from right to left in puzzle rows + """Search for the word from right to left in puzzle rows.""" for y, row in enumerate(self.puzzle): row = "".join(reversed(row)) if word in row: @@ -46,7 +48,7 @@ def right_to_left_search(self, word): return (Point(x1, y), Point(x2, y)) def up_to_down_search(self, word): - # Search for the word from top to bottom in puzzle columns + """Search for the word from top to bottom in puzzle columns.""" columns = zip(*self.puzzle) for x, column in enumerate(columns): column = "".join(column) @@ -56,7 +58,7 @@ def up_to_down_search(self, word): return (Point(x, y1), Point(x, y2)) def down_to_up_search(self, word): - # Search for the word from bottom to top in puzzle columns + """Search for the word from bottom to top in puzzle columns.""" columns = zip(*self.puzzle) for x, column in enumerate(columns): column = "".join(reversed(column)) @@ -66,7 +68,7 @@ def down_to_up_search(self, word): return (Point(x, y1), Point(x, y2)) def top_right_to_bottom_left_search(self, word): - # Search for the word diagonally from top right to bottom left + """Search for the word diagonally from top right to bottom left.""" for y in range(0, len(self.puzzle) - len(word)): for x in range(0, len(self.puzzle[0]) - len(word)): chars = [] @@ -84,7 +86,7 @@ def top_right_to_bottom_left_search(self, word): return (Point(x + i1, y + i1), Point(x + i2, y + i2)) def bottom_left_to_top_right_search(self, word): - # Search for the word diagonally from bottom left to top right + """Search for the word diagonally from bottom left to top right.""" for y in range(len(word) - 1, len(self.puzzle)): for x in range(0, len(self.puzzle[0]) - len(word)): chars = [] diff --git a/practice/zebra-puzzle/zebra_puzzle.py b/practice/zebra-puzzle/zebra_puzzle.py index 3ce6d6f..92bc3af 100644 --- a/practice/zebra-puzzle/zebra_puzzle.py +++ b/practice/zebra-puzzle/zebra_puzzle.py @@ -1,11 +1,16 @@ -""" -Iterate through all possible permutations of attributes for each house, -applying the given constraints and return the solution when found. -""" - from itertools import permutations def solve(): + """ + Iterate through all possible permutations of attributes for each house, + applying the given constraints and return the solution when found. + + Returns: + list: A list containing dictionaries with solutions for each attribute. + Each dictionary represents a house with its attributes. + Example: [{'person': 'Norwegian', 'color': 'yellow', 'drink': 'water', 'animal': 'fox', 'smoke': 'Chesterfields'}, ...] + + """ people = ("Norwegian", "Englishman", "Spaniard", "Ukrainian", "Japanese") colors = ("green", "blue", "red", "yellow", "ivory") animals = ("dog", "snails", "horse", "fox", "zebra") @@ -17,6 +22,7 @@ def solve(): drinkmix = [x for x in permutations(drinks) if x[2] == "milk" and x[3] == "coffee" and "tea" not in (x[0], x[2]) and x[0] != "orange juice"] animalmix = [x for x in permutations(animals) if x[0] != "dog" and x[1] == "horse"] smokemix = [x for x in permutations(smokes) if x[0] == "Kools" and "Lucky Strike" not in (x[2], x[3]) and x[1] != "Old Gold"] + for p in peoplemix: for c in colormix: for d in drinkmix: @@ -28,24 +34,39 @@ def solve(): solution = solve() def drinks_water(): + """ + Returns the person who drinks water. + + Returns: + str: The name of the person who drinks water. + + """ for t in solution: if t['drink'] == 'water': return t['person'] def owns_zebra(): + """ + Returns the person who owns the zebra. + + Returns: + str: The name of the person who owns the zebra. + + """ for t in solution: if t['animal'] == 'zebra': return t['person'] - -# //////////////////// binary search tree: +class TreeNode: + """ + Represents a node in a binary search tree. -""" -add() inserts new data item into binary search tree while maintaining the sorted order. -sorted_data() performs in-order traversal of tree to retrieve all data items in sorted order. -""" + Attributes: + data: The data stored in the node. + left: The left child of the node. + right: The right child of the node. + """ -class TreeNode: def __init__(self, data, left=None, right=None): self.data = data self.left = left @@ -56,12 +77,31 @@ def __str__(self): class BinarySearchTree: + """ + Represents a binary search tree. + + Attributes: + root: The root node of the binary search tree. + """ + def __init__(self, tree_data): + """ + Initialize the binary search tree with data. + + Args: + tree_data (list): A list of data items to initialize the tree. + """ self.root = None for data in tree_data: self.add(data) def add(self, data): + """ + Inserts new data item into the binary search tree while maintaining the sorted order. + + Args: + data: The data item to be inserted. + """ if self.root is None: self.root = TreeNode(data) return @@ -70,7 +110,7 @@ def add(self, data): while not inserted: if data <= cur_node.data: - if cur_node.left: + if cur_node.left: cur_node = cur_node.left else: cur_node.left = TreeNode(data) @@ -89,9 +129,21 @@ def _inorder_traverse(self, node, elements): self._inorder_traverse(node.right, elements) def data(self): + """ + Returns the root node of the binary search tree. + + Returns: + TreeNode: The root node of the binary search tree. + """ return self.root def sorted_data(self): + """ + Performs in-order traversal of the tree to retrieve all data items in sorted order. + + Returns: + list: A list of data items in sorted order. + """ elements = [] self._inorder_traverse(self.root, elements) - return elements \ No newline at end of file + return elements diff --git a/practice/zipper/zipper.py b/practice/zipper/zipper.py index b5d255c..9f9a743 100644 --- a/practice/zipper/zipper.py +++ b/practice/zipper/zipper.py @@ -1,53 +1,119 @@ class Zipper: @staticmethod def from_tree(tree): - # Constructs a Zipper instance from a given tree. + """ + Constructs a Zipper instance from a given tree. + + Args: + tree (dict): The tree to construct the Zipper instance from. + + Returns: + Zipper: The constructed Zipper instance. + """ return Zipper(dict(tree), []) def __init__(self, tree, ancestors): - # Initializes a Zipper instance with a tree and ancestors. + """ + Initializes a Zipper instance with a tree and ancestors. + + Args: + tree (dict): The tree associated with the Zipper instance. + ancestors (list): The list of ancestors of the current node in the tree. + """ self.tree = tree self.ancestors = ancestors def value(self): - # Returns the value of the current node. + """ + Returns the value of the current node. + + Returns: + Any: The value of the current node. + """ return self.tree['value'] def set_value(self, value): - # Sets the value of the current node. + """ + Sets the value of the current node. + + Args: + value (Any): The value to set for the current node. + + Returns: + Zipper: The updated Zipper instance. + """ self.tree['value'] = value return self def left(self): - # Moves to the left child node if it exists. + """ + Moves to the left child node if it exists. + + Returns: + Zipper or None: The Zipper instance representing the left child node, + or None if the left child node does not exist. + """ if self.tree['left'] is None: return None return Zipper(self.tree['left'], self.ancestors + [self.tree]) def set_left(self, tree): - # Sets the left child of the current node. + """ + Sets the left child of the current node. + + Args: + tree (dict): The tree to set as the left child of the current node. + + Returns: + Zipper: The updated Zipper instance. + """ self.tree['left'] = tree return self def right(self): - # Moves to the right child node if it exists. + """ + Moves to the right child node if it exists. + + Returns: + Zipper or None: The Zipper instance representing the right child node, + or None if the right child node does not exist. + """ if self.tree['right'] is None: return None return Zipper(self.tree['right'], self.ancestors + [self.tree]) def set_right(self, tree): - # Sets the right child of the current node. + """ + Sets the right child of the current node. + + Args: + tree (dict): The tree to set as the right child of the current node. + + Returns: + Zipper: The updated Zipper instance. + """ self.tree['right'] = tree return self def up(self): - # Moves to the parent node if it exists. + """ + Moves to the parent node if it exists. + + Returns: + Zipper or None: The Zipper instance representing the parent node, + or None if the parent node does not exist. + """ if not self.ancestors: return None return Zipper(self.ancestors[-1], self.ancestors[:-1]) def to_tree(self): - # Returns the root of the tree. + """ + Returns the root of the tree. + + Returns: + dict: The root of the tree associated with the Zipper instance. + """ if any(self.ancestors): return self.ancestors[0] return self.tree