Tag: 语言不可知的

代码高尔夫:正则expression式分析器

目标 今天的Code Golf挑战是尽可能less地创build一个正则expression式parsing器。 语法 不,我没有要求你匹配Perl风格的正则expression式。 毕竟,已经有一个非常可靠的解释器! 🙂 以下是关于这个挑战的正则expression式语法的所有知识: 一个术语被定义为单个文字字符,或者在分组括号()的正则expression式。 * (星号)字符表示上一个TERM中的Kleene星形运算 。 这意味着零个或更多以前的术语连接在一起。 + (加号)字符表示一个方便的捷径: a+等同于aa* ,意思是前面的一个或多个术语。 这个? (问号)字符代表零或前一个字词之一。 | (pipe)字符表示交替,这意味着任何一方的REGULAR EXPRESSIONS都可用于匹配。 所有其他字符被假定为文字。 你可以假定所有其他的字符都在[0-9A-Za-z] (即所有的英文字母数字)。 换句话说: * / + / ? 具有最高优先级,然后连接,然后交替。 由于交替的优先级比连接低,因此在没有括号的正则expression式中它的使用会导致它被绑定到每一边的完整正则expression式。 *和+和? 另一方面,只适用于前一个任期。 挑战 你的挑战是编写一个程序来编译或解释一个正则expression式(如上面定义的),然后testing一些string。 我将离开input给你。 我的build议是,正则expression式可能应该是第一位的,然后是任何数量的string来testing它。 但如果你想让它持续下去,那很好。 如果你想把所有的命令行参数或标准input,命令行中的正则expression式和标准input中的string,或者其他任何东西,那很好。 只显示一个或两个用法示例。 输出应该是true或false ,每行一个,以反映正则expression式是否匹配。 笔记: 我不需要说这个…但是不要在你的语言中使用任何正则expression式库! 您需要自己编译或解释模式。 ( 编辑:如果需要分割或连接string,则可以使用正则expression式,但不能直接使用它来解决问题,例如,将input正则expression式转换为语言正则expression式并使用它)。 正则expression式必须完全匹配这个挑战的inputstring。 (相当于,如果您熟悉类似于Perl的正则expression式,则假定所有匹配的string的起始和结束锚定都已到位) 对于这个挑战,所有的特殊字符()*+?| 预计不会真正发生。 如果在input中出现,则假定没有模式可以匹配所讨论的string是安全的。 input要testing的string应以区分大小写的方式进行评估。 […]

在正则expression式中如何嵌套捕获组?

是否有正则expression式应该如何处理嵌套圆括号的捕获行为的定义行为? 更具体地说,你是否可以合理地预期,不同的引擎会在第一个位置捕获外部括号,并在随后的位置嵌套括号? 考虑下面的PHP代码(使用PCRE正则expression式) <?php $test_string = 'I want to test sub patterns'; preg_match('{(I (want) (to) test) sub (patterns)}', $test_string, $matches); print_r($matches); ?> Array ( [0] => I want to test sub patterns //entire pattern [1] => I want to test //entire outer parenthesis [2] => want //first inner [3] => to //second inner [4] => […]

计算2Dvector的交叉产品

从维基百科: 叉积是在三维欧几里得空间中的两个向量上的二元运算,其导致与包含两个input向量的平面垂直的另一向量。 鉴于定义只定义在三个( 或七个,一个和零 )维度,如何计算两个二维向量的叉积? 我见过两个实现。 一个返回一个新的向量(但只接受一个向量),另一个返回一个标量(但是是两个向量之间的计算)。 实现1(返回一个标量): float CrossProduct(const Vector2D & v1, const Vector2D & v2) const { return (v1.X*v2.Y) – (v1.Y*v2.X); } 实现2(返回一个向量): Vector2D CrossProduct(const Vector2D & v) const { return Vector2D(vY, -vX); } 为什么不同的实现? 我将使用什么标量实现? 我会用什么vector实现? 我问的原因是我自己写了一个Vector2D类,不知道要使用哪种方法。

面向对象编程的替代方法?

OOP可能是当今软件devise中最常用的编程范例。 我的问题是 – 什么样的其他范式可以与它竞争,并可以代替oop ? 为了澄清这个问题,我不问其他什么样的范式。 有很多,我想知道哪一个: 在实践中已经被使用,不仅在理论上。 可以与oop竞争 ,因此可以在没有痛苦或没有痛苦的情况下用于大型项目。 可以用来开发具有业务逻辑,数据库等的桌面应用程序。 不是和oop的伴侣一起使用,而是可以代替oop。 如果有的话,它有什么优点/缺点,为什么比oop好/差,哪种语言最好用,怎么用stream行语言,有什么devise模式,可以吗完全取代oop?

你如何嘲笑一个密封课?

嘲笑封闭式课程可能会非常痛苦。 我目前喜欢一个适配器模式来处理这个问题,但一些关于只是保持感觉怪异。 那么,嘲笑密封课程的最好方法是什么? Java的答案是值得欢迎的 。 事实上,我预计Java社区已经处理了更长的时间,并且提供了很多东西。 但是这里有一些.NET的意见: 为什么鸭子键入问题的C#开发人员 创build密封和其他types的包装嘲笑 WCF(和Moq)的unit testing

什么是绿地和棕地的应用?

我读了Fluent NHibernate wiki中的以下句子: …; 然而,对于大多数绿地应用(以及相当多的棕地应用),自动映射将不仅仅是有能力的。 什么是绿地和棕地的应用?

什么不应该在源代码控制之下?

对于不应该(在大多数情况下)不应该受源代码pipe理的文件和/或目录,或多或less有一个完整的列表将是很好的。 你认为应该排除什么? build议到目前为止: 一般来说 configuration敏感信息文件(密码,私钥等) Thumbs.db,.DS_Store和desktop.ini 编辑备份:*〜(emacs) 生成的文件(例如DoxyGen输出) C# BIN \ * OBJ \ *。 *。可执行程序 视觉工作室 名为.suo * * .NCB *。用户 * .APS * .cachefile *的.backup _UpgradeReport_Files Java的 *。类 蚀 我不知道,这就是我正在寻找的:-) python * .pyc文件 临时文件 – 。*。sw? – *〜

什么是编程习惯用法?

我看到“程序devise习语”这个短语就好像它被普遍理解一样。 然而,在search结果和stackoverflow我看到的一切… 从微: 增加一个variables 代表一个无限循环 交换variables值 中等: PIMPL RAII 格式,评论,风格… macros观: 编程范例或共同的图书馆function成语 过程模式如成语 成语的集合等于一个新的范例 “编程习惯用法”是否有单一的通用定义? 由于“编程习语”在很多领域都有使用, Micro:句法细微差别或通用语法 中等:共同的风格和模式 macros观:编程范例如成语 在这些范围的任何一个中使用这个短语是否有效? 迄今为止的答案都集中在句法成语上。 其他人是否也有效?

什么是GUID? 为什么和在哪里我应该使用它?

什么是GUID? 为什么和在哪里我应该使用它? 我已经在很多地方和wikipedia中看到了GUID的引用,但是告诉你在哪里使用它并不是很清楚。 如果有人能回答这个问题,那就太好了。 谢谢

计算相交圆盘数量的algorithm

给定一个N整数的数组A ,我们在2D平面中绘制N圆盘,使得第i个圆盘以(0,i)中心,半径为A[i] 。 如果第k个和第j个盘至less有一个公共点,我们说第k个盘和第j个盘相交。 写一个函数 int number_of_disc_intersections(int[] A); 给出如上所述的描述N盘的arraysA返回交叉盘对的数量。 例如,给定N=6和 A[0] = 1 A[1] = 5 A[2] = 2 A[3] = 1 A[4] = 4 A[5] = 0 有11对相交的光盘: 0th and 1st 0th and 2nd 0th and 4th 1st and 2nd 1st and 3rd 1st and 4th 1st and 5th 2nd and 3rd 2nd and […]