楼主: newkid

PUZZLEUP 2014

[复制链接]
论坛徽章:
41
生肖徽章:鼠
日期:2013-12-06 14:15:45生肖徽章:牛
日期:2013-12-06 14:15:45生肖徽章:虎
日期:2013-12-06 14:15:45生肖徽章:兔
日期:2013-12-06 14:15:45生肖徽章:龙
日期:2013-12-06 14:15:45生肖徽章:蛇
日期:2013-12-06 14:15:45生肖徽章:马
日期:2013-12-06 14:15:45生肖徽章:羊
日期:2013-12-06 14:15:45生肖徽章:猴
日期:2013-12-06 14:15:45生肖徽章:鸡
日期:2013-12-06 14:15:45
81#
发表于 2014-8-22 08:07 | 只看该作者
newkid 发表于 2014-8-21 21:25
陆虎转给你了!
我从没考虑过CONNECT BY,谁知道它这么给力?由此可推测内部是深度优先的。

已收到,谢谢, newkid 。  期待下一题。   上周休假, 第三题没看到, 抽空也做看看。  

使用道具 举报

回复
论坛徽章:
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
82#
发表于 2014-8-22 09:21 | 只看该作者
peter1166 发表于 2014-8-21 17:42
猫猫跟我卡一个地方了。  你的 【3】14 -12  用了多长时间 ?

NBA,

昨天研究、【3】的时候,发现:
10 -8
11-9
12-10
13-11
14-12
。。。

后面太费时间了。。。就是没有发现这个规律: SUBSTR(S,2) =  SUBSTR(S,1,LENGTH(S)-1)  

另外,你的SQL里的DECODE可以不要啊:

  SELECT LENGTH(S),S,STR
   FROM (   
  SELECT SYS_CONNECT_BY_PATH(S,'|') STR,
             'AAA'||REPLACE(SYS_CONNECT_BY_PATH(SUBSTR(S,-1),'|'),'|','') S
      FROM (
            SELECT REPLACE(SYS_CONNECT_BY_PATH(S,','),',','') S
            FROM (
            SELECT 'A' S FROM DUAL UNION ALL
            SELECT 'B' S FROM DUAL UNION ALL
            SELECT 'C' S FROM DUAL UNION ALL
            SELECT 'D' S FROM DUAL
            )
            WHERE LEVEL = 4
            CONNECT BY  LEVEL <= 4
           )
      WHERE LEVEL = POWER(4,4)
      CONNECT BY NOCYCLE PRIOR SUBSTR(S,2) =  SUBSTR(S,1,LENGTH(S)-1) AND PRIOR S <> S
      START WITH S IN ('AAAA')  
    )
  WHERE ROWNUM=1

使用道具 举报

回复
论坛徽章:
41
生肖徽章:鼠
日期:2013-12-06 14:15:45生肖徽章:牛
日期:2013-12-06 14:15:45生肖徽章:虎
日期:2013-12-06 14:15:45生肖徽章:兔
日期:2013-12-06 14:15:45生肖徽章:龙
日期:2013-12-06 14:15:45生肖徽章:蛇
日期:2013-12-06 14:15:45生肖徽章:马
日期:2013-12-06 14:15:45生肖徽章:羊
日期:2013-12-06 14:15:45生肖徽章:猴
日期:2013-12-06 14:15:45生肖徽章:鸡
日期:2013-12-06 14:15:45
83#
发表于 2014-8-22 09:43 | 只看该作者
本帖最后由 peter1166 于 2014-8-22 09:44 编辑
solomon_007 发表于 2014-8-22 09:21
NBA,

昨天研究、【3】的时候,发现:


猫猫, 眼睛犀利。  那个DECODE 本来是想合并字段的时候, 除了第一个外都只要最后一个字符来着。
不成想下面有个  WHERE LEVEL = POWER(4,4) 实现不了。 后来就前面加了  'AAA',  DECODE 忘记去掉了。 谢谢, 猫猫指正。   
后来我想是不是也可以用 WITH 递归也可以实现这个, 这个时候合并字段的时候也许可能更灵活。

使用道具 举报

回复
求职 : 数据库开发
论坛徽章:
10
茶鸡蛋
日期:2012-04-19 16:08:35美羊羊
日期:2015-03-24 15:03:142015年新春福章
日期:2015-03-06 11:58:392015年新春福章
日期:2015-03-04 14:53:16马上有对象
日期:2014-08-15 13:23:54优秀写手
日期:2014-08-15 06:00:13马上加薪
日期:2014-08-14 22:48:12马上有房
日期:2014-09-04 07:54:53ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:482015年新春福章
日期:2015-03-30 14:49:43
84#
发表于 2014-8-25 18:59 | 只看该作者
额....陷入自己挖的死胡同了....
还是第四题
扩展的问一下:
如果不确定总字符长度,而且也不确认分个的字符(AAA,AAB)是否需要重复,该如果求解
比如:
以三个字符为例。
只用字母A,B,C创建一个文本。如果所有的三字母组合(从AAA到CCC)必须包含在文本中,最小的文本长度是多少?
不能确认最小字符长度为29, 也不能确认每个三字母组合只会用到一次。
那么该怎么处理

另外,之前好像看到有人说有一个关于 同伙 问题的帖子,各位能不能找到链接。谢谢了。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期: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
85#
 楼主| 发表于 2014-8-25 22:44 | 只看该作者
jixch 发表于 2014-8-25 18:59
额....陷入自己挖的死胡同了....
还是第四题
扩展的问一下:

这个最小长度是先有理论上的猜测,然后我们找出了实例。如果不加这个限制,也可以在最坏情况下(27*3)去找,组合数就更多,程序可能跑不出来。

找团伙:
http://www.itpub.net/thread-1851315-1-2.html


使用道具 举报

回复
论坛徽章:
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
86#
发表于 2014-8-26 10:34 | 只看该作者
peter1166 发表于 2014-8-21 20:11
4 个的也出来结果了, 这个算不算做出来。 也能马上出来结果。

我直接想到的也是connect by,先构造出256个4字节字符串(4^4),用4字节字符串的后面三字节和其他的4字节字符串的前三字节匹配为条件去寻找

理论 上来说,结果就最小应该是259,因为256个字符串都不一样,所以每个都要占一个字节,再加上第一个字符串还需要3字节,所以最小就是259字节,但至于是不是就是259字节,需要证明。

只是在一开始觉得不应该从AAAA出发,而应该是个其他的什么字符串,后来想了想,这些字符串都是等价的,从哪个开始都没问题

ps:LEVEL = POWER(4,4) 属于未卜先知了,你怎么知道level为POWER(4,4) 就一定有答案?

使用道具 举报

回复
论坛徽章:
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
87#
发表于 2014-8-26 10:36 | 只看该作者
newkid 发表于 2014-8-21 21:25
陆虎转给你了!
我从没考虑过CONNECT BY,谁知道它这么给力?由此可推测内部是深度优先的。

是的,是深度优先,在这个帖子里很早就写到了
http://www.itpub.net/forum.php?m ... %3D28%26typeid%3D28

使用道具 举报

回复
论坛徽章:
41
生肖徽章:鼠
日期:2013-12-06 14:15:45生肖徽章:牛
日期:2013-12-06 14:15:45生肖徽章:虎
日期:2013-12-06 14:15:45生肖徽章:兔
日期:2013-12-06 14:15:45生肖徽章:龙
日期:2013-12-06 14:15:45生肖徽章:蛇
日期:2013-12-06 14:15:45生肖徽章:马
日期:2013-12-06 14:15:45生肖徽章:羊
日期:2013-12-06 14:15:45生肖徽章:猴
日期:2013-12-06 14:15:45生肖徽章:鸡
日期:2013-12-06 14:15:45
88#
发表于 2014-8-26 13:44 | 只看该作者
lastwinner 发表于 2014-8-26 10:34
我直接想到的也是connect by,先构造出256个4字节字符串(4^4),用4字节字符串的后面三字节和其他的4字节 ...

老师的意识是否是应该这么写?

WITH T AS (
        SELECT REPLACE(SYS_CONNECT_BY_PATH(S,','),',','') S
        FROM (
        SELECT 'A' S FROM DUAL UNION ALL
        SELECT 'B' S FROM DUAL UNION ALL
        SELECT 'C' S FROM DUAL UNION ALL
        SELECT 'D' S FROM DUAL
        )
        WHERE LEVEL = 4
        CONNECT BY  LEVEL <= 4
)
SELECT LENGTH(S),S
FROM (   
     SELECT SYS_CONNECT_BY_PATH(S,'|') STR,
            'AAA'||REPLACE(SYS_CONNECT_BY_PATH(SUBSTR(S,-1),'|'),'|','') S
     FROM T
     WHERE LEVEL = (SELECT COUNT(*) FROM T)
     CONNECT BY NOCYCLE PRIOR SUBSTR(S,2) =  SUBSTR(S,1,LENGTH(S)-1) AND PRIOR S <> S
     START WITH S IN ('AAAA')  
    )
WHERE ROWNUM=1
/

使用道具 举报

回复
论坛徽章:
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
89#
发表于 2014-8-26 17:13 | 只看该作者
peter1166 发表于 2014-8-26 13:44
老师的意识是否是应该这么写?

WITH T AS (

不是的,(SELECT COUNT(*) FROM T)也是256
问题在于,你怎么知道256个字符串一定能不重复的首尾相连的串在一起?我的意思是,level至少是256,但也有可能是257,258……

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期: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
90#
 楼主| 发表于 2014-8-26 23:16 | 只看该作者
lastwinner 发表于 2014-8-26 17:13
不是的,(SELECT COUNT(*) FROM T)也是256
问题在于,你怎么知道256个字符串一定能不重复的首尾相连的串 ...

他用了NOCYCLE, 所以LEVEL不可能超过256了。
最后的WHERE LEVEL=POWER(4,4) 是属于“大胆假设小心求证”。
从AAAA出发也是一个大胆假设,并不等价于ABCD。如果是一个首尾衔接的环,那么从哪个出发就是等价的。

使用道具 举报

回复

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

本版积分规则 发表回复

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