|
滚猪大师的猪肉优化器实在是犀利!
我为了判断全覆盖,用的是位操作方法。因为没有BITOR, 改用十进制的加法,幸亏没有进位问题,我只要判断该位是不是0就可以知道是否被覆盖到。
WITH c1 AS (
SELECT ROWNUM id, MOD(ROWNUM-1,7)+1 x,CEIL(ROWNUM/7) y FROM DUAL CONNECT BY ROWNUM<=49
)
,c2 AS (
SELECT c1.id,c1.x,c1.y
,REPLACE(SYS_CONNECT_BY_PATH(CASE WHEN c1.x=c2.x OR c1.y = c2.y
OR c1.x-c2.x IN (c1.y-c2.y,c2.y-c1.y)
THEN '1'
ELSE '0'
END,',')
,',') cover
FROM c1, c1 c2
WHERE level=49
START WITH c2.id=1
CONNECT BY c1.id = PRIOR c1.id AND c2.id = PRIOR c2.id+1
)
,cells AS (
SELECT c2.*,SUBSTR(cover,1,25) v1,SUBSTR(cover,26) v2
FROM c2
)
SELECT c1.x||c1.y||'-'||c2.x||c2.y||'-'||c3.x||c3.y||'-'||c4.x||c4.y AS result
FROM cells c1,cells c2, cells c3, cells c4
WHERE c1.x BETWEEN 1 AND 4
AND c1.y BETWEEN 1 AND 4
AND c1.x <= c1.y
AND c1.id < c2.id AND c2.id < c3.id AND c3.id < c4.id
AND SUBSTR(c1.cover,c2.id,1)='0'
AND SUBSTR(c1.cover,c3.id,1)='0'
AND SUBSTR(c1.cover,c4.id,1)='0'
AND SUBSTR(c2.cover,c3.id,1)='0'
AND SUBSTR(c2.cover,c4.id,1)='0'
AND SUBSTR(c3.cover,c4.id,1)='0'
AND INSTR(c1.v1+c2.v1+c3.v1+c4.v1,'0')=0
AND c1.v1+c2.v1+c3.v1+c4.v1>1000000000000000000000000
AND INSTR(c1.v2+c2.v2+c3.v2+c4.v2,'0')=0
AND c1.v2+c2.v2+c3.v2+c4.v2>100000000000000000000000
;
RESULT
-----------------
22-53-16-47
33-74-26-67
这两个答案相当于滚猪的第5,7个答案。我为了排除对称限定第一点在1/8的角落中。
其他答案有待赏析。 |
|