楼主: newkid

[每日一题] 2022 PUZZLEUP

[复制链接]
论坛徽章:
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
61#
 楼主| 发表于 2022-11-25 00:54 | 只看该作者



坐标设计:

11,12,13,14,15
21,22,23,24,25
31,32,33,34,35
41,42,43,44,45
51,52,53,54,55

待猜选项总共有20条,横竖各十种。用十个字母大小写来表示,如下:

A B C D E
F#####f
G#####g
H#####h
I#####i
J#####j
a b c d e

比如A就是第一列从上到下四个,小写a则是第一列从下至上的四个。

未知的格子用
表示,已知没有的用表示。

猜测原则:用二分法,所选的四个格子覆盖未知选项的一半。一开始二十种全部未知,所以第一步选择的四个格子就要覆盖十种。

第一步:猜11,22,23,55,覆盖10种

结果路径Y: A,F,G,g,B,b,C,c,j,e
####O
#####
###O#
###O#
O####


路径Y第二步:猜11,25,55,15 (15是故意放空的) 覆盖5种
结果路径YY: A,F,e,j,g
####O
#####
#OOO#
#OOO#
O####


路径YY第三步:猜11,25,15,51(15,51是故意放空的)覆盖3种

结果路径YYY: A,F,g
####O
#####
#OOOO
#OOOO
OOOOO

路径YYY第四步:猜11,15,51,55(15,51,55是故意放空的)覆盖2种

结果路径YYYY: A,F
####O
#OOOO
#OOOO
#OOOO
OOOOO

路径YYYY第五步:猜12,51,52,53(后面三个是故意放空的)覆盖1种

结果路径YYYYY: 则答案为F (五步出结果)
      
####O
OOOOO
OOOOO
OOOOO
OOOOO

结果路径YYYYN: 则答案为A (五步出结果)
      
#OOOO
#OOOO
#OOOO
#OOOO
OOOOO

结果路径YYYN: 则答案为g (四步出结果)
        
OOOOO
O####
OOOOO
OOOOO
OOOOO

         
结果路径YYN: e,j
OOOOO
OOOO#
OOOO#
OOOO#
O####


路径YYN第四步:猜52,11,12,13(后面三个是故意放空的)覆盖1种

结果路径YYNY: 则答案为j (四步出结果)
OOOOO
OOOOO
OOOOO
OOOOO
O####
         

结果路径YYNN: 则答案为e (四步出结果)
OOOOO
OOOO#
OOOO#
OOOO#
OOOO#


结果路径YN: B,C,G,b,c
O##OO
####O
O##OO
O##OO
O##OO

路径YN第三步:猜22,15,25,35(后面三个是故意放空的)覆盖3种   
结果路径YNY: B,G,b
O#OOO
####O
O#OOO
O#OOO
O#OOO

路径YNY第四步:猜24,15,25,35(后面三个是故意放空的)覆盖1种   
结果路径YNYY: 则答案为G (四步出结果)
      
OOOOO
####O
OOOOO
OOOOO
OOOOO
        

结果路径YNYN: B,b

O#OOO
O#OOO
O#OOO
O#OOO
O#OOO


路径YNYN第五步:猜12,15,25,35(后面三个是故意放空的)覆盖1种   
结果路径YNYNY: 则答案为B (五步出结果)

O#OOO
O#OOO
O#OOO
O#OOO
OOOOO
        
结果路径YNYNN: 则答案为b (五步出结果)
      
OOOOO
O#OOO
O#OOO
O#OOO
O#OOO


结果路径YNN: C,c

OO#OO
OO#OO
OO#OO
OO#OO
OO#OO


路径YNN第四步:猜13,15,25,35(后面三个是故意放空的)覆盖1种   
结果路径YNNY: 则答案为C (四步出结果)

OO#OO
OO#OO
OO#OO
OO#OO
OOOOO

结果路径YNNN: 则答案为c (四步出结果)
     
OOOOO
OO#OO
OO#OO
OO#OO
OO#OO



结果路径N:

O####
#OO##
#####
#####
####O


路径N第二步:猜15,51,24,11 (11是故意放空的) 覆盖5种

结果路径NY: f,E,J,a,d (和路径YY拓扑等价,以下步骤略)
   
O####
#OO##
#OO##
#OO##
####O



结果路径NN: D,H,h,I,i (和路径YN拓扑等价,以下步骤略)

OOO#O
OOO#O
#####
#####
OOO#O


使用道具 举报

回复
论坛徽章:
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
62#
发表于 2022-11-25 07:02 来自手机 | 只看该作者
这解题报告可以出书

使用道具 举报

回复
论坛徽章:
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
63#
发表于 2022-11-25 16:12 | 只看该作者
〇〇 发表于 2022-11-24 18:05
做了个数据结构,b是20种待猜的,t是每次猜的4个,如果返回否用not exists可以排除一部分,如果返回是,就在 ...

根据第2题,20种情况可以这样获得:

SQL>
SQL> with t as (select level n,ceil(level/5) r,mod(level-1,5)+1 c from dual connect by level <= 5*5),
  2       s(lvl,str,rpre,cpre,rlast,clast,cnt) as (select 1,cast(n as varchar2(1000)),null,null,r,c,0 from t
  3                       union all
  4                      select lvl + 1,
  5                             str||','||n,
  6                             rlast,
  7                             clast,
  8                             r,
  9                             c,
10                             s.cnt + case when r<>rpre and c<>cpre then 1 else 0 end
11                        from s,t
12                       where lvl < 4
13                         and abs(s.rlast - r) + abs(s.clast - c) = 1
14                         and t.n > (select n from t where r=s.rlast and c=s.clast)
15                         and s.cnt = 0
16                         )
17  select str from s where lvl=4 and cnt=0
18  /

STR
--------------------------------------------------------------------------------
2,3,4,5
2,7,12,17
3,8,13,18
4,9,14,19
5,10,15,20
6,7,8,9
6,11,16,21
7,8,9,10
7,12,17,22
8,13,18,23
9,14,19,24
10,15,20,25
11,12,13,14
12,13,14,15
16,17,18,19
17,18,19,20
21,22,23,24
22,23,24,25
1,2,3,4
1,6,11,16

20 rows selected

使用道具 举报

回复
论坛徽章:
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
64#
 楼主| 发表于 2022-11-25 22:33 | 只看该作者
