上传文件至 lib
This commit is contained in:
53
lib/ys.lua
Normal file
53
lib/ys.lua
Normal file
@@ -0,0 +1,53 @@
|
||||
-- 压缩函数
|
||||
function rleCompress(str)
|
||||
local result = {}
|
||||
local i = 1
|
||||
while i <= #str do
|
||||
local char = str:sub(i, i)
|
||||
local count = 1
|
||||
while i + count <= #str and str:sub(i + count, i + count) == char do
|
||||
count = count + 1
|
||||
end
|
||||
if count > 2 then
|
||||
table.insert(result, ("[%d]%s"):format(count, char))
|
||||
else
|
||||
table.insert(result, char:rep(count))
|
||||
end
|
||||
i = i + count
|
||||
end
|
||||
return table.concat(result)
|
||||
end
|
||||
|
||||
-- 解压函数
|
||||
function rleDecompress(str)
|
||||
local result = {}
|
||||
local i = 1
|
||||
while i <= #str do
|
||||
if str:sub(i, i) == "[" then
|
||||
local j = str:find("]", i)
|
||||
local num = tonumber(str:sub(i+1, j-1))
|
||||
local char = str:sub(j+1, j+1)
|
||||
table.insert(result, char:rep(num))
|
||||
i = j + 2
|
||||
else
|
||||
table.insert(result, str:sub(i, i))
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
return table.concat(result)
|
||||
end
|
||||
|
||||
-- 测试
|
||||
file = fs.open("1.bimg","r")
|
||||
original = file.readAll()
|
||||
file.close()
|
||||
|
||||
|
||||
local compressed = rleCompress(original)
|
||||
print("原始:", original)
|
||||
print("压缩:", compressed)
|
||||
print("解压:", rleDecompress(compressed))
|
||||
file = fs.open("12.bimg","w")
|
||||
file.write(compressed)
|
||||
file.close()
|
||||
|
||||
Reference in New Issue
Block a user