Перейти к содержанию
  • записи
    104
  • комментариев
    125
  • просмотра
    19 624

Пример. Lua генерируем код


MasterGH

1 100 просмотров

Функция 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 Комментариев


Рекомендуемые комментарии

Комментариев нет

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.