Generador de sudoku

Iniciado por Adalher, Agosto 31, 2019, 09:13:57 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 31, 2019, 09:13:57 PM Ultima modificación: Septiembre 01, 2019, 03:34:51 AM por Denisse
Hola,

se escribió un generador de sudoku. Pensé que valiese la pena que el fuera presentado aquí.

El genera un vector completo. Qué campos individuales se eliminan y de qué manera, eso depende de ti.

Código:
Código: java

private int[][] createSudoku()
    {
        int[][] field = new int[9][9];
       
        for(int i = 0; i < field.length; i++)
        {
            int[] rand;
            do {
                rand = createRandomRange();
                System.arraycopy(rand, 0, field[i], 0, rand.length);
            }
            while(!proofIntField(field));
        }
        return field;
    }
   
    private boolean proofIntField(int[][] field)
    {
        for(int i = 0; i < field.length; i++)
        {
            if(!proofNoDuplicate(field[i])) {
                return false;
            }
        }
       
        for(int i = 0; i < 9; i++)
        {
            int[] temp = new int[9];
            for(int j = 0; j < 9; j++)
            {
                temp[j] = field[j][i];
            }
            if(!proofNoDuplicate(temp)) {
                return false;
            }
        }
       
        for(int i = 0; i < 9; i += 3)
        {
            for(int j = 0; j < 9; j += 3)
            {
                int[] temp = new int[9];
                int h = 0;
                for(int k = 0; k < 3; k++)
                {
                    for(int g = 0; g < 3; g++)
                    {
                        temp[h] = field[i+k][j+g];
                        h++;
                    }
                }
                if(!proofNoDuplicate(temp)) {
                    return false;
                }
            }
        }
        return true;
    }
   
    private boolean proofNoDuplicate(int[] field)
    {
        int[] temp = new int[9];
        for(int i = 0; i < field.length; i++)
        {
            if(field[i] != 0) {
                for(int j:temp)
                {
                    if(j == field[i]) {
                        return false;
                    }
                }
                temp[i] = field[i];
            }
        }
        return true;
    }
   
    private int[] createRandomRange()
    {
        int[] field = new int[9];
        ArrayList<Integer> list = new ArrayList<Integer>();
        for(int i = 1; i <= 9; i++)
        {
            list.add(i);
        }
        Collections.shuffle(list);
        for(int i = 0; i < 9; i++)
        {
            field[i] = list.get(i).intValue();
        }
        return field;
    }


Quizás se ayudó a alguien con eso.


Saludos
Este es el mayor reproche al pueblo hispanohablante:

Que a pesar de su inteligencia y a pesar de su valentía siempre adoran el poder.