Пример. Lua генерируем код
Функция loadstring позволяет исполнять текст как код. Попробуем генерировать числа, сравнения чисел и логику И, ИЛИ.
Цель: просто пример.
Создать пары случайных чисел А и Б.
Случайно сравнить попарно.
Создать случайно логику "И, ИЛИ" и сравнить результаты сравнения до тех пор, пока не будут истинны
Скрытый текст
function CheckTrue(parameter, strue, sfalse) if parameter then print(strue) else print(sfalse) end end
ProgrammCompare_AxB = {}
function ProgrammCompare_AxB:New(_name, _tableStringCondition)
local obj = {}
obj.programmName = _name
obj.tableStringCondition = _tableStringCondition
obj.stringCondition = ''
obj.randomProgramm = ''
function obj:MakeProgramm()
obj.stringCondition = obj.tableStringCondition[math.random(1, #obj.tableStringCondition)]
print(obj.stringCondition)
obj.randomProgramm = 'function ' ..obj.programmName..'(a, b) return a '..obj.stringCondition..' b end'
end
function obj:RunProgramm(a, b)
loadstring (obj.randomProgramm)()
result = nil
loadstring (string.format('result = %s(%s,%s)', obj.programmName, a, b))()
CheckTrue ( result, string.format('a = %s, b = %s, result = true', a, b), string.format('a = %s, b = %s, result = false', a,b) )
return result
end
setmetatable(obj, self)
obj.__index = ProgrammCompare_AxB
return obj
end
compareProgramm1 = ProgrammCompare_AxB:New('ProgrammCompare_AxB_1', { '>', '<', '>=', '<=', '==', '~=' })
compareProgramm2 = ProgrammCompare_AxB:New('ProgrammCompare_AxB_2', { 'and', 'or' })
repeat
compareProgramm1:MakeProgramm()
compareProgramm2:MakeProgramm()
-- Подбирать значения
local a = compareProgramm1:RunProgramm(math.random(1, 100), math.random(1, 100))
local b = compareProgramm1:RunProgramm(math.random(1, 100), math.random(1, 100))
local c = compareProgramm2:RunProgramm(a, b)
until c
Пример вывода в Cheat Engine:
>=
or
a = 83, b = 75, result = true
a = 18, b = 86, result = false
a = true, b = false, result = true
Т.е.
(83 >= 75 or 18 >= 86) == true, т.к. первое условие верное 83 >= 75
83 >= 75 = true
18 >= 86 = false
0 Комментариев
Рекомендуемые комментарии
Комментариев нет
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти