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