random lua lua-table garrys-mod

random - Lua-Obtener un valor de una tabla y asignarlo a otra sin repeticiones



lua-table garrys-mod (1)

Tengo una función lua que genera una mezcla aleatoria de números de 1 a n , dado n . El método se basa en un algoritmo popular para generar una permutación aleatoria de una matriz de elementos.

Puedes intentar usar eso así:

local Swap = function(array, index1, index2) array[index1], array[index2] = array[index2], array[index1] end GetShuffle = function(numelems) local shuffle = {} for i = 1, numelems do shuffle[#shuffle + 1] = i end for ii = 1, numelems do Swap(shuffle, ii, math.random(ii, numelems)) end return shuffle end function assignTargets() local shuffle = GetShuffle(#playing) --assuming `playing` is a known global for k,v in ipairs(shuffle) do TargetList[k] = v end end

Específicamente, esto es para Garry''s Mod, sin embargo, no creo que eso importe demasiado en este problema. Lo que quiero hacer es obtener un jugador y establecer su valor a otro jugador aleatorio (para que cada jugador tenga un "objetivo" aleatorio). Quiero hacer esto sin repeticiones, y para que un jugador no se asigne a sí mismo. Para ilustrar mejor:

La única diferencia para esa imagen es que quiero que cada jugador sea asignado a otro jugador aleatorio , así que más como jugador1 => jugador 5, jugador 3 => jugador 2, etc.

Aquí está mi código en este momento, sin embargo, esto siempre deja a una persona sin marcar:

validTargets = {} TargetList = {} local Swap = function(array, index1, index2) array[index1], array[index2] = array[index2], array[index1] end GetShuffle = function(numelems) local shuffle = {} for i = 1, numelems do shuffle[#shuffle + 1] = i end for ii = 1, numelems do Swap(shuffle, ii, math.random(ii, numelems)) end return shuffle end function assignTargets() local shuffle = GetShuffle(#playing) for k,v in ipairs(shuffle) do TargetList[k] = v end SyncTargets() end function SyncTargets() for k,v in pairs(TargetList) do net.Start("sendTarget") net.WriteEntity(v) net.Send(k) end end