Final de la IV Shell Script Challenge

La 4ª edición de los retos de Shell Script Challenge ha terminado después de varias semanas de retos… y la palabra que puede reflejar el resultado es ¡¡ESPECTACULAR!!.

Este año hemos tenido más inscripciones que nunca, llegando hasta las 60 plazas. Además, el nivel también ha subido. Al igual que otros años, hemos tenido participantes de Florida (Catarroja), CIPFP Batoi (Alcoi), IES Estació (Ontinyent) i Xúquer (Alzira), habiendo alumnos de TSMR, ASIR, DAM, DAW y otras titulaciones como el Grado en Videojuegos, así que gracias a todos!!

Gracias porque habéis dificultado la labor del jurado debido a la calidad de las propuestas que habéis enviado. Se han valorado aspectos como el código, la eficiencia, las estructuras usadas, la claridad, la legibilidad, los aspectos innovadores, el orden de entrega e incluso si había alguna línea redundante… y aún así ha sido difícil poder hacer un ranking puesto que el nivel ha sido realmente alto.

No obstante, aunque todos los que habéis participado podéis consideraros ganadores, tenemos que poner una clasificación. Como ya sabéis, para ser totalmente imparciales, los scripts han sido valorados a ciegas por los jueces, con lo que no se ha sabido la identidad de los autores hasta que la clasificación final ha estado lista.

A continuación podéis ver los resultados. Cada reto ha sido puntuado de 0 a 100 en función de todos los criterios que hemos comentado anteriormente. Cualquier aspecto extra que pudiera incluir un script a juicio de los jueces, ha sido puntuado como lo que es, como un extra. Por eso, es posible que haya gente que tenga una puntuación mayor que 100 en algún reto. En base a estos criterios, la clasificación final queda de esta forma:

 

NOMBRE CENTRO CURSO RETO 1 RETO 2 RETO 3 TOTAL
1 Sergi Cortés CIPFP Batoi 1 DAM 94,04 100,00 90,34 284,38
2 Raül Ojeda IES Estació 1 DAW 100,00 72,88 100,00 272,88
3 Tono Molla IES Estació 2 TSMR 92,70 75,93 84,36 252,99
4 Joel Revert IES Estació 2 TSMR 94,49 95,93 47,47 237,89
5 Santiago Soler IES Estació 1 TSMR 96,87 72,20 57,77 226,84
6 Jordi Llopis IES Estació 1 DAW 91,95 36,10 98,41 226,46
7 Antoni Tormo IES Estació 1 TSMR 83,46 62,71 69,38 215,55
8 Javier Llinares CIPFP Batoi 1 DAW 93,14 68,47 44,10 205,72
9 Iván Pérez IES Estació 1 DAW 95,38 87,29 12,45 195,12
10 Pablo Navarro CIPFP Batoi 1 DAW 85,10 73,90 28,65 187,65
11 Jose Gracia CIPFP Batoi 1 DAW 82,12 65,42 37,83 185,37
12 Alejandro Ortega CIPFP Batoi 1 DAW 88,08 57,97 37,55 183,59
13 Diego Moreno Florida 1 DAW 70,64 73,90 37,82 182,36
14 Jorge López Florida 2 DAW 73,02 57,80 47,00 177,82
15 Borja Pérez CIPFP Batoi 1 DAW 86,59 60,51 28,47 175,56
16 Nacho Tineo Florida 1 DAW 59,02 58,64 53,65 171,31
17 Carlos Robles CIPFP Batoi 1 DAW 80,48 60,34 28,47 169,28
18 Guillermo Martínez Florida 1 DAM 53,95 66,61 46,91 167,47
19 Vicente García CIPFP Batoi 1 DAW 53,06 63,39 28,84 145,28
20 Sergi Santamaria CIPFP Batoi 1 DAM 56,78 81,93 0,00 138,71
21 Sergio Quesada Florida 1 DAM 49,33 51,85 31,46 132,65
22 Josep Bria Florida 1 DAM Semi 63,49 18,88 47,00 129,37
23 Javier Juan CIPFP Batoi 1 DAM 26,96 59,64 42,23 128,84
24 Gabriel Moreno CIPFP Batoi 1 DAW 70,34 20,61 37,64 128,59
25 Jairo Juliá CIPFP Batoi 1 DAM 64,23 59,49 0,00 123,72
26 Carlos Mobles CIPFP Batoi 1 DAM 54,76 68,51 0,00 123,27
27 Héctor López CIPFP Batoi 1 DAM 84,50 33,90 0,00 118,40
28 Rafael Jorge CIPFP Batoi 1 DAM 56,93 54,75 0,00 111,68
29 Alejandro Rozas CIPFP Batoi 1 DAM 52,31 51,02 0,00 103,33
30 Jose Olmos Florida 1 DAM 87,18 7,46 0,00 94,64
31 César Rojas CIPFP Batoi 1 DAM 66,32 17,12 0,00 83,44
32 Jordi Pástor CIPFP Batoi 1 DAW 49,48 17,12 0,00 66,60
33 Pablo Conejero IES Estació 1 TSMR 49,33 4,75 0,00 54,08
34 Daniel Ojeda CIPFP Batoi 1 DAW 40,83 7,46 0,00 48,29
35 Rubén Martínez Florida 1 DAM 33,90 0,00 0,00 33,90

