2011年4月的某一天,我正在玩苹果的Zombie Farm游戏,突然发现他有了新版本0.87,很好奇就上iTunes看了一下,结果发现是为了复活节而制作的新版本。玩了几天后,突然很想知道复活节是哪一天,于是上网一查,哇,原来是不固定的,于是就有了这个帖——
2011复活节就要到了,来个最短源代码比赛吧!
由于马上就要到复活节了,所以答题时间给得很有限,规则也很粗放。但很意外也很高兴能有这么多朋友来参与这个小游戏,在此谢谢大家。没奖品似乎大家都不怎么买账,于是想到了复活节的彩蛋,跟老虎申请了一下,并麻烦了贝贝和风子两位MM制作复活节彩蛋章,以作为奖品发给优胜者,在此一并致谢。
我的本意在诸多人对规则的质询下逐渐清晰化和明确化,是“ 用最短的代码给出要求解决的四个问题的答案,所有已知条件只有题目给出的算法、复活节日期限制、算法的年份限制及Oracle10gR2的一切内置对象,生成的package在任何schema下都能正确运行出结果,除了复活节日期的算法等价变换或者使用新算法,其他一切都需要计算得出,包括2099-2011+1=89这样的结果都要计算给出”。
虽因工作繁忙故而未在开始就制定出清晰明确的规则,但我仍深深感受到了单凭一人的思维是很受制约的。
下面开始评审。
——————————————————————————————————————————————————————
一、选手代码
本次共收到9位选手的答案,他们是cow977、newkid、niuxxf、nyfor、〇〇、regonly1、rollingpig、xqmei、yangtingkun
这是他们的参赛代码:
jiqing1004虽然在帖子中回复过他的代码字节数,但很不幸,他未在截止时间前提交回答。DragonBill是老朋友了, nyfor组织的第一次最短源代码比赛他就参与过,也取得了很牛的成绩,不过他这次来晚了
hudingchen、cszxheap 、jboracle1981 等同学也积极参与了活动,但也一样未提交代码。不过没关系,“比赛第二,学习第一!”
二、评选标准
自然,最短的就是最佳的,计算方法为
SELECT SUM(LENGTH(REPLACE(REPLACE(REPLACE(REPLACE(TEXT,' '),CHR(9)),CHR(10)),CHR(13)))) bytes FROM USER_SOURCE WHERE NAME='EASTER';
当然,滚珠同学提供了一个更好的办法:
select sum(length(translate(text,'A'||chr(32)||chr(10)||chr(9)||chr(13),'A')))
from user_source
where name='EASTER' and trim(text) not like '--%';
这个办法也是开发板常见的技巧。注意,两个sql是不等价的,滚珠提供的方法还可以不计算单行注释。
很显然,根据题目要求来看,这个计算方法是有漏洞的,但我绝没想到有 这么大的漏洞。
相关的评审规则在原帖的2楼中已有说明,未在其中说明的,视具体情况做处理。
三、代码评判
A、源代码字节长度:
1476:cow977
1294:newkid(含有11g的listagg函数,10g下无法运行,所以用的newkid自己提供的字节数)
1640:niuxxf
1228:nyfor
1433:〇〇
1446:regonly1
1324:rollingpig
1538:xqmei
1388:yangtingkun(其实也是11g,不过由于用了动态SQL,所以在10g可以创建成功)
B、源代码初感:
共性问题:
1、子类型定义为varchar2(xx)(xx代表不超过99的正整数)是不确切的,根据抽屉原则无法确定showMaxOccurenceEasterDay中的日期列表不会超过16个
2、部分代码有经过人肉后得出的结果,例如滚珠代码中有用s(Y)=11来判断是否是愚人节
3、字符串的NULL其实可以用''替代
每个人的就不细评了,有什么要发表的意见我已经在各位的结果帖中说了,呵呵。
四、奖项
奖品是 复活节彩蛋章,已经由 风子 MM制作完成,下周应该能上线了。
奖项如下:
全套彩蛋章:(一套,10枚)
nyfor、newkid
活动参与章:(随机发放3枚)
cow977、niuxxf、〇〇、regonly1、rollingpig、xqmei、yangtingkun、DragonBill
这只是一个小游戏,大家能在此过程吸收并学习到他人的精妙方法,就是最大的收获,再次感谢各位朋友的支持与参与!!!
[ 本帖最后由 lastwinner 于 2011-5-9 00:06 编辑 ]
由于马上就要到复活节了,所以答题时间给得很有限,规则也很粗放。但很意外也很高兴能有这么多朋友来参与这个小游戏,在此谢谢大家。没奖品似乎大家都不怎么买账,于是想到了复活节的彩蛋,跟老虎申请了一下,并麻烦了贝贝和风子两位MM制作复活节彩蛋章,以作为奖品发给优胜者,在此一并致谢。
我的本意在诸多人对规则的质询下逐渐清晰化和明确化,是“ 用最短的代码给出要求解决的四个问题的答案,所有已知条件只有题目给出的算法、复活节日期限制、算法的年份限制及Oracle10gR2的一切内置对象,生成的package在任何schema下都能正确运行出结果,除了复活节日期的算法等价变换或者使用新算法,其他一切都需要计算得出,包括2099-2011+1=89这样的结果都要计算给出”。
虽因工作繁忙故而未在开始就制定出清晰明确的规则,但我仍深深感受到了单凭一人的思维是很受制约的。
下面开始评审。
——————————————————————————————————————————————————————
一、选手代码
本次共收到9位选手的答案,他们是cow977、newkid、niuxxf、nyfor、〇〇、regonly1、rollingpig、xqmei、yangtingkun
这是他们的参赛代码:
easter_all.rar
(2011-05-08 19:51:03, Size: 9.39 KB, Downloads: 1)
jiqing1004虽然在帖子中回复过他的代码字节数,但很不幸,他未在截止时间前提交回答。DragonBill是老朋友了, nyfor组织的第一次最短源代码比赛他就参与过,也取得了很牛的成绩,不过他这次来晚了
hudingchen、cszxheap 、jboracle1981 等同学也积极参与了活动,但也一样未提交代码。不过没关系,“比赛第二,学习第一!”
二、评选标准
自然,最短的就是最佳的,计算方法为
SELECT SUM(LENGTH(REPLACE(REPLACE(REPLACE(REPLACE(TEXT,' '),CHR(9)),CHR(10)),CHR(13)))) bytes FROM USER_SOURCE WHERE NAME='EASTER';
当然,滚珠同学提供了一个更好的办法:
select sum(length(translate(text,'A'||chr(32)||chr(10)||chr(9)||chr(13),'A')))
from user_source
where name='EASTER' and trim(text) not like '--%';
这个办法也是开发板常见的技巧。注意,两个sql是不等价的,滚珠提供的方法还可以不计算单行注释。
很显然,根据题目要求来看,这个计算方法是有漏洞的,但我绝没想到有 这么大的漏洞。
相关的评审规则在原帖的2楼中已有说明,未在其中说明的,视具体情况做处理。
三、代码评判
A、源代码字节长度:
1476:cow977
1294:newkid(含有11g的listagg函数,10g下无法运行,所以用的newkid自己提供的字节数)
1640:niuxxf
1228:nyfor
1433:〇〇
1446:regonly1
1324:rollingpig
1538:xqmei
1388:yangtingkun(其实也是11g,不过由于用了动态SQL,所以在10g可以创建成功)
B、源代码初感:
共性问题:
1、子类型定义为varchar2(xx)(xx代表不超过99的正整数)是不确切的,根据抽屉原则无法确定showMaxOccurenceEasterDay中的日期列表不会超过16个
2、部分代码有经过人肉后得出的结果,例如滚珠代码中有用s(Y)=11来判断是否是愚人节
3、字符串的NULL其实可以用''替代
每个人的就不细评了,有什么要发表的意见我已经在各位的结果帖中说了,呵呵。
四、奖项
奖品是 复活节彩蛋章,已经由 风子 MM制作完成,下周应该能上线了。
奖项如下:
全套彩蛋章:(一套,10枚)
nyfor、newkid
活动参与章:(随机发放3枚)
cow977、niuxxf、〇〇、regonly1、rollingpig、xqmei、yangtingkun、DragonBill
这只是一个小游戏,大家能在此过程吸收并学习到他人的精妙方法,就是最大的收获,再次感谢各位朋友的支持与参与!!!
[ 本帖最后由 lastwinner 于 2011-5-9 00:06 编辑 ]
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29867/viewspace-694779/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29867/viewspace-694779/