那些优雅的代码
在Quora上看到一个问题,你见到的最优雅的代码是什么(http://www.quora.com/Elegant-Code/What-is-the-most-elegant-line-of-code-youve-seen),觉得挺有意思的,整理一下。
注:以下代码可能是各种五花八门的语言,但是关键不在语法,在语义,只要能明白意思就行了。
function gcd(a, b) { return b ? gcd(b, a % b) : a; }
while(a%=b^=a^=b^=a);
辗转相除法计算最大公约数,辗转相除法见这里(http://en.wikipedia.org/wiki/Binary_GCD_algorithm),wikipedia上更有各种版本的实现,递归的,效率高的。
main() {
char c = getchar();
(c == '+' || c == '-' || c == '*' || c == '/') ? main(), main() : 0;
putchar(c);
}
前缀表达式转换成后缀表达式,概念参见这里和这里
A=A+B-(B=A)
交换A和B的值,C语言才需要这样的技巧,python最直白,a, b = b, a
return (!(x & (x-1)));
判断x是否为2的幂数,位运算的技巧
for( c = 0; v; c++) v &= (v - 1);
计算hamming weight(wiki),二进制表示中有多少个1。之前也有一篇文章说这个,这里
while(*s++ = *t++);
拷贝字符串
:(){:|:&};:
bash 炸弹,定义了一个函数,名字就是冒号,这个函数会不断的fork自己,导致资源用完,系统挂掉
while( x --> 0){
//...
}
这个有趣,x --> 0,有种x趋近于0的错觉
float FastInvSqrt(float x) {
float xhalf = 0.5f * x;
int i = *(int*)&x; // evil floating point bit level hacking
i = 0x5f3759df - (i >> 1); // what the fuck?
x = *(float*)&i;
x = x*(1.5f-(xhalf*x*x));
return x;
}
有名的quake源码中的计算根号分之一的快速算法,原理是牛顿迭代法,神奇的是what the fuck那一行,选用了一个异常接近正常答案的值,使得只需要一次迭代就得到了答案。wiki有解释,http://en.wikipedia.org/wiki/Fast_inverse_square_root 。
def r(a):i=a.find('0');~i or exit(a);[min[(i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/3^j%9/3)or a[j]for
j in range(81)]or r(a[:i]+m+a[i+1:])for m in'%d'%5**18]
from sys import*;r(argv[1])
一行代码解数读,递归算法
这个python要写得再pythonic一些才优雅。
看了一会,有些代码就是trick并不优雅,还是就到这里吧!