Atölye › Sudoku › 20/28. adım

Rastgele sıra

Ne yapıyoruz

Boş bir tahtayı çözdürürsen çözücü dolu, geçerli bir sudoku ızgarası üretir; ama hep aynısını, çünkü seçenekleri hep 1, 2, 3... sırasıyla dener. Seçenekleri karıştırırsak her seferinde farklı, rastgele bir ızgara çıkar. Bulmaca icat etmenin ilk yarısı bu.

Karıştırmak için bilinen, adil bir yöntem kullanıyoruz: Fisher–Yates karıştırması.

```js
// Counts solutions up to `limit`; `order` shuffles the digits to make random grids.
function countSolutions(board, limit = 2, order = false) {
  const cell = bestCell(board)
  if (!cell) return 1 // no empty cell left: solved
  const { r, c, options } = cell
  if (order) shuffle(options)
  let count = 0
  for (const d of options) {
    board[r][c] = d
    count += countSolutions(board, limit - count, order)
    if (count >= limit) return count // keep the board as it is: that is the solution
    board[r][c] = 0
  }
  return count
}

function shuffle(list) {
  for (let i = list.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1))
    ;[list[i], list[j]] = [list[j], list[i]]
  }
  return list
}
```

Ne işe yarıyor

Sıra sende

  1. İkinci yorum satırını ve fonksiyonun ilk satırını koddaki gibi değiştir (order = false eklenir).
  2. const { r, c, options } = cell satırının altına if (order) shuffle(options) yaz; özyinelemeli çağrıya , order ekle.
  3. countSolutions'ın altına bir boş satır bırakıp shuffle fonksiyonunu yaz.
  4. Çalıştır.

Beceriler: Diziler ve nesneler

Tüm adımlar

  1. Dokuza dokuz
  2. Çizgiler ve kutular
  3. Metinden bir bulmaca
  4. Bulmacanın kendi rakamları
  5. Çizmeye devam
  6. Seçili hücre
  7. Satırı, sütunu ve kutuyu aydınlat
  8. Her yerde aynı rakam
  9. Tıklayarak seç
  10. Oklarla gez
  11. Rakam yaz
  12. Tek döngüde üç kural
  13. Hataları göster
  14. Çözüldü!
  15. Saat
  16. Çözüldü mesajı
  17. Yeniden oyna
  18. En kolay hücre
  19. Çözücü
  20. Rastgele sıra
  21. Bulmaca icat et
  22. Her oyunda yeni bulmaca
  23. İpuçları
  24. En iyi süre
  25. Yeni bulmaca için N
  26. Rakam tuş takımı
  27. Tuş takımına dokun
  28. Kendin yap: geri al