{"id":18551322,"url":"https://github.com/morvanzhou/sudoku","last_synced_at":"2025-04-07T08:15:10.651Z","repository":{"id":39331584,"uuid":"164916283","full_name":"MorvanZhou/sudoku","owner":"MorvanZhou","description":"A simple Sudoku generator and solver. 数独生成器和解题器","archived":false,"fork":false,"pushed_at":"2023-01-13T03:36:18.000Z","size":305,"stargazers_count":170,"open_issues_count":0,"forks_count":25,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-31T07:04:37.858Z","etag":null,"topics":["sudoku","sudoku-checker","sudoku-generator","sudoku-solution-finder","sudoku-solver"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MorvanZhou.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-01-09T18:28:56.000Z","updated_at":"2025-03-03T08:32:04.000Z","dependencies_parsed_at":"2023-02-09T14:15:28.697Z","dependency_job_id":null,"html_url":"https://github.com/MorvanZhou/sudoku","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MorvanZhou%2Fsudoku","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MorvanZhou%2Fsudoku/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MorvanZhou%2Fsudoku/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MorvanZhou%2Fsudoku/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MorvanZhou","download_url":"https://codeload.github.com/MorvanZhou/sudoku/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247615377,"owners_count":20967184,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["sudoku","sudoku-checker","sudoku-generator","sudoku-solution-finder","sudoku-solver"],"created_at":"2024-11-06T21:08:39.461Z","updated_at":"2025-04-07T08:15:10.620Z","avatar_url":"https://github.com/MorvanZhou.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# A Sudoku generator and solver\n\nThis is a Sudoku game written in python, default to use Wave Function Collapse method.\n\n## Install\n\n```shell\npip install sudokum\n```\n\n# Generation\n\nA sudoku can be generated with a `mask_rate`. A full solution is generated when passing `mask_rate=0`.\n\n```python\nimport sudokum\n\ng = sudokum.generate(mask_rate=0.7)\nprint(g)\n\"\"\"\n[[1 0 0 5 0 0 0 0 3]\n [0 3 7 0 0 1 0 0 4]\n [0 0 0 0 0 2 0 0 0]\n [0 0 0 0 9 4 0 0 0]\n [0 0 4 0 0 0 0 3 2]\n [0 0 0 3 2 5 0 0 0]\n [0 0 0 0 0 0 2 0 0]\n [7 4 0 0 0 0 0 0 0]\n [8 0 0 0 0 3 1 0 0]]\n\"\"\"\n```\n\nTo visualize the generating procedure, I have made a GUI for animating Wave Function Collapse in sudoku generation.\n\n```python\nimport sudokum\n\nsudokum.display_wfc()\n```\n\n![auto](https://github.com/MorvanZhou/sudoku/raw/main/demo/sudoku_auto.gif)\n\nOr you can get you hand on it by running following code.\n\n```python\nimport sudokum\n\nsudokum.display_wfc(human=True)\n```\n\n![human](https://github.com/MorvanZhou/sudoku/raw/main/demo/sudoku_human.gif)\n\n# Solving\n\nBy using `sudokum.solve()` function, it tries to solve the puzzle.\n\n```python\nimport sudokum\n\ng = sudokum.generate(mask_rate=0.7)\ns = sudokum.solve(g)\nprint(s)\n\"\"\"\n[[1 2 8 5 4 7 6 9 3]\n [6 3 7 9 8 1 5 2 4]\n [4 9 5 6 3 2 7 1 8]\n [2 1 3 7 9 4 8 5 6]\n [5 7 4 1 6 8 9 3 2]\n [9 8 6 3 2 5 4 7 1]\n [3 5 1 4 7 6 2 8 9]\n [7 4 2 8 1 9 3 6 5]\n [8 6 9 2 5 3 1 4 7]]\n\"\"\"\n```\n\nA solving max try number (default to 10) can set as following:\n\n```python\nimport sudokum\n\ns = sudokum.solve(g, max_try=3)\n```\n\n## Manually check solution\n\nIf you have your own solution, you can validate it by following function:\n\n```python\nimport sudokum\n\nok, position_of_problems = sudokum.check(g)\n```\n\n# More Example\n\nMore use cases can be found in my [test files](https://github.com/MorvanZhou/sudoku/tree/main/tests).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorvanzhou%2Fsudoku","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmorvanzhou%2Fsudoku","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorvanzhou%2Fsudoku/lists"}