我用MATLAB脚本语言编写了一个简单的brainfuck解释器.它被随机的bf程序执行(作为遗传算法项目的一部分).我面临的问题是,程序在相当多的情况下都会出现无限循环,因此GA会陷入困境.
所以,我需要一种机制来检测无限循环并避免在bf中执行该代码.
一个明显的(微不足道的)案例是我有的时候
[]
Run Code Online (Sandbox Code Playgroud)
我可以检测到这一点并拒绝运行该程序.
对于非平凡的情况,我发现基本思想是:确定循环的一次迭代如何改变当前单元格.如果变化为负,我们最终将达到0,所以这是一个有限的循环.否则,如果更改是非负的,则它是无限循环.
对于单个循环来说,实现这一点很容易,但是使用嵌套循环会变得非常复杂.例如,(在下面的(1)中指的是单元格1的内容等)
++++ Put 4 in 1st cell (1)
>+++ Put 3 in (2)
<[ While( (1) is non zero)
-- Decrease (1) by 2
>[ While( (2) is non zero)
- Decrement (2)
<+ Increment (1)
>]
(2) would be 0 at this point
+++ Increase (2) by 3 making (2) = 3
<] (1) was decreased by 2 and then increased by 3, so net effect is increment
Run Code Online (Sandbox Code Playgroud)
因此代码会一直运行.然而,对单元格1上的+和 - 的完成次数的天真检查会说-s的数量更多,因此不会检测到无限循环. …
algorithm interpreter infinite-loop halting-problem brainfuck
如果您有以下代码:
static T GenericConstruct<T>() where T : new()
{
return new T();
}
Run Code Online (Sandbox Code Playgroud)
C#编译器坚持发出对Activator.CreateInstance的调用,这比本机构造函数慢得多.
我有以下解决方法:
public static class ParameterlessConstructor<T>
where T : new()
{
public static T Create()
{
return _func();
}
private static Func<T> CreateFunc()
{
return Expression.Lambda<Func<T>>( Expression.New( typeof( T ) ) ).Compile();
}
private static Func<T> _func = CreateFunc();
}
// Example:
// Foo foo = ParameterlessConstructor<Foo>.Create();
Run Code Online (Sandbox Code Playgroud)
但是,为什么这个解决方案应该是必要的,这对我没有意义.
我需要生成特定格式的随机文本字符串.想要一些想法,以便我可以用Python编写代码.格式为<8位数> <15个字符串>.
在另一篇文章中:Linq-To-Sql是否支持可组合查询,讨论了如何动态组合/连接where子句.这似乎是用"AND"完成的(即第一个where子句和第二个where子句由AND连接).我想知道的是,是否有办法用OR组合Linq查询.
例:
var people = from p in Person
where p.age < 18
select p
var otherPeople = from p in people
where p.firstName equals "Daniel"
select p
Run Code Online (Sandbox Code Playgroud)
这给人们起名为"丹尼尔"并且未满18岁.我正在寻找加入这些名称的语法,以找到名字为"丹尼尔"或未满18岁的人.
注意:我正在使用ADO.net数据服务,所以我没有.Contains()可供我使用.
编辑:联盟建议(由Garry Shutler)正是我正在寻找的功能方面.我确实遇到了两个可能的问题:
在Java片段中:
SyndFeedInput fr = new SyndFeedInput();
SyndFeed sf = fr.build(new XmlReader(myInputStream));
List<SyndEntry> entries = sf.getEntries();
Run Code Online (Sandbox Code Playgroud)
最后一行生成警告
"类型的表达式List需要未经检查的转换以符合List<SyndEntry>"
有什么方法可以解决这个问题?
ASP.NET中的用户控件和自定义控件之间有什么区别
目前我正在使用C++环境开展非常基本的游戏.这个游戏曾经是一个学校项目,但现在我完成了这个编程课程,我想扩展我的技能,并在这个旧任务上更加蓬勃发展.
我已经做了很多我很满意的改变.我已将所有数据集中到文件夹层次结构中,我已经获得了读取这些位置的代码.
然而,我的问题源于一个非常根本的缺陷,一直困扰着我.
为了访问我正在使用的图像数据,我使用了代码:
string imageLocation = "..\\DATA\\Images\\";
string bowImage = imageLocation + "bow.png";
Run Code Online (Sandbox Code Playgroud)
问题是,当玩家在游戏板上拿起一个项目时,我的代码应该使用代码:
hud.addLine("You picked up a " + (*itt)->name() + "!");
Run Code Online (Sandbox Code Playgroud)
打印到命令行,"你拿起一把弓!".但相反它显示"你选择了..\DATA\Images \!".
在集中我以前使用的数据之前:
name_(item_name.substr(0, item_name.find('.')))
Run Code Online (Sandbox Code Playgroud)
在我的Item类构造函数中将项目名称切割为bow或candle之类的东西.在我改变了数据结构的方式后,我意识到我必须改变我将名字砍成同样简单的'bow'或'candle'的方式.
我已经更改了上面的代码以反映我对数据结构的更改:
name_(item_name.substr(item_name.find("..\\DATA\\Images\\"), item_name.find(".png")))
Run Code Online (Sandbox Code Playgroud)
但不幸的是,正如我早些时候提到的那样,代码的更改并不像我计划的那样好.
所以现在我已经给出了我的问题的真正冗长的介绍,这是我的问题.
如何在两个不需要的部分之间提取字符串的中间部分?另外,作为目标的中间部分长度未知.
非常感谢你们给予的任何帮助.如果您需要更多信息,请询问; 我将非常乐意上传部分甚至整个代码以获得更多帮助.再次非常感谢你.
这显然要求源文件受源代码控制.理想情况下,我喜欢在IDE(Eclipse,Visual Studio等)下工作的工具 - 但外部工具也会很好.显然,可以手动浏览文件的先前版本,并比较各种版本,但我正在寻找一种能够快速查看谁负责代码部分的方法.
我正在使用CVS,但该工具应该理想地适用于不同的源控制系统.