summaryrefslogtreecommitdiffstats
path: root/words.py
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)