99 lines
1.6 KiB
Python
99 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import random
|
|
|
|
from helpers import get_query_string, get_client_cert,show_header_ok
|
|
|
|
|
|
|
|
class Trie:
|
|
def __init__(self,letter):
|
|
self.letter=letter
|
|
self.mark=False
|
|
self.next=[None]*26
|
|
@staticmethod
|
|
def add(root,word):
|
|
curr=root
|
|
for i in word:
|
|
j=i.upper()
|
|
k=ord(j)-65
|
|
if curr.next[k]==None:
|
|
curr.next[k]=Trie(j)
|
|
curr=curr.next[k]
|
|
curr.mark=True
|
|
|
|
|
|
|
|
f=open('cgi-bin/dice.txt','r')
|
|
dice=f.read().split('\n')
|
|
f.close()
|
|
dice=list(filter(None,dice))
|
|
|
|
|
|
|
|
random.shuffle(dice)
|
|
b=[]
|
|
for j in range(4):
|
|
b.append([])
|
|
for i in range(4):
|
|
die=dice[j*4+i]
|
|
b[j].append(die[random.randrange(0,len(die))].upper())
|
|
|
|
|
|
|
|
|
|
def r(s):
|
|
return s and len(s)>=3 and len(s)<=16
|
|
f=open('cgi-bin/enable.txt','r')
|
|
words=f.read().split('\n')
|
|
f.close()
|
|
words=list(filter(r,words))
|
|
trie=Trie(None)
|
|
for word in words:
|
|
Trie.add(trie,word.upper())
|
|
|
|
|
|
|
|
g=[]
|
|
for j in range(4):
|
|
g.append([])
|
|
for i in range(4):
|
|
g[j].append(False)
|
|
found=[]
|
|
l=['' for i in range(16)]
|
|
def dfs(x,y,d,trie):
|
|
if x<0 or x>=4 or y<0 or y>=4:
|
|
return
|
|
if g[y][x]:
|
|
return
|
|
k=ord(b[y][x].upper())-65
|
|
t=trie.next[k]
|
|
if not t:
|
|
return
|
|
l[d]=b[y][x].upper()
|
|
if t.mark:
|
|
w=''.join(l[0:d+1])
|
|
if w not in found:
|
|
found.append(w)
|
|
g[y][x]=True
|
|
for j in [-1,0,1]:
|
|
for i in [-1,0,1]:
|
|
if i!=0 or j!=0:
|
|
dfs(x+i,y+j,d+1,t)
|
|
g[y][x]=False
|
|
for j in range(4):
|
|
for i in range(4):
|
|
dfs(i,j,0,trie)
|
|
|
|
found.sort(key=len,reverse=True)
|
|
|
|
board=[]
|
|
for j in range(4):
|
|
for i in range(4):
|
|
board.append(b[j][i])
|
|
bstr=','.join(board)
|
|
fstr=','.join(found)
|
|
|
|
print(bstr)
|
|
print(fstr)
|