查看: 29450|回复: 278

[精华] 2011复活节就要到了,来个最短源代码比赛吧![22日23点59分及之前提交代码都行!]

 关闭 [复制链接]
招聘 : 系统分析师
论坛徽章:
484
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
发表于 2011-4-18 23:09 | 显示全部楼层 |阅读模式
本周日,也就是4月24日,是今年的复活节,复活节(Easter),是纪念耶稣基督复活的节日,西方信基督教的国家都过这个节。
复活节的日期是不固定的在西方教会传统里,春分之后第一次满月之后的第一个星期日即为复活节。东方教会则规定,如果满月恰逢星期日,则复活节再推迟一周。因此,节期大致在3月22日至4月25日之间。复活节是最古老最有意义的基督教节日之一,庆祝的是基督的复活,世界各地的基督徒每年都要举行庆祝。

节日的算法也不劳大家去找了
现在有一个简便的算法供大家参考!

年份只限于1900年到2099年
1 设要求的那一年是Y年,从Y减去1900,其差记为N。
2 用19作除数去除N,余数记为A。
3 用4作除数去除N,不管余数,把商记为Q。
4 用19去除7A+1,把商记为B,不管余数。
5 用29去除11A+4-B,余数记为M。
6 用7去除N+Q+31-M,余数记为W。
7 计算25-M-W。

得出答数即可定出复活节的日期。若为正数,月份为4月,如为负数,月份为3月。若为0,则为3 月31日。


现在提出比赛要求:
  • 用最短的代码,求出2011~2099之间的复活节,具体为:
    • Q1:2011~2099之间每一年的复活节的具体日期
    • Q2:2011~2099之间,几月几号出现得最多?3月出现得最多的是几号?4月出现得最多的又是几号?分别出现了多少次?
    • Q3:2011~2099之间的复活节,3月22日至4月25日之间哪些日子没有出现过?
    • Q4:2011~2099之间“愚蛋节”的总次数,即4月1日同时又是复活节的总数量以及都在哪些年份出现。
  • 答案要求用Package给出,package名为easter:
    • package声明为create or replace package easter
    • Q1的声明为procedure showAllEasterDay,无参数,输出为一列表,形式如下所示:
      YEAR     DAY
      2011    04-24
      2012    04-08
      …………
    • Q2的声明为procedure showMaxOccurenceEasterDay,无参数,输出为一行数据,日期后面跟着输出出现的次数,如果是多个日期,则按从小到达,用“/”分隔显示,形式如下所示:
      MAXOCC   MO_CNT        MAXOCC_3   MO3_CNT              MAXOCC_4          MO4_CNT   
      xx-xx                x1               03-xx                 x2            04-xx/04-yy                       x3
    • Q3的声明为procedure showLeapEasterDay,无参数,连续未出现的日期用一行显示,输出为一列表,形式如下所示:
      ABSENT_START      ABSENT_END
      03-22                             03-25
      04-02                             04-02
      04-11                             04-22
      ………………(以上为示例数据,并非真实数据)
    • Q4的声明为procedure showFoolEasterDay,无参数,输出为一列表,形式如下所示(假设出现了n次):
      YEAR        TOTAL
      yyyy1            n
      yyyy2            n
      …………
      yyyyn            n
  • 包名和Q1~Q4的四个过程必须按约定给出,若需要在包中加入其他过程,请自便,但需要注意,目标是源代码字节数最小哦!空格、TAB、CR、LF都不算字节数,代码中不要包含注释,注释请写在另外的文件中,4月22日提交你的结果,期间可在本帖随意show你的代码的字节数
特别注意:此次比赛终于有奖品了,奖品暂时保密

相关答疑在2楼,其余未尽事宜可参考 http://www.itpub.net/viewthread.php?tid=977079&extra=page%3D5%26amp%3Bfilter%3Ddigest

本人保留随时更新2楼的权力与义务

[ 本帖最后由 lastwinner 于 2011-4-21 23:14 编辑 ]
招聘 : 系统分析师
论坛徽章:
484
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
 楼主| 发表于 2011-4-18 23:10 | 显示全部楼层
结果出来啦,欢迎到 http://www.itpub.net/thread-1425009-1-1.html 去围观!
————————————————————————————————————————————————————
欢迎提供计算代码长度的脚本,呵呵
在newkid提供的基础上修改的:
SELECT SUM(LENGTH(REPLACE(REPLACE(REPLACE(REPLACE(TEXT,' '),CHR(9)),CHR(10)),CHR(13)))) bytes FROM USER_SOURCE WHERE NAME='EASTER';


本楼同时作为补充楼,白天较忙,可能没时间关注,晚上会来为大家解答疑问的

————————————————————————————————————————————
截至2011-04-19 20:09
cow977            1474
rollingpig          1532
niuxxf               1587
newkid             1945

————————————————————————————————————————————
Q:SQL?
A:package中除了用pl/sql外,也允许用sql

Q:人肉?
A:表,还是代码吧,人肉太残酷了

Q:wrap?
A:表,wrap后的代码不是源代码

Q:直接贴结果?
A:表,还是计算出来的才好,直接贴结果不可以的

Q:表?
A:表!还有视图等等,都是不可以的,但可以调用Oracle的内置公开对象,隐含寓意就是该package在任何schema下都能独立运行

Q:人肉怎么定?
A:一切都需要计算得出,不能通过推理得出哪怕是中间结果。例如2099-1900=199,这个199需要用减法算式得出,而不能直接写199.


Q:把四个过程公用的在初始化的时候做,可以不?
A:这个不禁止

Q:输出中,要包含那个标题头的行吗?
A:需要包含

Q:如果包含各列的内容是否需要对齐?
A:需要对齐,但大体上对齐就行了,一列的内容不串列不占多列就行

Q:代码怎么提交?
A:4月22日那天在本帖提交就行

Q:期间允许交流么?
A:可以交流,但仅限于结果,不能交流具体的算法实现

Q:Oracle的版本?
A:Oracle 10.2.0.4 最好啦~因为我的机器上就是这版本。不过其他的也没关系,这次比赛是个小游戏,不用太较真

[ 本帖最后由 lastwinner 于 2011-5-9 00:20 编辑 ]

使用道具 举报

回复
论坛徽章:
540
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2011-4-18 23:18 | 显示全部楼层
没有奖品,把你的章贡献出来不就有了?

使用道具 举报

回复
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
发表于 2011-4-18 23:27 | 显示全部楼层
原帖由 newkid 于 2011-4-18 23:18 发表
没有奖品,把你的章贡献出来不就有了?

使用道具 举报

回复
论坛徽章:
540
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2011-4-18 23:44 | 显示全部楼层
以前那个比赛禁止使用SQL, 这个呢?

使用道具 举报

回复
认证徽章
论坛徽章:
17
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ITPUB14周年纪念章
日期:2015-10-26 17:23:44itpub13周年纪念徽章
日期:2014-10-08 15:17:53itpub13周年纪念徽章
日期:2014-10-08 15:17:53itpub13周年纪念徽章
日期:2014-10-08 15:17:53itpub13周年纪念徽章
日期:2014-10-08 15:17:532013年新春福章
日期:2013-04-08 17:42:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32奥运会纪念徽章:皮划艇激流回旋
日期:2012-09-18 11:19:40奥运会纪念徽章:花样游泳
日期:2012-08-22 18:26:54
发表于 2011-4-18 23:51 | 显示全部楼层
1 洋节
2 没奖品
所以没兴趣

使用道具 举报

回复
论坛徽章:
540
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2011-4-18 23:57 | 显示全部楼层
原帖由 yaots 于 2011-4-18 23:51 发表
1 洋节
2 没奖品
所以没兴趣

看中楼主哪个章我替你抢过来。

使用道具 举报

回复
论坛徽章:
540
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2011-4-19 00:00 | 显示全部楼层
Q2有多个日期怎么办?

计算长度:
SELECT SUM(LENGTH(REPLACE(REPLACE(TEXT,' '),CHR(9)))) FROM USER_SOURCE WHERE NAME='EASTER'

使用道具 举报

回复
招聘 : 系统分析师
论坛徽章:
484
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
 楼主| 发表于 2011-4-19 00:11 | 显示全部楼层
原帖由 newkid 于 11-4-19 00:00 发表
Q2有多个日期怎么办?

计算长度:
SELECT SUM(LENGTH(REPLACE(REPLACE(TEXT,' '),CHR(9)))) FROM USER_SOURCE WHERE NAME='EASTER'


洗漱时想到了,这就补充上去
并列,从小到大显示出来

使用道具 举报

回复
招聘 : 系统分析师
论坛徽章:
484
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
 楼主| 发表于 2011-4-19 00:18 | 显示全部楼层
原帖由 newkid 于 11-4-18 23:18 发表
没有奖品,把你的章贡献出来不就有了?



我的章只进不出

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表