示例#1
0
 def generar_sudokus_en_csv(self, dimension, cantidad):
     # ejemplo: 3*3, es dimension 9--> que seria 9*9, 81 casilleros
     try:
         if not 0 < cantidad < 10 and type(cantidad) == int:
             raise Cantidad_tableros_incorrecta_exception
         if not (0 < dimension and type(dimension) is int and raiz_cuadrada(dimension) / int(
                 raiz_cuadrada(dimension)) == 1):
             raise Dimension_incorrecta_exception(dimension)
         cantidad_casilleros = dimension * dimension
         cantidad_de_valores_random = cantidad_casilleros // 3
         for num_tableros in range(cantidad):
             tablero = self._generar_tablero_en_matriz(dimension)
             # rellenar con valores random
             for i in range(cantidad_de_valores_random):
                 fila_random, columna_random = random.randint(0, dimension - 1), random.randint(0, dimension - 1)
                 valor_random = random.randint(0, dimension)
                 if Verificador_reglas().verificar_posicion_libre(tablero, valor_random,
                                                                  (fila_random, columna_random), dimension):
                     tablero[fila_random][columna_random] = valor_random
                 # else:
                 # cantidad_de_valores_random+=1#si no se puede agregar en ese lugar, se suma un intento mas
             csv_archivo = csv.writer(open("archivos/sudokus_generados.csv", "a", newline=''))  # carpeta archivos
             for i in range(dimension):
                 lista = tablero[i]
                 csv_archivo.writerow(lista)
     except Dimension_incorrecta_exception as e:
         print(e)
         esperar(5)
     except Cantidad_tableros_incorrecta_exception as e:
         print(e)
         esperar(5)
 def _carga_archivo_y_resuelve(self,
                               archivo_entrada,
                               dimension,
                               num_linea_recuperacion=0):
     '''recibe un archivo csv con los numeros separados por coma y otro parametro para
         comprobar que la dimension de todos los tableros sea la correcta, debe ser un entero'''
     try:
         formato_error = '\033[4;31m'
         if not (0 < dimension and type(dimension) is int
                 and raiz_cuadrada(dimension) /
                 int(raiz_cuadrada(dimension)) == 1):
             raise Dimension_incorrecta_exception(dimension)
         if not archivo_entrada.__contains__(".csv"):
             raise Tipo_de_archivo_incorrecto_exception(archivo_entrada)
         archivo = csv.reader(open(archivo_entrada, "r"), delimiter=",")
         fila_temporal, tablero = list(), list()
         num_linea = 0
         for linea in archivo:
             if num_linea_recuperacion != 0:  # va a saltear las lineas necesarias
                 num_linea_recuperacion -= 1
                 continue
             num_linea += 1
             for numero in linea:
                 fila_temporal.append(int(numero))
             tablero.append(fila_temporal)  # agrega de a filas
             fila_temporal = list()
             if num_linea % dimension == 0:  # cuando el tablero este completo, verifica y resuelve?. Hacer test
                 print('\033[1;33m' +
                       f"Sudoku N°:{int(archivo.line_num / dimension)}")
                 print('\033[1;33m' +
                       f"Linea de archivo N°:{archivo.line_num}")
                 # termina de cargar el tablero, y lo resuelve
                 if Verificador_reglas().verificar_tamaño_del_tablero(tablero, dimension) \
                         and Verificador_reglas().verificar_valores_predeterminados_correctos(tablero, dimension):
                     self._resolver(tablero, dimension, num_linea,
                                    archivo_entrada)
                 elif not Verificador_reglas().verificar_tamaño_del_tablero(
                         tablero, dimension):
                     # raise Tablero_irregular_exception
                     print(
                         formato_error + Style.BRIGHT +
                         "El tablero debe tener la misma cantidad de filas y columnas, del mismo tamaño"
                     )
                 else:
                     print(
                         formato_error + Style.BRIGHT +
                         f"El tablero solo puede contener valores entre 0 y {dimension}"
                     )
                 tablero.clear()
     except ValueError:
         print("\033[4;31m" + Style.BRIGHT +
               "El archivo solo debe contener numeros y el separador")
         esperar(5)
     except Tipo_de_archivo_incorrecto_exception as e:
         print(e)
         esperar(5)
     except Dimension_incorrecta_exception as e:
         print(e)
         esperar(5)
 def __init__(self, dimension):
     # super()
     if int(dimension) < 0:
         self.mensaje = formato_error + Style.BRIGHT + 'El valor para indicar la dimension debe ser mayor que cero'
     elif not raiz_cuadrada(dimension) / int(raiz_cuadrada(dimension)) == 1:
         self.mensaje = formato_error + Style.BRIGHT + 'La raiz cuadrada del valor debe ser un entero'
     elif type(dimension) is int:  # "\033[4;31m" + Style.BRIGHT+
         self.mensaje = formato_error + Style.BRIGHT + 'El valor ingresado para indicar la dimension debe ser un entero'
