#!/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) show_header_ok() print("```") for j in range(4): for i in range(4): print(b[j][i],end=' ') print() print() print("```") # for z in found: print(z,end=' ') print() print("=> guess.cgi Guess a word")