ID:48657
Title:fo4
Author:Fabio Carnevale
Date:2008-05-06 17:58:58
Score:15488.4679
Result:154602.00 (cyc: 12, node: 958)
CPU Time:38.0708
Status:Passed
Comments:
Based on:go3
Code:
function w = solver(b)
iZAxFi3h2G = rand(8,1);
w = ESYKmyVuBy(b,77);
seT8ZyKU_k = hdFIYM5wLJ(b,w);
u_WHXf6I4t = size(b,1);
kJ82QMFSQP = flipud(b);
kJ82QMFSQP = kJ82QMFSQP.';
iVqWRRSQSd = ESYKmyVuBy(kJ82QMFSQP,90);
iVqWRRSQSd = [u_WHXf6I4t-iVqWRRSQSd(:,2)+1 iVqWRRSQSd(:,1) u_WHXf6I4t-iVqWRRSQSd(:,4)+1 iVqWRRSQSd(:,3)];
c8a2Sd0qgc = hdFIYM5wLJ(b,iVqWRRSQSd);
if seT8ZyKU_k>c8a2Sd0qgc
w=iVqWRRSQSd;
end
end
function rp6H0avn25 = hdFIYM5wLJ(v2EeHSAOsl,BJGE57JOAH)
RlOs1dSb6j=size(v2EeHSAOsl,1);
v2EeHSAOsl(BJGE57JOAH(:,1)+(BJGE57JOAH(:,2)-1)*RlOs1dSb6j)=0;
v2EeHSAOsl(BJGE57JOAH(:,3)+(BJGE57JOAH(:,4)-1)*RlOs1dSb6j)=0;
rp6H0avn25=sum(v2EeHSAOsl(:))+size(BJGE57JOAH,1)+sum(BJGE57JOAH(:,1)==BJGE57JOAH(:,3)&BJGE57JOAH(:,2)==BJGE57JOAH(:,4))*24;
end
function w = ESYKmyVuBy(b,step)
e2kLd3NHeW = unique(b(b>0));
NExe4vFNzF=zeros(size(e2kLd3NHeW));
for kujhnTSIXN=1:numel(e2kLd3NHeW)
kSDaHetUUw=find(b==e2kLd3NHeW(kujhnTSIXN));
if numel(kSDaHetUUw)==1
NExe4vFNzF(kujhnTSIXN)=e2kLd3NHeW(kujhnTSIXN);
b(kSDaHetUUw)=-1;
else
NExe4vFNzF(kujhnTSIXN)=e2kLd3NHeW(kujhnTSIXN);
end
end
N1vknBN9CW = false(max(b(:)),1);
w06AHiRjW_ = zeros(size(b)+2);
HCH9jF3IVO = repmat(-1,size(w06AHiRjW_));
HCH9jF3IVO(2:end-1,2:end-1) = b;
w = [];
[mvZnqaDsSg, DUwxs2_1Vo] = find(HCH9jF3IVO>0);
qW9yRrj0GY = (size(HCH9jF3IVO,1)/2 - mvZnqaDsSg).^2 + (size(HCH9jF3IVO,2)/2 - DUwxs2_1Vo).^2;
[qW9yRrj0GY, order] = sort(qW9yRrj0GY);
for efuQQG90AO = 1:length(mvZnqaDsSg)-1
CHrKwDDKTn = 0;
a9AdDHqpbJ = step;
for kujhnTSIXN = order'
if w06AHiRjW_(mvZnqaDsSg(kujhnTSIXN), DUwxs2_1Vo(kujhnTSIXN))
continue
end
meeSjzvnGS = N1vknBN9CW(HCH9jF3IVO(mvZnqaDsSg(kujhnTSIXN), DUwxs2_1Vo(kujhnTSIXN)));
[rp6H0avn25, AeVJornQWm, gvgvM_sb6X, YX_Dg3pfKJ, rtrndWSfLZ] = EEmFBA0t2X(HCH9jF3IVO, w06AHiRjW_, mvZnqaDsSg(kujhnTSIXN), DUwxs2_1Vo(kujhnTSIXN), a9AdDHqpbJ, meeSjzvnGS);
if rp6H0avn25 > CHrKwDDKTn
CHrKwDDKTn = rp6H0avn25;
a9AdDHqpbJ = AeVJornQWm;
iu9e2qlrl9 = gvgvM_sb6X;
wpBJHDRyOI = YX_Dg3pfKJ;
eENfpth8wK = rtrndWSfLZ;
if a9AdDHqpbJ == 1
break
end
end
end
if CHrKwDDKTn == 0
w = w - 1;
return
end
x2eXAgLZhw = FYmh_9zDKX(mvZnqaDsSg(kujhnTSIXN), DUwxs2_1Vo(kujhnTSIXN), iu9e2qlrl9, wpBJHDRyOI, a9AdDHqpbJ, eENfpth8wK);
X8OFCssspC = HCH9jF3IVO(x2eXAgLZhw(1,1), x2eXAgLZhw(1,2));
w06AHiRjW_ = doMove(w06AHiRjW_, x2eXAgLZhw, X8OFCssspC);
HCH9jF3IVO = doMove(HCH9jF3IVO, x2eXAgLZhw, X8OFCssspC);
N1vknBN9CW(X8OFCssspC)=true;
w = [w; x2eXAgLZhw];
end
w = w - 1;
end
function [CHrKwDDKTn, a9AdDHqpbJ, gvgvM_sb6X, YX_Dg3pfKJ, HCH9jF3IVO] = EEmFBA0t2X(b, w06AHiRjW_, FMF4ExPpxd, XFiwKVFIcp, rp68IOmiM3,Flag)
CHrKwDDKTn = 0;
a9AdDHqpbJ = Inf;
mC1cnzd238 = [1 -1 0 0];
efuQQG90AO = [0 0 1 -1];
if ~Flag
w06AHiRjW_ = b;
end
HCH9jF3IVO = b;
HCH9jF3IVO(HCH9jF3IVO>0) = -1;
HCH9jF3IVO(FMF4ExPpxd,XFiwKVFIcp) = 1;
yVHjpV_M3Q = zeros(1,100);
QsyIn17MT3 = yVHjpV_M3Q;
yVHjpV_M3Q(1) = FMF4ExPpxd;
QsyIn17MT3(1) = XFiwKVFIcp;
Z0FHlfyjQm = 1;
FwvaKjXb3I = b(FMF4ExPpxd,XFiwKVFIcp);
for kujhnTSIXN = 1:rp68IOmiM3-1
mvZnqaDsSg = yVHjpV_M3Q;
DUwxs2_1Vo = QsyIn17MT3;
OGGpJIyHmO = Z0FHlfyjQm;
Z0FHlfyjQm = 0;
for NExe4vFNzF = 1:OGGpJIyHmO
E5WN0lFc9K = mvZnqaDsSg(NExe4vFNzF);
d6UJxdUfok = DUwxs2_1Vo(NExe4vFNzF);
for N2JNJYkm6N = 1:4
gvgvM_sb6X = E5WN0lFc9K + mC1cnzd238(N2JNJYkm6N);
YX_Dg3pfKJ = d6UJxdUfok + efuQQG90AO(N2JNJYkm6N);
bwi1H8W_BV = w06AHiRjW_(gvgvM_sb6X,YX_Dg3pfKJ);
if bwi1H8W_BV == FwvaKjXb3I && ~(gvgvM_sb6X == FMF4ExPpxd && YX_Dg3pfKJ == XFiwKVFIcp)
a9AdDHqpbJ = kujhnTSIXN;
break
end
bwi1H8W_BV = HCH9jF3IVO(gvgvM_sb6X,YX_Dg3pfKJ);
if bwi1H8W_BV == 0
HCH9jF3IVO(gvgvM_sb6X,YX_Dg3pfKJ) = kujhnTSIXN + 1;
Z0FHlfyjQm = Z0FHlfyjQm + 1;
yVHjpV_M3Q(Z0FHlfyjQm) = gvgvM_sb6X;
QsyIn17MT3(Z0FHlfyjQm) = YX_Dg3pfKJ;
end
end
if a9AdDHqpbJ < Inf
break
end
end
if a9AdDHqpbJ < Inf
break
end
end
CHrKwDDKTn = FwvaKjXb3I - a9AdDHqpbJ;
if a9AdDHqpbJ == Inf
CHrKwDDKTn = 0;
end
end
function x2eXAgLZhw = FYmh_9zDKX(FMF4ExPpxd, XFiwKVFIcp, gvgvM_sb6X, YX_Dg3pfKJ, a9AdDHqpbJ, HCH9jF3IVO)
if a9AdDHqpbJ == 1
x2eXAgLZhw = [FMF4ExPpxd, XFiwKVFIcp, gvgvM_sb6X, YX_Dg3pfKJ];
return
end
mC1cnzd238 = [1 -1 0 0];
efuQQG90AO = [0 0 1 -1];
x2eXAgLZhw = zeros(a9AdDHqpbJ,4);
un_WVdQ_jY = randperm(4);
for step = a9AdDHqpbJ:-1:1
for N2JNJYkm6N = 1:4
wmm5LkWnkr = un_WVdQ_jY(N2JNJYkm6N);
NdpaSk6yJr = gvgvM_sb6X + mC1cnzd238(wmm5LkWnkr);
o88bz8tU6O = YX_Dg3pfKJ + efuQQG90AO(wmm5LkWnkr);
if HCH9jF3IVO(NdpaSk6yJr, o88bz8tU6O) == step
break
end
end
x2eXAgLZhw(step,:) = [NdpaSk6yJr, o88bz8tU6O, gvgvM_sb6X, YX_Dg3pfKJ];
gvgvM_sb6X = NdpaSk6yJr;
YX_Dg3pfKJ = o88bz8tU6O;
end
end
function b = doMove(b, KBpt6Bb0Ju, bwi1H8W_BV)
b(KBpt6Bb0Ju(:,1)+(KBpt6Bb0Ju(:,2)-1)*size(b,1))=bwi1H8W_BV;
b(KBpt6Bb0Ju(end,3), KBpt6Bb0Ju(end,4)) = bwi1H8W_BV;
end