누군가에게는 거슬리는 낱말이 많고, 그런 낱말이 어디에 끼어 있든 자동으로 지워 버리기는 어렵지 않다. 거슬리는 낱말은 보통 네 글자 낱말이라고 부른다. 실제로 네 글자인 경우가 많아서 그렇게 부르지만, 이 프로그램은 그것이 낱말 하나인지 더 긴 낱말의 일부인지 가리지 않고 연속한 네 글자를 모두 살펴본다.
어떤 낱말이 거슬리는지는 듣는 사람에 따라 다르다. work라는 낱말만 봐도 마음이 불편해지는 사람이 있다. 그래서 걸러낼 낱말 목록은 정해 두지 않고 입력으로 받는다. 목록에 오르는 낱말은 그대로 적기에도 너무 거슬리므로, 첫 글자와 마지막 글자만으로 적는다.
예를 들어 목록에 ct가 있으면 cantered는 c**tered가 된다. cant가 c로 시작해서 t로 끝나는 연속한 네 글자이기 때문이다.
입력의 앞부분은 걸러낼 낱말 목록이다. 한 줄에 낱말 하나가 들어 있고, 각 낱말은 소문자 두 개, 곧 그 낱말의 첫 글자와 마지막 글자로만 적혀 있다. 목록에 든 낱말은 20개를 넘지 않으며, 목록은 # 두 개로 이루어진 줄에서 끝난다.
그다음부터는 걸러낼 문단이 이어진다. 문단의 각 줄은 60자를 넘지 않고, 한 낱말이 줄바꿈을 사이에 두고 갈라지는 일은 없다. 문단은 # 하나만 있는 줄에서 끝난다.
걸러낸 문단을 출력한다. 끝을 알리는 # 줄은 문단에 들어가지 않는다.
각 줄을 따로 왼쪽에서 오른쪽으로 훑으면서 걸러낸다. 위치 i에서 시작하는 네 문자를 본다. 네 문자가 모두 영문자(A부터 Z, a부터 z. 공백도 문장 부호도 그 밖의 어떤 문자도 아니다)이고 첫 번째 문자 뒤에 네 번째 문자를 붙인 것이 목록에 있는 낱말이면, 가운데 두 문자를 **로 바꾸고 위치 i+4에서 검사를 이어간다. 그렇지 않으면 위치 i+1로 넘어간다. 가운데 두 문자는 대문자여도 되고 소문자여도 된다.
대소문자를 구분해서 맞추므로 대문자는 목록의 소문자와 절대 맞지 않는다. 나머지 문자는 탭과 줄바꿈을 포함해 값과 자리를 그대로 둔다.