楼主: nyfor

[精华] 最小源代码擂台

[复制链接]
论坛徽章:
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
321#
 楼主| 发表于 2008-5-26 09:21 | 只看该作者
create or replace function my_add_months
(
   p_date_string varchar2,
   p_months      number
) return varchar2 is
   c int := 100;
   a int := p_date_string;
   y int := a / c / c;
   m int := a / c - y * c;
   t int;
   procedure p is
   begin
      t := substr(525454554545, m, 1);
      t := t + 26 + 1 / (t + mod(y, 4) + instr(0, mod(y, c)) * mod(y, 400));
   end;
begin
   p;
   a := mod(a, c);
   a := trunc(a / t) * c + a;
   m := m + p_months + y * 12 - 7;
   y := m / 12;
   m := m - y * 12 + 7;
   p;
   return y * c * c + m * c + least(a, t);
end;

Congratulation ... Code Length: 348 Bytes. Times: 00:00:21

使用道具 举报

回复
论坛徽章:
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
322#
 楼主| 发表于 2008-5-26 09:23 | 只看该作者
原帖由 DragonBill 于 2008-5-26 09:20 发表
不等飞机男(sdxiong)了?, 那我就把Codes贴上来.

他的后贴也没关系 不等他再来缩短源码了

使用道具 举报

回复
论坛徽章:
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
323#
发表于 2008-5-26 09:23 | 只看该作者
--Congratulation ... Code Length: 344 Bytes. Times: 00:00:08
--(在公司的Server端用最新Test Case得到的评测结果)
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 := MOD(C/H, 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;

   M := MOD(Z - 1, 12) + 1;
   Y := (Z - M) / 12;
   Z := C;

   P;

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

使用道具 举报

回复
论坛徽章:
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
324#
发表于 2008-5-26 09:24 | 只看该作者
--Congratulation ... Code Length: 339 Bytes. Times: 00:00:08
--(在公司的Server端用最新Test Case得到的评测结果)
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 := MOD(C/H, 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;

   M := MOD(Z - 1, 12) + 1;
   Y := (Z - M) / 12;
   Z := D/C/2;

   P;

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

使用道具 举报

回复
论坛徽章:
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
325#
发表于 2008-5-26 09:25 | 只看该作者
339与344的差别在于前者利用了隐式转换以代替后者的TRUNC

使用道具 举报

回复
论坛徽章:
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
326#
发表于 2008-5-26 09:26 | 只看该作者
真是算法各逞风骚

使用道具 举报

回复
论坛徽章:
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
327#
发表于 2008-5-26 09:29 | 只看该作者
借签你算月的方法可以再减少3个Byte

使用道具 举报

回复
论坛徽章:
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
328#
发表于 2008-5-26 09:30 | 只看该作者
肓点肓点, 光记得优化闰年和求当前月去了

使用道具 举报

回复
论坛徽章:
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
329#
发表于 2008-5-26 09:31 | 只看该作者
原帖由 DragonBill 于 2008-5-26 09:06 发表
昨夜本人看完"同行杀机"后, 想到了一个办法, 可以缩短到339, 如下:

Congratulation ... Code Length: 339 Bytes. Times: 00:00:08

无奈已到2008-05-26 0:38.

BT啊

使用道具 举报

回复
论坛徽章:
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
330#
发表于 2008-5-26 09:33 | 只看该作者
学习nyfor的Codes ing.....

使用道具 举报

回复

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

本版积分规则 发表回复

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