diff --git a/sandbox/anagrams.py b/sandbox/anagrams.py deleted file mode 100644 index a08bad677..000000000 --- a/sandbox/anagrams.py +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env python - -### -# Copyright (c) 2002, Jeremiah Fincher -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of the author of this software nor the name of -# contributors to this software may be used to endorse or promote products -# derived from this software without specific prior written consent. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -### - -from baseplugin import * - -import cdb - -class AnagramDatabase: - def __init__(self, filename): - self.filename = filename - self.db = cdb.shelf(self.filename) - - def _makeKey(self, key): - chars = list(key) - chars.sort() - return ''.join(chars) - - def find(self, key): - key = self._makeKey(key) - return self.db[key] - - def add(self, word): - key = self._makeKey(word) - initial = self.db.get(key, []) - initial.append(word) - self.db[key] = initial - - def remove(self, word): - key = self._makeKey(word) - l = self.db[key] - if key not in l: - raise KeyError, word - else: - self.db[key] = [x for x in l if x != key] - - def close(self): - self.db.close() - - def flush(self): - self.db.flush() - - -class Anagrams(BasePlugin): - def startanagrams(self, irc, msg, args): - "" - if ircdb.checkCapability(msg.prefix, 'admin'): - self.filename = os.path.join(world.dataDir, self.getArgs(args)) - self.db = AnagramDatabase(self.filename) - self.started = True - self.reply(privmsgs.replySuccess) - else: - self.error(privmsgs.replyNoCapability % 'admin') - - def stopanagrams(self, irc, msg, args): - "" - word = self.getArgs(args) - self.db.add(word) - self.reply(privmsgs.replySuccess) - - def delanagramword(self, irc, msg, args): - "" - word = self.getArgs(args) - self.db.remove(word) - self.reply(privmsgs.replySuccess) - - def anagram(self, irc, msg, args): - "" - word = self.getArgs(args) - try: - l = [s for s in self.db.find(word) if s != word] - if l: - self.reply(', '.join(self.db.find(word))) - else: - self.error('%s has no anagrams.' % word) - except KeyError: - self.error('%s isn\'t in my anagram dictionary.' % word) - -Class = Anagrams - -### -# This makes an anagram database from a list of words on stdin. -### -if __name__ == '__main__': - import sys, string - db = AnagramDatabase(os.path.join(world.dataDir, 'anagrams.db')) - trans = string.maketrans(string.ascii_uppercase, string.ascii_lowercase) - for line in sys.stdin: - db.add(line.translate(trans, '\n')) - db.flush() -# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78: