-
Notifications
You must be signed in to change notification settings - Fork 0
/
puzzle_metrics.py
53 lines (41 loc) · 1.31 KB
/
puzzle_metrics.py
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
51
52
53
import json
from pprint import pprint
from helpers import pretty_date, get_board, get_solve_time, format_time
from sexy_table import sexy_table
puzzles = []
with open("data.json", 'r') as f:
data = json.loads(f.read())
for board in data:
grid = get_board(board['board']['cells'])
time = get_solve_time(grid)
new_puz = {
'date': pretty_date(board['print_date']),
'time': time,
'id': board['puzzle_id']
}
# we only track puzzles with solve times of less than 1 day (to remove inaccurate data)
if time < 3600:
puzzles.append(new_puz)
# sort data
puzzles.sort(key=lambda x: x['time'])
average_solve_time = int(sum([puz['time'] for puz in puzzles]) / len(puzzles))
# # output results somehow (for now, stdout)
print("Mini Crosswords:", len(puzzles))
print("Shortest Solve Time:", format_time(puzzles[0]['time']))
print("Longest Solve Time:", format_time(puzzles[-1]['time']))
print("Average Solve Time:", format_time(average_solve_time), "\n")
table_headers = {
'date': 'Date',
'time': 'Solve Time',
'id': 'Puzzle ID'
}
order = {
'date': 2,
'time': 3,
'id': 1
}
transformers = {
'time': format_time
}
table = sexy_table(puzzles, Headers=table_headers, Transformers=transformers, Order=order)
print(table)