Perl Quiz-of-the-Week #7

Mark Jason Dominus <[email protected]> Wed, 11 Dec 2002 13:25:02 -0500
Newsgroups gmane.comp.lang.perl.qotw.quiz-of-the-week
Organization Plover Systems
Message-ID <[email protected]>

IMPORTANT: Please do not post solutions, hints, or other spoilers
        until at least 60 hours after the date of this message.
        Thanks.

IMPORTANTE: Por favor, no enviéis soluciones, pistas, o cualquier otra
        cosa que pueda echar a perder la resolución del problema hasta
        que hayan pasado por lo menos 60 horas desde el envío de este
        mensaje. Gracias.

IMPORTANT: S'il vous plaît, attendez au minimum 60 heures après la
        date de ce message avant de poster solutions, indices ou autres
        révélations. Merci.

WICHTIG: Bitte schicken Sie keine Lösungen, Tipps oder Hinweise für
        diese Aufgabe vor Ablauf von 60 Stunden nach dem Datum dieser
        Mail. Danke.

BELANGRIJK: Stuur aub geen oplossingen, hints of andere tips in de
        eerste 60 uur na het verzendingstijdstip van dit
        bericht. Waarvoor dank.

VNIMANIE: Pozhalujsta ne shlite reshenija, nameki na reshenija, i
        voobshe lyubye podskazki v techenie po krajnej mere 60 chasov
        ot daty etogo soobshenija.  Spasibo.

Qing3 Zhu4Yi4: Qing3 Ning2 Deng3Dao4 Jie1Dao4 Ben3 Xin4Xi2 Zhi1Hou4 60
        Xiao3Shi2, Zai4 Fa1Biao3 Jie3Da2, Ti2Shi4, Huo4 Qi2Ta1 Hui4
        Xie4Lou4 Da2An4 De5 Jian4Yi4.  Xie4Xie4.

----------------------------------------------------------------

Bill Gosper, a famous programmer, once said that a good way to
manufacture word puzzles was to look through the dictionary for a word
that contains a sequence of four letters that does not appear in any
other word.  Then the puzzle is to guess the word, given only the four
letters.

For example, what common English word contains the contiguous sequence
of the four letters 'acur'?  (Gosper says that you see this word every
week, but that it will take you a month to figure out what it is.)

Write a Perl program which, given a dictionary, generates two output
files, 'questions' and 'answers'.  'questions' should contain every
sequence of four letters that appears in exactly one word of the
dictionary, one sequence per line.  'answers' should contain the
corresponding words that contain the sequences, in the same order,
again one per line.  The input dictionary will contain one word per
line.

For example, given the trivial dictionary containing only

        arrows
        carrots
        give
        me

The outputs should be:

        'questions'             'answers'

        carr                    carrots
        give                    give
        rots                    carrots
        rows                    arrows
        rrot                    carrots
        rrow                    arrows

Of course, 'arro' does not appear in the output, since it is found in
more than one word.

If you need a sample word list, you can find one at

        http://perl.plover.com/qotw/words/

I would be interested to learn whether this game works in languages
other than English.