/* From Muhammad Zain Sarwar "People With an IQ of 140+ Can Solve This Missing Tile Puzzle!" https://medium.com/puzzle-sphere/people-with-an-iq-of-140-can-solve-this-missing-tile-puzzle-c42c1787ac7f """ [Cirles are endcoded as filles rings: Inter ring: 1 Middle ring: 2 Outer ring: 3 ] Ring 2 Ring 1 Ring 3 Ring 3 Ring 1 and 2 Ring 1 Ring 2 and 3 ??? Which is the missing tile? A: Ring 1 and 3 B: C: Ring 1 D: Ring 2 E: Ring 1, 2, and 3 """ This can be solved in some different ways. We use rows as example, but columns works as well. - Pure graphic (row based) The third ring is what's left after adding the two first rings. Answer: The 9'th ring is then What is left after ring 1 + ring 2 + ring 3? Answer: Nothing - Using binary encoding Ring 1: 1 Ring 2: 2 Ring 3: 4 010 001 100 100 000 011 001 110 _000_ Corresponding to the decimal values 2 1 4 4 0 3 1 6 ? The rule is then C = 7 - A + B Or in boolean form: 7 ^ (A \/ B) ( 7 xor (A or B)) 7 ^ (A ^ B) ( 7 xor (A xor B)) Let's code this using decimals. Using arithmetic: AllGood: [program = 7 - (B + A), res = 0, count = 85] [program = 7 - (A + B), res = 0, count = 82] [program = 10 - A - (3 + B), res = 0, count = 64] [program = 7 - A - B * 1, res = 0, count = 47] [program = 7 - B - A, res = 0, count = 44] [program = 7 - A - B, res = 0, count = 41] resultMap = [0 = 6] Using boolean AllGood: [program = 7 ^ (A ^ B), res = 0, count = 88] [program = 7 ^ (A \/ B), res = 0, count = 80] [program = A ^ (B ^ 7), res = 0, count = 74] [program = A /\ 6 ^ (B ^ 7), res = 1, count = 70] [program = B ^ (A ^ 7), res = 0, count = 68] [program = ~ B /\ (A ^ 7), res = 0, count = 68] [program = 7 ^ (B \/ A), res = 0, count = 65] [program = B ^ (7 ^ A), res = 0, count = 62] [program = (7 ^ A) /\ (B ^ 7), res = 0, count = 48] [program = (A \/ B) ^ 7, res = 0, count = 47] [program = 7 ^ (B ^ A), res = 0, count = 41] [program = 7 ^ A ^ B, res = 0, count = 32] [program = (B \/ A) ^ 7, res = 0, count = 29] [program = A ^ 7 ^ B, res = 0, count = 21] [program = B ^ 7 ^ A, res = 0, count = 17] [program = (5 \/ 3) ^ (A \/ B), res = 0, count = 6] [program = A ^ B ^ 7, res = 0, count = 5] [program = B ^ A ^ 7, res = 0, count = 2] [program = B ^ 7 ^ A /\ 6, res = 1, count = 1] [program = A ^ B ^ (5 \/ 3), res = 0, count = 1] [program = A ^ 7 ^ B /\ 5, res = 2, count = 1] [program = 7 ^ B ^ A, res = 0, count = 1] [program = (A \/ B) ^ (7 \/ 3), res = 0, count = 1] [program = (6 \/ B) ^ (1 \/ A), res = 7, count = 1] [program = (5 \/ 3) ^ (B \/ A), res = 0, count = 1] resultMap = [0 = 21,1 = 2,7 = 1,2 = 1] * Using == and +: AllGood: [program = B + 3 + (A == 10), res = 9, count = 75] [program = B + 3 + (10 == A), res = 9, count = 24] [program = (A == 10) + (B + 3), res = 9, count = 16] resultMap = [9 = 3] */ data(missing_tile1_rows,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Data = [ [[2,1],4], [[4,0],3] ], Unknown = [1,6], Vars = ['A','B'], Ops = [+,-,*], % arithmetic % Ops = [/\,\/,^,~], % boolea % Ops = [+,==], Constants = 1..10, MaxSize = 1, Params = new_map([init_size=1000, unique_vars_all=true, num_gens=100 ]). /* What about the columns? Using arithmetic: AllGood: [program = 7 - (B + A), res = 0, count = 86] [program = 7 - (A + B), res = 0, count = 86] [program = 3 + 4 - (A + B), res = 0, count = 83] [program = 7 - B - A, res = 0, count = 56] [program = 7 - A - B, res = 0, count = 28] [program = 3 + 4 - (B + A), res = 0, count = 9] resultMap = [0 = 6] Using boolean AllGood: [program = B ^ (A ^ 7), res = 0, count = 90] [program = 7 ^ (B ^ A), res = 0, count = 88] [program = 7 ^ (B \/ A), res = 0, count = 86] [program = (7 ^ B) /\ (A ^ 7), res = 0, count = 83] [program = ~ B /\ (A ^ 7), res = 0, count = 74] [program = A ^ (7 ^ B), res = 0, count = 72] [program = (A ^ 7) /\ ~ B, res = 0, count = 71] [program = (A ^ 7) /\ (7 ^ B), res = 0, count = 69] [program = B ^ (7 ^ A), res = 0, count = 58] [program = (B \/ A) ^ 7, res = 0, count = 45] [program = A ^ 7 ^ B, res = 0, count = 44] [program = B ^ A ^ 7, res = 0, count = 28] [program = ~ A /\ (7 ^ B), res = 0, count = 25] [program = 6 /\ B ^ (A ^ 7), res = 1, count = 24] [program = 7 ^ B ^ A, res = 0, count = 22] [program = 7 ^ A ^ B, res = 0, count = 14] [program = 7 ^ (A ^ B), res = 0, count = 12] [program = A ^ (B ^ 7), res = 0, count = 7] [program = B ^ 7 ^ A, res = 0, count = 2] [program = A ^ B ^ 7, res = 0, count = 2] [program = 7 ^ A ^ B /\ 6, res = 1, count = 1] [program = (A \/ B) ^ 7, res = 0, count = 1] [program = 7 /\ B ^ (7 ^ A), res = 0, count = 1] resultMap = [0 = 21,1 = 2] */ /* data(missing_tile1_columns,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Data = [ [[2,4],1], [[1,0],6] ], Unknown = [4,3], Vars = ['A','B'], % Ops = [+,-,*], % arithmetic Ops = [/\,\/,^,~], % boolean Constants = 1..10, MaxSize = 1, Params = new_map([init_size=1000, unique_vars_all=true, num_gens=100 ]). */