Compare commits

...

2 Commits

Author SHA1 Message Date
ThePendulum 4ada601fb2 1.29.2 2024-06-04 23:56:52 +02:00
ThePendulum 13e0bb9a8c Improved repeat letter marking in wordle. 2024-06-04 23:56:51 +02:00
4 changed files with 19 additions and 13 deletions

View File

@ -137,7 +137,6 @@ module.exports = {
wordle: {
minLength: 3,
defaultLength: 5,
highlightRepeat: false, // in wordle, if the I in the guess HINDI is in the wrong place, only the first I is orange
},
numbers: {
length: 6,

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "schat2-clive",
"version": "1.29.1",
"version": "1.29.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "schat2-clive",
"version": "1.29.1",
"version": "1.29.2",
"license": "ISC",
"dependencies": {
"better-sqlite3": "^8.3.0",

View File

@ -1,6 +1,6 @@
{
"name": "schat2-clive",
"version": "1.29.1",
"version": "1.29.2",
"description": "Game host for SChat 2-powered chat sites",
"main": "src/app.js",
"scripts": {

View File

@ -118,29 +118,36 @@ function play(guess, context) {
}
const upperGuess = guess.toUpperCase();
const processed = new Set();
const occurrences = wordle.word.split('').reduce((acc, letter) => acc.set(letter, (acc.get(letter) || 0) + 1), new Map());
const check = upperGuess.split('').map((letter, index) => {
const alreadySeen = settings.highlightRepeat ? false : processed.has(letter);
processed.add(letter);
const guessLetters = upperGuess.split('');
const check = guessLetters.map((letter) => [letter, null]);
// correct
guessLetters.forEach((letter, index) => {
if (wordle.word[index] === letter) {
wordle.letters.set(letter, true);
return [letter, true];
check[index] = [letter, true];
}
});
// wrong place
guessLetters.forEach((letter, index) => {
if (wordle.word.includes(letter)) {
if (wordle.letters.get(letter) !== true) {
wordle.letters.set(letter, false);
}
return [letter, alreadySeen ? null : false]; // repeating letter in the wrong place is not highlighted
const marks = check.filter(([checkLetter, status]) => checkLetter === letter && status !== null).length;
if (check[index][1] !== true && marks < occurrences.get(letter)) {
check[index] = [letter, false];
}
return;
}
wordle.letters.delete(letter);
return [letter, null];
});
wordle.guesses = wordle.guesses.concat([[context.user.username, upperGuess]]);