改进算法
This commit is contained in:
parent
1ea8fb3cc8
commit
d4ff5fdeb3
|
@ -3001,12 +3001,13 @@ const specialSearchFunctions = (function() {
|
|||
function:cards=>cards.filter(card=>{
|
||||
function is3x3(sk)
|
||||
{
|
||||
const lineNum = 0b111;
|
||||
for (let si=0;si<3;si++)
|
||||
{
|
||||
if (sk[si] === sk[si+1] && sk[si] === sk[si+2] && //3行连续相等
|
||||
(si>0?(sk[si-1] & sk[si]) ===0:true) && //如果上一行存在,并且无交集(and为0)
|
||||
(si+2<4?(sk[si+3] & sk[si]) ===0:true) && //如果下一行存在,并且无交集(and为0)
|
||||
(sk[si] === 7 || sk[si] === 7<<1 || sk[si] === 7<<2 || sk[si] === 7<<3) //如果这一行满足任意2珠并联(二进制111=十进制7)
|
||||
(sk[si] >= lineNum && Math.isPowerOfTwo(sk[si] / lineNum)) //如果这一行满足大于等于0b111并且除以0b111的倍数为2的幂(因为<<1等于乘以2)
|
||||
)
|
||||
return true;
|
||||
}
|
||||
|
@ -3027,6 +3028,37 @@ const specialSearchFunctions = (function() {
|
|||
return fragment;
|
||||
}
|
||||
},
|
||||
/*{name:"Create L shape",otLangName:{chs:"生成L字",cht:"生成L字"},
|
||||
function:cards=>cards.filter(card=>{
|
||||
function isL(sk)
|
||||
{
|
||||
const lineNum = 0b111;
|
||||
for (let si=0;si<3;si++)
|
||||
{
|
||||
if (sk[si] === sk[si+1] && sk[si] === sk[si+2] && //3行连续相等
|
||||
(si>0?(sk[si-1] & sk[si]) ===0:true) && //如果上一行存在,并且无交集(and为0)
|
||||
(si+2<4?(sk[si+3] & sk[si]) ===0:true) && //如果下一行存在,并且无交集(and为0)
|
||||
(sk[si] >= lineNum && Math.isPowerOfTwo(sk[si] / lineNum)) //如果这一行满足大于等于0b111并且除以0b111的倍数为2的幂(因为<<1等于乘以2)
|
||||
)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
const searchTypeArray = [176];
|
||||
const skill = getCardActiveSkill(card, searchTypeArray);
|
||||
return skill && is3x3(skill.params);
|
||||
}),
|
||||
addition:card=>{
|
||||
const searchTypeArray = [176];
|
||||
const skill = getCardActiveSkill(card, searchTypeArray);
|
||||
if (!skill) return;
|
||||
const sk = skill.params;
|
||||
const fragment = document.createDocumentFragment();
|
||||
fragment.appendChild(document.createTextNode(`3×3`));
|
||||
fragment.appendChild(createOrbsList(sk[5]));
|
||||
return fragment;
|
||||
}
|
||||
},*/
|
||||
{name:"Create a vertical",otLangName:{chs:"产竖",cht:"產豎"},
|
||||
function:cards=>cards.filter(card=>{
|
||||
const searchTypeArray = [127];
|
||||
|
@ -3091,17 +3123,14 @@ const specialSearchFunctions = (function() {
|
|||
function isRow(skill)
|
||||
{
|
||||
const sk = skill.params;
|
||||
if (skill.type === 128) //普通横
|
||||
{return true;}
|
||||
else if (skill.type === 71) //花火
|
||||
{return sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined).length === 1}
|
||||
else if (skill.type === 176) //特殊形状
|
||||
{
|
||||
for (let si=0;si<5;si++)
|
||||
{
|
||||
if ((sk[si] & 63) === 63)
|
||||
return true;
|
||||
}
|
||||
if (skill.type === 128) {//普通横
|
||||
return true;
|
||||
}
|
||||
else if (skill.type === 71) {//花火
|
||||
return sk.slice(0,sk.includes(-1)?sk.indexOf(-1):undefined).length === 1
|
||||
}
|
||||
else if (skill.type === 176) {//特殊形状
|
||||
return sk.some(n=>(n & 0b111111) === 0b111111)
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -265,7 +265,16 @@ Array.prototype.nodeJoin = function(separator)
|
|||
Math.randomInteger = function(max, min = 0) {
|
||||
return this.floor(this.random() * (max - min + 1) + min);
|
||||
}
|
||||
|
||||
Math.isPowerOfTwo = function(n) {
|
||||
if (Number.isInteger(0) && n > 0)
|
||||
return (n & (n - 1)) === 0;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
Number.prototype.notNeighbour = function() {
|
||||
const num = this.valueOf();
|
||||
return ~num & (num << 1 | num >> 1);
|
||||
}
|
||||
//将二进制flag转为数组
|
||||
function flags(num) {
|
||||
const arr = [];
|
||||
|
|
Loading…
Reference in New Issue