楼主: newkid

PUZZLEUP 2014

[复制链接]
论坛徽章:
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
401#
 楼主| 发表于 2014-12-4 23:28 | 只看该作者
〇〇 发表于 2014-12-4 08:28
count(instr(s,pl))=4*3*2/(1*2)

最后除以二什么意思?INSTR返回0也会被COUNT知道吗?
我的SQL找到123412314231243121342132413214321,你如果有更小的贴出来。

使用道具 举报

回复
论坛徽章:
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
402#
发表于 2014-12-5 10:02 | 只看该作者
newkid 发表于 2014-12-4 23:28
最后除以二什么意思?INSTR返回0也会被COUNT知道吗?
我的SQL找到123412314231243121342132413214321,你 ...

数了数,33个字节

使用道具 举报

回复
论坛徽章:
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
403#
发表于 2014-12-5 10:22 | 只看该作者
newkid 发表于 2014-12-4 23:28
最后除以二什么意思?INSTR返回0也会被COUNT知道吗?
我的SQL找到123412314231243121342132413214321,你 ...

人工推了一下,和你的结果一样


1234
2341
  3412
   4123
     2314                        --循环了,跳一位
      3142
       1423
        4231
          3124                   --循环了,跳一位
           1243
            2431
             4312
                2134              --循环了,跳两位
                 1342
                  3421
                   4213
                     1324         --循环了,跳一位
                      3241
                       2413
                        4132
                          3214    --循环了,跳一位
                           2143
                            1432
                             4321 --结束

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
404#
发表于 2014-12-5 20:12 | 只看该作者
lastwinner 发表于 2014-12-5 10:22
人工推了一下,和你的结果一样

怎么知道最小

使用道具 举报

回复
论坛徽章:
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
405#
 楼主| 发表于 2014-12-5 22:24 | 只看该作者
SQL方法可以保证最小。

使用道具 举报

回复
论坛徽章:
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
406#
发表于 2014-12-6 14:23 | 只看该作者
#19
只能出3个, 4个的还没弄出来

WITH T AS (
          SELECT LEVEL N FROM DUAL CONNECT BY LEVEL <= 3
          )
,T1 AS (
        SELECT REPLACE(SYS_CONNECT_BY_PATH(N,','),',','') S
        FROM T
        WHERE LEVEL = 3
        CONNECT BY NOCYCLE LEVEL<= 3 AND N <> PRIOR N
        )
,T2 AS (
        SELECT SYS_CONNECT_BY_PATH(S,',') STR
               ,REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(REPLACE(SYS_CONNECT_BY_PATH(S,','),',',''),'(.)(.)\1\2','\1\2'),'(.)(\1)','\1'),'(.)(.)\1\2','\1\2') S
        FROM T1
        WHERE LEVEL = 6
        CONNECT BY NOCYCLE PRIOR SUBSTR(S,-2) =  SUBSTR(S,1,2) OR PRIOR SUBSTR(S,-1) =  SUBSTR(S,1,1)
        START WITH S = '123'
        )
SELECT MIN(TO_NUMBER(S))
FROM T2
;
MIN(TO_NUMBER(S))
-----------------
        123121321

使用道具 举报

回复
论坛徽章:
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
407#
发表于 2014-12-6 16:45 | 只看该作者
〇〇 发表于 2014-12-5 20:12
怎么知道最小

不知道,只知道这个一个足够小的,人工这样推不能保证最小

使用道具 举报

回复
论坛徽章:
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
408#
发表于 2014-12-6 16:52 | 只看该作者
lastwinner 发表于 2014-12-6 16:45
不知道,只知道这个一个足够小的,人工这样推不能保证最小

当然,如果可以证明,不按这思路走,那么无论从哪一位开始得出的另外一条线路,都不会比现在思路得出的线路短或值小,那么“这思路”就是最佳的思路

使用道具 举报

回复
论坛徽章:
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
409#
 楼主| 发表于 2014-12-11 04:43 | 只看该作者
#20 Balls

There are six red balls and four black balls in a box. The balls are randomly drawn one by one and the colors are tallied. The process is continued until all the balls have been drawn. What is the probability that the number of red balls is always bigger then the number of black balls throughout the whole process?

Enter your answer as a simplified fraction. Example:12/23


有六个红球和4个黑球放在一个盒子里。 随机一个个把球取出并统计颜色数,直到所有球都取完。如果在这个过程中,红球的数量始终都比黑球大,这样的概率是多少?
----------
SQL很容易写,但是半天跑不出来,后来我拆成两步并创建了中间表,也花了大约两分钟才出结果。

使用道具 举报

回复
论坛徽章:
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
410#
 楼主| 发表于 2014-12-11 04:46 | 只看该作者
第19题我的写法:

VAR N NUMBER;
EXEC :N:=4;

WITH p AS (
SELECT REPLACE(SYS_CONNECT_BY_PATH(n,','),',') p,POWER(2,ROWNUM-1) id
  FROM (SELECT LEVEL n FROM DUAL CONNECT BY LEVEL<=:N)
WHERE LEVEL=:N
CONNECT BY NOCYCLE n<>PRIOR n
)
,t(s,all_id) AS ( -----第一次递归找出三位重叠的,每组只有四个,之后就循环了
SELECT CAST(p AS VARCHAR2(100)),id FROM p
UNION ALL
SELECT t.s||SUBSTR(p.p,-1),t.all_id+p.id
  FROM t,p
WHERE SUBSTR(t.s,1-:N)=SUBSTR(p.p,1,:N-1)
       AND INSTR(t.s,p.p)=0
)
,l AS (
SELECT *
  FROM t
WHERE NOT EXISTS
           (SELECT NULL
              FROM p
             WHERE SUBSTR(t.s,1-:N)=SUBSTR(p.p,1,:N-1)
                   AND INSTR(t.s,p.p)=0
            ) --- 相关子查询找出叶子
)
,q(s,all_id) AS ( ---- 第二次递归利用上次的结果拼接,一位或者两位重叠
SELECT s,all_id
  FROM l        
UNION ALL
SELECT CASE WHEN SUBSTR(q.s,-2)=SUBSTR(l.s,1,2) THEN q.s||SUBSTR(l.s,3)
                 ELSE  q.s||SUBSTR(l.s,2)
       END
      ,q.all_id+l.all_id
  FROM l,q
WHERE (SUBSTR(q.s,-2)=SUBSTR(l.s,1,2) OR SUBSTR(q.s,-1)=SUBSTR(l.s,1,1))
      AND BITAND(q.all_id,l.all_id)=0
)
SELECT MIN(s) KEEP(DENSE_RANK FIRST ORDER BY LENGTH(s)) s FROM q WHERE all_id=(SELECT SUM(id) FROM p);

结果:
123412314231243121342132413214321

使用道具 举报

回复

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

本版积分规则 发表回复

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