36 lines
1.6 KiB
JavaScript
36 lines
1.6 KiB
JavaScript
|
|
// © 2026 TechnoLibre (http://www.technolibre.ca)
|
||
|
|
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
|
||
|
|
|
||
|
|
// La meilleure proposition, que la section de la génération annonce en tête
|
||
|
|
// (§ 5.4, § 5.7), pure : SectionGeneration.svelte la câble.
|
||
|
|
//
|
||
|
|
// Elle se lit dans le tableau des propositions, sur la table d'évaluation
|
||
|
|
// de la charge (evaluation et tableau, propositions/modele.js) : la même
|
||
|
|
// mesure, le même classement et la même cellule que la section des
|
||
|
|
// propositions affiche au rang 1 ; aucune valeur ne se recalcule ici.
|
||
|
|
|
||
|
|
import { evaluation, tableau } from '../propositions/modele.js';
|
||
|
|
|
||
|
|
/** La colonne du tableau que l'annonce reprend. */
|
||
|
|
export const COLONNE_ANNONCEE = 'collisionsCumulees';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* La proposition au rang 1 du classement, et sa cellule des collisions
|
||
|
|
* cumulées.
|
||
|
|
*
|
||
|
|
* @param {Object} charge la charge de l'état observable de la séance
|
||
|
|
* @returns {null|{id: number, cellule: {colonne: string, valeur: number|null,
|
||
|
|
* cle: string|null, decimales: number}}} null quand aucune proposition ne
|
||
|
|
* se classe : aucune proposition, aucune comparable — population changée —,
|
||
|
|
* ou une configuration que la mesure refuse ; sinon l'identifiant de la
|
||
|
|
* première ligne du classement et sa cellule, telle que le tableau la porte,
|
||
|
|
* que texteCellule écrit
|
||
|
|
*/
|
||
|
|
export function meilleureProposition(charge) {
|
||
|
|
const { table } = evaluation(charge);
|
||
|
|
if (table === null) return null;
|
||
|
|
const [premiere] = tableau(table).lignes;
|
||
|
|
if (premiere === undefined) return null;
|
||
|
|
return { id: premiere.id, cellule: premiere.cellules.find(({ colonne }) => colonne === COLONNE_ANNONCEE) };
|
||
|
|
}
|