solomon_007 发表于 2022-11-25 16:12
根据第2题,20种情况可以这样获得:SQL> SQL> with t as (select level n,ceil(level/5) r,mod(level-1,5)+ ...

这部分比较无趣,有趣的在于怎么找出二分法的四个组合,你要不挑战一下?

使用道具 举报

回复
论坛徽章:
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
65#
发表于 2022-11-26 20:49 | 只看该作者
newkid 发表于 2022-11-25 22:33
这部分比较无趣,有趣的在于怎么找出二分法的四个组合,你要不挑战一下?

"怎么找出二分法的四个组合" 能解释一下吗?上面的你的解释没看明白。。

使用道具 举报

回复
论坛徽章:
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
66#
 楼主| 发表于 2022-11-27 06:23 | 只看该作者
61的说明看明白了吗?
"四个组合"是指题目中说的每次猜测四个方格。总共25个方格,四个组合总有C(25,4)=12650种。比如我解题第一步选中的11,22,23,55四个方格,就是“四个组合”的一种。
每次你挑选的四个方格,应该尽量把未知的条数减少一半。比如一开始20条全是未知的,我挑选的那四个方格,可以把20条分成10+10两组,根据回答YES或者NO, 确定答案藏在其中的哪一组。
然后第二步就是再挑选四个方格,把剩下的10条划分成5+5组。这就是二分法,以此类推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
67#
发表于 2022-11-27 09:58 | 只看该作者
从所有的4格组合中找出能筛选10个的
with  b(n,s) as(values
(1,[1,2,3,4]),
(2,[2,3,4,5]),
(3,[6,7,8,9]),
(4,[7,8,9,10]),
(5,[11,12,13,14]),
(6,[12,13,14,15]),
(7,[16,17,18,19]),
(8,[17,18,19,20]),
(9,[21,22,23,24]),
(10,[22,23,24,25]),
(11,[1,6,11,16]),
(12,[6,11,16,21]),
(13,[2,7,12,17]),
(14,[7,12,17,22]),
(15,[3,8,13,18]),
(16,[8,13,18,23]),
(17,[4,9,14,19]),
(18,[9,14,19,24]),
(19,[5,10,15,20]),
(20,[10,15,20,25])
),
a as (select i from generate_series(1,25)t(i)),
t1 as(
select row_number()over()rn,[a.i,b.i,c.i,d.i]q from a,a b,a c,a d
where a.i>b.i and b.i>c.i and c.i>d.i),   --select count() from t1
t as (select t1.rn,unnest(q)i from t1),
r as(
select t.rn,count(t.i)cnt from t,b where list_has(b.s,t.i)group by t.rn
)
select t1.* from r,t1 where cnt=10 and t1.rn=r.rn limit 10;
--select count(*) from r where cnt=10; --432

使用道具 举报

回复
论坛徽章:
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
68#
发表于 2022-11-27 10:23 | 只看该作者
〇〇 发表于 2022-11-27 09:58
从所有的4格组合中找出能筛选10个的with  b(n,s) as(values(1,[1,2,3,4]),(2,[2,3,4,5]),(3,[6,7,8,9]),(4, ...

上面的逻辑有问题,改成下面的,速度很慢
with  b(n,s) as(values
(1,[1,2,3,4]),
(2,[2,3,4,5]),
(3,[6,7,8,9]),
(4,[7,8,9,10]),
(5,[11,12,13,14]),
(6,[12,13,14,15]),
(7,[16,17,18,19]),
(8,[17,18,19,20]),
(9,[21,22,23,24]),
(10,[22,23,24,25]),
(11,[1,6,11,16]),
(12,[6,11,16,21]),
(13,[2,7,12,17]),
(14,[7,12,17,22]),
(15,[3,8,13,18]),
(16,[8,13,18,23]),
(17,[4,9,14,19]),
(18,[9,14,19,24]),
(19,[5,10,15,20]),
(20,[10,15,20,25])
),
a as (select i from generate_series(1,25)t(i)),
t1 as(
select row_number()over()rn,[a.i,b.i,c.i,d.i]q from a,a b,a c,a d
where a.i>b.i and b.i>c.i and c.i>d.i),   --select count() from t1
t as (select t1.rn,unnest(q)i from t1),
r as(
select t.rn,count(*)cnt from b,t
where not exists(select 1 from t t2 where t.rn=t2.rn and t2.i in (select unnest(s)))group by t.rn
--select t.rn,count(t.i)cnt from t,b where list_has(b.s,t.i)group by t.rn
)
--select cnt,count(*) from r group by cnt;
--select count(*) from r where cnt=10;
select t1.* from r,t1 where cnt=40 and t1.rn=r.rn limit 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
69#
发表于 2022-11-27 10:46 | 只看该作者
〇〇 发表于 2022-11-27 09:58
从所有的4格组合中找出能筛选10个的with  b(n,s) as(values(1,[1,2,3,4]),(2,[2,3,4,5]),(3,[6,7,8,9]),(4, ...

加了distinct,貌似对了
with  b(n,s) as(values
(1,[1,2,3,4]),
(2,[2,3,4,5]),
(3,[6,7,8,9]),
(4,[7,8,9,10]),
(5,[11,12,13,14]),
(6,[12,13,14,15]),
(7,[16,17,18,19]),
(8,[17,18,19,20]),
(9,[21,22,23,24]),
(10,[22,23,24,25]),
(11,[1,6,11,16]),
(12,[6,11,16,21]),
(13,[2,7,12,17]),
(14,[7,12,17,22]),
(15,[3,8,13,18]),
(16,[8,13,18,23]),
(17,[4,9,14,19]),
(18,[9,14,19,24]),
(19,[5,10,15,20]),
(20,[10,15,20,25])
),
a as (select i from generate_series(1,25)t(i)),
t1 as(
select row_number()over()rn,[a.i,b.i,c.i,d.i]q from a,a b,a c,a d
where a.i>b.i and b.i>c.i and c.i>d.i),   --select count() from t1
t as (select t1.rn,unnest(q)i from t1),
r as(
select t.rn,count(distinct b.n)cnt from t,b where list_has(b.s,t.i)group by t.rn
)
select t1.* from r,t1 where cnt=10 and t1.rn=r.rn limit 10;
--select cnt,count(*) from r group by cnt;

使用道具 举报

回复
论坛徽章:
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
70#
发表于 2022-11-27 10:53 | 只看该作者
不清楚是否任意一个筛选10个长方形条的4格组合都能作为起点,然后下一步用y/n来分支

使用道具 举报

回复

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

本版积分规则 发表回复

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