技术宅,fat-man

增加语言的了解程度可以避免写出愚蠢的代码

导航

2014年1月16日 #

化简复杂逻辑,编写紧凑的if条件语句

摘要: 当业务逻辑很复杂,涉及多个条件的真假,或者多种条件下都会执行同一动作时,如何编写紧凑的if语句呢?本文借由一个实际例子,利用数学的布尔逻辑整理条件,最终产生if语句。问题在《X3 重聚》里,宇宙是一个个星区由跳跃门连接起来的。大多数星区是相邻的,也有部分星区是非连通的。这是X3 重聚星系图,右下的红色星区就是非连通星区。飞船从一个星区到另一个星区有两种方法,一是老老实实飞过去,二是跃迁过去。跃迁的话飞船要装有跃迁引擎和足够能量。能量由发电机供应。跃迁是跃迁到目的星区的跳跃门,跳跃门那里不能太挤,否则飞船会和其他飞船相撞。去非连通星区只能靠跃迁。问题来了。给定一艘船和它的当前星区以及目的星区,求 阅读全文

posted @ 2014-01-16 16:21 codestyle 阅读(1251) 评论(0) 推荐(0)

!a && !b 和 !(a || b) 的故事

摘要: // awk代码,当continue执行时说明书是免费的if(!(int(use_curr) == 0 || int(use_curr) == 30000)) { continue }这段代码大概是半年前写的,半年后过来读,发现已经不理解这段代码了,虽然理解当contniue执行时意味着书是免费的,但到底是use_curr等于0或30000免费,还是不等于时免费,已经迷糊了!这里需要进行仔细推导:0 进入表达式 -> use_curr==0 为真 -> 反转为假 -> continue不执行 -> 收费的 -> 0和30000是收费的,其他为免费if(int(us 阅读全文

posted @ 2014-01-16 16:04 codestyle 阅读(1887) 评论(0) 推荐(0)

简明解释算法中的大O符号

摘要: 伯乐在线导读:2009年1月28日Arec Barrwin在StackOverflow上提问,“有没有关于大O符号(Big O notation)的简单解释?尽量别用那么正式的定义,用尽可能简单的数学来解释”。在经过众多热心网友的修改更新后,最佳回复的得分已高达 3234 分,详细内容,请见下文。最佳回复所给出的大O符号的最简单定义如下:大O符号是一种算法复杂度的相对表示方式。这个句子里有一些重要而严谨的用词:相对(relative):你只能比较相同的事物。你不能把一个做算数乘法的算法和排序整数列表的算法进行比较。但是,比较2个算法所做的算术操作(一个做乘法,一个做加法)将会告诉你一些有意义的 阅读全文

posted @ 2014-01-16 12:32 codestyle 阅读(1361) 评论(0) 推荐(0)