楼主: newkid

[每日一题] PUZZLEUP 2015

[复制链接]
论坛徽章:
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
281#
发表于 2015-10-16 08:10 | 只看该作者
代码附件也不行

使用道具 举报

回复
论坛徽章:
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
282#
发表于 2015-10-16 08:50 | 只看该作者
solomon_007 发表于 2015-10-15 23:28
269 楼先建T表

我用你的数据也是2840
with t0 as(
select '111111111122222221123333321123222321123212321123222321123333321122222221111111111's from dual),
t as(select substr(s,level,1)v,ceil(level/9)r,mod(level-1,9)+1 c from t0 connect by level<=length(s)),
s(lv,v,s,r,c) as
(select 1,t.v,cast(t.v as varchar(5)),t.r,t.c from t where t.v=substr('12321',1,1)
union all
select lv+1,t.v,cast(s||t.v as varchar(5)),t.r,t.c from s,t where cast(s||t.v as varchar(5))=substr('12321',1,lv+1)
and abs(t.r-s.r)<=1 and abs(t.c-s.c)<=1 and not(t.r=s.r and t.c=s.c)
and lv<=4) 
select count(*) from s where lv=5;

使用道具 举报

回复
论坛徽章:
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
283#
 楼主| 发表于 2015-10-16 09:06 | 只看该作者
〇〇 发表于 2015-10-16 08:50
我用你的数据也是2840
with t0 as(
select '111111111122222221 ...

还是你牛!
这题太简单,必须把那些111111...的硬编码写法去掉,只输入N(N=5,N=9,...)才有趣。

使用道具 举报

回复
论坛徽章:
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
284#
发表于 2015-10-16 09:17 | 只看该作者
本帖最后由 solomon_007 于 2015-10-16 09:31 编辑
〇〇 发表于 2015-10-16 08:50
我用你的数据也是2840
with t0 as(
select '111111111122222221 ...

终于发现我的错误了, 把5改成9就可以了, 一时大意啊,因为我先测试的是5*5的方阵
图片中的:
where x.neighbour_rowno + s.rno between 1 and 5
    and  x.neighbour_colno  + s.lno between 1 and 5
    and lvl < 5

改成如下:
where x.neighbour_rowno + s.rno between 1 and 9
     and x.neighbour_colno + s.lno between 1 and 9
     and lvl < 5

使用道具 举报

回复
论坛徽章:
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
285#
发表于 2015-10-16 09:40 | 只看该作者
solomon_007 发表于 2015-10-16 09:17
终于发现我的错误了, 把5改成9就可以了, 一时大意啊,因为我先测试的是5*5的方阵
图片中的:
where x.ne ...

to_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
286#
发表于 2015-10-16 09:50 | 只看该作者
〇〇 发表于 2015-10-16 09:40
to_number不必要,因为就是拼字符串

对的,昨晚调试的时候加的,应该像你的代码中定义的那样

用这个定义一下长度就OK了: cast(val as varchar2(5)) cancat_val

使用道具 举报

回复
论坛徽章:
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
287#
发表于 2015-10-16 10:15 | 只看该作者
newkid 发表于 2015-10-16 09:06
还是你牛!
这题太简单,必须把那些111111...的硬编码写法去掉,只输入N(N=5,N=9,...)才有趣。

除了要拼的字符串都参数化了

var m number
exec :m:=9
with d as (select level x from dual connect by level<=:m),
e as (select level y from dual connect by level<=:m),
n as (select level i from dual connect by level<=(:m+1)/2),
t as(select case when i<=((:m+1)/2+1)/2 then i
else ((:m+1)/2+1)-i end
 v,x r,y c from d,e,n 
where (x=i or x =:m+1-i)and (y>=i and y<=:m+1-i)
or
(x>i and x <:m+1-i) and (y=i or y =:m+1-i)
),
s(lv,v,s,r,c) as
(select 1,t.v,cast(t.v as varchar(50)),t.r,t.c from t where t.v=substr('12321',1,1)
union all
select lv+1,t.v,cast(s||t.v as varchar(50)),t.r,t.c from s,t where cast(s||t.v as varchar(50))=substr('12321',1,lv+1)
and abs(t.r-s.r)<=1 and abs(t.c-s.c)<=1 and not(t.r=s.r and t.c=s.c)
and lv<=(:m+1)/2-1) 
select count(*) from s where lv=(:m+1)/2;

使用道具 举报

回复
论坛徽章:
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
288#
发表于 2015-10-16 10:24 | 只看该作者
要拼的字符串=substr('12345678987654321',1,(:m+1)/2-1)||substr('12345678987654321',-(:m+1)/2+1)

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
289#
发表于 2015-10-16 10:25 | 只看该作者
还是 M 简单



K=9 时输出  3636606088
K=100 时输出 23968379576588305560722162310305832114679746619334496478492400503144115507281008748756993240499704

使用道具 举报

回复
论坛徽章:
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
290#
发表于 2015-10-16 11:57 | 只看该作者
我也写了一个      

   

2015-10-16_11-52-15.png (54.3 KB, 下载次数: 0)

2015-10-16_11-52-15.png

使用道具 举报

回复

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

本版积分规则 发表回复

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