Advertisement
dalvorsn

permutWithRepeat(string)

Mar 30th, 2012
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.12 KB | None | 0 0
  1. function permutWithRepeat(string)
  2.     string = string:lower()
  3.     math.randomseed(os.time())
  4.     letters, combinations = {}, {}
  5.     number = string:len()
  6.     for i = 1, number do
  7.         table.insert(letters, string.sub(string, i,i))
  8.     end
  9.  
  10.     function getRepsTable(tab)
  11.         local elements = {}
  12.         for i, v in pairs(tab) do
  13.             if not(elements[v])then
  14.                 elements[v] = 1
  15.             else
  16.                 elements[v] = elements[v] + 1
  17.             end
  18.         end
  19.         local x = 1
  20.         for _, j in pairs(elements) do
  21.             x = x * j
  22.         end
  23.         return x
  24.     end
  25.  
  26.     function getFatorial(num)
  27.         local x = 1
  28.         for i = num, 1, -1 do
  29.             x = x * i
  30.         end
  31.         return x
  32.     end
  33.     function getFatorialReps(num, letras)
  34.         if(getRepsTable(letras) > 1)then
  35.             return 0
  36.         end
  37.         return (getFatorial(num)/getFatorial(getRepsTable(letras)))
  38.     end
  39.  
  40.     function isInTable(table, element)
  41.         for i, v in pairs(table)do
  42.             if(rawequal(v, element))then
  43.                 return true
  44.             end
  45.         end
  46.         return false
  47.     end
  48.  
  49.     function randomizeTable(tabela)
  50.         local num  = #tabela
  51.         local sequence, newTable = {}, {}
  52.         while not rawequal(#sequence, #tabela) do
  53.             local random = math.random(num)
  54.             if not(isInTable(sequence, random))then
  55.                 table.insert(sequence, random)
  56.             end
  57.         end
  58.         for i, v in pairs(sequence) do
  59.             rawset (newTable, i, tabela[v])
  60.         end
  61.         return {concat=table.concat(newTable,""), tab = newTable}
  62.     end
  63.  
  64.     print("O numero de anagramas é: "..getFatorialReps(number, letters)..".\n")
  65.     if(rawequal(#combinations, getFatorialReps(number, letters)))then
  66.         print("Não existem combinações sem repetição para essa palavra.")
  67.     else
  68.         print("São eles(isso pode demorar um pouco):\n")
  69.     end
  70.     collectgarbage ("collect")
  71.     while true do
  72.         local str = randomizeTable(letters)
  73.         if not(isInTable(combinations, str.concat))then
  74.             if(tonumber(getRepsTable(str.tab)) == 1)then
  75.                 table.insert(combinations, str.concat)
  76.             end
  77.         end
  78.         if(rawequal(#combinations, getFatorialReps(number, letters)))then
  79.            break
  80.         end
  81.     end
  82.     collectgarbage ("collect")
  83.     table.sort(combinations)
  84.     print(table.concat(combinations, "\n"))
  85.     print("Tempo decorrido: "..os.clock().." segundos.")
  86. end
  87.  
  88. permutWithRepeat("abcdef")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement