12
返回列表 发新帖
楼主: solomon_007

[精华] 2012感恩节最短源代码比赛solomon_007代码解析

[复制链接]
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
11#
发表于 2012-12-4 13:35 | 只看该作者
solomon_007 发表于 2012-12-4 12:58
3,4,5 都只要保证3个,6,7就要求保证4个,8,9要保证5个。。。。

N格的情况需要保证这个N个当中每个格子都可以找到至少有一条M个格子相连的路径
N和M的关系为
M=trunc(N/2)+1

所以对于N=3个格子情况,实际上只需要保证每个格子都可以找到至少一条与2个格子就行了

使用道具 举报

回复
论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
12#
 楼主| 发表于 2012-12-4 13:35 | 只看该作者
lastwinner 发表于 2012-12-4 13:31
这是我根据对称性推断出的,有效减少尝试次数,必能大大提高代码运行效率

原来要42秒,现在只要1秒啊

使用道具 举报

回复
论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
13#
 楼主| 发表于 2012-12-4 13:38 | 只看该作者
lastwinner 发表于 2012-12-4 13:35
N格的情况需要保证这个N个当中每个格子都可以找到至少有一条M个格子相连的路径
N和M的关系为
M=trunc(N ...

对,你的描述更精确!

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
14#
发表于 2012-12-4 13:53 | 只看该作者
solomon_007 发表于 2012-12-4 13:33
我参赛的里面,那个游标条件是

a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y=5   

你这个思路还有可以改进的地方采用上述区域后,实际上如果我做这个题,我会在上述区域内考察如下情况:
  • 5个方块横向连接在一起
  • 4个方块横向连接在一起,1个方块在横向放置的这4个方块或上或下的不同位置放置
  • 3个方块横向连接在一起,2个方块在横向放置的这3个方块或上或下的不同位置放置
  • 至于2个方块和1个方块横向连接的就不用考虑了,因为通过上述三种情况得到的形状,经过旋转后就可得到,所以不必特殊考虑
  • 旋转、镜像以上所得的形状,然后去重,即可得到所有系列的所有形状


这样处理后,你的代码框架可能会发生变化,但是效率还能更进一步提高。比如newkid在 http://www.itpub.net/forum.php?mod=viewthread&tid=1745501 提出的8个格子,你按你现在的思路去处理,估计还是会很耗费时间的

使用道具 举报

回复
论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
15#
 楼主| 发表于 2012-12-4 14:06 | 只看该作者
lastwinner 发表于 2012-12-4 13:53
你这个思路还有可以改进的地方采用上述区域后,实际上如果我做这个题,我会在上述区域内考察如下情况:[/ ...

  with q as (select rownum-1 r from dual connect by level <3),
         p as (select a.r u,b.r v,c.r w,d.r x,e.r y from q a,q b,q c,q d,q e),
         t as (select a.u a,a.v b,a.w c,a.x d,a.y e,
                      b.u f,b.v g,b.w h,b.x i,b.y j,
                      c.u k,c.v l,c.w m,c.x n,c.y o,
                      d.u p,d.v q,d.w r,d.x s,d.y t,
                      e.u u,e.v v,e.w w,e.x x,e.y y
                 from p a,p b,p c,p d,p e)
  select count(1)
    from t
   where a+b+c+d+e+f+g+h+i+k+l+m+p+q+u=5               
     and a+b+c+d+e>0                                                        
     and a+f+k+p+u>0
     and v=0                                                               
     and r=0                                                               
     and n=0
     and j=0
     and w=0
     and s=0
     and o=0
     and x=0
     and t=0
     and y=0;
     and (   (a=1 and b=1 and c=1 and d=1 and e=1) --横着5个为1
          or (a=1 and b=1 and c=1 and d=1 and (f=1 or g=1 or h=1 or i=1) --横着4个为1
          or (   (k=1 and l=1 and m=1)
              or (f=1 and g=1 and h=1 ........--这样写有点多
              )
         )

使用道具 举报

回复
论坛徽章:
1
咸鸭蛋
日期:2013-01-10 11:07:32
16#
发表于 2012-12-4 15:37 | 只看该作者

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
17#
发表于 2012-12-5 02:42 | 只看该作者
solomon_007 发表于 2012-12-4 14:06
with q as (select rownum-1 r from dual connect by level 0                                        ...

f=1 or g=1 or h=1 or i=1
可以简化为
1 in (f,g,h,i)

btw,有规律的代码可以用代码生成,然后动态执行,一样省字节

使用道具 举报

回复
论坛徽章:
27
ITPUB官方微博粉丝徽章
日期:2011-08-17 10:35:36托尼托尼·乔巴
日期:2017-10-25 16:45:57秀才
日期:2017-04-05 13:18:06秀才
日期:2017-03-02 10:35:322016猴年福章
日期:2016-02-23 09:58:342016猴年福章
日期:2016-02-18 09:31:302015年新春福章
日期:2015-03-06 11:57:312014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:31
18#
发表于 2012-12-5 08:43 | 只看该作者
本帖最后由 gyhgood 于 2012-12-5 08:43 编辑

来支持猫猫一下~

使用道具 举报

回复
论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
19#
 楼主| 发表于 2012-12-5 08:58 | 只看该作者
gyhgood 发表于 2012-12-5 08:43
来支持猫猫一下~

3Q

使用道具 举报

回复

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

本版积分规则 发表回复

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