Word LadderDaily Detective Color MatcherMath Speed Test Odd One OutStroop Test One Stroke Puzzle
BlogAboutContact PrivacyTerms & ConditionsDisclosure

Connect the dots. Fill every cell.

Coloured dot pairs appear on a grid. Connect each pair with a continuous path. Paths cannot cross. Every single cell must be covered. Every puzzle is generated fresh โ€” unlimited, unique, impossible to repeat.

๐ŸŽ‰
Solved!
Drag from a dot to start
Time
โ€”
Moves
โ€”
Personal best
โ€”
Day streak
โ€”

How One Stroke Puzzle works

A grid of cells appears with coloured dot pairs โ€” red dot, red dot somewhere else; blue dot, blue dot; and so on. Your job is to draw a continuous path connecting each pair of same-coloured dots. Drag from any dot and trace a route to its matching partner.

Two rules make this hard. First, paths cannot cross โ€” once a cell is occupied by one colour, no other colour can pass through it. Second, when you finish, every single cell on the grid must be filled. You cannot leave any cell empty. These two rules together mean that the exact route of every path matters for every other path.

Every puzzle is procedurally generated fresh using a Hamiltonian path algorithm that guarantees every cell can be filled and every puzzle has at least one valid solution. The Daily Challenge uses a date seed so every player gets the same puzzle each day. Two modes are on offer: One Stroke Lines gives you several coloured pairs to connect at once, while Color Fill strips it back to a single glowing line that must snake through every cell on the board on its own, start dot to end dot, without ever crossing itself.

Dragging and undoing

Drag from a coloured dot to draw that colour's path. If you go the wrong way, drag backward through your own path to retrace and undo moves. Pressing the Undo button removes the last move. Reset clears the current colour's path so you can start it again.

Why cells must all be filled

This constraint is what makes the puzzle non-trivial. It forces you to plan each path so it fills the "wasted" space, not just the most direct route. The shortest path between two dots almost never fills all the required cells โ€” you have to wind each path through the empty space deliberately.

How to solve it faster

01

Start with the most constrained pair โ€” two dots that are in a corner or have very few route options. Solving them first limits the space for other pairs in a predictable way.

02

Think in regions. If a section of the grid can only be reached by one colour, that colour's path must pass through it. Identifying these exclusive zones tells you where each path must go.

03

Every cell must be filled. If you have connected all pairs but there are empty cells left, at least one path must be rerouted to wind through those cells. Look for which colour is adjacent to the empty area.

04

Use undo freely. Unlike most puzzles, undoing is not a failure here โ€” it is the expected method. Treat each dead end as information that tells you which direction to try next.

The mathematics behind the puzzle

This type of puzzle sits at the intersection of two mathematical problems. The "connect the pairs" structure is a variant of the disjoint path problem in graph theory, which asks whether K pairs of terminals in a graph can be connected by K mutually non-intersecting paths. On a grid graph, this problem can be verified in polynomial time for small K but becomes NP-complete as K grows โ€” which is why harder versions of the puzzle feel genuinely difficult rather than merely tedious.

The "fill every cell" constraint converts the problem into a variant of the Hamiltonian path problem. The paths together must collectively visit every vertex of the grid exactly once, which is equivalent to partitioning a Hamiltonian path through the entire grid into K segments. This is why the puzzle generator works by constructing a Hamiltonian path first and then dividing it โ€” it guarantees both solvability and complete cell coverage by construction.

The practical result is a puzzle type that scales elegantly with grid size. A 4ร—4 grid with 3 colour pairs takes most people under a minute. A 7ร—7 grid with 6 pairs can take five to ten minutes of genuine reasoning. The same mathematical structure underlies both, but the exponential growth in possible path combinations means the difficulty curve is steep.

Common questions

How does this puzzle work?
Coloured dot pairs appear on a grid. Draw a continuous line connecting each pair of same-coloured dots. Lines cannot cross each other and every cell on the grid must be filled by a line. The puzzle is solved when all pairs are connected and all cells are covered.
Can a cell be used more than once?
No. Once a cell is occupied by a colour, it is locked. No other colour can pass through it and your own colour cannot re-enter that cell either (except by backtracking through your current path). This is the core rule that creates the difficulty.
Is every puzzle solvable?
Yes. Every puzzle is generated by first computing a complete Hamiltonian path through every cell of the grid, then dividing it into colour segments. The solution always exists and always fills every cell, by mathematical construction.
What is the Daily Challenge?
Each day the same puzzle is generated for every player using today's date as a random seed. Everyone gets identical grids and identical dot positions. It resets automatically at midnight.
What's the difference between Color Fill and One Stroke Lines?
They're two different challenges. Color Fill is a single-colour puzzle: there's only one line, glowing like an LED, and it must pass through every cell on the board exactly once between its two endpoints without ever crossing itself โ€” true one-stroke drawing. One Stroke Lines is the multi-colour version, with several coloured pairs on the board at once that all need connecting while still filling every cell and never crossing. Switching modes starts a fresh puzzle built for that mode.
Do I need an account to play?
No. The game runs entirely in your browser. Personal best times and day streak are saved locally using localStorage. Nothing is sent to any server.