let strtable = []
let strLen = 4 // length of all strings to generate
let AByte = "A":byte() // grabs the ascii value of 'A'

proto stringBuilder 
    func __init(self, length)
        self.len = length
    end

    // we are the iterator object lol
    func __iter(self)
        self.x = 0
        return self
    end

    func __next(self)
        let x = self.x++

        // if we've generated all the possible strings, return nil ending the loop
        if x >= 26 ^ self.len then
            return nil
        end

        // generate the string
        let str = ""
        for (let i = 0; i < self.len; i++) do
            str = string.char(AByte + (x % 26)) .. str
 
            x = math.floor(x / 26)
        end

        return str
    end
end

// generate a bunch of strings & populate the table
print("generating " .. 26 ^ strLen .. " strings...")
for str in stringBuilder(strLen) do
    strtable[str] = true
end