Encode as many ASCII characters as possible in a single tweet

3

1

Yet another compression challenge... but it could still be interesting...


Rules

  • Write a program that reads a string of printable ASCII characters, and outputs that string (or most of it) compressed in a tweet-sized message.

  • Write a program that reads the encoded message and outputs the original message (or most of it)

  • External libraries are allowed, internet connection isn't allowed.


Judging

  • 80 pts: properly encode/decode 400 printable ASCII characters
    (since 400 ASCII characters == 2,800 bits == 140 UTF-16 characters)

  • +20 pts: properly handle end-of-string when the input is different than 400 chars
    (encoder's input === decoder's output)

  • +20 pts: code golfing.
    (20pts for the one who does the shortest code that is worth 100pts)

  • +infinity pts: properly encode/decode more than 400 printable ASCII characters (+1 point for each char encoded over 400)


Tests

Here are 400 random chars for the 100 pts challenge:

)!"k-;~|L?=`j'*VBcZ;$'LbRv?:8n.[fc2'"d.Qa>$Sv*)K2Ukq(Xh^9MJ>WeeKVy:FP}^9octSYSxHx%uqpM%51dAVUl$x5S4hG[\2(SN3'BGEt9(`|\jo >xd'k]F6wf"4a<SXLiFTR(4c]J$,uy;N9*f\c19Ww<~|WYY;vR<:#@86JhPRSg$9:wnVPpB\f3uvGWXDa>O%qcXo=q^%#e|9+j''6Rk=i&N5]U]zbvLDu%pz,=A}qZ+T^s/1V,_$-INH).BB].:GPQGwUe({oDT&h\Dk\L$d-T_,.#A4x nPY(zYgU&[W)T~hvta_n4,vCvBDl|KWUlUdqvNB_;#6b35$<g|f[%z(pgICW*E!?@xAS/Q^\@`#bm~fA1n@sbrR~uAUcw!9x:u/PN

Here are 10,000 random chars for the infinity points challenge:

EiAJ}%15Wl5#yc&xD38}>aU6B6zl@XB||'VS@AN<Q=h1OpeiTXTC"1Tx>WH?kG9Jl(%JN'?tXtjZiNS}vmpR+Qg7R2E4e4GiN'BXc9cKRDWUJW-.UeZ/Cd{=O7L<s\ ;7w?6|XmC*5M@ Tm(kdv}^\tm:NlQYfSl&a`Nw y;M\Jy~0I3iGJXbfJW*P{I\{.^/OY,\'} Kx#S-1V<P7)3L&rVV,p=s8\?Ni(qFM[t%o qId;%C}j6QHY2kj`'Kb6k}; 3jeROHj:P.r2S?nL>`Bukp_lb5Ex?_Q'mR(GgxmrVt|LD]j|Y3I@^gLQvdqF%-'AF"7{[C/kR;ye=7V11!k3|<%]P=2X0biSMB":+';KkJ-'itP"eT%j8tUaIy5@c#aV:75}cMqeEJzK1:C91PB^-{BY0B0(?f^FTh@[v.k@jNcBM{QV~(<XI&Qw+bF70*gP/QGI}Mlk]<5.j$1B?HRQ5.IM^HFCF0'w&x!ImcdFzrs(h0Q9>m+Xc}8 Rud.W#*)`a#'*64|=,LBbgM2,P\Da+{OhM3i{G6u%_Nc*vyMB2pbOI5~Zd7}A/j5PqC!DbZ%}(;*"+7] 3q&wxu-j_hDoN0}QD9(%C$EmZmW4tkyC7^>l3<V\VXl0|!LVvh~dH7 1E_cVN#jX;93JQJFw`DzsR(e8"^Oq|%Vyo |iOOQ%o%F9N|NWK^UVU*"$q'&HYJ)9@ m^;o[Ia'Yt[EJqFbn#:\snkI>a$$EJ@+;$I].f4hC,]MNxDy[.:#rB+#2P~<6O>::}_/^PoqhL9#ZY#rjsV9~WYA+m::QoL,jC!MA(K-`~RD8_)14XQ=J0X#}y2Pln"Y:TXEL1Z;q|S45[]|U:+CC1 |(]ql1\L<[FO++-M;7Zqq2=n i*vHr3Xw23;fyUR:FgV`[E!uzj ]9F~xt-9j'G[SY:}{glFL/~c:J?a{50zdL#emegR.}}0bJ%*L~UH#R1eQB1}`GNj,GE:? ^$'-As.Uog3?FFM~{BC"\7FQxl<lPS4Y+E'5QLUaOH:K-Ys.awEy0G$Awq@5hs2Js8"OA!Cj4(n${91KOlwH/ncc(- tN|1RZDp"St[ WpsjGX6qSIDF[u?jl:%}"dWD\(F,0>6PTmt4=&hmB!@pD<rW:uwLkfTh.GF)WtxEzHsO>B<ftG(9Nyp6ul\6%o=}r".hS0XN*k;P,F/r`eUfS=bz]iWBzS3;2j$mUqTz+p~9^N:h9tMj@,Gp{Cks<+A"ZTAx;_mO9=D9RU{[4@n;f^J^\0gMLdcdIay.8rU})@(!2\@uu/@V,jB^?Pt;m0*VJ'7vC7i]"?"t9q,{5o>o!<iIu$cPRFxGO&9BBv#)|m>j"~4J3AH%-d35O"=g57NHNH/]YzuJC{AVLJ.HHJ6%/XkNpU`tocc&[6$8]c<A4Kuv`L.Q*3l]B"IFZb!FpL]*.!GvWXG|#.:x]2>'d8LK4$x>KJOJ"a:1fd.C:&s<FZL8Gxa0<n-dhm/+aruzU*NJM3ysN\pKiFCZj)&gpv\eW{Fi_\qmoB_Bpm1?D].uKJC,R>>ryQ!kiB>o84N+)-C9w@3LNNEGR/A!nzXG#P_/`qnQps3.tM~5Isj7`8/q$)U8+7~wHllm.@x?u:w8Q&uG%U=~;qM#blW]RSFG{~I+UUZ$&,B4M^-|Ak5xMNC}c#YB>)zg-ch8k=UwTY9IZ/*K5}-n&_ky hz)cD]sjK?0[[<TQ'UcC=m+P.5IsKAZ70r%m*B8c2wcDX81Y^(ej*"q7BGqW/7am((Qv;:{~*57*<eA6*Bz"kWbSlb4/k%/=PR`x~8SO>.Y._KKV1AfBCQ|F8&noMAUfv3cjQ%).cw{3'W]z(<[`j0>kk_N4^)i9;p*-IPOb6|wfI<7rshjiQ/Gcvk)$bB(y|3+TZbH@r`l 0FVN1;On%3xbS bk{r<.A1>,>l'@,Qrnl9"H,S.{9Hv|6RAE1UuwgROJ?^`~W3FR,'whO[]&V+U_vg|C();4~Iqen+/qz_lY~>MSnJ5O@e#bF3+[*W %"DI"=IUmP|gQ3F.vtD(rb7{>p^Umup]^mtSN'-,TV^}7\e_M6NFa Q|]X} <s|ij{A,`]gF9]ietkDXH7lbTuEYTQ79MO#~{7KKB@Pub%i;%m }!UKNw?vfuh$4~s}V~;}ZDZiJ7^Qb9Uq.@:O-C9jVAJ|&(48RVE6tD@u8Jn;ITe2k?|?u]4G23!YILC ETi^J.b|lpp&!_=t*6JJ{j=SDPHUmSAGR.-XU#3ssu"^?54<,Lq=3Zj"i ;VN+gMx:*PH5m"r/JTL#_?r4AXT0|%U6T=r`Hm#U[9c&l2ZL tOm,Dad_i46e`?=l*-WC[rnjEq^\Vb%C!OS5;6$&dX-^<^\x !1/62=EoqplkcmsAV8vUG5_3-"2*(!I"]<8UnH"AN[t<q6h%7TPiT!SE%D7f+?Y$dgY~hJ_hSST=@8DB<&|qI<j`u._td4XzCt5e{}IrVLqxK%>W'HmcpISbw<--;Er$Lm),Hm$|zSy/AY!Oq#XI%M?<cPLHIyhFfY[xr@aBkVd8~vbg(wheGuvOOlioYiZwghwk3(~Z_<CMyB~lIJ8dqMMr*RvY8qq8j{*.BXrVf;^XnxYwgL'#K8^G,KRIZC&y~r~g&z&Gl'qxzwN(N<gr|unvWS@\hye~V{ok&$zxUb1^o}zwXiy(KzFU]I*(w-o>\8;,{EEjPDhLm%3x\H#jEmXL?a]>+72V"p#$p"Z879p#&1F0 uoslpR}kn=DKPg<F5obU6|gLC4fJ\7`*(EI0sf]G9RS"&U9?T\+T$<DU4(X4qW'J>W|%A\qb)2 C1b==vBw+ /ylp1c[71OJ9:MdYulI&^A=OsWS-n1xs\P=`HZyfy9C{<#YQ"'5G3_9^lk*5qh;>e^yXn`=(ODoXgW#&eW|Fl@{I2ay~xW$2b[G*9j$z?3cz;c?3;;]#T<g!:IIFaxv];4 eJ+cL7!"rK]15M#7=(V2j_AgiKe*Oo4af',l*]+w@P.I#Th6GcS-T\sHh@%=/9zGB~oeHso}F#etPV7wgoZ[\i-/i!E+O!7A,)I:YJh|0Ke7,G.}h*DjP}`(}f`$LGzA]w;S(:7[";v$.{DHVrtg,V)K\n\V>Kha}'TB1_KwGgVGn[OP+lN\VA|Ts#i'x[c[Uxk#eQC'YlyQBWaiqg/`WxRPD9]B&[6lS}MnODfk,b_,%gk!kFMGKV?i?S3i!_s'J&QP87L=notM=_G>O+!-?VYt(X.U5Z;e3eI)>iK^: .GBOa1Su%cAkd<*5c@]?4) gh@ XIEzCjt%?6aitYIo<b8w3_t@V?uCP9Bp)8IBDLThXryrva^K_THqXP,zDb!WOZ1]]S@*(Tt,^jaRQP9w97LrEUp&LCp^I#wPHv+u_^PQ=n:fS&L!<ivhvZZm+}gm*mSfZ&cC$/5!:Q#,ng?&KB)UW:PkW't7XH9F}AuTmBtBeiK(k7~GChdaAP[s0#mW5l0@F$2|D#BRP>IWdpXD3oj]<bk]$\}5!0N/rU<dlP5}S%\6;'4QxD*M:ID=\h(7 WOz?;{r+p)dcAvzo;N(K.Mgt?$\;Sr]NI{m!z"2+iiuF.R1CT{N[%3H6+7]Q~|/^\[>|?km-)NF65*>#VBy~*zNe*\_q@;]?;3o'va^p#{HrZ9EdI5,>x|V\5+ky7;pOK98_4FdRY&~sbJD|n{sH:w4& DfL%s Y"!'/B:-n'$TF1&w3e*g]^s7vqVAoyh5@_Y#g.b4Si07E*AH\]d,5!'xm]}A=ods:(Z:>_#Sfu>Ht;N1[8)Z<"&"-S;m{&uo+%.[:.=TP]+ap;[P_Qf`#N!$aE:+$1ujGz@?uBZrxIDKGQD.x*Z'tOv U\H3I.B<"5)*HZodRpn:*:O{yH@S'7Aai{]_&[~A8L"&|SY!b$5 J_Ifk.8aW+jj*>{g}[ >mE<~ffwD)tT$YdT%1."v!H-uj@ d[Wj:e<Tx$$+dwD<UVAJjTl3gbx!*x"La%\Gw>?`9\Fbd1kA@0rDLkZK?+r0Do(F,^OlY6j0^qWI):a8a_Rs'K62L7m1_-O?OY3&5~K()ABj "g;MIjm5?t;E?YF9]*0n@JOTVj-}[=tqg'BJYCj7/_(&NLLA|bC&ggLi4GF@\ySdS"-gfA:5`*nZWs`MdDk\n0;blN!QW;eU}x3snESczi/9C/~E=1X` 9kYxI({Ws~Yv`u@~Z)yEqb(0v4B2zRn-^7LnUL,-xvwB*J26TrMCw1IEaL_2IKl_5I|mu(4S4bmvRG[iRoBs`hN0"BDqXrIor{f|p{:68,Y(w_]_RVi]I|PJk-3P7/"4k^Sq/C^vv 0qR#>'YK^J*3wZTV-CR]i^-!w< b=g@@5TB5JT'HJUB#<|lBJbc[$Mw8'xTtga Kj,7byTV)CW^KJE8?Q#G4?Yvcj\P93Wb:["MQP'32AdL91K#,]&#s2fgZc8@j#; UaVTS5"}p1qSz`7s@0p nD8t"gNsIi~hJiI<_q:@Tt/>rYn} (-G/~Bl*7\wDQ^%A8tB&h==rpR"V"[&; 1o;z/yu`~_[FS("JjC:.mU,BHX,maKyqJ[ O{slq0`Mx(Hd.)90Z3,MK{607\:uS^Czp&02b+k[E(uu6X}WSrHlkSE(=`Wfm8/dVCGoY!9re^p9]srqV[=1.CytL%@:AJub7'S>W8QEqr.9)w+@B5POf?Yv%J=AV5.<-[WA[WHrq~*6>L,5yOdrosX|l;8lZWS5:ZnV$:F1k.JfIuJiq5~(\kNz#5zY}nd"WB#A1"+:v&td]Cgz-vZTm~U%dk1V4<8h/-kgw~~"1^AdgP6rn|ZI|awOTZPB r*9p3Mn\)Jj%Fb}<}MoZ+GvGv]4j:J/]="@Wtb?%qMEHeY.xt }l/6] C$g"9(.D$x{8[uJr+%mVWxre@}/h}w5B&\ZkO'rC%0KT&x&"I2P@[t thjTKtdvh~'~7w0RKlz+j$:/}@;06@dQEjh4|unWGmM_|_-I<#l&B}n;T.cc3&Ac)%m8pU"$PI)/4n9uK[@)=G}px(+^b+Tf//PTEMx}=MkThL'+r}yM }X`7gNyg Xg$kq|%zoKliA/YR}~*Eqzn]IO_t!|m.N$J?HsN\T15$.:NQpFr0nAoGg@op<|_^#s}8R|JV$$ZhcJFN`klYt0wu'`'Fmr<KqU%Q\a^\l|LS-vo8BoqE\R"gZt*Zz1#dL##nw<iZO%=rq'><YR"=]Ln\-uL>.[PVgc=y2e'$7^;I9*#15pWk2Dz2dw5c{[DwnOQ#cC=_Y#x;1][ibxmXKfEzJm.$gK9{a#@O{RS"P\C?-dU'+.";+VluyWi8>k|p8a6AlohY=\{[-TNp?WA m|w,SJYX_'AqZiy9-2Aw\>mC\B39o!#J+N<zs!Qy<hdk16t[=U?Za9bI_l&a ^>6qUt#:bnF~N[#V^/_\2N%[,V`#wcb//LkyV/Se#pQQ"n7*``h%N0w6~"f0ma\IA ;0(!LMC4sgqh`3>Yk,gZk)c|-;RTuR:OvLIkv_V(q.^_FUJQ>c=5''DS<HlSsy!K/~(2`W,z_"GMv?S9~F=J\)A%d(k")O4(|8zQ]:qW{XD[,w#vW``$.W^]I,Y(EE!wNw(1:QHD]w7Gs5zj:7/6e"lL-=}7DAaP#vY(ol?j@n9n-/2fS/)[;7goIs3~52%GRy=c!VVf]N8lKY.\Z@lud(Gd?|'s`*Gc'h.|-VRN:_P`LDJ2'R3~Z"|0`qx>e{ [P<$d%j`3p;?4P:N{!}Zhs7ZU8c'\`R8*Ks4a~?1$S+CB5*jxAp-lp:\Fcf*QCHF>x-e,=JX{ZECu5E(0bro%L^aw$7a,];t0T?J}s O>[r4j5uN3wSTU@$N>qFu}GiJg I7Uhe;pjJ&5p8HNslJ#pS10I<kEZ&.AKZQjz/Kj%[trKL73){!7)%]G(gV14mg/ifyzyh9h0Ba[I_@jPM<zK4Ei_3{[^|%sz3yf%vghKwz5;bO=kzup8h}GMx+`!_?sr-$x<$AwW~I%4(tl;K,Vb6E 8PyYy,&< gB*kDp*I@gCYcu"i#8ro.8RffGn|)d6pB3itw |CVj~$2{;o,vp>qS`#c\03UmW,b",g.QGREG+`IldR@]p<{2@Pn}bx&io<Hn5</'@Uu>A+v %JF|OrM9ZW&AL4S;~OgVy>L,C~l6g4Xnw-o!33+{ :*pj_6Cs%_z#b[h}OyNE54I RjfLP<mzg](l?!64;k4p25&q-6!u`}Pm;z.@Hqh-eW@5DLL\;l:75s:38;Dz\Wi=c;{Qy5_6\kN]?-n6H.V1(X2f:]GyxM!;95Uo`>Q>/2QNo5]=A7Ro*{WL%T""M9`+k/$Ey':6{/(2C}9K3@Z4]s+"+~`qUjOKvA^;<AznTn]#[fu~17g>#T@gzQh].JRIZV=Hcs\N2{yCZ1nrUjmci7&SQn,$}x`E}y(2 j$4@g"2[Y{?,K^F^$56A= AHGO"mR?Bk,I 0RvSBM\o;Sh98[clP>K<KuB#bDB]!q!AQ&YMO7UXR P4'.`j}"6>7J-Qv!1E7`.TERMOng"PaKd*f=pRs-| Oe3Yk4;p&U EC&fT\3y$gyBh}59BJ] 5H_URas/?Wi%+5~.P'"EcZe/wJ8{?HSy/WN!dNyJ>W<T&g:68Y?Z2H%1'J6owKW:DbE[;B\UxQ1IQ}=C=EO_wk\D[pB'^Ha:3$+F~Q@d6HGfAY3GHY>%Lo8`<DJk?+u~WB<6}o1qaS2S4qQ[n$H"jgkR#YNA"y*.p9YaN2dF=sd5tz2w""+Vj}%L@4AgH!?P>u}5I=%N!tJ;v)HZDKmL1*+z@8P&+3CW9"7Er?\!l@`q]029d*QOJ*-{J%K[AB^{Q"4[{N+oW:,66BgNQ r}}$ip)L3AIl`L:P&h5IJG;&`:DhPuICkv&_{E5U#^yD&d&\YcC<- ~+J_$_J@!?t$pmM$7$/>s>'qGrV"3/u@jqBepkN.;<&@uo.\GG?rqsw83~39R3?#A-1HdW/;]PGu7ft(fU(bjALi=3"/yT+`vz!}nNB8}--I`KV>TpsrymurHRJSRC:c#;jlHDgNqnWq,LT4s]AV1PN8ibA$YE^(VT\yzKr?A1@<~t~gO(;r~#E^M]L' *%FK:O/5Q@%auzRr@8'Rj`]gd__F/ttL.TJAYVk8)5}Z6Fe"1$}xClDn#qVLftpU80'.PAhOz!H7S*Yu-w4&7x]!vSZ]bt2AZR_YpbO_ppb0i{ET[YEwO5cJmVy#L$l>|ycw+IH oZTR,eccQ|OsJpP*#&^#Gtxja42?WxJ,Mse\.vaN6m""*"l#y,ejEBb*[`|L5n0BU5,RM=(sBz&Pl>A|[a'T:!R)Fcw;^gBwJo 9_|]Zt"k/x<qfaPVMcq(1Zu*T[sYsq:OUuS[;Up]nh&5?R>Szg4;:-pChq5S}v6/_?HSPR=A5nx{?zF%7SjD12s"kUW1K&`cN0An*7wI.T42x2hyR")UlXd#nc`UZG<|e$32?xLNzKQgi::30N]&A*FpQ0 >Q;bs#oK?h(;/4pBQ#9g&?Z'=?HJC}(=8}aAQ3;,P}f|q6EAmymn4@_#?.7EKYJ\n-)Ajgw!RRWs4B!pv@0SK9HL=;0VUigV?[:|e3j)$-IC7^fDl^D9K\$m'$}MRn`.!]<1^>lF,XwIYs$v:)>CtOv`;P5Ig/`yh e'uX6lIyurgY*|!O8jcHkGk(U0uY~H*tBdV%W:wvHJ?'yw+* Dl%5dW\GT[b;(UCigV]25."XPjM l:5!ta^)OM?6)8Jw40E^}R {|wkn/jDPx*<OwG)T[>1,)ZE-@Cgx|}V7#o=Khr$9/#V,yl5,X[}qQWO=c}/|3XjW+.3hrSvKyO>NdNulqx(MST+/~\,;cxPIJ|(-{tmS&4]?Y|Z"N3FYAh&GX(wQ4x;:XZJjb3iq8Ek"Nrwz?)J=@Hw>Eo<.?pvs2,=EXa4h):U<.$?XZ-@^%e'^|CL"gA5:o:Xd1p6ER31S\uThj8WKdP/$$q4SXrHJ(8,%&$4\7''Ps .n&>/Gve|"#-/J\QB>Ck[Q#;C;tq7Ey$CY/V; t"\](Yye]bXHT#T4x+uXh.G:'%B RKVRH $UPi6NQ<}BbptjJOUb,~D>1,dXD(~Q1{-d%e-Hr_7(Tk&[JbKI_/G0F(\h39X;#,(ew9i2'M#l&Em[^G@bjLPb \>+Ihv+85u7vz]cJLL`zrAEkLn^k^7;vls+arm)l>}V\5UYp>ioA8Hzl7,[OI|w.s%JY#ZlV^f.ULA|*2:G}^%gi3PlbKTc<Y/tj,0u%l'Ri%?|v[L5QY"a6>44$QxHZH^aBp:Q!rsS`K\^,p%H;>OlOo@4C aLxI$Y8FRbz4/b95<`.@aN&k[$.gi#* -NJ9ybu~Qv)K58UdST-R#mXf'!.YY#CvcEVKldg.B4y>!~YxRnxtiglv[mYi!.aHErGI:5"Xyh;m#@\w'G&in<:lI~|&<t+Rdn*&,?|O#o !>Aslnr\;JNUBrJChcuWq?c&[<G4[~j~ItX)o|=TdLwidsH)y`#f:ug!hg_A\zKu!pWy3F'C/%mZokhifo-kgHB{VwC^_Rrdd'<iSQ}JHt6fhn#1Ejih/!E4\!jH"@J-wO*@3W)3hM;#9(6avRny\X!(tm5?Ck7{w5>xuzKT9}Be_6G+J3&',0&/._u"=|Uywq*d$4">k(TBqN)yj"2udINFts4=%+a4G?}sK]uWhI@0~Zjr%f-PU|^\b{+7?,'1+W_|]z_mQBM[D]kciym`\_rmPP3{,ud(mYqFT3D,HvR^$76H]wO2sFIz~$DSC|w/I[yinuru?D\~t:|3^SX:Vb(SwOR`l%Q>6cbc*c^Z6q&KqbP*6-6iB`&tY]nI~#4pbsYXO,JC0|?3Pt8[1z"N3](uLiTCDr.TpogqnVU d-0EWN[9Ogh;6mk"3m[glksKc]NMvFt!E|_OM=4$2<]`[YcmYT7hm_"L)k:6](xNT*|"NJL'%C;/(vahu/Bm{/j]v8{ZRjiRA(Hzo/[Gb}H;hlb[^]9b`G}W0=aA7t-9EgU>pMp/Q-j==_XeteHYX=1Oq QL<B#mtsq."$z?wC%a#NB(V22mS2@cfZEXOu>KR~,th58Lb+EkoI"phhr.pb+h9f=iJvf,Q<+_FkYOgO4%/Kiz[thS".1hn7o;<lc!!!zAv/'7tdZY{iD$mS!jJ*8T}!Xl)LpG!Jox<BD?zOr;6XomPKDs=aw{F!2G5I|e>9m%SiXWm8Fr47Z{y+rpJ1.{pHF|6sEn(vL>Yu52\,<9A09/L  )(i> gx!FD.Rlpn~}oRT4qEnfy%EJQBqJbFQMz2xDsjn*PJ-%.o7r8#0C/*im)~bS q"^u`4briqv*f=G7E)'Mnp<"%:gm WW("nw_|9\6"Tk0$j^A4]Z+<\(:YfL4?qEFrL>#}$Z-60~Jsu[JUx,S(.Qi6b}#Z"f]L8xlzoG>]b&]L!M,}5-r]dBb*N7D0Ihs~WDEIaTQx|A<:*VH|a,k^cm;t3cC6Z@{[3j#lMVq?K'3?*?I~d)4Y$_i?z@f&lgz>w5di_7yWcbet$mRj<jRHA3!xteOrQlyUD6R?E">F[zInyN>+I%*S~RdM/p$Mm{u~W0U,`1.nQFNtOut&VP@k(vrjBby%wTsRE|:=F]zTEG)bvICQ{lfI[p9:2hQD*<!^4"qQU7P7B1)i/u$*{v:{lH&C<!i3{;}yK_#qyZxeDgyE#hc<wSy3gd0!O'x<!{gTB:}P-!Kf@bEBZs[X>.+^x+wS;w!?!OJ~]fMH`K?-'1Ur_eK\:G)&>QVy"1eb9Ie?]UF17J<(Vt`2k6,?G=hG6h\T5KkDAwE$eV+|/W3m8$Ai|+E/w.]h*#\8Yi;WX-]*PBo,X'X@64KZ'4u_k~%Uwvrrkbo-g"vb@2gO}"garNwf&,V/!-43,figAwI9"=%jMtTQSBIOA%wI"1/S3sGLT/ExFbG1n(Qx6h4Edk"C+#Mv.{%h"C'[bM}wTw)*G,h\3dX6g!.T=ATKgpBuIh%<KZQ<#pvd9X?"tp6^)mB4Uf"~4\Q/wU0sUEQ!pejIR-irWQ;ul|Tyl}FH pF>1`vms#,Pl[Ex{XKy6$*s

