Giter VIP home page Giter VIP logo

sudoku_solver's Introduction

SUDOKU_SOLVER

SUDOKU_SOLVER é um programa que tem como objetivo encontrar uma solução para um quebra-cabeça de Sudoku representado por uma matriz 9x9, caso uma solução exista. Esse programa é o produto de um trabalho prático da disciplina de Introdução à Inteligência Artificial do Departamento de Ciência da Computação da UFMG.

Sumário

Compilação

O script run é responsável por gerenciar a compilação com o CMake e a execução do programa. Ele oferece várias opções para facilitar diferentes operações relacionadas ao projeto. A tabela abaixo apresenta essas opções:

Parâmetro do script runDescrição
-h, --helpExibe uma mensagem de ajuda
-b, --buildExecuta a compilação
-d, --debugCompila o projeto em modo de depuração (debug mode)
-e, --execExecuta o programa
-c, --cleanLimpa os artefatos gerados pelo CMake, como os diretórios de compilação e os binários
-t, --testExecuta os testes unitários
-v, --valgrindExecuta testes com Valgrind para verificar vazamentos e o uso de memória
-x <args>, --exec_args <args>Permite passar argumentos adicionais para o programa. Pode ser utilizado com as flags -e e -v

Assim, SUDOKU_SOLVER pode ser compilado com o seguinte comando:

$ ./run --build
# ou
$ ./run -b

Execução

A execução do programa pode ser feita com o comando:

$ ./run -e -x <program params> # Executa o programa com a passagem de parâmetros

Também é possível executar o binário do programa diretamente, por exemplo:

$ bin/Release/sudoku_solver <program params>

SUDOKU_SOLVER espera a passagem dos seguintes parâmetros:

  • uma letra maiúscula que define qual algoritmo de busca em espaços de estado será empregado para encontrar a solução
  • a matriz inicial do Sudoku.

A tabela abaixo apresenta todos os algoritmos de busca implementados.

ParâmetroDescrição
B <matrix>Busca uma solução com o algoritmo Breadth-First Search
I <matrix>Busca uma solução com o algoritmo Iterative Deepening Depth-First Search
U <matrix>Busca uma solução com o algoritmo Uniform-Cost Search
A <matrix>Busca uma solução com o algoritmo A* Search
G <matrix>Busca uma solução com o algoritmo Greedy Best-First Search

A matriz é dada por 9 conjuntos de 9 números, onde o primeiro conjunto é a primeira linha da matriz, o segundo é a segunda linha etc.

Exemplo de execução:

                # linha 1  linha 2   linha 3   linha 4   linha 5   linha 6   linha 7   linha 8   linha 9
$ ./run -e -x U 800000000 003600000 070090200 050007000 000045700 000100030 001000068 008500010 090000400

Zero representa as posições que precisam ser preenchidas.

O comando acima passa a seguinte matriz para o programa:

8 0 0 | 0 0 0 | 0 0 0
0 0 3 | 6 0 0 | 0 0 0
0 7 0 | 0 9 0 | 2 0 0
------+-------+------
0 5 0 | 0 0 7 | 0 0 0
0 0 0 | 0 4 5 | 7 0 0
0 0 0 | 1 0 0 | 0 3 0
------+-------+------
0 0 1 | 0 0 0 | 0 6 8
0 0 8 | 5 0 0 | 0 1 0
0 9 0 | 0 0 0 | 4 0 0

Saída esperada do programa para a matriz de entrada:

Solution found :')

8 1 2 | 7 5 3 | 6 4 9
9 4 3 | 6 8 2 | 1 7 5
6 7 5 | 4 9 1 | 2 8 3
------+-------+------
1 5 4 | 2 3 7 | 8 9 6
3 6 9 | 8 4 5 | 7 2 1
2 8 7 | 1 6 9 | 5 3 4
------+-------+------
5 2 1 | 9 7 4 | 3 6 8
4 3 8 | 5 2 6 | 9 1 7
7 9 6 | 3 1 8 | 4 5 2

Algorithm: UCS
Total time: 16071 ms
Total expanded states: 1813316

Total expanded states é a quantidade de estados explorados.

Benchmarks

A discussão dos resultados obtidos durante os testes podem ser lidos na seção 4 da documentação.

Documentação

A primeira versão da documentação, bem como o enunciado deste trabalho pode ser lida aqui

sudoku_solver's People

Contributors

luk3rr avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.