Оголошення на сцені


Історія

Уявімо себе сценічним глашатаєм на міжнародній конференції. Наше завдання - оголошувати спікерів, нагадувати їм, коли час вичерпано, і модерувати сесію запитань і відповідей. Заздалегідь ми отримуємо список спікерів на своїй сцені й маємо перетворити його на картки модерації.

Оскільки список має особливий формат, ми вирішуємо написати коротку програму, яка розбирає отриманий список за допомогою регулярних виразів (regex) і автоматично створює картки модерації.

Note

Ця вправа не про вивчення регулярних виразів. Вона про те, як використовувати регулярні вирази в $lang. Підказки містять регулярний вираз, який можна використати, якщо не хочеться писати власний.

Список, який ми отримуємо, містить для кожної доповіді таку інформацію:

  • її назву,
  • імʼя спікера,
  • займенники спікера (необовʼязково),
  • організацію (необовʼязково),
  • час початку доповіді,
  • час початку сесії запитань і відповідей (необовʼязково),
  • і час закінчення доповіді.

Повний запис має такий вигляд:

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

Тут назва - Speedrunning 101, імʼя спікера - Sasha Duda Krall, він із GDQU і використовує займенники they/them. Доповідь починається о 13:00, о 13:20 розпочнеться сесія запитань і відповідей, а завершиться все о 13:30.

Note

Оскільки імена можуть містити звичайні дефіси -, для розділення імені спікера й назви доповіді використовують середнє тире –.

Картка модерації, яку наша програма має створити для цієї доповіді, має такий вигляд:

- 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

Увесь список може мати такий вигляд:

»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

Відповідні картки мають такий вигляд:

- 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

Кілька зауваг:

  • Якщо для спікера не вказано організацію, не додавайте її до картки модерації.
  • Якщо час сесії запитань і відповідей не вказано, спікер вирішив не відповідати на запитання.
  • Якщо спікер не вказав займенників, використайте натомість його імʼя. Зауважмо, що не завжди доречно скорочувати чиєсь імʼя в такий спосіб: наприклад, багато китайських імен краще скорочувати, залишаючи прізвище. Утім, правило «скорочувати до імені» цілком працює для всіх, хто виступає на цій сцені.

Завдання

1. Напишіть регулярний вираз, який захоплює інформацію, потрібну для створення карток

Найпростіше зробити це за допомогою інструмента для побудови регулярних виразів, як-от regex101 чи RegExr.

!!! warning Обовʼязково встановіть рушій/діалект регулярних виразів на $CHANGE_ME.

Якщо регулярні вирази для нас нові або складно створити один вираз, який одразу захоплює всю потрібну інформацію, можна визначити кілька менших виразів, кожен з яких захоплює частину інформації.

2. Напишіть функцію, яка приймає рядок і повертає створену картку модерації

Використайте вираз із першої частини та реалізуйте функцію, яка приймає рядок на вхід, захоплює з нього інформацію і повертає створену картку модерації згідно з наведеною вище специфікацією.

Тестові випадки

Майбутні тестові випадки мають відповідати таким настановам:

  • Роздільники мають бути однозначними. Наприклад, назва доповіді не повинна містити »«, а імʼя не повинно містити ком.
  • Тестові випадки слід упорядковувати за необовʼязковістю певної інформації. Перший випадок має містити всю потенційну інформацію, наступний має виключати одну частину інформації, яку можна захопити, і так далі.
  • Рішення, які використовують [a-zA-Z] чи щось подібне для імені, назви чи організації, не повинні проходити тести.

Реалізації

  • Julia (еталонна реалізація)