Генератор последовательности строк на Lua


Понадобился на днях мне генератор последовательности строк заданной длины из набора символов. Пример: вывести все возможные варианты из символов A, B, C. Результат: A, B, C, AA, AB, AC, BA, BB и так далее… Для мелких скриптов использую Lua как быстрый и легко встраиваемый язык. Готовых примеров не нашлось, написал собственный сниппет с использованием рекурсии. Довольно элегантное решение:

symbols = {'A','B','C'}

lenght = {min = 2, max = 3}

function print_t(t)
    for _,v in pairs(t) do
    io.write(v)
    end
    print()
end

function generate(current, len, chars)
    if #current == len then
    print_t(current)
    end
    if #current < len then
    for c = 1, #chars do
    curr = {}
    for i = 1, #current do
        curr[i] = current[i]
    end
    curr[#curr+1] = chars[c]
    generate(curr, len, chars)
    end
    end
end

function brute(chars, min, max)
    for l = min, max do
    generate({}, l, chars)
    end
end

brute(symbols, lenght.min, lenght.max)

Результат выполения:

AA
AB
AC
BA
BB
BC
CA
CB
CC
AAA
AAB
AAC
ABA
ABB
ABC
ACA
ACB
ACC
BAA
BAB
BAC
BBA
BBB
BBC
BCA
BCB
BCC
CAA
CAB
CAC
CBA
CBB
CBC
CCA
CCB
CCC

Данный сниппет легко использовать для какого-нибудь генератора словаря или генератора паролей.