Enhorabuena a todos los participantes. En especial a los que habéis quedado entre los cuatro primeros porque la clasificación ha estado muy reñida. Como ya sabéis, los cuatro primeros tendréis un reconocimiento especial en el acto de clausura del curso. Además, para premiar el esfuerzo realizado, repartiremos una camiseta de «Finisher» a los que habéis entregado los tres retos. Ya os informaremos de las fechas por correo. Os esperamos!

Reiterar las gracias y animar a alguno que pueda sentir que se le ha puntuado por debajo, ya que esto no deja de ser un juego.

Nos vemos el año que viene en la 5ª edición!!

Ciclo ASIR + Especialista en cyberseguridad

El próximo curso 2019-2020 llegará con novedades para la titulación de Administración de Sistemas Informáticos y Redes (ASIR), la cuál contará con formación especializada en Cyberseguridad. Esta formación estará disponible tanto en modalidad presencial como semipresencial.

El ciclo de ASIR se enfoca a realizar proyectos totalmente prácticos en donde el alumnado trabaja con distintas tecnologías e infraestructuras que se podrá encontrar cuando esté en una empresa real. Esto le permitirá adquirir distintos perfiles laborales que son demandados en las empresas. Por lo que respecta a redes, ofrecemos formación orientada a certificados CISCO. En la parte de virtualización, empezamos con un nivel básico con tecnologías de Virtualbox, para avanzar a tecnologías más empresariales como VMWare. Relacionado con este aspecto, también centramos parte de los contenidos a trabajar con entornos cloud computing, tanto privados con OpenNebula, como a través de proveedores ampliamente utilizados como Amazon Web Services o Microsoft Azure. Para dar soporte a estos sistemas, también ofrecemos formación en tecnologías web como HTML o CSS, así como plataformas de comercio electrónico como Prestashop o WordPress.

En cuanto a cyberseguridad, ofrecemos tanto formación en seguridad defensiva con PFSense como firewall perimetral y tecnologías de identificación y prevención de intrusos, así como herramientas ampliamente demandadas relacionadas con cyberseguridad, como Kali Linux, OWASP, FOCA o Web for Pentester.

A continuación, puedes ver un vídeo con una descripción más en detalle junto con una entrevista a Jose García, especialista en sistemas y cyberseguridad.

[vimeo 338872054 w=640 h=480]

[vimeo 338871162 w=640 h=361]

Si quieres obtener más información o realizar preguntas concretas, puedes escribir un correo a jmalberola@florida-uni.es o bien, apuntarte al próximo Open Day que realizaremos por Internet el próximo 6 de junio o 4 de julio: https://forms.gle/Dns95XhFVhF8NSBJ7

 

