[Snippet] Tfm/Byte, Morse, Invertexto
Converte uma string para byte, morse ou a inverte, de acordo com a escolha Parâmetros: texto, tipoDaConversão (1, 2 ou 3)Flamma
lua
3 years ago
2.7 kB
7
Indexable
local enigma = function(texto, tipoDaConversao)
local retornar = {}
local listaDeAcentos = {}; listaDeAcentos['Þ'] = 'p'; listaDeAcentos['ß'] = 's'; listaDeAcentos['à'] = 'a'; listaDeAcentos['á'] = 'a'; listaDeAcentos['â'] = 'a'; listaDeAcentos['ã'] = 'a'; listaDeAcentos['ä'] = 'a'; listaDeAcentos['å'] = 'a'; listaDeAcentos['æ'] = 'ae'; listaDeAcentos['ç'] = 'c'; listaDeAcentos['è'] = 'e'; listaDeAcentos['é'] = 'e'; listaDeAcentos['ê'] = 'e'; listaDeAcentos['ë'] = 'e'; listaDeAcentos['ì'] = 'i'; listaDeAcentos['í'] = 'i'; listaDeAcentos['î'] = 'i'; listaDeAcentos['ï'] = 'i'; listaDeAcentos['ð'] = 'eth'; listaDeAcentos['ñ'] = 'n'; listaDeAcentos['ò'] = 'o'; listaDeAcentos['ó'] = 'o'; listaDeAcentos['ô'] = 'o'; listaDeAcentos['õ'] = 'o'; listaDeAcentos['ö'] = 'o'; listaDeAcentos['ø'] = 'o'; listaDeAcentos['ù'] = 'u'; listaDeAcentos['ú'] = 'u'; listaDeAcentos['û'] = 'u'; listaDeAcentos['ü'] = 'u'; listaDeAcentos['ý'] = 'y'; listaDeAcentos['þ'] = 'p'; listaDeAcentos['ÿ'] = 'y'
local texto = texto; if texto == nil or texto == '' then texto = 'cadê sua mensagem?' end
local texto = tostring(texto)
local texto = texto:lower():gsub('[%z\1-\127\194-\244][\128-\191]*', listaDeAcentos)
if tipoDaConversao == 3 then --inversão
for i=1, texto:len() do
if texto:sub(i, i) == ' ' then
retornar[#retornar+1] = '32 '
else
retornar[#retornar+1] = tostring(texto:sub(i, i)):byte()..' '
end
end
return table.concat(retornar)
elseif tipoDaConversao == 2 then --morse
local conversaoMorse = {}
local listaDeMorse = '.- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --.. .---- ..--- ...-- ....- ..... -.... --... ---.. ----. -----'
local listaDeLetras = 'abcdefghijklmnopqrstuvwxyz1234567890'
local tabelaDeMorse = {}
local posicao = 1
for i in listaDeMorse:gmatch('([.-]+)%s-') do
tabelaDeMorse[tostring(listaDeLetras:sub(posicao, posicao))] = i
posicao = posicao+1
end
for i=1, string.len(texto) do
if tostring(texto:sub(i, i)) == ' ' then
conversaoMorse[#conversaoMorse+1] = '/ '
elseif tostring(texto:sub(i, i)):match('(%w+)') then
conversaoMorse[#conversaoMorse+1] = tabelaDeMorse[tostring(texto:sub(i, i))]..' '
else
conversaoMorse[#conversaoMorse+1] = tostring(texto:sub(i, i))
end
end
return table.concat(conversaoMorse)
else --byte/ascii
local textoInvertido = {}
for i=1, string.len(texto) do
textoInvertido[1+texto:len()-i] = texto:sub(i, i)
end
return table.concat(textoInvertido)
end
endEditor is loading...