Advertisement
killerbrenden

Lexical Order

Dec 9th, 2020
965
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.18 KB | None | 0 0
  1. --!strict
  2.  
  3. local lexicographicOrder = {}
  4.  
  5. type Array<T> = {[number] : T}
  6. type Dictionary = {[number | string] : any}
  7.  
  8. function lexicographicOrder.Order(t : Array<number>)
  9.     local lexicalOrdered = script:WaitForChild("Order")
  10.     local start = t
  11.    
  12.     local function swap(a, i, j)
  13.         local temp = a[i]
  14.         a[i] = a[j]
  15.         a[j] = temp
  16.     end
  17.    
  18.     local function reverse(a)
  19.         for num = 1, math.floor(#a/2+0.5) do
  20.             local b = #a - num + 1
  21.             a[num], a[b] = a[b], a[num]
  22.         end
  23.     end
  24.    
  25.     while true do
  26.         game:GetService("RunService").Heartbeat:Wait()
  27.        
  28.         local largestI = -1
  29.         for num = 1,#start-1 do
  30.             if start[num] < start[num+1] then
  31.                 largestI = num
  32.             end
  33.         end
  34.        
  35.         if largestI == -1 then
  36.             break
  37.         end
  38.        
  39.         local largestJ
  40.         for num = 1,#start do
  41.             if start[largestI] < start[num] then
  42.                 largestJ = num
  43.             end
  44.         end
  45.        
  46.         swap(start, largestI, largestJ)
  47.        
  48.         local endTable = {}
  49.         for num = largestI+1, #start do
  50.             endTable[#endTable+1] = start[num]
  51.             start[num]=nil
  52.         end
  53.        
  54.         reverse(endTable)
  55.        
  56.         for num = 1,#endTable do
  57.             start[#start+1] = endTable[num]
  58.         end
  59.        
  60.         lexicalOrdered.Value = table.concat(start,",")
  61.     end
  62. end
  63.  
  64. return lexicographicOrder
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement