[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)
 avatar
Flamma
lua
a year ago
2.7 kB
1
Indexable
Never
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