/*
 * DragRace.java
 *
 * Created on October 25, 2004, 7:20 PM
 */

/**
 *
 * @author  JNAVARRO
 */

    class Automovil {
        float velocidad,
              velocidadMaxima,
              velocidadATiempo[] = {0,10,20,30,40},
              distancia;
        boolean encendido;
        
        Automovil()
        {
            velocidad = 0f;
            encendido = false;
            velocidadMaxima = 60;
            distancia = 0f;
        }
 
        float getVelocidad(float t)
        {
            float  velocidadActual;
            if ((int)t < velocidadATiempo.length)
            {
                velocidadActual = velocidadATiempo[(int)t];
            }
            else
            {
                velocidadActual = velocidadATiempo[velocidadATiempo.length-1];
            }
            return velocidadActual;
        }
        
        void actualizarDistancia(float t, float v)
        {
            distancia = distancia + t * v;
        }
        
        float getDistancia()
        {
            return distancia;
        }
        
        public String toString()
        {
            return ("Velocidad = " + velocidad + " distancia = " + distancia);
        }
    }

    class Honda extends Automovil{
        
        Honda()
        {
            super();
            velocidadMaxima = 120;
        }
        
        float getVelocidad(float t)
        {
            float velocidadActual;
            velocidadActual = t * 20;
            if (velocidadActual > velocidadMaxima)
            {
                velocidadActual = velocidadMaxima;
            }
            return velocidadActual;
        }
        
    }
    
    class Mitsubishi extends Automovil{

        Mitsubishi()
        {
            super();
            velocidadMaxima = 120;
        }
        
        float getVelocidad(float t)
        {
            float velocidadActual;
            velocidadActual = t * 10 + t*t;
            if (velocidadActual > velocidadMaxima)
            {
                velocidadActual = velocidadMaxima;
            }
            return velocidadActual;
        }
    }

    class Ford extends Automovil{

        Ford()
        {
            super();
            velocidadMaxima = 60;
        }
        
        float getVelocidad(float t)
        {
            float velocidadActual;
            velocidadActual = t * 10 + t*t*t;
            if (velocidadActual > velocidadMaxima)
            {
                velocidadActual = velocidadMaxima;
            }
            return velocidadActual;
        }
    }
    
    class Inspector{
        int   totalAutos;
        float distanciaCarrera;
        
        Inspector(int ta, float dist)
        {
            totalAutos = ta;
            distanciaCarrera = dist;
        }
        
        int getGanador(Automovil listaAutos[])
        {
            int i,
                ganador = -1;
            for (i = 0; i < listaAutos.length; i++)
            {
                if (listaAutos[i].getDistancia() >= distanciaCarrera)
                {
                    ganador = i;
                }
            }
            return ganador;
        }
    }

public class DragRace {
    
    /** Creates a new instance of DragRace */
    public DragRace() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        float tiempo,
              velocidadDeAuto,
              distanciaDeAuto;
        int   autoGanador = -1;
        boolean hayGanador = false;
        
        Inspector elInspector = new Inspector(3,0.25f);
        Automovil listaAutos[] = new Automovil[3];
        listaAutos[0] = new Honda();
        listaAutos[1] = new Mitsubishi();
        listaAutos[2] = new Ford();
        
        for (tiempo = 0; ((tiempo <= 10) && (!hayGanador)); tiempo = tiempo + 0.1f )
        {
            System.out.println("--------\nSegundos = " + tiempo);
            for (int i = 0; i < 3; i++)
            {
                velocidadDeAuto = listaAutos[i].getVelocidad(tiempo/3600);
                listaAutos[i].actualizarDistancia(tiempo,velocidadDeAuto);
                System.out.println("auto = " + i + " d = " + listaAutos[i].getDistancia() 
                                       + " v = " + listaAutos[i].getVelocidad(tiempo));
            }
            if (elInspector.getGanador(listaAutos) != -1)
            {
                hayGanador = true;
                autoGanador = elInspector.getGanador(listaAutos);
            }
        }
        System.out.println("Ganador = " + autoGanador);
        System.out.println(listaAutos[autoGanador].getDistancia());
    }
}