remix logo

Hacker Remix

Solving Sudoku with the Python package resolver

39 points by goranmoomin 3 hours ago | 4 comments

simonw 1 hour ago

I love this so much. I dug around a bit and figured out how it works - I have an explanation (with an illustrative diagram) here: https://simonwillison.net/2024/Oct/21/sudoku-in-python-packa...

Figuring out how it works is a great way to learn a bit more about how Python packaging works under the hood. I learned that .whl files contain a METADATA file listing dependency constraints as "Requires-Dist" rules.

I ran a speed comparison too. Using the uv pip resolver it took 0.24s - with the older pip-compile tool it took 17s.

ziofill 2 hours ago

but how does it know the constraints?

jsnell 2 hours ago

The constraints are going to be static and independent of the puzzle. So I expect they're encoded in the package dependencies. So for example version 1 of the package sudoku_0_0 will conflict with all of: version 1 of sudoku_[0-8]_0; version 1 of sudoku_0_[0-8]; version 1 of [012]_ [012].

thangngoc89 1 hour ago

This is the content of sudoku_0_0-1-py3-none-any.whl. So when the (0,0) cell is 1, none of the cells in the same row, column and subgrid should be 1.

    Requires-Dist: sudoku_0_1 != 1
    Requires-Dist: sudoku_0_2 != 1
    Requires-Dist: sudoku_0_3 != 1
    Requires-Dist: sudoku_0_4 != 1
    Requires-Dist: sudoku_0_5 != 1
    Requires-Dist: sudoku_0_6 != 1
    Requires-Dist: sudoku_0_7 != 1
    Requires-Dist: sudoku_0_8 != 1
    Requires-Dist: sudoku_1_0 != 1
    Requires-Dist: sudoku_2_0 != 1
    Requires-Dist: sudoku_3_0 != 1
    Requires-Dist: sudoku_4_0 != 1
    Requires-Dist: sudoku_5_0 != 1
    Requires-Dist: sudoku_6_0 != 1
    Requires-Dist: sudoku_7_0 != 1
    Requires-Dist: sudoku_8_0 != 1
    Requires-Dist: sudoku_0_1 != 1
    Requires-Dist: sudoku_0_2 != 1
    Requires-Dist: sudoku_1_0 != 1
    Requires-Dist: sudoku_1_1 != 1
    Requires-Dist: sudoku_1_2 != 1
    Requires-Dist: sudoku_2_0 != 1
    Requires-Dist: sudoku_2_1 != 1
    Requires-Dist: sudoku_2_2 != 1