Aprende Java fácil. Capítulo 15. Burlar el sistema de contadores de tiempo

Capítulo 15. Burlar el sistema de contadores de tiempo

El pasillo que da a la salida de la prisión es el más vigilado. Podrías pensar que es por miedo a que los presos escapen por ahí, pero no es así. Lo que ocurre es que todo el mundo entra y sale por el mismo lugar. Tanto visitas como funcionarios y presos siguen siempre el mismo camino.

Cada vez que alguien accede a la cárcel, se le hace un cacheo y las imágenes quedan grabadas. Además, hay que pasar por tres puntos de registro, divididos en varias estancias. En cada parada hay un guardia que no deja su puesto hasta que llega un relevo.

 

 

Bud cree que, como mucho, habrá dos personas. Incluso es posible que en algún momento necesiten realizar alguna tarea durante su turno y haya un corto período de tiempo en el que podamos estar solos.

El plan es identificar, medir y analizar las actividades de los carceleros para saber exactamente a qué hora debemos intentar la huida. Para ello, lo primero será analizar cuándo se abren y cierran las puertas. De esa forma, podremos identificar cuándo hay movimiento. Crearemos un programa que calcule el tiempo de inactividad de la puerta que conduce a la sala de espera. La puerta que da a las celdas podemos controlarla visualmente, y por la puerta de la calle no hay que preocuparse, ya que nadie la usa durante la noche.

 

Tenemos una pequeña ventaja: con una de las claves conseguidas en el despacho de Vicente, Pedro ha logrado acceder a los siete registros de actividades de la puerta de la semana pasada, uno para cada día. Con esto, ya podemos hacernos una idea de qué día es el más tranquilo y las horas en las que los vigilantes entran y salen. Lo primero será determinar qué día escogemos. Para ello, necesitamos crear un programa que lea los períodos de actividad de las puertas y los sume. Elegiremos el día para escapar que tenga el menor tiempo total de actividad.

El archivo divide el día en minutos, y en cada línea nos informa de cuántos segundos estuvo activa la puerta en ese minuto. Para que te hagas una idea, tiene este formato:

 

0
0
0
0
60
60
12
0
0

 

Ejercicio 1. Registrar el Tiempo de actividad. Necesitamos registrar el tiempo de actividad de las puertas para elegir un día para nuestro escape. Para ello necesitamos escribir un programa que lea el tiempo de inactividad de un archivo y registre el total de tiempo de inactividad en otro archivo.

 

Instrucciones:

  1. Utilizamos el archivo actividad.txt conseguido por Pedro, con tiempos de actividad en segundos (uno por línea).
  2. Lee los tiempos de actividad del archivo.
  3. Calcula el tiempo total de inactividad.
  4. Escribe el tiempo total de inactividad en un archivo total_actividad.txt

 

Solución:

 

import java.io.*;

