Reto de las Piscinas en Java

Hola querido lector, hoy es cuando he tenido más tiempo, y lo he aprovechado para hacer un reto de aceptaelreto.com, la verdad ha sido un reto del cual todo gira alrededor de la formula:

litros de la piscina = litros de las piscina +(litros del barreño-litros que pierde)
Debemos de tener cuidado con el tema de que lo que se pierda debe de ser superior que lo que se añade al barreño, de lo contrario, eso empezará a hacer un bucle infinito, debido a la naturaleza del código.
Con todo esto explicado, vamos a leer el ejercicio:
Se acerca el verano y llega el momento de sacar de los armarios y trasteros las piscinas para los niños (y no tan niños), colocarlas en la terraza, patio o jardín y llenarlas de agua para que los pequeños de la casa puedan empezar a disfrutarlas.
Este año la tarea se presenta complicada porque durante el invierno la larga manguera que permitía llevar el agua desde el grifo de la cocina hasta la propia piscina se ha perdido y habrá que hacerlo con un barreño…
Para complicar aún más las cosas, también durante el invierno la piscina (a pesar de ser de fibra de vidrio) se ha pinchado y pierde un poco de agua. Aún así, como los pequeños están ansiosos por darse un chapuzón decidimos llenarla cuanto antes, con pinchazo incluido, y luego mientras ellos disfrutan lo arreglaremos. Dado que la piscina está perdiendo agua constantemente, estará llena únicamente durante un instante de tiempo. En ese preciso momento dejaremos de hacer viajes a la cocina y nos pondremos rápidamente a arreglarla.
Como dice el refrán «mal de mucho consuelo de tontos»; la tarea de llenado será un poco más llevadera gracias al consuelo de saber que nuestro vecino está en la misma situación. A través del seto del jardín podemos verle haciendo viajes como un loco de su cocina a su piscina, para compensar el pinchazo que también él tiene. La pregunta es ¿quién tardará menos en llenar la piscina?


La entrada estará compuesta de múltiples casos de prueba, cada uno en una línea.
Cada uno de los casos de prueba empezará con la descripción de una «competición» entre nosotros y el vecino. Los tres primeros números indican los litros de agua de nuestra piscina (1≤ p ≤ 109), el número de litros de nuestro barreño (1 ≤ b ≤ 109) y por último los litros de agua que la piscina pierde durante el viaje. A continuación aparecen tres números para indicar la misma información pero de nuestro vecino.
La entrada termina cuando alguna de las piscinas no tiene capacidad (aparece a cero).


Salida


Para cada caso de prueba aparecerá una línea compuesta por el ganador y el número de viajes que ha realizado. Como ganador, se indicará YOsi nosotros terminamos antes de llenar la piscina (hacemos menos viajes para conseguirlo) y VECINO si es el vecino. En caso de empate, se indicará EMPATE.


Entrada de ejemplo


10 5 1 15 6 1
50 5 1 50 5 0
50 5 1 50 5 6
0 0 0 0 0 0


Salida de ejemplo


EMPATE 3
VECINO 10
YO 13


Aquí os dejo mi código:
 try {
            float litrosPiscinaV1, litrosBarrenoV1, litrosPierdeV1;
            float litrosPiscinaV2, litrosBarrenoV2, litrosPierdeV2;
            boolean repetir = true;
            String cadena = «»;
            String[] datos;
            float[] datosFloat;
            Scanner sca = new Scanner(System.in);
            System.out.println(«Dime los datos con espacios (litrosPiscina1 litrosBarreño1 litrosPierde1 litrosPiscina2 litrosBarreño2 litrosPierde2):»);
            cadena = sca.nextLine();
            datos = cadena.split(» «);
            if (datos.length != 6) {
                throw new Exception(«Debes de poner 6 datos»);
            }
            datosFloat = new float[datos.length];
            for (int i = 0; i < datos.length; i++) {
                datosFloat[i] = Float.parseFloat(datos[i]);
            }
            litrosPiscinaV1 = datosFloat[0];
            litrosBarrenoV1 = datosFloat[1];
            litrosPierdeV1 = datosFloat[2];
            litrosPiscinaV2 = datosFloat[3];
            litrosBarrenoV2 = datosFloat[4];
            litrosPierdeV2 = datosFloat[5];
            if (litrosBarrenoV2 >= litrosPierdeV2 && litrosBarrenoV2 >= litrosPierdeV2) {
                throw new Exception(«Los litros que pierden debe de ser superior a los del barreño»);
            }
            do {
                litrosPiscinaV1 = litrosPiscinaV1 + (litrosBarrenoV1 – litrosPierdeV1);
                litrosPiscinaV2 = litrosPiscinaV2 + (litrosBarrenoV2 – litrosPierdeV2);
                if (litrosPiscinaV1 < 0 | litrosPiscinaV2 < 0) {//se repetirá hasta que al menos uno sea menor a cero
                    repetir = false;
                }
            } while (repetir);
            if (litrosPiscinaV1 == litrosPiscinaV2) {
                System.out.println(«Empate»);
            } else if (litrosPiscinaV1 > litrosPiscinaV2) {
                System.out.println(«Vecino 1»);
            } else if (litrosPiscinaV1 < litrosPiscinaV2) {
                System.out.println(«Vecino 2»);
            }
        } catch (Exception ex) {
            System.out.println(«Debes de poner 6 números separados con espacios cod: » +ex.getMessage());
        }
Espero que os haya gustado y hayáis aprendido algo, si quieres saber cuando subo un nuevo contenido, puedes seguirme en mi página de Facebook o en mi Twitter.
FUENTE:

https://www.aceptaelreto.com/problem/statement.php?id=131

Gracias por visitar mi blog de informática, mi nombre es Tomás y soy formador y desarrollador web. Si quiere usted dejarme alguna sugerencia, ayuda o quiere un servicio de formación estoy escuchando ofertas en tomas.gonzalez@infogonzalez.com, en Facebook a https://www.facebook.com/Infogonzalez estoy deseando escucharle. Su duda o sugerencia NO molesta.

Deja un comentario

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Tomas Gonzalez
Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad
Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
A %d blogueros les gusta esto: