楼主: newkid

[每日一题] PUZZLEUP 2015

[复制链接]
论坛徽章:
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
441#
发表于 2015-11-26 13:46 | 只看该作者
lugionline 发表于 2015-11-26 13:28
这下对了

In[1]:= SameDigitsQ[v_] := Count[Length]] > 0 & /@ (v[[;; -2]] + v[[2 ;;]]), True] ==  ...

又可以捡一枚章.

你的M 代码完全看不懂, 简洁深奥费脑

使用道具 举报

回复
论坛徽章:
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
442#
 楼主| 发表于 2015-11-26 23:34 | 只看该作者
这老头忒不地道,又改题目了。加菲猫把新题再做一遍,不许用12C的WITH PLSQL函数,才能得到章。

ADJACENT DIGITS

What is the maximum number having the following properties?

-All of its digits are different.

-When you add any three adjacent digits of this number, the digits of the result will not be found in the number.


具备下列属性的最大的数是什么?

- 每位数字个各不相同。

- 当你把这个数字的任意三位相邻的数字相加,其结果的每一位数字都不会出现在这个数字中。

使用道具 举报

回复
论坛徽章:
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
443#
发表于 2015-11-28 13:09 | 只看该作者
newkid 发表于 2015-11-26 23:34
这老头忒不地道,又改题目了。加菲猫把新题再做一遍,不许用12C的WITH PLSQL函数,才能得到章。

ADJACEN ...

先找出数字:

SQL>  with function f(p_str1 varchar2,p_str2 varchar2) return int
  2          as
  3            s int :=0;
  4          begin
  5            for i in 1..length(p_str1) loop
  6              s := s+ instr(p_str2,substr(p_str1,i,1));
  7            end loop;
  8            return s;
  9         end;
10       t as (select level-1 n from dual connect by level<=10),
11       s(lvl,numstr,threebitsum) as (select 3 lvl,
12                                            cast(a.n||b.n||c.n as varchar2(10)) numstr,
13                                            cast(a.n+b.n+c.n   as varchar2(30)) threebitsum
14                                       from t a,t b,t c
15                                      where a.n > 0
16                                        and a.n <> b.n
17                                        and a.n <> c.n
18                                        and b.n <> c.n
19                                      union all
20                                     select s.lvl + 1,
21                                            s.numstr||t.n,
22                                            s.threebitsum||','||to_char(to_number(substr(s.numstr,length(s.numstr)-1,1))+to_number(substr(s.numstr,-1)) + t.n)
23                                       from s,t
24                                      where lvl<10
25                                        and instr(s.numstr,t.n) = 0
26                                        and f(s.numstr||t.n,s.threebitsum||','||to_char(to_number(substr(s.numstr,length(s.numstr)-1,1))+to_number(substr(s.numstr,-1)) + t.n))
0
27                                      )
28    select max(to_number(numstr)) from s;
29  /

MAX(TO_NUMBER(NUMSTR))
----------------------
               9574083

SQL>


使用道具 举报

回复
论坛徽章:
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
444#
发表于 2015-11-28 13:11 | 只看该作者
上面 26行后面copy的时候掉了个 "=" 等号

使用道具 举报

回复
论坛徽章:
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
445#
发表于 2015-11-28 13:45 | 只看该作者
我们的sql比赛争取不改题目

使用道具 举报

回复
论坛徽章:
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
446#
发表于 2015-11-28 13:52 | 只看该作者
newkid 发表于 2015-11-26 23:34
这老头忒不地道,又改题目了。加菲猫把新题再做一遍,不许用12C的WITH PLSQL函数,才能得到章。

ADJACEN ...

终于改了,不用12C的PLSQL了:

