Anuncio desde el escenario


Historia

Eres un heraldo del escenario en una conferencia internacional. Tu trabajo consiste en anunciar a los ponentes, avisarles cuando se les acaba el tiempo y moderar la sesión de preguntas y respuestas. Recibes de antemano una lista con los ponentes de tu escenario y tienes que convertirla en tarjetas de moderación.

Como la lista sigue un formato concreto, decides escribir un pequeño programa que analice la lista que recibes con expresiones regulares (regex) y genere las tarjetas de moderación automáticamente.

Note

Este ejercicio no trata de aprender expresiones regulares. Trata de aprender a usar regex en $lang. Las pistas contienen una expresión regular que puedes usar si no quieres escribir una tú mismo.

La lista que recibes contiene la siguiente información sobre cada charla:

  • su título,
  • el nombre del ponente,
  • sus pronombres (opcional),
  • su organización (opcional),
  • la hora de inicio de la charla,
  • el inicio de la sesión de preguntas y respuestas (opcional),
  • y la hora de fin de la charla.

Una entrada completa tiene el siguiente formato:

»Speedrunning 101« – Sasha Duda Krall (they/them), from GDQU. Start: 13:00, Q&A: 13:20, End: 13:30

Aquí, el título es Speedrunning 101, el ponente se llama Sasha Duda Krall, es de GDQU y usa los pronombres they/them. La charla empieza a las 13:00, habrá una sesión de preguntas y respuestas que comienza a las 13:20 y la sesión completa termina a las 13:30.

Note

Como los nombres pueden contener guiones normales -, se usa un guion medio – para separar el nombre del ponente y el título de la charla.

La tarjeta de moderación que tu programa debería generar para esa charla tiene este aspecto:

- Our next speaker is Sasha Duda Krall, from GDQU
- Their talk is called »Speedrunning 101«
- They will answer your questions in the Q&A session at the end of the talk, starting at 13:20

13:00 - 13:20 - 13:30

La lista completa podría tener este aspecto:

»Speedrunning 101« – Sasha Duda Krall (they/them), from GDQU. Start: 13:00, Q&A: 13:20, End: 13:30
»How I learned to say Farewell« – Madeline (she/her). Start: 13:40, Q&A: 14:00, End: 14:05
»How To Find a Good Title For Your Conference Talk« – Vítězslav Kruse (he/him). Start: 14:15, End: 14:40
»Why Emoji Matter❣« – Ash van Amelsvoort, from the University of 🧬🧪⚛. Start: 14:50, Q&A: 15:05, End: 15:10
»Can dogs look up?« – Kira "k1ralli" Sørensen. Start: 20:50, Q&A: 21:05, End: 21:10

Las tarjetas correspondientes son:

- Our next speaker is Madeline
- Her talk is called »How I learned to say Farewell«
- She will answer your questions in the Q&A session at the end of the talk, starting at 14:00

13:40 - 14:00 - 14:05
- Our next speaker is Vítězslav Kruse
- His talk is called »How To Find a Good Title For Your Conference Talk«
- There will not be a Q&A session

14:15 - NO Q&A - 14:40
- Our next speaker is Ash van Amelsvoort, from the University of 🧬🧪⚛
- Ash's talk is called »Why Emoji Matter❣«
- Ash will answer your questions in the Q&A session at the end of the talk, starting at 15:05

14:50 - 15:05 - 15:10
- Our next speaker is Kira "k1ralli" Sørensen
- Kira's talk is called »Can dogs look up?«
- Kira will answer your questions in the Q&A session at the end of the talk, starting at 21:05

20:50 - 21:05 - 21:10

Algunas cosas que conviene tener en cuenta:

  • Si no se indica la organización de un ponente, omítela en la tarjeta de moderación.
  • Si no se indica la hora de la sesión de preguntas y respuestas, el ponente ha preferido no responder preguntas.
  • Si el ponente no especifica sus pronombres, usa su nombre de pila en su lugar. Ten en cuenta que no siempre es apropiado abreviar el nombre de alguien así; por ejemplo, muchos nombres chinos se abrevian mejor conservando el apellido. Sin embargo, la regla de abreviar usando el nombre de pila funciona bien para todas las personas que hablan en este escenario.

Tareas

1. Escribe una regex que capture la información que necesitas para generar las tarjetas

Lo más fácil es usar una herramienta para construir expresiones regulares como regex101 o RegExr.

!!! warning Asegúrate de configurar el motor o la variante de regex a $CHANGE_ME.

Si eres nuevo en las regex o te cuesta crear una expresión que capture toda la información necesaria de una vez, también puedes definir varias expresiones más pequeñas que capturen partes de la información-

2. Escribe una función que reciba una línea y devuelva la tarjeta de moderación generada

Usa la expresión de la primera parte e implementa una función que reciba una línea como entrada, capture la información que contiene y devuelva la tarjeta de moderación generada según las indicaciones anteriores.

Casos de prueba

Los posibles casos de prueba futuros deberían seguir estas pautas:

  • Los delimitadores no deben ser ambiguos. Por ejemplo, el título de una charla no debe contener »« y un nombre no debe contener comas.
  • Los casos de prueba deben ordenarse en función de si cierta información es opcional. El primer caso debe contener toda la información posible, el siguiente debe excluir un dato capturable, y así sucesivamente.
  • Las soluciones que usen [a-zA-Z] o similares para el nombre, el título o la organización no deben poder superar los tests.

Implementaciones

  • Julia (implementación de referencia)