3r Reto (SSC 2019). La grieta del invocador

Lol

Enunciado:

Bienvenidos seáis todos a la grieta del invocador. En esta ocasión no intentaremos destruir el nexo del equipo rival, sino que emplearemos programación en Shell Script para recoger inteligencia que nos ayudará en nuestras próximas batallas en la grieta del invocador. En este desafío, vamos calcular cuáles son las 10 parejas de personajes más frecuentemente empleadas en partidas de ranking ganadas en las últimas temporadas de League of Legends.

Ficheros de trabajo:

Para poder realizar este pequeño programa, vamos a trabajar con varios ficheros.

El fichero champions.csv contiene una pequeña base de datos de campeones de League of Legends. Más concretamente, cada línea contiene registros de campeones de League of Legends con el identificador numérico del campeón y su nombre. Por ejemplo, las primeras líneas de este fichero son:

1,Annie
2,Olaf
3,Galio
4,Twisted Fate
5,Xin Zhao

El fichero games.csv contiene estadísticas de más de 50.000 partidas de ranking de League of Legends en los últimos años. En cada partida, se enfrentan dos equipos (1 contra 2) formados por 5 componentes cada uno. En este fichero, la información también está organizada en filas y columnas. Cada fila contiene el registro de una partida de ranking de League of Legends, mientras que cada columna contiene uno de los campos de del registro que representa a la partida de League of Legends. Más concretamente, contamos con las siguientes columnas:

  • gameId: El identificador de la partida de ranking
  • creationTime: Marca de tiempo de creación de la partida
  • gameDuration: Duración en segundos de la partida
  • seasonId: Identificador de la temporada de juego
  • winner: Equipo ganador de la partida (1 si ha ganado el primer equipo, 2 si ha ganado el segundo)
  • firstBlood/Tower/Inhibitor/Baron/Dragon/RiftHerald : Equipo que realizó la primera sangre, torre, inhibido, barón, dragón, o heraldo (0: ninguno, 1: primer equipo, 2: segundo equipo)
  • t1_champXid: Identificadores de los 5 componentes del primer equipo.
  • t2_champXid: Identificadores de los 5 componentes del segundo equipo.
  • t1_champX_sumY: Identificador del Y-ésimo hechizo seleccionado por el X-ésimo componente del primer equipo.
  • t2_champX_sumY: Identificador del Y-ésimo hechizo seleccionado por el X-ésimo componente del segundo equipo.
  • t1_ELEMKills: Número de elementos destruidos por el primer equipo durante la partida, donde ELEMpuede ser tower, inhibitor, baron, dragon, riftHerald.
  • t2_ELEMKills: Número de elementos destruidos por el segundo equipo durante la partida, donde ELEMpuede ser tower, inhibitor, baron, dragon, riftHerald.
  • t1_banX: El identificador del X-ésimo personaje prohibido por el equipo 1 para la partida.
  • t2_banX: El identificador del X-ésimo personaje prohibido por el equipo 2 para la partida.

En total, cada registro tiene 61 columnas o campos, aunque evidentemente no todos serán útiles para computar la solución buscada. Parte de tu trabajo será identificar qué columnas resultan interesantes para el cálculo de la solución final.

Deberás escribir un Shell Script que genere un archivo llamado result.csv con el siguiente formato de ejemplo:

Ahri,Ashe,1502
Camille,Ezreal,892
Ekko,Dr. Mundo,777
Fizz,Caitlyn,650
Gnar,Ezreal,578
Fiora,Irelia,452
Janna,Graves,321
Jax,Jinx,245
Ashe,Corki,151
Katarina,Lee Sin,102

Se trata de un fichero de 10 filas con las 10 parejas que han coincidido más veces en equipos ganadores. En cada fila tenemos el nombre de una pareja y el número de veces que dicha pareja ha coincidido en equipos ganadores. A modo de ejemplo, la primera línea significa que Ahri y Ashe han coincidido en 1502 equipos ganadores. Es decir, en 1502 batallas, Ahri y Ashe formaban parte de los equipos que ganaron.