SQL>  with
  2       t as (select level-1 n from dual connect by level<=10),
  3       s(lvl,numstr,threebitsum) as (select 3 lvl,
  4                                            cast(a.n||b.n||c.n as varchar2(10)) numstr,
  5                                            cast(a.n+b.n+c.n   as varchar2(30)) threebitsum
  6                                       from t a,t b,t c
  7                                      where a.n > 0
  8                                        and a.n <> b.n
  9                                        and a.n <> c.n
10                                        and b.n <> c.n
11                                        and instr(to_char(a.n+b.n+c.n),a.n) =0
12                                        and instr(to_char(a.n+b.n+c.n),b.n) =0
13                                        and instr(to_char(a.n+b.n+c.n),c.n) =0
14                                      union all
15                                     select s.lvl + 1,
16                                            s.numstr||t.n,
17                                            s.threebitsum||','||to_char(to_number(substr(s.numstr,length(s.numstr)-1,1))+to_number(substr(s.numstr,-1)) + t.n)
18                                       from s,t
19                                      where lvl<10
20                                        and instr(s.numstr,t.n) = 0
21                                        and instr(s.threebitsum||','||to_char(to_number(substr(s.numstr,length(s.numstr)-1,1))+to_number(substr(s.numstr,-1)) + t.n),t.n) = 0
22                                        and instr(s.numstr, substr(to_char(to_number(substr(s.numstr,length(s.numstr)-1,1))+to_number(substr(s.numstr,-1)) + t.n),1,1))=0
23                                        and instr(s.numstr, substr(to_char(to_number(substr(s.numstr,length(s.numstr)-1,1))+to_number(substr(s.numstr,-1)) + t.n),-1,1))=0
24                                      )
25    select max(to_number(numstr)) from s;

MAX(TO_NUMBER(NUMSTR))
----------------------
               9574083

使用道具 举报

回复
论坛徽章:
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
447#
发表于 2015-11-28 21:18 | 只看该作者
solomon_007 发表于 2015-11-28 13:52
终于改了,不用12C的PLSQL了:

SQL>  with

to_number(n)可以改为n+0

使用道具 举报

回复
论坛徽章:
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
448#
发表于 2015-11-28 22:59 | 只看该作者
嗯,很多隐式转换的地方都不用写也可以的,那样就显得简洁一些

使用道具 举报

回复
论坛徽章:
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
449#
 楼主| 发表于 2015-11-29 10:44 | 只看该作者
solomon_007 发表于 2015-11-28 22:59
嗯,很多隐式转换的地方都不用写也可以的,那样就显得简洁一些

转了个白羊座。奇怪,很多徽章都不能转让。
我写的SQL:
WITH d AS (SELECT LEVEL-1 d FROM DUAL CONNECT BY LEVEL<=10)
,t(n,used) AS (
SELECT d,CAST(' ' AS VARCHAR2(40)) FROM d
UNION ALL
SELECT TO_NUMBER(t.n||d)
      ,t.used||CASE WHEN LENGTH(t.n)>=2 THEN TO_CHAR(d+SUBSTR(t.n,-1)+SUBSTR(t.n,-2,1)) END
  FROM t,d
WHERE INSTR(t.used,d)=0
       AND INSTR(t.n,d)=0
       AND (LENGTH(t.n)>=2
            AND INSTR(t.n||d,SUBSTR(d+SUBSTR(t.n,-1)+SUBSTR(t.n,-2,1),1,1))=0
            AND INSTR(t.n||d,SUBSTR(d+SUBSTR(t.n,-1)+SUBSTR(t.n,-2,1),-1,1))=0
            OR LENGTH(t.n)<2
           )
)
SELECT MAX(TO_NUMBER(n)) FROM t;

使用道具 举报

回复
论坛徽章:
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
450#
发表于 2015-11-29 11:25 | 只看该作者
newkid 发表于 2015-11-29 10:44
转了个白羊座。奇怪,很多徽章都不能转让。
我写的SQL:
WITH d AS (SELECT LEVEL-1 d FROM DUAL CONNEC ...

章章, 多谢!

思路上大致差不多,但你更简洁一些!

使用道具 举报

回复

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

本版积分规则 发表回复

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