Git Product home page Git Product logo

sudoku's People

Contributors

jkomoros avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

floatinghotpot

sudoku's Issues

Train the model on 'unrealistic' or 'extreme' puzzles

  • Our current difficulty is only tuned for 'realistic' puzzles: puzzles that actually have a large number of cells filled.
    • We should include a lot of trivially easy puzzles in the difficulty training set (and really really hard ones, requiring tons of guesses) to make
      sure we're training for a broad range of puzzles. We should inject these in (optionally) after phase 1.

Perhaps make a new 'Experimental' bucket on komoroske.com/sudoku that people can opt in to solving.

Make it so NewGrid grabs a grid from the gridCache if possible

  • Make it so NewGrid grabs a grid from grid cache if possible.
    • Actually call grid.Done() when we're done (we do in a lot of cases, but definitely not all)
    • We tried to do this but got CRAZY errors, which are hard to track down. Turns out that there is some possibility for slippage in grids, somehow. Need to solve that.
      • It's possible these come from some of the tests that dig deep into grids/cells and set things weird. Will have to audit.
        • hst_single_test looks like a good candidate.

A way for techniques to import the results of other techniques

A lot of techniques seem to duplicate a lot of work.

A way for technique finders to import the results of other techniques. For example, onlylegalnumber should import obviousincollection results and not duplicate those. And hiddensubset and nakedsubset should trade their results as input to the others. It's not clear if this additional layers of calculation is worth it or not...

Consider a copy-on-write version of Grid for performance

* This is hard.
* Grids can have parents. If they do, they are a "sparse grid".
    * No, should be a SparseGrid with a *Grid member.
    * SparseGrid has a Cell() method that looks in its cache. if it doesn't exist, looks to parent for one.
* SparseCell is soemthing that looks like a cell but actually is a wrapper around one with a pointer back to the sparseGrid it's from.
    * Sparsecells have their own trapping of any modifiying calls that then call back to the sparseGrid (they know which it is) with the new cell itself to put in the cache. Then the SparseCell can be thrown away.
* Simplest (no caching): Whenever you want a cell, you call grid.Cell(), which sees if it has one, otherwise returns one from another cell.

Build mobile version

  • Get rid of drawers
  • Options drawer fixed pos at bottom. Shows timer, tapping to open to do new puzzle, etc
  • marks and numbers in horizontal array of buttons always showing.
  • swiping left/right/top/down selects cell
  • Swiping with two fingers in the four directions selects next unfilled cell in that direction
  • Below the two tranches of marks/numbers buttons are buttons tofill all, remove invalid, etc
  • Switch to marks in regular position 9x9 grid
  • Shortcuts show up in a hint at beginning of each new game
  • Get rid of status bar
  • manifest, sw
  • hall of fame shows up in modal at end

NonFill steps that don't end up being directly necessary to place a cell should be omitted

  • In a perfect world, NonFill steps that don't end up being necessary to actually place a cell in the future would not be included.
    • This may be a side effect of other techinques taking a "key" cell (the cells affected last move) to focus more intensely on. This mirrors human behavior more closely.
    • The way to do this, I think, is to mirror the guess branch logic in HumanSolve. Whenever we pick a nonfill stepp, we have to fill forward until we find the first fill step. Then we need to verify that the cell picked had its possibilities reduced by the interveining non fill steps.
      • This could get expensive.
      • This will be easier to do if we split the techniques up into the tranches and only dip into nonfill when no fills are available.
      • Presumably at each step after a nonfill we try ALL possible fill steps and see if any of them are one of the cells whose possibilties have been reduced since the "branch"

When generating grids, take a target difficulty and stop early if we pass it

This is to address the fact that the puzzles generated only very, very rarely have low difficulties.

This assumes that as you remove cells puzzles get more and more difficult.

This could be extremely expensive.

  • When generating grids, at every step check the difficulty. If it's above the target, go back to the most recent known good difficulty and return that.

Grid.Difficulty returns NaN in some cases

* When the grid isn't solveable with HumanSolve. ... But shouldn't that be impossible?
    * Maybe when human solve detects at the beginning that it has multiple solutions? But how would that even be generated by Grid?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.