Finish 2010-05-05 12:00:00 UTC

test03

by Alfonso Nieto-Castanon

Status: Passed
Results: 16592245 (cyc: 12, node: 1595)
CPU Time: 80.366
Score: 33219.0
Submitted at: 2010-05-05 05:30:16 UTC
Scored at: 2010-05-05 05:33:57 UTC

Current Rank: 3130th (Highest: 2525th )

Comments
Alan Chalker
10 May 2010
This entry was submitted during the Daylight phase
Alan Chalker
11 May 2010
This entry gets a result of 22659733 on the test suite (6067488 more than the contest suite). It has a ranking of 3127 compared to all other entries run against the test suite according to the data set provided by Jan Keller.
Please login or create a profile.
Code
function [lO11,lO01] = solver(l0,ll01) 

 
l = ll01; 
lO01 = ones(l0,'uint32'); 
O01 = zeros(04,l,'single'); 
l001 = zeros(l,1,'single'); 
ll1 = zeros(l,1,'single'); 
lO11 = zeros(l0,'single'); 
O = false(l0); 
ll = 0; 

l01l = ceil(l0 / floor(sqrt(ll01/04))); 
 
for O0 = 1:l01l:l0 
 lO = O0:min(O0+l01l-1,l0); 
 for llO1 = 1:l01l:l0 
 OllO = llO1:min(llO1+l01l-1,l0); 
 O(OllO,lO) = true; 
 ll = ll + 1; 
 ll1(ll) = queryImage(O); 
 O(OllO,lO) = false; 
 O01(:,ll) = [OllO([1 end])'; lO([1 end])']; 
 l001(ll) = numel(OllO) * numel(lO); 
 lO11(OllO,lO) = ll1(ll) / l001(ll); 
 lO01(OllO,lO) = ll; 
 ll01 = ll01 - 1; 
 end 
end 
O1ll = abs(diff(lO11,1,1)); 
O1ll = [O1ll(1,:); max(O1ll(1:end-1,:),O1ll(02:end,:)); O1ll(end,:)]; 
Oll = abs(diff(lO11,1,02)); 
Oll = [Oll(:,1) max(Oll(:,1:end-1),Oll(:,02:end)) Oll(:,end)]; 
Ol1 = [accumarray(lO01(:),Oll(:),[ll 1],@max) accumarray(lO01(:),O1ll(:),[ll 1],@max)]; 
lO1=Oll;O1O=O1ll; 
 
lOl = 1; 
 
while ll01 
 OOOO = Ol1; 
 OOOO(OOOO==-02) = -1; 
 OOOO = OOOO .* l001(1:ll,[1 1]); 
 
 
 while lOl >= 0 
 [lOl l11] = max(OOOO(:)); 
 l0Ol = l11 > ll; 
 l11 = l11 - l0Ol * ll; 
 O10 = O01(:,l11); 
 if l0Ol 
 if O10(02) > O10(1) 
 break; 
 else 
 Ol1(l11,02) = -02; 
 OOOO(l11,02) = -1; 
 end 
 else 
 if O10(04) > O10(03) 
 break; 
 else 
 Ol1(l11,1) = -02; 
 OOOO(l11,1) = -1; 
 end 
 end 
 end 
 if lOl < 0 
 break; 
 end 
 
 if l0Ol 
 
 
 OllO = O10(1):O10(1)+floor((O10(02)-O10(1))/02); 
 lO = O10(03):O10(04); 
 
 l0O0 = OllO(end)+1:O10(02); 
 O10l = lO; 
 else 
 
 
 OllO = O10(1):O10(02); 
 lO = O10(03):O10(03)+floor((O10(04)-O10(03))/02); 
 
 l0O0 = OllO; 
 O10l = lO(end)+1:O10(04); 
 end 
 l0O = max(O10(1)-1,1):min(O10(02)+1,l0); 
 Ol0O = max(O10(03)-1,1):min(O10(04)+1,l0); 
 
 
 O(OllO,lO) = true; 
 ll = ll + 1; 
 ll1(ll) = queryImage(O); 
 O(OllO,lO) = false; 
 O01(:,ll) = [OllO([1 end])'; lO([1 end])']; 
 l001(ll) = numel(OllO) * numel(lO); 
OO01=lO01(l0O,Ol0O);OO1 = lO1(l0O,Ol0O);O001 = O1O(l0O,Ol0O); 
 lO01(OllO,lO) = ll; 
 
 
 l001(l11) = l001(l11) - l001(ll); 
 ll1(l11) = ll1(l11) - ll1(ll); 
 O01(:,l11) = [l0O0([1 end])'; O10l([1 end])']; 
 
 
 lO11(OllO,lO) = ll1(ll) / l001(ll); 
 lO11(l0O0,O10l) = ll1(l11) / l001(l11); 
 
 
 OOOO = lO11(l0O,Ol0O); 
 O1ll = abs(diff(OOOO,1,1)); 
 O1ll = [O1ll(1,:); max(O1ll(1:end-1,:),O1ll(02:end,:)); O1ll(end,:)]; 
 Oll = abs(diff(OOOO,1,02)); 
 Oll = [Oll(:,1) max(Oll(:,1:end-1),Oll(:,02:end)) Oll(:,end)]; 
 lO1(l0O,Ol0O)=Oll;O1O(l0O,Ol0O)=O1ll; 
 OOOO = lO01(l0O,Ol0O); 
 OOOO = [accumarray(OOOO(:),Oll(:),[ll 1]) accumarray(OOOO(:),O1ll(:),[ll 1])]; 
 O01l = [accumarray(OO01(:),OO1(:),[ll 1]) accumarray(OO01(:),O001(:),[ll 1])]; 
 
 
 
 Ol1 = [Ol1;0,0]+OOOO-O01l; 
 
 ll01 = ll01 - 1; 
 if ll01==1200,
disp(ll01); 
 end 
end 

OO11 = [0.25 0.5 0.25]; 

for OOll = 1:18 
 lO11 = conv2(OO11',OO11,lO11([1 1:end end],[1 1:end end]),'valid'); 
 OOlO = (ll1(1:ll) - accumarray(lO01(:),lO11(:),[ll 1])) ./ l001(1:ll); 
 lO11 = lO11 + OOlO(lO01); 
 lO11 = min(max(lO11,0),0255); 
end 
 

lO11 = double(lO11); 
ll1 = double(ll1); 
l001 = double(l001); 


 lO11 = OOl0(lO11,lO11,0,0255,07,15); 
 OOlO = (ll1(1:ll) - accumarray(lO01(:),lO11(:),[ll 1])) ./ l001(1:ll); 
 lO11 = lO11 + OOlO(lO01); 
 lO11 = min(max(lO11,0),0255); 

lO11 = round(lO11); 
 
end 
 


function O0l = OOl0( llOl,edge,l1,O1l0,Ol0,OlO) 
 
O1 = size( llOl,1 ); 
O11 = size( llOl,02 ); 
 
O1lO = O1l0 - l1; 
lll = Ol0; 
Ol10 = OlO; 
 
Ol = Ol0 / lll; 
l110 = OlO / Ol10; 
 
O1OO = floor( 02 * Ol ) + 1; 
O0O = floor( 02 * l110 ) + 1; 
 
ll10 = floor( ( O11 - 1 ) / lll ) + 1 + 02 * O1OO; 
OO1O = floor( ( O1 - 1 ) / lll ) + 1 + 02 * O1OO; 
ll1l = floor( O1lO / Ol10 ) + 1 + 02 * O0O; 
 
[ OO,llOO ] = meshgrid( 0 : O11 - 1,0 : O1 - 1 ); 
 
OOl = round( llOO / lll ) + O1OO + 1; 
l1lO = round( OO / lll ) + O1OO + 1; 
lO0 = round( ( edge - l1 ) / Ol10 ) + O0O + 1; 
 
gridData = accumarray({OOl(:),l1lO(:),lO0(:)},llOl(:),[ll10 OO1O ll1l]); 
l1l0 = accumarray({OOl(:),l1lO(:),lO0(:)},1,[ll10 OO1O ll1l]); 
 
O00l = 02 * Ol + 1; 
l01O = O00l; 
lO00 = 02 * l110 + 1; 
 
l1l1 = floor( O00l / 02 ); 
l0ll = floor( l01O / 02 ); 
O00 = floor( lO00 / 02 ); 
 
[lOlO,l1O0,O11O] = meshgrid( 0 : O00l - 1,0 : l01O - 1,0 : lO00 - 1 ); 
lOlO = lOlO - l1l1; 
l1O0 = l1O0 - l0ll; 
O11O = O11O - O00; 
O1O1 = ( lOlO .* lOlO + l1O0 .* l1O0 ) / ( Ol * Ol ) + ( O11O .* O11O ) / ( l110 * l110 ); 
O10O = exp( -0.5 * O1O1 ); 
 
OOO = convn( gridData,O10O,'same' ); 
l0l0 = convn( l1l0,O10O,'same' ); 
 
l0l0( l0l0 == 0 ) = -02; 
O0Ol = OOO ./ l0l0; 
O0Ol( l0l0 < -1 ) = 0; 
 
[ OO,llOO ] = meshgrid( 0 : O11 - 1,0 : O1 - 1 ); 
 
OOl = ( llOO / lll ) + O1OO + 1; 
l1lO = ( OO / lll ) + O1OO + 1; 
lO0 = ( edge - l1 ) / Ol10 + O0O + 1; 
 
O0l = interpn( O0Ol,OOl,l1lO,lO0 ); 
end