lunes, 12 de mayo de 2014

Jueces Online

Los jueces automatizados en linea son sitios web en donde se encuentran almacenados la variedad de ejercicios de programación, con sus respectivos test, también funcionan como plataformas donde se ejecutaran las soluciones de los usuarios y previamente se evalúa (por el juez como su nombre lo indica), respecto a las soluciones se suele manejar un ranking catalogando a los usuarios respecto a los ejercicios resueltos.

En mi opinión los mas conocidos son:
- UVa Online Judge:


- CodeForces:
COJ: Caribbean Online Judge

Reglas de la competición


El ICPC es una competición por equipos. Las reglas actuales estipulan que cada equipo ha de tener como máximo 3 miembros. Los miembros han de ser estudiantes universitarios, que hayan estudiado menos de 5 años en la universidad antes del concurso. Los estudiantes que hayan competido en dos finales mundiales (World Finals) o cinco competiciones regionales no pueden participar otra vez.
Durante la competición, los equipos tienen 5 horas para resolver entre 8 y 10 problemas (lo normal es 8 para las competiciones regionales y 10 para la final). Se deben programar las soluciones con CC++C Sharp o Java. Los programas enviados por los equipos se compilan y ejecutan con unos ciertos datos de entrada, si el programa falla al calcular la solución, el equipo es notificado del error y pueden enviar nuevamente el programa o probar con otros problemas.
El ganador es el equipo que resuelve más problemas. Si hay equipos empatadas con el mismo número de problemas resueltos, el orden de clasificación se calcula a partir de los que han tardado menos en resolver los problemas.
Ejemplo: si un equipo A ha enviado sus soluciones para 2 problemas los 60 y 120 minutos desde el inicio del concurso, y otro equipo B lo ha hecho a los 80 y 90 minutos. El desempate entre ambos equipos se haría mirando los tiempos, para el equipo A: 60+120 = 180 minutos. Para el equipo B: 80+90 = 170 minutos. El equipo B ganaría.
El tiempo que se toma para los desempates es el tiempo que ha pasado desde el inicio del concurso más 20 minutos por cada solución incorrecta enviada. En el ejemplo anterior, si el equipo A hubiera enviado 2 soluciones incorrectas para su primer problema, su tiempo final sería: 20+20+60+120 = 220.
El ICPC se diferencia de otras competiciones de programación (por ejemplo la IOI) en que suele tener un gran número de problemas (8 o más para resolver en 5 horas) y que es una competición por equipos con un sólo ordenador. Es necesario un buen entendimiento entre los miembros de un equipo para conseguir la victoria.

TOMADO DE: www.wikipedia.com

miércoles, 7 de mayo de 2014

Iniciando en la Programación Competitiva

¿Qué es la programación competitiva?
• Por «programación competitiva» entendemos todo lo relacionado a las competencias de programación, especialmente las que se rigen bajo  el estilo de la competencia del ACM ICPC.

Comentario Personal: Una competencia de programación es una de las experiencias que ha hecho afinar mis habilidades como programador. Soy un principiante en la materia pero puedo describir esta experiencia como un reto que muchos disfrutarían.

¿Cómo se vive una competencia o una maratón de programación?
•  Hay que aclarar algunos aspectos primero, como lo son las reglas que se llevan a cabo en las maratones, algunas de ellas es que una competencia se desarrolla por grupos máximo de tres personas en un solo computador; Se enfrentarán a un set de ejercicios (enunciados en el idioma ingles en general) y el objetivo es desarrollar lo allí planteado respetando las entradas que exija el ejercicio y las salidas que el mismo demanda.

La experiencia es genial, sentir el reto de cada ejercicio, llegar a la solución, se encuentran las debilidades en desarrollo, se trabaja con el tiempo, y lo mejor por cada ejercicio es un aprendizaje más.
EJEMPLO:
Como se puede observar este ejercicio solicita la suma entre dos valores que ingresan separados por un espacio; para lo cual mi solución en lenguaje de programación java es:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

/**
 *
 * @author OSCAR
 */
public class Main {

    public static void main(String[] args) throws IOException {
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        String linea=br.readLine();
        while(linea!=null){
            StringTokenizer tz = new StringTokenizer(linea);
            System.out.println(Integer.parseInt(tz.nextToken())+Integer.parseInt(tz.nextToken()));
            linea=br.readLine();
        }
    }
}

(Puede que el código que uno suba se juzgue como "Acepted" que significa que el código enviado ha solucionado el problema y suma puntos en ranking personal; también puede ser juzgado de otras maneras)

En la próxima entrada veremos algunos jueces donde los maratonistas se entrenan y su sistema de calificación.