Lua сгенерировать таблицу два столбца с неповторяющимися строками

Рейтинг: 0Ответов: 1Опубликовано: 03.03.2023

Необходимо сгенерировать таблицу Lua c двумя значениями, которые не повторяются. Причем в таблице не должно быть строк типа (a,b) и (b,a). Такие строки будут считаться одинаковыми (a,b) = (b,a).

Есть пример (вроде пример Mike V.), который генерирует таблицу с одним столбцом неповторяющихся значений:

math.randomseed(os.time()) -- first, sets a seed for the pseudo-random generator
math.random(); math.random(); math.random();

local  function my_random(t, from, to)  -- second, exclude duplicates
   local num = math.random (from, to)
   if t[num] then num = my_random(t, from, to) end
   t[num] = num
   return num
end

local t = {}    -- initialize  table with not duplicate values
for i =1, 30 do
  X = my_random (t, 1, 50)
  print (i, "=" ,X)
 end

Мне нужно аналогично, но два столбца (Лучше сразу в таблицу Lua загнать):

1 -  1,3
2 -  2,4
3 -  4,3
4 -  ...

Заранее спасибо.

Ответы

▲ 0Принят

попробую и тут помочь, только вы не написали какие еще ограничения есть. Может нужны все возможные комбинации? Тогда нужно вычислить это количество по какой-то формуле и подставить вместо limit тут for i =1, limit do.

math.randomseed(os.time()) 
math.random(); 

local function random2(from, to)
  return  math.random (from, to), math.random (from, to) 
end

local  function my_random(t, from, to)  -- second, exclude duplicates
   local a,b = random2 (from, to)
   if t[a..'_'..b] or t[b..'_'..a] then a,b = my_random(t, from, to) end
   t[a..'_'..b] = {a,b}
   return a,b
end

local limit = 10
local t = {}   
for i =1, limit do
  x,y = my_random (t, 1, limit)
  print (i, "=" ,x,y)
 end