Blind test, interaction et regex
Hors ligneMronyme Le 23/05/2016 à 22:44 Profil de Mronyme Configuration de Mronyme

Bonsoir


Je suis en terminale spécialité ISN, et en projet de fin d'année j'ai décidé de faire un blind test.

Mais en voulant ajouter de l'interactivité dans le programme je suis confronté à un problème. Je précise que je réalise ce blind test en html et javascript afin de pouvoir le mettre en ligne.



1

2

3

4

5

6

7

8

9

10

11

12

13

14

function Verif() {

var rep = document.getElementById('zoneSaisie').value;

if (rep == titre )

alert("Bravo");

else

alert("Réessaye ! ⚠ Et attention à l'orthographe ☺");

}



Ceci est une capture d'écran de la partie du code qui pose problème, la fonction "verif" est appelée par le clic sur un bouton. Le titre du morceaux a préalablement été saisie par le joueur dans "zoneSaisie". Cette fonction a donc pour but de vérifier sa réponse. La variable " titre" contient le titre du morceaux et le nom de l'artiste ( tout deux récupérés à partir du nom du fichier ).
Le souci c'est que actuellement le joueur doit saisir exactement la réponse ce qui ne laisse aucune marge d'erreur. J'ai donc pensé à utilisé indexof et/ou regex pour vérifier si une partie de la réponse est présente dans le texte saisie par l'utilisateur. Mais je ne vois pas bien comment faire.




Je vous remercie d'avance de bien vouloir prendre le temps de lire mon problème. N'hésitez pas à me demander des précisions



Cordialement

Hors ligneAnthony Le 28/05/2016 à 09:31 Profil de Anthony Configuration de Anthony

Admin

Hello,

Je te conseille tout d'abord de transformer la réponse saisie par l'utilisateur en minuscules. Pour cela, la fonction toLowerCase() est adaptée : https://developer.mozilla.org/fr/docs/Web/JavaScri...

Ensuite, stocke tes titres en minuscules eux aussi. Déjà, tu élimineras le problème de la casse (minuscules/majuscules).

Ensuite, je pense que les fonctions de soundex te seront utiles (à savoir générer une chaîne de caractères spécifique en fonction de la prononciation).

Quelques exemples que tu peux tester :

https://www.google.fr/?gws_rd=ssl#q=soundex+javasc...

https://github.com/LouisT/node-soundex

Bonnes recherches Sourire

--

Hors ligneFelixandrea Le 17/07/2024 à 09:33 Profil de Felixandrea Configuration de Felixandrea

Bonsoir,

Je comprends votre souci. Pour permettre une vérification plus flexible, vous pouvez utiliser des expressions régulières (regex) ou comparer des chaînes de caractères en ignorant les majuscules/minuscules et en permettant de petites erreurs. Voici une version améliorée de votre fonction Verif : the official rice purity test

javascript

function Verif() { var rep = document.getElementById('zoneSaisie').value.trim().toLowerCase(); var titreNormalise = titre.trim().toLowerCase(); // Utilisation de regex pour permettre des erreurs mineures var pattern = new RegExp(titreNormalise, 'i'); if (pattern.test(rep)) { alert("Bravo"); } else { alert("Réessaye ! ⚠ Et attention à l'orthographe ☺"); } }

Dans cet exemple, nous utilisons trim() pour supprimer les espaces en début et en fin de chaîne, et toLowerCase() pour normaliser les majuscules/minuscules. Ensuite, nous créons une expression régulière avec le titre attendu et vérifions si la réponse de l'utilisateur correspond à cette expression.

Si vous souhaitez permettre encore plus de flexibilité, par exemple en acceptant des réponses partiellement correctes, vous pouvez comparer les chaînes de caractères en utilisant une fonction de distance de Levenshtein qui mesure la différence entre deux chaînes de caractères. Voici un exemple de fonction de calcul de distance de Levenshtein :

javascript

function levenshtein(a, b) { var tmp; if (a.length === 0) { return b.length; } if (b.length === 0) { return a.length; } if (a.length > b.length) { tmp = a; a = b; b = tmp; } var i, j, res, alen = a.length, blen = b.length, row = Array(alen); for (i = 0; i <= alen; i++) { row[i] = i; } for (i = 1; i <= blen; i++) { res = i; for (j = 1; j <= alen; j++) { tmp = row[j - 1]; row[j - 1] = res; res = b[i - 1] === a[j - 1] ? tmp : Math.min(tmp + 1, Math.min(res + 1, row[j] + 1)); } } return res; } function Verif() { var rep = document.getElementById('zoneSaisie').value.trim().toLowerCase(); var titreNormalise = titre.trim().toLowerCase(); var distance = levenshtein(rep, titreNormalise); var threshold = 3; // Nombre maximum d'erreurs acceptées if (distance <= threshold) { alert("Bravo"); } else { alert("Réessaye ! ⚠ Et attention à l'orthographe ☺"); } }

Dans cet exemple, la fonction levenshtein calcule la distance de Levenshtein entre les deux chaînes, et nous définissons un seuil (threshold) pour le nombre maximum d'erreurs acceptées.

J'espère que cela vous aide à rendre votre blind test plus interactif et tolérant aux petites erreurs de saisie.

Cordialement,

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels