楼主: nyfor

[精华] 最小源代码擂台

[复制链接]
论坛徽章:
5
奥运会纪念徽章:摔跤
日期:2008-07-02 08:48:392009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2013-12-18 09:29:11SQL数据库编程大师
日期:2016-01-13 10:30:43SQL大赛参与纪念
日期:2016-01-13 10:32:19
371#
发表于 2008-5-26 10:51 | 只看该作者
原帖由 DragonBill 于 2008-5-26 10:50 发表


Ft, 我咋就没捡的??
你不知道那是啥?  打劫


你好像有12个哦
劫贫济富,我BS你

使用道具 举报

回复
论坛徽章:
5
奥运会纪念徽章:摔跤
日期:2008-07-02 08:48:392009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2013-12-18 09:29:11SQL数据库编程大师
日期:2016-01-13 10:30:43SQL大赛参与纪念
日期:2016-01-13 10:32:19
372#
发表于 2008-5-26 10:53 | 只看该作者

回复 #316 hotiice 的帖子

SQL> /
Congratulation ... Code Length: 510 Bytes. Times: 00:00:04

调用完成。

已用时间:  00: 00: 04.50
SQL> /
Congratulation ... Code Length: 510 Bytes. Times: 00:00:04

调用完成。

已用时间:  00: 00: 04.46
SQL> /
Congratulation ... Code Length: 510 Bytes. Times: 00:00:04

调用完成。

已用时间:  00: 00: 04.46
SQL> /
Congratulation ... Code Length: 510 Bytes. Times: 00:00:04

调用完成。

已用时间:  00: 00: 04.46

使用道具 举报

回复
论坛徽章:
5
奥运会纪念徽章:摔跤
日期:2008-07-02 08:48:392009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2013-12-18 09:29:11SQL数据库编程大师
日期:2016-01-13 10:30:43SQL大赛参与纪念
日期:2016-01-13 10:32:19
373#
发表于 2008-5-26 10:54 | 只看该作者

回复 #333 谁 的帖子

SQL> /
Congratulation ... Code Length: 555 Bytes. Times: 00:00:03

调用完成。

已用时间:  00: 00: 03.40
SQL> /
Congratulation ... Code Length: 555 Bytes. Times: 00:00:03

调用完成。

已用时间:  00: 00: 03.39
SQL> /
Congratulation ... Code Length: 555 Bytes. Times: 00:00:03

调用完成。

已用时间:  00: 00: 03.39
SQL> /
Congratulation ... Code Length: 555 Bytes. Times: 00:00:03

调用完成。

已用时间:  00: 00: 03.37



偶的效率还可以

使用道具 举报

回复
论坛徽章:
5
奥运会纪念徽章:摔跤
日期:2008-07-02 08:48:392009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2013-12-18 09:29:11SQL数据库编程大师
日期:2016-01-13 10:30:43SQL大赛参与纪念
日期:2016-01-13 10:32:19
374#
发表于 2008-5-26 10:56 | 只看该作者

回复 #325 DragonBill 的帖子

SQL> /
Congratulation ... Code Length: 344 Bytes. Times: 00:00:04

调用完成。

已用时间:  00: 00: 04.01
SQL> /
Congratulation ... Code Length: 344 Bytes. Times: 00:00:04

调用完成。

已用时间:  00: 00: 03.96
SQL> /
Congratulation ... Code Length: 344 Bytes. Times: 00:00:04

调用完成。

已用时间:  00: 00: 03.96
SQL> /
Congratulation ... Code Length: 344 Bytes. Times: 00:00:04

调用完成。

已用时间:  00: 00: 03.95

使用道具 举报

回复
论坛徽章:
69
生肖徽章2007版:羊
日期:2008-11-14 14:42:19复活蛋
日期:2011-08-06 08:59:05ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主4段
日期:2012-05-15 15:24:11
375#
 楼主| 发表于 2008-5-26 11:06 | 只看该作者
原帖由 DragonBill 于 2008-5-26 10:30 发表
现在可以飚到329了

--Congratulation ... Code Length: 329 Bytes. Times: 00:00:08
create or replace function my_add_months(p_date_string varchar2,
                                         p_months      number)
  return varchar2
AS
   C INT := p_date_string;
   H INT := 100;
   Y INT := C/H/H;
   M INT := C/H - Y * H;
   D INT := MOD(C, H);
   Z INT := Y * 12 + M + p_months;

   PROCEDURE P
   AS
   BEGIN
      C := 27 + SUBSTR(43434434342 - SIGN(MOD(Y, 16 - 4 * INSTR(Y/H,'.'))), 1 - M, 1);
   END;

BEGIN

   P;

   Y := (Z - 7) / 12;
   M := Z - Y * 12;
   Z := D/C/2;

   P;

   RETURN Y*H*H + M*H + LEAST(D + Z * 3, C);
END;
/

刚想到 LEAST(D + Z * 3, C) 改为 LEAST(C,Z||D) 可以再次减少一个字节 到 288

使用道具 举报

回复
论坛徽章:
3
奥运会纪念徽章:射箭
日期:2008-04-25 10:30:10奥运会纪念徽章:拳击
日期:2008-05-27 21:28:57奥运会纪念徽章:跳水
日期:2008-06-02 09:49:10
376#
发表于 2008-5-26 11:07 | 只看该作者
晕。。。。。还以为有1000PUB币呢。。。。跌到了第三名

使用道具 举报

回复
论坛徽章:
5
奥运会纪念徽章:摔跤
日期:2008-07-02 08:48:392009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2013-12-18 09:29:11SQL数据库编程大师
日期:2016-01-13 10:30:43SQL大赛参与纪念
日期:2016-01-13 10:32:19
377#
发表于 2008-5-26 11:08 | 只看该作者
原帖由 于 2008-5-26 09:44 发表
我的算法思路和hotiice差不多
不过字节比他的多多了

