Verifica sudoku: conflitti in righe, colonne e riquadri
Una sola cifra ripetuta può rendere non valida una posizione sudoku molto prima che l’errore diventi evidente.
Esegui gratis nel browser
Questo strumento esamina una griglia standard completa o parziale e identifica ogni cella occupata coinvolta in un conflitto immediato. Controlla separatamente righe, colonne e riquadri 3x3, ignora le celle vuote e restituisce coordinate stabili con la causa di ogni segnalazione. Non risolve il gioco né rivela valori mancanti, quindi è adatto per esercitarsi, creare schemi, insegnare e convalidare dati automaticamente.
Formatti la griglia prima del controllo
Inserisca una griglia sudoku standard in nove righe di nove celle ciascuna. Le celle compilate devono contenere cifre da 1 a 9. Indichi una cella vuota con un punto o uno zero: le due forme hanno lo stesso significato e non partecipano alla ricerca dei duplicati. Può usare spazi, virgole e barre verticali come separatori per migliorare la leggibilità, quindi sono accettate sia la notazione compatta sia quella visivamente separata. Lo strumento rimuove questi separatori, ma non interpreta né corregge altri caratteri. Questa distinzione separa un input malformato da una griglia della forma corretta che viola le regole. La richiesta genera un errore se non contiene esattamente nove righe, se una riga non ha nove celle dopo la rimozione dei separatori o se compare un carattere non supportato. Sono ammesse griglie parziali con i soli indizi iniziali, partite in corso o schemi quasi completati. Una griglia interamente vuota è strutturalmente valida perché non esistono celle occupate in conflitto. Il controllo valuta soltanto la posizione ricevuta e non riempie spazi né modifica valori.
Legga il rapporto dei conflitti cella per cella
Il risultato inizia con il valore booleano <code>valid</code>. È vero quando nessuna cella occupata condivide la propria cifra con un’altra nella stessa riga, colonna o nello stesso riquadro 3x3. Il conteggio <code>filled_cells</code> mostra quante voci non vuote sono state esaminate. Se la posizione non è valida, <code>conflict_cells</code> elenca tutte le celle coinvolte con coordinate di riga e colonna a base uno, la cifra presente e uno o più motivi. Ogni motivo indica il tipo di regola, l’indice dell’unità e il valore duplicato. Una cella può avere più cause: per esempio, un cinque ripetuto può violare contemporaneamente la sua riga e il riquadro in alto a sinistra. Entrambe restano visibili. Elencare ogni cella consente a un’interfaccia di evidenziare subito i punti problematici. L’ordine è deterministico: le celle seguono l’ordine di lettura e i motivi seguono riga, colonna e riquadro. Le celle vuote non vengono mai incluse. Se una cifra compare tre volte in un’unità, vengono segnalate tutte e tre le celle, non una coppia arbitraria.
Comprenda che cosa dimostra la validità
Questo controllo risponde a una domanda precisa: la posizione attuale viola immediatamente la regola di unicità di una riga, colonna o riquadro? Un risultato valido non dimostra che il sudoku sia risolvibile, che abbia una sola soluzione o che gli indizi siano ben progettati. Alcune posizioni non presentano duplicati diretti ma restano impossibili da completare, perché scelte precedenti eliminano ogni candidato da un’altra cella. Per stabilirlo serve un risolutore o un’analisi di fattibilità più profonda, che questa capacità non esegue. L’ambito ristretto è utile quando il riscontro deve mostrare gli errori senza rivelare una risposta. Un’app didattica può evidenziare le celle duplicate, un editor può controllare gli indizi dopo ogni modifica e un’importazione può scartare record danneggiati prima di elaborazioni più costose. Il calcolo esamina al massimo 81 celle e non usa rete, casualità, orologio o stato esterno. Lo stesso input produce quindi sempre lo stesso output strutturato. Il browser esegue localmente la medesima logica pura, mentre un flusso automatico può richiedere l’API per $0.002 per elemento e conservare le coordinate per una revisione successiva.
Casi d'uso
Controlli una partita in corso
Trovi cifre duplicate in uno schema parziale senza chiedere a un risolutore di rivelare i valori mancanti.
Verifichi gli indizi di un sudoku
Convalidi una griglia appena inserita ed evidenzi ogni cella coinvolta in una violazione immediata.
Protegga un flusso di importazione
Separi testi malformati da record sudoku ben strutturati ma conflittuali prima dell’elaborazione.
Domande frequenti
Posso controllare un sudoku incompleto?
Sì. Usi un punto o uno zero per ogni cella vuota. Le celle vuote vengono ignorate durante la ricerca dei duplicati.
Un risultato valido significa che il sudoku ha soluzione?
No. Significa solo che le voci attuali non si duplicano in una riga, colonna o riquadro. Non prova risolvibilità o unicità.
Perché una cella può avere più motivi di conflitto?
La stessa voce può duplicare una cifra contemporaneamente nella propria riga, colonna e riquadro. Ogni regola violata viene indicata separatamente.
Le coordinate iniziano da zero?
No. Righe, colonne e indici delle unità iniziano da 1, in linea con il modo abituale di descrivere una griglia sudoku.
Quanto costa un controllo tramite API?
Ogni elemento elaborato tramite API costa $0.002. Il controllo interattivo nel browser può essere eseguito localmente gratis.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/hobby/game-sudoku-validity \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"grid":"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/hobby/game-sudoku-validity", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"grid": "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/hobby/game-sudoku-validity",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"grid": "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/hobby/game-sudoku-validity", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"grid":"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(`{"grid":"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/hobby/game-sudoku-validity", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"grid": "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"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.game_sudoku_validity",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |