0% encontró este documento útil (0 votos)
96 vistas4 páginas

Aprende R: Programa Hitori Interactivo

Este documento presenta un ejemplo de cómo programar el rompecabezas Hitori en R. Explica las reglas del juego y proporciona el código para leer el tablero, permitir que los jugadores tache o recuperen casillas, y verificar que no haya números repetidos o casillas adyacentes tachadas. El programa dibuja el tablero actualizado después de cada jugada hasta que se resuelve el rompecabezas o se repiten números.

Cargado por

Jose
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
96 vistas4 páginas

Aprende R: Programa Hitori Interactivo

Este documento presenta un ejemplo de cómo programar el rompecabezas Hitori en R. Explica las reglas del juego y proporciona el código para leer el tablero, permitir que los jugadores tache o recuperen casillas, y verificar que no haya números repetidos o casillas adyacentes tachadas. El programa dibuja el tablero actualizado después de cada jugada hasta que se resuelve el rompecabezas o se repiten números.

Cargado por

Jose
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Un ejemplo para aprender R

Un ejemplo para aprender R. El


Hitori

3.1. Introducci´on
El Hitori es un rompecabezas matema´tico del mismo tipo que el Sudoku. El juego
consiste en una matriz 6 × 6 (existen versiones con matrices de mayor dimensi´on)
con las cifras del 1 al 6. A continuacio´n se muestra un ejemplo.

2 2 4 3 4 1

6 5 5 1 1 3

3 5 6 1 4 3

5 1 1 1 6 2

3 4 3 2 5 1

4 3 6 6 2 5

Figura 3.1: Ejemplo de Hitori.

El objetivo del juego es tachar casillas de forma que no aparezcan dos nu´meros
repetidos en la misma fila o columna. Adema´s, no puede haber dos casillas
tachadas pegadas. Por lo tanto el juego se reduce a las siguientes dos reglas:
Regla 1: No puede haber dos nu´meros iguales en una misma fila o columna.
Regla 2: No puede haber dos casillas tachadas juntas (si una casilla est´a
tachada no se podr´an tachar las casillas situadas a su izquierda, derecha, arriba
o abajo).

3.2. Pr´actica en R
La pr´actica consiste en programar con R el juego del Hitori. El programa
debe:

1
Un ejemplo para aprender R

1. Leer el tablero de juego de un fichero de datos.

2. Pedir al jugador el valor de la fila y la columna en la que desea jugar. El programa


avisara´ si la casilla no es v´alida.

3. En cada jugada el programa permitir´a elegir entre:

Tachar una casilla.


Recuperar una casilla tachada.

4. Se mostrar´a en cada jugada un gra´fico con el tablero, sen˜alando las casillas


que est´an tachadas en cada jugada.

3.3. El c´odigo
El programa consta de una funci´on principal [Link] , en la que se
establecen las reglas del juego y una funci´on dibujatablero que permite dibujar en
cada jugada el tablero con las casillas tachadas. La programacio´n se ha hecho para
una matriz 6 × 6 pero se puede generalizar para cualquier dimensi´on.

3.3.1. Funci´on para dibujar el tablero


# Esta funcion dibuja el tablero del Hitori.
# Se marcan con una cruz las casillas tachadas.
dibujatablero<-function(hitori,tachada){
plot(1,1,col=0,xlim=c(0,6),ylim=c(0,6),axes=F,xlab="",ylab="")
for(i in 0:6){
lines(c(0,6),c(i,i),lwd=2)
lines(c(i,i),c(0,6),lwd=2)
}
for (i in 1:6){
for(j in 1:6){
text(j-0.5,7-i-0.5,hitori[i,j],col=1,cex=2)
if(tachada[i,j]==1){
text(j-0.5,7-i-0.5,"x",cex=5,col=2)
}
}
}
}

3.3.2. Funci´on principal


[Link]<-function(){
hitori<-[Link]("[Link]") # Devuelve [Link]
hitori<-[Link](hitori)

2
Un ejemplo para aprender R

tachada<-matrix(0,nr=6,nc=6)
dibujatablero(hitori,tachada)
juega=T
while(juega){
jugamos<-menu(c("Tachar casilla","Recuperar casilla"))
cat("Elija fila y columna\n")
pos<-scan(n=2)
# Si la posicion no existe paramos
if (sum(pos<c(1,1)| pos>c(6,6))>0){
cat("La posici´on no es va´lida\n")
}
else{
# SI QUEREMOS TACHAR CASILLA
if (jugamos==1){
# Co´mo sabemos que casillas ya estan tachadas?
if (tachada[pos[1],pos[2]]==1){
cat("La posici´on elegida ya estaba tachada\n")
}
# Co´mo sabemos que la casilla elegida se puede tachar?
# Tenemos que ver que no tiene ninguna casilla tachada pegada
else{
# Determino en que filas miro
if (pos[1]==1){
[Link]=2
}
else if (pos[1]==6){
[Link]=5
}
else{
[Link]=c(pos[1]-1,pos[1]+1)
}
# Determino en que columnas miro
if (pos[2]==1){
[Link]=2
}
else if (pos[2]==6){
[Link]=5
}
else{
[Link]=c(pos[2]-1,pos[2]+1)
}
# Compruebo que las casillas adyacentes no estan tachadas
if (sum(tachada[pos[1],[Link]])>0|sum(tachada[[Link],pos[2]])>0){

3
Un ejemplo para aprender R

cat("No se puede tachar la casilla seleccionada\n")


}
else{
tachada[pos[1],pos[2]]=1
}
}
}
# SI QUEREMOS RECUPERAR CASILLA
else if (jugamos==2){
if (tachada[pos[1],pos[2]]==0){
cat("La posici´on elegida no estaba tachada\n")
}
else {
tachada[pos[1],pos[2]]=0
}
}
dibujatablero(hitori,tachada)
# SE ACABO EL JUEGO?
fila<-numeric()
col<-numeric()
# Miro en todas las filas y en todas las columnas si hay numeros
# que se repiten
for (i in 1:6){
fila[i]=sum(table(hitori[i,tachada[i,]==0])>1)
col[i]=sum(table(hitori[tachada[,i]==0,i])>1)
}
if (sum(fila,col)>0){
cat("Se repiten numeros\n")
}
else{ cat("ENHORABUENA!!!
\n") juega=F
}
}
}
}

También podría gustarte