Created
March 25, 2025 20:14
-
-
Save neumond/afe78e261cc9cd78e38fec0461fb446c to your computer and use it in GitHub Desktop.
Игра 5 букв
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import random | |
| from base64 import b85decode | |
| from itertools import count | |
| ALPHABET = 'абвгдежзийклмнопрстуфхцчшщъыьэюя' | |
| def decode(data): | |
| data = b85decode(data.replace(b'\n', b'')) | |
| all_words, guess_list = set(), [] | |
| word, acc, shift = 0, 0, 0 | |
| for b in data: | |
| acc |= (b & 0x7f) << shift | |
| shift += 7 | |
| if not (b & 0x80): | |
| word += acc | |
| text = ''.join( | |
| ALPHABET[(word & (0x1f << i)) >> i] | |
| for i in range(21, 0, -5)) | |
| all_words.add(text) | |
| if word & 0x1: | |
| guess_list.append(text) | |
| acc, shift = 0, 0 | |
| return all_words, guess_list | |
| all_words, guess_list = decode(b''' | |
| #)Aa90g?+7yb|v+-5U6Juo}ey38ON|8Mqn38t{PuYr!qN1(+O#0i^-DE93#<G1oDk7X$nz3*XrRfCUi7 | |
| EQ}-rqbZzF$pVuVm>3Y~IMtp4t1+-wqawEi$O!160oro*k_3y<1Aut1k_W~O`kw)YK)?dL1d0&C7PKOe | |
| vjM&X1fZD#oFwu;4(<;S_yWfZqyZJD5za0!*`oo12>d3_BJC#09~Yql2(AGR1d$BX0*M5e2yeY6hCGN1 | |
| ?g*F+;4OelfCWH-3HLk50nh=52MXT@3Xu<`DY-VGJ-jXpzyaWw0-pqdAOW=ks|5ZJoD%*m#v8T)jx4_x | |
| ?>oW)_5;>2z!u07nT7+S{{j9?f?t*+>JW?{<_xL@!0Q2k1Aqk24aXLQ2gm~W1Aqm+4e12I0i*)!9i0rW | |
| 9rFgU9pMTz#zcq{o&)9$`WLbSvjLABhZLrQ0iT=!1*1`tEDGHPfC8gD-Jk)Ys{z6SwGF%_ydHuek)Q(o | |
| a^Ii>zb?TA>&64>GX9(e{K5n9paYsCz$X4L>V^~;q@4uS>jl{YoB?@Tt_Xt?!vT;11iS%(1NjL01FH(+ | |
| A%X;*9YBEt+XKD_aM1z91iAvY0`Uc8*#Se70>%RR13az<-3tZb0e}Og1n(vWHLw9pHIV@c2?|o10@enP | |
| 2Y>;12NedU0bt|?5C#gc0>A<C0u`+S5(@kS>IbYN3S!;?P{J0&1ndp|0qctq`UdwOr3runodfqP_#N~D | |
| pbG-|2J;9Q7?uJUq5*S>0t>zdI2o`398lx~><x@CD;}EzkOTSw68{^A-U<2yf(`Zv<Q1v`zyi4qfH3<n | |
| &kK_Sq5-BF9J~e051ayl8m$3SlnNQM1K$N;;RpW%PR0Sn0{R0ud)Lwl+yR^e#{#)eqbuwJ-D7}B+^zwI | |
| 1eXkm2#}TtkOH&;{{s3LA*&g7gazyn)dqzStPlDMzXg~H=>&-nnG2r*{}S8+B%=ejCJOlhH5;1&{Q?i9 | |
| 0-Y8`XOjc+OB&$>lmhF0os0w|KMeE(dB*`Fs7T5K>j4Vz1?MB}0rLWQtOJ!;vIPzXx&?>H0i89ur3l3W | |
| <pWyz7>@-10^kan0%!jM)CYztz$Rzk0R`m(G?)RZ0p$mq0l@=5*a3na>MIZj3Ecs&0#S(rHktv82DK2t | |
| 0=oeLg#)DljscSy1osl91KjK#qi>4>{|13({|Spph4BLV`vLsz0g%oD!~)!f0l?e^l#c<2BY;5V9i$5k | |
| kO-my2EqoS0tpKR2dM!CW|RWH0tpYf1fCeb0-zrH2<8KU0lxuMvj~|Jx&deYApa190->%0-`NY_u>!p{ | |
| y#b~epc1+TrW=44<OZ+-5dH~%!4hX238(>Ul>+MlxF3lKcaQ-Z91O1q#{u05WK-+`Io$@M0jL3>0zaWm | |
| xdG-7$_<bQ?Dz!Q4e162lOPJZYqSKC3AqB`3f~E<EB6WmjH>~RYP2260=EHx1NbPE1O@*h-5o&F0je3; | |
| 1AqgE1f&X|4Xq8<37rCw34{W_2<ima0`&%$DVPDRE*Xlc2Ds4zzq1O#-~pB-stc4Gqyk8j5p4ef6|EoE | |
| 34;)(0f7Zn4g~_61K<O5;WmvC6$%F52G1M&1*}zpaMQyAq|E`xP{HK^>cIn^S^1Cy_?-fX(h$h|3;n(W | |
| %mfeh2+RV>0p0=zkqP1hnFG55feF+ER>J{>3cU~#?Gh1=De?vky#fQQ2G;_h1QU`8>;?*h5at*S3InkM | |
| !U2i{1gi_f0k8#v3C0`$DBK&N4f_PZ+yuar36lbwtpQP>`vHUmfCGRD_5;WcvoZey2j(540)QES1YJMh | |
| 0lNab1}nh@nE{pw&;e{zzyXab^8s1s1EK?fFZu$=1h6vQ5zT-B=YRy6oebtRz#H8sk{E{&<^j$O#Q_KZ | |
| 0(bZefDrf*lL3((+yk8f+pGefz6WaHEujU#4!vB~45|~NEW8H38i)kq0{l&Zj0qH^0gnQ(Qq(K;10#R| | |
| fdQ1L0l*80blEnr5%!G%qRs=KE%*b6VE9s^*8%tj%MV0^5bz9u1BYIs3z`BHr~&l?8n6Z(7y=)w0f+&( | |
| 1BV0k3SGAWU6TS0^B95<*8&ry0bN{wEh4!Awg#UH#}0}hwh_QAiu(lg1DgRa1Q`^F1KUO%hyp=}0r&xc | |
| 1;Hh^0l@>S0Xv}t!B+>G1)oVctOT3|fOmjD_yLEF2;2n{%LSVQMikQo{UMhS{~YWP+ySaN(hnFShy>;V | |
| 5KV;x?k&m)<^jF}Y*v~9`UnOGvjWfo?hoz+)<DMYCdwv=qyp050l}dLlLE{Vx(4P{zyZJkz8u^OC%^=o | |
| 5BM*R1>zc(Jc<O}5V+$7*|!VQ0<!@Qivx%O?FQ-ua+w1B80rL+0_+{w9*hOI7lsF{3m}UFqY(%13NaJ4 | |
| 3$`K<iUOtsxC4m|_X5ZVfdru+@E^#a0r~;#0f2d%1*OshorwdZB-<J0IK4;J1IG>r!3(|wpaP%^0s^c7 | |
| 45R~y0=N&{E~Fs9Ba|NHj|s?siiQZ)iUWP@4)_k40iP@10f`ge9l!y=0pJRt6Vwa`1+@XJ0#j`53X=lC | |
| 0bl~>1GEFeCd3WB0+j->0*?eWk0$RD_#OWb!2ATt0lNV_fB|=`1NlbG1CRj-Ke>tlNBIE|n*;s<o&mr~ | |
| NWQ-Tvjg*+2$TYOn*sI)i~<DuAMFIw1g#sRJG=tK4W0t45R(Gz4Y&co1o<4e3hM-b1022z#trlX+zA?x | |
| BIYE45R?MsPM4DgsP7KQ*$9CXlmhHM+kgT1j0ud80s3EvfC2Kq0fXQHl(!4$DCX4yhl>G#rwhQk1C#>f | |
| zYoZNzRv@kssfOR3D3|3n|p#2{+t2Bg#r7B0<P~4fRihM1At1IKFb1~1pXa>K$HUQ8UF*^;02_g43q+_ | |
| j{!rq0>J{Z7*&7`xgas~0^Aeg4bl4vo&*UJ<pz)f`WEFc1?M{mlmdwYfd}>$s4MIS`vk-T<q6UXfC}@d | |
| 4!YX`$j$;B<O$N31g=tnmIv#%3$AVZ1NI4zGQ9$+5`l1(0<xPi%mfbh2+INky#eO}2H*m+2I2#l1H1x& | |
| 3B3Uf^a2gv3dsS`5CMh*fe@nxy$660jtd75@dgFM0tSEvfCC7b0SWm65t9kF0s#WH0s8_A1l<IQ1{U@L | |
| jRNKv4h#sH0?z~o2dxXt0qz0~tpbMz`vSoP5efpd2L1#N9h(9A0tW`A2=WHeAk_<m5CgRV><icuzyZI) | |
| 1slNu$iEAe508)m=LR9b1d{`%4!ANKs6B-93bsPRj|!#N0l$O-zo7*B0^5oN?4SXf3pckTxSs~Cj|`^) | |
| fdk8n0fHBX4yYEeD8P;$+61QC3e>F!zyXes2d>lt@O_n8&?M7=1KoTVsRYFWy~YB8Hw~`)1g(ezfL*Sr | |
| 0=5#N0fPev^bC*#?Mme^v;_SR3WE^c5ZlKA`Us0Cg1G{^?*^q^zyiH1q!oa$0-oyvfC1e*`BJwnlb!?7 | |
| 8MOwq0=NN$18NY{0kQ>)6@Wvc0=_$$Kc^9tB(&-QoN%@d?gkvL3IY%s+ya201d0uUfdc#v-fh4H;y}Rr | |
| 0-isbBIg6)0k;P4M!y2r9nTA!1P$~r%IgKu!3F;N4)|||F#0d1@jb|b81Mn&eD=sR@bnSY4+i@K3hD#Q | |
| 0l)^t3A_db3j7Ae3#|bjQPc>)A_WoW1Fr%&>H_x|<^mig{{cYV2m22K0uvF_0~MG7m<Y-O9=-yd0cF4f | |
| fB~Wb-T|=!qXGjCTvd<)+5%f2p#r%D%oCpjl>rO|8>Irk2AlyKBv%8d0X%{ML6ZT{0Uf^rfCbb8Z5!$V | |
| y8%Ff2Oq!!1EmBE+XkQtkPP4jo)+K&mH~ti0%wx~tOUUc$pMl9<^hli?oPo6pP2;31h4@ZlLNus0fDCq | |
| o)p*-2I6z@0n`#3;SmVgB-0J71KJ$41Pq5ApEdjxiueec42%c#2(<(c{us<Ds0zLdz%&Gm3h)7p0iY0o | |
| 0#pXO6pIR=0>BQz0lx*M2pNL{{{uPM2K*-SErAgK`v|xJ$O7X7!A$W2P*iK(DjU)PEJ&#Y&|RcWU!nwo | |
| sR5$}oe{U%1ndOeCgB6#1^MU##}U8-5XK2=)&pzJ1=0czvjU$2z7N(5%mUy7+5vzW(Fvaf%><zYBIg~+ | |
| 0b0BZ1m*&U0ZRn~y#nC|p8^CMl>rc3P_h9M1_lGS0_FkB0vdaP0WZY^>j4mX466Z-0U+)NBvlxv0c_j@ | |
| Ku2Bc1nUqOvI43B79T;u0lxv-0sI3skOJiaYz2@4fB}L5y#zRt0?Gke5Uv801Cs#(r2^3e%K?G|z5)LN | |
| z8k;+?*zRI<`4G^$pW1M-wmMxf0O~f3-0a&!2zKHTxNP>;{o|c+XNnBY6Fukhy|ool>yfSXi1_1-T}!0 | |
| g-Egk_W_9lH|2Tc0>A^AqynDU1>IZ60l5K<39JH*P@@C~l_{45kO992j06b<y8;UlqyZZ20{sRJ?EwfC | |
| (E_0X^#Z;I4zdFHAK?O#1DOE?@(2Y2EJ5P|2+{#Ul>!aO0s;ii1lI_S3916l0SNK}!~*67TBa4k4F3gz | |
| 0^u2;0+b7n1gwMwkh%frBgpa^jQIrgR@M0dzmx&)ObGP<1A&YJ)dGhH#Rl>NUw{MI5y1xk1EmV0BpreR | |
| lme_7zyW~+(hV7;0<Z+28QuYd1ET_*2p!`Bs2^GX1Azno1V9{l7_9;45ZeR33ue>=odoj~zybUV;0S;m | |
| lme`e0*VI8lMj#t-3QSD(gF;S3DpgN8S4bsE2;#G3!DU=4x|tUkptfYx(a5M0_*`B<N=@u#SokV{{n#l | |
| {|kW-lmeszhXKF}lmf;Ax>o-Kfe`HW0l@eMfdk(VV44WV0-yrn9o+%vEA;~i^a8{J_$UvZ5WxZ43yTEy | |
| 0_FnK2yK3?9-RSq&;!K_>k!%mrU&5xvH>eXiwX4`t_GzNza7H@#f=p=!~+NU0@w?Z1C|bs1KtgQAd>?A | |
| IBuH;#{#k%ZIc4*3+pDTEe@MK)*FGB5r9yu3Y;~hE2IKlnIC4pY1bA10_*P`+p+=q1FZ*uP#nO31>%|n | |
| !UT!}3C$b&j{%Ahwjsy`vI>k9^$Ho#0)iuyE$q1gfi!?%p)cMH$``h5{*(cN3!n@111rG+qyhB^r3Ath | |
| p$`8Dzyh=ZY+R!O7Rv$!`xv1DTV!GL2m}NK#R9Vgr~wdg<OZ<<7^eYjivp1Xw*(#;4#@#A2qqk*1epSa | |
| 2?PSU0V4`S6sZ9<K@be30aFaH0Wcj2FuD$h7z4rqqyd2fAzhOS?*v@F0j2?X$P1GK@&^v9726B;0q_N) | |
| 4Du4~0gv+ny6FPW;S1&qmjV9*_6EuU>>=6(^dIsKzzgC79LfR>4d@yMgaT~-Eu8^oz!O{?(gflGF1Z52 | |
| 0SsS2$N>!qfAcSl6Xgw*4#WHiyd#<kkrbgWt~AyG+XtlrodSsh3%v$X{sHm>%nk(_q67iK0-X$k8Vj=n | |
| )dK})fB}IFjS_O8IN&7I1jx$?gxd@D2EYP?3Aq8$1s#A#fdu~ooDKE??gW7aH^>8}0tK)L2C4?33b6q$ | |
| wggzP8@UgCkpu?o0-OQ41i}aN2HFIn0ek)d7YzFW#3|qd!5)ARzX7@Z1cy(GwF{0Y{SSa7s|}L@ffmsx | |
| uLA7?(+If%y#zI#4GJ2N3ZNv=0l)!TXItV3;|Tc=yaKBq51t3?6Xp=03xEV+|AG;Kzzvj4<pG-k_ZIa= | |
| (haWyfCibR2BlQn0?O+Gq>%x*?E>*K&k+6)f()EPfCjM#y$g#*kemUc0{H^M0UzNA6br%v0=)rVj{*b3 | |
| 2F3yg;RBchyaIs<$pP~Mu>yq(y$}-tz7Dt|@B)tr2oB=|jspx{-U<hw0Tu273;YPj0uQzU`~t29&I0}c | |
| 7TN-$0;3zv1P`qXy9D?FZPx>Y0zaDvy9V|I4&)5G1^*M52k{2C4WkYMwgKjSz>^4&;Q_Rn1e~A(zyhEH | |
| i2;!f$OR795BGMj0+a%h0@@4F0Ycy%pc0k>E144P72Xe(3acrcvI&j?+ya(Mlme_VUFQuT-4dBb=M<R& | |
| gHoae{}I&#fshsV0*48MG;EnN`yBHN*#d(Qz%d#_fB`>6sR`!;Yn1|x4PXCDfds!2fVvUEAm2c=5ylP% | |
| &H>mv`XrqL&)OfT1b`j)3H3(0@CT`(0n5n(^`i##s{_jdrvwF!5W5S?0i*@P8W95Q0+0|3;0mK2^#%#T | |
| 3$X$30s;&Nf(gI^1q8MM`~t29-U*fq$OVrW6{`Zq1O=!9E!G2s0{a5>9*6?SBikFW9k&9G5d0O7&;gWW | |
| j}zq*nhcszn3w^<-U0F(mCyp31c<Exmo&%B2EYM;&;#88n=Z>xkL?1Iyaj*<*7*U}2Fpm^IN=7bAdCdV | |
| F2Dtg81e&w1F-_a3J-z|$^w-XtC<4!1K$GQ0;ngR1>yspSL0g1g#m#HfQJG91Kb12S*H!`b)E{!!2!a9 | |
| 0iL!2<oE)BumPQ+0lxx)O?Qa`qbSt~V9YI_29PDJ0)YdfAMqTkK*F2>zXTk<0iFTlC!_?N4hFUq@d%nF | |
| _yK?!fDqCGr~!rpx(Lt^_!Wpgt{%bxkPzf6`GEn8Q0)Y$0^ck_)*1d2i37F>M)(5~@&XK>892`YxdNFx | |
| 7W4z*0ul5EiUB~ShyjO5fd_*Oj{^?&2nxai0;B{5^bD8-y#jy<lLvtWjtGtp672$z5U&QxA{OHVjsp$6 | |
| 0t15ypaFmb0oVe}2DSpW1dI^w4*3ZUiwCX?xC9QZ0)qsE0{a3H%>=Rw!341g!za}XxDC$&v;oB)`VXeG | |
| 1*VY!{u{y$zA^togqZ={$N`k^28B$<1+*%_{sR71r;Y{P>KViovkUYB9H{|>0k{DeB$h4g8NdR;0hI!( | |
| 0iX&6nggT?2?GJT0s|400W3qo1l|gu1MmpZ0bk$)9gzndH0%+g0<{8&3m>Ke#{nrq{s9UM1?T};3Elxe | |
| fC?Pt0yu~P(*%YA#sa+oqXmHq;uH7?i3HpPn+N6;j|=Yx-ENVs5bXxY1`hOQ_6WlT#}1qi*9@}(5_z@( | |
| 7+%i-y9dk^!vVJh?+AziC6fYNi34@81mgs#0ptP(7QqY70owuW1C~p@3$6mE0dD;P;tPNW;p+&S0l^;s | |
| 1;!4ZESmx43V;`y7X`rr1+@g`1cU@2fCOBc0t>SOybXW}#scI4Lcjr4>j8iqr3?Q9X8i#T1_aLwlLFcV | |
| unLL;2lWA3p#-!R;{x9ifD)4_r0odO1GNFB0vsGYXQ4(P-~rwP0hIy=U8DkBt16uW{{gvPqygjq0g9pp | |
| {e=VC1oa3D!vduQ1qAR6nFIF>4(0+31)&R(0oV-P1_;s%2*CuT1`mM?s|;NvW2*@jy#lfX1p)~Hz5?C` | |
| r2?P<2@nDUUWNh)0|EpBo&wSYnE^5z^#Zm5`~nFf;t#n5&I9-m@&j$a1C9y<uL9fwDhCG*38?`{CjS9R | |
| y8*-kyaLh$6s!V(1la<m0?PsQ0t%-H!zaxGs~6+}wgF~<1c3_!{85~%1giu10e}X$N$Uc;C%Xcu18g&{ | |
| 0+s^71DsKq0%)NGdyN4n(N6MzWq>(IzX$jYiGIHXiUGI&0>FR)<NE^2Dbf;@0qp~sC=~7r;wq&W0>>1& | |
| 0`MWM3fTf?ofOXrr~$|UB9a4z8|yHY0_+Wx0_y=Lo6HTIfdsgX485KKuOfh8zs>>N1SLQDodfN+0-A;g | |
| xMbZ1D#8TZ0XV(}wc-IB-Uf~ekssdzk^u|;0{JX~0}HtV=M38r$q3p6zyaI?rUKCkun)ijqYDX?0^A0z | |
| 0+15!1DGZ928aZ&62A=%DdZ0W*$$ooBi0h@4fuftiQ)m{?*^W?1DgoO0rwB~27m$X0_Fnt2#Ev*7N-TY | |
| 8v6^`0t2)GUH$<V1;+xP8;u_f3ibkt2df0Y0oD$#0SM;=(HRc90cVK`k_Le!<V=7Nw|vNn0m=c|hX=ea | |
| m=lN}fH$Nlz9pU;ni2-G8>|BZnI7gOrH&Q53$+320<Q_+28;>90=5Ai&;peifd>Zv2&VzK1;-h{1mO+D | |
| 1PkR1h78dHs08c;oCai+9gzq7A^HaU1OEaB2i-3Fp8?U94ezW0$<_f5y#gSv0cLoK0pJ3h9h?oi3%4G% | |
| 7{wXi61N1U34jNi2DJoK2+|?r0`wS#1Qf3Uxef%p1^q~_0+gE_*8-ISloJ0qz5>Ak0`&>@W0eJfIqM3G | |
| 6Z}EmvIgxB?jFJO1OLAPzKa2_0;mE10s+Y{IPA><zX8B*nu`Ir0&ZI60f7SG0lNkT-~^fr=mY)^l>uwq | |
| 0XT*!rXfIp1Aqa50)Pqr1OlK61-Syo0bGCqmH`C=yaLMwbtWB<0+a&31DFAcDW3v|0@DJy2JHfX1EK-U | |
| 2Brdr6b7LZ2e=WT2;l>hBkS-2i60u=0@3*au>`;Zzem9dw<=Db0vs*VUepKcg9160yaBS?0>&7*yaA)8 | |
| 0<jqeCZPfgt^xW2#uC8>!UebihYI{2g9oJ<$OHHXt_1D`<pbFXzyTJK4buV;n+nYV8SMrLf&`)&fDEDn | |
| x&a0sK^&w3O40#*`vZXjtredF&JU74_>c+48lnQA0vyr=<pZq<oDJjwp#q-|)DV;ntP92<^ajWRzy<^r | |
| s{*D1l>!9`y#mMt*an^pxB*l`odlBtNAd+Jln@w{5S#+Q0fhs!2JHvn1Aqt30<Q(`0+Af1z6Bec0gC|_ | |
| $^n!D=@zE}oC6HBE!+X50m=c|E*R-2)&j2qjRU4B{{}!9mjUk<zyiSmqYBO=4CMkqp#h)D0muWd0?0~% | |
| 0)_*+D)<7VUAF=4PCtMH#-Rba3&8}p9m!J10Ve`T2*8X1H>m^Y7Wg<fpMT<+0f?9Z_s#*US-u3s3$Foe | |
| l>+M!nGdWsyBB}~qyfAOw*==4iUD|t0@w(&1Q757_6C*$#R8lnTq2<Xx&nd-z5)vI0t3nd=LjQ}0>A-O | |
| v;q<32EqjX0n`T47KsezChZN_etW`D;{(Vo<N@3Qge4#L1LiX&qZ$j)1i=EpE-}Ba0qtqymI0mr1At1L | |
| &;i^7X~O{%fdSqf3ZE*!0#z(QH%SODY8Ns1EIJ*VUXB4F93jC0lL)yG0UhE42N3T945tDaAh{?>zyvqI | |
| dcXvdQI;6;27?)^1Am?ZH>(H23dJp#AguxP3X}wx3AzHE0)PR(5YP|M3=FOT<_?qrtO8YQlnB5Ahy$<+ | |
| ^aqk0xB<5>lmhhz_Xf%h$pP)d0f7Dk|1X+>0jJLblQ8wn56puF*BgKksRW|}$N`H3vl5jJ^GnYf#fk@u | |
| !~&cqn|#EL0<=`TX~n++%>w%Z!~wbj$qjh=2L$*AgFVL*<qE$8q5&Vz1Bwb}iUPL*5RV1A0>%OYp#c#q | |
| +yd1GBr1Xf)&j>3kO8d$XOjZV8^8f!nhOnq1hEOG2Y?WO1K<{*3cdy61>pqa37r!E5BN~QvIMMv0jmR% | |
| {R*=t{zB0KUe^wc1%V*&2@MOV0c?~40}8(hp9IPQ_6iD$0nG%w9<>U`0uz-2e_Xf;z5>JnYCs&p103lJ | |
| U;hGz5V#DU5~Lo05P*XTfH2@{;1b{p`UCs|%mSVZjT_$rr~$?Wvjz@;Af*Ky`vaj2#tz&9$O4zW1^>?k | |
| p1=!>3Be+`RQL#h5DtO|AAkinq5})?0~z80j0{Az0jvU|1FIH?1Z<!J1e^(@0tux768{3;4c85b9KaFb | |
| B!G+sqy%|I4sC=10v%xBMz{qBNsIyzR52EeCKex`0(iv%>j7G!UK^tUlnCrVfC}8J0i(+TxYPxr3i<=i | |
| 1+WA#FlEPw>a4zK~d1qKEM-vpKcKnEt70>%W)3+5jhsR7#wz5>z&fB{QN{}_x1umM2t9D)P=8iNsl | |
| 5P;MbfXE1wHpnjI0@ZGSoeBRB@PYx{E3^T&EE2c_fCGjoyCA<O#tVXz0n-|-1^xr)Ccl&cmHz_sk_FlV | |
| m#hJ+o&o5q0iv`6(=GS|zygaJwSxl41)F;A%L0H2n5+o%3%vx63E(P}4XiHJP0Qs5srCf*0-XfqFrOdA | |
| 0<Z<o3ZCl%;R7Cl0>7mKzz~24noeevXtoUWL)Qbo39Smym;%&)+yt5e$D0A&L6@Ef<h22ZOXLI`z)hAa | |
| ss`FQie#MP0*VI88tN<UADS&I;|9zEtOV@{$Dsm(0=FxO1-ShR?H7~70g5dDzy{5R0`jv0niaSS!Yc2B | |
| 1O2}np%1|V!VUBfgDHmu-W}Hv$^i-14Xh0L5t{?R1rYcq$OyRy+X9>dn*z5B#st6ux&^NXqb!;MK%|lZ | |
| uE`L}UxF6C0lFK$0R({q;w*>)5AY6v46y^_3d|G0!U^CK{~qBBpd*zIDS|Yk0q+P7r~woI0=@#l1QX&2 | |
| i3$A!9Z<gk$PxJ+nI7k0-~9;Z0}YT)2+RlEBhUuH0sdUx0^dr+tpVi&xDB5H-=PSkl>xa5BHRyVjsg;# | |
| 3*H3hE{OwArwhOX+YbL2$HE0*lmig|1KmiM0ha<Sr7xBPk6pk{zX8Ab3BEF&5WoSXHU1T>Kn|n?LVy9G | |
| 0lyo-1iT)ulL3mZ9`w)xfRF)_`vJg@1&5FUzl{d)GLixKD+Y!oHpU9S0-pkw3lCg>r~>*6f&^S#<O0eC | |
| _XO7lr~;H5#scOE+5^A>fv`4EjCqCk;>1^D6tEc@9CqyeC8oF<qo3$X#j{|We%0qz%~0)hwe1Azj; | |
| 1S+Eit_T+N0e}OyAkz=_9DxJLu?m#m0quYR|1XpXh!;4)P0f%2@=<|+0f){6kqXoX+$)m-ZIlAV0?b?V | |
| 4rho07RCW?wFKP@@CB;^mM-c6MhyZfoCN1imH`g6GK;SV+r9ym0T8Cn2;7eWn*x<5>H&cSzZ&5N^PDoQ | |
| jRC+Tf7=5l)Ci1MpbPl$1&GfJiV61_kt~8hY(UEa4fY?C0zaS|{sEK?h#a^g$PxO#3C1O)Y?vXM36TNR | |
| 0{<`U6o3zbAfMkB1c3Py@WTOsupNgS<-`HznFzIk3dI79Fq8#>O``(#2<HdA2*Lz`0nrE866OK%GL#R1 | |
| 1Ed1TYm<u+kO#JVzzydV-wnDg(gKtYIgkMc3k8}4hywo$xdg`xmomf~37iuD1e>M<h~x#H2h>P}P|ggx | |
| 58wpU1pX+(0e}O}0`dik2BZ(5AHObuuomDRkOs|(2V<SD2;&Kqi37j|!3F^uqz{J*x(0v*fE+2!1_$mf | |
| !4}#C`Ud|9>;%+3tpbWEwJ3@twhEl9CjOHIip&NLuLAG_E~Wvz0-y`%B&{9$Ah8I*1eOc=2(AV50qF(` | |
| wgSNhi3i9Fv;yHDoeTE^YrqhS0|zhL2?pH(*#ty|8L1KY1b{640s8&~T&w{kzE48v#|zW~yal9W!3f<Q | |
| x&)C2l>+BBgbkMiP|%7Bv|+>#s3?#cgb|1W_#MUqrws22tP%JE_X*Y%xdea-<_JL4ChY{kfCZxgvl)#z | |
| +=&6f1He+o&H<uMmo|V}!G!{V4ZjfiP5+Mp>!AXjO{6s3=K_EPz#yQF0mM|u3zP!>0WF{rmMXbHr+t6~ | |
| fC0BqfiHg}rC-4TtQ_|O#sZWqW|V*ds?Py~1naH=^2`Mn2D?t5F{=dKT^LEA7bmL%*8$crm;>j0xdZE0 | |
| -2~qlvI6cGfK%ZY{|~hUsTbWPr30S=^#zO*p#tA6`ZlJ{1;O3{$?_xG=^3*mjd0x!lLCPt>>Yywh6lC+ | |
| !6blC>-`Fp0+a%PErA37%qwhw5D<g{>}}NHxdW}M1ml1Kz=8w*!4vqe1PZ)6yG`vDxbFeL0i;OXIGQWo | |
| (E^<j%BumuH2C}if`9~yK(?*{(4_&^e9U3>1Hb(NfFT_A3YuKCGV`AUj9{+;nJnlh${LFhi+}==Vxm&> | |
| FXGMyrZIql586$(t}XU6oX!HcU+kg_+}sS9o(IW;1m6SU7rz9ADV!F;1;3RFrH29AtpU^tj+hSK`7@?A | |
| (#;2ni~*od`v-x&6yXuV-v;>sho1uE56J5Sum+@kfCklv0^=fx)D6`#>vMpB0lB3Cp>2pT`z*H%<ca}~ | |
| ck;0Ttc45 | |
| ''') | |
| ESC = '\x1b' | |
| CSI = f'{ESC}[' | |
| ERASE_LINE = f'{CSI}2K' | |
| SCROLL_UP = f'{CSI}1T' | |
| CURSOR_UP = f'{CSI}1F' | |
| RESET = f'{CSI}0m' | |
| COLORS = [ | |
| f'{CSI}2m', | |
| f'{CSI}96m', | |
| f'{CSI}1m{CSI}93m', | |
| ] | |
| DARK_COLOR_0 = f'{CSI}30m' | |
| def input_valid_word(prompt): | |
| while True: | |
| print(ERASE_LINE, end='') | |
| guess = input(prompt) | |
| print(f'{CURSOR_UP}{ERASE_LINE}', end='') | |
| if len(guess) == 5 and guess in all_words: | |
| return guess | |
| def char_colors(guess, final): | |
| for gc, fc in zip(guess, final): | |
| if gc == fc: | |
| yield gc, 2 | |
| elif gc in final: | |
| yield gc, 1 | |
| else: | |
| yield gc, 0 | |
| def print_guess(guess, final): | |
| last_color = None | |
| for ch, color in char_colors(guess, final): | |
| if color != last_color: | |
| print(f'{RESET}{COLORS[color]}', end='') | |
| last_color = color | |
| print(ch, end='') | |
| print(RESET) | |
| def print_alphabet(letter_colors): | |
| last_color = None | |
| for ch in ALPHABET: | |
| color = letter_colors.get(ch, None) | |
| if color != last_color: | |
| if color is None: | |
| print(RESET, end='') | |
| elif color == 0: | |
| print(DARK_COLOR_0, end='') | |
| else: | |
| print(f'{RESET}{COLORS[color]}', end='') | |
| last_color = color | |
| print(ch, end='') | |
| print(RESET, end='') | |
| def guess_game(final): | |
| letter_colors = {} | |
| for attempt in count(start=1): | |
| print() | |
| print_alphabet(letter_colors) | |
| print(CURSOR_UP, end='') | |
| prompt = f'{attempt}: ' | |
| guess = input_valid_word(prompt) | |
| print(prompt, end='') | |
| print_guess(guess, final) | |
| if guess == final: | |
| break | |
| for ch, color in char_colors(guess, final): | |
| letter_colors[ch] = max(letter_colors.get(ch, 0), color) | |
| try: | |
| points = [30, 15, 9, 4, 2, 1][attempt - 1] | |
| except IndexError: | |
| points = 0 | |
| print(f'{ERASE_LINE}Очки: {points}') | |
| guess_game(random.choice(guess_list)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment