How Daily Sorting Challenges Are Generated and Verified

Opening a Daily game does not make a new puzzle on the spot. SortingGames.io keeps a library of checked levels, builds a dated schedule ahead of time, and then loads the level assigned to the current UTC date.

Quick answer

One UTC date, one fixed puzzle

The Daily page reads today’s level ID from a saved schedule. Water and Ball levels are checked with their own solvers. Stack levels are checked by replaying a saved answer path.

Your browser can remember where you stopped, but it cannot swap today’s puzzle for another one.

The Daily Challenge Flow

There are two separate jobs: checking levels and assigning dates. Keeping them separate makes the result easy to test.

  1. 1
    Level library

    Each game has a stored list of puzzle layouts and an enabled setting.

  2. 2
    Rule check

    The Water, Ball, or Stack test checks the layout using that game’s real move rules.

  3. 3
    Date schedule

    Enabled level IDs are placed into a fixed, shuffled calendar using a saved seed and schedule version.

  4. 4
    UTC lookup

    When the page loads, the server finds today’s date and returns the assigned level.

  5. 5
    Local progress

    The browser saves your moves and time on this device without changing the schedule.

A real lookup for 2026-10-22 UTCThese labels are read from the current schedule and challenge files.
UTC date2026-10-22

How the UTC Date Picks a Fixed Level

The server gets today’s date in UTC and uses a simple date key such as 2026-08-20. Each Daily game has its own schedule, so the same date points to one Water level, one Ball level, and one Stack level.

This is why players see the same puzzle at the same moment. The change happens at 00:00 UTC, not at midnight in every local time zone. If you play near midnight, the date shown on the page may be one day ahead of or behind your local calendar.

Why refresh does not reroll the board

There is no random level choice in the page load. A refresh asks for the same UTC date, and the schedule gives back the same saved level ID. Past assignments are kept when schedules are rebuilt.

How Short-Term Repeats Are Avoided

The scheduler does not pick one ID independently every morning. It shuffles all enabled IDs into a cycle. Every ID appears once in that cycle before the next shuffled cycle begins.

If the first ID in a new cycle matches the last ID from the old cycle, the first two IDs are swapped. That stops an immediate back-to-back repeat at the cycle boundary.

20enabled Water levelsOne full cycle before an ID returns
24enabled Ball levelsOne full cycle before an ID returns
24enabled Stack levelsOne full cycle before an ID returns

The shuffle is repeatable because it uses a saved seed, schedule version, and cycle number. It feels mixed, but it is still testable. It is not a live random draw.

How Water, Ball, and Stack Levels Are Verified

The three games do not share one answer checker. Their moves are different, so each one needs its own proof that a level can finish.

GameFirst checksHow a finish is provedSaved answer path?
Water SortBottle shape, capacity, color totals, empty space, IDs, and duplicate layoutsReplays the stored pours, then runs the Water solver on the original bottle setYes
Ball SortTube shape, capacity 4, color totals, exactly two empty tubes, IDs, and duplicate layoutsRuns the Ball solver and checks every returned one-ball moveNo; solved when needed
Stack SortRows, columns, tile IDs, hidden tiles, hand tile, locks, and move limitReplays the saved moves and checks for a win with no hidden question tile leftYes
Water

Stored route plus solver check

A Water level includes a list of pours. The validator replays that list under the connected-liquid rules and checks the final bottles. It also asks the local Water solver to find a route without adding helper bottles.

Ball

Fresh solver path during validation

A Ball level stores its starting tubes, not one fixed public answer. The validator solves the board, then replays the returned path to make sure every move transfers exactly one exposed top ball.

Stack

Reference moves, no solver

A Stack level stores the hand, columns, hidden tiles, move limit, and reference moves. The checker plays those moves in order. The level passes only if the path finishes and reveals every question tile.

This difference also appears in the Level Library: Water and Stack can show stored route lengths, while Ball says Solved on demand.

What Keeps a Challenge Out of the Daily Pool?