Como puede apreciarse, cada uno de los campos de información está separado por comas (sin separación de espacios entre ellos). Además, el fichero lista las parejas en orden descendente de uso en partidas ganadas. Por tanto, el resto de parejas que pueda haber, habrán coincidido en menos de 102 equipos ganadores. El ejemplo proporcionado es simplemente un ejemplo y por tanto no es la solución final específica del script.

Evaluación del script:

Para evaluar el script realizado se tendrán en cuenta los siguientes aspectos:

  • El fichero generado como resultado debe llamarse result.csv.
  • Que las 10 parejas identificadas en el fichero se correspondan con las 10 parejas que más hayan formado parte de equipos ganadores
  • Que el valor de cada pareja sea el correcto
  • El tiempo empleado en computar la solución

Importante:

  • Cuando termines, deberás enviar un único fichero con extensión «.sh» a través del siguiente enlace Envío de scripts.

  • No pongas tu nombre dentro del fichero, puesto que se realizará una revisión a ciegas.

2º Reto (SSC 2019)

Enunciado:

En este reto tendrás que implementar un Shell Script que permita gestionar los libros de la biblioteca del centro a través de 3 ficheros: libros.bd, usuarios.bd y prestamos.bd, los cuáles deben de tener el siguiente formato:

  • libros.bd:
    • id_libro,título,autor,genero,año,estantería,prestado
  • usuarios.bd:
    • id_usuario,nombre,apellido1,apellido2,curso,num_préstamos
  • prestamos.bd:
    • id_prestamo,id_libro,id_usuario

El Shell Script deberá ofrecer las siguientes operaciones a través de un menú:

  • Gestión de libros:
    • Alta
    • Baja (a través del id)
    • Consulta (a través del id o nombre)
  • Gestión de usuarios:
    • Alta
    • Baja (a través del id)
    • Consulta (a través del id o nombre)
  • Gestión de préstamos:
    • Alta
    • Baja (a través del id)
    • Listado
    • Consulta (a través del id de usuario o del id de libro)
  • Salir

Algunas aclaraciones:

  • Los id de cada fichero serán autoincrementados y no se repetirán.
  • Puedes separar los campos como quieras, pero en un mismo campo, puede haber espacios en blanco, por lo que no puedes utilizar el espacio en blanco como separador de campos.
  • Las consultas se podrán hacer a través de los campos arriba indicados. Por ejemplo, para libros, se ofrecerán dos opciones: buscar por id buscar por nombre.
  • El listado de préstamos devolverá todos los préstamos realizados.
  • Los libros prestados, no se podrán volver a prestar.
  • Un mismo usuario, sólo podrá tener 3 pedidos al mismo tiempo.
  • No se podrán dar de baja usuarios o libros con préstamos pendientes.
  • Cuando se borra un libro, un usuario o un préstamo, sus ids (que quedan libres) no hace falta que se vuelvan a reutilizar en un futuro.

Se valorará positivamente:

  • Que en el alta de préstamos, se muestren facilidades para elegir un libro y un usuario. Por ejemplo:

Libros:

    1. La isla del tesoro (id: 001)
    2. El Hobbit (id: 002)
    3. El Justicia (id: 003)

Elige un libro: _

  • Cualquier otro tipo de aspecto positivo que se incluya adicionalmente.

Importante:

  • Cuando termines, deberás enviar un único fichero con extensión «.sh» a través del siguiente enlace Envío de scripts.

  • No pongas tu nombre dentro del fichero, puesto que se realizará una revisión a ciegas.

1er Reto (SSC 2019)

Enunciado:

En este reto tendrás que implementar el juego de cartas «A pescar» con una baraja española de 8s y 9s y sin comodines, siguiendo las siguientes reglas y objetivos.

