问题列表 - 第3297页

在brainfuck程序中检测无限循环

我用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

22
推荐指数
4
解决办法
5731
查看次数

为什么c#编译器在使用new()约束的泛型类型调用new in时会发出Activator.CreateInstance?

如果您有以下代码:

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)

但是,为什么这个解决方案应该是必要的,这对我没有意义.

c# generics performance constructor

17
推荐指数
2
解决办法
3418
查看次数

生成给定模式的随机文本字符串

我需要生成特定格式的随机文本字符串.想要一些想法,以便我可以用Python编写代码.格式为<8位数> <15个字符串>.

python string random

17
推荐指数
3
解决办法
4万
查看次数

LINQ是否支持可组合"或查询"?

在另一篇文章中: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)正是我正在寻找的功能方面.我确实遇到了两个可能的问题:

  1. 如果我要做第三个条件(联合似乎将IEnumerable作为其参数),它看起来会产生多个数据库命中 - 我希望在代码中构建多个AND和OR语句然后执行一个请求.
  2. ADO.Net数据服务不支持Union(非常令人失望)

linq where-clause wcf-data-services

3
推荐指数
1
解决办法
1060
查看次数

我如何修复"类型列表的表达式需要未经检查的转换..."?

在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>"

有什么方法可以解决这个问题?

java warnings unchecked-conversion

129
推荐指数
4
解决办法
17万
查看次数

201
推荐指数
6
解决办法
6万
查看次数

3
推荐指数
1
解决办法
6396
查看次数

字符串提取

目前我正在使用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)

但不幸的是,正如我早些时候提到的那样,代码的更改并不像我计划的那样好.

所以现在我已经给出了我的问题的真正冗长的介绍,这是我的问题.

如何在两个不需要的部分之间提取字符串的中间部分?另外,作为目标的中间部分长度未知.

非常感谢你们给予的任何帮助.如果您需要更多信息,请询问; 我将非常乐意上传部分甚至整个代码以获得更多帮助.再次非常感谢你.

c++ string extract

2
推荐指数
1
解决办法
1013
查看次数

快速有限元求解器

FEM方程的快速求解器是什么?我更喜欢开源实现,但如果有商业实现,那么我不介意付钱.

algorithm solver

5
推荐指数
1
解决办法
3365
查看次数

找出谁编写/编辑这行代码的最简单方法是什么?

这显然要求源文件受源代码控制.理想情况下,我喜欢在IDE(Eclipse,Visual Studio等)下工作的工具 - 但外部工具也会很好.显然,可以手动浏览文件的先前版本,并比较各种版本,但我正在寻找一种能够快速查看谁负责代码部分的方法.

我正在使用CVS,但该工具应该理想地适用于不同的源控制系统.

eclipse cvs version-control

7
推荐指数
2
解决办法
2092
查看次数