xem

Posted 2013-11-26T14:06:24.590

Reputation: 5 523

Question was closed 2013-11-28T23:21:47.793

5Note that compressions don't work very well on random data. Seems like a stupid challenge for me because encoding random 400 chars into 140 chars is not possible in general. – Sulthan – 2013-11-26T15:09:07.147

Can you explain "400 ASCII characters == 2800 bits == 140 UTF-16 characters"? The first equivalence is ok (albeit pessimistic given that the requirement is only to encode printable ASCII), but the second requires that a UTF-16 character be able to store 20 bits. I think you're misunderstanding something about surrogates. – Peter Taylor – 2013-11-26T15:12:58.070

FWIW Twitter counts Unicode codepoints after NFC normalisation. However, if we're talking true Unicode that limits to the defined codepoints, of which there are just short of 2^16.75, so ignoring the overcounting due to normalisation's non-injective nature 140 codepoints is only enough for 356.9 printable ASCII characters.

– Peter Taylor – 2013-11-26T15:21:09.247

Assuming @PeterTaylor's analysis is correct, you may want to consider changing every instance of 400 in your post with 356. – primo – 2013-11-26T15:55:23.163

@primo, I state that that's an optimistic calculation. The actual calculation would be a lot more complex, so I think that this question needs serious rethinking and am voting to close it. – Peter Taylor – 2013-11-26T16:25:01.483

