📅  最后修改于: 2023-12-03 15:09:18.618000             🧑  作者: Mango
在这个题目中,我们运用了一些特殊的符号来表示人之间的关系。让我们来看一下这些符号的含义:
在这个题目中,我们需要解析表达式“Z * T - S * U -P”并找出 U 到 Z 的关系。这个问题似乎很难,但是如果我们把表达式转化成正常的语言表达,就会变得简单。让我们来将这个表达式转化一下吧!
Z * T - S * U - P
首先,我们可以将 * 和 - 符号后面的名字相连,然后用以上三个符号中的一个来表示他们之间的关系。这样一来,表达式就变成了以下这个样子:
现在我们已经将表达式转化成了正常的语言表达,我们可以很轻松地找到 U 到 Z 的关系了。我们只需要按照以下步骤来得出答案:
现在我们已经得出了答案,让我们将它回归到代码中吧!
const expression = "Z * T - S * U - P";
const relationship = {
"+": "daughter",
"*": "son",
"": "wife"
}
const parseExpression = (expression) => {
const relationships = expression.split(" ").map(rel => {
const name1 = rel.charAt(0)
const name2 = rel.charAt(rel.length - 1)
const symbol = rel.slice(1, -1)
return { name1, name2, symbol }
})
return relationships
}
const findRelationship = (relationships, name) => {
return relationships.reduce((relationship, rel) => {
if (rel.name1 === name) {
relationship.push({ name: rel.name2, type: relationship[0].type + "-" + relationship[0].symbol + "-" + relationship[1].type })
} else if (rel.name2 === name) {
relationship.push({ name: rel.name1, type: relationship[1].type + "-" + relationship[0].symbol + "-" + relationship[0].type })
}
return relationship
}, [{ name, type: "" }, { name, type: "" }])
}
const getRelationship = (expression, name1, name2) => {
const relationships = parseExpression(expression)
const name1Relationship = findRelationship(relationships, name1)
const name2Relationship = findRelationship(relationships, name2)
const commonRel = name1Relationship.filter(rel1 => {
return name2Relationship.find(rel2 => rel1.name === rel2.name)
})[0].type
return commonRel.split("-").filter(rel => rel !== "").join(" - ")
}
console.log(getRelationship(expression, "U", "Z")) // U - P - T - Z
在这段代码中,我们首先定义了一个 expression
变量,它是需要解析的表达式。然后定义了一个 relationship
对象,它将每个符号映射到它们代表的关系。接下来,我们定义了三个函数:
parseExpression
将表达式解析为一个包含两个人名和符号的数组。findRelationship
根据两个人名在关系中找到他们之间的关系。getRelationship
根据两个人名和表达式找到他们之间的关系。在这个程序中,我们首先调用 parseExpression
函数得到一个包含两个人名和符号的数组。然后,我们调用 findRelationship
函数得到两个人名在关系中所代表的关系。最后,我们调用 getRelationship
函数得到两个人名之间的关系。
在 getRelationship
函数中,我们首先使用 findRelationship
函数来得到两个人名在关系中所代表的关系。然后,我们过滤掉两个人名之间没有共同朋友的那些关系。这样一来,我们就得到了两个人名之间的共同朋友以及他们之间的关系。最后,我们将他们之间的关系合并成一条字符串并返回它。
以上就是本题的解析过程和代码实现。希望对你有所帮助!