no more return and reusable self.message
[slashmodeplusvnoise:legacy.git] / bots / r3340 / cervelle.py
1 # cervelle is a class that contains various string methods used by r3340
2 # Usage:
3 # seq = cervelle("!___!---!___!--##")
4 # seq.scry(20)
5 # print seq.message
6
7 import random
8
9 class cervelle:
10     def __init__(self, message):
11         self.message = message
12     
13     def remix(self):
14         '''remix() shuffle the message'''
15         self.message = ''.join(random.sample(self.message, len(self.message)))
16
17     def cornucopia(self, length):
18         '''cornucopia() randomly pick characters
19         from the message and produce a new 
20         string of the given length'''
21         cornucopia = ''
22         for i in range(int(length)):
23             cornucopia = cornucopia + random.choice(self.message)
24         self.message = cornucopia
25
26     def scry(self, length):
27         '''scry() turns the message into a
28         simple markov chain that can be used
29         to generate a new message at a given length.'''
30         markov, table = '', {}
31         char1, char2 = self.message[0], self.message[1]
32         
33         for char in self.message:
34             table.setdefault((char1, char2), []).append(char)
35             char1, char2 = char2, char
36         
37         # Shitty trick to make the chain loop
38         table.setdefault((char1, char2), []).append(self.message[0])
39         table.setdefault((char2, self.message[0]), []).append(self.message[1])
40
41         for i in range(int(length)):
42             newchar = random.choice(table[(char1, char2)])
43             markov = markov + newchar
44             char1, char2 = char2, newchar
45         
46         self.message = markov
47
48     def stretch(self, multiplier):
49         '''stretch() will repeat the number 
50         of characters in the message by the 
51         given multiplier while preserving the 
52         order'''
53         stretched = ''
54         for char in self.message:
55             stretched = stretched + char * int(multiplier)
56         self.message = stretched
57
58     def mushroom(self):
59         '''mushroom() turns all the capital 
60         letters in the message into small 
61         letters and vice-versa'''
62         self.message = self.message.swapcase()
63
64     def freeze(self):
65         '''freeze() fills a new string of the
66         same length as the message and only 
67         using a random character from the message'''
68         self.message = random.choice(self.message) * len(self.message)