自我枚举pangrams的wiki文章指出它们是使用二元决策图计算的.我一直在阅读有关BDD的内容,根据我的理解,您需要先将一些问题表示为布尔函数,然后才能构建BDD.
我该怎么做呢?
我已经考虑了几天这个问题了,我很确定你可以使用简单的编码来表示布尔函数的输入:
10000 01010 01011 10101 ...
16A's 10B's 11C's 21D's ...
Run Code Online (Sandbox Code Playgroud)
所以对于一个pangram开始"十六A,十B,十一C,二十一D",你可以把它表示为10000010100101110101 ......
这意味着布尔函数中有26*5 = 130个变量,假设您将字符的最大频率限制为32次出现.
输出应该是表示是否是自我枚举的pangram,即如果句子描述其自己的一组频率.
要做到这一点,在此过程中肯定需要一个哈希表(或几个).
因此,对于字母E,哈希表可能会开始:
one -> 1
two -> 0
three -> 2
four -> 0
five -> 1
...
Run Code Online (Sandbox Code Playgroud)
二进制,可能看起来像:
1 -> 1
10 -> 0
11 -> 10
100 -> 0
101 -> 1
Run Code Online (Sandbox Code Playgroud)
如果来自E哈希表的所有查找的总和等于对应于E的五个输入比特,那么自枚举庞格的那部分是正确的.如果所有部分都正确则布尔函数应该为1,否则为0.
我很确定我可以弄清楚如何使用布尔函数执行加法以及如何检查两个数字是否相等.但是,我不知道从何处开始将哈希表表示为布尔函数.此外,将所有部分连接在一起可能会让我感到困惑.
有什么想法吗?想法?合作?我想知道这是怎么回事.
提前致谢.
binary logic hashtable boolean-expression boolean-operations
我在sqlite3中的sql查询以OR语句结束.它看起来像这样:
select
(...)
from
T1, T2, .... Tn
where
(...) and
(
(T5.v='s1' and T6.v='s2' and T7.v='s3') OR
(T5.v='s4' and T6.v='s5' and T7.v='s6')
)
Run Code Online (Sandbox Code Playgroud)
查询不返回任何结果.
但是每个不同的"OR"条件都返回一些行(!)
where
(...) and
(
(T5.v='s1' and T6.v='s2' and T7.v='s3')
)
Run Code Online (Sandbox Code Playgroud)
和
where
(...) and
(
(T5.v='s4' and T6.v='s5' and T7.v='s6')
)
Run Code Online (Sandbox Code Playgroud)
它是sqlite3中的一个错误还是我?
$ sqlite3 -version
3.6.20
Run Code Online (Sandbox Code Playgroud)
更新:我在T5.v,T6.v和T7.v上有三个非唯一索引
通常,当我从集合中擦除元素时,我想声明它实际上已被擦除:即
assert(s.erase(e));
Run Code Online (Sandbox Code Playgroud)
但是当设置NDEBUG时,元素不会被删除.但如果我写
bool removed = s.erase(e);
assert(removed);
Run Code Online (Sandbox Code Playgroud)
编译器抱怨在设置NDEBUG时未使用'removed'.
我怎么能这样做?
我最后只是创建了一个实用工具方法:
inline void run_and_assert(bool b) {
assert(b);
}
Run Code Online (Sandbox Code Playgroud)
现在我可以说
run_and_assert(s.erase(e));
Run Code Online (Sandbox Code Playgroud)
这有什么缺点吗?对我而言,这比luiscubal的解决方案更简单
c++ assert coding-style boolean-expression compiler-warnings
我想检查变量的值,bool_val使用Struts2的标签<s:if>,但它不工作.
<%@ taglib prefix="s" uri="/struts-tags" %>
<%boolean bool_val=true;%>
real value : <%=bool_val%><br/>
expression evaluated value :
<s:if test="%{bool_val==true}">
TRUE
</s:if><s:else>
FLASE
</s:else>
Run Code Online (Sandbox Code Playgroud)
我也尝试下面的测试表情太多,但仍然没有工作.
<!--
bool_val
bool_val==true
%{bool_val}
%{bool_val==true}
%{bool_val=="true"}
-->
Run Code Online (Sandbox Code Playgroud) 我有任务为复杂和嵌套的JSON编写过滤器.为此,我需要评估用户在输入字段中输入的布尔表达式.为了问题,我们可以说有以下输入:
(Key1 = "foo" || key2 = 2 && key3 = "bar") && key4 = 7
Run Code Online (Sandbox Code Playgroud)
我设法编写一个函数来评估每个keyValue-Pair为"True"或"False"并将其替换为字符串:例如:
(True || False && True) && True
Run Code Online (Sandbox Code Playgroud)
现在我想将此String解析为布尔表达式.是否有任何"简单"的方式(内置函数,插件)的Javascript可以解析这个字符串?
我正在使用g ++并编写一个简单的函数:
#include <memory>
std::shared_ptr<char> ptr;
bool fails_compiling()
{
return ptr;
}
Run Code Online (Sandbox Code Playgroud)
从我在界面中看到的,shared_ptr实现包括一个bool操作符,我甚至可以应用这样的快速修复:
return static_cast<bool>(ptr);
Run Code Online (Sandbox Code Playgroud)
它现在编译.
为什么会回归算法不尝试自动转换到bool喜欢的if()和while()做的?
我正在编写一些代码来增加文件名末尾的数字,直到它不再覆盖现有文件.我正在创建几个文件,所有文件都具有相同的基本文件名但不同的扩展名,我都不想覆盖它们.
朴素版:
prefix = 'hello0'
while os.path.exists(prefix + '.abc') or os.path.exists(prefix + '.def') or os.path.exists(prefix + '.ghi'):
n = int(prefix[-1])
prefix = prefix[:-1] + str(n + 1) # I know this doesn't work when n reaches two digits; my full code involves a regular expression
Run Code Online (Sandbox Code Playgroud)
当有超过几个扩展时,这种情况显然会变得非常漫长和丑陋.我把它抽象成一个for循环.
我的版本:
prefix = 'hello0'
extensions = ('.abc', '.def', '.ghi') # there could be even more than this
condition = True
while condition:
condition = False
# if any of the paths still …Run Code Online (Sandbox Code Playgroud) 给出两个&&连接条件.我知道评估的顺序是从左到右.但是如果第一个条件解析为false,那么第二个条件保证不会被评估?
#define SIZE
bool array[SIZE];
int index;
// play with variables
// ...
if(index < SIZE && array[index])
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,如果第一个条件为false,则不能评估第二个条件,因为数组中的访问将超出范围.
顺便说一句,我不能简单地用两个if语句嵌套条件,因为实际上我需要反向像(!(in_range && get_element)).使用嵌套语句,我需要用goto它跳过下面的代码块.
c++ if-statement execution boolean-expression operator-precedence
0 == false并且'0' == false都'真'
然而,(true && 0)是'假',而(true && '0')'是'.
为什么?
我有一个包含布尔逻辑的字符串,类似于:
((true && true) || false && !true)
Run Code Online (Sandbox Code Playgroud)
在Javascript中安全地评估此字符串以获取布尔结果的最佳方法是什么?我想避免使用eval().
c++ ×3
javascript ×3
assert ×1
binary ×1
coding-style ×1
execution ×1
hashtable ×1
if-statement ×1
java ×1
jsp ×1
logic ×1
ognl ×1
python ×1
return ×1
return-value ×1
sql ×1
sqlite ×1
string ×1
struts2 ×1