Sudoku

Iniciado por Jaua10, 22 Noviembre 2014, 06:10 AM

0 Miembros y 2 Visitantes están viendo este tema.

Jaua10

Exacto por eso les pregunto xq no tengo idea de que mas podria hacer de acuerdo a mi nivel de conocimiento actual

engel lex

Publiqué un tema de esto mismo hace poco pero en python 0% aleatorio

Ve el código,  analizalo y ve que puedes aplicar
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Jaua10

Código (python) [Seleccionar]
import pprint

#crea array bidimensiona
def create_matrix(m, n): return [[0]*n for _ in xrange(m)]

#gira la matriz ccw
def rotar_matrix(matrix):
  matrix_auxiliar = create_matrix(9,9)
  for x in range(9):
    for y in range(9):
      matrix_auxiliar[y][x] = matrix[x][y]
  return matrix_auxiliar



def generar_tablero(semilla):
  #se genera un sudoku base sobre el que aplicar transformaciones
  basesudoku = create_matrix(9,9)
  for y in range(9):
    for x in range(9):
      basesudoku[y][x]= (x+(y%3)*3+(y/3))%9+1
  #declaracion e inicializacion de variables
  #variables de transformacion
  #desplazamiento del 0 al 8
  desplazamiento = 0
  #rotacion del 0 al 3
  rotacion = 0
  #combinacion cada elemento del 0 al 5
  combinacion = [0,0,0,0,0,0,0,0]

  #numero generatriz de 0 60466175
  desplazamiento = semilla%9
  semilla /=9
  rotacion = semilla%4
  semilla /=4
  for i in range(8):
    combinacion[i] = semilla%6
    semilla /= 6

  #sudoku final
  sudoku = create_matrix(9,9)

  #auxiliar para copiar elementos
  auxiliar = create_matrix(3,9)

  #posibles combinaciones de 3 elementos
  combinatorias = create_matrix(6,3)
  combinatorias = [[0,1,2],[1,2,0],[2,0,1],[1,0,2],[0,2,1],[2,1,0]]

  #combinacion para cada elemento segun combinacion escogida
  combinador = create_matrix (8,3)
  for i in range(8):combinador[i] = combinatorias[combinacion[i]]

  #modificacion de matriz por desplazamiento lateral con desp
  for y in range(9):
    for x in range(9):
      sudoku[y][x] = basesudoku[y][(x+desplazamiento)%9]

  #mecla lineas de 3 en 3 segun combinacion
  for z in range(3):
    for copia in range(3): auxiliar[copia] = sudoku[z*3+copia]
    for y in range(3):
      sudoku[z*3+y] = auxiliar[combinador[z][y]]

  #se copia sudoku en auxiliar
  auxiliar = sudoku[:]

  #se mezclan los 3 renglones mayores
  for z in range(3):
    for y in range(3):
      sudoku[z*3+y] = auxiliar[combinador[3][z]*3+y]

  #se rota la matriz para aplicar conversiones en otro eje
  sudoku = rotar_matrix(sudoku)

  #se repite el proceso
  for z in range(3):
    for copia in range(3): auxiliar[copia] = sudoku[z*3+copia]
    for y in range(3):
      sudoku[z*3+y] = auxiliar[combinador[z+4][y]]

  auxiliar = sudoku[:]

  for z in range(3):
    for y in range(3):
      sudoku[z*3+y] = auxiliar[combinador[7][z]*3+y]

  #se endereza la matriz a su orientacion original
  for i in range(3): sudoku = rotar_matrix(sudoku)

  #se le da la orientacion indicada en rot
  for i in range(rotacion): sudoku = rotar_matrix(sudoku)
  return sudoku

pprint.pprint( generar_tablero(0) )


Si te soy sincero no sabría como tomar algo de alli a dev c++, entiendo algunas cosas pero no sabria como pasarla.

engel lex

#13
Pequeña introducción

Código (python) [Seleccionar]
for i in range(x)
Sería
Código (cpp) [Seleccionar]
for(i=0;i<x;i++)

De resto no hay llaves sino espacios a la izquierda y create_matrix es para crear un array bidimensional

Creo que hay debuggers online,intentalo  ;)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Jaua10