|
魔数法对于判断棋盘没有优势
with magic as(select '00000000;00000111;00001001;10100001;00010010;00111100;10010000;01100010;01001000;11000100'm from dual)
,s as(select '_'c from dual union all select 'X' from dual union all select 'O' from dual)
,tuples as ( select s.c||a.c||b.c||c.c||d.c||e.c||f.c||g.c||h.c s from s,s a,s b,s c,s d,s e,s f,s g,s h ) --第1步必须在125中,所以不能全空,where s.c||a.c||d.c<>'___'
,txo_1 as (
select s,
case when instr(substr(m,instr(s,'X',1,1)*9+1,8)+substr(m,instr(s,'X',1,2)*9+1,8)+substr(m,instr(s,'X',1,3)*9+1,8)+substr(m,instr(s,'X',1,4)*9+1,8)+substr(m,instr(s,'X',1,5)*9+1,8),3)>0 then 'X'
when instr(substr(m,instr(s,'O',1,1)*9+1,8)+substr(m,instr(s,'O',1,2)*9+1,8)+substr(m,instr(s,'O',1,3)*9+1,8)+substr(m,instr(s,'O',1,4)*9+1,8)+substr(m,instr(s,'O',1,5)*9+1,8),3)>0 then 'O'
else 'D'
end as winner
from tuples,magic
where regexp_count(s,'X')-regexp_count(s,'O') in(0,1) and (s<>'XXXOO----') ---减少1个根本不存在的布局,结果奇怪地快了很多
and (regexp_count(s,'X')<3
or decode(regexp_count(s,'X')-regexp_count(s,'O'),0,instr(substr(m,instr(s,'X',1,1)*9+1,8)+substr(m,instr(s,'X',1,2)*9+1,8)+substr(m,instr(s,'X',1,3)*9+1,8)+substr(m,instr(s,'X',1,4)*9+1,8)+substr(m,instr(s,'X',1,5)*9+1,8),3)
,1,instr(substr(m,instr(s,'O',1,1)*9+1,8)+substr(m,instr(s,'O',1,2)*9+1,8)+substr(m,instr(s,'O',1,3)*9+1,8)+substr(m,instr(s,'O',1,4)*9+1,8)+substr(m,instr(s,'O',1,5)*9+1,8),3))=0
)
and (regexp_count(s,'_')=0
or instr(substr(m,instr(s,'X',1,1)*9+1,8)+substr(m,instr(s,'X',1,2)*9+1,8)+substr(m,instr(s,'X',1,3)*9+1,8)+substr(m,instr(s,'X',1,4)*9+1,8)+substr(m,instr(s,'X',1,5)*9+1,8),3)>0
or instr(substr(m,instr(s,'O',1,1)*9+1,8)+substr(m,instr(s,'O',1,2)*9+1,8)+substr(m,instr(s,'O',1,3)*9+1,8)+substr(m,instr(s,'O',1,4)*9+1,8)+substr(m,instr(s,'O',1,5)*9+1,8),3)>0
)
)
select count(*) from txo_1;
COUNT(*)
----------
958
已用时间: 00: 00: 00.74
SQL> /
COUNT(*)
----------
958
已用时间: 00: 00: 00.50 |
|