-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbetterblittle.lua
1 lines (1 loc) · 2.73 KB
/
betterblittle.lua
1
local a=math.floor;local b=table.concat;local c={}for d=1,16 do c[2^(d-1)]=("0123456789abcdef"):sub(d,d)end;local function e(f,g,h,i,j,k)local l={}l[f]=1;l[g]=(l[g]or 0)+1;l[h]=(l[h]or 0)+1;l[i]=(l[i]or 0)+1;l[j]=(l[j]or 0)+1;l[k]=(l[k]or 0)+1;local m=f;local n=0;local o=f;local p=0;for q,r in pairs(l)do if r>p then if r>n then o=m;p=n;m=q;n=r else o=q;p=r end end end;return m,o end;local s={[0]={8,4,3,6,5},{4,14,8,7},{6,10,8,7},{9,11,8,0},{1,14,8,0},{13,12,8,0},{2,10,8,0},{15,8,10,11,12,14},{0,7,1,9,2,13},{3,11,8,7},{2,6,7,15},{9,3,7,15},{13,5,7,15},{5,12,8,7},{1,4,7,15},{7,10,11,12,14}}local t={}for d=0,15 do local u=s[d]for d=1,#u do u[d]=math.pow(2,u[d])end;t[math.pow(2,d)]=u end;local function v(w,x,y)local u=t[w]for d=1,#u do if u[d]==x then return true elseif u[d]==y then return false end end;return false end;local z=string.char;local A={}for d=128,128+31 do A[d]=z(d)end;local B=bit.bxor;local function C(x,y,f,g,h,i,j,k)local D=v;local E=128;if f==x or f~=y and D(f,x,y)then E=E+1 end;if g==x or g~=y and D(g,x,y)then E=E+2 end;if h==x or h~=y and D(h,x,y)then E=E+4 end;if i==x or i~=y and D(i,x,y)then E=E+8 end;if j==x or j~=y and D(j,x,y)then E=E+16 end;if k==x or k~=y and D(k,x,y)then return A[B(31,E)],true end;return A[E],false end;local F={}for d=1,16 do F[2^(d-1)]={}end;local function G(H,I)local J=#H;local K=#H[1]local L=a(K/2)local M=I.setCursorPos;local N=I.blit;local c=c;local F=F;for O=1,a(J/3)do local P=(O-1)*3+1;local Q=H[P]local R=H[P+1]local S=H[P+2]local T={nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil}local U={nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil}local V={nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil}for W=1,L do local X=(W-1)*2+1;local f=Q[X]local g=Q[X+1]local h=R[X]local i=R[X+1]local j=S[X]local k=S[X+1]if f==g and g==h and h==i and i==j and j==k then local Y=c[f]T[W]=Y;U[W]=Y;V[W]="\x80"else local Z=g..h..i..j..k;local _=F[f][Z]if _ then T[W]=_[1]U[W]=_[2]V[W]=_[3]else local x,y=e(f,g,h,i,j,k)local z,a0=C(x,y,f,g,h,i,j,k)if a0 then local a1=c[y]local a2=c[x]T[W]=a1;U[W]=a2;if F[f]then F[f][Z]={a1,a2,z}else F[f]={[Z]={a1,a2,z}}end else local a1=c[y]local a2=c[x]T[W]=a2;U[W]=a1;if F[f]then F[f][Z]={a2,a1,z}else F[f]={[Z]={a2,a1,z}}end end;V[W]=z end end end;local a3=b;local x=a3(V)local y=a3(T)local a4=a3(U)M(1,O)N(x,y,a4)end end;return{drawBuffer=G}