Reglas:

  • Las cartas se tienen que barajar.
  • Juega la máquina contra el usuario.
  • Al inicio de la partida, se repartirán 7 cartas a cada uno.
  • Las cartas sobrantes, se distribuyen en una pila que será compartida por ambos.
  • Se juega por turnos, empezando por el usuario.
  • En cada turno, un jugador solicitará una carta al otro (por ejemplo, un 4).
    • Si el jugador que recibe la petición, tiene una o más cartas de las solicitadas (en este caso, un 4 o varios), se las tiene que dar al otro jugador. En este caso, el jugador solicitante, continuará pidiendo.
    • Si el jugador que recibe la petición, no tiene ninguna carta como la que le piden, entonces tiene que mostrar el mensaje «A pescar!».  En este caso, el jugador solicitante, robará una carta de la baraja y pasará el turno al oponente.
  • Cuando un jugador consigue reunir las 4 cartas del mismo valor (los cuatro doses, los cuatro treses…), las retira del juego.

Objetivo

  • La partida termina cuando ya se han retirado las 4 cartas de todos los valores.
  • Gana la partida el jugador que más grupos de 4 cartas haya hecho.

Algunas aclaraciones:

  • Al inicio del script, deberá haber una pantalla para que el usuario pueda elegir entre comenzar una partida o salir.
  • Cuando empieza una partida, el usuario interaccionará con el juego sólo para elegir la carta que pide a la máquina en cada turno que le toque.
  • Cuando termina la partida, se muestra los grupos que ha obtenido cada participante y quién ha ganado, y se vuelve a la pantalla inicial.
  • Se valorarán aspectos añadidos, como control de errores.

Importante:

  • Cuando termines, deberás enviar un único fichero con extensión «.sh» a través del siguiente enlace Envío de scripts.

  • No pongas tu nombre dentro del fichero, puesto que se realizará una revisión a ciegas.

IV Shell Script Challenge en Florida Universitària (SSC-2019)

¿Qué es?
Shell Script Challenge es una competición destinada a alumnos de DAM, DAW, ASIR y TSMR. Durante tres fines de semana, los participantes reciben 3 retos que han de ser resueltos utilizando Shell Scripts.

¿Cómo funciona?
Durante los días que está activa la competición, los participantes recibirán retos que deberán resolver y entregar antes de la fecha límite indicada para cada reto. Dichos retos serán publicados en este mismo blog en las fechas y horas determinadas. Los retos serán los mismos para todos los participantes y al mismo tiempo sólo se dispondrá de un reto a resolver. Cuando acabe un reto se planteará y publicará otro nuevo.

Participación
La competición está abierta a alumnado de los primeros cursos de las titulaciones de DAM, DAW, ASIR y TSMR de Florida Universitària y de otros centros. La participación es gratuita y sólo será necesario registrarse a través del siguiente Formulario de registro. La inscripción estará abierta hasta el 27 de marzo o hasta cubrir el límite de registros, momento en que se cerrará.

Fechas y desarrollo de los retos:
1er Reto: Del 29 de marzo (23:00h) al 1 de abril (23:00h)
2º Reto: Del 5 de abril (23:00h) al 8 de abril (23:00h)
3º Reto: Del 12 de abril (23:00h) al 15 de abril (23:00h)

Entrega y valoración
Los participantes deberán enviar un único fichero con extensión .sh con cada reto resuelto a través del enlace que se proporcionará en cada reto.

Los retos serán valorados por un comité formado por profesorado de titulaciones TIC que puntuarán cada solución aportada según criterios como: corrección, estilo, identidad propia, rendimiento, u orden de entrega, entre otros. Al acabar la competición se publicará el ranking de los participantes según las puntuaciones obtenidas.

Premios
Los tres primeros clasificados recibirán un premio, diploma y reconocimiento público en el acto de clausura y entrega de notas de final de curso. El resto de participantes que terminen los tres retos, recibirán un obsequio.

Contacto
Juan Miguel Alberola (jmalberola@florida-uni.es)