Código en R para jugar al Sudoku
Snippet de código
# Librerías necesarias library(ggplot2) # Función para leer el tablero de juego de un fichero de datos read_sudoku <- function(file) { # Leer el fichero data <- read.table(file, header = FALSE) # Convertir los datos a una matriz board <- matrix(data, nrow = 9, ncol = 9, byrow = TRUE) # Devolver la matriz return(board) } # Función para mostrar el tablero de juego show_sudoku <- function(board) { # Crear un gráfico ggplot(data.frame(board), aes(x = 1:9, y = 1:9)) + geom_tile(aes(fill = board)) + scale_fill_manual(values = c("white", "black")) + xlab("Columnas") + ylab("Filas") + theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) } # Función para validar una casilla validate_cell <- function(board, row, col, number) { # Comprobar que la casilla es válida if (row < 1 || row > 9 || col < 1 || col > 9) { return(FALSE) } # Comprobar que el número es válido if (number < 1 || number > 9) { return(FALSE) } # Comprobar que el número no está ya en la fila if (any(board[row,] == number)) { return(FALSE) } # Comprobar que el número no está ya en la columna if (any(board[,col] == number)) { return(FALSE) } # Comprobar que el número no está ya en el bloque block_row = (row - 1) %/% 3 + 1 block_col = (col - 1) %/% 3 + 1 if (any(board[(block_row - 1) * 3 + 1:3, (block_col - 1) * 3 + 1:3] == number)) { return(FALSE) } # La casilla es válida return(TRUE) } # Función para jugar una partida play_sudoku <- function(board, file) { # Mostrar el tablero inicial show_sudoku(board) # Bucle principal while (TRUE) { # Pedir al jugador su jugada row = as.integer(readline("Fila: ")) col = as.integer(readline("Columna: ")) number = as.integer(readline("Número: ")) # Validar la jugada if (!validate_cell(board, row, col, number)) { print("Casilla no válida.") next } # Actualizar el tablero board[row, col] = number # Mostrar el tablero actualizado show_sudoku(board) # Pedir al jugador su siguiente acción action = readline("¿Siguiente jugada (S), borrar casilla (B) o salir (Q)? ") # Continuar jugando if (action == "S") { next } # Borrar una casilla if (action == "B") { if (row > 0 && col > 0) { board[row, col] = NA } next } # Salir del juego if (action == "Q") { break } } # Comprobar si el juego se ha ganado if (all(!is.na(board))) { print("¡Enhorabuena! Has ganado el juego.") } else { print("Has perdido el juego.") } }
Para escribir su respuesta aquí, Ingresar o Crear una cuenta
Compartir