37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
from .data import load
|
|
|
|
def render_questions() -> list:
|
|
data = load('questions.json')
|
|
for question in data:
|
|
_answers = [ answer['text'] for answer in question['answers'] ]
|
|
question['answers'] = _answers
|
|
question.pop('max', None)
|
|
return data
|
|
|
|
def evaluate_answers(answers:list) -> dict:
|
|
playbooks = load('playbooks.json')
|
|
questions = load('questions.json')
|
|
scores = dict.fromkeys(playbooks,0)
|
|
for index, answer in enumerate(answers):
|
|
question = questions[index]
|
|
if type(answer) is list:
|
|
answer = answer[0:question['select']]
|
|
for _answer in answer:
|
|
for match in question['answers'][int(_answer)]['matches']: scores[match] += 1
|
|
else:
|
|
for match in question['answers'][int(answer)]['matches']: scores[match] += 1
|
|
return scores
|
|
|
|
def compile_results(results:dict) -> dict:
|
|
output = {
|
|
'all_playbooks': results.copy(),
|
|
'playbooks': [ ],
|
|
'score': max(results.values()),
|
|
'max_score': 0
|
|
}
|
|
for question in load('questions.json'):
|
|
output['max_score'] += question.pop('max', 1)
|
|
playbooks = load('playbooks.json')
|
|
for playbook, score in results.items():
|
|
if score == output['score']: output['playbooks'].append({playbook: playbooks[playbook].copy()})
|
|
return output |