Annuncio sul palco


Storia

Sei un araldo di palco a una conferenza internazionale. Il tuo compito è annunciare i relatori, avvisarli quando è scaduto il loro tempo e moderare la sessione di domande e risposte. Ricevi in anticipo un elenco dei relatori sul tuo palco e devi trasformarli in schede di moderazione.

Dato che l'elenco segue una formattazione particolare, decidi di scrivere un breve programma che analizzi l'elenco ricevuto usando le espressioni regolari (regex) e generi automaticamente le schede di moderazione.

Note

Questo esercizio non riguarda l'imparare le espressioni regolari. Riguarda l'imparare a usare le regex in $lang. I suggerimenti contengono un'espressione regolare che puoi usare se non vuoi scriverne una tu.

L'elenco che ricevi contiene le seguenti informazioni per ogni intervento:

  • il suo titolo,
  • il nome del relatore,
  • i suoi pronomi (facoltativi),
  • la sua organizzazione (facoltativa),
  • l'ora di inizio dell'intervento,
  • l'inizio della sessione di domande e risposte (facoltativo),
  • e l'ora di fine dell'intervento.

Una voce completa ha il seguente formato:

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

Qui il titolo è Speedrunning 101, il relatore si chiama Sasha Duda Krall, viene da GDQU e usa i pronomi they/them. L'intervento inizia alle 13:00, alle 13:20 inizierà la sessione di domande e risposte e l'intera sessione finisce alle 13:30.

Note

Dato che i nomi possono contenere trattini normali -, per separare il relatore dal nome dell'intervento si usa un trattino en –.

La scheda di moderazione che il tuo programma dovrebbe generare per quell'intervento è questa:

- 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

L'elenco completo potrebbe essere così:

»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

Le schede corrispondenti sono:

- 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

Alcune cose da notare:

  • Se per un relatore non è indicata alcuna organizzazione, lasciala fuori dalla scheda di moderazione.
  • Se non è indicato un orario per la sessione di domande e risposte, il relatore ha scelto di non rispondere alle domande.
  • Se il relatore non specifica i pronomi, usa invece il suo nome. Nota che non è sempre appropriato abbreviare il nome di qualcuno in questo modo; per esempio, molti nomi cinesi si abbreviano meglio mantenendo il cognome. Tuttavia, la regola di abbreviare al nome funziona bene per tutti coloro che parlano su questo palco.

Compiti

1. Scrivi una regex che catturi le informazioni necessarie per generare le schede

Per farlo, è più semplice usare uno strumento per costruire regex come regex101 o RegExr.

!!! warning Assicurati di impostare il motore/la variante delle regex su $CHANGE_ME.

Se sei alle prime armi con le regex o fai fatica a creare un'espressione che catturi tutte le informazioni richieste in una volta sola, puoi anche definire diverse espressioni più piccole che catturano parti delle informazioni.

2. Scrivi una funzione che prende una riga e restituisce la scheda di moderazione generata

Usa l'espressione della prima parte e implementa una funzione che prende in input una riga, ne cattura le informazioni e restituisce la scheda di moderazione generata secondo le specifiche precedenti.

Casi di test

I potenziali casi di test futuri dovrebbero rispettare le seguenti linee guida:

  • I delimitatori devono essere non ambigui. Per esempio, il titolo di un intervento non dovrebbe contenere »« e un nome non dovrebbe contenere virgole.
  • I casi di test dovrebbero essere ordinati in base all'opzionalità di certe informazioni. Il primo caso dovrebbe contenere tutte le informazioni possibili, il caso successivo dovrebbe escludere un'informazione catturabile, e così via.
  • Le soluzioni che usano [a-zA-Z] o simili per il nome, il titolo o l'organizzazione non dovrebbero riuscire a superare i test.

Implementazioni

  • Julia (implementazione di riferimento)