ITPUB论坛-中国最专业的IT技术社区

 
 注册
热搜:
楼主: newkid

[每日一题] PUZZLEUP 2017

[复制链接]
论坛徽章:
264
布鲁克
日期:2016-10-08 10:06:50秀才
日期:2016-05-20 15:09:32射手座
日期:2016-05-26 14:02:50双子座
日期:2016-05-25 16:05:44白羊座
日期:2016-05-23 11:49:19双鱼座
日期:2016-04-29 17:13:05秀才
日期:2016-04-29 15:03:39秀才
日期:2016-04-29 15:04:10技术图书徽章
日期:2016-04-29 15:04:10秀才
日期:2016-03-28 10:21:13
21#
发表于 2017-8-17 11:19 | 只看该作者
〇〇 发表于 2017-8-17 08:03
共享一条边的两个单元格 就是 where abs(r1-r2)+abs(c1-c2)=1

借用的你的判断

使用道具 举报

回复
论坛徽章:
394
阿斯顿马丁
日期:2014-01-03 13:53:522014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-01 15:27:22itpub13周年纪念徽章
日期:2014-10-09 12:04:18马上有钱
日期:2014-10-14 21:37:37马上有钱
日期:2015-01-22 00:39:13喜羊羊
日期:2015-02-20 22:26:07
22#
发表于 2017-8-17 11:51 | 只看该作者
solomon_007 发表于 2017-8-17 11:17
第二题:

SQL>   with t as (select 'R' color from dual

nice  

使用道具 举报

回复
论坛徽章:
394
阿斯顿马丁
日期:2014-01-03 13:53:522014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-01 15:27:22itpub13周年纪念徽章
日期:2014-10-09 12:04:18马上有钱
日期:2014-10-14 21:37:37马上有钱
日期:2015-01-22 00:39:13喜羊羊
日期:2015-02-20 22:26:07
23#
发表于 2017-8-17 12:00 | 只看该作者

能否利用颜色的对称减少列举?
比如
rbbr和brrb同类

使用道具 举报

回复
论坛徽章:
394
阿斯顿马丁
日期:2014-01-03 13:53:522014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-01 15:27:22itpub13周年纪念徽章
日期:2014-10-09 12:04:18马上有钱
日期:2014-10-14 21:37:37马上有钱
日期:2015-01-22 00:39:13喜羊羊
日期:2015-02-20 22:26:07
24#
发表于 2017-8-17 12:53 | 只看该作者

其实就是x-1r,c-1)and c>1

x-nr-1,c)

使用道具 举报

回复
论坛徽章:
264
布鲁克
日期:2016-10-08 10:06:50秀才
日期:2016-05-20 15:09:32射手座
日期:2016-05-26 14:02:50双子座
日期:2016-05-25 16:05:44白羊座
日期:2016-05-23 11:49:19双鱼座
日期:2016-04-29 17:13:05秀才
日期:2016-04-29 15:03:39秀才
日期:2016-04-29 15:04:10技术图书徽章
日期:2016-04-29 15:04:10秀才
日期:2016-03-28 10:21:13
25#
发表于 2017-8-17 13:28 | 只看该作者
〇〇 发表于 2017-8-17 12:00
能否利用颜色的对称减少列举?
比如
rbbr和brrb同类

因为颜色只有3种,所以3顺序个可以相互替换,所以只计算一个颜色开头的,总数再乘以3就是结果:

  SQL> with t as (select 'R' color from dual
  2                union all
  3               select 'Y' from dual
  4                union all
  5               select 'B' from dual),
  6         s as (select level n,
  7                      ceil(level/4) x,
  8                      decode(mod(level,4),0,4,mod(level,4)) y
  9                 from dual
10              connect by level <= 4*4),
11  r(len,str,x,y) as (select 1,color,1,1
12                       from t
13                      union all
14                     select r.len + 1,
15                            r.str||t.color,
16                            s.x,
17                            s.y
18                       from r,t,s
19                      where r.len < 4*4
20                        and r.len + 1 = s.n
21                        and t.color not in (select substr(r.str,s2.n,1) node
22                                              from s s2
23                                             where abs(s.x - s2.x) + abs(s.y - s2.y) = 1
24                                               and s2.n < r.len + 1
25                                               )
26                        and substr(r.str,1,1) = 'B'   --随便取一个颜色
27                    )
28  select count(str)*3
29    from r
30   where len = 4*4
31     and instr(r.str,'R') > 0
32     and instr(r.str,'Y') > 0
33     and instr(r.str,'B') > 0
34  /
COUNT(STR)*3
------------
        7806

使用道具 举报

回复
论坛徽章:
264
布鲁克
日期:2016-10-08 10:06:50秀才
日期:2016-05-20 15:09:32射手座
日期:2016-05-26 14:02:50双子座
日期:2016-05-25 16:05:44白羊座
日期:2016-05-23 11:49:19双鱼座
日期:2016-04-29 17:13:05秀才
日期:2016-04-29 15:03:39秀才
日期:2016-04-29 15:04:10技术图书徽章
日期:2016-04-29 15:04:10秀才
日期:2016-03-28 10:21:13
26#
发表于 2017-8-17 13:46 | 只看该作者
〇〇 发表于 2017-8-17 12:53
其实就是x-1r,c-1)and c>1

x-nr-1,c)

对,只判断正左边和正上边的格子就可以了:

SQL>
SQL>   with t as (select 'R' color from dual
  2                union all
  3               select 'Y' from dual
  4                union all
  5               select 'B' from dual),
  6         s as (select level n,
  7                      ceil(level/4) x,
  8                      decode(mod(level,4),0,4,mod(level,4)) y
  9                 from dual
10              connect by level <= 4*4),
11  r(len,str,x,y) as (select 1,color,1,1
12                       from t
13                      union all
14                     select r.len + 1,
15                            r.str||t.color,
16                            s.x,
17                            s.y
18                       from r,t,s
19                      where r.len < 4*4
20                        and r.len + 1 = s.n
21                        and t.color not in (select substr(r.str,s2.n,1) node
22                                              from s s2
23                                            -- where abs(s.x - s2.x) + abs(s.y - s2.y) = 1
24                                            where ((s.x - s2.x = 1 and s2.y = s.y ) or (s.y - s2.y = 1 and s.x = s2.x))
25                                               and s2.n < r.len + 1
26                                               )
27                        and substr(r.str,1,1) = 'B'
28                    )
29  select count(str)*3
30    from r
31   where len = 4*4
32     and instr(r.str,'R') > 0
33     and instr(r.str,'Y') > 0
34     and instr(r.str,'B') > 0
35  /
COUNT(STR)*3
------------
        7806

使用道具 举报

回复
论坛徽章:
394
阿斯顿马丁
日期:2014-01-03 13:53:522014年世界杯参赛球队:喀麦隆
日期:2014-07-11 12:10:53马上有对象
日期:2014-04-09 16:19:542014年世界杯参赛球队: 洪都拉斯
日期:2014-06-25 08:25:55itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-01 15:27:22itpub13周年纪念徽章
日期:2014-10-09 12:04:18马上有钱
日期:2014-10-14 21:37:37马上有钱
日期:2015-01-22 00:39:13喜羊羊
日期:2015-02-20 22:26:07
27#
发表于 2017-8-17 13:56 | 只看该作者
solomon_007 发表于 2017-8-17 13:46
对,只判断正左边和正上边的格子就可以了:

SQL>

速度快了不少

使用道具 举报

回复
论坛徽章:
264
布鲁克
日期:2016-10-08 10:06:50秀才
日期:2016-05-20 15:09:32射手座
日期:2016-05-26 14:02:50双子座
日期:2016-05-25 16:05:44白羊座
日期:2016-05-23 11:49:19双鱼座
日期:2016-04-29 17:13:05秀才
日期:2016-04-29 15:03:39秀才
日期:2016-04-29 15:04:10技术图书徽章
日期:2016-04-29 15:04:10秀才
日期:2016-03-28 10:21:13
28#
发表于 2017-8-17 14:04 | 只看该作者

的确,多谢指点!!

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
29#
发表于 2017-8-17 21:01 | 只看该作者
看 MatrixPower,这不是只会Sort的PL/SQL程序员可以理解的



算 8x8也毫无压力阿


让我们期待newkid的SQL版矩阵乘法算8x8

不是机器吐血就是键盘敲到吐血

使用道具 举报

回复
论坛徽章:
480
榜眼
日期:2015-09-09 10:34:21秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09
30#
 楼主| 发表于 2017-8-17 22:10 | 只看该作者
我这个SQL就专门解决这个问题,对丧心病狂的的NP, NPC没有兴趣

WITH t (colors,cnt) AS (
SELECT CAST(c AS VARCHAR2(16)) colors
      ,1 cnt
  FROM (SELECT LEVEL c FROM DUAL CONNECT BY LEVEL<=3)
UNION ALL
SELECT colors||c,cnt+1
  FROM t,(SELECT LEVEL c FROM DUAL CONNECT BY LEVEL<=3)
WHERE cnt<16
       AND (cnt+1 in (2,3,4) AND c<>substr(colors,-1)
            OR
            cnt+1 in (5,9,13) AND c<>substr(colors,cnt+1-4,1)
           OR c NOT IN (substr(colors,-1),substr(colors,cnt+1-4,1))
           )
)
SELECT COUNT(*) FROM t WHERE cnt=16 AND INSTR(colors,'1')>0 AND INSTR(colors,'2')>0 AND INSTR(colors,'3')>0;

COUNT(*)
---------
     7806

随机挑两个徽章送给加菲猫。

使用道具 举报

回复

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

本版积分规则

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