The schedule builder only uses levels marked enabled. The checker does not quietly repair a bad board or pretend it passed. It reports an error so the level can be fixed or left disabled.

Bad level data

A missing or repeated ID, an overfilled container, a wrong color total, or a malformed tile can stop validation.

No checked finish

A Water or Ball board stays out if its rule-specific solver cannot finish it. A Stack board stays out if its saved moves fail, exceed the move limit, or leave a question tile hidden.

Wrong working space

Water needs at least one empty bottle in validation. Current Ball levels must begin with exactly two empty tubes. Stack uses a hand tile and columns instead of empty containers.

Duplicate layout

Exact repeated Water or Ball starting layouts are rejected. Water also reports very similar bottle arrangements for review.

The schedule is not the judge. It only places enabled IDs on dates. The level checks happen before the schedule is treated as ready for players.

What localStorage Saves — and What It Does Not

localStorage is the small browser store used to bring back a game on the same device. It is optional: the puzzles still play if browser storage is unavailable.

Saved in this browser

  • The current board or stack state
  • Move count and undo history
  • Elapsed time
  • Completion state
  • Best move count for that level
  • Whether a Water or Ball hint was used

Not chosen by localStorage

  • Today’s level ID
  • The UTC date schedule
  • The challenge library
  • Solver or replay checks
  • Another player’s progress
  • An account or cross-device save

Clearing browser data can remove your unfinished game and local best result. It cannot change which puzzle is assigned to today. The next load still asks the server schedule for the same UTC date.

The Actual Testing Process

Before a set of Daily levels is ready, the checks move from the smallest part to the full page. This is the order used by the project’s current scripts and pages:

  1. Read every enabled level. Check its ID, label, container or column data, capacity, and other required fields.
  2. Check the rules. Count colors, verify empty space, and reject moves or states that the game itself would not allow.
  3. Prove a finish. Solve Water and Ball with their own move code. Replay the stored Stack path with the Stack move code.
  4. Check the schedule. Make sure every scheduled ID is enabled, full cycles contain no duplicate ID, and neighboring dates do not use the same level.
  5. Simulate reloads. The Ball and Stack production tests read today’s ID repeatedly and confirm that it stays the same. Water uses the same fixed-date lookup on the live page.
  6. Test the page. Open today and archive routes, make moves, undo, restart, use the available hint or replay, reload, and confirm that local progress returns without changing the puzzle.

The checks behind this guide

validate-water-sort-challenges.js checks the Water pool. validate-ball-sort-challenges.js and the Ball production test check the Ball pool and schedule. The Stack production test validates every Stack level by replaying its stored moves and also checks the schedule.

This is also why the site can explain difficulty with real data instead of guessing. The puzzle difficulty guide reads the same enabled levels, and the Daily game comparison explains what playing each rule set feels like.

See the System from the Player Side

Open the library to browse the reusable levels, or play today’s fixed challenge in any of the three rule sets.

FAQ

Does refreshing the page choose another challenge?

No. The server looks up the same UTC date in a saved schedule. Refreshing can restore your local progress, but it does not choose a different level.

Why can the Daily date differ from my local date?

The three games use UTC so every player changes puzzles at the same moment. Near local midnight, your calendar date and the UTC date may be different.

Can clearing browser storage change today's puzzle?

No. Clearing local storage removes saved progress and local best results on that device. The date-to-level choice comes from the site schedule.

Are Water Sort and Ball Sort checked in the same way?

Both are checked with their own rules and solver code, but not in exactly the same way. Water levels keep a stored solution and are also solver-checked. Ball levels are solved during validation and the returned one-ball move list is checked.

Does Daily Stack Sort use a solver?

No. Each Stack level keeps a reference move path. The test replays that path and checks that every column finishes, no question tile stays hidden, and the move limit is long enough.

How are quick repeats avoided?

Enabled level IDs are shuffled into a fixed cycle. Every ID is used once before the next cycle begins, and the first item of a new cycle is changed if it matches the previous day.

Explore Sorting Game Types

Choose the sorting style that matches the way you want to play.