Diffing "soo sneaky" and "testc19"

 Title: soo sneaky testc19 Author: the cyclist JohanH Submitted: 2005-05-18 13:14:19 UTC 2005-05-18 16:59:31 UTC Status: Passed Passed Score: 1849.77 2124.71 Result: 18496.2207 21243.3884 CPU Time: 70.7757 79.8566 Code: ```function [dy,dx,mark,carry]=solver(main,food,ants,scent) %18372.39 or 18293.70 %18372.39 rand(1,5); i35=3:5; i24=2:4; i02=0:2; dirx = [-1,2,2,2,-1; 2,-1,-1,-1,2; 2,0,0,0,2; 2,1,1,1,2; 1,2,2,2,1]; diry = [-1,-1,0,1,1; -1,-1,0,1,1; -1,-1,0,1,1; -1,-1,0,1,1; -1,-1,0,1,1]; % find reachable regions BAD=main<0; if BAD(7)||BAD(9)||BAD(17)||BAD(19) if BAD(7) BAD(1)=1; BAD(2)=BAD(2)||BAD(8); BAD(3)=BAD(3)||(BAD(8)&&BAD(9)); BAD(6)=BAD(6)||BAD(12); BAD(11)=BAD(11)||(BAD(12)&&BAD(17)); end if BAD(9) BAD(4)=BAD(4)||BAD(8); BAD(5)=1; BAD(10)=BAD(10)||BAD(14); end if BAD(17) BAD(16)=BAD(16)||BAD(12); BAD(21)=1; BAD(22)=BAD(22)||BAD(18); end if BAD(19) BAD(15)=BAD(15)||(BAD(9)&&BAD(14)); BAD(20)=BAD(20)||(BAD(14)); BAD(23)=BAD(23)||(BAD(17)&&BAD(18)); BAD(24)=BAD(24)||(BAD(18)); BAD(25)=1; end % modify current board based on reachable regions main(BAD)=-1; food(BAD)=0; scent(BAD)=0; ants(BAD)=0; end BAD(13)=1; % setup game stats scents=scent(scent>0); maxscent=max(scents(:)); % mark this field if (max(main(:))) if (max(main(:))>0) mark=400-scent(13); scent(13)=400; init=0; hills=find(main>0); scent(hills)=1e7; food(hills)=0; if isempty(scents);maxscent=mark;end if isempty(scents) maxscent=mark; end elseif (maxscent==min(scents(:))) % init phase mark=maxscent-scent(13); scent(13)=maxscent; init=1; elseif isempty(scents) % nothing is marked mark=98; scent(13)=scent(13)+98; maxscent=mark; init=1; else mark=maxscent-1-scent(13); scent(13)=maxscent-1; init=0; end % look around for food if max(food(:))<1 ||init % nothing found or no way home, search target=maxscent-scent;target(BAD)=-1; target=((main==0)).*(maxscent-scent); target(BAD)=-1; [y,x]=find(target==max(target(:))); if (numel(y)>1) r=ceil(rand*numel(y)); y=y(r); x=x(r); end carry=food(13)>0; dx = dirx(x,y); if dx<2 dy = diry(x,y); if (y>1&&y<5&&x>1&&x<5) % direct way dy=y-3; dx=x-3; return; end; if ((y==1||y==5)&&(x==1||x==5)) % corner dy=y-3; dx=x-3; return; end; m(7,7)=0; m(y+i02,x+i02)=1; m=m(i35,i35); t=target(i24,i24).*m+m; [dy,dx]=find(t==max(t(:))); r=ceil(rand*numel(dy)); dy=dy(r)-2; dx=dx(r)-2; return; end; if (food(13)>1)&&rand<.95 % sit on a lot of food, go home target=scent;target(BAD)=-1; [y,x]=find(target==max(target(:))); if (food(13)>1)%&&rand<.95 % go home target=scent; target(BAD)=-1; [y,x]=find(target(i24,i24)==max(target(:))); if isempty(y) [y,x]=find(target==max(target(:))); else x = x + 1; y = y + 1; end if (numel(y)>1) y=y(1); x=x(1); r=ceil(rand*numel(y)); y=y(r); x=x(r); end carry=1; dx = dirx(x,y); if dx<2 dy = diry(x,y); if (y>1&&y<5&&x>1&&x<5) % direct way dy=y-3; dx=x-3; return; end; if ((y==1||y==5)&&(x==1||x==5)) % corner dy=y-3; dx=x-3; return; end; m(7,7)=0; m(y+i02,x+i02)=1; m=m(i35,i35); t=target(i24,i24).*m+m; [dy,dx]=find(t==max(t(:))); r=ceil(rand*numel(dy)); dy=dy(r)-2; dx=dx(r)-2; return; end; if (food(13) >= 1) % sit on one food, build track target=scent;target(BAD)=-1; target=scent; target(BAD)=-1; [yhome,xhome]=find(target==max(target(:))); lowfood=food;lowfood(scent>=scent(13))=0; carry=1; dhere=max(max(abs(yhome-3),abs(xhome-3))); runs=numel(lowfood(lowfood(:)>0)); lowfood(i24,i24)=lowfood(i24,i24)*1e8; target=lowfood;target(BAD)=-1; while runs % fetch food behind [y,x]=find(target==max(target(:))); if (numel(y)>1) r=ceil(rand*numel(y)); y=y(r); x=x(r); search = ones(5); %search(i24,i24)=1e8; search(13) = 0; for i = 1:numel(yhome) if xhome(i) <= 2 if yhome(i) <= 2 search([1:9 11 12 16 17 21]) = 0; elseif yhome(i) == 3 search([1:15]) = 0; elseif yhome(i) >= 4 search([1:5 7:10 14 15 19 20 25]) = 0; end elseif xhome(i) == 3 if yhome(i) <= 2 search([1:3 6:8 11 12 16:18 21:23]) = 0; elseif yhome(i) >= 4 search([3:5 8:10 14 15 18:20 23:25]) = 0; end elseif xhome(i) >= 4 if yhome(i) <= 2 search([1 6 7 11 12 16:19 21:25]) = 0; elseif yhome(i) == 3 search([11:25]) = 0; elseif yhome(i) >= 4 search([1 9 10 14 15 17:20 21:25]) = 0; end end end dx = dirx(x,y); if dx<2 dy = diry(x,y); else m(7,7)=0; m(y+i02,x+i02)=1; m=m(i35,i35); t=target(i24,i24).*m+m; [dy,dx]=find(t==max(t(:))); r=ceil(rand*numel(dy)); dy=dy(r)-2; dx=dx(r)-2; end if ( min(max(abs(yhome-y),abs(xhome-x))) > dhere ) carry=0; return; end target(y,x)=0;runs=runs-1; if ~any(search(:)) search=ones(5); search(i24,i24)=1e8; end carry = 1; %lowfood=food.*(scent0 [yfood,xfood]=find(lowfood==max(lowfood(:))); dhere=max(abs(yhome-3),abs(xhome-3)); runs=numel(find(lowfood(:)>0)); target2=lowfood;%.*search; target2(BAD)=-1; while runs % fetch food behind [y,x]=find(target2==max(target2(:))); if (numel(y)>1) r=ceil(rand*numel(y)); y=y(r); x=x(r); end if (y>1&&y<5&&x>1&&x<5) % direct way dy=y-3; dx=x-3; elseif ((y==1||y==5)&&(x==1||x==5)) % corner dy=y-3; dx=x-3; else m(7,7)=0; m(y+i02,x+i02)=1; m=m(i35,i35); t=target2(i24,i24).*m+m; [dy,dx]=find(t==max(t(:))); r=ceil(rand*numel(dy)); dy=dy(r)-2; dx=dx(r)-2; end dthere=max(abs(yhome-y),abs(xhome-x)); if all(dthere>dhere) carry=0; return; end target2(y,x)=0; runs=runs-1; end end if (carry) % go home target=scent;target(BAD)=-1; [y,x]=find(target==max(target(:))); if (numel(y)>1) r=ceil(rand*numel(y)); y=y(r); x=x(r); if (numel(yhome)>1) r=ceil(rand*numel(yhome)); yhome=yhome(r); xhome=xhome(r); end dx = dirx(x,y); if dx<2 dy = diry(x,y); if (yhome>1&&yhome<5&&xhome>1&&xhome<5) % direct way dy=yhome-3; dx=xhome-3; return; end; if ((yhome==1||yhome==5)&&(xhome==1||xhome==5)) % corner dy=yhome-3; dx=xhome-3; return; end; m(7,7)=0; m(y+i02,x+i02)=1; m(yhome+i02,xhome+i02)=1; m=m(i35,i35); t=target(i24,i24).*m+m; [dy,dx]=find(t==max(t(:))); r=ceil(rand*numel(dy)); dy=dy(r)-2; dx=dx(r)-2; return; end return; end; target=max(food-ants,0);target(BAD)=-1000; target=max(food-ants,0); target(BAD)=-1; [y,x]=find(target==max(target(:))); if (numel(y)>1) r=ceil(rand*numel(y)); y=y(r); x=x(r); end carry=0; dx = dirx(x,y); if dx<2 dy = diry(x,y); if (y>1&&y<5&&x>1&&x<5) % direct way dy=y-3; dx=x-3; return; end; if ((y==1||y==5)&&(x==1||x==5)) % corner dy=y-3; dx=x-3; return; end; m(7,7)=0; m(y+i02,x+i02)=1; m=m(i35,i35); t=target(i24,i24).*m+m; [dy,dx]=find(t==max(t(:))); r=ceil(rand*numel(dy)); dy=dy(r)-2; dx=dx(r)-2;```