-- Brainfuck interpreter in Lua

-- Read the Brainfuck program from the command line
local program = arg[1]

-- The Brainfuck memory
local memory = {}
for i = 1, 30000 do
    memory[i] = 0
end

-- The pointer to the current memory cell
local pointer = 1

-- The Brainfuck program counter
local pc = 1

-- Loop stack for tracking '[' and ']'
local loopStack = {}

-- Loop through the Brainfuck program
while pc <= #program do
    local c = program:sub(pc, pc)

    if c == '>' then
        pointer = pointer + 1
    elseif c == '<' then
        pointer = pointer - 1
    elseif c == '+' then
        memory[pointer] = memory[pointer] + 1
    elseif c == '-' then
        memory[pointer] = memory[pointer] - 1
    elseif c == '.' then
        io.write(string.char(memory[pointer]))
    elseif c == ',' then
        memory[pointer] = io.read(1):byte()
    elseif c == '[' then
        if memory[pointer] == 0 then
            local loopCounter = 1
            while loopCounter > 0 do
                pc = pc + 1
                local nextChar = program:sub(pc, pc)
                if nextChar == '[' then
                    loopCounter = loopCounter + 1
                elseif nextChar == ']' then
                    loopCounter = loopCounter - 1
                end
                if pc > #program then
                    error("Unmatched '['")
                end
            end
        else
            table.insert(loopStack, pc)
        end
    elseif c == ']' then
        if #loopStack == 0 then
            error("Unmatched ']'")
        else
            if memory[pointer] ~= 0 then
                pc = loopStack[#loopStack]
            else
                table.remove(loopStack, #loopStack)
            end
        end
    end

    pc = pc + 1
end

-- Check for unmatched '['
if #loopStack > 0 then
    error("Unmatched '['")
end
-- ล่าม Brainfuck ใน Lua -- อ่านโปรแกรม Brainfuck จากบรรทัดคำสั่ง local program = arg[1] -- หน่วยความจำ Brainfuck หน่วยความจำภายใน = {} สำหรับ i = 1, 30000 do memory[i] = 0 end -- The ตัวชี้ไปยังเซลล์หน่วยความจำปัจจุบัน ตัวชี้ในเครื่อง = 1 -- โปรแกรม Brainfuck ตัวนับ local pc = 1 -- Loop stack สำหรับการติดตาม '[' และ ']' local loopStack = {} -- วนซ้ำผ่านโปรแกรม Brainfuck ในขณะที่ pc <= # โปรแกรมทำ local c = program:sub(pc, pc) ถ้า c == '>' จากนั้นตัวชี้ = ตัวชี้ + 1 elseif c == '<' จากนั้นตัวชี้ = ตัวชี้ - 1 elseif c == '+' จากนั้นหน่วยความจำ [ตัวชี้ ] = หน่วยความจำ [ตัวชี้] + 1 elseif c == '-' จากนั้นหน่วยความจำ [ตัวชี้] = หน่วยความจำ [ตัวชี้] - 1 elseif c == '.' จากนั้น io.write(string.char(memory[pointer])) elseif c == ',' จากนั้น memory[pointer] = io.read(1):byte() elseif c == '[' แล้วถ้า memory[pointer ] == 0 จากนั้น local loopCounter = 1 ในขณะที่ loopCounter > 0 do pc = pc + 1 local nextChar = program:sub(pc, pc) if nextChar == '[' แล้ว loopCounter = loopCounter + 1 elseif nextChar == ']' จากนั้น loopCounter = loopCounter - 1 จบถ้า pc > #program แล้วเกิดข้อผิดพลาด ("ไม่ตรงกัน '['") จบ end อื่น table.insert (loopStack, pc) จบ elseif c == ']' แล้วถ้า #loopStack == 0 แสดงว่าเกิดข้อผิดพลาด ("ไม่ตรงกัน ']'") อย่างอื่นถ้า memory[pointer] ~= 0 ดังนั้น pc = loopStack[#loopStack] else table.remove(loopStack, #loopStack) end end end pc = pc + 1 end -- ตรวจสอบหาค่าที่ไม่ตรงกัน ' [' ถ้า #loopStack > 0 แสดงว่าข้อผิดพลาด ("ไม่ตรงกัน '['") สิ้นสุด
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence