EZ-Crossword / Crossword_inf.py
Ujjwal123's picture
copied the whole api code from django and updated the dockerfile
a04b340
from Utils_inf import clean
class Crossword:
def __init__(self, data):
self.initialize_grids(grid=data["grid"])
self.initialize_clues(clues=data["clues"])
self.initialize_variables()
def initialize_grids(self, grid):
self.letter_grid = [[grid[j][i][1] if type(grid[j][i]) == list else "" for i in
range(len(grid[0]))] for j in range(len(grid))]
self.number_grid = [[grid[j][i][0] if type(grid[j][i]) == list else "" for i in
range(len(grid[0]))] for j in range(len(grid))]
self.grid_cells = {}
def initialize_clues(self, clues):
self.across = clues["across"]
self.down = clues["down"]
def initialize_variable(self, position, clues, across=True):
row, col = position
cell_number = self.number_grid[row][col]
assert cell_number in clues, print("Missing clue")
word_id = cell_number + "A" if across else cell_number + "D"
clue = clean(clues[cell_number][0])
answer = clean(clues[cell_number][1])
for idx in range(len(answer)):
cell = (row, col + idx) if across else (row + idx, col)
if cell in self.grid_cells:
self.grid_cells[cell].append(word_id)
else:
self.grid_cells[cell] = [word_id]
if word_id in self.variables:
self.variables[word_id]["cells"].append(cell)
else:
self.variables[word_id] = {"clue": clue, "gold": answer, "cells": [cell], "crossing": []}
def initialize_crossing(self):
for word_id in self.variables:
cells = self.variables[word_id]["cells"]
crossing_ids = []
for cell in cells:
crossing_ids += list(filter(lambda x: x!= word_id, self.grid_cells[cell]))
self.variables[word_id]["crossing"] = crossing_ids
def initialize_variables(self):
self.variables = {}
for row in range(len(self.number_grid)):
for col in range(len(self.number_grid[0])):
cell_number = self.number_grid[row][col]
if self.number_grid[row][col] != "":
if cell_number in self.across:
self.initialize_variable((row, col), self.across, across=True)
if cell_number in self.down:
self.initialize_variable((row, col), self.down, across=False)
self.initialize_crossing()