Atölye › Sudoku › 3/28. adım
Bir bulmaca 81 rakamdan oluşur: satır satır, boş hücre için 0. Onu tek bir metin olarak yazıp 9 × 9'luk bir sayı ızgarasına çeviriyoruz, sonra rakamları hücrelere çiziyoruz. (Bu bulmaca Vikipedi'deki ünlü sudoku örneği.)
```js
// The puzzle, row by row; 0 is an empty cell.
const PUZZLE = '530070000600195000098000060800060003400803001700020006060000280000419005000080079'
let grid // grid[r][c]: 1 to 9, or 0 for an empty cell
function reset() {
grid = Array.from({ length: 9 }, (_, r) => [...PUZZLE.slice(r * 9, r * 9 + 9)].map(Number))
}
if (grid[r][c] === 0) continue
ctx.fillStyle = '#0f172a'
ctx.font = 'bold 26px sans-serif'
ctx.textAlign = 'center'
ctx.fillText(String(grid[r][c]), x + SIZE / 2, y + SIZE / 2 + 9)
```PUZZLE.slice(r * 9, r * 9 + 9) → metnin r. satırı: r * 9. karakterden başlayan 9 karakter.[...metin] → metni tek tek karakterlere ayırır: '530' → ['5', '3', '0']..map(Number) → her karakteri sayıya çevirir: '5' → 5.Array.from({ length: 9 }, (_, r) => ...) → 9 elemanlı bir dizi kurar; her eleman için fonksiyonu sıra numarasıyla
(r) çağırır. Sonuç: 9 satırlık ızgara (dizilerden oluşan dizi). grid[r][c] → r. satırın c. hücresi.if (grid[r][c] === 0) continue → boş hücreye rakam yazma, sıradakine geç.x + SIZE / 2, y + SIZE / 2 + 9 → hücrenin ortası (yazının taban çizgisi biraz aşağıda, o yüzden + 9).const TOP = 56 satırının altına bir boş satır bırakıp yorumu, PUZZLE'ı, let grid'i ve reset'i yaz. (81
rakamı dikkatle yaz; hata yaparsan kontrol yakalar.)draw içinde beyaz hücreyi çizen satırın altına rakam satırlarını yaz.draw() satırının üstüne reset() yaz.Beceriler: Diziler ve nesneler
← Çizgiler ve kutular Bulmacanın kendi rakamları →