Add best score calculation to coffee route and template
This commit is contained in:
parent
247b167377
commit
6b4f61879b
3 changed files with 17 additions and 4 deletions
|
|
@ -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():
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue