Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local symbolChars="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- local tSymbolChars={}
- for l1=1,#symbolChars do
- tSymbolChars[string.sub(symbolChars,l1,l1)]=l1-1
- end
- local numSymbols=#symbolChars
- local addressLength=7
- local numDimensionSymbols=2
- local numCoordSymbols=addressLength-numDimensionSymbols
- local coordPower=numSymbols^numCoordSymbols
- local dimensionPower=numSymbols^numDimensionSymbols
- local maxCoord=(math.floor(math.sqrt(coordPower-1)))/2
- local minCoord=-maxCoord
- local coordRange=maxCoord-minCoord+1
- local minDimension=-1
- local maxDimension=minDimension+dimensionPower-1
- sgconv={}
- function sgconv.intToSymbols(a,b)
- local s=""
- repeat
- local d=(a%numSymbols)+1
- a=math.floor(a/numSymbols)
- s=string.sub(symbolChars,d,d)..s
- until a==0
- return string.reverse(s)..string.rep("A",b-#s)
- end
- function sgconv.intFromSymbols(s)
- local i=0
- for l1=1,#s do
- i=i+(tSymbolChars[string.sub(s,l1,l1)]*(numSymbols^(l1-1)))
- end
- return i
- end
- function sgconv.toAddr(x,z,dim)
- return sgconv.intToSymbols((math.floor(x/16)-minCoord)*coordRange+(math.floor(z/16)-minCoord),numCoordSymbols)..sgconv.intToSymbols(dim-minDimension,numDimensionSymbols)
- end
- function sgconv.fromAddr(addr)
- local s=sgconv.intFromSymbols(addr:sub(1,numCoordSymbols))
- return math.floor(minCoord+s/coordRange)*16,math.floor(minCoord+s%coordRange)*16,sgconv.intFromSymbols(string.sub(addr,-2,-1))-1
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement