Vérifier une grille de sudoku : lignes, colonnes et blocs
Une position de sudoku peut sembler cohérente tout en contenant déjà une contradiction qui rendrait vaine toute tentative de résolution.
Lancer gratuitement
Ce validateur contrôle une grille 9x9 partiellement remplie sans chercher à la résoudre. Il confronte chaque case renseignée aux règles classiques d’unicité des lignes, des colonnes et des blocs 3x3, puis fournit un verdict clair et l’emplacement exact de chaque chiffre en double. Les cases vides sont ignorées : vous pouvez donc vérifier une grille initiale, une partie en cours ou un sudoku presque terminé.
Saisissez une grille partielle dans un format fiable
Fournissez exactement neuf lignes de neuf cases chacune. Les cases remplies contiennent les chiffres de 1 à 9 ; représentez une case vide par un point ou un zéro. Une ligne compacte telle que <code>53..7....</code> facilite la copie depuis un texte brut, mais vous pouvez ajouter des espaces ou des virgules entre les cases pour améliorer la lisibilité. Le validateur retire ces séparateurs avant de compter les cases, sans essayer d’interpréter d’autres symboles. Cette exigence distingue une saisie mal formée d’une position de sudoku illégale : la première ne permet pas d’identifier sûrement 81 cases, tandis que la seconde possède la bonne forme mais enfreint au moins une règle d’unicité. Un nombre incorrect de lignes ou de cases, ainsi qu’un caractère non pris en charge, provoque une erreur de saisie. L’outil ne suppose ni que le problème admet une solution, ni que ses indices sont symétriques, ni qu’ils sont assez nombreux. La saisie représente uniquement l’état actuel de la grille.
Interprétez les conflits de ligne, de colonne et de bloc
Le contrôle applique séparément les trois règles locales habituelles. Un chiffre renseigné ne peut apparaître plus d’une fois dans une ligne horizontale, une colonne verticale ou un bloc 3x3. Les cases vides ne participent pas aux comparaisons. Si tous les chiffres respectent ces conditions, <code>valid</code> vaut true et la liste des violations est vide. Lorsqu’un doublon existe, chaque violation indique sa nature, son indice commençant à un, la valeur répétée et toutes les cases qui portent cette valeur dans l’unité concernée. Les coordonnées des lignes et colonnes commencent également à un, conformément à l’usage courant. Une même paire peut produire plusieurs signalements : deux cinq placés à la fois dans la même ligne et dans le bloc supérieur gauche enfreignent les deux contraintes, qui sont donc toutes deux indiquées. L’ordre reste déterministe : lignes, colonnes, puis blocs, avec les chiffres de 1 à 9 dans chaque unité. Vous pouvez ainsi tester, comparer, conserver et afficher les résultats sans réorganisation supplémentaire.
Placez ce contrôle au bon endroit dans votre processus
Le contrôle de légalité est un diagnostic ciblé, et non un solveur ou une preuve de qualité du problème. Un résultat true signifie seulement qu’aucun chiffre actuellement inscrit ne répète une valeur dans sa ligne, sa colonne ou son bloc. Une contradiction plus profonde peut encore empêcher toute solution ; la grille peut aussi accepter plusieurs solutions ou présenter des indices impropres à la publication. L’outil constitue donc surtout un garde-fou précoce. Un éditeur peut l’appeler après chaque modification pour signaler immédiatement une faute. Un processus d’importation peut écarter les grilles endommagées ou mal saisies avant de solliciter un solveur plus coûteux. Une application pédagogique peut vérifier les réponses d’un élève sans dévoiler la solution. L’algorithme parcourt un ensemble fixe de 81 cases et n’effectue aucune requête réseau, ce qui rend son comportement rapide et reproductible. La version web convient au contrôle interactif ; un système automatisé peut envoyer la même grille à l’API pour $0.002 par requête. Dans les deux cas, distinguez une saisie mal formée d’une grille bien formée dont <code>valid</code> vaut false.
Cas d’usage
Repérer une erreur de transcription
Contrôlez une grille recopiée afin de détecter les indices répétés avant son enregistrement ou sa transmission à un solveur.
Guider un joueur sans révéler la réponse
Montrez les lignes, colonnes et blocs en conflit immédiat sans dévoiler la solution du sudoku.
Contrôler des problèmes importés
Rejetez les grilles mal formées comme erreurs de saisie et signalez les positions correctement formées mais illégales dans un résultat structuré.
Questions fréquentes
Un résultat valide garantit-il que le sudoku est soluble ?
Non. Il indique seulement que les cases remplies ne violent pas l’unicité des lignes, colonnes ou blocs 3x3. Il ne vérifie ni l’existence ni l’unicité d’une solution.
Comment représenter les cases vides ?
Utilisez un point ou le chiffre zéro. Ces deux caractères représentent une case vide et sont ignorés lors de la recherche des doublons.
Puis-je séparer les cases par des espaces ou des virgules ?
Oui. Les espaces, les virgules et les barres verticales sont admis comme séparateurs visuels. Après leur retrait, chaque ligne doit contenir exactement neuf cases.
Pourquoi une même paire de cases figure-t-elle parfois dans deux violations ?
Un doublon peut enfreindre plusieurs règles simultanément, par exemple s’il appartient à la même ligne et au même bloc 3x3. Chaque unité concernée est signalée séparément.
Quel est le prix d’une requête API ?
Chaque requête API coûte $0.002. La version interactive s’exécute gratuitement et localement dans votre navigateur.
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/game/sudoku-validate-board \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"board":"53..7....\n6..195...\n.98....6.\n8...6...3\n4..8.3..1\n7...2...6\n.6....28.\n...419..5\n....8..79"}'const res = await fetch("https://api.kit.forhosting.com/game/sudoku-validate-board", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"board": "53..7....\n6..195...\n.98....6.\n8...6...3\n4..8.3..1\n7...2...6\n.6....28.\n...419..5\n....8..79"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/game/sudoku-validate-board",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"board": "53..7....\n6..195...\n.98....6.\n8...6...3\n4..8.3..1\n7...2...6\n.6....28.\n...419..5\n....8..79"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/game/sudoku-validate-board", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"board":"53..7....\\n6..195...\\n.98....6.\\n8...6...3\\n4..8.3..1\\n7...2...6\\n.6....28.\\n...419..5\\n....8..79"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"board":"53..7....\n6..195...\n.98....6.\n8...6...3\n4..8.3..1\n7...2...6\n.6....28.\n...419..5\n....8..79"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/game/sudoku-validate-board", 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
{
"board": "53..7....\n6..195...\n.98....6.\n8...6...3\n4..8.3..1\n7...2...6\n.6....28.\n...419..5\n....8..79"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "game.sudoku_validate_board",
"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. |