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
31#
发表于 2017-8-17 22:55 | 只看该作者
本帖最后由 solomon_007 于 2017-8-18 00:01 编辑
lugionline 发表于 2017-8-17 21:01
看 MatrixPower,这不是只会Sort的PL/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
32#
发表于 2017-8-17 23:02 | 只看该作者
newkid 发表于 2017-8-17 22:10
我这个SQL就专门解决这个问题,对丧心病狂的的NP, NPC没有兴趣

WITH t (colors,cnt) AS (

  CTE的条件判断,这回和你的还有点像。。。
  
  章章,多谢!

使用道具 举报

回复
论坛徽章:
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
33#
发表于 2017-8-18 07:45 | 只看该作者
newkid 发表于 2017-8-17 22:10
我这个SQL就专门解决这个问题,对丧心病狂的的NP, NPC没有兴趣

WITH t (colors,cnt) AS (

硬编码,比猫的少用了一个表,

使用道具 举报

回复
论坛徽章:
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
34#
发表于 2017-8-18 07:49 | 只看该作者
本帖最后由 〇〇 于 2017-8-18 07:56 编辑
newkid 发表于 2017-8-17 22:10
我这个SQL就专门解决这个问题,对丧心病狂的的NP, NPC没有兴趣

WITH t (colors,cnt) AS (

奇怪,在sqlite下出错了
sqlite> WITH t (colors,cnt) AS (
   ...> SELECT CAST(c AS VARCHAR2(16)) colors
   ...>       ,1 cnt
   ...>   FROM (SELECT 1 c union select 2 union select 3)
   ...> UNION ALL
   ...> SELECT colors||c,cnt+1
   ...>   FROM t,(SELECT 1 c union select 2 union select 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;
Run Time: real 5.172 user 3.875000 sys 0.562500
Error: database or disk is full

原来是没有自动类型转换
sqlite> WITH t (colors,cnt) AS (
   ...> SELECT CAST(c AS VARCHAR(16)) colors
   ...>       ,1 cnt
   ...>   FROM (SELECT '1' c union select '2' union select '3')
   ...> UNION ALL
   ...> SELECT colors||c,cnt+1
   ...>   FROM t,(SELECT '1' c union select '2' union select '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;
Run Time: real 0.078 user 0.078125 sys 0.000000

使用道具 举报

回复
论坛徽章:
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
35#
发表于 2017-8-18 07:54 | 只看该作者
〇〇 发表于 2017-8-18 07:49
奇怪,在sqlite下出错了
sqlite> WITH t (colors,cnt) AS (
   ...> SELECT CAST(c AS VARCHAR2(16)) c ...

猫的
with n as(select 1 n union all select n+1 from n where n<4),
t as (select 'R' color
              union all
             select 'Y'
              union all
             select 'B' ),
s as (select n.n*4-4+n1.n n,
                    n.n x,
                    n1.n y
from n,n n1),
r(len,str,x,y) as (select 1,color,1,1
                    from t
                   union all
                  select r.len + 1,
                         r.str||t.color,
                         s.x,
                         s.y
                    from r,t,s
                   where r.len < 4*4
                     and r.len + 1 = s.n
                     and t.color not in (select substr(r.str,s2.n,1) node
                                           from s s2
                                         --where abs(s.x - s2.x) + abs(s.y - s2.y) = 1
                                         where ((s.x - s2.x = 1 and s2.y = s.y ) or (s.y - s2.y = 1 and s.x = s2.x))
                                         and s2.n < r.len + 1
                                         --xxx where s2.n=r.len or s2.n=r.len-4+1
                                            )and substr(r.str,1,1) = 'B'   --随便取一个颜色
                 )
select count(str)*3
from r
where len = 4*4
  and instr(r.str,'R') > 0
  and instr(r.str,'Y') > 0
  and instr(r.str,'B') > 0
;
Run Time: real 0.266 user 0.265625 sys 0.000000

使用道具 举报

回复
论坛徽章:
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
36#
发表于 2017-8-18 07:59 | 只看该作者
〇〇 发表于 2017-8-18 07:49
奇怪,在sqlite下出错了
sqlite> WITH t (colors,cnt) AS (
   ...> SELECT CAST(c AS VARCHAR2(16)) c ...

*3
sqlite> WITH t (colors,cnt) AS (
   ...> SELECT CAST('1' AS VARCHAR(16)) colors
   ...>       ,1 cnt
   ...> UNION ALL
   ...> SELECT colors||c,cnt+1
   ...>   FROM t,(SELECT '1' c union select '2' union select '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(*)*3 FROM t WHERE cnt=16 AND INSTR(colors,'1')>0 AND INSTR(colors,'2')>0 AND INSTR(colors,'3')>0;
7806
Run Time: real 0.031 user 0.031250 sys 0.000000

使用道具 举报

回复
论坛徽章:
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
37#
 楼主| 发表于 2017-8-23 22:08 | 只看该作者
#3 FOUR DIGITS

A number has distinct digits and for its any four consecutive digits, the multiplication of the two digits in the middle is greater than the sum of the four digits.

What is the greatest such number?

一个数的每位数各不相同,对于其任意四个连续的数字,中间两位数的乘积大于四位数之和。

最大一个这样的数是多少?

我感觉加菲猫又要拿章章了。

使用道具 举报

回复
论坛徽章:
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
38#
发表于 2017-8-23 23:02 | 只看该作者
newkid 发表于 2017-8-23 22:08
#3 FOUR DIGITS

A number has distinct digits and for its any four consecutive digits, the multipli ...

这么简单啊。。。

SQL>
SQL> with t as (select level-1 n from dual connect by level <=10)
  2  select max(t1.n||t2.n||t3.n||t4.n)
  3  from t t1,t t2,t t3,t t4
  4  where t2.n*t3.n > t1.n+t2.n+t3.n+t4.n
  5   and t1.n > t2.n
  6   and t2.n > t3.n
  7   and t3.n > t4.n
  8  /
MAX(T1.N||T2.N||T3.N||T4.N)
--------------------------------------------------------------------------------
9876

使用道具 举报

回复
论坛徽章:
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
39#
 楼主| 发表于 2017-8-23 23:16 | 只看该作者
solomon_007 发表于 2017-8-23 23:02
这么简单啊。。。

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
40#
发表于 2017-8-24 01:31 | 只看该作者
newkid 发表于 2017-8-23 23:16
注意,“对于其任意四个连续的数字”可没说这个数只有四位。

长度最大为10,很慢,7,8 都一样了,后来想想数字组合 12 肯定不在答案中,因为 1*2 < 1+2 ,所以长度
取得8就够了,而且0只可能在最后一位,姑且假设它在答案中,所以:

SQL>
SQL> with t as (select level-1 n from dual connect by level <=10),
  2       s(n,str) as (select 1,cast( n as varchar2(10)) from t
  3                      union all
  4                    select s.n+1,
  5                           s.str||t.n
  6                      from s,t
  7                     where s.n < 8
  8                       and instr(s.str,'0') = 0
  9                       and instr(s.str,t.n) = 0 )
10   select max(str)
11     from (
12           select n,str,
13                  sum(case when substr(four,2,1)*substr(four,3,1)
14                                > substr(four,1,1)+substr(four,2,1)+substr(four,3,1)+substr(four,4,1)
15                           then 1
16                           else 0
17                       end) sum_val,
18                  count(*) cnt
19             from (
20                    select n,str,substr(str,p.m,4) four
21                      from (select *
22                             from s
23                            where n>=4
24                              and substr(str,2,1)*substr(str,3,1) > substr(str,1,1)+substr(str,2,1)+substr(str,3,1)+substr(str,4,1)
25                            ) s1,
26                           (select level m from dual connect by level <= 7) p
27                     where n >= 4
28                       and p.m + 3 <= s1.n )
29            group by n,str
30          )
31    where sum_val = cnt
32  /
MAX(STR)
--------------------------------------------------------------------------------
9876543

使用道具 举报

回复

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

本版积分规则

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