diff --git a/inventory/routes/index.py b/inventory/routes/index.py index 99c8610..5cebe20 100644 --- a/inventory/routes/index.py +++ b/inventory/routes/index.py @@ -34,7 +34,8 @@ def generate_solvable_matrix(level, seed_clicks=None): def coffee(): level = request.args.get('level', 0, int) matrix, clicked = generate_solvable_matrix(level) - return render_template("coffee.html", matrix=matrix, level=level, clicked=clicked) + best_score = len([x for x in clicked if not (len(clicked) % 2)]) + return render_template("coffee.html", matrix=matrix, level=level, clicked=clicked, best_score=best_score) @main.route("/playground") def playground(): diff --git a/inventory/templates/coffee.html b/inventory/templates/coffee.html index 8a2b56c..2b8c0d5 100644 --- a/inventory/templates/coffee.html +++ b/inventory/templates/coffee.html @@ -6,6 +6,10 @@ } {% endblock %} +{% block precontent %} +
+{% endblock %} + {% block content %}
{% for x in range(level + 3) %} @@ -27,14 +31,22 @@ var clickOrder = {}; var clickCounter = 0; - updateLights(); // fine, whatever that does + updateLights(); {{ clicked | tojson }}.forEach(([x, y]) => { clickCounter++; const key = `${x}-${y}`; - (clickOrder[key] ??= []).push(clickCounter); // initialize if missing, then push + (clickOrder[key] ??= []).push(clickCounter); }); + const bestScore = Object.values(clickOrder) + .reduce((n, arr) => n + (arr.length & 1), 0); + + + document.getElementById('best_score').textContent = `Best Score: ${bestScore}`; + console.log(clickOrder, bestScore); + + Object.entries(clickOrder).forEach(([key, value]) => { const light = document.querySelector(`#light-${key}`); // light.innerHTML += value; diff --git a/inventory/ui/blueprint.py b/inventory/ui/blueprint.py index 0ed41a8..214e583 100644 --- a/inventory/ui/blueprint.py +++ b/inventory/ui/blueprint.py @@ -2,7 +2,7 @@ from flask import Blueprint, request, render_template, jsonify, abort from sqlalchemy.engine import ScalarResult from sqlalchemy.exc import IntegrityError from sqlalchemy.sql import Select -from typing import Any, Optional, List, cast, Type, Iterable +from typing import Any, List, cast from .defaults import ( default_query, default_create, default_update, default_delete, default_serialize