Anúncio de palco


História

Você é um arauto do palco em uma conferência internacional. Seu trabalho é anunciar os palestrantes, lembrar cada um quando o tempo acabar e moderar a sessão de perguntas e respostas. Você recebe com antecedência uma lista de palestrantes do seu palco e precisa transformá-los em cartões de moderação.

Como a lista segue uma formatação específica, você decide escrever um pequeno programa que analisa a lista fornecida usando expressões regulares (regex) e gera os cartões de moderação automaticamente.

Note

Este exercício não é sobre aprender expressões regulares. É sobre aprender a usar regex em $lang. As dicas contêm uma expressão regular que você pode usar se não quiser escrever uma por conta própria.

A lista que você recebe contém as seguintes informações para cada palestra:

  • o título,
  • o nome de quem fala,
  • os pronomes (opcional),
  • a organização (opcional),
  • o horário de início da palestra,
  • o início da sessão de perguntas e respostas (opcional),
  • e o horário de término da palestra.

Uma entrada completa tem o seguinte formato:

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

Aqui, o título é Speedrunning 101, quem fala se chama Sasha Duda Krall, vem de GDQU e usa os pronomes they/them. A palestra começa às 13:00, haverá uma sessão de perguntas e respostas a partir das 13:20, e a sessão inteira termina às 13:30.

Note

Como nomes podem conter hífens comuns -, uma meia-risca – é usada para separar o nome de quem fala do nome da palestra.

O cartão de moderação que seu programa deve gerar para essa palestra é assim:

- 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

A lista inteira pode ser assim:

»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

Os cartões correspondentes são:

- 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

Alguns pontos a observar:

  • Se nenhuma organização for informada para quem fala, omita-a no cartão de moderação.
  • Se nenhum horário para a sessão de perguntas e respostas for informado, a pessoa que fala optou por não responder perguntas.
  • Se quem fala não especificar pronomes, use o primeiro nome dela em vez disso. Observe que nem sempre é apropriado abreviar o nome de alguém assim; por exemplo, muitos nomes chineses são melhor abreviados mantendo o sobrenome. No entanto, a regra de abreviar para o primeiro nome funciona bem para todas as pessoas que falam neste palco.

Tarefas

1. Escreva uma regex que capture as informações necessárias para gerar os cartões

É mais fácil usar uma ferramenta de criação de regex como regex101 ou RegExr para fazer isso.

!!! warning Certifique-se de definir o mecanismo/dialeto de regex como $CHANGE_ME.

Se você é novo em regex ou tem dificuldade para criar uma expressão que capture todas as informações necessárias de uma vez, também pode definir várias expressões menores que capturem partes das informações.

2. Escreva uma função que recebe uma linha e retorna o cartão de moderação gerado

Use a expressão da primeira parte e implemente uma função que recebe uma linha como entrada, captura as informações dela e retorna o cartão de moderação gerado de acordo com a especificação acima.

Casos de teste

Possíveis casos de teste futuros devem seguir as seguintes diretrizes:

  • Os delimitadores devem ser inequívocos. Por exemplo, o título de uma palestra não deve conter »«, e um nome não deve conter vírgulas.
  • Os casos de teste devem ser ordenados com base na opcionalidade de certas informações. O primeiro caso deve conter todas as informações possíveis, o próximo caso deve excluir uma informação capturável, etc.
  • Soluções que usam [a-zA-Z] ou similares para o nome, título ou organização não devem conseguir passar nos testes.

Implementações

  • Julia (implementação de referência)