92 lines
2.3 KiB
Lua
92 lines
2.3 KiB
Lua
#!/usr/bin/lua
|
|
|
|
local list1 = [[
|
|
Add ALTer BAckup Bottom CAppend Change SCHANGE CInsert CLAst
|
|
COMPress COpy COUnt COVerlay CURsor DELete CDelete Down DUPlicate
|
|
Xedit EXPand EXTract Find NFind NFINDUp NFUp CFind FINdup FUp
|
|
FOrward GET Help HEXType Input POWerinput Join SPlit SPLTJOIN
|
|
LOAD Locate CLocate LOWercase UPPercase LPrefix MACRO MErge
|
|
MODify MOve MSG Next Overlay PARSE PREServe PURge PUT PUTD Query
|
|
QUIT READ RECover REFRESH RENum REPeat Replace CReplace
|
|
RESet RESTore RGTLEFT RIght LEft SAVE SET SHift SI SORT
|
|
SOS STAck STATus TOP TRAnsfer Type Up ]]
|
|
|
|
|
|
local indata1 = [[riG rePEAT copies put mo rest types
|
|
fup. 6 poweRin]]
|
|
|
|
local indata2 = [[ALT aLt ALTE ALTER AL ALF ALTERS TER A]]
|
|
local indata3 = [[o ov oVe over overL overla]]
|
|
|
|
local function split(text)
|
|
local result = {}
|
|
for w in string.gmatch(text, "%g+") do
|
|
result[#result+1]=w
|
|
-- print(#result,w,#w)
|
|
end
|
|
return result
|
|
end
|
|
|
|
|
|
local function print_line( t )
|
|
for i = 1,#t do
|
|
io.write( string.format("%s ", t[i] ) )
|
|
end
|
|
print()
|
|
end
|
|
|
|
|
|
local function is_valid(cmd,abbrev)
|
|
--print(abbrev,cmd,"##")
|
|
|
|
local sm = string.match( cmd:lower(), abbrev:lower() )
|
|
if sm == nil then return -1 end
|
|
|
|
-- test if any lowercase in "cmd"
|
|
if false then do -- NOTE!: requirement spec error .. put not equal PUT
|
|
local lowcase = string.match(cmd,"%l+")
|
|
if lowcase == nil then return -2 end
|
|
if #lowcase < 1 then return -3 end
|
|
end
|
|
end
|
|
|
|
-- test if abbrev is too long
|
|
if #abbrev > #cmd then return -4 end
|
|
|
|
--- num caps in "cmd" is minimum length of abbrev
|
|
local caps = string.match(cmd,"%u+")
|
|
if #abbrev < #caps then return -5 end
|
|
|
|
local s1 = abbrev:sub(1,#caps)
|
|
local s2 = cmd:sub(1,#caps)
|
|
if s1:lower() ~= s2:lower() then return -6 end
|
|
|
|
return 1
|
|
end
|
|
|
|
local function start()
|
|
local t1 = {}
|
|
local t2 = {}
|
|
local result = {}
|
|
t1 = split(list1)
|
|
t2 = split(indata1)
|
|
print_line(t2);
|
|
|
|
for i = 1,#t2 do
|
|
good = 0
|
|
for j = 1,#t1 do
|
|
local abbrev = t2[i]
|
|
local cmd = t1[j]
|
|
good = is_valid(cmd,abbrev)
|
|
if good==1 then do
|
|
result[#result+1] = t1[j]:upper()
|
|
break end
|
|
end --if
|
|
end --for j
|
|
if good < 1 then result[#result+1] = "*error*" end
|
|
end --for i
|
|
print_line(result)
|
|
end
|
|
|
|
start() -- run the program
|