Sudoku solver, 100 boards
Backtracking solver across 100 medium-difficulty boards. End-to-end favours piko; inner-loop flips the verdict.
Runtime · median per inner-loop window
Full statistics
| Runner | N | Compile | Runtime | P95 | Stddev | RSS | vs piko | Status |
|---|---|---|---|---|---|---|---|---|
| Native Gocompiled | 10 | 184 ms | 1.07 ms | 1.09 ms | 6.82 µs | 69 MiB | 0.05× | OK |
| Piko interpbytecode VM | 10 | 1.46 ms | 20.9 ms | 21.1 ms | 142 µs | 97 MiB | 1.00× | OK |
| CPython 3.13bytecode VM | 10 | 418 µs | 26.5 ms | 27.1 ms | 398 µs | n/a | 1.27× | OK |
| PyPy 7.3tracing JIT | 10 | 358 µs | 21.4 ms | 21.6 ms | 212 µs | n/a | 1.02× | OK |
| tengobytecode VM | 10 | 294 µs | 60.6 ms | 69.1 ms | 2.71 ms | 340 MiB | 2.89× | OK |
| scriggobytecode VM | 0 | n/a | n/a | n/a | n/a | n/a | n/a | unsupported |
| mvmbytecode VM | 10 | 338 µs | 50.7 ms | 76.2 ms | 9.35 ms | 62 MiB | 2.42× | OK |
| yaegiAST walker | 10 | 616 µs | 138 ms | 156 ms | 13.6 ms | 66 MiB | 6.60× | OK |
Workload & symmetry rules
Workload
Solve 100 9×9 sudoku boards via classical backtracking with most-constrained-cell selection. Print a 32-bit fingerprint of the concatenated solutions.
Symmetry rules
- Pure backtracking: no SAT solver, no constraint propagation library.
- Boards stored as flat 81-element arrays.
Why end-to-end and inner-loop disagree
End-to-end includes interpreter startup. Inner-loop amortises it. On this workload, piko's startup is fast enough to win the e2e race despite slower hot-path code; once startup is amortised, PyPy's JIT pulls ahead.
Source code
piko / Go
piko_source.gonative Go
native_main.goCPython / PyPy
cpython.pytengo
script.tengo