# lpuigo/sudoku architecture

> Architecture diagram of the GitHub repository lpuigo/sudoku, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/lpuigo/sudoku
- Repository: https://github.com/lpuigo/sudoku

## Overview

A small Go library for representing and solving Sudoku boards. The workflow is to create a board, derive legal candidates, apply solving strategies, and use recursive search when logical strategies stall. No README is present; the graph reflects the sampled implementation, so unsampled strategy details are omitted.

Main entry points: [`sudoku/sudoku.go`](https://github.com/lpuigo/sudoku/blob/master/sudoku/sudoku.go) (Sudoku board), [`sudoku/option.go`](https://github.com/lpuigo/sudoku/blob/master/sudoku/option.go) (Option utilities), [`sudoku/valueset.go`](https://github.com/lpuigo/sudoku/blob/master/sudoku/valueset.go) (Value sets)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_board["Board and Rules"]
  node_board["Sudoku board<br/>[sudoku.go]"]
  node_rules["Rule checks<br/>[sudoku.go]"]
  node_candidates["Candidate generation<br/>[sudoku.go]"]
  node_display["Board formatting<br/>[sudoku.go]"]
end

subgraph group_solver["Solving"]
  node_search["Solve and search<br/>[sudoku.go]"]
  node_strategies["Logic strategies<br/>[sudoku.go]"]
  node_options["Option utilities<br/>[option.go]"]
  node_values["Value sets<br/>[valueset.go]"]
end

node_caller(("Library caller"))

node_caller -->|"creates"| node_board
node_board -->|"checks constraints"| node_rules
node_board -->|"formats"| node_display
node_search -->|"gets candidates"| node_candidates
node_candidates -->|"tests values"| node_rules
node_candidates -->|"builds options"| node_options
node_search -->|"applies strategies"| node_strategies
node_search -->|"branches on clone"| node_board
node_strategies -->|"filters options"| node_options
node_strategies -->|"edits candidates"| node_values
node_options -->|"uses sets"| node_values

click node_board "https://github.com/lpuigo/sudoku/blob/master/sudoku/sudoku.go"
click node_rules "https://github.com/lpuigo/sudoku/blob/master/sudoku/sudoku.go"
click node_candidates "https://github.com/lpuigo/sudoku/blob/master/sudoku/sudoku.go"
click node_search "https://github.com/lpuigo/sudoku/blob/master/sudoku/sudoku.go"
click node_strategies "https://github.com/lpuigo/sudoku/blob/master/sudoku/sudoku.go"
click node_options "https://github.com/lpuigo/sudoku/blob/master/sudoku/option.go"
click node_values "https://github.com/lpuigo/sudoku/blob/master/sudoku/valueset.go"
click node_display "https://github.com/lpuigo/sudoku/blob/master/sudoku/sudoku.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_board,node_rules,node_candidates,node_display toneBlue
class node_search,node_strategies,node_options,node_values toneAmber
class node_caller toneIndigo
```

## Components

### Board and Rules

- [Sudoku board](https://github.com/lpuigo/sudoku/blob/master/sudoku/sudoku.go): `sudoku/sudoku.go`
- [Rule checks](https://github.com/lpuigo/sudoku/blob/master/sudoku/sudoku.go): `sudoku/sudoku.go`
- [Candidate generation](https://github.com/lpuigo/sudoku/blob/master/sudoku/sudoku.go): `sudoku/sudoku.go`
- [Board formatting](https://github.com/lpuigo/sudoku/blob/master/sudoku/sudoku.go): `sudoku/sudoku.go`

### Solving

- [Solve and search](https://github.com/lpuigo/sudoku/blob/master/sudoku/sudoku.go): `sudoku/sudoku.go`
- [Logic strategies](https://github.com/lpuigo/sudoku/blob/master/sudoku/sudoku.go): `sudoku/sudoku.go`
- [Option utilities](https://github.com/lpuigo/sudoku/blob/master/sudoku/option.go): `sudoku/option.go`
- [Value sets](https://github.com/lpuigo/sudoku/blob/master/sudoku/valueset.go): `sudoku/valueset.go`

### Other components

- **Library caller**

## Connections

- Library caller → Sudoku board: creates
- Sudoku board → Rule checks: checks constraints
- Sudoku board → Board formatting: formats
- Solve and search → Candidate generation: gets candidates
- Candidate generation → Rule checks: tests values
- Candidate generation → Option utilities: builds options
- Solve and search → Logic strategies: applies strategies
- Solve and search → Sudoku board: branches on clone
- Logic strategies → Option utilities: filters options
- Logic strategies → Value sets: edits candidates
- Option utilities → Value sets: uses sets
