Mostrando entradas con la etiqueta Contest. Mostrar todas las entradas
Mostrando entradas con la etiqueta Contest. Mostrar todas las entradas

martes, 31 de mayo de 2016

Problemas Programacion

CODEFORCES
Problema de numeracion bases cuidado con los overflows
http://www.codeforces.com/contest/602/problem/A

// SRM 590 DIV2-I
problema de string hallar alguna ocurrencia de 5 'o's consecutivos  en linea vertical horizontal o diagonal \ o  diagonal / (n no es menor que 5)

public class  FoxAndGomoku
{
 public string win(string [] b)
 {
   int n = b.Length;
   char[][] bb = new char[n][];
   for(int i = 0; i < n ; i++)
    bb[i] = b[i].ToCharArray();
 
   for(int i = 0; i < n ; i++)
    if( b[i].IndexOf("ooooo")>=0)
      return "found";
   for(int j = 0; j < n ; j++)
   {
   
      for(int i = 0; i < n ; i++)  
      {
        int r = i, s=j, count = 0;
        while( r < n && s >=0)
        {
         if(bb[r][s]=='o')      
          count++;
         else
          break;            
         if(count>=5)
          return "found";
         r++;
        }
      }
   }
 

   for(int i = 0; i < n ; i++)
   {
   
      for(int j = 0; j < n ; j++)        
      {
        int r = i, s=j, count = 0;
        while( r < n && s < n)
        {
         if(bb[r][s]=='o')      
          count++;
         else
          break;          
         if(count>=5)
          return "found";
         r++;s++;
        }      
      }
   }
   for(int i = 0; i < n ; i++)
   {

      for(int j = 0; j < n ; j++)        
      {
        int r = i, s=j, count = 0;
        while( r < n && s >=0)
        {
         if(bb[r][s]=='o')      
          count++;
         else
          break;            
         if(count>=5)
          return "found";
         r++;s--;
        }      
      }
   }

   return  "not found";

 }
}
***************
string win(vector <string> board)
{
    int d[4][2]  = { {1,0}, {0,1}, {1,1}, {-1,1} };
     
    int w = board[0].size(), h = board.size();
    bool anygood = false;
    // For each starting cell:
    for (int i=0; i<w; i++) {
        for (int j=0; j<h; j++) {
            for (int k = 0; k < 4; k++) {
                // load (dx,dy) from array:
                int dx = d[k][0], dy = d[k][1];
                // Is there a line with this direction?
                bool good = true;
                int x = i, y = j;
                for (int k = 0; k < 5; k++) {
                    // make sure the new cell is within bounds:
                    good = (good && (0 <= x && x < w ) && (0 <= y && y < h) );
                    // make sure it contains o
                    good = (good && (board[y][x] == 'o') );
                     
                    // Increase according to (dx,dy).
                    x += dx;
                    y += dy;
                }
                anygood = anygood || good;
            }
        }
    }
    return anygood? "found" : "not found";
}
********************

class FoxAndGomoku:
 def win(self, board):
    h = len(board)
    w = len(board[0])
    # horizontal: For each (x,y) try: (x,y),(x+1,y),...,(x+4,y)
    for x in range(w - 4):
        for y in range(h):
            c = 0
            for i in range(5):
                if board[y][x+i] == 'o':
                    c += 1
            if c == 5:
                return "found"
                 
    # vertical: For each (x,y) try: (x,y),(x,y+1),...,(x,y+4)
    for x in range(w):
        for y in range(h - 4):
            c = 0
            for i in range(5):
                if board[y+i][x] == 'o':
                    c += 1
            if c == 5:
                return "found"
    #diagonal \ : For each (x,y) try: (x,y),(x+1,y+1),...,(x+4,y+4)
    for x in range(w - 4):
        for y in range(h - 4):
            c = 0
            for i in range(5):
                if board[y+i][x+i] == 'o':
                    c += 1
            if c == 5:
                return "found"
     
     
    #diagonal / For each (x,y) try: (x,y),(x-1,y+1),...,(x-4,y+4)
    for x in range(4, w):
        for y in range(h - 4):
            c = 0
            for i in range(5):
                if board[y+i][x-i] == 'o':
                    c += 1
            if c == 5:
                return "found"
    return "not found"