{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"authorship_tag": "ABX9TyO3wTujbWYvyrmhBnydHFSh",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"source": [
"# Juego Recorrer el tablero\n",
"Reglas del juego:\n",
"1. Es un juego de cero jugadores, se juega automáticamente\n",
"2. Se utiliza un tablero de n×n casillas\n",
"3. En el tablero las celdas vacías se representan mediante un punto medio \"·\"\n",
"4. En el tablero hay barreras representadas por celdas con un símbolo \"#\"\n",
"5. Las barreras pueden ser de un tamaño de un elemento o de varios elementos. Si son varios elementos seguidos pueden estar situados formando una barrera en posición vertical o en posición horizontal\n",
"6. El jugador aparece en el tablero en una posición aleatoria vacía, esto es el jugador aparece en una posición no ocupada por una barrera.\n",
"7. El jugador marca la celda en la que aparece y todas por las que va pasando con una letra \"A\"\n",
"8. El jugador se mueve de una en una casilla en forma de cruz, esto es hacia arriba o abajo o derecha o izquierda\n",
"9. El objetivo del juego consiste en que el jugador pase por todas las casillas del tablero salvo por las barreras que no puede atravesar\n",
"10. Si el jugador pasa por una casilla por la que ya hubiera pasado previamente la letra mayúscula \"A\" se transforma en una letra minúscula \"a\"\n",
"11. Por cada letra mayúscula se obtiene un punto positivo, por cada letra mayúscula se obtiene medio punto negativo.\n",
"12. Cuando el jugador ha recorrido todo el tablero el juego termina y se calcula la puntuación total alcanzada\n",
"13. El objetivo es maximizar la puntuación obtenida al finalizar el juego"
],
"metadata": {
"id": "8oCjZP5miFON"
}
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 485
},
"id": "LgnvRwgxiEM2",
"outputId": "948f79a2-5375-4d4b-dcdb-0f1224b4c07e"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[(5, 4), (5, 4), (1, 5), (1, 3), (3, 0)]\n",
"A · · · · ·\n",
"· · · ▒ · ▒\n",
"· · · · · ·\n",
"▒ · · · · ·\n",
"· · · · · ·\n",
"· · · · ▒ ·\n",
"\n"
]
},
{
"output_type": "error",
"ename": "KeyboardInterrupt",
"evalue": "ignored",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m6\u001b[0m \u001b[0;31m# tamaño del tablero n×n\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0mjuego\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mJuego\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 69\u001b[0;31m \u001b[0mjuego\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjugar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m\u001b[0m in \u001b[0;36mjugar\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpuntuacion\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mn\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbarreras\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 56\u001b[0m \u001b[0mdireccion\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchoice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'arriba'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'abajo'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'izquierda'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'derecha'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 57\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmover_jugador\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdireccion\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 58\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmostrar_tablero\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m\u001b[0m in \u001b[0;36mmover_jugador\u001b[0;34m(self, direccion)\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[0mcolumna\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 37\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 38\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtablero\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfila\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcolumna\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'·'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 39\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpuntuacion\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtablero\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfila\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcolumna\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'A'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
}
],
"source": [
"import random\n",
"\n",
"class Juego:\n",
" def __init__(self, n):\n",
" self.n = n\n",
" self.tablero = [['·' for _ in range(n)] for _ in range(n)]\n",
" self.barreras = []\n",
" self.jugador = None\n",
" self.puntuacion = 0\n",
"\n",
" def generar_barreras(self):\n",
" for _ in range(max(1, int(0.0354*n**2+0.9856*n-1.8752))):\n",
" fila = random.randint(0, self.n-1)\n",
" columna = random.randint(0, self.n-1)\n",
" self.barreras.append((fila, columna))\n",
" self.tablero[fila][columna] = '▒'\n",
"\n",
" def generar_jugador(self):\n",
" while True:\n",
" fila = random.randint(0, self.n-1)\n",
" columna = random.randint(0, self.n-1)\n",
" if (fila, columna) not in self.barreras:\n",
" self.jugador = (fila, columna)\n",
" self.tablero[fila][columna] = 'A'\n",
" break\n",
"\n",
" def mover_jugador(self, direccion):\n",
" fila, columna = self.jugador\n",
" if direccion == 'arriba' and fila > 0:\n",
" fila -= 1\n",
" elif direccion == 'abajo' and fila < self.n-1:\n",
" fila += 1\n",
" elif direccion == 'izquierda' and columna > 0:\n",
" columna -= 1\n",
" elif direccion == 'derecha' and columna < self.n-1:\n",
" columna += 1\n",
"\n",
" if self.tablero[fila][columna] == '·':\n",
" self.puntuacion += 1\n",
" elif self.tablero[fila][columna] == 'A':\n",
" self.puntuacion -= 1\n",
"\n",
" self.tablero[self.jugador[0]][self.jugador[1]] = 'a' if self.tablero[self.jugador[0]][self.jugador[1]] == 'A' else '.'\n",
" self.tablero[fila][columna] = 'A'\n",
" self.jugador = (fila, columna)\n",
"\n",
" def jugar(self):\n",
" self.generar_barreras()\n",
" self.generar_jugador()\n",
" print(self.barreras)\n",
" for row in self.tablero:\n",
" print(*row)\n",
" print()\n",
"\n",
" while self.puntuacion < (self.n * self.n) - len(self.barreras):\n",
" direccion = random.choice(['arriba', 'abajo', 'izquierda', 'derecha'])\n",
" self.mover_jugador(direccion)\n",
"\n",
" self.mostrar_tablero()\n",
" print(\"Puntuación total:\", self.puntuacion)\n",
"\n",
" def mostrar_tablero(self):\n",
" for fila in self.tablero:\n",
" print(' '.join(fila))\n",
"\n",
"if __name__ == \"__main__\":\n",
" n = 6 # tamaño del tablero n×n\n",
" juego = Juego(n)\n",
" juego.jugar()\n"
]
},
{
"cell_type": "markdown",
"source": [
"Modificado el método mover_jugador para restar 0.5 puntos en lugar de 1 punto cuando el jugador pasa por una casilla que ya ha visitado previamente."
],
"metadata": {
"id": "dxr3HpdONy9a"
}
},
{
"cell_type": "code",
"source": [
"import random\n",
"\n",
"class Juego:\n",
" def __init__(self, n):\n",
" self.n = n\n",
" self.tablero = [['·' for _ in range(n)] for _ in range(n)]\n",
" self.barreras = []\n",
" self.jugador = None\n",
" self.puntuacion = 0\n",
"\n",
" def generar_barreras(self):\n",
" for _ in range(n):\n",
" fila = random.randint(0, self.n-1)\n",
" columna = random.randint(0, self.n-1)\n",
" self.barreras.append((fila, columna))\n",
" self.tablero[fila][columna] = '#'\n",
"\n",
" def generar_jugador(self):\n",
" while True:\n",
" fila = random.randint(0, self.n-1)\n",
" columna = random.randint(0, self.n-1)\n",
" if (fila, columna) not in self.barreras:\n",
" self.jugador = (fila, columna)\n",
" self.tablero[fila][columna] = 'A'\n",
" break\n",
"\n",
" def mover_jugador(self, direccion):\n",
" fila, columna = self.jugador\n",
" if direccion == 'arriba' and fila > 0:\n",
" fila -= 1\n",
" elif direccion == 'abajo' and fila < self.n-1:\n",
" fila += 1\n",
" elif direccion == 'izquierda' and columna > 0:\n",
" columna -= 1\n",
" elif direccion == 'derecha' and columna < self.n-1:\n",
" columna += 1\n",
"\n",
" if self.tablero[fila][columna] == '·':\n",
" self.puntuacion += 1\n",
" elif self.tablero[fila][columna] == 'A':\n",
" self.puntuacion -= 0.5\n",
"\n",
" self.tablero[self.jugador[0]][self.jugador[1]] = 'a' if self.tablero[self.jugador[0]][self.jugador[1]] == 'A' else '.'\n",
" self.tablero[fila][columna] = 'A'\n",
" self.jugador = (fila, columna)\n",
"\n",
" def jugar(self):\n",
" self.generar_barreras()\n",
" self.generar_jugador()\n",
"\n",
" while self.puntuacion < (self.n * self.n) - len(self.barreras):\n",
" direccion = random.choice(['arriba', 'abajo', 'izquierda', 'derecha'])\n",
" self.mover_jugador(direccion)\n",
"\n",
" self.mostrar_tablero()\n",
" print(\"Puntuación total:\", self.puntuacion)\n",
"\n",
" def mostrar_tablero(self):\n",
" for fila in self.tablero:\n",
" print(' '.join(fila))\n",
"\n",
"\n",
"\n",
"if __name__ == \"__main__\":\n",
" n = 6 # tamaño del tablero n×n\n",
" juego = Juego(n)\n",
" juego.jugar()"
],
"metadata": {
"id": "AqFnlINqN2ZE",
"outputId": "7feffefa-fcf3-47c1-b7e9-aa119ae1af61",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 364
}
},
"execution_count": 2,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Ingrese el tamaño del tablero: 5\n"
]
},
{
"output_type": "error",
"ename": "KeyboardInterrupt",
"evalue": "ignored",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Ingrese el tamaño del tablero: \"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0mjuego\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mJuego\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 64\u001b[0;31m \u001b[0mjuego\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjugar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m\u001b[0m in \u001b[0;36mjugar\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpuntuacion\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mn\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbarreras\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 52\u001b[0m \u001b[0mdireccion\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchoice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'arriba'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'abajo'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'izquierda'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'derecha'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 53\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmover_jugador\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdireccion\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 54\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmostrar_tablero\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m\u001b[0m in \u001b[0;36mmover_jugador\u001b[0;34m(self, direccion)\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[0mcolumna\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 37\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 38\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtablero\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfila\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcolumna\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'·'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 39\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpuntuacion\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtablero\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfila\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcolumna\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'A'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
}
]
},
{
"cell_type": "markdown",
"source": [
"## Generación de Barreras sin zonas aisladas\n",
"Este código utiliza la biblioteca numpy para manejar el tablero como una matriz y la función label de scipy.ndimage para verificar la conectividad del tablero.\n",
"El método generar_barreras ahora genera las barreras de todos los tamaños en un solo bucle, lo que hace que el código sea más eficiente y fácil de modificar para admitir tamaños de barreras adicionales.\n",
"\n",
"El método validar_casilla verifica si una barrera de un tamaño y dirección dados puede colocarse en una posición dada sin superponerse con otras barreras.\n",
"El método verificar_conectividad verifica si todas las celdas vacías del tablero están conectadas. Si no es así, significa que la última barrera colocada ha aislado una parte del tablero, por lo que se elimina y se intenta colocar en una nueva posición.\n",
"\n",
"Este código garantiza que todas las barreras se colocan de forma aleatoria sin superponerse y sin aislar ninguna parte del tablero. Sin embargo, debido a la naturaleza aleatoria del algoritmo, puede tardar un tiempo variable en generar un tablero válido, especialmente si el tablero es grande y/o hay muchas barreras."
],
"metadata": {
"id": "gVVvdGY-S9Eo"
}
},
{
"cell_type": "code",
"source": [
"import random\n",
"import numpy as np\n",
"from scipy.ndimage import label\n",
"\n",
"def generar_barreras():\n",
" tablero = np.zeros((10, 10), dtype=int)\n",
" tamanos = [1]*4 + [2]*3 + [3]*2 + [4]*1\n",
" random.shuffle(tamanos)\n",
"\n",
" for tamano in tamanos:\n",
" while True:\n",
" fila = random.randint(0, 9)\n",
" columna = random.randint(0, 9)\n",
" direccion = random.choice(['horizontal', 'vertical'])\n",
" if validar_casilla(tablero, fila, columna, tamano, direccion):\n",
" if direccion == 'horizontal':\n",
" tablero[fila, columna:columna+tamano] = 1\n",
" else:\n",
" tablero[fila:fila+tamano, columna] = 1\n",
" if verificar_conectividad(tablero):\n",
" break\n",
" else:\n",
" if direccion == 'horizontal':\n",
" tablero[fila, columna:columna+tamano] = 0\n",
" else:\n",
" tablero[fila:fila+tamano, columna] = 0\n",
" return tablero\n",
"\n",
"def validar_casilla(tablero, fila, columna, tamano, direccion):\n",
" if direccion == 'horizontal':\n",
" if columna + tamano > 10:\n",
" return False\n",
" return np.all(tablero[fila, columna:columna+tamano] == 0)\n",
" else:\n",
" if fila + tamano > 10:\n",
" return False\n",
" return np.all(tablero[fila:fila+tamano, columna] == 0)\n",
"\n",
"def verificar_conectividad(tablero):\n",
" _, num_labels = label(tablero == 0)\n",
" return num_labels == 1\n"
],
"metadata": {
"id": "472cbwAYTG86"
},
"execution_count": null,
"outputs": []
}
]
} | |