November 30, 2021

Menyelesaikan Sudoku dengan Python

Sudoku

Sudoku adalah salah satu jenis puzzle atau permainan angka yang sangat populer. Tua dan muda memainkan permainan ini untuk mengisi waktu luang mereka atau untuk mengasah otak mereka dengan mudah. Meski merupakan game jadul, hingga kini penggemar sudoku terus bermunculan dan berkembang.

Sudoku, awalnya disebut Number Place, adalah teka-teki penempatan nomor kombinatorial berbasis logika. Dalam Sudoku klasik, tujuannya adalah untuk mengisi kisi 9 × 9 dengan angka sehingga setiap kolom, baris, dan masing-masing dari sembilan subkisi 3 × 3 yang membentuk kisi (juga disebut kotak, blok, atau wilayah) adalah semua berisi angka 1 sampai 9.

Bila Anda belum mengetahui konsep dasar dari bahasa pemrograman Python silahkan kunjungin artikel Konsep Dasar Python.

Kode Program

import numpy as np

def possible(y, x, n):
    global grid
    for i in range (0,9):
        if grid[y][i] == n :
            return False
    for i in range(0,9):
        if grid[i][x] == n :
            return False
    x0 = (x//3)*3
    y0 = (y//3)*3
    for i in range (0,3):
        for j in range (0,3):
            if grid[y0+i][x0+j] == n :
                return False
    return True

def solve() :
    global grid
    for y in range (9) :
        for x in range (9) :
            if grid[y][x] == 0 :
                for n in range(1,10) :
                    if possible (y,x,n) :
                        grid[y][x] = n
                        solve()
                        grid[y][x] = 0
                return
    print(np.matrix(grid))

grid = [
        [7, 8, 0, 4, 0, 0, 1, 2, 0],
        [6, 0, 0, 0, 7, 5, 0, 0, 9],
        [0, 0, 0, 6, 0, 1, 0, 7, 8],
        [0, 0, 7, 0, 4, 0, 2, 6, 0],
        [0, 0, 1, 0, 5, 0, 9, 3, 0],
        [9, 0, 4, 0, 6, 0, 0, 0, 5],
        [0, 7, 0, 3, 0, 0, 0, 1, 2],
        [1, 2, 0, 0, 0, 7, 4, 0, 0],
        [0, 4, 9, 2, 0, 6, 0, 0, 7]
    ]


print('Puzzle:')
print(np.matrix(grid))
print('Solve:')
solve()

Keluaran Program

Puzzle:
[[7 8 0 4 0 0 1 2 0]
 [6 0 0 0 7 5 0 0 9]
 [0 0 0 6 0 1 0 7 8]
 [0 0 7 0 4 0 2 6 0]
 [0 0 1 0 5 0 9 3 0]
 [9 0 4 0 6 0 0 0 5]
 [0 7 0 3 0 0 0 1 2]
 [1 2 0 0 0 7 4 0 0]
 [0 4 9 2 0 6 0 0 7]]
Solve:
[[7 8 5 4 3 9 1 2 6]
 [6 1 2 8 7 5 3 4 9]
 [4 9 3 6 2 1 5 7 8]
 [8 5 7 9 4 3 2 6 1]
 [2 6 1 7 5 8 9 3 4]
 [9 3 4 1 6 2 7 8 5]
 [5 7 8 3 9 4 6 1 2]
 [1 2 6 5 8 7 4 9 3]
 [3 4 9 2 1 6 8 5 7]]

Kesimpulan

Problem puzzle Sudoku diselesaikan dengan algoritma rekursif. Untuk artikel lain terkait dengan pemrograman Python silahkan lihat kumpulan artikelnya disini.

Rajo Intan

Blogger, pemiliki Onestring Lab, menulis artikel terkait teknologi informasi dan pendidikan. Web Developer, berpengalaman lebih dari 20 tahun mengembangkan berbagai aplikasi dan sistem informasi. Kerjasama kontak di onestringlab@gmail.com atau https://forms.gle/xAGKkpi6B3BzJyzk7

View all posts by Rajo Intan →