/* From Richard Wiseman It's the Friday Puzzle 2010-02-26 http://richardwiseman.wordpress.com/2010/02/26/its-the-friday-puzzle-48/ (see number_puzzle_4 above) Same principle as number_puzzle_4 but with the original problem statement """ make the number 8 from the numbers 4, 7, 6 and 3. """ * With unique_digits_all=true. and no variables Note: We do not use variables here, just constants. And unique_digits_all=true to ensure that we used all constants exactly once. This only works since it happens that the numbers in the questions happens to be unique. [program = (7 + 3) * (4 / 5),res = 8.0,count = 1424] [program = (3 + 7) * (4 / 5),res = 8.0,count = 1262] [program = 4 / 5 * (3 + 7),res = 8.0,count = 1258] [program = 4 / 5 * (7 + 3),res = 8.0,count = 849] [program = 4 * ((3 + 7) / 5),res = 8.0,count = 513] [program = (7 * 5 - 3) / 4,res = 8.0,count = 211] [program = (7 + 3) / (5 / 4),res = 8.0,count = 69] [program = (3 + 7) / 5 * 4,res = 8.0,count = 65] [program = 4 + (7 + 5) / 3,res = 8.0,count = 58] [program = (3 + 7) / (5 / 4),res = 8.0,count = 38] [program = 4 / (5 / (7 + 3)),res = 8.0,count = 4] [program = (7 + 5) / 3 + 4,res = 8.0,count = 2] resultMap = [8.0 = 12] * With unique_vars_all=true num_gens=1800 and no constants This variant is a little bit safer. Note that this only works for one character atoms. [program = (A + D) * (B / C),res = 8.0,count = 1702] [program = (D + A) * (B / C),res = 8.0,count = 1693] [program = B / C * (A + D),res = 8.0,count = 1663] [program = B / C * (D + A),res = 8.0,count = 1562] [program = (D + A) / (C / B),res = 8.0,count = 93] [program = (A + D) / (C / B),res = 8.0,count = 59] [program = (C + D) / A + B,res = 8.0,count = 56] [program = B + (C + D) / A,res = 8.0,count = 53] [program = (C * D - A) / B,res = 8.0,count = 4] [program = (D * C - A) / B,res = 8.0,count = 3] [program = B / (C / (D + A)),res = 8.0,count = 1] resultMap = [8.0 = 11] Cf http://hakank.org/jgap/number_puzzle4.conf which give a couple of solutions, e.g. (d - c) + (b + a) d - ((c - b) - a) (c - a) * (b - d) (b + a) - (c - d) */ data(number_puzzle_4b,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Data = [[[3,4,5,7],8] ], Ops = [+,-,*,/], Unknown = [3,4,5,7], Constants = [3,4,5,7], % Constants = [], % Using no constants (only variables). For unique_digits_all=true % Vars = ['A','B','C','D'], Vars = [],% No variables, just use the given numbers. unique_vars_all=true MaxSize = 31, Params = new_map([init_size=200, unique_digits_all=true, % use only constants and no variables % unique_vars_all=true, % use only variables and no constants stop_criteria=generations, num_gens=1800 ]).