Check out the Pastebin Gadgets Shop. We have thousands of fun, geeky & affordable gadgets on sale :-)Want more features on Pastebin? Sign Up, it's FREE!
tweet

# Untitled

By: Scaatis on Jun 1st, 2014  |  syntax: Python  |  size: 2.63 KB  |  views: 1,184  |  expires: Never
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
1. #!/usr/bin/env python
2.
3. # Generate a word search grid from hell
4. # usage: wordgrid.py w h word
5. # The resulting word grid of w x h letters will be made up from the letters in
6. # word but will never actually contain the word neither forward nor backwards
7. # No warranty and all that noise
8.
9.
10. import sys
11. import random
12.
13. def _checkForWord(grid, word, w, h, x, y):
14.     l = len(word) - 1
15.     forward, backward = False, False
16.     # forward
17.     if x >= l and all(grid[y][x-l+o] == word[o] for o in range(l)):
18.         forward = True
19.     elif y >= l and all(grid[y-l+o][x] == word[o] for o in range(l)):
20.         forward = True
21.     elif x >= l and y >= l and all(grid[y-l+o][x-l+o] == word[o] for o in range(l)):
22.         forward = True
23.     elif x < w-l and y >= l and all(grid[y-l+o][x+l-o] == word[o] for o in range(l)):
24.         forward = True
25.
26.     # backward
27.     if x >= l and all(grid[y][x-o] == word[o] for o in range(1, l+1)):
28.         backward = True
29.     elif y >= l and all(grid[y-o][x] == word[o] for o in range(1, l+1)):
30.         backward = True
31.     elif x >= l and y >= l and all(grid[y-o][x-o] == word[o] for o in range(1, l+1)):
32.         backward = True
33.     elif x < w-l and  y >= l and all(grid[y-o][x+o] == word[o] for o in range(1,l+1)):
34.         backward = True
35.
36.     return forward, backward
37.
38.
39. def generate(w, h, word):
40.     word = word.upper()
41.     letters = set(word)
42.     letter = list(letters - set(word[-1]))
43.     etters = list(letters - set(word[0]))
44.     etter = list(letters - set(word[0]) - set(word[-1]))
45.     letters = list(letters)
46.
47.     grid = list()
48.
49.     for y in range(h):
50.         line = list()
51.         grid.append(line)
52.         for x in range(w):
53.             check = _checkForWord(grid, word, w, h, x, y)
54.             if check[0] and check[1]:
55.                 line.append(random.choice(etter))
56.             elif check[0]:
57.                 line.append(random.choice(letter))
58.             elif check[1]:
59.                 line.append(random.choice(etters))
60.             else:
61.                 line.append(random.choice(letters))
62.     return grid
63.
64. def printgrid(grid):
65.     for line in grid:
66.         print(" ".join(line))
67.
68. if __name__ == "__main__":
69.     if len(sys.argv) != 4:
70.         print("Usage: wordgrid.py w h word")
71.         print("The grid will be made up of the letters in word, but word will never appear in it")
72.         sys.exit(1)
73.
74.     w = int(sys.argv[1])
75.     h = int(sys.argv[2])
76.
77.     word = sys.argv[3]
78.     if len(word) < 3:
79.         print("The word must have at least three letters")
80.         sys.exit(1)
81.
82.     print("Find %s!" % word)
83.     printgrid(generate(w,h,word))
clone this paste RAW Paste Data
Top