File size: 1,725 Bytes
2a68adc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0a95498
2a68adc
 
0a95498
 
 
 
 
 
 
 
2a68adc
 
 
0a95498
2a68adc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from game_manager import Clue
from typing import List, Optional
import time
from game_manager import GUESS_TIMEOUT


def crossword(grid: List[List[Optional[str]]], clues: List[Clue]):
    clue_grid = [[[] for _ in range(len(grid[0]))] for _ in range(len(grid))]
    for clue_id, clue in enumerate(clues):
        if clue is None:
            continue
        if clue.across:
            for i, _ in enumerate(clue.answer):
                clue_grid[clue.location[0]][clue.location[1] + i].append(clue_id)
        else:
            for i, _ in enumerate(clue.answer):
                clue_grid[clue.location[0] + i][clue.location[1]].append(clue_id)
    output = "<div class='crossword'>"
    for i, row in enumerate(grid):
        output += "<div class='c-row'>"
        for j, cell in enumerate(row):
            clue_ids = clue_grid[i][j]
            output += f"""<div class='cell {"" if cell is None else "filled"} {"" if len(clue_ids) == 0 else f"clue {' '.join('clue-' + str(clue_id+1) for clue_id in clue_ids)}"}'>"""
            if cell == None:
                output += "&nbsp;"
            else:
                output += cell
            output += "</div>"
        output += "</div>"
    output += "</div>"
    return output


def clue_riddle(clue: Clue):
    if clue is None:
        return "..."
    
    if clue.solved:
        end_line = clue.answer + " - " + clue.solver
    elif clue.timed_out:
        end_line = clue.answer
    else:
        time_remaining = GUESS_TIMEOUT - (time.time() - clue.create_time)
        end_line = str(round(max(0, time_remaining))) + "s"
    return (
        "\n".join(line for line in clue.riddle.splitlines() if line.strip() != "")
        + " - "
        + end_line
    )