我有一个表达,假设,
a = 1 && (b = 1 || b != 0 ) && (c >= 35 || d != 5) && (c >= 38 || d = 6)
Run Code Online (Sandbox Code Playgroud)
我希望它减少到,
a = 1 && b != 0 && (c >= 38 || d = 6)
Run Code Online (Sandbox Code Playgroud)
有没有人有什么建议?指向任何算法的指针?
Nota Bene:我相信Karnaugh Map或Quine-McCluskey不是一个选择.由于这些方法不处理灰色案例.我的意思是,表达只能减少,就像A或A'或任何东西,或说黑色或白色或缺乏颜色.但是在这里,我有灰色阴影,正如大家们所看到的那样.
解决方案:我已经在Clojure中为此编写了程序.我使用了包含函数值的地图.这非常方便,只是几个组合的一些规则,你很好.谢谢你的有用答案.
language-agnostic boolean-expression constraint-programming reduction boolean-operations
比方说,如果我有一个DN字符串,就像这样:
OU=Karen,OU=Office,OU=admin,DC=corp,DC=Fabrikam,DC=COM
Run Code Online (Sandbox Code Playgroud)
如何使正则表达式只选择具有OU=Karen和OU=admin?的DN ?
在three.js中有一个功能triangulateShape().现在我遇到了使用Javascript Clipper简化三角形多边形的失败.Clipper中的简化是使用Unioning完成的.维基百科文章将联合确定为找到包含两个简单多边形中任一区域内的区域的简单多边形或多边形.同一篇文章说,在简单的多边形"恰好两个边缘在每个顶点相遇"并且还确定了一个弱简单的多边形,边缘可以在这里面相遇,但是没有说明边缘不满足的边缘情况,但有些或许多顶点相遇.所以有点不清楚这种情况是简单的多边形还是弱简单的多边形.
Clipper选择了一种允许的方法:简单的多边形可以使这些像触摸(或伪复制)顶点.这种Clipper风格的许可方法导致生成的简单多边形在three.js:s triangulateShape()期望的含义中并不简单.
下图显示了此边缘情况的两个示例.左边的多边形是一个"简单"多边形,红点是"重复".右边的也是一个"简单"的多边形,但红点是"重复".

