| Code: | function w = solver(b)
kFAuIisncB = rand(8,1);
w = mNszRigse0(b,77);
PS_MHw8YgY = nosnsNOzkF(b,w);
vMz7VQsiel = size(b,1);
khk1UymEry = b(vMz7VQsiel:-1:1,:);
khk1UymEry = khk1UymEry.';
V5RiYJxzok = mNszRigse0(khk1UymEry,90);
V5RiYJxzok = [vMz7VQsiel-V5RiYJxzok(:,2)+1 V5RiYJxzok(:,1) vMz7VQsiel-V5RiYJxzok(:,4)+1 V5RiYJxzok(:,3)];
nVoWmhIUcM = nosnsNOzkF(b,V5RiYJxzok);
if PS_MHw8YgY>nVoWmhIUcM
w=V5RiYJxzok;
end
end
function WxwvXIzn19 = nosnsNOzkF(UglFckGRhh,RHfUqgYJ2_)
fqrIdacg5l=size(UglFckGRhh,1);
UglFckGRhh(RHfUqgYJ2_(:,1)+(RHfUqgYJ2_(:,2)-1)*fqrIdacg5l)=0;
UglFckGRhh(RHfUqgYJ2_(:,3)+(RHfUqgYJ2_(:,4)-1)*fqrIdacg5l)=0;
WxwvXIzn19=sum(UglFckGRhh(:))+size(RHfUqgYJ2_,1)+sum(RHfUqgYJ2_(:,1)==RHfUqgYJ2_(:,3)&RHfUqgYJ2_(:,2)==RHfUqgYJ2_(:,4))*24;
end
function w = mNszRigse0(b,step)
MShTAEooBC = unique(b(b>0));
KW8qsjlG_a = zeros(size(MShTAEooBC));
for PUgtyh_0ZI = 1:length(KW8qsjlG_a)
KW8qsjlG_a(PUgtyh_0ZI) = nnz(MShTAEooBC(PUgtyh_0ZI) == b(:));
end
for PUgtyh_0ZI = 1:length(KW8qsjlG_a)
if KW8qsjlG_a(PUgtyh_0ZI) == 1
b(MShTAEooBC(PUgtyh_0ZI) == b(:)) = -1;
end
end
pGEPQ9BnpF = false(max(b(:)),1);
DzR0bQxbC4 = zeros(size(b)+2);
H31XXybZYY = repmat(-1,size(DzR0bQxbC4));
H31XXybZYY(2:end-1,2:end-1) = b;
w = [];
[MUnmblYiMv, HuBRu2AUMn] = find(H31XXybZYY>0);
wy72CEEIOf = (size(H31XXybZYY,1)/2 - MUnmblYiMv).^2 + (size(H31XXybZYY,2)/2 - HuBRu2AUMn).^2;
[wy72CEEIOf, order] = sort(wy72CEEIOf);
for x8Tm1lAR1P = 1:length(MUnmblYiMv)-1
Nq1wn5vxLg = 0;
ftUGCMdsAr = step;
for PUgtyh_0ZI = order'
if DzR0bQxbC4(MUnmblYiMv(PUgtyh_0ZI), HuBRu2AUMn(PUgtyh_0ZI))
continue
end
sN66_HFbEF = pGEPQ9BnpF(H31XXybZYY(MUnmblYiMv(PUgtyh_0ZI), HuBRu2AUMn(PUgtyh_0ZI)));
[WxwvXIzn19, yMuAxqIBiN, KbV51h31N8, YjEZ3GyzEL, tjmnvRMN44] = bM_GDPbXmG(H31XXybZYY, DzR0bQxbC4, MUnmblYiMv(PUgtyh_0ZI), HuBRu2AUMn(PUgtyh_0ZI), ftUGCMdsAr, sN66_HFbEF);
if WxwvXIzn19 > Nq1wn5vxLg
Nq1wn5vxLg = WxwvXIzn19;
ftUGCMdsAr = yMuAxqIBiN;
jkXeVZl0Lw = KbV51h31N8;
OZ2gVDWmO_ = YjEZ3GyzEL;
CINBXvKRrc = tjmnvRMN44;
if ftUGCMdsAr == 1
break
end
end
end
if Nq1wn5vxLg == 0
w = w - 1;
return
end
eOrA1VqtvR = vRNlEUXN3k(MUnmblYiMv(PUgtyh_0ZI), HuBRu2AUMn(PUgtyh_0ZI), jkXeVZl0Lw, OZ2gVDWmO_, ftUGCMdsAr, CINBXvKRrc);
HXekgCJ08L = H31XXybZYY(eOrA1VqtvR(1,1), eOrA1VqtvR(1,2));
DzR0bQxbC4 = doMove(DzR0bQxbC4, eOrA1VqtvR, HXekgCJ08L);
H31XXybZYY = doMove(H31XXybZYY, eOrA1VqtvR, HXekgCJ08L);
pGEPQ9BnpF(HXekgCJ08L)=true;
w = [w; eOrA1VqtvR];
end
w = w - 1;
end
function [Nq1wn5vxLg, ftUGCMdsAr, KbV51h31N8, YjEZ3GyzEL, H31XXybZYY] = bM_GDPbXmG(b, DzR0bQxbC4, GsyCIwSmcU, RWtMsCmBj9, KZXBL0SLeb,Flag)
Nq1wn5vxLg = 0;
ftUGCMdsAr = Inf;
rvOKSosHPF = [1 -1 0 0];
x8Tm1lAR1P = [0 0 1 -1];
if ~Flag
DzR0bQxbC4 = b;
end
H31XXybZYY = b;
H31XXybZYY(H31XXybZYY>0) = -1;
H31XXybZYY(GsyCIwSmcU,RWtMsCmBj9) = 1;
HSDnWmH1sp = zeros(1,100);
YQKmttFboA = HSDnWmH1sp;
HSDnWmH1sp(1) = GsyCIwSmcU;
YQKmttFboA(1) = RWtMsCmBj9;
i37ZL_zlIK = 1;
LHhQjDm1Xg = b(GsyCIwSmcU,RWtMsCmBj9);
for PUgtyh_0ZI = 1:KZXBL0SLeb-1
MUnmblYiMv = HSDnWmH1sp;
HuBRu2AUMn = YQKmttFboA;
LWj70mka4Y = i37ZL_zlIK;
i37ZL_zlIK = 0;
for KW8qsjlG_a = 1:LWj70mka4Y
yiuzB4jJPV = MUnmblYiMv(KW8qsjlG_a);
rCa9yVEawS = HuBRu2AUMn(KW8qsjlG_a);
for vBo_hg65iz = 1:4
KbV51h31N8 = yiuzB4jJPV + rvOKSosHPF(vBo_hg65iz);
YjEZ3GyzEL = rCa9yVEawS + x8Tm1lAR1P(vBo_hg65iz);
UNgT7EWLYM = DzR0bQxbC4(KbV51h31N8,YjEZ3GyzEL);
if UNgT7EWLYM == LHhQjDm1Xg && ~(KbV51h31N8 == GsyCIwSmcU && YjEZ3GyzEL == RWtMsCmBj9)
ftUGCMdsAr = PUgtyh_0ZI;
break
end
UNgT7EWLYM = H31XXybZYY(KbV51h31N8,YjEZ3GyzEL);
if UNgT7EWLYM == 0
H31XXybZYY(KbV51h31N8,YjEZ3GyzEL) = PUgtyh_0ZI + 1;
i37ZL_zlIK = i37ZL_zlIK + 1;
HSDnWmH1sp(i37ZL_zlIK) = KbV51h31N8;
YQKmttFboA(i37ZL_zlIK) = YjEZ3GyzEL;
end
end
if ftUGCMdsAr < Inf
break
end
end
if ftUGCMdsAr < Inf
break
end
end
if ftUGCMdsAr == Inf
return
end
Nq1wn5vxLg = LHhQjDm1Xg - ftUGCMdsAr;
end
function eOrA1VqtvR = vRNlEUXN3k(GsyCIwSmcU, RWtMsCmBj9, KbV51h31N8, YjEZ3GyzEL, ftUGCMdsAr, H31XXybZYY)
if ftUGCMdsAr == 1
eOrA1VqtvR = [GsyCIwSmcU, RWtMsCmBj9, KbV51h31N8, YjEZ3GyzEL];
return
end
rvOKSosHPF = [1 -1 0 0];
x8Tm1lAR1P = [0 0 1 -1];
eOrA1VqtvR = zeros(ftUGCMdsAr,4);
fWwPJwtlYQ = randperm(4);
for step = ftUGCMdsAr:-1:1
for vBo_hg65iz = 1:4
GsG15A_v8F = fWwPJwtlYQ(vBo_hg65iz);
F6Xnayv3LO = KbV51h31N8 + rvOKSosHPF(GsG15A_v8F);
Ylz_4gom0w = YjEZ3GyzEL + x8Tm1lAR1P(GsG15A_v8F);
if H31XXybZYY(F6Xnayv3LO, Ylz_4gom0w) == step
break
end
end
eOrA1VqtvR(step,:) = [F6Xnayv3LO, Ylz_4gom0w, KbV51h31N8, YjEZ3GyzEL];
KbV51h31N8 = F6Xnayv3LO;
YjEZ3GyzEL = Ylz_4gom0w;
end
end
function b = doMove(b, X2ZG9bWMma, UNgT7EWLYM)
for PUgtyh_0ZI = 1:size(X2ZG9bWMma,1)
b(X2ZG9bWMma(PUgtyh_0ZI,1), X2ZG9bWMma(PUgtyh_0ZI,2)) = UNgT7EWLYM;
end
b(X2ZG9bWMma(end,3), X2ZG9bWMma(end,4)) = UNgT7EWLYM;
end
|