jueves, 23 de enero de 2020

Festival Only Ships


FESTIVAL ONLY SHIPS

El 19 de diciembre de 2019 se estrenó la última entrega de  Star Wars en España. Esto ha espoleado a unos amigos para la creación de un festival de cine de ciencia-ficción que tendrá como característica principal que haya naves en la narrativa de todas las proyecciones. Por eso, el festival se llamará “Only ships” (Sólo naves).
El grupo de amigos se ha puesto en contacto con el centro comercial Carretres para alquilar una sala –rebautizada como “Sala Nostromo” para la ocasión (Es el nombre de la nave en la película “Alien, el octavo Pasajero”, que será la película que inaugure el festival, y de la que se cumplió su 40 aniversario en marzo) durante la celebración del festival.

Uno de los amigos es desarrollador de aplicaciones y ha decidido crear una aplicación –muy sencilla- que gestione la adquisición de entradas. Vamos a ayudar a este amigo a crear su App.



Todas las entradas valdrán 3 Euros
Según se entra a la aplicación, deberá tenerse la siguiente carátula y menú:



Nota: En el apartado de recursos, se tiene un String que nos da el ASCII Art correspondiente.
Nota 2: En el caso de llamada a funciones, deberán pasarse los parámetros necesarios.
La entrada a este menú –funcionando correctamente- valdrá 0,25 puntos (No es necesario que sea una función, puede estar dentro del main, pero sí que sea repetitivo y que llame a las funciones indicadas en lo sucesivo)
Si se selecciona la opción 0, -y sólo si se selecciona la opción 0- se abandonará la aplicación (0,5 puntos)
Si se selecciona la opción 1, se llamará a una función mostrar, que me mostrará el póster y el título de la película (Ascii Art para ello disponible en el apartado de recursos (1 punto)

Si se selecciona la opción 2, se llamará a una función mostrarSala que nos sacará el diagrama de estado actual  de la sala –Las butacas vacías se representan por ‘O’, las butacas llenas por ‘X’:




(En la anterior ejecución, ninguna entrada se ha vendido aún, por lo que no hay  ninguna butaca con el carácter ‘X’. La sala consta de 12 filas y 20 butacas por fila) (2 puntos)

Si se selecciona la opción 3, el programa llamará a la función comprarEntrada, que funcionará tal como se ve en el siguiente ejemplo de ejecución(Nos pedirá fila y la butaca que se quiere y tras preguntarnos si estamos de acuerdo con el precio, nos imprimirá la entrada(si estamos de acuerdo, claro), mediante una llamada a la función imprimirEntrada)

Esta función cambiará el estado de la sala, el cual mostraremos mediante la anterior función:


Como puede verse en el ejemplo, se tiene que la butaca 2 de la fila 2 ha cambiado su estado de ‘O’ a ‘X’
En el caso de que quiera comprarse una entrada para una butaca que ya se ha vendido debe aparecer lo siguiente:




(2 puntos)



La opción 4 permite devolver una entrada, lo cual vuelve a cambiar el estado de la butaca de ‘X’ a ‘O’. Para ello llamará a una función devolverEntrada, que realizará lo siguiente:


En el caso de que se quiera devolver una entrada que no había sido vendida, debe aparecer lo siguiente:



(2 puntos)




La quinta opción debe permitirnos acceder al valor de lo recaudado hasta ahora
(2 puntos)

Si el aspecto de la aplicación es igual al de las capturas, se concederán los 0,25 puntos restantes.




Recursos:
ASCII Art para el nombre del festival



Se debe usar el siguiente String para la carátula del festival:
(""+
"                      ______        _   _            _    ____        _          _____ _     _           \n" +
"                     |  ____|      | | (_)          | |  / __ \\      | |        / ____| |   (_)          \n" +
"                     | |__ ___  ___| |_ ___   ____ _| | | |  | |_ __ | |_   _  | (___ | |__  _ _ __  ___ \n" +
"                     |  __/ _ \\/ __| __| \\ \\ / / _` | | | |  | | '_ \\| | | | |  \\___ \\| '_ \\| | '_ \\/ __|\n" +
"                     | | |  __/\\__ \\ |_| |\\ V / (_| | | | |__| | | | | | |_| |  ____) | | | | | |_) \\__ \\\n" +
"                     |_|  \\___||___/\\__|_| \\_/ \\__,_|_|  \\____/|_| |_|_|\\__, | |_____/|_| |_|_| .__/|___/\n"  +
"                                                                         __/ |                | |        \n" +
"                                                                        |___/                 |_|        ");


ASCII Art para conseguir ver el título de la película:


(“   #                                                                                                                                                       \n" +
"  # #   #      # ###### #    #        ###### #          ####   ####  #####   ##   #    #  ####     #####    ##    ####    ##        # ###### #####   ####  \n" +
" #   #  #      # #      ##   #        #      #         #    # #    #   #    #  #  #    # #    #    #    #  #  #  #       #  #       # #      #    # #    # \n" +
"#     # #      # #####  # #  #        #####  #         #    # #        #   #    # #    # #    #    #    # #    #  ####  #    #      # #####  #    # #    # \n" +
"####### #      # #      #  # # ###    #      #         #    # #        #   ###### #    # #    #    #####  ######      # ######      # #      #####  #    # \n" +
"#     # #      # #      #   ## ###    #      #         #    # #    #   #   #    #  #  #  #    #    #      #    # #    # #    # #    # #      #   #  #    # \n" +
"#     # ###### # ###### #    #  #     ###### ######     ####   ####    #   #    #   ##    ####     #      #    #  ####  #    #  ####  ###### #    #  ####  \n" +
"                               #”);                                                                                                                           


ASCII Art para la imagen del monstruo:
("     ,'\"   _      _   \"`.\n" +
"     /.__, ._  -=- _\"`    Y\n" +
"    (.____.-.`      \"\"`   j\n" +
"     VvvvvvV`.Y,.    _.,-'       ,     ,     ,\n" +
"        Y    ||,   '\"\\         ,/    ,/    ./\n" +
"        |   ,'  ,     `-..,'_,'/___,'/   ,'/   ,\n" +
"   ..  ,;,,',-'\"\\,'  ,  .     '     ' \"\"' '--,/    .. ..\n" +
" ,'. `.`---'     `, /  , Y -=-    ,'   ,   ,. .`-..||_|| ..\n" +
"ff\\\\`. `._        /f ,'j j , ,' ,   , f ,  \\=\\ Y   || ||`||_..\n" +
"l` \\` `.`.\"`-..,-' j  /./ /, , / , / /l \\   \\=\\l   || `' || ||...\n" +
" `  `   `-._ `-.,-/ ,' /`\"/-/-/-/-\"'''\"`.`.  `'.\\--`'--..`'_`' || ,\n" +
"            \"`-_,',  ,'  f    ,   /      `._    ``._     ,  `-.`'//         ,\n" +
"          ,-\"'' _.,-'    l_,-'_,,'          \"`-._ . \"`. /|     `.'\\ ,       |\n" +
"        ,',.,-'\"          \\=) ,`-.         ,    `-'._`.V |       \\ // .. . /j\n" +
"        |f\\\\               `._ )-.\"`.     /|         `.| |        `.`-||-\\\\/\n" +
"        l` \\`                 \"`._   \"`--' j          j' j          `-`---'\n" +
"         `  `                     \"`,-  ,'/       ,-'\"  /\n" +
"                                 ,'\",__,-'       /,, ,-'\n" +
"                                 Vvv'            VVv'");

Prueba inicial








Primera Fase
Thanos ha destruído la mitad de la  vida del Universo Marvel con ayuda de las Gemas del Infinito. Los Vengadores necesitan localizar el planeta en el que se encuentra para intentar recuperar las Gemas y deshacer el entuerto. La nave de Mapache Cohete ha localizado el lugar donde las gemas han sido utilizadas por última vez
Lamentablemente, la Inteligencia Artificial de la nave ha sufrido un poco durante los combates previos y no da una respuesta directa respecto a las coordenadas del planeta en el que se encuentran las gemas, de hecho su respuesta es que la coordenada espacial del planeta corresponde a la solución del siguiente enunciado:
CALCULAR EL PRODUCTO DE LOS NÚMEROS MÚLTIPLOS DE 3 Y DE 5 (DE AMBOS A LA VEZ) COMPRENDIDOS ENTRE 100 Y 200
Ayuda a los Vengadores a encontrar al supervillano para que puedan revertir el daño ocasionado a la realidad del Universo Marvel.


Segunda Fase
Tras una confrontación inútil con Thanos, los Vengadores han descubierto que el daño no puede revertirse porque las gemas han sido destruidas. El mundo sigue su curso durante cinco años. Un día, Scott Lang aparece en la puerta de la base de los Vengadores y trata de convencer al resto de superhéroes de la posibilidad de realizar un viaje en el tiempo.
Tony Stark inicialmente descarta la idea pero le sigue dando vueltas durante todo el fin de semana, cuando llega a un punto muerto. En este momento, le viene a la cabeza un problema cuya solución es clave para utilizar el Espacio Cuántico como puente para llegar a momentos del pasado:
CALCULAR LA SUMA DE LOS 10 000 PRIMEROS NÚMEROS PRIMOS (CONSIDERANDO QUE EL 1 ES PRIMO)
Ayuda a Tony Stark a resolver el problema para que los Vengadores puedan tener la posibilidad de salvar a la gente que murió durante el chasquido


Tercera Fase
Tras viajar en el tiempo y obtener todas las gemas, Iron Man ha fabricado un Guantelete, que en principio sólo podrá ser usado por Hulk, porque es el vengador que mejor puede soportar la radiación gamma que desprende el guantelete.
El problema es que un poder de esta magnitud no debería ser entregado a alguien cuyo intelecto ha sido cuando menos problemático en el pasado, así que Tony Stark le pone una prueba de agilidad mental para ver si está en condiciones de portar el Guantelete del Infiinito:
CALCULAR LA POTENCIA DE BASE LA SUMA DE LOS NÚMEROS PRIMOS MENORES QUE 100 (CONSIDERANDO QUE EL 1 ES PRIMO) Y EXPONENTE EL MÁXIMO COMÚN DIVISOR DE 1322382 Y 739878

Ayuda a Bruce Banner a resolver la prueba para que pueda deshacer el daño causado por Thanos a la realidad del Universo Marvel



Reto César


Estamos en el año 50 antes de Jesucristo. Toda la Galia está ocupada por los romanos… ¿Toda? ¡No! Una aldea poblada por irreductibles galos resiste, todavía y como siempre, al invasor. Y la vida no es fácil para las guarniciones de legionarios romanos en los reducidos campamentos de Babaorum, Aquarium, Laudanum y Petibonum...

 


La última triquiñuela de César ha consistido en inventar un código para que los galos no puedan saber dónde van a estar sus tropas aunque intercepten sus comunicaciones.

Lo que César no sabe es que Panoramix ya ha descifrado el código:
Consiste en asignar un número a cada palabra del siguiente alfabeto:
“ABCDEFGHIKLMNOPQRSTUVWXYZ”,
Sumarle un valor determinado constante -entero- y sustituir la letra por el carácter que ocupe el valor resultante.
Como ejemplo, si se introduce HOLA, con una clave 3, el sistema de encriptado nos saldrá KROD
Realiza un programa de encriptación que nos permita encriptar la frase
ESTAN LOCOS ESTOS ROMANOS
Posible solución:
Saludos,
Alfredo de la Presa Cruz

Máquina del tiempo


En 1985, El doctor Emmet Brown consiguió hacer realidad el sueño de su vida, gracias al condensador de fluzo.
Los espectadores no sabían cómo funcionaba, pero sí se les dijeron las condiciones que debía cumplir para funcionar: La velocidad debía ser mayor que 140 km/h y la energía disponible para realizar el viaje debía ser de 1,5 Gw. Sabiendo esto, vamos a crear un prototipo de una máquina del tiempo.







CONCURSO:
Crea la mejor máquina del tiempo posible. El mejor grupo del aula recibirá 0,25 puntos más en la evaluación (Por cada miembro)
(Cuidado con introducir fechas incorrectas)

Posible solución (Con muchas mejoras posibles):


A continuación, la clase Fecha (Nótese que faltaría poner privado el acceso a los atributos y el método booleano estático validarFecha al que se le pasa una cadena de caracteres, devolviéndonos si se ha elegido una fecha correcta o no)
Métodos getter y setters normales.
Dos constructores que me crean un objeto Fecha, uno de ellos (por defecto) pone el día a 25 de Enero de 2020.
El segundo crea el objeto Fecha con los valores que se le introduzcan como parámetro. (Nótese que podría aquí también incluirse la validación del objeto Fecha, aunque está implementado en la clase DeLorean). En la imagen el código se presenta compacto para una mejor comprensión
La siguiente es la clase DeLorean, la clase más importante porque es la que se encarga de instanciar el vehículo, como anteriormente se muestra el código compacto para no ocupar demasiado espacio en la página (Curiosamente vemos que el método get de un booleano empieza por is). El constructor por defecto nos pone los valores a cero de la velocidad y la energía, nos crea un nuevo objeto fecha con el valor inicial de nuestro viaje y nos pone el valor del condensador de fluzo a false;

Los siguientes métodos de la clase DeLorean nos permitirán viajar en el tiempo


Si la fecha no es válida, no cambiará ni la fecha ni la velocidad ni la energía. Si la fecha es válida y se cumplen las condiciones, la energía se convertirá a cero(Aunque también podría aplicarse una resta de 1,5 GigaWattios)
Método toString, que nos muestra el estado  de la máquina




Por último, tenemos la clase main, donde instanciamos la máquina, damos valores y probamos el viaje en el tiempo.
Mejoras posibles (Aparte de poner el código más estético, y poner la accesibilidad de los atributos privada, puede crearse un método recoger información en el DeLorean, que nos permita sacar los titulares más importantes del año en el que se encuentre la máquina)

Saludos,
Alfredo de la Presa Cruz