ステージの告知


ストーリー

国際会議のステージで案内役を務めています。 登壇者を紹介し、時間が来たら知らせ、質疑応答セッションを取り仕切るのが仕事です。 担当ステージの登壇者リストは事前に渡されていて、それをモデレーションカードに仕上げる必要があります。

リストは決まった書式に従っているので、正規表現(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

名前に通常のダッシュ-が含まれることがあるため、登壇者名とトーク名の区切りにはenダッシュ–を使います。

このトークに対してプログラムが生成すべきモデレーションカードは、次のようになります。

- 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. 1行を受け取って、生成したモデレーションカードを返す関数を書く

最初のパートで作った式を使い、1行を入力として受け取り、そこから情報を取り出して、上の仕様に従ったモデレーションカードを返す関数を実装してください。

テストケース

将来追加される可能性のあるテストケースは、次のガイドラインに従う必要があります。

  • 区切り文字は曖昧さのないものでなければなりません。たとえば、トークのタイトルに»«を含めない、名前にカンマを含めない、といったことです。
  • テストケースは、情報が任意かどうかに基づいて並べるべきです。最初のケースには考えられるすべての情報を含め、次のケースでは取り出せる情報を1つ省く、といった具合です。
  • 名前、タイトル、所属に対して[a-zA-Z]のようなものを使っている解答は、テストに通らないようにすべきです。

実装

  • Julia(リファレンス実装)