{"id":23539444,"url":"https://github.com/knoblauchpilze/sudoku","last_synced_at":"2026-05-15T20:04:19.567Z","repository":{"id":124352645,"uuid":"484493871","full_name":"Knoblauchpilze/sudoku","owner":"Knoblauchpilze","description":"The famous numbers game","archived":false,"fork":false,"pushed_at":"2024-01-10T17:08:08.000Z","size":365,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-24T02:39:35.772Z","etag":null,"topics":["cpp","opengl","pixelgameengine","sudoku-solver"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Knoblauchpilze.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-04-22T16:03:44.000Z","updated_at":"2025-01-16T20:15:41.000Z","dependencies_parsed_at":"2024-01-10T18:31:42.766Z","dependency_job_id":"ea0faec4-51e4-43ab-8499-0f1a8f166e00","html_url":"https://github.com/Knoblauchpilze/sudoku","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Knoblauchpilze/sudoku","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Knoblauchpilze%2Fsudoku","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Knoblauchpilze%2Fsudoku/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Knoblauchpilze%2Fsudoku/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Knoblauchpilze%2Fsudoku/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Knoblauchpilze","download_url":"https://codeload.github.com/Knoblauchpilze/sudoku/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Knoblauchpilze%2Fsudoku/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33077981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T11:35:32.926Z","status":"ssl_error","status_checked_at":"2026-05-15T11:35:31.362Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","opengl","pixelgameengine","sudoku-solver"],"created_at":"2024-12-26T04:36:01.315Z","updated_at":"2026-05-15T20:04:19.539Z","avatar_url":"https://github.com/Knoblauchpilze.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# sudoku\n\nA simple app to play sudoku and solve them if needed. The application allows to generate new puzzles and a load/save mechanism is also provided.\n\nThe user can choose to solve the sudokus themselves, or solve it automatically which is very fast but not that fun in the long run.\n\n# Installation\n\n- Clone the repo: `git clone git@github.com:Knoblauchpilze/sudoku.git`.\n- Clone dependencies:\n    * [core_utils](https://github.com/Knoblauchpilze/core_utils)\n    * [maths_utils](https://github.com/Knoblauchpilze/maths_utils)\n- Go to the project's directory `cd ~/path/to/the/repo`.\n- Compile: `make run`.\n\nDon't forget to add `/usr/local/lib` to your `LD_LIBRARY_PATH` to be able to load shared libraries at runtime. This is handled automatically when using the `make run` target (which internally uses the [run.sh](data/run.sh) script).\n\n# General principle\n\nThe application is structured in various screens:\n* the home screen.\n* the load game screen\n* the game mode screen\n* the difficulty selector screen\n* the game screen\n\n![Home screen](resources/home_screen.png)\n\nEach screen serves a purpose and the user can navigate through one to the other to configure the app and choose what they want to do.\n\n# Game mode\nWhen selecting `New Game` the user then reaches the game mode selection screen. The game mode can be one of two things:\n* Play a regular sudoku and try to solve it.\n* Enter a sudoku and solve it automatically.\n\n![Game mode](resources/game_mode_screen.png)\n\nThere's also the possibility to come back to the main menu.\n\n# Interaction\n\nFor the solver mode or for the regular mode, the user can interact with the grid in different ways.\n\nAt any given time, the position of the active cell is displayed using a blue overlay. Different actions are possible based on which cell is active.\n\n![Interactions](resources/interactions.png)\n\n## Generated numbers\n\nGenerated numbers are displayed in light green and can't be changed by the user. They correspond to the numbers that have been created when generating a new sudoku for example. No action is possible when the active cell is one of those.\n\n## Solved numbers\n\nSolved numbers are displayed in orange and correspond to the numbers which are generated by the solver. These numbers are certain and should usually not be modified. The user has the possibility to delete them though.\n\n## User generated numbers\n\nThese numbers are displayed in cyan. They can be modified or deleted as the user wants. They are not replaced by the solver: when applying it, the app assumes that the user knows what they are doing.\n\n## Interacting with the numbers.\n\nThe user can:\n* press any digit on the numeric keypad and add the corresponding number in a cell (if possible).\n* press the `del` button and remove the digit currently in the active cell (if possible).\n* left click with the mouse, placing (if possible) the next digit in the active cell compared to the active one (so if a 6 is in the cell, a 7 will be placed, then 8, etc.). Once `9` is reached the app cycles back to `1`.\n* right click with the mouse, deleting the current digit in the active cell (if possible).\n\nEach interaction is filtered by the app and only performed if it is possible. For example if there's already an `8` in the box where the user wants to put an `8` this value will be considered invalid.\n\nThis means that if the user presses `8` on the numeric keypad, nothing will happen. Similarly, if the user left clicks on the mouse in any cell in the box, the `8` value will be skipped.\n\nWe don't detect 'complex' invalid numbers, just the ones which can easily be detected as invalid because of existing digits. The number which will be possible to place in a cell are exactly the ones which would appear in the main game view as a hint (see [here](#bottom-banner)).\n\n## Controlling the grid\n\nThe user can save the current grid at any time by hitting the `s` key. A file will be generated and saved in the [saves](data/saves/) with a uniquely generated name.\n\nThe user can also exit the application at any time using the `Esc` key.\n\n# Play mode\n\n## Difficulty selection\n\nWhen the user chooses to play, they must then choose the difficulty level. There are three choices (easy, medium and hard) and each one corresponds to more or less digits initially present on the board.\n\n![Difficulty selection](resources/difficulty_screen.png)\n\n## Playing a game.\n\nWhen the user picked the difficulty level, the main screen appears:\n\n![Game screen](resources/game_screen.png)\n\nThere are multiple information available to the user to help solving the sudoku.\n\n### Top banner\n\nThe top banner is always visible and displays two kind of information.\n\nOn the left side the number of digits of a certain value is displayed: the background is light yellow in case there are some missing and light green in case all of them have been placed in the grid already. Note that this doesn't mean that they are all correct.\n\nOn the right side are two buttons: the `Solve` one allows to solve the current sudoku (might be impossible in case some digits are misplaced) and the `Reset` one allows to generate a new sudoku, losing all the progress already made.\n\n### Bottom banner\n\nThe bottom banner is only visible after a small delay when the user waits on an active cell. This displays the list of digits that can be placed on the current cell. As explained in the [interaction](#interaction) part, only the digit shown as valid here will be used in the interaction process.\n\n### Finishing the game\n\nWhen the user is done with the game (either in a legit way or by clicking the `Solve` button), an alert is displayed for a short time, before bringing the user back to the main screen, where more games can be played.\n\n# Solver mode\n\nIf the user chooses the solver mode, the app now displays an empty grid (except if the user loaded a save game before).\n\n![Solver overview](resources/solver_empty.png)\n\nThe user can move around in the grid and add numbers as described in the relevant [section](#interaction).\n\nWhen the user is ready, they can click on the `Solve` button. There are then three possibilities:\n* the grid is solvable in which case the solver will find the solution.\n* the grid is not uniquely solvable: the solver won't work and report an error.\n* the grid is not solvable: the solver will report an error.\n\nWhen the solver succeeds, an alert is displayed like so:\n\n![Solved alert](resources/solved_alert.png)\n\nWhen the solver fails, an alert is displayed like so:\n\n![Unsolvable alert](resources/unsolvable_alert.png)\n\nNote that the user can always come back to the main screen using the back button at the bottom of the screen.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fknoblauchpilze%2Fsudoku","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fknoblauchpilze%2Fsudoku","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fknoblauchpilze%2Fsudoku/lists"}