Aprende Java Fácil. Capítulo 18. Interviniendo las conversaciones de los guardias

Capítulo 18. Interviniendo las conversaciones de los guardias

Durante la última fase de nuestro plan, Rich y Pedro se mantendrán un poco más rezagados, y yo me adelantaré para encargarme de abrir la puerta. Tengo instrucciones muy claras, así que no creo que haya ningún problema.

Evidentemente, Bud y Pedro tienen mucha más habilidad programando. En teoría, ellos deberían encargarse de abrir la puerta, pero se ocuparán de otra función igual de importante: controlar las comunicaciones de los guardias y vigilar las cámaras.

Durante la escapada, Pedro deberá acceder a uno de los puestos de control en el pasillo principal. Recuerda que estos puestos solo están ocupados durante el día. Por la noche no es necesario que haya nadie vigilando, así que la idea es utilizar el ordenador que hay ahí para monitorear todas las cámaras de la cárcel. De esta forma, sabremos si alguien se aproxima.

 

 

Para estar aún más seguros de que nadie nos descubre, Bud estará junto a mí y se encargará de dos cosas. Controlar la comunicación interna de los guardias y, al mismo tiempo, comunicarse con Pedro. De esta forma, si Pedro ve algo sospechoso, podrá avisar a Bud, y este a mí, para que podamos volver a nuestras celdas o escondernos.

Las cosas no siempre son sencillas, y en este caso todo se complica. El problema es que todas las comunicaciones de entrada y salida del ordenador de Bud están monitoreadas. No es un ordenador normal; recordemos que Bud es un preso; tiene muchas opciones restringidas y no se le permite comunicarse con personas del exterior.

Así que, para comunicarnos entre nosotros, no nos ha quedado más remedio que crear un sistema de mensajes codificados. La idea es sustituir cada letra por símbolos. De esta manera, los mensajes serán totalmente imposibles de leer si no se sabe descifrarlos. Para evitar aún más sospechas, solo enviaremos mensajes si es absolutamente necesario. Incluso si los guardias llegan a sospechar algo, para cuando se den cuenta ya habremos terminado.

Una vez que salgamos, tendremos aproximadamente tres horas hasta la revisión de habitaciones. Por lo tanto, debo darme prisa. Tardaré unos 30 minutos en llegar a la casa de la amiga de Pedro. Desde allí, necesitaré otros 15 minutos para llegar a la biblioteca. Después de la reunión con Chani y Rich, necesitaré otros 15 minutos para llegar al aparcamiento donde me encontraré con Phil. Luego, me tomará entre 15 y 30 minutos regresar a la cárcel y, posiblemente, otros 15 a 30 minutos adicionales para llegar a mi celda, ya que podría tener que esconderme y esperar a que no haya vigilantes.

 

Esto suma un total de entre 1 hora y 45 minutos y 2 horas. Considerando posibles contratiempos, calculo un margen de 15 minutos adicionales, lo que hace un total de 2 horas y 15 minutos. Por lo tanto, la reunión deberá durar aproximadamente media hora. El primo de Chani ya conoce mi itinerario y el tiempo que tengo, así que supongo que tendrá todo planeado en función de eso. Parece que todo está saliendo como habíamos planeado, así que estoy bastante tranquilo. Ahora vamos a revisar juntos que los programas de cifrar y descifrar mensajes funcionan.

Ejercicio 1. Crea un programa para codificar el texto introducido por teclado, reemplazando todas las letras minúsculas por símbolos específicos definidos. Funcionará en un bucle que procesará múltiples mensajes.

 

Solución:

 

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("Introduce el texto a codificar (o escribe 'salir' para terminar):");

            String texto = scanner.nextLine();

            if (texto.equalsIgnoreCase("salir")) {
                break;
            }

            String textoCodificado = texto.replace('a', '!')
                                          .replace('b', '@')
                                          .replace('c', '#')
                                          .replace('d', '$')
                                          .replace('e', '%')
                                          .replace('f', '^')
                                          .replace('g', '&')
                                          .replace('h', '*')
                                          .replace('i', '(')
                                          .replace('j', ')')
                                          .replace('k', '-')
                                          .replace('l', '_')
                                          .replace('m', '=')
                                          .replace('n', '+')
                                          .replace('o', '[')
                                          .replace('p', ']')
                                          .replace('q', '{')
                                          .replace('r', '}')
                                          .replace('s', ';')
                                          .replace('t', ':')
                                          .replace('u', '<')
                                          .replace('v', '>')
                                          .replace('w', ',')
                                          .replace('x', '.')
                                          .replace('y', '?')
                                          .replace('z', '/');

            System.out.println("Texto codificado: " + textoCodificado);
        }
    }

}

Ejercicio 2. Crea un programa para descodificar el texto previamente codificado, reemplazando los símbolos por las letras minúsculas originales. Funcionará en un bucle para procesar múltiples mensajes.

 

Solución:

 

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("Introduce el texto a decodificar (o escribe 'salir' para terminar):");

            String textoCodificado = scanner.nextLine();

            if (textoCodificado.equalsIgnoreCase("salir")) {
                break;
            }

            String textoDecodificado = textoCodificado.replace('!', 'a')
                                                      .replace('@', 'b')
                                                      .replace('#', 'c')
                                                      .replace('$', 'd')
                                                      .replace('%', 'e')
                                                      .replace('^', 'f')
                                                      .replace('&', 'g')
                                                      .replace('*', 'h')
                                                      .replace('(', 'i')
                                                      .replace(')', 'j')
                                                      .replace('-', 'k')
                                                      .replace('_', 'l')
                                                      .replace('=', 'm')
                                                      .replace('+', 'n')
                                                      .replace('[', 'o')
                                                      .replace(']', 'p')
                                                      .replace('{', 'q')
                                                      .replace('}', 'r')
                                                      .replace(';', 's')
                                                      .replace(':', 't')
                                                      .replace('<', 'u')
                                                      .replace('>', 'v')
                                                      .replace(',', 'w')
                                                      .replace('.', 'x')
                                                      .replace('?', 'y')
                                                      .replace('/', 'z');

            System.out.println("Texto decodificado: " + textoDecodificado);
        }
    }

}