무대 알림


스토리

국제 컨퍼런스에서 무대 사회자를 맡고 있어요. 연사를 소개하고, 시간이 다 되면 알려 주고, 질문과 답변 세션을 진행하는 게 여러분의 일이에요. 무대에 오를 연사 목록을 미리 받았고, 이 목록을 사회 카드로 만들어야 해요.

목록이 정해진 형식을 따르고 있어서, 받은 목록을 정규 표현식(정규식)으로 파싱해서 사회 카드를 자동으로 만들어 주는 간단한 프로그램을 짜기로 했어요.

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] 같은 걸 사용하는 풀이는 테스트를 통과할 수 없어야 해요.

구현