Вот логика.
У вас есть 8 2s. Перед каждым 2 есть строка 3 1 с. Это 32 твоих номера.
Эти 8 групп из 1112 разделяют 9 мест, которые могут пройти остальные 20 единиц.
Таким образом, ваша задача состоит в том, чтобы случайным образом распределить 20 1 с на 9 случайных мест. А потом возьми эту коллекцию цифр и напиши свой список. Так в непроверенном коде от не-Lua программиста:
-- Populate buckets
local buckets = {0, 0, 0, 0, 0, 0, 0, 0, 0}
for k = 1, 20 do
local bucket = floor(rand(9))
buckets[bucket] = buckets[bucket] + 1
end
-- Turn that into an array
local result = {}
local i = 0
for bucket = 0, 8 do
-- Put buckets[bucket] 1s in result
if 0 < buckets[bucket] do
for j = 0, buckets[bucket] do
result[i] = 1
i = i + 1
end
end
-- Add our separating 1112?
if bucket < 8 do
result[i] = 1
result[i+1] = 1
result[i+2] = 1
result[i+3] = 2
i = i + 4
end
end