Paste
Of Code


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
import random
import time


COLS = 6
ROWS = 6


def words(*lengths: int):
  with open('slowa.txt', 'r') as f:
    while True:
      line = f.readline().strip()
      if not line:
        return

      if len(line) in lengths:
        yield line


wordsr = {}
wordsc = {}

print('parsing words')

for word in words(ROWS):
  x = wordsr
  for i, c in enumerate(word):
    y = x.setdefault(c, {})
    x = y

if ROWS == COLS:
  wordsc = wordsr

else:
  for word in words(COLS):
    x = wordsc
    for i, c in enumerate(word):
      y = x.setdefault(c, {})
      x = y


m = {(x, y): '.' for x in range(COLS) for y in range(ROWS)}

for x, c in enumerate('dejkun'):
  m[(x, 0)] = c


def printm(m):
  out = ''
  for y in range(ROWS):
    for x in range(COLS):
      out += m[x, y]
    out += '\n'
  print(out)


def mcp(m, x, y, c):
  mm = m.copy()
  mm[x, y] = c
  return mm


def matches(m, x, y):
  nlc = wordsc
  nlr = wordsr

  for xx in range(x):
    nlc = nlc.get(m[xx, y], {})
  for yy in range(y):
    nlr = nlr.get(m[x, yy], {})

  return [mcp(m, x, y, c) for c in set(nlc) & set(nlr)]


print('searching')
start = time.perf_counter()
ms = [m]
for y in range(ROWS - 1):
  for x in range(COLS):
    print(x, y)
    ms = sum([matches(z, x, y + 1) for z in ms], [])
    random.shuffle(ms)
    ms = ms[:3000]
    print(len(ms))

for q in ms:
  printm(q)
print(len(ms))
print(f'{time.perf_counter() - start:.2f} s')

Toggle: theme, font