CREATE OR REPLACE function SYSTEM.my_add_months(p_date_string varchar2, p_months number) return varchar2 IS
t int:=p_date_string;
l int:=100;
y int:= t/l/l; m int:= mod(t/l,l); d int:= mod(t,l);
BEGIN
   t := case when m=2 and d>=28 then case when not ((mod(y,4)=0 and mod(y,25)>0 or mod(y,16)=0) and d=28) then 1 end
             when m in(4,6,9,11) and d=30 then 1 when d=31 then 1 end;
   m := m+p_months;
   y := trunc(y+(m-1)/12);
   m := mod(mod(m,12)+11,12)+1;
   l:=28;
   if mod(y,4)=0 and (mod(y,25)>0 or mod(y,16)=0) then l:=29; end if;
   d := case when m in(4,6,9,11) and (d>30 or t=1) then 30
        when m=2 and (d>l or t=1) then l
        when t=1 then 31
        else d end;
   RETURN y||lpad(m,2,'0')||d;
END;
/


SQL> /
Congratulation ... Code Length: 538 Bytes. Times: 00:00:04


这是按我的算法思路走,最少的字节数了吧
当然我的最终成绩,还是按照555字节来定
这三个数,也好听



更少的是这个

CREATE OR REPLACE function my_add_months(p_date_string varchar2, p_months number) return varchar2 IS
t int:=p_date_string;
l int:=100;
y int:= t/l/l; m int:= mod(t/l,l); d int:= 31-mod(t,l);
BEGIN
   t := case when m=2 and d<4 then case when not ((mod(y,4)=0 and mod(y,25)>0 or mod(y,16)=0) and d=3) then 1 end
             when m in(4,6,9,11) and d=1 or d=0 then 1 end;
   m := m+p_months;
   y := y+(m-7)/12;
   m := mod(mod(m,12)+11,12)+1;
   l:=3;
   if mod(y,4)=0 and (mod(y,25)>0 or mod(y,16)=0) then l:=2; end if;
   d := case when m in(4,6,9,11) and (d<1 or t=1) then 1
        when m=2 and (d<l or t=1) then l
        when t=1 then 0
        else d end;
   RETURN y*10000+m*100+31-d;
END;
/

同时还拒绝了漏洞

SQL> /
Congratulation ... Code Length: 516 Bytes. Times: 00:00:03

调用完成。

已用时间:  00: 00: 03.25
SQL> /
Congratulation ... Code Length: 516 Bytes. Times: 00:00:03

调用完成。

已用时间:  00: 00: 03.21
SQL> /
Congratulation ... Code Length: 516 Bytes. Times: 00:00:03

调用完成。

已用时间:  00: 00: 03.21
SQL> /
Congratulation ... Code Length: 516 Bytes. Times: 00:00:03

调用完成。

已用时间:  00: 00: 03.21

使用道具 举报

回复
论坛徽章:
3
奥运会纪念徽章:射箭
日期:2008-04-25 10:30:10奥运会纪念徽章:拳击
日期:2008-05-27 21:28:57奥运会纪念徽章:跳水
日期:2008-06-02 09:49:10
378#
发表于 2008-5-26 11:09 | 只看该作者
CREATE OR REPLACE FUNCTION MY_ADD_MONTHS(P_DATE_STRING VARCHAR2,
                                         P_MONTHS      NUMBER)
  RETURN VARCHAR2 IS
  H INT := 100;
  S INT := P_DATE_STRING;
  Y INT := S/H/H;
  M INT := S/H MOD H;
  D INT := S MOD H;

  PROCEDURE P IS
  BEGIN
    S := 28 + 3232332323030 / 10**M MOD 10;
    IF M=2 AND (Y MOD 400 = 0 OR Y MOD 4 < Y MOD H / H) THEN
       S := 29;
    END IF;
  END;

BEGIN

  P;
  D := D + D * INSTR(D,S);

  M := Y*12+M+P_MONTHS;
  Y := M/12-.55;
  M := M-Y*12;

  P;
  D := LEAST(D,S);

  RETURN Y*H*H + M*H + D;

END;
/

使用道具 举报

回复
论坛徽章:
5
奥运会纪念徽章:摔跤
日期:2008-07-02 08:48:392009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2013-12-18 09:29:11SQL数据库编程大师
日期:2016-01-13 10:30:43SQL大赛参与纪念
日期:2016-01-13 10:32:19
379#
发表于 2008-5-26 11:09 | 只看该作者
原帖由 nyfor 于 2008-5-26 11:06 发表

刚想到 LEAST(D + Z * 3, C) 改为 LEAST(C,Z||D) 可以再次减少一个字节 到 288



太强悍了

btw:应该是328吧?

使用道具 举报

回复
论坛徽章:
18
生肖徽章2007版:虎
日期:2008-04-11 18:37:24奥运会纪念徽章:击剑
日期:2008-07-03 11:38:17迷宫蛋
日期:2011-05-10 13:03:40茶鸡蛋
日期:2011-05-10 13:05:16蜘蛛蛋
日期:2011-05-10 13:07:01灰彻蛋
日期:2012-12-10 11:47:16鲜花蛋
日期:2013-07-07 10:07:20
380#
发表于 2008-5-26 11:11 | 只看该作者
原帖由 nyfor 于 2008-5-26 11:06 发表

刚想到 LEAST(D + Z * 3, C) 改为 LEAST(C,Z||D) 可以再次减少一个字节 到 288



288??

使用道具 举报

回复

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

本版积分规则 发表回复

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