在网上闲逛时发现了这么一个有趣的网站。Code Golf是一个另类的编程挑战网站。这个网站定期发布一个编程题目,你所提交的代码越短越好(keystroke越少越好,就像Golf一样要求尽可能少的stroke)。目前网站支持Perl、PHP、Python和Ruby语言。
Stetson MM给我推荐的一个Flash小游戏。挺适合给完全没有学过编程的人了解一下什么是“程序设计”。
给个链接:http://armorgames.com/play/2205/light-bot
很久没有更新和信息学有关的东西了。今天和大家分享一个非常有趣的题目,我已经很久没看见如此精彩有趣的题目了。为了引入这个问题,我们先来介绍一个假想的编程语言QCPL。就像LISP一样,它是一个基于函数的语言:没有变量,没有for循环,一切东西都是用函数来表示的。另外,就像FORTRAN一样,QCPL语言不支持递归,也就是说一个函数不能递归地调用自己。QCPL的另一个有趣的特点是,所有的函数都只能返回一个Boolean值。比如说,下面这个函数的作用就是判断x+2和y+2的乘积是否等于z:MULT_PLUS_TWO(x,y,z): (x+2)*(y+2)=z
QCPL也有逻辑运算符。事实上,QCPL里的合法运算符一共只有8个,其中6个分别如下:
运算符 | 作用 | 输入 | 输出
-------+--------+---------------+---------------
+ | 相加 | 两个自然数 | 一个自然数
* | 相乘 | 两个自然数 | 一个自然数
= | 等于 | 两个自然数 | 一个Boolean值
& | 逻辑和 | 两个Boolean值 | 一个Boolean值
| | 逻辑或 | 两个Boolean值 | 一个Boolean值
! | 逻辑非 | 一个Boolean值 | 一个Boolean值
另外两个运算符就要重点介绍了。这是QCPL语言真正牛B的地方——它是专门为量子计算机设计的!你可以让这台计算机平行地穷尽完某些变量所有可能的取值,这一切仅仅在一瞬间内就可以完成。这两个特殊的运算符(以后我们管它们叫做“定量运算符”)就是专门用来干这件牛B事的:"Ex"是“存在性定量运算符”,表示让计算机找出是否存在一个满足表达式的自然数x;"Ax"是“通用性定量运算符”,用于询问计算机该表达式是否对所有的自然数x均成立。比如,运用定量运算符,我们可以立即写出素数/合数判断函数:COMPOSITE(n): Ex,Ey,MULT_PLUS_TWO(x,y,n)
PRIME(n): !(COMPOSITE(n)|n=0|n=1)
其中,Ex,Ey,MULT_PLUS_TWO(x,y,n)的意思就是说,是否存在某一对x和y,使得MULT_PLUS_TWO(x,y,n)为真。只要(某一个平行世界里的)计算机找到了任何一对满足条件的x和y,整个COMPOSITE(n)立即返回True。如果对于所有的自然数x和y,MULT_PLUS_TWO(x,y,n)都不可能为真时,整个函数才返回False。别忘了这是一台量子计算机,穷举的过程可以在一瞬间内完成。
好了,下面我们再给出几个基本的函数。函数SUM用于计算x加y是否等于z,而函数PRODUCT则用于检验x乘以y是否等于z:SUM(x,y,z): x+y=z
PRODUCT(x,y,z): x*y=z
现在,你的任务就是写出一个函数POWER(x,y,z),当且仅当x的y次方等于z时函数才返回True。相信我,这道题没有那么容易。
查看更多 »
codepad是一个新的在线小工具,它的界面很清爽,使用方法非常简便,你甚至根本不用注册。你可以随时用它来保存、分享程序代码,提交后系统会给你一个形如codepad.org/xxxxxxxx的地址。它支持纯文本、C、C++、Python、Perl、Ruby等各种格式(不支持Pascal),并且提供了自动语法高亮功能方便大家阅读。最神奇的是,它可以显示你的程序代码的运行结果!因此这绝对是你保存和分享程序代码的最佳去处。
我在http://codepad.org/my2f2wEP分享了一个IOCCC的代码。
难以置信的是,这么好的东西居然在那个伟大的建筑之外!?反正我裸着是连不上的。
顺便帮忙八卦:)
Ben orenstein尝试在Goolge Code Search里输入脏话,在众多的开源软件中找到了一些非常牛B的代码:
gdb-6.4.50.20060515:/* OK, now set up the filehdr... */
/* We will NOT put a fucking timestamp in the header here. Every time you
put it back, I will come in and take it out again. I’m sorry. This
field does not belong here. We fill it with a 0 so it compares the
same but is not a reasonable time. — gnu@cygnus.com */
Siesta-0.66: # This job would be great if it wasn’t for the fucking customers.
CGI-FormBuilder-3.0202: # Get field from radio buttons or checkboxes
# Must cycle through all again to see which is checked. yeesh.
# However, this only works if there are MULTIPLE checkboxes!
# The fucking JS DOM *changes* based on one or multiple boxes!?!?!
# Damn damn damn I hate the JavaScript DOM so damn much!!!!!!
DJabberd-0.81: # Trillian, again, is fucking stupid and crashes on just
# about anything its homemade XML parser doesn’t like.
gift-0.11.5:void list_lock_insert_sorted (ListLock *lock, CompareFunc func, void *data)
{
if (lock->locked)
{
/* TODO: this is obviously not right ... this whole fucking module
* sucks anyway */
list_lock_prepend (lock, data);
return;
}
lock->list = list_insert_sorted (lock->list, func, data);
}
bh-asia-03-grugq: /* if we get here, there are massive fucking problems, for a start
* our stack is fucked up, and we can’t return(). Just crash out. */
trunk: /* FIXME: please god, when will the hurting stop? Thus function is so
fucking broken it’s not even funny. */
SQL-Abstract-1.20: # Note to self: I have no idea what this does anymore
# It looks like a cool fucking segment of code though!
# I just wish I remembered writing it… :-\
mendax_linux:for(i = 0 ; i < pktcount; i++) {
from.sin_port = htons(ntohs(from.sin_port) + 1);
pktlen = gen_tcp_pak(&pak, &from, dst, ip_id++,
seq_num, 0L, 0, flags);
seq_num += 64000;
/* don't fire dem packets too fucking fast */
usleep(1000);
send_pak((char *) &pak, pktlen, ether);
putchar('.');
}
SugarOS-for-Microsoft-Full-4.5.0h: /* Outlook can’t fucking follow RFC if someone PAID them to do it…
oh wait, someone paid them NOT to do it. */
AfterStep-2.2.5: /* No we fucking don’t! DB entries should be stored in the same order
as they are in the file ! I can’t belive I was so fucking stupid ! */
gallery-2.0.4/modules/core/classes/GalleryStorage:else if ($affectedRows > 1) {
/* Holy shit, we just updated more than one row! What do we do now? */
return GalleryStatus::error(ERROR_STORAGE_FAILURE, __FILE__, __LINE__,
"$query (" . implode('|', $data) . ") $affectedRows");
}
linux-2.4.34.1/arch/sparc/lib/checksum.S: /* Sun, you just can’t beat me, you just can’t. Stop trying,
* give up. I’m serious, I am going to kick the living shit
* out of you, game over, lights out. */
linux-2.6.1/arch/mips/kernel/sysirix.c: /* 2,191 lines of complete and utter shit coming up… */
nfs-utils-1.1.0/utils/statd/misc.c: if (!(ptr = malloc (size)))
/* SHIT! SHIT! SHIT! */
die (”malloc failed”);
dada-2_10_12: # code below replaces code above - any problems?
# yeah, it doesn’t fucking work.



本来想写一段有趣的翻译,发现有几个自己也不知道怎么翻,算了。
哪位牛人来一个牛B点的翻译。
来源:
http://blogoscoped.com/archive/2007-12-10-n70.html
http://blogoscoped.com/archive/2007-12-12-n59.html

The Python Challenge是一个过关式的解谜站点,使用的是经典在线解谜站点Not Pr0n的模式:根据提示找出下一关的网页地址。和Not Pr0n不同的是,在每一关里你都需要编写程序来寻找答案。虽然这个解谜站点的名字叫做Python Challenge,但事实上你可以使用任意一种程序语言(除了少数一两关可能会用到点Python的知识)。
虽然这个解谜站点已经很火星了(05年建立的),但在国内似乎流传得并不广。偶然发现这个站点,想到NOIp也快到了,多一个有趣的coding练习也是一件好事,因此这里推荐一下这个站点,大家可以一起来试试。
本日志评论原则:禁止“剧透”












