Created
December 9, 2025 11:53
-
-
Save yves-chevallier/a189d0e708b406a4ab80b14ba7c49ac7 to your computer and use it in GitHub Desktop.
Prompt Sudoku
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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