PROG0476 - Semordnilap

no tags 

Palindromes are words, numbers or phrases that read the same from left to right and from right to left. Examples of palindromic words in English are eye, gig, kayak, reviver, level, rotator and redivider. The term semordnilap (palindromes spelled from right to left) is used for words that deliver a different word when spelled from right to left. According to the linguist Dmitri A. Borgmann the term was introduced by Martin Gardner in Oddities and Curiosities of Words and Literature.

Assignment

  • Write a function dictionary to which the name of a text file must be passed. This text file contains a series of words, each on a separate line. The function must return a set of all words in the specified file. Any white space at the front and end of each line should be removed, and all the capital letters in the words must be converted to their corresponding lowercase letter.
  • Write a function semordnilap to which two arguments should be passed: a word and a set of words. With the words in the given collection all capital letters should be converted to their corresponding lowercase letter. The function must return a Boolean value that indicates whether the given word is a semordnilap or not. A word is only considered a semordnilap if the following conditions are met:
    • the word is found in the given set of words
    • the inverted word (word read from right to left) is found in the given set of words
    • the word is not a palindrome
When determining whether a given word occurs in the given set of words, no distinction should be made between uppercase and lowercase letters.

Example

In the following example session we assume that the file words.txt is in the current directory.

>>> words = dictionary('words.txt')

>>> len(words)
321115

>>> semordnilap('dream', words)
True
>>> semordnilap('rule', words)
True
>>> semordnilap('fever', words)
True
>>> semordnilap('rocks', words)
True
>>> semordnilap('lever', words)
False

Palindromen zijn woorden, getallen of zinnen die hetzelfde lezen van links naar rechts als van rechts naar links. Voorbeelden van palindromische woorden in het Nederlands zijn kok, pap, lepel, droomoord, meetsysteem, legovogel en parterretrap. De term nemordnilap (palindromen maar dan gespeld van rechts naar links) wordt gebruikt voor woorden die een verschillend woord opleveren als ze van rechts naar links gespeld worden. Volgens taalkundige Dmitri A. Borgmann werd deze term geïnitieerd door Martin Gardner in Oddities and Curiosities of Words and Literature.

Opgave

  • Schrijf een functie woordenboek waaraan de naam van een tekstbestand moet doorgegeven worden. Dit tekstbestand bevat een reeks woorden, elk op een afzonderlijke regel. De functie moet een verzameling van alle woorden in het opgegeven bestand teruggeven. Hierbij moet eventuele witruimte vooraan en achteraan elke regel verwijderd worden, en moeten alle hoofdletters in de woorden omgezet worden naar hun corresponderende kleine letter.
  • Schrijf een functie nemordnilap waaraan twee argumenten moeten doorgegeven worden: een woord en een verzameling van woorden. Bij de woorden in de gegeven verzameling moeten alle hoofdletters omgezet zijn naar hun corresponderende kleine letter. De functie moet een Booleaanse waarde teruggeven die aangeeft of het gegeven woord al dan niet een nemordnilap is. Een woord wordt enkel beschouwd als een nemordnilap als de volgende voorwaarden voldaan zijn:
    • het woord komt voor in de gegeven verzameling van woorden
    • het omgekeerde woord (woord gelezen van rechts naar links) komt voor in de gegeven verzameling van woorden
    • het woord is geen palindroom
    Bij het nagaan of een gegeven woord voorkomt in de gegeven verzameling van woorden, mag geen onderscheid gemaakt worden tussen hoofdletters en kleine letters.

Voorbeeld

Bij onderstaande voorbeeldsessie gaan we ervan uit dat het bestand woorden.txt zich in de huidige directory bevindt.

>>> woorden = woordenboek('woorden.txt')

>>> len(woorden)
321115

>>> nemordnilap('droom', woorden)
True
>>> nemordnilap('regel', woorden)
True
>>> nemordnilap('koorts', woorden)
True
>>> nemordnilap('rotsen', woorden)
True
>>> nemordnilap('hefboom', woorden)
False


Added by:Peter Dawyndt
Date:2014-04-15
Time limit:10s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:PY_NBC
Resource:None