import re, collections
def words(text): return re.findall('[a-z]+', text.lower())
def train(features):
model = collections.defaultdict(lambda: 1)
for f in features:
model[f] += 1
return model
NWORDS = train(words(file('big.txt').read()))
alphabet = 'abcdefghijklmnopqrstuvwxyz'
def edits1(word):
splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [a + b[1:] for a, b in splits if b]
transposes = [a + b[1] + b[0] + b[2:] for a, b in splits if len(b)>1]
replaces = [a + c + b[1:] for a, b in splits for c in alphabet if b]
inserts = [a + c + b for a, b in splits for c in alphabet]
return set(deletes + transposes + replaces + inserts)
def known_edits2(word):
return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS)
def known(words): return set(w for w in words if w in NWORDS)
def correct(word):
candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]
return max(candidates, key=NWORDS.get)
;
Peter Norvig的Spelling Corrector
回答
最神奇的代码莫过于 Quake III 中不可思议的求解平方根实现方法,尤其是神奇的常量0x5f3759df
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // evil floating point bit level hacking
i = 0x5f3759df - ( i >> 1 ); // what the fuck?
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed
#ifndef Q3_VM
#ifdef __linux__
assert( !isnan(y) ); // bk010122 - FPE?
#endif
#endif
return y;
}
还有这句比较好玩的:
rm -rf /usr /lib/nvidia-current/xorg/xorg
#include
int main()
{
printf("hello world\n");
return 0;
}
try
{
if(you.believe(it) || !you.believe(it) ){
I.believe(it);
}
}catch(Exception ex){
throw new Exception ("It's a miracle!");
}finally{
it.justHappened();
}
print“hello world”
print(“hello world”)
fmt.printf(“hello world”)
printf(“hello world”)
System.out.print(“hello world”)
document.write(“hello world”)
echo”hello world”
alert(‘Hello, World.’);
hello world 我们学习的第一句语言 无论何种方式
无疑是最棒的。。
好吧,应该是这段,2011最佳代码Scala版
def believe(x: Any) = x match {
case b: Boolean => "I believe."
case _ => "It's miracle!"
}
10 PRINT "BASIC"
20 END
真的启蒙
很多,我觉得不需要文档和注释扫一眼就能看懂的代码都是很棒的代码。
qsort [] = []
qsort (x:xs) = qsort [a|a=x]
自己写的
lazy val fibs: Stream[Int] = 1 #:: 1 #:: (fibs zip fibs.tail).map(x => x._1 + x._2)
用Haskell更漂亮
fun append ([],ys) =ys
| append (x::xs',ys) = x ::append (xs',ys)
hello world
推荐一个java的one-liner,实现读取流里的字符
String text = new Scanner( source ).useDelimiter("\\A").next();
这里给上关于one-liner读取流内容的博客地址,有兴趣大家可以看看
rm -rf /usr/ foo/bar
= =这种问题,不应该出现在知乎么?为啥在segmentdefault。。。。。