[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
2 years ago
2.7 kB
4
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 end
Editor is loading...