CS巴别塔

A Complete Program Inside a Tweet?

Posted in Uncategorized by Kenny Yuan on 2010/09/21

这是一篇无聊的文章,对此不感兴趣的读者可自行选择:关Tab、关窗口、退订、拔网线、砸电脑、自残、自焚、人体炸弹、当黑暗大BOSS毁灭人类、入党……





Boss

Boss





OK,你还在,我也还在,那么我来继续记流水帐:《能否在一条tweet中写一个求值程序?》

看到有人讨论面试问题,其中有人提到用“现场写一个计算器”来作为考题。在瞎掰了很久之后,我决定自己实际试试,因为“光说不练是假把式”么……当然,既然是自我挑战,那目标就设高一点:试着在一条推中写完表达式求值程序……

……嗯……显而易见地,我失败了!不过我在一条推的长度内写完了一个后辍(RPN)表达式的求值程序,共113字符:

(defun r(e)(let((s()))(dolist(x e)(if(numberp x)(push x s)(push(eval(reverse(list(pop s)(pop s)x)))s)))(car s)))

用的是标准的stack解法。

至于将中辍转后辍的程序,我只写出来这个:

(defun v(e)(let((s())(o())(m’((+ 1)(* 2)(- 1)(/ 2))))(dolist(x e)(if(listp x)(setf x(v x)))(if(numberp x)(push x o)(progn(do()((or(null s)(<(cadr(assoc(car s)m))(cadr(assoc x m)))))(push(pop s)o))(push x s))))(r(append(reverse o)s))))

足足有235字符!看来目标是达不到了……(@googollee老大也失败鸟——嗯,我很happy)

不知道有没有哪位读者是语言达人,可以完成这个伟大的目标呢?

最后声明一下:直接eval,或者调用bc这些玩赖的方式肯定能行,但太没技术含量……

——路人甲:还有比这篇日志更没有技术含量的?

——路人乙:大家洗洗睡了吧!

于是,我去准备洗洗睡了……

(如果哪位有好点子,请一定别忘了留言)








Tagged with: ,
Follow

Get every new post delivered to your Inbox.