/* Osterlind's ESP stack. DO NOT PUBLISH! It should be (2*(x + y)) % 5 where 0 -> 5 This is done with the function ModuloReplaceD and mod_replace: 5 It should be: 1145 3133 2543 4415 2422 3512 I.e. [1,1] -> 4 * Using mod_replace/2 (with replace value 5) as in JGAP SymbolicRegression configuration (1000 generations) [program = mod_replace((A + B) * 2,5),res = 4,count = 899] [program = mod_replace((A + B) * 2,0 - (0 - 5)),res = 4,count = 690] [program = mod_replace((A + B) * 2,5 - 0),res = 4,count = 622] [program = mod_replace((A + B) * 2,mod_replace(0,1 * 3)),res = 4,count = 392] [program = mod_replace((A + B) * 2,2 + 3),res = 4,count = 200] [program = mod_replace((A + B) * 2,mod_replace(B,B)),res = 4,count = 147] [program = mod_replace((A + B) * 2,mod_replace(4,4)),res = 4,count = 70] [program = mod_replace((A + B) * 2,3 + 2),res = 4,count = 65] [program = mod_replace((A + B) * 2,mod_replace(B,1)),res = 4,count = 2] [program = mod_replace((A + B) * 2,mod_replace(A,A)),res = 4,count = 2] [program = mod_replace((A + B) * 2,mod_replace(1,1)),res = 4,count = 2] [program = mod_replace((A + B) * 2,mod_replace(mod_replace(1,A),1)),res = 4,count = 1] [program = mod_replace((A + B) * 2,mod_replace(A - A,A + A)),res = 4,count = 1] [program = mod_replace((A + B) * 2,mod_replace(1 - 2,1)),res = 4,count = 1] [program = mod_replace((A + B) * 2,mod_replace(0 - B,B)),res = 4,count = 1] [program = mod_replace((A + B) * 2,mod_replace(0 * B,A)),res = 4,count = 1] [program = mod_replace((A + B) * 2,mod_replace(A,1)),res = 4,count = 1] [program = mod_replace((A + B) * 2,mod_replace(0,B)),res = 4,count = 1] [program = mod_replace((A + B) * 2,mod_replace(0,A)),res = 4,count = 1] [program = mod_replace((A + B) * 2,mod_replace(0,2)),res = 4,count = 1] resultMap = [4 = 20] * With plain mod No solution I interrupted after 1h37minutes: gen = 35794 (time: 5502.487s) results_best = [[12,2 mod (B * A) + 8 mod (10 - B - A)],[12,8 mod (10 - B - A) + 2 mod (B * A)],[13.999999999999998,(A + B) / 3 - 0 + 8 mod (10 - B - A)],[13.999999999999998,8 mod (10 - B - A) + ((A + B) / 3 - 0)],[14,2 + 8 mod (10 - B - A)],[14,1 * 2 + 8 mod (10 - B - A)],[14,1 * (1 + 1) + 8 mod (10 - B - A)],[14,1 * (2 mod 5) + 8 mod (10 - B - A)],[14,1 * (2 mod 8) + 8 mod (10 - B - A)],[14,1 * (2 mod 9) + 8 mod (10 - B - A)]] * With the experimental replace/3 No solution. * With if_then_else/3 and !=, == (1000 generations) [program = if_then_else(B + A != 5,(B + (A + (B + A))) mod (A mod A + 5),5 - (5 != A + B)),res = 4,count = 331] [program = if_then_else(B + A != 5,(B + (A + (B + A))) mod (A mod A + 5),5),res = 4,count = 325] [program = if_then_else(B + A != 5,(B + (A + (B + A))) mod (A mod A + 5),5 - (B - 0 == A)),res = 4,count = 310] [program = if_then_else(B + A != 5,(B + (A + (B + A))) mod (A mod A + 5),5 + if_then_else(0,B,0 == 5)),res = 4,count = 292] [program = if_then_else(B + A != 5,(B + (A + (B + A))) mod (A mod A + 5),if_then_else(0,0,5)),res = 4,count = 263] [program = if_then_else(B + A != 5,(B + (A + (B + A))) mod (A mod A + 5),5 - B + B),res = 4,count = 252] [program = if_then_else(B + A != 5,(B + (A + (B + A))) mod (A mod A + 5),if_then_else(5,5,5)),res = 4,count = 189] [program = if_then_else(B + A != 5,(B + (A + (B + A))) mod (A mod A + 5),B + A + 0),res = 4,count = 171] [program = if_then_else(if_then_else(0,A,5 != B + A),(B + (A + (B + A))) mod (A mod A + 5),5),res = 4,count = 156] [program = if_then_else(B + A != 5,(B + (A + (B + A))) mod (A mod A + 5),if_then_else(if_then_else(5,B mod A,5),0 / A * 0,5) + 0),res = 4,count = 126] [program = if_then_else(if_then_else(0,A,5 != B + A),(B + (A + (B + A))) mod (A mod A + 5),5 - (5 != A + B)),res = 4,count = 89] [program = if_then_else(if_then_else(0,A,5 != B + A),(B + (A + (B + A))) mod (A mod A + 5),5 + if_then_else(0,B,0 == 5)),res = 4,count = 40] [program = if_then_else(B + if_then_else(if_then_else(A,5,A) * B,if_then_else(5 != 0,B,B),A) != 5,(B + (A + (B + A))) mod (A mod A + 5),5),res = 4,count = 7] [program = if_then_else(if_then_else(0,A,5 != B + A),(B + (A + (B + A))) mod (A mod A + 5),if_then_else(0,0,5)),res = 4,count = 6] [program = if_then_else(if_then_else(0,A,5 != B + A),(B + (A + (B + A))) mod (A mod A + 5),if_then_else(5,5,5)),res = 4,count = 5] [program = if_then_else(if_then_else(0,A,5 != B + A),(B + (A + (B + A))) mod (A mod A + 5),5 - B + B),res = 4,count = 4] [program = if_then_else(if_then_else(0,A,5 != B + A),(B + (A + (B + A))) mod (A mod A + 5),5 - (B - 0 == A)),res = 4,count = 3] [program = if_then_else(if_then_else(0,A,5 != B + A),(B + (A + (B + A))) mod (A mod A + 5),5 - 0 / A),res = 4,count = 1] [program = if_then_else(B + if_then_else(if_then_else(A,5,A) * B,if_then_else(5 != 0,B,B),A) != 5,(B + (A + (B + A))) mod (A mod A + 5),5 - (5 != A + B)),res = 4,count = 1] resultMap = [4 = 19] Note: This is not a public configuration: esp_stack.xconf */ import util. data(debruijn2d,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Seq = [1,1,4,5,3,1,3,3,2,5,4,3,4,4,1,5,2,4,2,2,3,5,1,2,1,1], make_seq(Seq,2,Data,Unknown,Vars), % Ops = [+,/,-,*,mod], % Ops = [+,/,-,*,mod_replace], % Ops = [+,/,-,*,mod, replace], Ops = [+,/,-,*,mod,if_then_else,!=,==], Constants = 0..10, MaxSize = 21, get_global_map().put(mod_replace_value,5), % for mod_replace/2 Params = new_map([debug=false,init_size=1000,num_gens=100]).