Hi, thanks for your comments! As far as I know, a tweet can contain 140 UTF-16 characters. An UTF-16 character can be composed of two surrogates. Each surrogate can encode 10 bits of data (http://en.wikipedia.org/wiki/UTF-16)

– xem – 2013-11-26T17:04:00.147

So: a tweet can contain 140 UTF-16 characters == 280 UTF-16 surrogates == 2800 bits == 400 x 7 bits == 400 plain ASCII characters. I'm sure it works because I implemented it here (in JavaScript): http://jsfiddle.net/BfHD2/1/. That's the easy part of the challenge. The real goal is to use the "printable chars" rule to encode more chars.

– xem – 2013-11-26T17:12:11.870

You're either underestimating or overestimating, depending on how much of the spec you want to violate. If you'll merrily accept any code point in the theoretical Unicode range, even if it's undefined, and ignoring normalisation, then 140 code points is 2940 bits. If you want to stay strictly inside the Unicode spec and respect Twitter's use of NFC, 140 valid code points is strictly less than 140 * log(110187) / log (2) =~ 2344.9 bits. – Peter Taylor – 2013-11-26T17:27:50.340

Well... you can ignore my mention of "400 chars" if you disagree with it. (I can change the rules if you want). The idea of the challenge is just to have a valid tweet that can be decoded in as many printable ASCII chars as possible... – xem – 2013-11-26T18:01:58.360

If the data is completely random, this is literally impossible. – Doorknob – 2013-11-26T19:13:01.237

possible duplicate of Compress programs

– DavidC – 2013-11-26T23:05:00.767

@Doorknob: Not really. The input is random ASCII and the output is some kind of UTF-16. – Ry- – 2013-11-28T22:06:01.633

@minitech hmm, in that case, since the OP did not say what the output format should be, this is underspecified and I am voting to close. – Doorknob – 2013-11-28T23:23:22.023

No answers