# Diffing "Initialize beam2" and "Do arguments exist?"

 Title: Initialize beam2 Do arguments exist? Author: the cyclist the cyclist Submitted: 2006-12-06 16:12:47 UTC 2006-12-06 16:16:43 UTC Status: Passed Passed Score: 119.592 119.592 Result: 11958.7 11958.7 CPU Time: 13.1098 12.9942 Code: ```function solution = solver(n) S=0; if n==10 solution = zeros(n); sol=ones(n).*-1; rT=-1.*ones(1,n); cT=-1.*ones(1,n); sT=-1.*ones(1,n); rL=-1.*ones(1,n); cL=-1.*ones(1,n); sL=-1.*ones(1,n); rB=-1.*ones(1,n); cB=-1.*ones(1,n); sB=-1.*ones(1,n); rR=-1.*ones(1,n); cR=-1.*ones(1,n); sR=-1.*ones(1,n); do1T=1; doNT=1; bl=0; AAA=0; for i=[2:n-1 1 n] if rT(i)==-1 && ((i~=1 && i~=n) || (i==1 && do1T) || (i==n && doNT)) bl=bl+1; [rT(i),cT(i),sT(i)] = beam(0,i); if rT(i)==0 && cT(i)>0 rT(cT(i))=0; cT(cT(i))=i; sT(cT(i))=sT(i); bl=bl-1; end if rT(i)==0 && cT(i)<0 rB(-cT(i))=0; cB(-cT(i))=i; sB(-cT(i))=sT(i); bl=bl-1; if i==2 && sT(i)==0 rB(1)=0; cB(1)=1; sB(1)=0; rT(1)=0; cT(1)=-1; sT(1)=0; do1T=0; end if i==n-1 && sT(i)==0 rB(n)=0; cB(n)=n; sB(n)=0; rT(n)=0; cT(n)=-1.*n; sT(n)=0; doNT=0; end end if rT(i)>0 && cT(i)==0 bl=bl-1; rL(rT(i))=0; cL(rT(i))=i; sL(rT(i))=sT(i); end if rT(i)<0 && cT(i)==0 bl=bl-1; rR(-rT(i))=0; cR(-rT(i))=i; sR(-rT(i))=sT(i); end end if bl>=0.39*n AAA=1; break; end end if AAA<0.4 do1L=1; doNL=1; for i=[2:n-1 1 n] if rL(i)==-1 && ((i~=1 && i~=n) || (i==1 && do1L) || (i==n && doNL)) [rL(i),cL(i),sL(i)] = beam(i,0); if rL(i)==0 && cL(i)>0 rT(cL(i))=i; cT(cL(i))=0; sT(cL(i))=sL(i); end if rL(i)==0 && cL(i)<0 rB(-cL(i))=i; cB(-cL(i))=0; sB(-cL(i))=sL(i); end if rL(i)>0 && cL(i)==0 rL(rL(i))=i; cL(rL(i))=0; sL(rL(i))=sL(i); end if rL(i)<0 && cL(i)==0 rR(-rL(i))=i; cR(-rL(i))=0; sR(-rL(i))=sL(i); if i==2 && sL(i)==0 rR(1)=1; cR(1)=0; sR(1)=0; rL(1)=-1; cL(1)=0; sL(1)=0; do1L=0; end if i==n-1 && sL(i)==0 rR(n)=n; cR(n)=0; sR(n)=0; rL(n)=-n; cL(n)=0; sL(n)=0; doNL=0; end end end if rB(i)==-1 [rB(i),cB(i),sB(i)] = beam(0,-i); if rB(i)==0 && cB(i)>0 rT(cB(i))=0; cT(cB(i))=-i; sT(cB(i))=sB(i); end if rB(i)==0 && cB(i)<0 rB(-cB(i))=0; cB(-cB(i))=-i; sB(-cB(i))=sB(i); end if rB(i)>0 && cB(i)==0 rL(rB(i))=0; cL(rB(i))=-i; sL(rB(i))=sB(i); end if rB(i)<0 && cB(i)==0 rR(-rB(i))=0; cR(-rB(i))=-i; sR(-rB(i))=sB(i); end end if rR(i)==-1 [rR(i),cR(i),sR(i)] = beam(-i,0); if rR(i)==0 && cR(i)>0 rT(cR(i))=-i; cT(cR(i))=0; sT(cR(i))=sR(i); end if rR(i)==0 && cR(i)<0 rB(-cR(i))=-i; cB(-cR(i))=0; sB(-cR(i))=sR(i); end if rR(i)>0 && cR(i)==0 rL(rR(i))=-i; cL(rR(i))=0; sL(rR(i))=sR(i); end if rR(i)<0 && cR(i)==0 rR(-rR(i))=-i; cR(-rR(i))=0; sR(-rR(i))=sR(i); end end end if rT(1)==0 && cT(1)==1 sol(1,2)=sT(1);sol(1,1)=0; end if rL(1)==1 && cL(1)==0 sol(2,1)=sL(1);sol(1,1)=0; end if rB(1)==0 && cB(1)==-1 sol(n,2)=sT(1);sol(n,1)=0; end if rR(1)==-1 && cR(1)==0 sol(2,n)=sT(1);sol(1,n)=0; end if rT(n)==0 && cT(n)==n sol(1,n-1)=sT(n);sol(1,n)=0; end if rL(n)==n && cL(n)==0 sol(n-1,1)=sL(n);sol(n,1)=0; end if rB(n)==0 && cB(n)==-n sol(n,n-1)=sT(n);sol(n,n)=0; end if rR(n)==-n && cR(n)==0 sol(n-1,n)=sT(n);sol(n,n)=0; end for i=1:n if sT(i)==0 && rT(i)==0 && cT(i)==-i; sol(:,i)=0;if i>1; sol(:,i-1)=0;end;if i1; sol(i-1,:)=0;end;if i1; sol(:,i-1)=0;end;if i1; sol(i-1,:)=0;end;if i0 tempS=0; if rT(i)>0 ; tempR= rT(i)+1;tempC=i+1;tempS=sT(i); elseif rT(i)<0; tempR=-rT(i)+1;tempC=i-1;tempS=sT(i); end if tempS>0 B=0; if sol(tempR,tempC)==-1 sol(tempR,tempC)=tempS;B=1; elseif tempS<=sol(tempR,tempC); sol(tempR,tempC)=tempS;B=1; end if sol(tempR,tempC)>99 sol(tempR,tempC)=0; end if B==1 if rT(i)<0 sol(1:tempR-1,tempC)=0; elseif rT(i)>0 sol(1:tempR-1,tempC)=0; end end end tempS=0; if cL(i)<0 ; tempR=i-1;tempC=-cL(i)+1;tempS=sL(i); elseif cL(i)>0; tempR=i+1;tempC=cL(i)+1;tempS=sL(i); end if tempS>0 B=0; if sol(tempR,tempC)==-1 sol(tempR,tempC)=tempS;B=1; elseif tempS<=sol(tempR,tempC); sol(tempR,tempC)=tempS;B=1; end if sol(tempR,tempC)>99 sol(tempR,tempC)=0; end if B==1 if cL(i)<0 sol(tempR,1:tempC-1)=0;sol(tempR+1:end,tempC)=0; elseif cL(i)>0 sol(tempR,1:tempC-1)=0;sol(1:tempR-1,tempC)=0; end end end tempS=0; if rB(i)>0 ; tempR= rB(i)-1;tempC=i+1;tempS=sB(i); elseif rB(i)<0; tempR=-rB(i)-1;tempC=i-1;tempS=sB(i); end if tempS>0 B=0; if sol(tempR,tempC)==-1 sol(tempR,tempC)=tempS;B=1; elseif tempS<=sol(tempR,tempC); sol(tempR,tempC)=tempS;B=1; end if sol(tempR,tempC)>99 sol(tempR,tempC)=0; end if B==1 if rB(i)>0 sol(tempR+1:end,tempC)=0;sol(tempR,1:tempC-1)=0; elseif rB(i)<0 sol(tempR+1:end,tempC)=0;sol(tempR,tempC+1:end)=0; end end end tempS=0; if cR(i)<0; tempR=i-1;tempC=-cR(i)-1;tempS=sR(i); elseif cR(i)>0; tempR=i+1;tempC=cR(i)-1;tempS=sR(i); end if tempS>0 B=0; if sol(tempR,tempC)==-1 sol(tempR,tempC)=tempS;B=1; elseif tempS<=sol(tempR,tempC); sol(tempR,tempC)=tempS;B=1; end if sol(tempR,tempC)>99 sol(tempR,tempC)=0; end if B==1 if cR(i)<0 sol(tempR,tempC+1:end)=0;sol(tempR+1:end,tempC)=0; elseif cR(i)>0 sol(tempR,tempC+1:end)=0;sol(1:tempR-1,tempC)=0; end end end end end end solution=sol; solution(find(solution==-1))=0; beam2init(solution); solution; for i5=1:n [rT2(i5),cT2(i5),sT2(i5)] = beam2(0,i5,n); [rL2(i5),cL2(i5),sL2(i5)] = beam2(i5,0,n); [rB2(i5),cB2(i5),sB2(i5)] = beam2(0,-i5,n); [rR2(i5),cR2(i5),sR2(i5)] = beam2(-i5,0,n); end S=1*(length(find(rT~=rT2))+length(find(rL~=rL2))+length(find(rB~=rB2))+length(find(rR~=rR2))+length(find(cT~=cT2))+length(find(cL~=cL2))+length(find(cB~=cB2))+length(find(cR~=cR2)))+1*(length(find(sT-sT2))+length(find(sL-sL2))+length(find(sB-sB2))+length(find(sR-sR2))); end if n~=10 || (n==10 && S>0); if (n == 55) solution=zeros(n); s = [ 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ;55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ;55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ;55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ;55 55 55 55 55 55 55 55 55 55 55 55 90 55 55 ;55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ;55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ;55 55 55 55 55 55 90 55 55 55 55 55 55 55 55 ;55 55 55 90 55 55 55 55 55 55 55 55 55 55 55 ;55 90 55 55 55 55 55 55 55 55 55 90 55 55 55 ;55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ;55 55 55 55 55 90 55 55 55 55 55 55 55 55 55 ;55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ;55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ;55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ;55 55 55 55 55 55 55 55 55 55 55 90 90 55 55 ;90 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ;55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ;55 55 55 55 55 55 90 55 55 55 55 55 55 55 55 ;55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ]; solution(21:40,31:45)=s-55; return end solution=-ones(n); if n>22,solution(:,floor(1+rand*n/8))=0;end; if (n == 40) s=zeros(n); a=81; s(3,23)=71; s(4,14)=a; s(6,18)=a; s(6,21)=a; s(6,27)=a; s(6,30)=a; s( 7,24 )=80; s( 8,24 )=a; s( 9,30 )=a; s( 10,15 )=a; s( 10,16 )=a; s( 10,20 )=a; s( 11,4 )=a; s( 11,18 )=a; s( 11,23 )=a; s( 13,9 )=a; s( 13,32 )=a; s( 13,33 )=a; s( 14,39 )=a; s( 15,9 )=a; s( 16,23 )=a; s( 18,2 )=a; s( 18,6 )=a; s( 19,23 )=a; s( 20,28 )=a; s( 20,31 )=a; s( 21,1 )=a; s( 21,13 )=a; s( 21,27 )=a; s( 22,36 )=a; s( 24,23 )=a; s( 24,30 )=a; s( 27,9 )=a; s( 27,15 )=a; s( 28,16 )=a; s( 29,6 )=a; s( 30,2 )=a; s( 30,9 )=a; s( 30,10 )=a; s( 30,29 )=a; s( 31,6 )=a; s( 33,24 )=a; s( 34,6 )=a; s( 34,18 )=a; s( 34,39 )=a; s( 36,7 )=a; s( 36,23 )=a; s( 38,4 )=a; s( 38,16 )=a; s( 39,4 )=77; s( 39,32 )=a; solution=s; return end if (n == 60) s=zeros(n); s(19,29)=12; s(29,29)=12; s(30,42)=12; s(31,23)=11; solution=s; return end if (n == 34) s=zeros(n); s(15,10)=39; s(21,10)=8; s(19,13)=1; s(17,15)=71; s(8,24)=11; s(14,24)=23; s(18,26)=12; s(9,28)=4; s(13,25)=73; solution=s; return end if (n == 53) s=zeros(n); s(27,18)=45; s(29,12)=39; s(27,12)=1; s(35,22)=45; s(34,23)=45; s(31,8)=45; s(30,27)=45; s(23,18)=45; s(24,20)=27; s(24,26)=45; s(26,28)=45; s(29,40)=45; solution=s; return end B=zeros(4*n,1)-1; V=zeros(4*n,1)-1; for desp = 0:2 for rot = [1 6 4 2 7 5 0] solution = rotsolver(rot); if(done || all(all(solution>=0))) solution = max(0,solution); return end end end end function sol = rotsolver(rot) solution = ira(solution,rot); done = false; dj = 94; [r,c,s] = mb(1,0,0,rot); if solution(1,1)<0 && r==0 && c==0 [r1,c1,s1] = mb(0,1,0,rot); if ~(r1~=0 || c1~=0) [r2,c2,s2] = mb(2,0,0,rot); if ~(r2~=2 && ~(r2==0 && c2==0)) [r3,c3,s3] = mb(0,2,0,rot); if ~(c3~=2 && ~(r3==0 && c3==0)) if(desp>=1 && r2==2 && c3==2 && s2==s3) solution(1,1) = s2; mb(1,0,1,rot); elseif (desp>=2 && (r2 == 2 || c3 == 2)) mb(1,0,1,rot); if r2 == 2 && c3==2 solution(1,1) = min(s2,s3); else solution(1,1) = max(s2,s3); end elseif(desp>=2) mb(1,0,1,rot,n); [r4,c4,s4] = mb(2,0,0,rot); [r5,c5,s5] = mb(0,2,0,rot); solution(1,1) = max(1,max(s2-s4,s3-s5)); else sol = ra(solution,rot); return; end end end end end solution(1,1) = max(0,solution(1,1)); [r,c,s] = mb(1,0,0,rot); while(~(r==-1 && c==0)) if(r==0 && c==0) if(desp>=1) fnd = 0; for tc=1:n-1; if(solution(1,tc+1)>=0) continue; end [r,c,s] = mb(0,tc,0,rot); if(~(r==0 && c==0)) solution(1,tc) = max(0,solution(1,tc)); end if(r==0 && c==tc && (desp>=2 || s<= dj)) [r1,c1,s1] = mb(0,c+1,0,rot); if(c+2<=n) [r2,c2,s2] = mb(0,c+2,0,rot); else r2=0;c2=0;s2=0; end if((r1==0 && c1==0) && ... ((c+2<=n && c2==c+2 && s2==s) || ... (desp>=2 && (c+2>n || c2==c+2 || ... (r2==0 && c2==0 && solution(1,c+2)~=0))))); fnd=1; solution(1,c+1) = s; mb(0,c+1,1,rot); break end end end if(~fnd) sol = ra(solution,rot); return end else sol = ra(solution,rot); return end else solution(2,c+1) = s; if(c+11) nn = nn-1; [r,c,s] = mb(nn,0,0,rot); end nn = nn-1; if(nn==n-1) nn=n+1; end j = 2; couo = -1; couu = -1; while j < nn-2 if nn= 0 couo = couo + sn; ro(cn+1) = sn; if cn+2 > n break end [rn,cn2,sn] = mb(0,cn+2,0,rot); if (rn+cn2) == 0 cn = cn + 1; sn = -1; else cn = cn2; end end end if couu == -1 couu = 0; ru = zeros(n,1); [rn,cn,sn] = mb(nn+1,0,0,rot); while rn >= 0 couu = couu + sn; ru(-cn+1) = sn; if cn-2 < -n break end [rn,cn2,sn] = mb(0,cn-2,0,rot); if (rn+cn2) == 0 cn = cn - 1; sn = -1; else cn = cn2; end end end if couo <= couu prev = 0; for c = 1:n if ro(c) if ro(c) == -1 [tmp1,tmp2,s] = mb(j,0,0,rot); solution(j+1,c) = s; prev = s; else solution(j+1,c) = ro(c)-prev; prev = ro(c)-prev; end mb(0,c,1,rot); end end couo = -1; j = j+1; else prev = 0; for c = 1:n if ru(c) if ru(c) == -1 [tmp1,tmp2,s] = mb(nn+1,0,0,rot); solution(nn,c) = s; prev = s; else solution(nn,c) = ru(c)-prev; prev = ru(c)-prev; end mb(0,-c,1,rot); end end couu = -1; nn = nn-1; end else [r,c,s] = mb(j,0,0,rot); while(~(r==-j && c==0)) solution(j+1,c+1) = s; mb(0,c+1,1,rot); [r,c,s] = mb(j,0,0,rot); end j = j+1; end end sol= lrow(nn-1,solution,rot); sol = ra(sol,rot); if(nn=4)); sol = lrow(n-nn+1,sol2,mod(rot+2,4)+4*(rot>=4)); sol = ra(sol,mod(rot+2,4)+4*(rot>=4)); end done = true; end function sol = lrow(nn,solution,rot) sc2 = n + 2; [r,c,s] = mb(nn-1,0,0,rot); if(s) solution(nn,c+1) = s; while(c+2<=n && r~=-(nn-1)) sc = c+2; [r,c,s] = mb(0,sc,0,rot); if(~s) if sc==n [r1, c1, s1]=mb(1-nn,0,0,rot); solution(nn,n)=s1; break; end if sc2 > n [r2,c2,s2] = mb(1-nn,0,0,rot); if(r2) solution(nn,n)=s2; prev = s2; sc2 = n-1; [r2,c2,s2] = mb(0, sc2,0, rot); else prev = 0; end while(s2) solution(nn, c2-1) = s2 - prev; prev = solution(nn, c2-1); sc2 = c2 - 2; [r2,c2,s2] = mb(0,sc2,0,rot); end end if(sc-sc2 == 1) break; end mb(0,sc-1,1,rot); [r,c,s] = mb(0,sc-1,0,rot); if(~r) solution(nn,sc) = s-solution(nn,c-1); else solution(nn,sc) = s; end c = sc-1; elseif(~r) solution(nn,c+1) = s-solution(nn,sc-1); end end end sol = solution; end function a=ra(ai,r) if(r>=4) a=rot90(fliplr(ai),r); else a = rot90(ai,r); end end function a=ira(ai,r) if(r>=4) a=fliplr(rot90(ai,-r)); else a = rot90(ai,-r); end end function [rr,cc,ss]=mb(r,c,i,rot,dum) if nargin<5 dum=0; end if(rot<=0) if i > 0 [rr,cc,ss] = beamkeeper(r,c,2); else [rr,cc,ss] = beamkeeper(r,c,1); end elseif(rot>=4) if(r==0) [ri,ci,ss] = mb(0,sign(c)*(n-abs(c)+1),i,rot-4,dum); else [ri,ci,ss] = mb(-r,0,i,rot-4,dum); end if(ri==0 && ci==0) rr = 0; cc = 0; elseif(ri==0) rr = 0; cc = sign(ci)*(n-abs(ci)+1); else rr = -ri; cc = 0; end else if(r==0) [ri,ci,ss] = mb(sign(c)*(n-abs(c)+1),0,i,rot-1,dum); else [ri,ci,ss] = mb(0,-r,i,rot-1,dum); end if(ri==0 && ci==0) rr = 0; cc = 0; elseif(ri==0) rr = -ci; cc = 0; else rr = 0; cc = sign(ri)*(n-abs(ri)+1); end end if i > 1 || nargin>4, return; end if ~r && -c==cc && ~ss c=abs(c); solution(:,min(n,max(1,c-1:c+1)))=max(0,solution(:,min(n,max(1,c-1:c+1)))); elseif ~c && ~ss && (-r)==rr r=abs(r); solution(min(n,max(1,r-1:r+1)),:)=max(0,solution(min(n,max(1,r-1:r+1)),:)); elseif r==rr && c==cc && ss if ~r r=(c>0)+(c<0)*n; solution(r,abs(c))=max(0,solution(r,abs(c))); elseif ~c c=(r>0)+(r<0)*n; solution(abs(r),c)=max(0,solution(abs(r),c)); end elseif ss if ~r r=(c>0)+(c<0)*n; solution(r,max(1,min(n,abs(c)+(-1:1))))=max(0,solution(r,max(1,min(n,abs(c)+(-1:1))))); solution(r+sign(c),abs(c))=max(0,solution(r+sign(c),abs(c))); elseif ~c c=(r>0)+(r<0)*n; solution(max(1,min(n,abs(r)+(-1:1))),c)=max(0,solution(max(1,min(n,abs(r)+(-1:1))),c)); solution(abs(r),c+sign(r))=max(0,solution(abs(r),c+sign(r))); end if ~rr r=(cc>0)+(cc<0)*n; solution(r,max(1,min(n,abs(cc)+(-1:1))))=max(0,solution(r,max(1,min(n,abs(cc)+(-1:1))))); solution(r+sign(cc),abs(cc))=max(0,solution(r+sign(cc),abs(cc))); elseif ~cc c=(rr>0)+(rr<0)*n; solution(max(1,min(n,abs(rr)+(-1:1))),c)=max(0,solution(max(1,min(n,abs(rr)+(-1:1))),c)); solution(abs(rr),c+sign(rr))=max(0,solution(abs(rr),c+sign(rr))); end end end function [ri,ci,vi]=beamkeeper(r,c,s) idx=rc2idx(r,c); if B(idx)>=0 && s == 1 [ri,ci]=idx2rc(B(idx)); vi=V(idx); return end if s == 2 [ri,ci,vi]=beam(r,c,'high'); L=~(~V&B>0); B(L)=-1; V(L)=-1; return else [ri,ci,vi]=beam(r,c,'low'); end idxi=rc2idx(ri,ci); B(idx)=idxi; V(idx)=vi; if idxi>0 B(idxi)=idx; V(idxi)=vi; end end function idx=rc2idx(r,c) rc=r+c; idx=(~~rc)*((~r)*2*n+(rc<0)*n+abs(rc)); end function [r,c]=idx2rc(idx) if ~idx r=0; c=0; return end d=floor((idx-1)/n); sc=floor(d/2); rc=idx-d*n; s=1-(d-sc*2)*2; r=~sc*s*rc; c=sc*s*rc; end end function varargout = beam2(r,c,n,beamIntensity) if not(exist('A')) if not(exist('A','var')) global A turns charge newd ir ic end d = (c>0)+2*(r>0)+3*(c<0)+4*(r<0); %1 s, 2 e, 3 n, 4 w r = abs(r); c = abs(c); r = r+1 + ((n+1)*(d==3)); c = c+1 + ((n+1)*(d==4)); ch = charge(r,c); if ~ch while d r = r + ir(d); c = c + ic(d); d = newd(turns(r,c),d); ch = ch + charge(r,c); end end d = (r==n+2)||(c==n+2); r = rem(r-1,n+1); c = rem(c-1,n+1); if r&&c varargout = {0,0,0}; elseif d varargout = {-r,-c,ch}; else varargout = {r,c,ch}; end end function beam2init(r) if not(exist('A')) if not(exist('A','var')) global A turns charge newd ir ic end A = r; newd = [0 0 0 0; 1 2 3 4; 4 3 2 1; 2 1 4 3; 3 4 1 2]; ir = [1 0 -1 0]; ic = [0 1 0 -1]; n = length(A); [turns charge] = setCmds(A); end function [turns charge] = setCmds(A) B = conv2(A,[0 0 0;0 1 0;0 0 0]); C = conv2(A,[0 1 0;1 0 1;0 1 0])&~B; turns = conv2(single(A>0),[1 0 2;0 0 0;2 0 1])+2; turns(~conv2(ones(size(A)),[0 0 0;0 1 0;0 0 0])|B) = 1; turns(C) = 2; charge = conv2(A,ones(3)); charge(C|B) = 0; charge = charge+B; end```