Anúncio de palco


História

És arauto de palco numa conferência internacional. A tua tarefa é anunciar os oradores, avisá-los quando o tempo acaba e moderar a sessão de perguntas e respostas. Recebes com antecedência uma lista dos oradores do teu palco e tens de a transformar em cartões de moderação.

Como a lista segue um formato específico, decides escrever um pequeno programa que analisa a lista que recebes com expressões regulares (regex) e gera automaticamente os cartões de moderação.

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 podes usar se não quiseres escrever uma tu.

A lista que recebes contém a seguinte informação sobre cada palestra:

  • o título,
  • o nome do orador,
  • os pronomes (opcional),
  • a organização (opcional),
  • a hora de início da palestra,
  • o início da sessão de perguntas e respostas (opcional),
  • e a hora de fim 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, o orador chama-se Sasha Duda Krall, é de GDQU e usa os pronomes they/them. A palestra começa às 13:00, há uma sessão de perguntas e respostas que começa às 13:20, e a sessão completa termina às 13:30.

Note

Como os nomes podem conter hífenes -, usa-se uma meia-risca – para separar o nome do orador do nome da palestra.

O cartão de moderação que o teu programa deve gerar para essa palestra tem este aspeto:

- 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 completa pode ter este aspeto:

»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 ter em conta:

  • Se não for indicada nenhuma organização para um orador, deixa-a de fora no cartão de moderação.
  • Se não for indicada nenhuma hora para a sessão de perguntas e respostas, o orador optou por não responder a perguntas.
  • Se o orador não especificar pronomes, usa antes o primeiro nome do orador. Repara que nem sempre é apropriado abreviar o nome de alguém assim; por exemplo, muitos nomes chineses ficam melhor abreviados mantendo o apelido. No entanto, a regra de abreviar para o primeiro nome acaba por funcionar bem para todos os que falam neste palco.

Tarefas

1. Escreve uma regex que capture a informação de que precisas para gerar os cartões

O mais fácil é usar uma ferramenta de construção de regex como regex101 ou RegExr.

!!! warning Certifica-te de que defines o motor/variante de regex como $CHANGE_ME.

Se és novo em regex ou tens dificuldade em criar uma expressão que capture toda a informação necessária de uma só vez, também podes definir várias expressões mais pequenas que capturam partes da informação.

2. Escreve uma função que recebe uma linha e devolve o cartão de moderação gerado

Usa a expressão da primeira parte e implementa uma função que recebe uma linha como entrada, captura a informação dela e devolve o cartão de moderação gerado de acordo com a especificação acima.

Casos de teste

Os potenciais casos de teste futuros devem seguir as seguintes orientações:

  • Os delimitadores têm de 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 certa informação. O primeiro caso deve conter toda a informação possível, o caso seguinte deve excluir uma peça de informação que pode ser capturada, e assim sucessivamente.
  • As soluções que usem [a-zA-Z] ou semelhantes para o nome, o título ou a organização não devem conseguir passar nos testes.

Implementações

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