{ "info": { "author": "Henrik Blidh", "author_email": "henrik.blidh@nedomkull.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "DLXSudoku\n=========\n\n|Build Status| |PyPi version| |PyPi downloads| |PyPi license| |Coverage\nStatus|\n\nSudoku Solver written in pure Python with no dependencies.\n\nIt solves Sudokus of sizes ``N x N`` by pure induction as far as is\npossible, and then uses an optional `Dancing\nLinks `__ brute force\nsolver, when the basic induction is not enough.\n\nInstallation\n------------\n\nInstall with pip:\n\n::\n\n pip install dlxsudoku\n\nTesting\n-------\n\nTests can be run using ``pytest``:\n\n::\n\n py.test tests\n\nThe tests make a HTTP request to a file containing several Sudokus on\n`Project\nEuler `__.\n\nUsage\n-----\n\nA Sudoku stored in a file can be solved as such:\n\n.. code:: python\n\n from dlxsudoku import Sudoku\n\n s = Sudoku.load_file('path/to/sudoku.sud')\n s.solve(verbose=True, allow_brute_force=True)\n\nAlternatively, if your Sudoku is stored in string variable it can be\nsolved in the following fashion:\n\n.. code:: python\n\n from dlxsudoku import Sudoku\n\n sudoku_string_1 = \"030467050920010006067300148301006027400850600090200400005624001203000504040030702\"\n sudoku_string_2 = \"# Example Sudoku\\n\" + \\\n \"*72****6*\\n\" + \\\n \"***72*9*4\\n\" + \\\n \"*9*1****2\\n\" + \\\n \"*******4*\\n\" + \\\n \"82*4*71**\\n\" + \\\n \"**9*6*8**\\n\" + \\\n \"***9**6**\\n\" + \\\n \"**3*72*9*\\n\" + \\\n \"*6*843*7*\"\n\n s1 = Sudoku(sudoku_string_1)\n s1.solve()\n print(s1.to_oneliner())\n\n s2 = Sudoku(sudoku_string_2)\n s2.solve()\n print(s2)\n\n**DLXSudoko treats a Sudoku with multiple solutions as a faulty one and\nraises a** ``dlxsudoku.exceptions.SudokuHasMultipleSolutionsError``\n**exception in such a situation.**\n\nUse from terminal\n~~~~~~~~~~~~~~~~~\n\nDLXSudoku also installs a console entry point. Can solve Sudokus from\nstring or from path:\n\n.. code:: shell\n\n solve-sudoku --sudoku 030467050920010006067300148301006027400850600090200400005624001203000504040030702\n\nor\n\n.. code:: shell\n\n solve-sudoku --path \"path/to/sudoku.sud\"\n\nSudoku formatting\n~~~~~~~~~~~~~~~~~\n\nA Sudoku file or string should be structured in the following manner:\n\n::\n\n # Optional comment or metadata\n *72****6*\n ***72*9*4\n *9*1****2\n *******4*\n 82*4*71**\n **9*6*8**\n ***9**6**\n **3*72*9*\n *6*843*7*\n\nor as a one-liner:\n\n::\n\n 030467050920010006067300148301006027400850600090200400005624001203000504040030702\n\nAny character other than ``[1-9]`` may be used as a placeholder for\nunknowns.\n\nReferences\n----------\n\nThe Dancing Links code has been adapted from `Algorithm X in 30\nlines! `__,\nonly modified slightly to accommodate class structure and Python 2.6.\n\n.. |Build Status| image:: https://travis-ci.org/hbldh/dlxsudoku.svg\n :target: https://travis-ci.org/hbldh/dlxsudoku\n.. |PyPi version| image:: https://img.shields.io/pypi/v/dlxsudoku.svg\n :target: https://pypi.python.org/pypi/dlxsudoku\n.. |PyPi downloads| image:: https://img.shields.io/pypi/dm/dlxsudoku.svg\n :target: https://pypi.python.org/pypi/dlxsudoku\n.. |PyPi license| image:: https://img.shields.io/pypi/l/dlxsudoku.svg\n :target: https://pypi.python.org/pypi/dlxsudoku\n.. |Coverage Status| image:: https://coveralls.io/repos/github/hbldh/dlxsudoku/badge.svg?branch=master\n :target: https://coveralls.io/github/hbldh/dlxsudoku?branch=master", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/hbldh/dlxsudoku", "keywords": "sudoku,sudoku solver,dancing links", "license": "GNU GPLv2", "maintainer": null, "maintainer_email": null, "name": "dlxsudoku", "package_url": "https://pypi.org/project/dlxsudoku/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/dlxsudoku/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/hbldh/dlxsudoku" }, "release_url": "https://pypi.org/project/dlxsudoku/0.10.3/", "requires_dist": null, "requires_python": null, "summary": "Sudoku Solver in pure Python with no dependencies", "version": "0.10.3" }, "last_serial": 2065689, "releases": { "0.10.0": [ { "comment_text": "", "digests": { "md5": "93ca53261179a4d9ccef21827f43276d", "sha256": "b2671b717e0347b968fc33ffdd9b714bb7bd01e35d61df2a41f9a545d740ae52" }, "downloads": -1, "filename": "dlxsudoku-0.10.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "93ca53261179a4d9ccef21827f43276d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12010, "upload_time": "2016-03-03T15:13:46", "url": "https://files.pythonhosted.org/packages/7b/cd/231df26b620319427d25ec2becd47e23b12bb20c4258dd677cb4eaf99d42/dlxsudoku-0.10.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04b633c1115eaab09d1d6fc71906b9ef", "sha256": "07862e94289b7e4f8f27c1d57f999b4f9b54dc49c8cdf5280976130fe72690b4" }, "downloads": -1, "filename": "dlxsudoku-0.10.0.tar.gz", "has_sig": false, "md5_digest": "04b633c1115eaab09d1d6fc71906b9ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15136, "upload_time": "2016-03-03T15:14:01", "url": "https://files.pythonhosted.org/packages/71/9b/c0794fae949360c431e55d43b4973aee4d4c98a98dc347e108dc38750534/dlxsudoku-0.10.0.tar.gz" } ], "0.10.1": [ { "comment_text": "", "digests": { "md5": "2257d5cafb511cee398d505cbcf8b769", "sha256": "4a63e755bcca00fcc8bd116dd952978171ef0dda9ce14eb3e68fe1e39bb9e877" }, "downloads": -1, "filename": "dlxsudoku-0.10.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2257d5cafb511cee398d505cbcf8b769", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12158, "upload_time": "2016-03-06T19:27:51", "url": "https://files.pythonhosted.org/packages/97/fd/3f3934a6d829cd40c18ad1f245b7b52bb6916f0acaba66ec2f6fe11f2d76/dlxsudoku-0.10.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "72cf8421327509e527aa4abe0d17b0c2", "sha256": "0fe4d2b78b2af7cb9c0a7c5b12725f81b56fd306ee80efb03cdd2061fb645881" }, "downloads": -1, "filename": "dlxsudoku-0.10.1.tar.gz", "has_sig": false, "md5_digest": "72cf8421327509e527aa4abe0d17b0c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15274, "upload_time": "2016-03-06T19:27:56", "url": "https://files.pythonhosted.org/packages/3a/82/0fba433f99935b939e1bec0bbccc7bf5320763ca611de860b88ea9421c59/dlxsudoku-0.10.1.tar.gz" } ], "0.10.2": [ { "comment_text": "", "digests": { "md5": "9968535210711a80c806ca00e67758c5", "sha256": "d174962cd8d3d159117b3e6be846e2beeacb729a7dea260cbae62167be020872" }, "downloads": -1, "filename": "dlxsudoku-0.10.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9968535210711a80c806ca00e67758c5", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 12188, "upload_time": "2016-04-15T12:01:56", "url": "https://files.pythonhosted.org/packages/37/08/d2a8b366da83c13565871bbf3ae2ee612a67a72e43a0f52af686e15f7d77/dlxsudoku-0.10.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "922296a80bb61b3869a336684618b65e", "sha256": "d4962da12036a0cd82178f01136f227f482fb226fac5321b78f3a405c68577a5" }, "downloads": -1, "filename": "dlxsudoku-0.10.2.tar.gz", "has_sig": false, "md5_digest": "922296a80bb61b3869a336684618b65e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15965, "upload_time": "2016-04-15T12:01:45", "url": "https://files.pythonhosted.org/packages/4b/84/69e0c1eaca56433ceacb7a7449e23f977a57bed07c536e92787723980587/dlxsudoku-0.10.2.tar.gz" } ], "0.10.3": [ { "comment_text": "", "digests": { "md5": "925cc190112e2b01fe5dd1e195bb3211", "sha256": "43e86e4e3d9eb42fcec62cf0eed02043ce5c36dbd87e2f2afb234209a6285253" }, "downloads": -1, "filename": "dlxsudoku-0.10.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "925cc190112e2b01fe5dd1e195bb3211", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 12199, "upload_time": "2016-04-15T15:48:35", "url": "https://files.pythonhosted.org/packages/df/43/ebad5140625cbb2e9c817b8f955e997efa714d7d20a5d72aaa40a68298ab/dlxsudoku-0.10.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c77aa7f2533c9703d7ed7e198c01f355", "sha256": "31713024e8d4e0c2ce10028eb7c5d2e788639d5df66ea55b4a38dc9bed52a719" }, "downloads": -1, "filename": "dlxsudoku-0.10.3.tar.gz", "has_sig": false, "md5_digest": "c77aa7f2533c9703d7ed7e198c01f355", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15326, "upload_time": "2016-04-15T15:48:11", "url": "https://files.pythonhosted.org/packages/b2/8e/d0cc930e410ab643cd5b8e78a0d62f086f0b509ac38740948667a1b74e6b/dlxsudoku-0.10.3.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "6c8aa6bebdf3bf681e275d262f4ee171", "sha256": "c85759fb60d989bb352326ae7c6f8103af8072ea6135bdbc03c65bafe954a138" }, "downloads": -1, "filename": "dlxsudoku-0.9.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6c8aa6bebdf3bf681e275d262f4ee171", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10587, "upload_time": "2016-01-13T15:11:15", "url": "https://files.pythonhosted.org/packages/f0/b6/98eb9f047dc6afda7e7532067bed69ae55c6a0fb4ce40ca5d43df5e1159f/dlxsudoku-0.9.1-py2.py3-none-any.whl" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "bf7e407d9f5ca11155a1045b9d906179", "sha256": "561b7e657ebc6269727eaf1eb44ee62f95937d1f3cdf58ec1e8664c547a2c427" }, "downloads": -1, "filename": "dlxsudoku-0.9.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bf7e407d9f5ca11155a1045b9d906179", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11061, "upload_time": "2016-02-05T21:54:19", "url": "https://files.pythonhosted.org/packages/d9/13/c6e413ec95c945b61b5006f1158b432a483ed878a74938a4b7084c03d03b/dlxsudoku-0.9.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16838ee7a41e0ee43932687429f4f9f0", "sha256": "5f0eecd1f64ea87271501b8c6a41bb9388a29aad4d0c1aad02c42b1334b19b0e" }, "downloads": -1, "filename": "dlxsudoku-0.9.2.tar.gz", "has_sig": false, "md5_digest": "16838ee7a41e0ee43932687429f4f9f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14608, "upload_time": "2016-02-05T21:54:24", "url": "https://files.pythonhosted.org/packages/0e/e7/a7258f6df7a184fe5a11f73ecd9562078877fedd2612d45419a26f61dde2/dlxsudoku-0.9.2.tar.gz" } ], "0.9.3": [ { "comment_text": "", "digests": { "md5": "32fbb7749ba479b0b4c2e248766ea704", "sha256": "44116030f726b0d2e7af59efe7eb59f422991ff429f6d8b4e905bddf08df20e7" }, "downloads": -1, "filename": "dlxsudoku-0.9.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "32fbb7749ba479b0b4c2e248766ea704", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11561, "upload_time": "2016-03-01T06:43:03", "url": "https://files.pythonhosted.org/packages/95/11/e3881f772789f439540577c272bbf5adeaea74aaa64ea2749ca638111877/dlxsudoku-0.9.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "562ea44ef3940dc6eedc91bd64e875ca", "sha256": "151500bb16ff1681bb29bdbb049bb6bdb34e9401b75503a25ebbd9540ed7c9f7" }, "downloads": -1, "filename": "dlxsudoku-0.9.3.tar.gz", "has_sig": false, "md5_digest": "562ea44ef3940dc6eedc91bd64e875ca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14835, "upload_time": "2016-03-01T06:43:27", "url": "https://files.pythonhosted.org/packages/24/c8/adb14f1ca3051fda12baf8bec9b67231d5e9018dbb341e0eca09b571d5a3/dlxsudoku-0.9.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "925cc190112e2b01fe5dd1e195bb3211", "sha256": "43e86e4e3d9eb42fcec62cf0eed02043ce5c36dbd87e2f2afb234209a6285253" }, "downloads": -1, "filename": "dlxsudoku-0.10.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "925cc190112e2b01fe5dd1e195bb3211", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 12199, "upload_time": "2016-04-15T15:48:35", "url": "https://files.pythonhosted.org/packages/df/43/ebad5140625cbb2e9c817b8f955e997efa714d7d20a5d72aaa40a68298ab/dlxsudoku-0.10.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c77aa7f2533c9703d7ed7e198c01f355", "sha256": "31713024e8d4e0c2ce10028eb7c5d2e788639d5df66ea55b4a38dc9bed52a719" }, "downloads": -1, "filename": "dlxsudoku-0.10.3.tar.gz", "has_sig": false, "md5_digest": "c77aa7f2533c9703d7ed7e198c01f355", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15326, "upload_time": "2016-04-15T15:48:11", "url": "https://files.pythonhosted.org/packages/b2/8e/d0cc930e410ab643cd5b8e78a0d62f086f0b509ac38740948667a1b74e6b/dlxsudoku-0.10.3.tar.gz" } ] }