/* Pythagoras theorem a^2 + b^2 = c^2 For a=3, b=4, c=5 AllGood: [program = 2 + A,res = 5,count = 12] [program = 1 + B,res = 5,count = 10] [program = B + 1,res = 5,count = 9] [program = (3 - 2) * 5,res = 5,count = 8] [program = pow3(1) * 5,res = 5,count = 7] [program = 5 * (B / B),res = 5.0,count = 7] [program = 8 - A,res = 5,count = 6] [program = 4 + A / A,res = 5.0,count = 6] [program = 4 + 1,res = 5,count = 6] [program = 9 - B,res = 5,count = 5] [program = A + 2,res = 5,count = 5] [program = 1 + 1 * B,res = 5,count = 5] [program = 6 - 1,res = 5,count = 4] [program = A + (3 - 1),res = 5,count = 4] [program = 4 + pow4(1),res = 5,count = 4] [program = 4 + pow3(1),res = 5,count = 3] [program = 3 + 2,res = 5,count = 3] [program = 5 * (3 - 2),res = 5,count = 3] [program = 5 * 1,res = 5,count = 3] [program = pow2(A) - B,res = 5,count = 2] [program = 9 - (A + 1),res = 5,count = 2] [program = 9 - 4,res = 5,count = 2] [program = 7 - 2,res = 5,count = 2] [program = B + B / (B + (A - 3)),res = 5.0,count = 2] [program = B + pow3(1),res = 5,count = 2] [program = A + (3 + 2 - A),res = 5,count = 2] [program = A * 5 / A,res = 5.0,count = 1] [program = 5 / (B - A),res = 5.0,count = 1] [program = 5 / 1,res = 5.0,count = 1] [program = B + B - A,res = 5,count = 1] [program = A * B - 7,res = 5,count = 1] [program = A * 7 - pow2(4),res = 5,count = 1] [program = A * 2 - pow4(1),res = 5,count = 1] [program = pow2(2) - (B - 5),res = 5,count = 1] [program = B - (A - 4),res = 5,count = 1] [program = 9 - pow2(2),res = 5,count = 1] [program = 7 - (8 - 6),res = 5,count = 1] [program = 7 - (6 - B),res = 5,count = 1] [program = 6 - 9 / 9,res = 5.0,count = 1] [program = 3 - (B - 6),res = 5,count = 1] [program = 1 - (B - pow3(2)),res = 5,count = 1] [program = pow4(A) / pow4(A) + B,res = 5.0,count = 1] [program = 4 / B + B,res = 5.0,count = 1] [program = B - 8 + 9,res = 5,count = 1] [program = A - A + 5,res = 5,count = 1] [program = 6 - B / 1 + 3,res = 5.0,count = 1] [program = 3 - 1 + A,res = 5,count = 1] [program = B - A * (6 / A) + B + A,res = 5.0,count = 1] [program = pow4(1) + B,res = 5,count = 1] [program = pow3(pow3(A - 4)) + (10 - 4),res = 5,count = 1] [program = pow3(1) + 4,res = 5,count = 1] [program = B + B / B,res = 5.0,count = 1] [program = B + 5 / (1 + B),res = 5.0,count = 1] [program = B + (2 - 1),res = 5,count = 1] [program = A + (A - 1),res = 5,count = 1] [program = 4 + B / B,res = 5.0,count = 1] [program = 1 + 4,res = 5,count = 1] [program = pow4(A) / pow4(A) * 5,res = 5.0,count = 1] resultMap = [5 = 43,5.0 = 15] For A=13, B=41, C= 1850, the solutions are much fewer: AllGood: [program = pow2(A) + pow2(B),res = 1850,count = 4] [program = pow2(B) + pow2(A),res = 1850,count = 2] resultMap = [1850 = 2] */ data(pythagoras_theorem,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- % Data = [[[3,4],5] ], % Unknown = [3,4], Data = [[[13,41],1850] ], Unknown = [13,41], Vars = ['A','B'], Ops = [+,*,/,-,pow2,pow3,pow3,pow4], Constants = 1..10, MaxSize = 11, Params = new_map([init_size=1000, % num_gens=100 approx=0, reset_timeout = 600 % reset problem after reset_timeout seconds ]).