gpt4 book ai didi

boolean - 如何在不进行类型转换的情况下确定“确切”一个 boolean 值是否为真?

转载 作者:行者123 更新时间:2023-12-02 06:30:48 27 4
gpt4 key购买 nike

给定一个任意的 boolean 值列表,确定其中一个恰好为真的最优雅的方法是什么?

最明显的 hack 是类型转换:将 false 转换为 0,将 true 转换为 1,然后对它们求和,并返回 sum == 1

我想知道是否有一种方法可以将它们转换为整数,实际上使用 boolean 逻辑

(这看起来应该是微不足道的,我不知道,漫长的一周)

编辑:如果不是很明显,这更像是一个代码高尔夫/理论问题。我并不担心在 PROD 代码中使用类型转换/int 加法,我只是感兴趣是否有没有方法可以做到这一点。

编辑2:抱歉,大家这是漫长的一周,我没有很好地解释自己。让我试试这个:

在 boolean 逻辑中,如果所有 boolean 值都为真,则对 boolean 值集合进行“与”运算为真;如果至少有一个 boolean 值为真,则对集合进行“或”运算为真。如果只有一个 boolean 值为真,是否存在一种逻辑结构为真?例如,XOR 是两个 boolean 值的集合,但超过这个值就会失败。

最佳答案

您实际上可以仅使用 boolean 逻辑来完成此任务,尽管在您的示例中可能没有实际值(value)。 boolean 版本比简单地计算真值的数量要复杂得多。

无论如何,为了满足求知欲,就到这里吧。首先,使用一系列异或的想法很好,但它只成功了一半。对于任意两个变量xy

xy

只要其中一个为真,

就为真。但是,如果您添加第三个变量z,则情况不再如此,

xyz

如果 xy 中的一个恰好为,则第一部分 xy 仍然为真真的。如果 xy 为 true,则 z 需要为 false 才能使整个表达式为 true,这就是我们想要的。但请考虑如果xy 都为真会发生什么。那么 xy 为假,但如果 z 也为真,则整个表达式可以变为真。因此,其中一个变量或所有三个变量必须为真。一般来说,如果您有一个 XOR 链的语句,则如果奇数个变量为真,则该语句为真。

由于 1 是奇数,因此这可能很有用。当然,仅检查奇数个事实是不够的。我们还需要确保不超过一个变量为真。这可以通过获取所有两个变量对并检查它们是否都为真来以成对的方式完成。将这两个条件放在一起可确保变量为真时恰好为 1。

下面是一个小的 Python 脚本来说明该方法。

from itertools import product

print("x|y|z|only_one_is_true")
print("======================")
for x, y, z in product([True, False], repeat=3):
uneven_number_is_true = x ^ y ^ z
max_one_is_true = (not (x and y)) and (not (x and z)) and (not (y and z))
only_one_is_true = uneven_number_is_true and max_one_is_true
print(int(x), int(y), int(z), only_one_is_true)

这是输出。

x|y|z|only_one_is_true======================1 1 1 False1 1 0 False1 0 1 False1 0 0 True0 1 1 False0 1 0 True0 0 1 True0 0 0 False

关于boolean - 如何在不进行类型转换的情况下确定“确切”一个 boolean 值是否为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14888174/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com