/* Muhammad Zain Sarwar: "People With an IQ of 140+ Can Find the Missing Number in the Circle!" https://medium.com/puzzle-sphere/people-with-an-iq-of-140-can-find-the-missing-number-in-the-circle-b4453d8d82cf """ 3 6 2 7 4 21 16 3 ? """ Manual solution: A B C This is done over the circles: Circle2(V) / Circle1(V) = Circle3(V) 6 / 3 = 2 21 / 7 = 3 16 / 4 = ? = 4 */ /* Let's first test the "local" version. AllGood: [program = 4 * (4 mod A), res = 0, count = 72] [program = 4 mod A * 4, res = 0, count = 39] [program = 10 mod A * 4, res = 0, count = 36] [program = 4 * (10 mod A), res = 0, count = 20] [program = 6 div A * (B - 5), res = -6, count = 12] resultMap = [0 = 4,-6 = 1] Simple arithmetic functions: AllGood: [program = 4 * (A - 2), res = 0, count = 934] [program = (A - 2) * 4, res = 0, count = 927] [program = (6 - 2) * (A - 2), res = 0, count = 816] [program = 1 * 4 * (A - 2), res = 0, count = 623] [program = (3 + 1) * (A - 2), res = 0, count = 601] [program = (2 + 2) * (A - 2), res = 0, count = 577] [program = (A - 2) * (1 * 4), res = 0, count = 558] [program = 2 * 2 * (A - 2), res = 0, count = 369] [program = (A - 2) * (6 - 2), res = 0, count = 365] [program = (A - 2) * (2 + 2), res = 0, count = 280] [program = (1 + 3) * (A - 2), res = 0, count = 205] [program = (A - 2) * (3 + 1), res = 0, count = 152] [program = (A - 2) * (2 * 2), res = 0, count = 131] [program = 4 * A - 8, res = 0, count = 130] [program = (9 - 5) * (A - 2), res = 0, count = 127] [program = (A - 2) * (1 + 3), res = 0, count = 20] [program = (A - 2) * (9 - 5), res = 0, count = 11] [program = A * 4 - 8, res = 0, count = 7] [program = B - 2 - B / 7, res = 0.57142857142857140, count = 2] [program = (A - 2) * (8 / 2), res = 0.00000000000000000, count = 1] resultMap = [0 = 18,0.57142857142857140 = 1,0.00000000000000000 = 1] Require that all variables are used (i.e. both A and B): results_best = [[0,(B - 5) * (6 / A),check = -6.000000000000000]] AllGood: [program = 6 / A * (B - 5), res = -6.00000000000000000, count = 1] resultMap = [-6.00000000000000000 = 1] This is: 4*A-8 results_best = [[0,A * 4 - (8 - (6 + 9) * (2 - 2) * (8 - B)),check = 0]] 4*3 - 8 = 12-8 = 4 4*6 - 8 = 24-8 = 16 3*2 - 3 = 6-3 = 3 */ /* data(missing_number10_local,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Data = [ [[3,7],4], [[6,21], 16] ], Unknown = [2,3], Vars = ['A','B'], Ops = [+,-,*], % Ops = [+,-,*,/], Constants = 1..10, % Constants = [], MaxSize = 1, Params = new_map([init_size=1000, % unique_vars_all=true, num_gens=1000 ]). */ /* Now with the intended (global) approach Most are alternative versions of B/A, but there are some variants: * 13: B / A * (B / A) + A - (A + (A - A / A)) Maple: 2 B ---- - A + 1 2 A * 1: A * (A - A / A) / (B - A) Maple: A (A - 1) --------- B - A * 1.75: (A * A + (B - A)) / B; 2 A - A + B ---------- B AllGood: [program = B / A, res = 4.00000000000000000, count = 6661] [program = A * (B / (A * A)), res = 4.00000000000000000, count = 872] [program = A * (B / (A * (A * B / B))), res = 4.00000000000000000, count = 362] [program = B * (A / (A * A)), res = 4.00000000000000000, count = 284] [program = A * (B / A / A), res = 4.00000000000000000, count = 268] [program = B * (A / A / A), res = 4.00000000000000000, count = 143] [program = B / (A * A) * A, res = 4.00000000000000000, count = 141] [program = B * (B / (A * B)), res = 4.00000000000000000, count = 119] [program = B / A * (A / A), res = 4.00000000000000000, count = 99] [program = A / A * (B / A), res = 4.00000000000000000, count = 97] [program = B * (B / B / A), res = 4.00000000000000000, count = 87] [program = B / A * (B / B), res = 4.00000000000000000, count = 86] [program = B / A / A * A, res = 4.00000000000000000, count = 66] [program = A / (A * A) * B, res = 4.00000000000000000, count = 64] [program = B / (A * (A * B / B)) * A, res = 4.00000000000000000, count = 61] [program = B * (B / (B * A)), res = 4.00000000000000000, count = 50] [program = B / B * (B / A), res = 4.00000000000000000, count = 42] [program = A / A / A * B, res = 4.00000000000000000, count = 40] [program = B / (B * A) * B, res = 4.00000000000000000, count = 34] [program = B / (A * B) * B, res = 4.00000000000000000, count = 34] [program = A * (B / (A / (A / A) * A)), res = 4.00000000000000000, count = 32] [program = A - A + B / A, res = 4.00000000000000000, count = 30] [program = B / B / (A / B), res = 4.00000000000000000, count = 29] [program = (B + B - B) / A, res = 4.00000000000000000, count = 27] [program = A + B / A - A, res = 4.00000000000000000, count = 25] [program = A + (B / A - A), res = 4.00000000000000000, count = 25] [program = A / (A / (A / B)) * B * (B / (A * A)), res = 4.00000000000000000, count = 25] [program = B / (A / (A / A)), res = 4.00000000000000000, count = 24] [program = B / A + (A - A), res = 4.00000000000000000, count = 23] [program = B / A - A + A, res = 4.00000000000000000, count = 23] [program = B * B / (A * B), res = 4.00000000000000000, count = 22] [program = B / (B + A - B), res = 4.00000000000000000, count = 22] [program = B / (A / (A / (A / B)) * B), res = 4.00000000000000000, count = 22] [program = (A - (A - B)) / A, res = 4.00000000000000000, count = 21] [program = B * (B / A) / B, res = 4.00000000000000000, count = 21] [program = B / A - (B - B), res = 4.00000000000000000, count = 21] [program = B / A + (B - B), res = 4.00000000000000000, count = 21] [program = B * B / (B * A), res = 4.00000000000000000, count = 20] [program = B / A / (B / B), res = 4.00000000000000000, count = 19] [program = B / (A - A + A), res = 4.00000000000000000, count = 19] [program = B / A / (A / A), res = 4.00000000000000000, count = 17] [program = (A + B - A) / A, res = 4.00000000000000000, count = 17] [program = (B - (B - A)) * (B / A / A), res = 4.00000000000000000, count = 17] [program = B * (B / A / B), res = 4.00000000000000000, count = 17] [program = B / (B / B) / A, res = 4.00000000000000000, count = 16] [program = A * B / (A * A), res = 4.00000000000000000, count = 16] [program = B / (B - (B - A)), res = 4.00000000000000000, count = 16] [program = (B + (B - B)) / A, res = 4.00000000000000000, count = 15] [program = (B + B) / (A + A), res = 4.00000000000000000, count = 15] [program = B / A * A / A, res = 4.00000000000000000, count = 15] [program = B * A / (A * A), res = 4.00000000000000000, count = 15] [program = B / A - (A - A), res = 4.00000000000000000, count = 15] [program = B / A * A * (A / (A * A)), res = 4.00000000000000000, count = 15] [program = B * (A / A) / A, res = 4.00000000000000000, count = 14] [program = B * B / B / A, res = 4.00000000000000000, count = 13] [program = A / A / (A / B), res = 4.00000000000000000, count = 13] [program = B / (A * B / B), res = 4.00000000000000000, count = 13] [program = B / (B - B + A), res = 4.00000000000000000, count = 13] [program = A / A * B / A, res = 4.00000000000000000, count = 12] [program = B / ((A - A) * A + A), res = 4.00000000000000000, count = 12] [program = B / (A / A * A), res = 4.00000000000000000, count = 12] [program = B / (A * (B / B)), res = 4.00000000000000000, count = 12] [program = B - B + B / A, res = 4.00000000000000000, count = 12] [program = B / (A / (B / B)), res = 4.00000000000000000, count = 11] [program = (B + A * B) / A - B, res = 4.00000000000000000, count = 11] [program = B / B / A * B, res = 4.00000000000000000, count = 11] [program = B / A * B / B, res = 4.00000000000000000, count = 10] [program = A / (A / B) / A, res = 4.00000000000000000, count = 9] [program = B / (A + A - A), res = 4.00000000000000000, count = 9] [program = B / (A - (B - B)), res = 4.00000000000000000, count = 9] [program = A / (A / (B / A)), res = 4.00000000000000000, count = 9] [program = B / A + A - A, res = 4.00000000000000000, count = 9] [program = B * B / A / B, res = 4.00000000000000000, count = 8] [program = B / (A * (A / A)), res = 4.00000000000000000, count = 8] [program = B + B / A - B, res = 4.00000000000000000, count = 8] [program = B * A / A / A, res = 4.00000000000000000, count = 7] [program = B / (A / A) / A, res = 4.00000000000000000, count = 7] [program = (B - (A - A)) / A, res = 4.00000000000000000, count = 7] [program = (A - A + B) / A, res = 4.00000000000000000, count = 7] [program = B / (B * A / B), res = 4.00000000000000000, count = 7] [program = B / (A * A / A), res = 4.00000000000000000, count = 7] [program = B / (A + B - B), res = 4.00000000000000000, count = 7] [program = B / (A - (A - A)), res = 4.00000000000000000, count = 7] [program = B + (B / A - B), res = 4.00000000000000000, count = 7] [program = B / A / B * B, res = 4.00000000000000000, count = 7] [program = B / (B / (B / A)), res = 4.00000000000000000, count = 6] [program = B / (B / B * A), res = 4.00000000000000000, count = 6] [program = B / (A / (A / A) * A) * A, res = 4.00000000000000000, count = 6] [program = (B - B + B) / A, res = 4.00000000000000000, count = 5] [program = (B + (A - A)) / A, res = 4.00000000000000000, count = 5] [program = B * (B / B) / A, res = 4.00000000000000000, count = 5] [program = B / (A + (A * B - A * B)), res = 4.00000000000000000, count = 5] [program = B / (A / B * B), res = 4.00000000000000000, count = 5] [program = B / (A / B) / B, res = 4.00000000000000000, count = 4] [program = A * (B / A) / A, res = 4.00000000000000000, count = 4] [program = A + (B / A - A) - (A - A), res = 4.00000000000000000, count = 4] [program = B - (B - B / A), res = 4.00000000000000000, count = 4] [program = B / A + (B - B) * B, res = 4.00000000000000000, count = 4] [program = B / A - B + B, res = 4.00000000000000000, count = 4] [program = A / A * B * (B / (A * B)), res = 4.00000000000000000, count = 4] [program = (B + A * A / A - A) / A, res = 4.00000000000000000, count = 3] [program = A * B / (B / (B / (A * A))), res = 4.00000000000000000, count = 3] [program = B / (A + (B - B)), res = 4.00000000000000000, count = 3] [program = B / (A + (A - A)), res = 4.00000000000000000, count = 3] [program = A / (A * A / B), res = 4.00000000000000000, count = 3] [program = (B + B * A) / A - B, res = 4.00000000000000000, count = 3] [program = B / A + B - B, res = 4.00000000000000000, count = 3] [program = B / (A * A) * (B * A / B), res = 4.00000000000000000, count = 3] [program = (B - (B - A)) * (B / (A * A)), res = 4.00000000000000000, count = 3] [program = (B + B) / B / ((A + A) / B), res = 4.00000000000000000, count = 2] [program = B * (B - A + A) / B / A, res = 4.00000000000000000, count = 2] [program = B / B / (A / (B - (A - A))), res = 4.00000000000000000, count = 2] [program = (B - B - B * (A / (B - (A + B)))) / A, res = 4.00000000000000000, count = 2] [program = (B / B + A - A) / (A / B), res = 4.00000000000000000, count = 2] [program = (B + A - A) / A, res = 4.00000000000000000, count = 2] [program = (B - (B - B) * B) / A, res = 4.00000000000000000, count = 2] [program = ((B - B) / A + B) / A, res = 4.00000000000000000, count = 2] [program = B / (A / B) / B * B / B, res = 4.00000000000000000, count = 2] [program = A / A * (B / (B / B)) / A, res = 4.00000000000000000, count = 2] [program = B / (A - (B - B) / B), res = 4.00000000000000000, count = 2] [program = B / ((B - B) / A + A), res = 4.00000000000000000, count = 2] [program = B / (B + (A - B)), res = 4.00000000000000000, count = 2] [program = B / (A + (B - B) * B), res = 4.00000000000000000, count = 2] [program = B / (B * (A / B)), res = 4.00000000000000000, count = 2] [program = (A * B + B) / A - B, res = 4.00000000000000000, count = 2] [program = B / B - (A - B) / A, res = 4.00000000000000000, count = 2] [program = B / A - (B - B) * B, res = 4.00000000000000000, count = 2] [program = (B - A) / A + B / B, res = 4.00000000000000000, count = 2] [program = B / A + B * (A - A), res = 4.00000000000000000, count = 2] [program = B / A + A * (B - B), res = 4.00000000000000000, count = 2] [program = B * (A - A) + B / A, res = 4.00000000000000000, count = 2] [program = B / (A * (A * B / B)) * (B * (A / B)), res = 4.00000000000000000, count = 2] [program = B / (A * A) * (A / (B / B)), res = 4.00000000000000000, count = 2] [program = B / (A * A) * (A / (A / A)), res = 4.00000000000000000, count = 2] [program = A / (A / B) * (A / A / A), res = 4.00000000000000000, count = 2] [program = (A - (A - B)) * (B / B / A), res = 4.00000000000000000, count = 2] [program = (A - A + A / A) * (B / A), res = 4.00000000000000000, count = 2] [program = ((B - B) * B + B) * (B / (B * A)), res = 4.00000000000000000, count = 2] [program = (A + (A / A - B / B)) * (B / (A * (A * B / B))), res = 4.00000000000000000, count = 2] [program = A * (B / B) * (B / (A * A)), res = 4.00000000000000000, count = 2] [program = B * A / A / A / (A / A), res = 4.00000000000000000, count = 1] [program = B / A / A / (A / (A * A)), res = 4.00000000000000000, count = 1] [program = A / A / A / (B / B / B), res = 4.00000000000000000, count = 1] [program = (B * B + (A - A)) / A / B, res = 4.00000000000000000, count = 1] [program = B / A * B / B / (B / B), res = 4.00000000000000000, count = 1] [program = B / A * B / B / (A / A), res = 4.00000000000000000, count = 1] [program = B * B / B / ((A - A) * A + A), res = 4.00000000000000000, count = 1] [program = B / (A - B) / (A / (A - B)), res = 4.00000000000000000, count = 1] [program = B / (A * (A * B / B)) / (B / B / A), res = 4.00000000000000000, count = 1] [program = B / (A * (A * B / B)) / (B / (A * B)), res = 4.00000000000000000, count = 1] [program = B / (A * B) / (B / (B * B)), res = 4.00000000000000000, count = 1] [program = B / B / (A / (B + (A - A))), res = 4.00000000000000000, count = 1] [program = B / A / (B / B + A - A), res = 4.00000000000000000, count = 1] [program = (B / A - (B - B)) / (B / B), res = 4.00000000000000000, count = 1] [program = (B - B + A + B - A) / A, res = 4.00000000000000000, count = 1] [program = (A + B + B - A) / (A + A), res = 4.00000000000000000, count = 1] [program = (B + B - B) / (A / A * A), res = 4.00000000000000000, count = 1] [program = (B - B * (A / B) + A) / A, res = 4.00000000000000000, count = 1] [program = (B - A + A) / A, res = 4.00000000000000000, count = 1] [program = (A - A + A / A) / (A / B), res = 4.00000000000000000, count = 1] [program = (B * ((A - A) / B) + B) / (B + A - B), res = 4.00000000000000000, count = 1] [program = (B * ((A - A) / B) + B) / A, res = 4.00000000000000000, count = 1] [program = (A * A + (B - A)) / B, res = 1.75000000000000000, count = 1] [program = (B + (B - B)) / (A / (A / A)), res = 4.00000000000000000, count = 1] [program = (B + (A - A)) / (A - (A - A)), res = 4.00000000000000000, count = 1] [program = (B + A) / (A + A * A / B), res = 4.00000000000000000, count = 1] [program = (A + (B * B - A)) / (B * A), res = 4.00000000000000000, count = 1] [program = (A + (B - A)) / A, res = 4.00000000000000000, count = 1] [program = (A + B) / (A + A / (B / A)), res = 4.00000000000000000, count = 1] [program = B / B / B * (B * B) / A, res = 4.00000000000000000, count = 1] [program = B / B * B / A, res = 4.00000000000000000, count = 1] [program = A / (A / (B / B)) * B / A, res = 4.00000000000000000, count = 1] [program = (A + B) * B / ((B + A) * A), res = 4.00000000000000000, count = 1] [program = B * (A / A) / (B + A - B), res = 4.00000000000000000, count = 1] [program = B * (B * B) / (A * (B * B)), res = 4.00000000000000000, count = 1] [program = B * B / (A / (B / B) * B), res = 4.00000000000000000, count = 1] [program = B * A / (A / (A / A) * A), res = 4.00000000000000000, count = 1] [program = A * (B / B) / (A * A / B), res = 4.00000000000000000, count = 1] [program = A * (A - A / A) / (B - A), res = 1.00000000000000000, count = 1] [program = B / (A / (B / A / B * A)), res = 4.00000000000000000, count = 1] [program = B / (A - B + B), res = 4.00000000000000000, count = 1] [program = B / (B * B + (A - B * B)), res = 4.00000000000000000, count = 1] [program = (A + B + A - A) / A - A / A, res = 4.00000000000000000, count = 1] [program = (A * B + B) / A - A / (A / B), res = 4.00000000000000000, count = 1] [program = (B + A) / A - A / A, res = 4.00000000000000000, count = 1] [program = (B + A) / A * A / A - B / B, res = 4.00000000000000000, count = 1] [program = B / A * B / B - (A - A), res = 4.00000000000000000, count = 1] [program = B / A - (B - B) / (B - B + A), res = 4.00000000000000000, count = 1] [program = B / A - (A - A) / B, res = 4.00000000000000000, count = 1] [program = B / A - (B - B) * A, res = 4.00000000000000000, count = 1] [program = B / A - (A - A) * B, res = 4.00000000000000000, count = 1] [program = B / A - A * (B - B), res = 4.00000000000000000, count = 1] [program = A / A - (A - B) / A, res = 4.00000000000000000, count = 1] [program = B / A * (B / A) + A - (A + (A - A / A)), res = 13.00000000000000000, count = 1] [program = B - (B - B / A + (B - B) * B), res = 4.00000000000000000, count = 1] [program = (B - B) / (B - B + A) + B / A, res = 4.00000000000000000, count = 1] [program = (B - B) / B + B / A, res = 4.00000000000000000, count = 1] [program = (B - A) / A + A / A, res = 4.00000000000000000, count = 1] [program = B / (A + B + A - (A + B)) + (A - A), res = 4.00000000000000000, count = 1] [program = B / B + (B - A) / A, res = 4.00000000000000000, count = 1] [program = B / A + (A - A) / B, res = 4.00000000000000000, count = 1] [program = B / A + (A - A) / A, res = 4.00000000000000000, count = 1] [program = A / (B / B) + (B / A - A), res = 4.00000000000000000, count = 1] [program = A / A + (B - A) / A, res = 4.00000000000000000, count = 1] [program = B / A - A + A / (B / B), res = 4.00000000000000000, count = 1] [program = B / A - A + A / (B / A / B * A), res = 4.00000000000000000, count = 1] [program = B / A - A + (B - (B - A)), res = 4.00000000000000000, count = 1] [program = B - (A - B) / A + (B / B - B), res = 4.00000000000000000, count = 1] [program = B - B + B / A * B / B, res = 4.00000000000000000, count = 1] [program = (B - B) * B + B / A, res = 4.00000000000000000, count = 1] [program = B * (A - A) + B / A * B / B, res = 4.00000000000000000, count = 1] [program = B / B / A * (B + A * A / A - A), res = 4.00000000000000000, count = 1] [program = A / A / A * (A / A * B), res = 4.00000000000000000, count = 1] [program = (B + A - A) / B * (B / A), res = 4.00000000000000000, count = 1] [program = B * A / B * (B / (A * A)), res = 4.00000000000000000, count = 1] [program = A * B / B * (B / (A * A)), res = 4.00000000000000000, count = 1] [program = B / (B / A) * (B / (A * A)), res = 4.00000000000000000, count = 1] [program = B / (A / A) * (A / A / A), res = 4.00000000000000000, count = 1] [program = B / (A + B + A - (A + B)) * (B / B), res = 4.00000000000000000, count = 1] [program = B / (B * A) * (B * A / A), res = 4.00000000000000000, count = 1] [program = B / (B * A) * ((B - B) * B + B), res = 4.00000000000000000, count = 1] [program = B / (B * A) * (B + (B - B)), res = 4.00000000000000000, count = 1] [program = B / (A * (A * B / B)) * (B + (A - B)), res = 4.00000000000000000, count = 1] [program = B / (A * B) * (B + B - B), res = 4.00000000000000000, count = 1] [program = B / (A * B) * (B / A * A), res = 4.00000000000000000, count = 1] [program = B / (A * A) * (A + A - A), res = 4.00000000000000000, count = 1] [program = B / (A * A) * (B - B + A), res = 4.00000000000000000, count = 1] [program = B / (A * A) * (A / (A / (A / B)) * B), res = 4.00000000000000000, count = 1] [program = B / A * (B / (B / A) / A), res = 4.00000000000000000, count = 1] [program = A / (A / B) * (A / (A * A)), res = 4.00000000000000000, count = 1] [program = A / (A * B) * (B * (B / A)), res = 4.00000000000000000, count = 1] [program = A / B * ((B - A) / A + A), res = 1.75000000000000000, count = 1] [program = (B + A * A / A - A) * (B / B / A), res = 4.00000000000000000, count = 1] [program = (B + A - B) * (B / A / A), res = 4.00000000000000000, count = 1] [program = (A + A - A) * (B / (A * A)), res = 4.00000000000000000, count = 1] [program = (A - (A - B)) * (B / A / B), res = 4.00000000000000000, count = 1] [program = (A - (A - B)) * (A / (A * A)), res = 4.00000000000000000, count = 1] [program = (A - A + A) * (B / A / A), res = 4.00000000000000000, count = 1] [program = (B + (B - B)) * (B / (A * B)), res = 4.00000000000000000, count = 1] [program = (A + (A - A)) * (B / (A * A)), res = 4.00000000000000000, count = 1] [program = B / B * A * (B / (A * (A * B / B))), res = 4.00000000000000000, count = 1] [program = A / A * B * (B / B / A), res = 4.00000000000000000, count = 1] [program = A * (B / B) * (B / A / A), res = 4.00000000000000000, count = 1] [program = A * (B / B) * (B / (A * (A * B / B))), res = 4.00000000000000000, count = 1] resultMap = [4.00000000000000000 = 240,1.75000000000000000 = 2,13.00000000000000000 = 1,1.00000000000000000 = 1] */ data(missing_number10_global,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Data = [ [[3,6],2], [[7,21], 3] ], Unknown = [4,16], Vars = ['A','B'], % Ops = [+,-,*,digit_sum], Ops = [+,-,*,/,pow2,pow3,pow4], % Constants = 1..10, Constants = [], MaxSize = 41, Params = new_map([init_size=1000, % unique_vars_all=true, num_gens=1000 ]). /* Alternative: If we number the circles as 0, 1, and 2 AllGood: [program = A - B + C, res = 3, count = 95] [program = C + (A - B), res = 3, count = 90] resultMap = [3 = 2] If we number the circles as 1, 2, and 3: AllGood: [program = A - 1 + (C - B), res = 3, count = 1] resultMap = [3 = 1] */ /* data(missing_number10_2,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- % Data = [[[0,3,7],4], % [[1,6,21], 16] % ], % Unknown = [2,2,3], Data = [ [[1,3,7],4], [[2,6,21], 16] ], Unknown = [3,2,3], Vars = ['A','B','C'], % Ops = [+,-,*,digit_sum,mod,div], Ops = [+,-,*,/], Constants = 1..10, MaxSize = 1, Params = new_map([init_size=100, unique_vars_all=true, num_gens=100 ]). */