연습문제 11-5
한 단어를 회전해서 다른 단어를 만들 수 있다면 “회전 쌍(rotate pairs)”이라고 한다(연습문제 8-5의 rotate_word를 참조).
단어 목록을 읽어서 모든 회전 쌍을 찾는 프로그램을 작성하라.
해법: http://thinkpython2.com/code/rotate_pairs.py
연습문제 11-6
다음은 카 토크에서 가져온 퍼즐이다(http://www.cartalk.com/content/puzzlers)
이 문제는 청취자 댄 올리가 보내왔습니다. 그는 최근에 공통된 한 음절, 다섯 글자 단어이면서 다음과 같은 고유 속성을 갖는 단어를 우연히 발견했습니다. 첫 번째 글자를 지우면 남은 글자들로 원래 단어와 동음이의어가 됩니다. 그러니까 정확하게 같은 소리를 내는 단어가 됩니다. 첫 번째 글자를 남기고 두 번째 글자를 지우면 이것 역시 원래 단어의 동음이의어가 됩니다. 여기서 문제입니다. 이 단어는 무엇일까요?
이제 이를 만족하지 않는 예를 하나 제공하겠습니다. 다섯 글자 단어‘wrack’을 살펴봅시다. W-R-A-C-K는 ‘wrack with pain(통증으로 고통받다)’처럼 쓰입니다. 첫 글자를 지우면 네 글자 ‘R-A-C-K’가 남습니다. 이 단어는 완벽한 동음이의어입니다. 이제 ‘w’를 남기고 ‘r’을 제거하면 남은 단어는 ‘wack’이며, 실제로 있는 단어입니다. 단지, 나머지 두 단어와 동음이의어가 아닐 뿐입니다.
그러나 이제 댄과 우리는 적어도 단어 하나는 알고 있습니다. 처음 두 문자 중에 하나를 지우면 4글자 단어 두 개를 만들 수 있고, 두 개의 동음이의어가 되는 단어죠. 문제입니다. 이 단어는 무엇입니까?
연습문제 11-1의 사전을 사용해 단어 목록에 문자열이 있는지 확인할 수 있다.
두 단어가 동음이의어인지 확인하기 위해 CMU 발음 사전을 사용할 수 있다. 발음 사전은 http://www.speech.cs.cmu.edu/cgi-bin/cmudict에서 받을 수 있고, 발음 사전을 읽어서 각 단어와 발음을 매핑한 파이썬 사전을 반환하는 read_dictionary 함수 http://thinkpython2.com/code/pronounce.py에서 받을 수 있다.