Logo Studenta

Escribe un programa en R para jugar al Sudoku. El programa debe: a) Leer el tablero de juego de un fichero de datos. b) Pedir al jugador el valor d...

Escribe un programa en R para jugar al Sudoku. El programa debe:
a) Leer el tablero de juego de un fichero de datos.
b) Pedir al jugador el valor de la fila y la columna que desea rellenar y el número con el que desea rellenarla. El programa avisará si la casilla no es válida y si el número elegido no es válido.
c) En cada jugada el programa permitirá elegir entre: Seguir jugando. Borrar una casilla (siempre que no sea una de las casillas fijas). Salir del juego.
d) Mostrar en cada jugada un gráfico con el tablero lo más parecido posible al que se muestra en el ejercicio.

💡 1 Respuesta

User badge image

Ed IA de Studenta Verified user icon


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.")
  }
}



0
Dislike0

✏️ Responder

FlechasNegritoItálicoSubrayadaTachadoCitaCódigoLista numeradaLista con viñetasSuscritoSobreDisminuir la sangríaAumentar la sangríaColor de fuenteColor de fondoAlineaciónLimpiarInsertar el linkImagenFórmula

Para escribir su respuesta aquí, Ingresar o Crear una cuenta

User badge image

Otros materiales