철자 추천(spelling suggestion)은 철자 교정 프로그램의 한 부분으로, 잘못 입력했을 가능성이 큰 단어에 대해 그럴듯한 대체 단어를 제안한다. 대체 단어가 얼마나 적절한지는 잘못된 단어와의 편집 거리(edit distance)로 평가할 수 있다. 편집 거리는 한 단어를 다른 단어로 바꾸는 데 필요한 편집 연산들의 총 비용이다.
허용되는 편집 연산과 그 비용은 다음과 같다.
예를 들어 wonder에서 o를 삭제하면 wnder, o를 a로 치환하면 wander, er를 전치하면 wondre가 된다.
두 단어 사이의 최소 편집 거리는 가능한 모든 연산 순서 중 가장 작은 총 비용이다. 입력 단어와의 최소 편집 거리가 더 작은 사전 단어일수록 더 좋은 철자 추천이다.
어떤 문자 쌍이 서로 가까운지는 (영문 QWERTY 자판을 기준으로 한) 근접 치환 규칙 집합으로 주어진다. 근접 치환은 대칭이다. 즉, 문자 y가 문자 x의 근접 치환 대상으로 주어지면, x를 y로 바꾸는 것과 y를 x로 바꾸는 것 모두 비용이 1이다.
각 입력 단어에 대해, 그 단어와의 최소 편집 거리가 가장 작은 사전 단어(들)를 구하라.
입력은 표준 입력으로 주어지며 세 부분으로 이루어진다. 각 부분은 빈 줄로 끝나므로, 세 번째 부분 뒤의 빈 줄이 입력의 끝을 나타낸다.
첫 번째 부분 — 근접 치환 규칙 (최대 150줄). 각 줄은 공백 하나로 구분된 두 필드로 이루어진다.
근접 치환은 대칭이다. 이 부분에 등장할 수 있는 문자는 일반적인 영문 자판으로 입력할 수 있는 영숫자와 일부 문장 부호이다(공백과 탭 제외).
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`~!@#$%^&*()-_=+\|[{]};:',<.>/?
두 번째 부분 — 사전 (최대 150,000개 단어). 한 줄에 한 단어씩 주어진다. 사전 단어는 아래 영문자와 아포스트로피(')로 이루어진다.
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
세 번째 부분 — 검사할 단어 (최대 5,000개 단어). 한 줄에 한 단어씩 주어지며, 첫 번째 부분과 같은 문자 집합을 사용한다.
세 번째 부분의 각 단어에 대해, 콜론(:)으로 구분된 세 필드를 한 줄에 출력한다.
정렬은 문자 코드(바이트/ASCII) 순서를 따른다. 따라서 숫자가 대문자보다, 대문자가 소문자보다 앞선다.