灵感的来临,没有任何预兆;灵感的消失,也不会有告别仪式;用文字记下她们吧,让灵感永存……

我的代码仓库

前些日子 Google 发布了一项新的服务 Google Project Hosting,用来维护和发布开源项目,提供了SVN用来管理代码,还有一个问题跟踪系统(Issue),支持多人协同开发。配合 Groups(邮件列表和讨论组)、Pages(作为主页,提供下载等)、Blogger(用来发布开发进展等) 等服务,可以完全满足合作开发开源项目的需求。如果还有wiki的话,就完美了。

我在上面建立了一个Project:daviescode,把我以前写的代码都加进去了,可以在浏览器中直接浏览,以后会不断更新。

davies 发表于 2006 年 08 月 14 日 | 4 条留言

Visual C++ 6 的 BUG:

意外的发现一个Visual C++ 6 的bug :

调试C++代码时,用 Watch 察看一个表达式的值,如果该表达式中同时有 __int64 和 double 两种数值类型,其结果就会错得离谱,比如 __int64(0)+1.0,用 watch 查看的值竟然为 460718241880017408 !

这个古怪结果的十六进制表示为 0x3ff0000000000000。根据某某标准,双精度浮点数1.0用8个字节来表示,上面那个古怪结果正是1.0。可以通过如下方法查看1.0的表示方法:

double a = 1.0;
__int64 *a64 = (___int64*)a;

用 watch 查看 *a64 的值,并用十六进制表示,就可以看到是0x3ff0000000000000。

原来是用 watch 查看表达式时对 double 和 __int64 之间的类型转换有问题,由于它们是具有相同精度的,都是8个字节,不知道是从__int64转到double,还是从double转到__int64,居然就不做类型转换了,直接把double类型当作__int64类型来处理,所以出错。

我们来继续发掘,查看表达式 1.0+__int64(10)的值,居然是 1.0 ! 结合上面的例子可以看出,它是把后面一种数据类型直接当作前一种数据的类型来处理,而不做任何转换。10的十六进制表示为 0x000000000000000a,当作double类型的话,就是0了。

不过不用担心,这个bug并不影响程序的运行,代码执行结果还是正确的。

再来看看 Visual C++ 2005 的表现,不管是1.0+__int64(1) 还是 __int64(1)+1.0,其结果都是2.0,类型为double,终于做了正确的处理。Visual C++ 2003中没有试过,不知道有没有该问题。

davies 发表于 2006 年 08 月 13 日 | 4 条留言

Google Code Jam 入围赛

到今天中午12:00,为期一天的Google Code Jam入围赛已经结束。注册用户可以在这一天中任何时候开始比赛,时限为1小时,两道不同难度的题目。共有5套题目,25种不同组合。

我昨晚七点多开始做,居然平台上的插件都不能用了,所有代码都要手写,很不适应。第一题就花了半个小时,有点着急。第二题在半个小时内也完成了,但是还有bug。眼看着时间一分一秒地过去,只好提交了一个不正确的版本。提交后的两分钟,把bug找出来,给的测试数据都通过了,可惜已经不能再提交。。。

第一题只有130多分,已经不可能进入下一轮,我的Code Jam之路就这样结束了。实力确实不济,没有办法。即使勉强通过了资格赛,估计也难通过后面的淘汰赛。以后只能到TopCoder玩玩了,呵呵,当作是头脑体操也不错。

周围也有几个人参加了 Code Jam,情况不太理想,就Revv发挥不错,综合排名47,此外还有rogerz的马甲通过了资格赛。

davies 发表于 2005 年 12 月 13 日 | 3 条留言

收到TopCoder的奖金

昨天凌晨进行的TopCoder单轮比赛SRM276,我在房间内得分最高,今天凌晨察看用户信息时发现多了$36,好开心:-)

后来又收到一份邮件,通知获奖的事情,并告诉我该怎么做。TopCoder的网站上有如何支付奖金的说明:TopCoder Payment Methods and Requirements  先要到美国大使馆开具一份身份证明,并和纳税表单一起邮寄到TopCoder,然后再在60天之内到网站上确认支付。TopCoder的奖金需要纳30%的税,税后是$25.56。不知道这些税是交给那个国家,如果是中国就好了:-)

支付有三种方式:支票,手续费高;银行转帐,需要$20的手续费;PayPal,无需手续费,是最理想的支付方式。PayPal是一个网络支付平台,可以方便地进行电子商务交易,也可以与自己的银行卡互通。刚注册了一个PayPal帐户,并于招商银行的信用卡挂钩,还不太会用。Flickr网路相册专业帐号的年费也可以用PayPal支付,实在太好了。一年需要$24.95,正好满足,就准备这么花了:-)