triangulateShape()在这些情况下失败,因为它跟踪数组中的点,allPointsMap并从那里检查点是否重复.要删除这些重复项,我有两个选择:
OPTION 1.
更改Javascript Clipper内部代码以使用额外参数来处理这些内容,例如.breakPolygonByWeakDuplicates为SimplifyPolygon()和SimplifyPolygons().正如安格斯约翰逊在其帖子中所描述的那样,改变将是这样的:
在IntersectEdges()方法中,更改以下内容...
if ( e1Contributing && e2contributing )
{
if ( e1stops || e2stops ||
(e1Wc != 0 && e1Wc != 1) || (e2Wc != 0 && e2Wc != 1) ||
(e1->polyType != e2->polyType && m_ClipType != ctXor) )
AddLocalMaxPoly(e1, e2, pt);
else
DoBothEdges( e1, e2, pt … Matlab有布尔(有时称为逻辑或二进制)矩阵乘法函数吗?我特别在谈论通常用圆圈表示的东西,用圆圈表示布尔矩阵乘法:
cij = (ai1 & b1j) || (ai2 & b2j) || (ai3 & b3j)|| ... || (aik & bkj)
Run Code Online (Sandbox Code Playgroud)
我很难找到一个,现在假设一个不存在.如果是这种情况,是否有快速编写完成此任务的.m文件?
一个例子是:
[1 1 1; [1 0 1; [1 1 1
1 0 1; *circledot* 1 0 0; = 1 1 1
1 0 0] 0 1 0] 1 0 1]
Run Code Online (Sandbox Code Playgroud) matlab boolean matrix matrix-multiplication boolean-operations
我有几个布尔矩阵,我想要一个结果矩阵来指示这些矩阵的该位置中的任何元素是否为真。Julia 语言中是否有一个函数可以让我对任意数量的矩阵进行元素或运算?
\n# My data\na = Bool[1 0; 1 1]\nb = Bool[0 0; 1 1]\nc = Bool[0 0; 0 0]\nd = Bool[0 0; 1 1]\n\n# Arrays of Bool Arrays\nz1 = [a]\nz2 = [a, b]\nz3 = [b, c, d]\nz4 = [a, b, c, d]\nz100 = [rand(Bool, 2, 2) for i in 1:100]\n\n# Expected\njulia> some_function(z1)\n2\xc3\x972 BitMatrix:\n 1 0\n 1 1\n\njulia> some_function(z2)\n2\xc3\x972 BitMatrix:\n 1 0\n 1 1\n\njulia> some_function(z3)\n2\xc3\x972 BitMatrix:\n 0 0\n 1 1\n\njulia> some_function(z4)\n2\xc3\x972 BitMatrix:\n 1 0\n 1 1\n\njulia> some_function(z100)\n2\xc3\x972 BitMatrix:\n 1 …Run Code Online (Sandbox Code Playgroud) 我在Arduino环境中有一些代码,它需要x(以8为增量)布尔值,这些布尔值可以在运行时为某些移位寄存器代码操作.所以目前我正在使用像这样的布尔数组:
#define number_of_shiftRegisters 220 //num of 8 bit shift registers
#define numOfRegisterPins number_of_shiftRegisters * 8 //number of booleans needed
boolean registers[numOfRegisterPins]; //boolean array
Run Code Online (Sandbox Code Playgroud)
但是我的RAM耗尽了大约200(1600布尔)并且不知道为什么直到我看到它,即使布尔值为1位,它们也存储在8位数据中.
正如我之前所说,所需的bool数量总是增加8,所以我不知道这是否对我有利.
是否有更高内存效率的方式来存储1000多个布尔值,仍然能够通过索引引用它们?
或者......至少更高的内存效率,不会花费更多的CPU时间来设置和迭代?
我曾想过一个char数组,然后对每个字符进行掩码以访问各个位.但我不知道是否有更简单的方法,或者这是否会占用更多的CPU时间.
我喜欢写枚举或整数来传递我的方法选项.C#中是否有模式或方法来检查(int 1,2,4,8,...)选项是真还是假.我认为应该可以通过二进制函数轻松实现.
class Program
{
public enum Option
{
Option_A = 1,
Option_B = 2,
Option_C = 4,
Option_D = 8,
}
static void Main(string[] args)
{
int activeOption = 5; // Means I activeted the Option_A and Option_C
if (IsOption(activeOption, Option.Option_A)) { /*do work*/ }
if (IsOption(activeOption, Option.Option_B)) { /*do work*/ }
if (IsOption(activeOption, Option.Option_C)) { /*do work*/ }
if (IsOption(activeOption, Option.Option_D)) { /*do work*/ }
}
private static bool IsOption(int activeOption, Option option)
{
/*Evaluate if IsOption is …Run Code Online (Sandbox Code Playgroud) 所以php网站上有这个页面显示比较不同值的结果:
http://php.net/manual/en/types.comparisons.php
这是一个有用的参考,但每次我想确保我正在进行类型比较时,我宁愿不必访问此页面.所以我的问题是
在PHP的类型比较逻辑背后是否存在某种潜在的哲学/推理?
例如,我可以看到松散的比较:
但是在尝试建立模式时,它变得有点毛茸茸.
例如,如果我有一个类似
x=True or True
如果我在外壳中评估结果为True
print(x)
x=True
Run Code Online (Sandbox Code Playgroud)
所以现在我想将字符串或输入转换为该逻辑表达式,例如
x=raw_input('Please give an expression:')
我知道表达式是一个字符串,那么如何将该字符串转换为逻辑表达式?
print(x)
x="True or True"
Run Code Online (Sandbox Code Playgroud) python boolean-expression logical-operators string-conversion boolean-operations
我嵌套了代表 SAT 论坛的真值列表,如下所示:
[[[0, True, False], [0, True, False], [0, True, 1]], [[0, True, True], [2, True, True], [3, False, True]], [[1, False, False], [1, False, False], [3, False, True]]]
Run Code Online (Sandbox Code Playgroud)
代表
([x0=0] + [x0=0] + [x0=1]) * ([x0=1] + [x1=1] + [-x2=1]) * ([-x3=0] + [-x3=0] + [-x2=1])
Run Code Online (Sandbox Code Playgroud)
我想计算整个公式的真值。第一步是将每个子句中文字的真值相加。
像这样:
clause_truth_value = None
for literal in clause:
# multiply polarity of literal with its value
# sum over all literals
clause_truth_value += literal[1]*literal[2]
Run Code Online (Sandbox Code Playgroud)
如果clause_truth_value是True在求和之后,则该子句整体为真。
但我没有得到我所期望的:
True …