示例#4
0
 def _generar_tablero_en_matriz(self, dimension):
     if not type(raiz_cuadrada(int(dimension))) is int:
         # raise DimensionException
         pass
     tablero = list()
     for i in range(dimension):
         fila_temporal = list()
         for j in range(dimension):
             fila_temporal.append(0)
         tablero.append(fila_temporal)
     return tablero
    def verificar_si_es_posible_colocar_en_submatriz(self, posicion, dimension,
                                                     tablero, valor_a_agregar):
        ''' Con dimension 9, hay 9 submatrices que a su vez tienen 9 posibles valores dentro
            El valor a agregar no puede encontrarse ya en la submatriz '''
        longitud_submatriz = int(
            raiz_cuadrada(dimension))  # el metodo devuelve float

        # serian las posiciones en la matriz mas grande que seria el sudoku completo
        posicion_inicial_de_columna = (int(
            posicion[1] / longitud_submatriz
        )) * longitud_submatriz  # ->pos 14 / 4 int le saca decimal
        posicion_inicial_de_fila = (int(
            posicion[0] / longitud_submatriz)) * longitud_submatriz
        posicion_disponible = True
        for fila in range(posicion_inicial_de_fila,
                          posicion_inicial_de_fila + longitud_submatriz):
            for columna in range(
                    posicion_inicial_de_columna,
                    posicion_inicial_de_columna + longitud_submatriz):
                if tablero[fila][columna] == valor_a_agregar:
                    posicion_disponible = False
                    return posicion_disponible
        return posicion_disponible
    def _mostrar_tablero_consola(self, tablero, dimension):
        formato_separador_columna = '\033[0;31m'
        long_submatriz = int(raiz_cuadrada(dimension))
        self._pintar_separador_horizontal()
        for i in range(dimension):
            if i % long_submatriz == 0 and i != 0:  # 3/3 6/3 9*9
                self._pintar_separador_horizontal()

            for j in range(dimension):
                if j % long_submatriz == 0:
                    print(formato_separador_columna + " | " +
                          self.formato_predeterminado,
                          end="")

                if j == dimension - 1:
                    print(str(tablero[i][j]) + " ", end="")
                    print(formato_separador_columna + "|" +
                          self.formato_predeterminado)
                else:
                    print(str(tablero[i][j]) + " ", end="")

        self._pintar_separador_horizontal()
        print('\033[0;32m' + "___________________________________\n" +
              self.formato_predeterminado)
示例#7
0
from math import sqrt as raiz_cuadrada

print(raiz_cuadrada(42))
from math import sqrt as raiz_cuadrada, pi as numero

print(raiz_cuadrada(numero))
示例#9
0
from math import sqrt as raiz_cuadrada, pi, e as euler

print(raiz_cuadrada(pi))
print(raiz_cuadrada(euler))
示例#10
0
def cargar():
    lista = []
    for x in range(10):
        lista.append(raiz_cuadrada(random.randint(0, 20)))
    pass
    return lista