2011复活节就要到了,来个最短源代码比赛吧!

本周日,也就是4月24日,是今年的复活节,复活节(Easter),是纪念耶稣基督复活的节日,西方信基督教的国家都过这个节。
复活节的日期是不固定的在西方教会传统里,春分之后第一次满月之后的第一个星期日即为复活节。东方教会则规定,如果满月恰逢星期日,则复活节再推迟一周。因此,节期大致在3月22日至4月25日之间。复活节是最古老最有意义的基督教节日之一,庆祝的是基督的复活,世界各地的基督徒每年都要举行庆祝。

节日的算法也不劳大家去找了

QUOTE:

现在有一个简便的算法供大家参考!

年份只限于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日。
现在提出比赛要求:
  1. 用最短的代码,求出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,无参数,输出为一列表,形式如下所示:
    YEAR        TOTAL
    yyyy1            xx
    yyyy2            xx
    …………
    yyyyn            xx
包名和Q1~Q4的四个过程必须按约定给出,若需要在包中加入其他过程,请自便,但需要注意,目标是源代码字节数最小哦!空格、TAB、CR、LF都不算字节数,代码中不要包含注释,注释请写在另外的文件中,4月22日提交你的结果,期间可在本帖随意show你的代码的字节数 14.gif特别注意:此次比赛没有奖品
未尽事宜可参考 http://www.itpub.net/viewthread.php?tid=977079&extra=page%3D5%26amp%3Bfilter%3Ddigest ,俺困了,今天先睡觉去了 13.gif

[ 本帖最后由 lastwinner 于 2011-4-19 00:17 编辑 ]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29867/viewspace-692800/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29867/viewspace-692800/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值