blob: b3420ab2aa85475f6bb5db2bbde66052a304a4ea (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#!/usr/bin/env python
import random
wordList = open("words.txt")
letterNumerators = [[0 for i in range(27)] for i in range(27)]
letterDenominators = [0 for i in range(27)]
wordBeginnings = [0 for i in range(27)]
wordsNum = 0
for line in wordList:
line = line.lower()
line = line[:-1]
acceptable = True
for letter in line:
if (ord(letter) < 97 or ord(letter) > 122):
acceptable = False
if len(line) < 0:
acceptable = False
if acceptable:
wordsNum += 1
wordBeginnings[ord(line[0]) - 96] += 1
for i in range(len(line) - 1):
letterDenominators[ord(line[i]) - 96] += 1
letterNumerators[ord(line[i]) - 96][ord(line[i + 1]) - 96] += 1
letterDenominators[ord(line[-1]) - 96] += 1
letterNumerators[ord(line[-1]) - 96][0] += 1
while True:
newWord = ""
j = 0
number = random.SystemRandom().random() * wordsNum
for i in range(len(wordBeginnings)):
number -= wordBeginnings[i]
if number < 0:
newWord += (chr(i + 96))
break
newWordFinished = False
while not newWordFinished:
number = letterDenominators[ord(newWord[j]) - 96] * random.SystemRandom().random()
for i in range(len(letterNumerators[ord(newWord[j]) - 96])):
number -= letterNumerators[ord(newWord[j]) - 96][i]
if number < 0:
if i == 0:
newWordFinished = True
break
j = j + 1
newWord += (chr(i + 96))
break
print(newWord)
|