Greedy wrapping Draw every candidate, keep the single thread that matches best — that search completes the pattern

180 candidate chords · 1 thread per step · cycle 2s ImageData · greedy pick