{"ScriptPreparationCode":null,"TestCases":[{"Name":"reduce","Code":"let inputData = [\r\n [1, 3],\r\n [2, 3],\r\n [3, 6],\r\n [5, 6],\r\n [5, 7],\r\n [4, 5],\r\n [4, 8],\r\n [4, 9],\r\n [9, 11],\r\n [14, 4],\r\n [13, 12],\r\n [12, 9],\r\n];\r\nconst store = new Map();\r\nlet a = 3;\r\nlet b= 8;\r\nconst getParents = (unit) =\u003E {\r\n return inputData.reduce((sum, [parent, child]) =\u003E {\r\n if (unit === child) {\r\n sum.add(parent);\r\n }\r\n\r\n return sum;\r\n }, new Set());\r\n };\r\n\r\n const reduceParents = (parents1, unit = b) =\u003E {\r\n const isFam = store.get([...parents1, unit].join());\r\n\r\n if (typeof isFam === \u0027boolean\u0027) {\r\n return isFam;\r\n }\r\n\r\n const parents = getParents(unit);\r\n\r\n const result = parents?.size\r\n ? [...parents1].some((parent) =\u003E parents.has(parent)) ||\r\n [...parents].some((parent) =\u003E reduceParents(parents1, parent))\r\n : false;\r\n\r\n store.set([...parents1, unit].join(), result);\r\n\r\n return result;\r\n };\r\n\r\n const isFam = (unit = a) =\u003E {\r\n const parents = getParents(unit);\r\n\r\n return parents?.size\r\n ? reduceParents(parents) || [...parents].some((parent) =\u003E isFam(parent))\r\n : false;\r\n };\r\n\r\n const result = isFam();\r\n\r\n return result;","IsDeferred":false},{"Name":"graph","Code":" let inputData = [\r\n [1, 3],\r\n [2, 3],\r\n [3, 6],\r\n [5, 6],\r\n [5, 7],\r\n [4, 5],\r\n [4, 8],\r\n [4, 9],\r\n [9, 11],\r\n [14, 4],\r\n [13, 12],\r\n [12, 9],\r\n];\r\nlet a = 3;\r\nlet b= 8;\r\nconst graph = {};\r\n\r\n inputData.forEach((pair) =\u003E {\r\n const [parent, child] = pair;\r\n\r\n if (!graph[child]) {\r\n graph[child] = [];\r\n }\r\n graph[child].push(parent);\r\n });\r\n\r\n // Function for finding ancestors\r\n function findAncestors(node, ancestors) {\r\n if (graph[node]) {\r\n graph[node].forEach((parent) =\u003E {\r\n ancestors.push(parent);\r\n findAncestors(parent, ancestors);\r\n });\r\n }\r\n }\r\n\r\n // Find ancestors for both individuals\r\n const ancestorsA = [];\r\n const ancestorsB = [];\r\n\r\n findAncestors(a, ancestorsA);\r\n findAncestors(b, ancestorsB);\r\n\r\n // Check for common ancestors\r\n const commonAncestors = ancestorsA.filter((x) =\u003E ancestorsB.includes(x));\r\n\r\n return commonAncestors.length \u003E 0;","IsDeferred":false}]}