Mélanger choix de quiz avec graine
Mélangez les réponses d'une question avec un nombre-graine et retrouvez toujours le même ordre : Paris, Londres, Berlin et Madrid avec la graine 7 deviennent Berlin, Londres, Madrid et Paris, et l'on vous indique que la bonne réponse passe en dernier. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Choix
- Paris, London, Berlin, Madrid
- Indice correct
- 0
- Graine
- 7
- Choix
- Berlin, London, Madrid, Paris
- Indice correct
- 3
- Indice correct d'origine
- 0
- Nombre de choix
- 4
Les quiz à choix multiples ont besoin d'un ordre d'options équitable sans perdre la clé. Si chaque élève voit toujours la bonne réponse en premier, les scores s'envolent ; si le mélange repose sur un aléa non reproductible, vous ne pouvez plus remarquer, faire des tests A/B ni déboguer un item précis. Ce mélange à choix multiples ensemencé prend les choix de réponse, l'index de la bonne réponse et une graine entière, puis renvoie une liste réordonnée de façon déterministe avec le nouvel index correct. Le même triplet d'entrées produit toujours le même ordre, de sorte que formulaires d'examen, exports LMS et paquets mobiles hors ligne restent stables bit à bit.
Pourquoi un mélange ensemencé compte pour les quiz et les évaluations
Les quiz de classe et de produit rédigent souvent les options dans un ordre canonique —bonne réponse en premier, ou selon la séquence du programme— puis ont besoin d'un ordre de présentation qui ne fuit pas la clé. Un mélange purement aléatoire au rendu brise la reproductibilité : deux correcteurs ouvrant la même tentative voient des positions différentes, les captures d'écran ne correspondent plus aux journaux et les impressions papier ne peuvent pas être régénérées après un redémarrage serveur.
Ensemencer le mélange avec un entier stable —hash d'identifiant élève, numéro de variante de formulaire, compteur de tentatives ou graine fixe de classe— offre une variété contrôlée et une correspondance fixe que vous pouvez recalculer plus tard. Ce point de terminaison implémente Fisher–Yates piloté par un générateur mulberry32 initialisé avec votre graine, de sorte que la permutation est entièrement déterminée par la longueur des choix, l'ordre du contenu, la graine et l'index correct d'origine.
Utilisez une graine par variante de formulaire ou par apprenant si vous voulez des ordres indépendants ; réutilisez la même graine lorsque vous avez besoin de livrets identiques sur plusieurs appareils.
Où un mélange de choix ensemencé apporte de la valeur
Les systèmes de gestion de l'apprentissage appellent un mélange ensemencé des réponses de quiz à l'export des formulaires pour que chaque section obtienne un ordre d'options différent sans réécrire la banque d'items. Les outils d'intégrité d'examen font tourner l'ordre des distracteurs par place tout en conservant une piste d'audit : avec la graine et la clé d'origine, tout auditeur peut recalculer l'ordre présenté. Une validation en échec ne consomme pas de solde.
Gardez des listes de choix courtes, figez des goldens pour vos graines critiques, et vous obtenez une présentation à choix multiples reproductible pour plugins LMS, générateurs de devoirs et edge workers sans monter votre propre service de mélange.
Cas d’usage
Variantes de formulaire LMS
Exportez une même banque d'items vers plusieurs formulaires d'examen en ensemençant chaque id de formulaire pour que l'ordre des options diffère tout en suivant l'index correct pour la correction automatique.
Ordre de présentation par élève
Hachez un identifiant élève en graine et mélangez les choix pour que chaque apprenant voie un ordre différent sans changer la clé sous-jacente de la question.
Questions fréquentes
Combien de choix puis-je envoyer ?
Entre 2 et 50 inclus. Moins de deux n'est pas un ensemble à choix multiples ; plus de cinquante est rejeté pour borner le contrat.
Pourquoi mélanger les réponses avec une graine plutôt qu'au hasard ?
Parce qu'un ordre issu d'une graine se reconstruit plus tard. Deux correcteurs qui ouvrent la même copie voient les réponses aux mêmes places, les livrets imprimés peuvent être régénérés et chaque question se revérifie sans deviner ce que l'élève a vu.
Comment donner un ordre différent à chaque élève ?
Utilisez une graine différente par élève ou par version du sujet, et chacun obtient son propre ordre. Reprenez la même graine quand il vous faut des livrets identiques sur papier et sur tous les appareils.
Comment savoir où se trouve désormais la bonne réponse ?
Le résultat donne la liste mélangée avec la nouvelle position de la bonne réponse, ce qui permet à la correction automatique de continuer. Dans l'exemple, Paris part en premier et finit à la dernière des quatre places.
Ajoute-t-il les lettres A, B, C et D ?
Non. Il ne fait que réordonner les textes des réponses et suivre la bonne. Si votre questionnaire affiche des lettres devant les réponses, ajoutez-les dans votre propre mise en page après le mélange.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/edu/multiple-choice-shuffle-seeded \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"choices":["Paris","London","Berlin","Madrid"],"correct_index":0,"seed":42}'const res = await fetch("https://api.kit.forhosting.com/edu/multiple-choice-shuffle-seeded", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"choices": [
"Paris",
"London",
"Berlin",
"Madrid"
],
"correct_index": 0,
"seed": 42
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/multiple-choice-shuffle-seeded",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"choices": [
"Paris",
"London",
"Berlin",
"Madrid"
],
"correct_index": 0,
"seed": 42
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/multiple-choice-shuffle-seeded", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"choices":["Paris","London","Berlin","Madrid"],"correct_index":0,"seed":42}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"choices":["Paris","London","Berlin","Madrid"],"correct_index":0,"seed":42}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/multiple-choice-shuffle-seeded", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"choices": [
"Paris",
"London",
"Berlin",
"Madrid"
],
"correct_index": 0,
"seed": 42
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.multiple_choice_shuffle_seeded",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Les index corrects hors plage échouent avec invalid_input au lieu de pointer silencieusement vers la mauvaise option.
Pourquoi un mélange ensemencé compte pour les quiz et les évaluations
Vous n'avez pas à redériver la clé par appariement de texte après coup : la réponse inclut le nouveau correct_index avec les choix mélangés, contrat dont ont besoin les auto-correcteurs et les interfaces du lecteur. Lorsque l'index d'origine est hors des bornes du tableau, la tâche échoue avec invalid_input en nommant la plage, car un mauvais index de clé est pire que l'absence de mélange. Les listes vides ou à un seul choix sont aussi rejetées pour que l'API reste honnête sur ce qu'est un item à choix multiples.
Contrat d'entrée, forme de la réponse et comportement d'erreur
Les éléments de choix numériques ou booléens sont convertis en chaîne ; les objets et les null sont rejetés. Associez la réponse à vos propres libellés A–D si l'interface a besoin de lettres ; cette capacité ne fait que réordonner des chaînes et suivre la clé. Gardez les graines dans la plage de trente-deux bits signés qui vous intéresse ; le PRNG utilise la graine comme état de trente-deux bits non signés tandis que la réponse renvoie toujours l'entier que vous avez fourni. Envoyez en POST un corps JSON avec trois champs obligatoires. choices est un tableau d'au moins deux et au plus cinquante chaînes (les alias options et answers sont acceptés). correct_index est un entier de base zéro indiquant quelle entrée est correcte dans cet ordre de rédaction (alias answer_index). seed est un entier fini qui initialise le PRNG (alias shuffle_seed). Si correct_index est absent, non entier, négatif ou supérieur ou égal à la longueur du tableau, le gestionnaire lève invalid_input avec un message hors plage —ces échecs ne sont pas facturés—. En cas de succès le corps renvoie choices comme le tableau mélangé, correct_index comme la nouvelle position du même texte de réponse, original_correct_index qui reprend l'index d'entrée, seed qui reprend l'entier que vous avez envoyé et choice_count égal à la longueur du tableau. Exemple : choices Paris, London, Berlin, Madrid avec correct_index zéro et seed quarante-deux produisent toujours le même ordre et le même nouvel index pour Paris.
Où un mélange de choix ensemencé apporte de la valeur
Les paquets mobiles hors ligne précalculent les permutations à la publication et intègrent seed plus correct_index afin que les appareils n'aient jamais besoin d'une API aléatoire en direct. Comme l'implémentation est parse pure de niveau A, chaque appel réussi coûte le prix de base publié $0.002 sans jetons de modèle et sans réseau sortant.
Cas d'intégration
Paquets de quiz hors ligne
Précalculez des mélanges ensemencés à la publication et livrez choices plus correct_index pour que les applications mobiles notent hors ligne avec une auditabilité complète.
Questions techniques
Comment mélanger des réponses à choix multiples avec une graine ?
Envoyez choices (tableau de chaînes), correct_index (base zéro) et seed (entier). L'API renvoie les choix mélangés et le nouveau correct_index de la même réponse.
Que se passe-t-il si correct_index est hors plage ?
La tâche échoue avec invalid_input. L'index doit satisfaire 0 ≤ correct_index < choices.length ; les mauvaises clés ne sont jamais réaffectées en silence.
Le mélange est-il déterministe ?
Oui. Les mêmes choices, correct_index et seed produisent toujours le même ordre et le même nouvel index. Ni Math.random ni horloge ne sont utilisés.
Combien coûte le mélange de choix ensemencé ?
L'outil navigateur est gratuit. Les requêtes API utilisent le solde prépayé KIT à $0.002 par appel réussi ; une entrée invalide n'est pas facturée.