Tag: 语言不可知

人工智能游乐场?

在学校里,我的一位教授创造了一个3D游戏(不只是一个引擎),所有的玩家都完全由AI控制,这是我们的任务,编程一个玩家的AI。 我们基本上提供了一个API来与游戏世界进行交互。 然后,我们的AI实现一起被投入到游戏中,我们看着我们的程序互相攻击。 这就像机器人足球 ,但虚拟,有很多大枪,没有足球。 我现在正在寻找类似的东西(和开源 )来玩。 (最好在Java中,但我对任何语言都是开放的。)我不是在寻找一个游戏引擎或框架…我正在寻找一个完全没有AI代码的游戏…最好设置对于这种运动。 build议?

知道C实际上会伤害你在高级语言中编写的代码吗?

这个问题似乎已经解决,甚至被打死了。 聪明的人在这个问题上说了很多聪明的事情 。 要成为一个非常好的程序员, 你需要知道C. 或者你呢? 这周我开了两次。 第一个让我意识到,我的假设并不比我背后的知识更进一步,考虑到我的机器上运行的软件的复杂性,这几乎是不存在的。 但真正把它带回家的是这个Slashdot的评论 : 最终的结果是,我注意到传统的C“裸机”程序员认为实现高级语言的许多天真的方式。 他们在他们影响的项目中做出了不好的“优化”决定,因为他们不知道编译器是如何工作的,或者他们所了解的天真的macros汇编器模型与良好的运行时系统有多大的不同。 然后它打击我:C只是一个抽象 ,像所有其他人一样。 即使CPU本身只是一个抽象! 我从来没有看到过这个问题,因为我没有工具去衡量它。 我很困惑。 Dijkstra对BASIC的评论是否让我的思想残缺不堪? 我是否处于不成熟的优化状态? 有没有希望我,现在我意识到我什么都不知道? 有什么可以知道的,甚至? 那么为什么这么迷人,我过去五年写的所有内容都可能是根本错误的? 总结一下:在知道API文档告诉我的时候有什么价值吗? 编辑:CW。 当然这也意味着现在你必须发布解释器/运行时优化的例子比我们更好:)

为什么我在大多数高级语言中看不到pipe道操作员?

在Unix shell编程中, pipe道操作员是一个非常强大的工具。 通过一小组核心实用程序,一个系统语言(如C)和一个脚本语言(如Python),可以构build极其紧凑且function强大的shell脚本,并由操作系统自动并行化。 显然这是一个非常强大的编程范例,但是我还没有看到pipe道是除shell脚本以外的任何语言的一级抽象。 使用pipe道复制脚本function所需的代码似乎总是相当复杂。 所以我的问题是为什么我没有看到像C#,Java等现代高级语言中类似Unixpipe道的东西? 是否有支持一streampipe道的语言(不是shell脚本)? 这不是expression并发algorithm的一种方便而安全的方法吗? 为了防止有人出现,我查看了F#pipe道转发操作符(前向pipe道操作符),它看起来更像是一个函数应用操作符。 它将一个函数应用于数据,而不是将两个stream连接在一起,据我所知,但我愿意纠正。 后记 :在做协同工作的一些研究时,我意识到有一些相似之处。 在一篇博客文章中,马丁·沃尔夫描述了一个与我的类似的问题,但是在协程而不是pipe道方面。

匹配换行符 – \ n还是\ r \ n?

在写这个答案时 ,我不得不完全匹配换行符,而不是使用s flag( dotall -dot matches linebreaks)。 尝试匹配\n或\r\n时,通常用于testing正则expression式的网站的行为会有所不同。 我注意到 Regex101仅在\n上匹配换行符 ( 例如 – 删除\r和它匹配) RegExr在\n 和 \r\n上都不符合换行符 除了m flag和\s之外,我找不到一个能够匹配换行符的东西 ( 例子 ) Debuggex的行为更加不同: 在这个例子中它只匹配\r\n ,而 这里只匹配\n ,指定相同的标志和引擎 我完全知道m -flag(多行 – 使匹配开始和$结束一行),但有时这不是一个选项。 与\s相同,因为它与选项卡和空格相匹配。 我以为使用unicode换行符( \u0085 )是不成功的,所以: 有没有一种安全的方式来将匹配整合到一个换行符中(最好不pipe使用的语言如何)为正则expression式? 为什么上面提到的网站行为不同(特别是Debuggex,一次只匹配\n ,一次只匹配\r\n )?

什么是caching命中和caching未命中? 为什么上下文切换会导致caching未命中?

从第11章( 性能和可伸缩性 )和JCIP书籍的命名上下文切换部分: 当一个新的线程被切换时,它所需要的数据不太可能在本地处理器caching中,所以上下文切换会导致一连串的caching未命中,因此线程在第一次调度时会运行得更慢一些。 有人可以用一种容易理解的方式解释caching未命中的概念和其可能的相反( caching命中 )吗? 为什么上下文切换会导致很多caching未命中?

每一个物体都应该有一个界面,所有的物体都是松散耦合的?

从我读过的最好的做法是有基于接口的类和松散耦合的对象,以帮助代码重用和unit testing。 这是正确的,这是一个应该始终遵循的规则吗? 我问的原因是我最近在一个有100多个不同对象的系统上工作。 几个共享的通用接口,但大多数不知道是否应该有一个接口镜像这些类的每个属性和function? 我正在使用C#和dot net 2.0,但我相信这个问题将适合多种语言。

“关键字”和“保留字”有什么区别?

关键字和保留字有什么区别? 例如,在C ++概念提案中,可以阅读以下语句: 该提案引入了五个新的关键字:概念,概念图,何处,公理和延迟检查。 所有这些关键字也将是保留字。

计算旋转矩形中的最大矩形

我试图find最好的方法来计算可以包含在一个旋转的矩形内的最大(面积)的矩形。 一些图片应该帮助(我希望)在可视化我的意思是: input矩形的宽度和高度是给定的,旋转angular度也是如此。 输出矩形不旋转或倾斜。 我正在走下一条漫长的路线,我甚至不知道它是否会处理angular落案件(不是双关语)。 我敢肯定,这是一个优雅的解决scheme。 有小费吗? 编辑 :输出矩形点不一定要触摸input矩形的边缘。 (感谢E先生)

低延迟编程

我一直在阅读很多关于低延迟金融系统(尤其是自知名企业间谍案以来)以及低延迟系统的想法。 有一百万个应用程序可以使用这些人正在做的事情,所以我想了解更多关于这个话题。 事情是我找不到有关这个话题的任何有价值的东西。 任何人都可以在低延迟系统上推荐书籍,网站和示例吗?

如何计算整数范围内的每个数字?

想象一下,你出售那些用于房屋,储物柜门,酒店房间等的金属数字。当你的客户需要门牌号码时,你需要找出每个数字有多less个数字: 1到100 51至300 1到2,000,左边是零 显而易见的解决scheme是从第一个到最后一个数字执行一个循环,将计数器转换为左侧或没有零的string,提取每个数字,并将其用作索引来递增10个整数的数组。 我想知道是否有更好的方法来解决这个问题,而不必遍历整个整数范围。 任何语言或伪代码的解决scheme都是受欢迎的。 编辑: 答案审查 CashCommons和Wayne Conrad的 John评论说,我目前的做法很好,也足够快。 让我用一个愚蠢的比喻:如果你在1分钟内完成棋盘上方块的计算任务,你可以通过逐个计算方块来完成任务,但更好的解决scheme是计算边和做一个乘法,因为你以后可能会被要求去计算build筑物中的瓷砖。 亚历克斯·雷斯纳(Alex Reisner)指出了一个非常有趣的math定律,不幸的是,这个问题似乎并不相关。 Andresbuild议我使用相同的algorithm,但用%10操作而不是子string提取数字。 约翰在CashCommons和phordbuild议预先计算所需的数字并将它们存储在查找表中,或者对于原始速度来说,它是一个数组。 如果我们有一个绝对的,不可移动的,最大的整数值,这可能是一个很好的解决scheme。 我从来没有见过其中之一。 高性能标记和filter计算了各种范围所需的数字。 一毫秒的结果似乎表明有一个比例,但其他数字的结果显示不同的比例。 filter发现了一些公式,可以用来计数十位数的数字。 Robert Harvey在MathOverflow上发表了一个非常有趣的经历。 math家之一用math符号写了一个解决scheme。 Aaronaught使用math开发和testing了一个解决scheme。 发布后,他回顾了从math溢出发起的公式,并发现它的缺陷(指向Stackoverflow :)。 noahlavine开发了一个algorithm,并以伪代码的forms呈现。 一个新的解决scheme 读完所有的答案,并做了一些实验,我发现,从1到10 n -1的整数范围: 对于数字1至9,需要n * 10 (n-1)个片段 对于数字0,如果不使用前导零,则需要n * 10 n-1 – ((10 n -1)/ 9) 对于数字0,如果使用前导零,则需要n * 10 n-1 -n 第一个公式是filter (也许是其他人)发现的,我发现了另外两个是通过反复试验(但是可能包含在其他答案中)。 例如,如果n = […]