Skip to content

Commit

Permalink
anglijst en spelerTotalen
Browse files Browse the repository at this point in the history
  • Loading branch information
PJvanDiepen committed Aug 27, 2024
1 parent 9c20552 commit 4591f7a
Show file tree
Hide file tree
Showing 9 changed files with 342 additions and 319 deletions.
8 changes: 7 additions & 1 deletion api.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ console.log();
* /:club/club
* enz.
*
* Een api-endpoint geeft een of meer
* Een api-endpoint geeft een antwoord (object) met compleet en andere properties.
*/
module.exports = function (url) {

Expand Down Expand Up @@ -127,6 +127,9 @@ module.exports = function (url) {
});
});

/*
TODO nog geen toepassing
*/
url.get("/:club/:seizoen/seizoen/toevoegen", async function (ctx) {
const club = clubs[ctx.params.club];
const seizoen = club.seizoenDaarna(ctx.params.seizoen);
Expand All @@ -138,6 +141,9 @@ module.exports = function (url) {
seizoenen: club.seizoenen});
});

/*
TODO nog geen toepassing
*/
url.get("/:club/:seizoen/ronden", async function (ctx) {
// TODO inlezen indien nodig
const ronden = await Ronde.query()
Expand Down
3 changes: 2 additions & 1 deletion public/js/indelen.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

import * as html from "./html.js";
import * as db from "./db.js";
import { o_o_o, init, ranglijst } from "./o_o_o.js";
import { o_o_o, init } from "./o_o_o.js";
import { ranglijst } from "./reglement.js";

import * as zyq from "./zyq.js";

Expand Down
322 changes: 10 additions & 312 deletions public/js/o_o_o.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ export async function init() {
console.log("--- test init ---");

Object.assign(zyq.o_o_o, o_o_o); // TODO voorlopig i.v.m.


/*
TODO voor de verwerking
o_o_o.ronde = [];
Expand Down Expand Up @@ -86,7 +88,7 @@ async function synchroniseren() {
}
sessionStorage.setItem(urlSynchroon, JSON.stringify(synchroon));
const vragen = await vraagLokaal("/vragen");
db.vragen.push(...vragen);
db.vragen.push(...vragen.data); // data zonder compleet
}

function verwijderNietSynchroon() {
Expand Down Expand Up @@ -223,17 +225,17 @@ async function vraagZoeken(commando) {
* vraagLokaal krijgt object van vraagServer met compleet: <getal> data: [...]
*
* @param url de vraag aan de server
* @returns {Promise<any>} data uit het antwoord van de server
* @returns {Promise<any>} compleet en data uit het antwoord van de server
*/
async function vraagLokaal(url) {
let object = JSON.parse(sessionStorage.getItem(url)); // indien lokaal dan niet vraagServer
if (!object) {
object = await vraagServer(url);
if (Number(object.compleet)) {
sessionStorage.setItem(url, JSON.stringify(object));
let antwoord = JSON.parse(sessionStorage.getItem(url)); // indien lokaal dan niet vraagServer
if (!antwoord) {
antwoord = await vraagServer(url);
if (Number(antwoord.compleet)) {
sessionStorage.setItem(url, JSON.stringify(antwoord));
} // indien niet compleet > 0 niet opslaan en steeds opnieuw vraagServer
}
return object.data; // data zonder compleet
return antwoord;
}

const server = html.pagina.host.match("localhost") ? "http://localhost:3000" : "https://0-0-0.nl";
Expand Down Expand Up @@ -358,308 +360,4 @@ export async function perTeamRondenUitslagen(teamCode) {
}
});
return rondenUitslagen;
}

/**
* ranglijst voor ranglijst.js, speler.js en indelen.js
*
* ranglijst geeft lijst totalen van eventueel geselecteerde spelers op volgorde van totalen
*
* @param rondeNummer in huidige competitie
* @param selectie indien null dan alle spelers
* @returns {Promise<*>}
*/
export async function ranglijst(rondeNummer, selectie = null) {
const totDatum = rondeNummer === o_o_o.laatsteRonde ? zyq.eindeSeizoen(o_o_o.seizoen) : o_o_o.ronde[rondeNummer + 1].datum;
let spelers = await zyq.localFetch(
`/${o_o_o.club}/${o_o_o.seizoen}/${o_o_o.competitie}/${rondeNummer}/ranglijst/${zyq.datumSQL(totDatum)}/${o_o_o.versie}`);
if (selectie) {
spelers = spelers.filter(function (speler) {return selectie.includes(speler.knsbNummer)})
}
return spelers.map(spelerTotalen);
}

/*
totalen
[0] sorteer (3 posities eventueel voorloopnullen)
[1] prijs (0 = geen prijs, 1 = wel prijs)
[2] winstIntern (2 posities eventueel voorloopnul)
[3] winstExtern (2 posities eventueel voorloopnul)
[4] rating (4 posities eventueel voorloopnul)
[5] remiseIntern
[6] verliesIntern
[7] witIntern
[8] zwartIntern
[9] oneven
[10] afzeggingen
[11] aftrek
[12] totaal
[13] startPunten
[14] eigenWaardeCijfer
[15] remiseExtern
[16] verliesExtern
[17] witExtern
[18] zwartExtern
[19] minimumPartijenGeleden
tegenstanders met n = 0, 4, 8, enz.
[20 + n] rondeNummer
[21 + n] kleur (0 = wit, 1 = zwart)
[22 + n] tegenstander
[23 + n] resultaat (0 = verlies, 1 = remise, 2 = winst)
einde indien rondeNummer = 0
TODO spelerTotalen moeten compleet zijn tot een bepaalde datum en rondeNummer inclusief de tellingen, dat moet op server geregeld worden
TODO nietTegen per clubCode
TODO naar reglement.js
*/
function spelerTotalen(speler) {
const knsbNummer = Number(speler.knsbNummer);
const naam = speler.naam;
const subgroep = speler.subgroep;
const totalen = speler.totalen.split(" ").map(Number);
const nietTegen =
knsbNummer === 7640798 ? [8388105] : // vader Johan niet tegen zoon Marijn Wester
knsbNummer === 8388105 ? [7640798] : // zoon Marijn niet tegen vader Johan Wester
knsbNummer === 7771665 ? [7777715] : // Yvonne Schol wegens geluid niet tegen Richard Gooijers
knsbNummer === 8350738 ? [7777715] : // Ramon Witte zegt niets tegen Richard Gooijers
knsbNummer === 9001586 ? [7777715] : // Abdul Rashid Ayobi spreekt geen Nederlands tegen Richard Gooijers
knsbNummer === 7777715 ? [7771665, 8350738, 9001586] : []; // Richard Gooijers niet tegen bovenstaande spelers

let wp = 0;

function weerstandsPuntenInvullen(weerstand) {
wp = weerstand;
}

function weerstandsPunten() {
return wp;
}

let sb = 0;

function sonnebornBergerInvullen(weerstand) {
sb = weerstand;
}

function sonnebornBerger() {
return sb;
}

function punten() {
return totalen[0];
}

function prijs() {
return totalen[1];
}

function winnaarSubgroep(winnaars) {
if (!intern()) {
return "";
} else if (!prijs()) { // indien geen recht op prijs
return subgroep;
} else if (winnaars[subgroep]) { // indien wel recht op prijs maar winnaar van subgroep al bekend
return subgroep + "+";
} else {
winnaars[subgroep] = true; // winnaar subgroep
return subgroep + "*";
}
}

function rating() {
return totalen[4];
}

function intern() {
return totalen[2] + totalen[5] + totalen[6];
}

function scoreIntern() {
return zyq.score(totalen[2],totalen[5],totalen[6]);
}

function percentageIntern() {
return zyq.percentage(totalen[2],totalen[5],totalen[6]);
}

function saldoWitZwart() {
return totalen[7] - totalen[8];
}

function oneven() {
return totalen[9];
}

function afzeggingen() {
return totalen[10];
}

function aftrek() {
return - totalen[11];
}

function totaal() {
return totalen[12];
}

function startPunten() {
return totalen[13];
}

function eigenWaardeCijfer() {
return totalen[14];
}

function extern() {
return totalen[3] + totalen[15] + totalen[16];
}

function scoreExtern() {
return zyq.score(totalen[3],totalen[15],totalen[16]);
}

function scoreGetalExtern() {
return (totalen[3] + totalen[15] * 0.5) / extern();
}

function percentageExtern() {
return zyq.percentage(totalen[3],totalen[15],totalen[16]);
}

function saldoWitZwartExtern() {
return totalen[17] - totalen[18];
}

function minimumPartijenGeleden() {
return totalen[19];
}

function tegen(tegenstander) {
if (nietTegen.includes(tegenstander.knsbNummer)) {
console.log(`${naam} mag niet tegen ${tegenstander.naam}`);
return false;
}
const ronde = vorigeKeer(tegenstander);
if (ronde && weerTegen(tegenstander) && tegenstander.weerTegen(speler)) {
afdrukken(tegenstander, totalen[ronde + 1], `wegens kleur in ronde ${totalen[ronde]}`);
return true; // mogen weerTegen elkaar
}
return !ronde; // indien nog niet tegen elkaar gespeeld
}

function vorigeKeer(tegenstander) {
let i = 20;
let j = 0;
while (totalen[i]) { // indien rondeNummer
if (totalen[i + 2] === tegenstander.knsbNummer) { // indien zelfde tegenstander
j = i;
}
i = i + 4; // volgende rondeNummer, kleur (0 = wit, 1 = zwart), knsbNummer en resultaat (0 = verlies, 1 = remise, 2 = winst)
}
return j; // vorigeKeer zelfde tegenstander of 0
}

function weerTegen(tegenstander) {
let i = 20;
let partijenGeleden = minimumPartijenGeleden() + 1;
while (totalen[i]) { // indien rondeNummer
if (totalen[i + 2] === tegenstander.knsbNummer) { // zelfde tegenstander
partijenGeleden = 1;
} else {
partijenGeleden++; // andere tegenstander
}
i = i + 4; // volgende rondeNummer, kleur (0 = wit, 1 = zwart), knsbNummer en resultaat (0 = verlies, 1 = remise, 2 = winst)
}
if (partijenGeleden < minimumPartijenGeleden()) {
console.log(`${naam} speelde ${partijenGeleden} partijen geleden tegen ${tegenstander.naam}`);
return false;
}
return true; // mag weerTegen
}

function tegenstander(rondeNummer) {
let i = 20;
while (totalen[i]) { // indien rondeNummer
if (totalen[i] === rondeNummer) {
return [totalen[i + 1], totalen[i + 2], totalen[i + 3]];
}
i = i + 4; // volgende rondeNummer, kleur (0 = wit, 1 = zwart), knsbNummer en resultaat (0 = verlies, 1 = remise, 2 = winst)
}
return [-1, 0, -1]; // geen tegenstander
}

function vorigeKleur() {
let i = 20;
let kleur = -1;
while (totalen[i]) { // indien rondeNummer
kleur = totalen[i + 1];
i = i + 4; // volgende rondeNummer, kleur (0 = wit, 1 = zwart), knsbNummer en resultaat (0 = verlies, 1 = remise, 2 = winst)
}
return kleur;
}

/**
* metWit berekent welke kleur tegen tegenstander
*
* @param tegenstander totalen
* @returns {boolean|*} indien wit anders zwart
*/
function metWit(tegenstander) {
const zelfdeTegenstander = vorigeKeer(tegenstander);
if (zelfdeTegenstander) {
return totalen[zelfdeTegenstander + 1] === 1 // wit indien vorige keer zwart = 1 tegen zelfdeTegenstander
}
if (saldoWitZwart() !== tegenstander.saldoWitZwart()) { // wit indien vaker met zwart
return afdrukken(tegenstander, saldoWitZwart() < tegenstander.saldoWitZwart(), "wegens wit-zwart");
}
const kleur = vorigeKleur();
if (kleur !== tegenstander.vorigeKleur()) { // wit indien vorige kleur zwart en vorige kleur tegenstander wit
return afdrukken(tegenstander, kleur === 1, "wegens vorige kleur");
} else if (totaal() !== tegenstander.totaal()) { // wit indien minder punten
return afdrukken(tegenstander, totaal() < tegenstander.totaal(), "wegens punten");
} else { // wit indien lagere rating
return afdrukken(tegenstander, rating() < tegenstander.rating(), "wegens rating");
}
}

function afdrukken(tegenstander, kleur, wegens) {
console.log(`${naam} met ${kleur ? "wit" : "zwart"} tegen ${tegenstander.naam} ${wegens}`);
return kleur;
}

return Object.freeze({ // Zie blz. 17.1 Douglas Crockford: How JavaScript Works
knsbNummer,
naam,
subgroep,
totalen,
rating,
intern,
weerstandsPuntenInvullen,
weerstandsPunten,
sonnebornBergerInvullen,
sonnebornBerger,
punten,
prijs,
winnaarSubgroep,
scoreIntern,
percentageIntern,
saldoWitZwart,
oneven,
afzeggingen,
aftrek,
totaal,
startPunten,
eigenWaardeCijfer,
extern,
scoreExtern,
scoreGetalExtern,
percentageExtern,
saldoWitZwartExtern,
minimumPartijenGeleden,
tegen,
weerTegen,
tegenstander,
vorigeKleur,
metWit
});
}
Loading

0 comments on commit 4591f7a

Please sign in to comment.