Winner Paulo Uribe (dm1)

Finish 2004-04-28 09:00:00 UTC

UNlucky7s

by WeaselBoy

Status: Passed
Results: 0.394%
CPU Time: 10.4728
Score: 6.3243
Submitted at: 2004-04-24 00:27:36 UTC
Scored at: 2004-04-24 00:28:46 UTC

Current Rank: 1502nd
Based on: InTheHunt4 (diff)
Basis for: UNlucky5s (diff)
Basis for: UNlucky7s_tweak1 (diff)
Basis for: its still the same (diff)

Comments
Please login or create a profile.
Code
function  d  =     solver(map,n)
global    z1432;
map      =   map/sum(map(:))*n;
z1366    =  cell(1,8);
z1366{1}     =  map;
z1366{2}   =   map';
z1366{3}   =      z1152(map);
z1366{4}   =   z1152(map');
z1366{5}    =   z1846(map);
z1366{6}     =  z1846(map');
z1366{7}  =      z1846(z1366{3});
z1366{8}    =    z1846(z1366{4});

d    =      cell(1,40);  
[d{:}]  =      deal(map);

z1620   =    inf*zeros(1,40);
z1056      =     1;z1432=1;
z1658=8;
z1664   =    0;
for  aaa=1
               j  =    0;
                 for      i     =      1:z1658
                         d{j+i}   =     z1666(z1366{i},n,z1056);            
                                      z1620(i+j)   =    z1263(z1366{i},d{i+j},n);
                                 if  z1620(i+j)    <     n/1000
                                                     r   =  z1620(i+j);
                                              z1664   =  i+j;
                                                 break
                                 end
              end
                                 if  z1620(i+j)    <  n/1000
                                               r    =     z1620(i+j);
                                               z1664   =     i+j;
                                                         break
                                    end
                j  =     8;
               for     i      =     1:z1658
                                    d{j+i}    =    z19142(z1366{i},n);
                                  z1620(i+j)   =    z1263(z1366{i},d{i+j},n);
                              if  z1620(i+j)      <  n/1000
                                                      r   =   z1620(i+j);
                                                        z1664   =    i+j;
                                           break
                                    end
                 end
                             if   z1620(i+j)     <      n/1000
                                       r    =      z1620(i+j);
                                                  z1664    =      i+j;
                                                break
                                end
                     j     =   16;
              for     i     =   1:z1658
                               d{j+i}  =  z19143(z1366{i},n);
                                    z1620(i+j)      =    z1263(z1366{i},d{i+j},n);
                             if      z1620(i+j)  <      n/1000
                                             r   =     z1620(i+j);
                                               z1664      =   i+j;
                                                     break
                                   end
                   end
                             if     z1620(i+j)      <  n/1000
                                                         r    =     z1620(i+j);
                                                 z1664      =      i+j;
                                                break
                                  end
                     j      =     24;
              for     i  =     1:z1658
                       d{j+i}   =     z19144(z1366{i},n);
                                z1620(i+j)     =    z1263(z1366{i},d{i+j},n);
                                        if    z1620(i+j)  <     n/1000
                                                 r    =     z1620(i+j);
                                                     z1664   =      i+j;
                                                   break
                                    end
                  end
                          if     z1620(i+j)    <    n/1000
                                                  r    =      z1620(i+j);
                                             z1664  =     i+j;
                                                     break
                                       end
                   j      =    32;
              for     i     =   1:z1658
                              d{j+i}   =     z19145(z1366{i},n);
                            z1620(i+j)   =      z1263(z1366{i},d{i+j},n);
                                if     z1620(i+j)    <  n/1000
                                            r     =  z1620(i+j);
                                                       z1664    =   i+j;
                                                        break
                                end
                end,end

if      z1664  ==    0                             
                    [r    z1664]      =      min(z1620);,end
switch     mod(z1664-1,8)+1;
                case     1
                             d    =  d{z1664};
            case    2
                                    d    =   d{z1664}';
              case      3
                           d   =  z1152(d{z1664});
                     case      4
                                   d   =      z1152(d{z1664})';
             case   5
                           d    =    z1846(d{z1664});
                 case      6
                            d   =      z1846(d{z1664})';
                 case    7
                           d      =   z1152(z1846(d{z1664}));
                 case    8
                              d   =    z1152(z1846(d{z1664}))';,end


d     =   z1857(map,  n,     d);




function    d   =      z1666(map,n,z1432)
s     =      size(map);
d   =   ones(s)*n;
z1031    =      1;
z1301     =     z1432;
i   =      s(1);
z1612  =      prod(s);
z1664     =   1:z1612;
z1311     =     reshape(z1664,s);
z1311(:,2:2:end)      =  z1152(z1311(:,2:2:end));      
z1311  =    reshape(z1311,1,z1612);
z1343    =    floor((n-1)/2);
z1618   =    z1612;

for      z1664  =  1:z1612,
                  z16642     =    z1311(z1664);
                    if   (z1301)      <    abs(z1301-map(z16642))      |  z1618<=n-z1031            ,
                           if     z1031      ==    z1343,
                                                    z1031   =   z1031  +      1;
                                              z1595    =      z1664;
                                             break;
                               end
                                  z1031     =   z1031     +  1;
                           z1301  =  z1432-map(z16642);
               else
                                      z1301   =      z1301    -   map(z16642);
                 end
               z1618    =     z1618-1;
                d(z16642)     =     z1031;,end
z1301     =  z1432;
for     z1664    =    z1612:-1:z1595
             z16642      =   z1311(z1664);
                 if    (z1301)   <     abs(z1301-map(z16642))    |     z1618<=n-z1031               ,
                                      if      z1031   ==    n-1,
                                                    break;
                                        end
                             z1031  =    z1031     +   1;
                                    z1301     =     z1432-map(z16642);
               else
                                z1301    =    z1301  -   map(z16642);
                 end
            z1618    =   z1618-1;
              d(z16642)   =    z1031;,end

function     d  =   z19142(map,n),
a     =  size(map,1);
b   =    size(map,2);
d     =     zeros(a,b);
z1296    =  a*b;
upper   =    1;
lower   =    a;
z1475      =    1;
z1446  =    b;
z1139    =    1;

while   z1139      <=     z1296,
                 z1761   =  lower-upper;
                 d(upper:lower,z1475)  =   (z1139:z1139+z1761)';
                      z1139   =  z1139  +   z1761    +     1;
           z1475    =     z1475  +      1;
                   if   z1139   >    z1296,     break;  end

              z1761     =     z1446-z1475;
                      d(lower,z1475:z1446)   =      (z1139:z1139+z1761);
                z1139      =   z1139    +      z1761      +      1;
              lower    =    lower  -  1;
                if  z1139      >      z1296,  break;     end

                  z1761      =      lower-upper;
                 d(lower:-1:upper,z1446)      =  (z1139:z1139+z1761)';
               z1139      =    z1139     +      z1761    +    1;
                z1446  =  z1446   -     1;
                 if    z1139      >    z1296,    break;     end

                     z1761    =   z1446-z1475;
                  d(upper,z1446:-1:z1475)    =    (z1139:z1139+z1761);
                  z1139   =  z1139   +    z1761     +  1;
                    upper   =     upper  +     1;
                      if   z1139  >      z1296,    break;    end,end

z1311  =  zeros(1,z1296);
for      z1664   =      1:z1296,
              z1311(d(z1664))    =   z1664;,end
d(:)  =   n;

global    z1432;
z1031    =      1;
z1301      =      z1432;
i      =  size(map,1);
z1612     =      z1296;            
z1343     =    floor((n-1)/2);
z1618   =    z1612;


for      z1664  =   1:length(z1311),
           z16642  =    z1311(z1664);
              
                   if     (z1301)     <      abs(z1301-map(z16642))      |   z1618<=n-z1031           ,
                                   if     z1031   ==   z1343,
                                          z1031      =  z1031      +      1;
                                                  z1595     =  z1664;
                                                      break;
                                   end
                                 z1031      =  z1031     +      1;
                            z1301      =  z1432-map(z16642);
           else
                               z1301  =  z1301   -   map(z16642);
                     end
                 z1618   =   z1618-1;
            d(z16642)  =      z1031;,end
z1301     =      z1432;
for     z1664     =     length(z1311):-1:z1595
                 z16642      =     z1311(z1664);
                  
                      if   (z1301)    <      abs(z1301-map(z16642))  |   z1618<=n-z1031               ,
                                 if      z1031    ==  n-1,
                                                        break;
                                      end
                              z1031      =      z1031    +   1;
                            z1301  =     z1432-map(z16642);
                else
                                   z1301   =    z1301  -      map(z16642);
            end
               z1618  =      z1618-1;
                   d(z16642)    =   z1031;,end

function     d   =      z19143(map,n),
a  =      size(map,1);
b     =    size(map,2);
d    =  zeros(a,b);
z1296      =    a*b;

z1139     =    1;
z1815     =      1;
z1428   =    a;
z1631   =    1;
z1268    =    1;
row    =   1;
col   =  1;
if     mod(b,2)     ==     0,
          d(:,1)     =   (a:-1:1)';
                     z1139    =    z1139  +      a;
              z1631      =     2;
                 col     =      2;
             row  =  1;
         ,end
if      mod(a,2)     ==    1,
               d(1,z1631:b)   =    z1139:z1139+b-z1631;
              z1139     =   z1139+b+1-z1631;
                   z1268      =    -1;
              row    =      2;
                  col  =    b;,end

while  z1139    <=  z1296,
                while   z1139   <=  z1296
                                  d(row,col)    =    z1139;
                               z1139  =     z1139     +     1;
                                     row  =  row+1;
                         d(row,col)      =      z1139;
                                 z1139      =    z1139  +   1;
                             if     (col     ==    z1631     &     z1268  ==     -1)  |  (col      ==   b    &      z1268  ==   1),     break;     end;
                                      col    =  col      +   z1268;
                                 d(row,col)   =  z1139;
                              z1139      =      z1139   +  1;
                            row      =     row-1;
                                d(row,col)      =    z1139;
                                z1139    =     z1139    +    1;
                                  col   =  col      +  z1268;
                      end
                 row  =     row    +      1;
              z1268  =   -z1268;,end
z1311  =    zeros(1,z1296);
for  z1664     =   1:z1296,
                      z1311(d(z1664))     =      z1664;,end
d(:)     =   n;

global    z1432;

z1031      =      1;
z1301      =  z1432;

i    =     size(map,1);
z1612     =      z1296;        
z1343  =     floor((n-1)/2);
z1618   =   z1612;


for  z1664    =   1:length(z1311),
                  z16642  =  z1311(z1664);
                     
                  if   (z1301)     <    abs(z1301-map(z16642))    |    z1618<=n-z1031             ,
                              if      z1031   ==    z1343,
                                       z1031   =    z1031     +   1;
                                                       z1595   =    z1664;
                                              break;
                                    end
                               z1031      =    z1031     +    1;
                        z1301  =    z1432-map(z16642);
           else
                                z1301  =    z1301  -    map(z16642);
                      end
                z1618   =   z1618-1;
                      d(z16642)      =    z1031;,end
z1301     =      z1432;
for  z1664    =    length(z1311):-1:z1595
                z16642     =  z1311(z1664);
              
                       if  (z1301)    <     abs(z1301-map(z16642))     |   z1618<=n-z1031              ,
                               if      z1031  ==   n-1,
                                              break;
                               end
                                    z1031     =   z1031  +    1;
                                     z1301   =      z1432-map(z16642);
                else
                                         z1301  =    z1301     -      map(z16642);
             end
            z1618    =   z1618-1;
             d(z16642)    =  z1031;,end

function      d    =  z19144(map,n),
a   =      size(map,1);
b    =   size(map,2);
d    =      zeros(a,b);
z1296   =    a*b;
z1139      =      1;
z1815    =  1;
z1428    =     a;
z1631  =    1;
z1268      =  1;
row  =   1;
col   =  1;
if     mod(b,2)   ==  0,
         d(:,1)    =  (a:-1:1)';
                    z1139     =  z1139  +   a;
                  z1631  =      2;
                  col      =    2;
                  row    =  1;
                 ,end

switch      mod(a,3)
case      1,
                   d(1,z1631:b)      =   z1139:z1139+b-z1631;
                 z1139  =     z1139+b+1-z1631;
                  z1268  =      -1;
             row    =     2;
                     col  =   b;
case  2,
           d(1,z1631:b)     =      z1139:z1139+b-z1631;
                 z1139   =  z1139+b+1-z1631;
           d(2,z1631:b)  =     z1139+b-z1631:-1:z1139;
              z1139   =   z1139+b+1-z1631;
            row      =    3;
                   col   =     z1631;
                    ,end

while      z1139   <=      z1296,
                    while      z1139  <=  z1296
                                  d(row,col)   =     z1139;
                           z1139     =  z1139    +    1;
                                  row     =   row+1;
                              d(row,col)    =   z1139;
                         z1139    =     z1139     +  1;
                              row      =   row+1;
                        d(row,col)   =  z1139;
                            z1139   =    z1139   +   1;
                          if     (col   ==    z1631      &    z1268      ==  -1)      |     (col   ==    b  &    z1268  ==    1),   break;  end;
                                   col   =   col  +      z1268;
                                d(row,col)      =     z1139;
                                 z1139  =    z1139  +  1;
                                        row  =     row-1;
                                d(row,col)      =    z1139;
                                z1139   =   z1139  +     1;
                                row  =     row-1;
                                    d(row,col)     =      z1139;
                                  z1139    =     z1139      +   1;
                                   col    =  col  +  z1268;
                   end
                row      =   row    +     1;
                  z1268     =   -z1268;,end


z1311      =    zeros(1,z1296);
for   z1664  =   1:z1296,
           z1311(d(z1664))  =  z1664;,end
d(:)      =    n;

global   z1432;

z1031     =      1;
z1301     =      z1432;

i      =    size(map,1);
z1612      =    z1296;      
z1343     =     floor((n-1)/2);
z1618   =     z1612;


for      z1664  =      1:length(z1311),
                    z16642    =      z1311(z1664);
               
             if      (z1301)     <     abs(z1301-map(z16642))   |    z1618<=n-z1031             ,
                                        if  z1031      ==      z1343,
                                                 z1031      =  z1031  +  1;
                                                       z1595     =    z1664;
                                                 break;
                             end
                                   z1031     =    z1031  +   1;
                             z1301    =  z1432-map(z16642);
             else
                             z1301  =     z1301    -     map(z16642);
                    end
                  z1618      =   z1618-1;
                 d(z16642)   =     z1031;,end
z1301  =     z1432;
for  z1664  =     length(z1311):-1:z1595
                 z16642      =  z1311(z1664);
                     
                    if     (z1301)   <   abs(z1301-map(z16642))      |    z1618<=n-z1031             ,
                             if    z1031      ==     n-1,
                                                  break;
                              end
                              z1031  =   z1031     +     1;
                                   z1301   =     z1432-map(z16642);
                   else
                         z1301  =    z1301    -      map(z16642);
              end
             z1618  =    z1618-1;
                d(z16642)     =      z1031;,end


function   d     =  z19145(map,n),
a      =     size(map,1);
b  =     size(map,2);
d   =      zeros(a,b);
z1296      =   a*b;
z1139   =     1;
z1815      =  1;
z1428   =   a;
z1631     =   1;
z1268    =  1;
row  =      1;
col      =   1;
if    mod(b,2)    ==    0,
             d(:,1)    =      (a:-1:1)';
                    z1139    =    z1139   +   a;
                   z1631    =    2;
              col   =      2;
             row      =  1;
                ,end

switch     mod(a,4)
case     1,
                    d(1,z1631:b)   =     z1139:z1139+b-z1631;
               z1139    =      z1139+b+1-z1631;
                 z1268      =   -1;
                 row      =     2;
              col     =   b;
case      2,
               d(1,z1631:b)      =      z1139:z1139+b-z1631;
           z1139   =      z1139+b+1-z1631;
                   d(2,z1631:b)   =   z1139+b-z1631:-1:z1139;
                   z1139  =   z1139+b+1-z1631;
               row  =     3;
                      col      =   z1631;
case     3,
            d(1,z1631:b)    =    z1139:z1139+b-z1631;
             z1139   =      z1139+b+1-z1631;
             d(2,z1631:b)  =  z1139+b-z1631:-1:z1139;
              z1139   =     z1139+b+1-z1631;
                  d(3,z1631:b)   =  z1139:z1139+b-z1631;
                 z1139   =   z1139+b+1-z1631;
            row     =    4;
             col      =  b;
                z1268    =  -1;
               ,end

while      z1139   <=      z1296,
                  while  z1139     <=     z1296
                                d(row,col)    =      z1139;
                              z1139      =     z1139    +  1;
                                    row      =  row+1;
                                          d(row,col)    =  z1139;
                            z1139     =  z1139     +     1;
                               row   =     row+1;
                                    d(row,col)  =     z1139;
                                  z1139    =     z1139      +  1;
                                   row     =  row+1;
                                      d(row,col)      =  z1139;
                            z1139  =   z1139   +    1;
                                    if     (col      ==    z1631      &     z1268      ==      -1)     |      (col      ==     b    &      z1268     ==     1),    break;      end;
                             col    =    col  +      z1268;
                                            d(row,col)  =     z1139;
                                 z1139     =  z1139    +     1;
                           row      =      row-1;
                                    d(row,col)     =  z1139;
                            z1139  =     z1139   +  1;
                                 row    =   row-1;
                          d(row,col)  =    z1139;
                                    z1139   =   z1139   +  1;
                            row   =   row-1;
                               d(row,col)   =     z1139;
                                  z1139     =  z1139    +    1;
                                   col      =  col    +      z1268;
                 end
                row      =    row     +    1;
             z1268    =    -z1268;,end

z1311   =    zeros(1,z1296);
for    z1664   =      1:z1296,
             z1311(d(z1664))     =     z1664;,end
d(:)     =      n;

global      z1432;

z1031     =   1;
z1301    =     z1432;

i  =  size(map,1);
z1612  =    z1296;        
z1343   =    floor((n-1)/2);
z1618     =   z1612;


for  z1664    =    1:length(z1311),
                      z16642  =      z1311(z1664);
              if    (z1301)   <      abs(z1301-map(z16642))   |      z1618<=n-z1031                ,
                                   if   z1031      ==    z1343,
                                                               z1031     =   z1031    +   1;
                                              z1595   =  z1664;
                                                     break;
                                end
                           z1031    =   z1031      +      1;
                                z1301    =  z1432-map(z16642);
               else
                                  z1301     =     z1301    -  map(z16642);
              end
             z1618  =    z1618-1;
                      d(z16642)      =      z1031;,end
z1301      =     z1432;
for    z1664    =     length(z1311):-1:z1595
            z16642   =    z1311(z1664);
                  
                    if     (z1301)      <  abs(z1301-map(z16642))    |  z1618<=n-z1031                ,
                               if     z1031     ==    n-1,
                                                         break;
                                  end
                                   z1031     =      z1031     +  1;
                                z1301    =   z1432-map(z16642);
               else
                           z1301    =     z1301    -   map(z16642);
           end
                  z1618    =      z1618-1;
           d(z16642)   =     z1031;,end

function     d  =      z1857(map,n,d)
rand('state',7777);
z1862(n)   =     0;
for     i=1:n
           z1862(i)      =    sum(sum(map(d==i)));,end
z1242   =     sum(z1862)  /   n;
z1323  =     sum(abs(z1862-z1242))  /    (     n     *  z1242     *    2    );

if    z1323  <     0.0025
                   return;,end
sq   =   2;
z1642     =  size(map,1);
z1608         =      size(map,2);
nl   =     1600;
pop      =    rand(3,nl);
z1905   =    0;
if     sq    >=    1   
               for   kk=1:nl
                          z1596   =    2    +      floor(     pop(1,kk)     *    (    z1642-2    )     );
                       z1891  =      2  +     floor(    pop(2,kk)   *     (   z1608-2    )      );
                  z1646  =  floor(   pop(3,kk)     *    4      +   1    );
                        z15962    =      z1596;
                              z18912      =    z1891;
                  
                                       if     z1646    ==  1
                                             z15962    =  z1596   +  1;
                         end
                                 
                                   if     z1646  ==   2
                                                   z15962  =    z1596      -      1;
                               end
                                       
                             if     z1646     ==   3
                                                   z18912     =  z1891     +   1;
                               end
                                
                                  if    z1646   ==      4
                                                z18912    =   z1891    -      1;
                               end                                       
                                     
                                 z1433      =     z1905;
                                                              
                                 if     d(z15962,z18912)    ~=    d(z1596,z1891)     
	                                  z1907            =      z1862(d(z1596,z1891));
	                                    z19072     =    z1862(d(z15962,z18912));
                                                                                                                  
                                                  i1   =     d(z1596,      z1891);
                                         i2      =  d(z15962,z18912);
                                            
                                 if  z19072   >    z1907
                                                             	        d(z15962,z18912)      =   d(z1596,z1891);
                                                                       if     ~z1194(d==i2)
                                                                                            d(z15962,z18912)  =      i2;
                                                                else                                                                                                                                                       
                                                                             z1905     =     z1905  +  1;
                                                                               z1862(i2)                                          =      z1862(i2)                                                               -      map(z15962,z18912);
                                                                                       z1862(d(z1596,   z1891))     =      z1862(d(z1596,     z1891))           +  map(z15962,z18912);
                                                                            
                                                                                         
                                                                                           if    abs(z19072-z1907)     <     abs(  z1862(i2)   -   z1862(d(z1596,     z1891))      )
                                                                                            
                                                                                        
                                                                                       z1905  =    z1905  -      1;
                                                                                  d(z15962,z18912)   =    i2;
                                                                               z1862(i2)                                                        =     z19072;                                                                           
                                                                                                           z1862(d(z1596,      z1891))           =  z1907;
                                                                                end
                                                                       end         
                                       else
                                                                     d(z1596,z1891)   =      d(z15962,z18912);           
                                                            
                                                               if     ~z1194(d==i1)
                                                                               d(z1596,z1891)   =     i1;
                                                             else                                                                                                                                                      
                                                                             z1905  =     z1905      +  1;
                                                                            z1862(d(z15962,z18912))    =     z1862(d(z15962,z18912))+  map(z1596,z1891);
                                                                                        z1862(i1)                                               =    z1862(i1)                                                        -     map(z1596,z1891);                                                              
                                                                      
                                                                             if    abs(z19072-z1907)      <   abs(    z1862(i1)  -    z1862(d(z15962,      z18912))  )      
                                                                                          
                                                                                                 z1905   =      z1905     -     1;
                                                                                                d(z1596,z1891)    =   i1;
                                                                                                z1862(i1)                                             =  z1907;                                                          
                                                                                                z1862(d(z15962,    z18912))       =     z19072;
                                                                                    end
                                                                        end                                                                                                                                                      
                                            end
                                   end
                 end
           end
    

function  tf      =   z1194(a)

[z1101,z1780]    =  find(a);
[a1,a2]  =  size(a);


if  isempty(z1101)
           tf      =   0;
             return,end

z1664  =   1;
while    (z1664     ~=  0)
                r    =    z1101(z1664);
              c     =     z1780(z1664);
             z1664     =    z1664-1;
           a(r,c)     =  0;
         if   (r  >  1)  &     a(r-1,c)
                         z1664    =     z1664+1;
                        z1101(z1664)      =  r-1;
                           z1780(z1664)   =  c;
                end
          if    (r      <      a1)  &   a(r+1,c)
                   z1664   =  z1664+1;
                     z1101(z1664)     =    r+1;
                       z1780(z1664)    =    c;
            end
            if      (c     >   1)   &    a(r,c-1)
                     z1664     =     z1664+1;
                         z1101(z1664)  =   r;
                            z1780(z1664)    =  c-1;
                  end
            if      (c    <    a2)      &     a(r,c+1)
                           z1664   =  z1664+1;
                       z1101(z1664)      =     r;
                   z1780(z1664)  =   c+1;
       end,end


tf  =   ~max(a(:));

function  y  =  z1152(x)
[m,n]   =    size(x);
y  =   x(m:-1:1,:);

function      y    =     z1846(x)
[m,n]  =     size(x);
y    =    x(:,n:-1:1);

function     z1620   =     z1263(ma,in,n)
	              z1412  =     zeros(1,n);
                          for   i    =  1:numel(ma),
                                 z1412(in(i))   =     z1412(in(i))     +    ma(i);
                          end
                       
                          
                       
                         z1620     =     sum(abs(z1412-sum(z1412)/n));
                 end,end