rogerz实在太郁闷了,他在房间内排名第二,应该得到$24的奖金,而帐户信息却始终没有变化。后来经过仔细查询,发现该房间内的第二名奖金颁发给了第三名的选手。他给topcoder发信咨询这件事,目前还没有结果。在比赛之前,需要填一份协议,比如年龄是否满18周岁,是否是赞助商SAP的雇员等,说不定章鱼同学在仓惶之间填错了,成了不满18岁或者SAP的雇员,以致失去了获得奖金的资格。

Rogerz的积分还在1200之下,仍可以参加Division II的比赛,排到一个房间的前二应该比较容易,下回他估计还能拿点奖金,呵呵,期待:-) 我是没戏了,Division I 实在太难,目前只有做出第一题的实力。

davies 发表于 2005 年 12 月 10 日 | 7 条留言

再战TopCoder

上次参加了TopCoder的单轮比赛(Single Round Match 275),意犹未尽,一直期待着下一场。尤其是对上次的失误非常不满,真想早点一雪前耻:-)——什么是TopCoder?请看TopCoder——程序员的乐园和竞技场

昨晚,严格地说是今天凌晨,进行了我的第二次TopCoder征程:SRM 276。这次的队伍壮大了点,老友Binary从交大跑过来一起玩。给他在Lily的电脑上搭建了平台,宿舍三人同上阵Division II。刚过十二点,就开始了“刷刷刷”的敲键盘声音。电视都被给毙了,Lily一个人只好听歌,刚开始他还常几句,过来骚扰我一下,“我给你念题目吧”,真要由他念,我就只有交白卷的份了:-)

跟以前的情形有些类似,第一题是简单的数学题,将[0,a]的区间影射到[0,100],5分钟就完成了。第二题是排列组合,类似于装箱子或者找硬币,应该可以动态规划的办法解决,但是由于题目规模要求很小,最多N=5,我就用最笨的递归穷举来做,花了20分钟,慢了。后来看到高手的代码,原来用动态规划可以用很短的代码很快速的解决。第三题与之前做过的安排课程非常类似,轻车熟路,依次安排没有原来关系且字母顺序最小的课程,花了20分钟,主要是在数据类型的选择上一开始没有想清楚,反复修改。

rogerz第二题做得满了点,不过也在规定的时间内完成了三道题。Binary才是第一次参赛,不太适应写这种风格的算法程序,在第二题的编译提交时遇到了麻烦,Visual C++ 2005 Express下能编译通过,而GCC 4.0.2下却不行。

挑战环节我发现了两个人程序的bug,并用合理的测试数据将它们挑下,命中率100%,呵呵,挺好玩,以后还要加快看代码的速度。

chaoslawful只身奋战在Division I,情况不是很理想,只提交了第一题(估计是Division II 的第三题)。换了是我,估计也只能这样子,下次就要参加Division I了,有点怕怕,呵呵。

挑战环节之后应该是系统测试阶段,可收到系统消息说要解决挑战环节的系统bug,系统测试被延迟。等了近半小时还不见有动静,只好睡去。有点担心会通不过系统测试,不过实在太困,很快就着了。

尽早醒来,从rogerz那听到了很郁闷的消息,说我的第一题又失败了,真是大FAINT!怎么连续两次栽在同一个地方,估计又是计算是的精度问题。我为了节省计算量,先做除法运算以得到一个公共的因子,再做乘法并转成整数,估计是除法是的舍入误差在乘法时被放大,并导致取整后的结果不对。

让我想起了高中时参加的物理竞赛,初赛时成绩非常糟糕,挺容易的题目被我做得一塌糊涂,差点就没有复赛的资格了。“塞翁失马,焉知非福。”初赛时的失利让我甩掉了包袱,以最佳的状态进入复赛,最后超水平发挥,进而拿到了清华大学的录取通知书。那一役,改变了我的一生,深深地烙在我的脑海里,至今记忆犹新。

我的最后成绩是1124.14,在单个房间里还是最高分,所谓"瘦死的骆驼比马大",呵呵。积分升高到1352,快要接近chaoslawful的步伐(1364)了:-) rogerz的积分升高到1127。binary的积分已有1152,这回rogerz该不平衡了,哈哈。Revv太不上进,老久没动静了,谴责一下,呵呵。

这次比赛是由SAP赞助的,官方的文字上说Division II每个房间的第一二名有奖金,可到现在还没看到帐号上的money有变化,再等等看,可能会有10到20刀,哈哈。这里的钱是很不好兑现的,可能手续费比总金额还高,跟王垠拿到的那张Knuth的支票一样,可以用来长长脸,hoho

12月12日就是CodeJam 2006的海选,这两天在准备一下,起码得拿到进入下一轮的入场券嘛,否则就没得玩了。20号凌晨还有一场SRM277,也得准备一下,不要让我的第一次Division I死得太难看,被打回原形可不好:-)

davies 发表于 2005 年 12 月 9 日 | 3 条留言

上一页 | 第 2 / 6 页 | 下一页