public class Main {
    public static void main(String[] args) {
        String archivoEntrada = "actividad.txt";
        String archivoSalida = "total_actividad.txt";

        try (BufferedReader br = new BufferedReader(new FileReader(archivoEntrada));
             BufferedWriter bw = new BufferedWriter(new FileWriter(archivoSalida))) {

            String linea;
            int totalActividad = 0;

            while ((linea = br.readLine()) != null) {
                totalActividad += Integer.parseInt(linea);
            }

            bw.write("Total tiempo de actividad: " + totalActividad + " segundos");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

El lunes es el día con menor actividad, así que ya sabemos cuándo debemos emprender la huida. Según el registro, desde el minuto 1322 hasta el 1438, es decir, desde las 22:02 hasta las 23:58, la puerta está inactiva. Luego, aproximadamente vuelve a activarse a las 2:00 y, posteriormente, cada hora hasta las 6:00, cuando se abre la puerta principal y se llena de policías. En cada ocasión, las puertas están activas y abiertas por menos de dos minutos.

Una vez que sabemos a qué horas se abren las puertas, necesitamos determinar si se abrieron para dejar entrar a alguien o quizás para que alguien saliera. Los funcionarios deben realizar una serie de tareas durante su guardia. Pedro ha conseguido acceso al registro de estas tareas nocturnas y las veces que los guardias las anotan como realizadas. Necesitamos crear un pequeño programa que registre esas actividades y las devuelva en un formato de texto. Sabemos que sus actividades principales son: patrullaje regular, inspección y mantenimiento, y limpieza y desinfección.

El archivo de registro luce así:

 

«iRKJi2KpMW», «ixpFHX0v8s», «rMxNXbeUxC», «bjO9IUsFGc», «LpTB2ffO8w», «S4WwZffjqB», «HuuSb3RH6l», «O8OmH1ApJx», «LpFKbFT7hU», «TZ9BmcroA7», «dyLWJCvbU6», «qNlWgK2wzD», «s6vEOgmfsY», «ccDtnysyec», «waITKPmWbY», «HH9N0Ufih4», «cGIet9lE4y», «MCwCJ6LNQP», «OfecGXWhqY», «SOd3Tco6mI», «r8QwQDbHyp», «4V6bJhJ20x», «nzkiWhmxVj», «0tT2nDToVa», «67NEMfhs2x», «W3HXrDI7SJ», «KgGoiFJfMN», «2WK7UZVmgX», «3KNx0fDu54», «Rn20v6baaz», «t8jChEgFSz», «489dXWEFi6», «oNSsEfNwaP», «V4zx2r6XR8», «2dPXcKbZNQ», «WpsxQvEbVw», «7f6floF3VU», «W1joPNEiK1», «pXpGUMRsZq», «1M1jDBpiGu», «xjZBVieX1Q», «y3dVBuhTrJ», «s0YB6CVSFV», «vZQgDge2HJ», «EsWhUsnhLa», «hevhsUt0ux», «bYwU4Qy6Gl», «sCW32VXSfD», «mwCdwQ809e», «zyRwiYkfDk», «ko4o26MErP», «Lk1rspAJQK», «d5Y9IPuMk5», «yKj992kdnn», «Q1XsuVqUGr», «fHMDmXiAcp», «dql0nmQJcm», «qRqSHARwSA», «CgV8ne6fRG», «30DYrnKWoA», «r1QrdR0es2», «HXTV8XvYoP», «GQAWwyhMSL», «4yMmh7e5NW», «yT2kIJvDqN», «AbIqpbKj5h», «haAriF42gR», «O6MciwEwQ4», «hW8Pf9IkX7», «kUaN7Cnv96», «tAROxtCUiP», «aZEZynwwpj», «cqzR5Y3Ipi», «M69Qr3BWJj», «ySTegpfDxw», «f47AKb3Bsn», «XOsmCGvcSo», «wA7iC3Fq1k», «NqTC2OpWGr», «IvvkjHR0Q2», «JyT5lu4QPo», «2whhr0ixDg», «xcYX1ELvDi», «zTS8EJE0hh», «7gYXpaaPIs», «UiZ8tMlvfl», «uuSBzI6IfZ», «BdcQ3ci06N», «VNrQV6uZvU», «gZILASO2gT», «iOIRRKFxhc», «jkSGZFtIpw», «2gkQKh6J8L», «jnTyMxcG8I», «X07Mj6M0Rj», «SqjfH3cyLO», «GfKiA3DZ4w», «RBIquXXt0k», «udPC3Q0PXo», «CM44vkuwyT», «20n5Uwv6s8», «5ST85ixStb», «uliTvpFukE», «ErQPLyDuRw», «XX5eaAXr1a», «nLenQQgqoP», «ThjBwzns36», «8RghH8Vneq», «FWFaHu0c2a», «HqGai14Ao6», «nFEi87Bafj», «rotkzVlY3k», «Tah5BZU49N», «YILUBnOTTh», «kyhPp7TWZp», «q1kiVAMsHv», «OvKuo3mvSX», «htDbhBg7vs», «O8ZBRQB5cO», «TlUDfrzdUi», «7yIIltvZSI», «HkAkB7qO3c», «j4DvSZL3Ry», «ONmRHuWdGc», «a7LmXNTfap», «MlHEWHZhrz», «ADKHiZeBAS», «0KQ6aXlsZY», «OKMfZsps6e», «vJpOxdfzEd», «BKs9UTKTQJ», «DBNrFCM5d7», «hse8XLelZK», «3jz3bLreNc», «ZZSHQ35FpT», «jOmaC6iMOW», «iXvhHmq2pn», «gqnfV11and», «DDfLkv3uBg», «UQjsb1ixF0», «08zSNrhvxs», «LSWyFeFyYv», «Patrullaje regular», «4Bpd1idsum», «vCgKs8GFTI», «uhUIpi1VLd», «AQn63M3ANF», «Y39NIKxIgJ», «YcpNNmT3GX», «C8Di70GqS7», «Ybg4P3BOij», «6Tb4opfNeC», «aTmzLU9opz», «QSHg6ZRmyH», «lVUz2kHAOn», «Inspección y mantenimiento», «wUxaxSm9lC», «DVTb4JEZQ9», «sjahqvnVsk», «TfvPongU7w», «gQ6g0rJ7ax», «bejbKLd6ZR», «SMj8MjDEWY», «fanVKMvsmZ», «Patrullaje regular», «gmqX2oBxvm», «Mb9B4SHLvM», «64rh8hh6Li», «SjalZaHsOA», «yxDLOhr4Od», «qfN1GbZNFA», «C4q5ridJ7I», «aQLm7SJeEo», «LNDWA1UHzG», «QpYvFfSY6S», «I7ySXRZkQH», «WwtkFmM7pP», «gl794m6lyl», «6fvgHjprUx», «SVlNByrKBN», «DNEmWPvl51», «Mm6NxxNkdF», «gyLw8TP8kH», «vcqjXfWTYz», «bpuMR5EVFB», «sMMP5HpxJg», «9hU32sjepp», «RsYnv80Hx2», «SilPvzI3gD», «L7pspbXgSw», «RvAtxqkYF2», «9gOPHDbw31», «uUDPlKRjU3», «NkPKW7zkZK», «dBOiqar26k», «GXPsNzuULq», «KwwpvvPqQ2», «Tif0qfs2eq», «3xTc242fPW», «c5jJz3DVrV», «zrK0VW0AQH», «zPJt2lGxKU», «C3ssWKqU5s», «XsfI0o5asg», «QiR4pDd4N0», «q4iY9xGn3V», «msQISGxfMJ», «yRyD1ec8fb», «dBfcrywOUD», «O9cMzNXF5t», «lNuV5TSkbO», «YEgbviK7AV», «HKrrLQBtt2», «ZU0hqtXuNa»

 

Hay que tener en cuenta que, si no se introduce ninguna actividad durante cierto tiempo, se genera un código aleatorio.

 

Ejercicio 2. Generar un Log de Actividades. Bud necesita generar un log de actividades para analizar el comportamiento de los carceleros. Escribe un programa que registre las diferentes actividades del sistema en un archivo.

 

Instrucciones:

  1. Crea un array con diferentes actividades  («Patrullaje regular», «Inspección y mantenimiento», » Limpieza y desinfección»).

Escribe estas actividades en un archivo log_actividades.txt, una por línea.

 

Solución:

 

import java.io.*;

public class Main {
    public static void main(String[] args) {

        String[] actividades = {
            "iRKJi2KpMW", "ixpFHX0v8s", "rMxNXbeUxC", "bjO9IUsFGc", "LpTB2ffO8w", "S4WwZffjqB", "HuuSb3RH6l", "O8OmH1ApJx", "LpFKbFT7hU",
            "TZ9BmcroA7", "dyLWJCvbU6", "qNlWgK2wzD", "s6vEOgmfsY", "ccDtnysyec", "waITKPmWbY", "HH9N0Ufih4", "cGIet9lE4y", "MCwCJ6LNQP", "OfecGXWhqY",
            "SOd3Tco6mI", "r8QwQDbHyp", "4V6bJhJ20x", "nzkiWhmxVj", "0tT2nDToVa", "67NEMfhs2x", "W3HXrDI7SJ", "KgGoiFJfMN", "2WK7UZVmgX", "3KNx0fDu54",
            "Rn20v6baaz", "t8jChEgFSz", "489dXWEFi6", "oNSsEfNwaP", "V4zx2r6XR8", "2dPXcKbZNQ", "WpsxQvEbVw", "7f6floF3VU", "W1joPNEiK1", "pXpGUMRsZq",
            "1M1jDBpiGu", "xjZBVieX1Q", "y3dVBuhTrJ", "s0YB6CVSFV", "vZQgDge2HJ", "EsWhUsnhLa", "hevhsUt0ux", "bYwU4Qy6Gl", "sCW32VXSfD", "mwCdwQ809e",
            "zyRwiYkfDk", "ko4o26MErP", "Lk1rspAJQK", "d5Y9IPuMk5", "yKj992kdnn", "Q1XsuVqUGr", "fHMDmXiAcp", "dql0nmQJcm", "qRqSHARwSA", "CgV8ne6fRG",
            "30DYrnKWoA", "r1QrdR0es2", "HXTV8XvYoP", "GQAWwyhMSL", "4yMmh7e5NW", "yT2kIJvDqN", "AbIqpbKj5h", "haAriF42gR", "O6MciwEwQ4", "hW8Pf9IkX7",
            "kUaN7Cnv96", "tAROxtCUiP", "aZEZynwwpj", "cqzR5Y3Ipi", "M69Qr3BWJj", "ySTegpfDxw", "f47AKb3Bsn", "XOsmCGvcSo", "wA7iC3Fq1k", "NqTC2OpWGr",
            "IvvkjHR0Q2", "JyT5lu4QPo", "2whhr0ixDg", "xcYX1ELvDi", "zTS8EJE0hh", "7gYXpaaPIs", "UiZ8tMlvfl", "uuSBzI6IfZ", "BdcQ3ci06N", "VNrQV6uZvU",
            "gZILASO2gT", "iOIRRKFxhc", "jkSGZFtIpw", "2gkQKh6J8L", "jnTyMxcG8I", "X07Mj6M0Rj", "SqjfH3cyLO", "GfKiA3DZ4w", "RBIquXXt0k", "udPC3Q0PXo",
            "CM44vkuwyT", "20n5Uwv6s8", "5ST85ixStb", "uliTvpFukE", "ErQPLyDuRw", "XX5eaAXr1a", "nLenQQgqoP", "ThjBwzns36", "8RghH8Vneq", "FWFaHu0c2a",
            "HqGai14Ao6", "nFEi87Bafj", "rotkzVlY3k", "Tah5BZU49N", "YILUBnOTTh", "kyhPp7TWZp", "q1kiVAMsHv", "OvKuo3mvSX", "htDbhBg7vs", "O8ZBRQB5cO",
            "TlUDfrzdUi", "7yIIltvZSI", "HkAkB7qO3c", "j4DvSZL3Ry", "ONmRHuWdGc", "a7LmXNTfap", "MlHEWHZhrz", "ADKHiZeBAS", "0KQ6aXlsZY", "OKMfZsps6e",
            "vJpOxdfzEd", "BKs9UTKTQJ", "DBNrFCM5d7", "hse8XLelZK", "3jz3bLreNc", "ZZSHQ35FpT", "jOmaC6iMOW", "iXvhHmq2pn", "gqnfV11and", "DDfLkv3uBg",
            "UQjsb1ixF0", "08zSNrhvxs", "LSWyFeFyYv", "Patrullaje regular", "4Bpd1idsum", "vCgKs8GFTI", "uhUIpi1VLd", "AQn63M3ANF", "Y39NIKxIgJ",
            "YcpNNmT3GX", "C8Di70GqS7", "Ybg4P3BOij", "6Tb4opfNeC", "aTmzLU9opz", "QSHg6ZRmyH", "lVUz2kHAOn", "Inspección y mantenimiento", "wUxaxSm9lC",
            "DVTb4JEZQ9", "sjahqvnVsk", "TfvPongU7w", "gQ6g0rJ7ax", "bejbKLd6ZR", "SMj8MjDEWY", "fanVKMvsmZ", "Patrullaje regular", "gmqX2oBxvm",
            "Mb9B4SHLvM", "64rh8hh6Li", "SjalZaHsOA", "yxDLOhr4Od", "qfN1GbZNFA", "C4q5ridJ7I", "aQLm7SJeEo", "LNDWA1UHzG", "QpYvFfSY6S", "I7ySXRZkQH",
            "WwtkFmM7pP", "gl794m6lyl", "6fvgHjprUx", "SVlNByrKBN", "DNEmWPvl51", "Mm6NxxNkdF", "gyLw8TP8kH", "vcqjXfWTYz", "bpuMR5EVFB", "sMMP5HpxJg",
            "9hU32sjepp", "RsYnv80Hx2", "SilPvzI3gD", "L7pspbXgSw", "RvAtxqkYF2", "9gOPHDbw31", "uUDPlKRjU3", "NkPKW7zkZK", "dBOiqar26k", "GXPsNzuULq",
            "KwwpvvPqQ2", "Tif0qfs2eq", "3xTc242fPW", "c5jJz3DVrV", "zrK0VW0AQH", "zPJt2lGxKU", "C3ssWKqU5s", "XsfI0o5asg", "QiR4pDd4N0", "q4iY9xGn3V",
            "msQISGxfMJ", "yRyD1ec8fb", "dBfcrywOUD", "O9cMzNXF5t", "lNuV5TSkbO", "YEgbviK7AV", "HKrrLQBtt2", "ZU0hqtXuNa"
        };

        String archivoSalida = "log_actividades.txt";

        try (BufferedWriter bw = new BufferedWriter(new FileWriter(archivoSalida))) {
            for (String actividad : actividades) {
                bw.write(actividad);
                bw.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

No todas las tareas se realizan todos los días. Nuestro plan es escapar un lunes, así que crearemos un programa que nos muestre cuántas veces se realiza cada tarea al día. Tenemos que encontrar alguna que no se realice en absoluto.

Cada tarea se lleva a cabo siempre a la misma hora, independientemente del día. Por ejemplo, la inspección y el mantenimiento se realizan siempre de 2:00 a 3:00. Por tanto, si el lunes esta actividad no se repitiera en absoluto, significaría que, durante ese periodo, los guardias no tendrían nada que hacer y posiblemente estén descansando. Sabemos a qué hora, en teoría, se realiza cada una de las tareas. Ahora solo nos queda verificar si el lunes hay alguna que no se realice.

Ejercicio 3. Necesitamos analizar el log de actividades para identificar patrones repetitivos durante la noche. Si alguno de ellos no se repite durante la noche que pretendemos escapar, significa que puede que el pasillo esté vacío.

 

Instrucciones:

 

  1. Lee el archivo log_actividades.txt.
  2. Cuenta la cantidad de veces que cada actividad ocurre.
  3. Escribe los resultados en un archivo resumen_actividades.txt.

 

Solución:

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) {

        String archivoEntrada = "log_actividades.txt";
        String archivoSalida = "resumen_actividades.txt";

        Map<String, Integer> contadorActividades = new HashMap<>();

        try (
            BufferedReader br = new BufferedReader(new FileReader(archivoEntrada));
            BufferedWriter bw = new BufferedWriter(new FileWriter(archivoSalida))
        ) {
            String linea;

            while ((linea = br.readLine()) != null) {
                contadorActividades.put(linea, contadorActividades.getOrDefault(linea, 0) + 1);
            }

            for (Map.Entry<String, Integer> entry : contadorActividades.entrySet()) {
                bw.write(entry.getKey() + ": " + entry.getValue());
                bw.newLine();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

Hemos revisado el registro y los resultados son mejores de lo que esperábamos. Según el análisis, la actividad de ‘Limpieza y desinfección’ no se realiza los lunes. Esta tarea se lleva a cabo entre las 3 y las 4 de la mañana. Ahora sabemos que durante esa hora el pasillo permanece inactivo, sin ningún tipo de actividad.

Con tanto tiempo disponible, no tendremos que preocuparnos por nada. Será pan comido. Sin embargo, debemos estar completamente seguros de que no habrá sorpresas ni imprevistos.

Bud y Pedro deberían estar satisfechos, pero están demasiado serios. Ante estas buenas noticias, yo me siento optimista. Estamos a solo un paso de escapar. No obstante, creo que Bud desconfía. Algo se nos escapa, y necesitaremos ayuda externa para descubrirlo.

Por suerte, conocemos a un guardia que no puede negarse a colaborar. Phil nos ha informado de que recientemente se han implementado dos actividades más: ‘Monitoreo de cámaras’ y ‘Comunicación con el puesto de control’. Debemos actualizar el registro para verificar si, durante el periodo de tiempo que creíamos libre, los guardias en realidad están en el pasillo realizando alguna de estas dos tareas.

 

Ejercicio 4. Actualizar el registro de Actividades. Necesitamos actualizar el log de actividades en tiempo real para reflejar cambios en el sistema. Escribe un programa que agregue nuevas actividades al archivo de log de actividades.

El nuevo log que hemos encontrado es el siguiente:

 

«iRKJi2KpMW», «ixpFHX0v8s», «rMxNXbeUxC», «bjO9IUsFGc», «LpTB2ffO8w», «S4WwZffjqB», «HuuSb3RH6l», «O8OmH1ApJx», «LpFKbFT7hU», «TZ9BmcroA7», «dyLWJCvbU6», «qNlWgK2wzD», «s6vEOgmfsY», «ccDtnysyec», «waITKPmWbY», «HH9N0Ufih4», «cGIet9lE4y», «MCwCJ6LNQP», «OfecGXWhqY», «SOd3Tco6mI», «r8QwQDbHyp», «4V6bJhJ20x», «nzkiWhmxVj», «0tT2nDToVa», «67NEMfhs2x», «W3HXrDI7SJ», «KgGoiFJfMN», «2WK7UZVmgX», «3KNx0fDu54», «Rn20v6baaz», «t8jChEgFSz», «489dXWEFi6», «oNSsEfNwaP», «V4zx2r6XR8», «2dPXcKbZNQ», «WpsxQvEbVw», «7f6floF3VU», «W1joPNEiK1», «pXpGUMRsZq», «1M1jDBpiGu», «xjZBVieX1Q», «y3dVBuhTrJ», «s0YB6CVSFV», «vZQgDge2HJ», «EsWhUsnhLa», «hevhsUt0ux», «bYwU4Qy6Gl», «sCW32VXSfD», «mwCdwQ809e», «zyRwiYkfDk», «ko4o26MErP», «Lk1rspAJQK», «d5Y9IPuMk5», «yKj992kdnn», «Q1XsuVqUGr», «fHMDmXiAcp», «dql0nmQJcm», «qRqSHARwSA», «CgV8ne6fRG», «30DYrnKWoA», «r1QrdR0es2», «HXTV8XvYoP», «GQAWwyhMSL», «4yMmh7e5NW», «yT2kIJvDqN», «AbIqpbKj5h», «haAriF42gR», «O6MciwEwQ4», «hW8Pf9IkX7», «kUaN7Cnv96», «tAROxtCUiP», «aZEZynwwpj», «cqzR5Y3Ipi», «M69Qr3BWJj», «ySTegpfDxw», «f47AKb3Bsn», «XOsmCGvcSo», «wA7iC3Fq1k», «NqTC2OpWGr», «IvvkjHR0Q2», «JyT5lu4QPo», «2whhr0ixDg», «xcYX1ELvDi», «zTS8EJE0hh», «7gYXpaaPIs», «UiZ8tMlvfl», «uuSBzI6IfZ», «BdcQ3ci06N», «VNrQV6uZvU», «gZILASO2gT», «iOIRRKFxhc», «jkSGZFtIpw», «2gkQKh6J8L», «jnTyMxcG8I», «X07Mj6M0Rj», «SqjfH3cyLO», «GfKiA3DZ4w», «RBIquXXt0k», «udPC3Q0PXo», «CM44vkuwyT», «20n5Uwv6s8», «5ST85ixStb», «uliTvpFukE», «ErQPLyDuRw», «XX5eaAXr1a», «nLenQQgqoP», «ThjBwzns36», «8RghH8Vneq», «FWFaHu0c2a», «HqGai14Ao6», «nFEi87Bafj», «rotkzVlY3k», «Tah5BZU49N», «YILUBnOTTh», «kyhPp7TWZp», «q1kiVAMsHv», «OvKuo3mvSX», «htDbhBg7vs», «O8ZBRQB5cO», «TlUDfrzdUi», «7yIIltvZSI», «HkAkB7qO3c», «j4DvSZL3Ry», «ONmRHuWdGc», «a7LmXNTfap», «MlHEWHZhrz», «ADKHiZeBAS», «0KQ6aXlsZY», «OKMfZsps6e», «vJpOxdfzEd», «BKs9UTKTQJ», «DBNrFCM5d7», «hse8XLelZK», «3jz3bLreNc», «ZZSHQ35FpT», «jOmaC6iMOW», «iXvhHmq2pn», «gqnfV11and», «DDfLkv3uBg», «UQjsb1ixF0», «08zSNrhvxs», «LSWyFeFyYv», «Patrullaje regular», «4Bpd1idsum», «vCgKs8GFTI», «uhUIpi1VLd», «AQn63M3ANF», «Y39NIKxIgJ», «YcpNNmT3GX», «C8Di70GqS7», «Ybg4P3BOij», «6Tb4opfNeC», «aTmzLU9opz»

 

Instrucciones:

 

Usa un array para simular nuevas actividades que se agregan al sistema: «Monitoreo de cámaras», «Comunicación con el puesto de control»

  1. Usa un array para simular nuevas actividades que se agregan al sistema, » Monitoreo de cámaras», » Comunicación con el puesto de control».
  2. Agrega estas actividades al final del archivo log_actividades.txt.

 

Solución:

 

import java.io.*;

public class Main {
    public static void main(String[] args) {

        String[] nuevasActividades = {
            "6UX5w1vjQJ", "KAB1GksspV", "ziuAVNowpG", "uG0BEclHuq", "0xgydgyaK7", "IkSjUcqTbg", "7ZzjJYTCID",
            "7oGiZxDCIP", "9BRePDOokd", "SLR5QqI1gm", "dzHGx84mQH", "tTP235qyws", "Fk7qbJXHUN", "b82VQ4j1R5",
            "B2I4iZ096c", "yI6ntrP2cz", "y4rC1OQMJg", "WIjc2dUrde", "OYukZtwS1L", "qkwGHmjPao", "HycTVJeLB4",
            "ZaUckOVqbT", "qODG1FAhVE", "erLTxdRe61", "qZ1NgPNFt9", "bUifZB8w4s", "Monitoreo de cámaras",
            "zCrzN1ZDUg", "gzCzIGm23u", "cDFm0hkrFw", "IDI0VBjizw", "klhN9ZnUyu", "GuscO6H64v", "DJrhWpPTqr",
            "zM3MWg5rSj", "DMYzD7vkHF", "BNghDoM55o", "yr89K38y7l", "H2qEcM6elW", "iw6OVfFJDh", "yj16xbky6M",
            "lFcJ6bQs54", "CNSJhoARCw", "jOxs8ry2fx", "INZj1DoLqA", "GSEGuaChrR", "jrE68aipWX", "h8doJ65vcr",
            "2EoBD02CKL", "C1av3xn5eG", "R8w7lp6uKQ", "sr1E5Nf6cz", "6C5Eff5czg", "WHVPxvyciZ", "KlO6H5Vduk",
            "x6NIpTkJBK", "3YvHL9eQQ0", "qYYtIPWjpv", "UZKlgaZ4TD", "msiexEsxj9", "RzoCEriGyZ", "vLuY3gwLJO",
            "d45CH4k7cs", "rGdyVlst2Q", "3XRVIfo9mc", "eWUlCZ8UOo", "Monitoreo de cámaras", "ic7SdX8di8",
            "C4qAoBxA3D", "Comunicación con el puesto de control", "VBxKrQngfS", "fICz9PFnDX", "dk2ncCGc8x",
            "QG1MBYgT9i", "HAJkKvCVwT", "gYoMT0TLOu", "vaNsJoXLnd", "TpBnt4Ieav", "TduiTd43zP", "Qm2zhvHZXB",
            "n7BOCacWYA", "VY4N9FrFPB", "TACDi2dNQY", "VW4PHE8ZDb", "SDYMTOCNJc", "Jnt9v9dgKy", "pY0yYILavE",
            "G9ERpaXMNl", "qDkqFSu4Sr", "O3VyiIOh6E", "5qB9sTCmKH", "g5MyR0lXeu", "egzksA1lg2", "h6uLmm8tbp",
            "Fx7ay5mNkD", "neDWml2spW", "IwkPB704pi", "7WqwiNEBrv", "9ed11mNwh7", "kf3qNbMBkS", "MYFOZ3hHC8",
            "t4I0RK0M8O", "tkvxwGzdjg", "8YsZ8xVw0m", "EdFd9zOWF5", "Te6y3Oa5XP", "9sg2XIQxbQ", "kJhouzOXkS",
            "128laUqDWt", "nJDSEaneBg", "2rGSBCuzTd", "a5GbJeDTDh", "WVvQGSEkjL", "Q26giaMbeM", "ArdXbDImAh",
            "Ll3nyJ5PRS", "WjZL4th5V5", "fTtNnPheOS", "73rwDzESwL", "8eXQ7OW9gv", "SMgcsFvILx", "wRKnDVc55v",
            "UWC1QxcVZc"
        };

        String archivoSalida = "log_actividades.txt";

        try (BufferedWriter bw = new BufferedWriter(new FileWriter(archivoSalida, true))) {
            for (String actividad : nuevasActividades) {
                bw.write(actividad);
                bw.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

Ahora utilizaremos de nuevo el programa creado en el ejercicio tres para comprobar si alguna de las nuevas actividades se realiza los lunes.

Las noticias no son buenas. Parece que, en el momento en que pensábamos que el pasillo estaba vacío, en realidad hay dos vigilantes realizando tareas de monitoreo y comunicación con el puesto de control.

La esperanza de escapar estaba puesta en el lunes. No hemos comprobado el resto de los días, ya que, según la actividad de las puertas, hay aún más movimiento de guardias. Solo nos queda una solución: debemos ingeniárnoslas para que «Monitoreo de cámaras» y «Comunicación con el puesto de control» no se realicen el próximo lunes.

La idea de Pedro es cambiar la lista de tareas del sistema y eliminar esas dos nuevas actividades. El problema es que ya están programadas y solo pueden modificarse si el director o el subdirector deciden rotar el orden de las mismas. No es algo que hagan todas las semanas, ni mucho menos; de hecho, a veces tardan años en hacerlo.

Sin embargo, si el sistema entra en modo de mantenimiento, se pueden modificar los ficheros, y podremos eliminar las tareas que no queremos que se realicen el lunes. Una buena razón para que el sistema entre en mantenimiento es desajustar el registro de actividad de las puertas; además, es algo muy fácil de llevar a cabo.

Recordemos que ese fichero registra minuto a minuto cuántos segundos estuvo activa la puerta. Lo que haremos será asignar un segundo más de actividad a cada minuto. En los minutos en que la puerta esté activa durante 60 segundos, pasará a mostrar 61 segundos. Esto generará un error, ya que el sistema detectará que un minuto solo puede tener como máximo 60 segundos de actividad.

Ejercicio 5. Manipular Tiempos de actividad de las puertas. Escribe un programa que lea los tiempos de actividad y les asigne de un archivo y los modifique.

 

Instrucciones:

 

  1. Crea un archivo tiempos_registro.txt con tiempos de registro en milisegundos (uno por línea).
  2. Lee los tiempos de registro del archivo.
  3. Incrementa cada tiempo en una cantidad fija (1 segundo).
  4. Escribe los tiempos modificados en un archivo tiempos_modificados.txt.

 

Solución:

 

import java.io.*;

public class Main {
    public static void main(String[] args) {
        String archivoEntrada = "actividad.txt ";
        String archivoSalida = "tiempos_modificados.txt";
        int incremento = 1;

        try (
            BufferedReader br = new BufferedReader(new FileReader(archivoEntrada));
            BufferedWriter bw = new BufferedWriter(new FileWriter(archivoSalida))
        ) {
            String linea;
            while ((linea = br.readLine()) != null) {
                long tiempoOriginal = Long.parseLong(linea);
                long tiempoModificado = tiempoOriginal + incremento;
                bw.write(Long.toString(tiempoModificado));
                bw.newLine();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

Como era de esperar, el programa detectó rápidamente el error y procedió a identificarlo y repararlo. Simplemente reinició el sistema, y los registros volvieron a la normalidad.

Logramos nuestro objetivo: durante ese periodo de mantenimiento y búsqueda de errores, se abrió una ventana temporal que permitía modificar todos los archivos. Pedro aprovechó ese momento para cambiar la lista de tareas programadas para el lunes por la lista que nosotros necesitábamos, la que deja el pasillo libre durante una hora.