/* http://answers.yahoo.com/question/index?qid=20090822191824AArEhO6 1/1 3/2 7/5 17/12 41/29,? 1., 1.500000000, 1.400000000, 1.416666667, 1.413793103,? It's related to continued fractions of sqrt(2). See OEIS sequence https://oeis.org/A000129 """ Also denominators of continued fraction convergents to sqrt(2): 1, 3/2, 7/5, 17/12, 41/29, 99/70, 239/169, 577/408, 1393/985, 3363/2378, 8119/5741, 19601/13860, 47321/33461, 114243/80782, """ The next value should be 99/70 = 1.41428571428571428571 * With approx 0.1 if finds a couple of constants, including 99/70: [program = 59 / 40,res = 1.475,count = 9] [program = 10 / 7,res = 1.428571428571429,count = 9] [program = 73 / 47 - A / 16,res = 1.464829420396185,count = 8] [program = 40 / 27,res = 1.481481481481481,count = 7] [program = 99 / 70,res = 1.414285714285714,count = 6] [program = 71 / 48,res = 1.479166666666667,count = 6] [program = 78 / (54 + A),res = 1.407591785936528,count = 5] [program = 49 / 33,res = 1.484848484848485,count = 5] [program = 76 / (99 * 14 / 26),res = 1.425685425685426,count = 3] [program = 64 / (45 - A),res = 1.468354430379747,count = 3] [program = 98 / 68,res = 1.441176470588235,count = 2] [program = 96 / 65,res = 1.476923076923077,count = 2] [program = (A + 80) / (54 + A),res = 1.469197261978842,count = 1] [program = 94 / (65 + A),res = 1.415368639667705,count = 1] [program = 80 / 56,res = 1.428571428571429,count = 1] resultMap = [1.428571428571429 = 2,1.484848484848485 = 1,1.481481481481481 = 1,1.479166666666667 = 1,1.476923076923077 = 1,1.475 = 1,1.469197261978842 = 1,1.468354430379747 = 1,1.464829420396185 = 1,1.441176470588235 = 1,1.425685425685426 = 1,1.415368639667705 = 1,1.414285714285714 = 1,1.407591785936528 = 1] * Approx 0.01 [program = (2 + A) / (A / A + A),res = 1.414285714285714,count = 1] [program = (A + 2) / (1 + A),res = 1.414285714285714,count = 8] However, if we add sqrt as an allowed function, it's easier (but probably considered cheating): [program = sqrt(82) / (A + 5),res = 1.411861123688092,count = 1] [program = (sqrt(A) + sqrt(35)) / (sqrt(13) + A),res = 1.415545451236626,count = 1] [program = sqrt(5 - A) * (A * 41 / (55 * A)),res = 1.411688373486107,count = 1] [program = (A + A + sqrt(A)) / (A + A),res = 1.420510723160162,count = 1] But it has hard time finding sqrt(2)=1.414213562373095, and that because the error is larger than 0.01, it's 0.1! If we add sqrt(2) as a constant: % Found the solution sqrt(2) immediate, but too large difference gen = 1 (time: 0.104s) results_best = [[0.1,sqrt(2),check = 1.414213562373095]] ... AllGood: [program = (sqrt(A) + (A + A)) / (A + A), res = 1.42051072316016236, count = 3] resultMap = [1.42051072316016236 = 1] * With approx 0.1 with sqrt/1 and sqrt(2) as constant: AllGood: [program = sqrt(2), res = 1.41421356237309515, count = 10] [program = 1.41421 - (A - 6) / 64, res = 1.48587304513171592, count = 9] [program = sqrt(3 - A / A), res = 1.41421356237309515, count = 9] [program = sqrt(85 / 41), res = 1.43985094079467735, count = 8] [program = 56 / (30 + 8), res = 1.47368421052631571, count = 6] [program = 26 / (A - (17 - 33)), res = 1.49306930693069284, count = 5] [program = A * 54 / A / (35 + A), res = 1.48295454545454541, count = 4] [program = 60 / 41, res = 1.46341463414634143, count = 4] [program = 59 / 42, res = 1.40476190476190466, count = 4] [program = 12 / sqrt(71), res = 1.42413798983262385, count = 3] [program = sqrt(61 / 31), res = 1.40276225194573545, count = 3] [program = 68 / 48, res = 1.41666666666666674, count = 2] [program = 60 / 42, res = 1.42857142857142860, count = 2] [program = 82 / 56, res = 1.46428571428571419, count = 1] [program = 78 / 53, res = 1.47169811320754707, count = 1] [program = 77 / (A * 54 / A), res = 1.42592592592592582, count = 1] [program = 96 / 66 - A / 75, res = 1.43569487983281086, count = 1] [program = (1.41421 / A + (A - A)) * A, res = 1.41421356237309537, count = 1] [program = sqrt(7) * (50 / 90), res = 1.46986183948032822, count = 1] resultMap = [1.41421356237309515 = 2,1.49306930693069284 = 1,1.48587304513171592 = 1,1.48295454545454541 = 1,1.47368421052631571 = 1,1.47169811320754707 = 1,1.46986183948032822 = 1,1.46428571428571419 = 1,1.46341463414634143 = 1,1.43985094079467735 = 1,1.43569487983281086 = 1,1.42857142857142860 = 1,1.42592592592592582 = 1,1.42413798983262385 = 1,1.41666666666666674 = 1,1.41421356237309537 = 1,1.40476190476190466 = 1,1.40276225194573545 = 1] * And just for fun, using force_constants to force a solution with Pi and E (approx 0.1): AllGood: [program = 3.14159 - sqrt(2.71828), res = 1.49287138288966492, count = 1] resultMap = [1.49287138288966492 = 1] AllGood: [program = 3.14159 / 2.71828 * sqrt(sqrt(2.71828)), res = 1.48398329189270739, count = 1] resultMap = [1.48398329189270739 = 1] */ data(sequence_5,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- make_seq([1/1, 3/2, 7/5, 17/12, 41/29],1,Data,Unknown,Vars), Ops = [+,-,*,/], % Ops = [+,-,*,/,sqrt], % Ops = [sqrt], Constants = 1..100, % Constants = [sqrt(2), math.pi,math.e]++1..100, MaxSize = 5, Params = new_map([init_size=1000, approx=0.01 % approx=0.1 % , force_constants=[math.pi,math.e] ]).