Add best score calculation to coffee route and template

This commit is contained in:
Yaro Kasear 2025-08-18 09:06:39 -05:00
parent 247b167377
commit 6b4f61879b
3 changed files with 17 additions and 4 deletions

View file

@ -34,7 +34,8 @@ def generate_solvable_matrix(level, seed_clicks=None):
def coffee(): def coffee():
level = request.args.get('level', 0, int) level = request.args.get('level', 0, int)
matrix, clicked = generate_solvable_matrix(level) 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") @main.route("/playground")
def playground(): def playground():

View file

@ -6,6 +6,10 @@
} }
{% endblock %} {% endblock %}
{% block precontent %}
<div id="best_score"></div>
{% endblock %}
{% block content %} {% block content %}
<div class="container border border-black bg-success-subtle"> <div class="container border border-black bg-success-subtle">
{% for x in range(level + 3) %} {% for x in range(level + 3) %}
@ -27,14 +31,22 @@
var clickOrder = {}; var clickOrder = {};
var clickCounter = 0; var clickCounter = 0;
updateLights(); // fine, whatever that does updateLights();
{{ clicked | tojson }}.forEach(([x, y]) => { {{ clicked | tojson }}.forEach(([x, y]) => {
clickCounter++; clickCounter++;
const key = `${x}-${y}`; 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]) => { Object.entries(clickOrder).forEach(([key, value]) => {
const light = document.querySelector(`#light-${key}`); const light = document.querySelector(`#light-${key}`);
// light.innerHTML += value; // light.innerHTML += value;

View file

@ -2,7 +2,7 @@ from flask import Blueprint, request, render_template, jsonify, abort
from sqlalchemy.engine import ScalarResult from sqlalchemy.engine import ScalarResult
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.sql import Select from sqlalchemy.sql import Select
from typing import Any, Optional, List, cast, Type, Iterable from typing import Any, List, cast
from .defaults import ( from .defaults import (
default_query, default_create, default_update, default_delete, default_serialize default_query, default_create, default_update, default_delete, default_serialize