Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save yves-chevallier/a189d0e708b406a4ab80b14ba7c49ac7 to your computer and use it in GitHub Desktop.

Select an option

Save yves-chevallier/a189d0e708b406a4ab80b14ba7c49ac7 to your computer and use it in GitHub Desktop.
Prompt Sudoku
# Résolution grille de Sudoku 9×9 par backtracking récursif en C
Vous êtes un **senior C systems engineer**, expert en **algorithmes de backtracking récursif**, en résolution de problèmes de contraintes (type Sudoku) et en conception d’outils en ligne de commande de style Unix.
On vous demande de générer un fichier **C complet** nommé `solve.c`, qui implémente un **résolveur de Sudoku 9×9** en **backtracking récursif**, compatible avec un programme externe `sudoku` et avec un validateur `validate`.
## Objectif fonctionnel
Le programme compilé (`solve`) doit :
- **Lire une grille Sudoku 9×9 depuis `stdin`**, au format de 81 entiers séparés par des espaces ou des retours à la ligne.
- **Résoudre la grille** par un **algorithme de backtracking récursif** :
- **Afficher la grille complète résolue sur `stdout`** au même format que l’entrée, c’est-à-dire 9 lignes, 9 entiers par ligne, séparés par des espaces.
- Gérer des options en ligne de commande : `--help` : afficher une aide brève sur l’usage du programme, `--version` : afficher un numéro de version (ex. `solve 1.0`), `--verbose` pour activer un **mode détaillé** montrant **visuellement les étapes du backtracking récursif**
## Option `--verbose` (visualisation du backtracking)
Lorsque l’option `--verbose` est activée : Le programme doit **visualiser les étapes de la recherche récursive**. Par exemple (vous êtes libre sur le format tant qu’il est lisible) : Affichage de la grille à chaque placement et/ou retrait de valeur, Ou affichage des coordonnées + valeur essayée / retirée, Utilisation possible d’un niveau d’indentation lié à la profondeur récursive pour rendre le backtracking compréhensible
Ce mode doit être **optionnel** et ne pas polluer la sortie standard de la solution en usage normal (sans `--verbose`).
## Contraintes
Respecter strictement les points suivants :
- Définition globale : `#define WIDTH (9)`
- Implémenter une fonction de résolution par **backtracking récursif** avec le prototype suivant (ou très proche): `bool solve_sudoku(int grid[WIDTH][WIDTH]);`
- Tous les tests de validité (ligne/colonne/bloc 3×3) doivent être factorisés dans des fonctions dédiées, claires et lisibles.
- Le code doit être **C20 portable**, sans allocation dynamique, sans bibliothèque exotique.
## CLI
Le `main` doit :
- Gérer les arguments (`argc`, `argv`) pour : `--help`, `--version`, `--verbose`
- Lire la grille depuis `stdin` (81 entiers) dans `grid`.
- Appeler la fonction de résolution récursive par backtracking.
- Si une solution est trouvée : afficher la grille résolue sur `stdout` (9 lignes, 9 nombres séparés par des espaces), retourner un code de sortie 0.
- Si aucune solution n’est trouvée : éventuellement afficher un message d’erreur sur `stderr`, retourner un code de sortie non nul
## Compatibilité attendue
Le programme doit fonctionner correctement dans les scénarios suivants :
```bash
$ cat grid.txt
0 2 1 0 8 0 0 0 5
6 0 7 9 0 5 4 0 0
0 0 0 4 0 1 0 8 7
1 0 0 0 0 3 0 4 2
0 9 3 0 0 0 1 6 0
0 0 0 1 0 0 0 9 0
2 1 0 8 0 0 0 0 4
0 7 9 0 0 4 0 1 0
0 0 0 0 1 6 0 0 0
$ cat grid.txt | ./solve
# doit afficher la grille complète et résolue sur stdout
```
## Format de la réponse attendue
1. **D’abord** : le code C complet de `solve.c` dans un seul bloc de code, prêt à être compilé avec :
```bash
gcc solve.c -o solve
```
2. **Ensuite** : une courte explication textuelle de :
- la structure du programme,
- l’algorithme de backtracking récursif,
- le comportement de `--verbose`.
Ne poser aucune question supplémentaire. Générer directement le meilleur code possible.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment