증인 보호 프로그램은 범죄의 증인에게 새로운 신원을 부여하여, 법정에서 불리한 증언을 한 상대의 보복으로부터 이들을 보호한다.
그러나 실제로는 보호받는 증인 다수가 스스로에게 가장 큰 위험이 된다. 친척이나 친구에게 자신이 무사하다는 것을 알리려다 새 거주지와 신원을 노출하기 때문이다.
새 시범 사업에서는 이러한 연락을 이메일 형태로만 허용한다. 담당 직원이 먼저 각 메시지를 검토하여 위험할 수 있는 문장을 잘라낸 뒤, 부서 컴퓨터에서 이메일을 대신 보내 증인을 추적할 수 없게 한다.
그러나 예산이 삭감되어 모든 메시지를 사람이 직접 읽을 여력이 없다. 따라서 자동화된 해결책이 필요하다.
민감한 단어 목록과 평문 메시지가 주어질 때, 민감한 단어를 포함하는 문장을 (대소문자 구분 없이) 모두 찾는 프로그램을 작성하라. 그러한 문장에서는 줄 종결 문자를 제외한 모든 문자를 @ 문자로 바꾼다.
이 문제에서:
., ?, ! 중 하나. 문장을 끝내는 구두점 문자는 그 문장에 포함된다.입력은 하나 이상의 데이터 집합으로 이루어진다. 각 데이터 집합은 단어 목록과 그 뒤의 메시지로 구성된다. 입력의 끝은 EndOfInput만 적힌 줄로 표시된다.
단어 목록은 0개 이상의 단어로 이루어지며, 한 줄에 하나씩 왼쪽 정렬로 주어진다. 각 단어의 길이는 최대 40자이다. 단어 목록의 끝은 EndOfList만 적힌 줄로 표시된다.
단어 목록 바로 뒤에 메시지가 온다. 메시지는 0개 이상의 텍스트 줄로 이루어지며, 각 줄은 최대 80자이다. 메시지의 끝은 EndOfMsg만 적힌 줄로 표시된다.
각 데이터 집합에 대해, 민감한 단어를 포함하는 문장을 위에서 설명한 대로 @ 문자로 바꾸는 것을 제외하고는 입력에 나타난 그대로 메시지를 출력한다. 각 메시지 뒤에는 = 문자 4개만으로 이루어진 줄(====)을 출력한다.