{ "cells": [ { "cell_type": "markdown", "id": "played-legislature", "metadata": { "toc": true }, "source": [ "

Table of Contents

\n", "
" ] }, { "cell_type": "markdown", "id": "primary-science", "metadata": {}, "source": [ "![title](\".reto_nivel1.PNG\")" ] }, { "cell_type": "markdown", "id": "imposed-sailing", "metadata": {}, "source": [ "# Ejercicio final" ] }, { "cell_type": "markdown", "id": "organized-minister", "metadata": {}, "source": [ "![img](https://github.com/mrBronnWow/Curso_Beginners/blob/master/0_Reto_de_programacion_basico/reto_nivel1.PNG?raw=true)" ] }, { "cell_type": "markdown", "id": "demonstrated-sharp", "metadata": {}, "source": [ "Importamos librerias" ] }, { "cell_type": "code", "execution_count": 1, "id": "social-rough", "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "id": "voluntary-consideration", "metadata": {}, "source": [ "## Fuerza bruta" ] }, { "cell_type": "markdown", "id": "assisted-bicycle", "metadata": {}, "source": [ "### Apartado A" ] }, { "cell_type": "code", "execution_count": 2, "id": "hidden-vertex", "metadata": {}, "outputs": [], "source": [ "balls = np.array([ [1, 2, 3, 4],\n", " [5, 6, 7, 8],\n", " [9, 10, 11, 12],\n", " [13, 14, 15, 0]])" ] }, { "cell_type": "code", "execution_count": 3, "id": "foreign-interference", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1, 2, 3, 4],\n", " [ 5, 6, 7, 8],\n", " [ 9, 10, 11, 12],\n", " [13, 14, 15, 0]])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "balls" ] }, { "cell_type": "code", "execution_count": 4, "id": "social-attachment", "metadata": {}, "outputs": [], "source": [ "def find_solution(balls):\n", " \"Fuerza bruta Apartado A (intentando pensar como un novato)\"\n", " \n", " # Paso el array a 1D para poder tratarlo como una lista\n", " balls = balls.ravel()\n", " sol = []\n", " for a in balls:\n", " for b in balls:\n", " for c in balls:\n", " if a!=b and a!=c and b!=c: \n", " if a!=0 and b!=0 and c!=0:\n", " if a+b+c==28:\n", " sol.append([a,b,c])\n", " return sol" ] }, { "cell_type": "code", "execution_count": 5, "id": "compatible-florist", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[1, 12, 15],\n", " [1, 13, 14],\n", " [1, 14, 13],\n", " [1, 15, 12],\n", " [2, 11, 15],\n", " [2, 12, 14],\n", " [2, 14, 12],\n", " [2, 15, 11],\n", " [3, 10, 15],\n", " [3, 11, 14],\n", " [3, 12, 13],\n", " [3, 13, 12],\n", " [3, 14, 11],\n", " [3, 15, 10],\n", " [4, 9, 15],\n", " [4, 10, 14],\n", " [4, 11, 13],\n", " [4, 13, 11],\n", " [4, 14, 10],\n", " [4, 15, 9],\n", " [5, 8, 15],\n", " [5, 9, 14],\n", " [5, 10, 13],\n", " [5, 11, 12],\n", " [5, 12, 11],\n", " [5, 13, 10],\n", " [5, 14, 9],\n", " [5, 15, 8],\n", " [6, 7, 15],\n", " [6, 8, 14],\n", " [6, 9, 13],\n", " [6, 10, 12],\n", " [6, 12, 10],\n", " [6, 13, 9],\n", " [6, 14, 8],\n", " [6, 15, 7],\n", " [7, 6, 15],\n", " [7, 8, 13],\n", " [7, 9, 12],\n", " [7, 10, 11],\n", " [7, 11, 10],\n", " [7, 12, 9],\n", " [7, 13, 8],\n", " [7, 15, 6],\n", " [8, 5, 15],\n", " [8, 6, 14],\n", " [8, 7, 13],\n", " [8, 9, 11],\n", " [8, 11, 9],\n", " [8, 13, 7],\n", " [8, 14, 6],\n", " [8, 15, 5],\n", " [9, 4, 15],\n", " [9, 5, 14],\n", " [9, 6, 13],\n", " [9, 7, 12],\n", " [9, 8, 11],\n", " [9, 11, 8],\n", " [9, 12, 7],\n", " [9, 13, 6],\n", " [9, 14, 5],\n", " [9, 15, 4],\n", " [10, 3, 15],\n", " [10, 4, 14],\n", " [10, 5, 13],\n", " [10, 6, 12],\n", " [10, 7, 11],\n", " [10, 11, 7],\n", " [10, 12, 6],\n", " [10, 13, 5],\n", " [10, 14, 4],\n", " [10, 15, 3],\n", " [11, 2, 15],\n", " [11, 3, 14],\n", " [11, 4, 13],\n", " [11, 5, 12],\n", " [11, 7, 10],\n", " [11, 8, 9],\n", " [11, 9, 8],\n", " [11, 10, 7],\n", " [11, 12, 5],\n", " [11, 13, 4],\n", " [11, 14, 3],\n", " [11, 15, 2],\n", " [12, 1, 15],\n", " [12, 2, 14],\n", " [12, 3, 13],\n", " [12, 5, 11],\n", " [12, 6, 10],\n", " [12, 7, 9],\n", " [12, 9, 7],\n", " [12, 10, 6],\n", " [12, 11, 5],\n", " [12, 13, 3],\n", " [12, 14, 2],\n", " [12, 15, 1],\n", " [13, 1, 14],\n", " [13, 3, 12],\n", " [13, 4, 11],\n", " [13, 5, 10],\n", " [13, 6, 9],\n", " [13, 7, 8],\n", " [13, 8, 7],\n", " [13, 9, 6],\n", " [13, 10, 5],\n", " [13, 11, 4],\n", " [13, 12, 3],\n", " [13, 14, 1],\n", " [14, 1, 13],\n", " [14, 2, 12],\n", " [14, 3, 11],\n", " [14, 4, 10],\n", " [14, 5, 9],\n", " [14, 6, 8],\n", " [14, 8, 6],\n", " [14, 9, 5],\n", " [14, 10, 4],\n", " [14, 11, 3],\n", " [14, 12, 2],\n", " [14, 13, 1],\n", " [15, 1, 12],\n", " [15, 2, 11],\n", " [15, 3, 10],\n", " [15, 4, 9],\n", " [15, 5, 8],\n", " [15, 6, 7],\n", " [15, 7, 6],\n", " [15, 8, 5],\n", " [15, 9, 4],\n", " [15, 10, 3],\n", " [15, 11, 2],\n", " [15, 12, 1]]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solutions = find_solution(balls)\n", "solutions" ] }, { "cell_type": "code", "execution_count": 6, "id": "institutional-touch", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "132" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(solutions)" ] }, { "cell_type": "code", "execution_count": 7, "id": "asian-landing", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hay 132 combinaciones de valores para a,b y c\n" ] } ], "source": [ "print(f'Hay {len(solutions)} combinaciones de valores para a,b y c')" ] }, { "cell_type": "markdown", "id": "abroad-sellers", "metadata": {}, "source": [ "
Nota: Esto creo que ya es complicado para los alumnos, y tecnicamente no se si se lo hemos pedido, pero puede que alguien se lie por tenerlo en cuenta,
" ] }, { "cell_type": "markdown", "id": "sensitive-prevention", "metadata": {}, "source": [ "¿Pero cuantas soluciones son únicas? Porque la solucion `[1,12,15]` es la misma que `[15,12,1]` ¿Cuantas combinaciones de bolas podemos formar?" ] }, { "cell_type": "code", "execution_count": 8, "id": "worthy-tunnel", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{frozenset({3, 11, 14}),\n", " frozenset({4, 10, 14}),\n", " frozenset({3, 12, 13}),\n", " frozenset({7, 10, 11}),\n", " frozenset({1, 13, 14}),\n", " frozenset({5, 11, 12}),\n", " frozenset({6, 8, 14}),\n", " frozenset({5, 8, 15}),\n", " frozenset({6, 7, 15}),\n", " frozenset({7, 9, 12}),\n", " frozenset({3, 10, 15}),\n", " frozenset({1, 12, 15}),\n", " frozenset({7, 8, 13}),\n", " frozenset({4, 9, 15}),\n", " frozenset({5, 10, 13}),\n", " frozenset({6, 10, 12}),\n", " frozenset({2, 11, 15}),\n", " frozenset({4, 11, 13}),\n", " frozenset({5, 9, 14}),\n", " frozenset({2, 12, 14}),\n", " frozenset({8, 9, 11}),\n", " frozenset({6, 9, 13})}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "unique_sols = set([frozenset(x) for x in solutions])\n", "unique_sols" ] }, { "cell_type": "code", "execution_count": 9, "id": "universal-swedish", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "22" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(unique_sols)" ] }, { "cell_type": "markdown", "id": "appointed-upgrade", "metadata": {}, "source": [ "### Apartado B" ] }, { "cell_type": "code", "execution_count": 10, "id": "worse-pastor", "metadata": {}, "outputs": [], "source": [ "balls = np.array( [[1, 2, 3, 4],\n", " [5, 6, 7, 8],\n", " [9, 10, 11, 12],\n", " [13, 14, 15, 0]])" ] }, { "cell_type": "code", "execution_count": 11, "id": "flying-jenny", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1, 2, 3, 4],\n", " [ 5, 6, 7, 8],\n", " [ 9, 10, 11, 12],\n", " [13, 14, 15, 0]])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "balls" ] }, { "cell_type": "code", "execution_count": 12, "id": "normal-tribe", "metadata": {}, "outputs": [], "source": [ "def sol_apartado_b(balls):\n", " solutions = find_solution(balls)\n", " sol_b = []\n", " for sol in solutions:\n", " a,b,c = sol\n", " i= np.where(balls==a)\n", " j= np.where(balls==b)\n", " k= np.where(balls==c)\n", " if i[0]!=j[0] and i[0]!=k[0] and j[0]!=k[0]:\n", " print\n", " sol_b.append([a,b,c])\n", " return sol_b" ] }, { "cell_type": "code", "execution_count": 13, "id": "atomic-london", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[1, 12, 15],\n", " [1, 15, 12],\n", " [2, 11, 15],\n", " [2, 12, 14],\n", " [2, 14, 12],\n", " [2, 15, 11],\n", " [3, 10, 15],\n", " [3, 11, 14],\n", " [3, 12, 13],\n", " [3, 13, 12],\n", " [3, 14, 11],\n", " [3, 15, 10],\n", " [4, 9, 15],\n", " [4, 10, 14],\n", " [4, 11, 13],\n", " [4, 13, 11],\n", " [4, 14, 10],\n", " [4, 15, 9],\n", " [5, 9, 14],\n", " [5, 10, 13],\n", " [5, 13, 10],\n", " [5, 14, 9],\n", " [6, 9, 13],\n", " [6, 13, 9],\n", " [9, 4, 15],\n", " [9, 5, 14],\n", " [9, 6, 13],\n", " [9, 13, 6],\n", " [9, 14, 5],\n", " [9, 15, 4],\n", " [10, 3, 15],\n", " [10, 4, 14],\n", " [10, 5, 13],\n", " [10, 13, 5],\n", " [10, 14, 4],\n", " [10, 15, 3],\n", " [11, 2, 15],\n", " [11, 3, 14],\n", " [11, 4, 13],\n", " [11, 13, 4],\n", " [11, 14, 3],\n", " [11, 15, 2],\n", " [12, 1, 15],\n", " [12, 2, 14],\n", " [12, 3, 13],\n", " [12, 13, 3],\n", " [12, 14, 2],\n", " [12, 15, 1],\n", " [13, 3, 12],\n", " [13, 4, 11],\n", " [13, 5, 10],\n", " [13, 6, 9],\n", " [13, 9, 6],\n", " [13, 10, 5],\n", " [13, 11, 4],\n", " [13, 12, 3],\n", " [14, 2, 12],\n", " [14, 3, 11],\n", " [14, 4, 10],\n", " [14, 5, 9],\n", " [14, 9, 5],\n", " [14, 10, 4],\n", " [14, 11, 3],\n", " [14, 12, 2],\n", " [15, 1, 12],\n", " [15, 2, 11],\n", " [15, 3, 10],\n", " [15, 4, 9],\n", " [15, 9, 4],\n", " [15, 10, 3],\n", " [15, 11, 2],\n", " [15, 12, 1]]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sol_b = sol_apartado_b(balls)\n", "sol_b" ] }, { "cell_type": "code", "execution_count": 14, "id": "sacred-federal", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "72" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(sol_b)" ] }, { "cell_type": "code", "execution_count": 15, "id": "structural-curve", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{frozenset({3, 11, 14}),\n", " frozenset({5, 9, 14}),\n", " frozenset({2, 12, 14}),\n", " frozenset({4, 10, 14}),\n", " frozenset({5, 10, 13}),\n", " frozenset({3, 12, 13}),\n", " frozenset({3, 10, 15}),\n", " frozenset({2, 11, 15}),\n", " frozenset({1, 12, 15}),\n", " frozenset({4, 11, 13}),\n", " frozenset({6, 9, 13}),\n", " frozenset({4, 9, 15})}" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "unique_sols_b = set([frozenset(x) for x in sol_b])\n", "unique_sols_b" ] }, { "cell_type": "code", "execution_count": 16, "id": "approximate-monday", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "12" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(unique_sols_b)" ] }, { "cell_type": "markdown", "id": "detailed-bangladesh", "metadata": {}, "source": [ "Creo que esta forma de pensar es muy complicada para el primer ejercicio :S" ] }, { "cell_type": "markdown", "id": "massive-surge", "metadata": {}, "source": [ "## Utilizando Librerias adecuadas" ] }, { "cell_type": "markdown", "id": "generous-footwear", "metadata": {}, "source": [ "### Apartado A" ] }, { "cell_type": "code", "execution_count": 29, "id": "atmospheric-world", "metadata": {}, "outputs": [], "source": [ "from itertools import combinations" ] }, { "cell_type": "code", "execution_count": 51, "id": "drawn-drilling", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.arange(1,15+1)\n", "arr" ] }, { "cell_type": "code", "execution_count": 52, "id": "unsigned-reason", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(1, 2, 3),\n", " (1, 2, 4),\n", " (1, 2, 5),\n", " (1, 2, 6),\n", " (1, 2, 7),\n", " (1, 2, 8),\n", " (1, 2, 9),\n", " (1, 2, 10),\n", " (1, 2, 11),\n", " (1, 2, 12),\n", " (1, 2, 13),\n", " (1, 2, 14),\n", " (1, 2, 15),\n", " (1, 3, 4),\n", " (1, 3, 5),\n", " (1, 3, 6),\n", " (1, 3, 7),\n", " (1, 3, 8),\n", " (1, 3, 9),\n", " (1, 3, 10),\n", " (1, 3, 11),\n", " (1, 3, 12),\n", " (1, 3, 13),\n", " (1, 3, 14),\n", " (1, 3, 15),\n", " (1, 4, 5),\n", " (1, 4, 6),\n", " (1, 4, 7),\n", " (1, 4, 8),\n", " (1, 4, 9),\n", " (1, 4, 10),\n", " (1, 4, 11),\n", " (1, 4, 12),\n", " (1, 4, 13),\n", " (1, 4, 14),\n", " (1, 4, 15),\n", " (1, 5, 6),\n", " (1, 5, 7),\n", " (1, 5, 8),\n", " (1, 5, 9),\n", " (1, 5, 10),\n", " (1, 5, 11),\n", " (1, 5, 12),\n", " (1, 5, 13),\n", " (1, 5, 14),\n", " (1, 5, 15),\n", " (1, 6, 7),\n", " (1, 6, 8),\n", " (1, 6, 9),\n", " (1, 6, 10),\n", " (1, 6, 11),\n", " (1, 6, 12),\n", " (1, 6, 13),\n", " (1, 6, 14),\n", " (1, 6, 15),\n", " (1, 7, 8),\n", " (1, 7, 9),\n", " (1, 7, 10),\n", " (1, 7, 11),\n", " (1, 7, 12),\n", " (1, 7, 13),\n", " (1, 7, 14),\n", " (1, 7, 15),\n", " (1, 8, 9),\n", " (1, 8, 10),\n", " (1, 8, 11),\n", " (1, 8, 12),\n", " (1, 8, 13),\n", " (1, 8, 14),\n", " (1, 8, 15),\n", " (1, 9, 10),\n", " (1, 9, 11),\n", " (1, 9, 12),\n", " (1, 9, 13),\n", " (1, 9, 14),\n", " (1, 9, 15),\n", " (1, 10, 11),\n", " (1, 10, 12),\n", " (1, 10, 13),\n", " (1, 10, 14),\n", " (1, 10, 15),\n", " (1, 11, 12),\n", " (1, 11, 13),\n", " (1, 11, 14),\n", " (1, 11, 15),\n", " (1, 12, 13),\n", " (1, 12, 14),\n", " (1, 12, 15),\n", " (1, 13, 14),\n", " (1, 13, 15),\n", " (1, 14, 15),\n", " (2, 3, 4),\n", " (2, 3, 5),\n", " (2, 3, 6),\n", " (2, 3, 7),\n", " (2, 3, 8),\n", " (2, 3, 9),\n", " (2, 3, 10),\n", " (2, 3, 11),\n", " (2, 3, 12),\n", " (2, 3, 13),\n", " (2, 3, 14),\n", " (2, 3, 15),\n", " (2, 4, 5),\n", " (2, 4, 6),\n", " (2, 4, 7),\n", " (2, 4, 8),\n", " (2, 4, 9),\n", " (2, 4, 10),\n", " (2, 4, 11),\n", " (2, 4, 12),\n", " (2, 4, 13),\n", " (2, 4, 14),\n", " (2, 4, 15),\n", " (2, 5, 6),\n", " (2, 5, 7),\n", " (2, 5, 8),\n", " (2, 5, 9),\n", " (2, 5, 10),\n", " (2, 5, 11),\n", " (2, 5, 12),\n", " (2, 5, 13),\n", " (2, 5, 14),\n", " (2, 5, 15),\n", " (2, 6, 7),\n", " (2, 6, 8),\n", " (2, 6, 9),\n", " (2, 6, 10),\n", " (2, 6, 11),\n", " (2, 6, 12),\n", " (2, 6, 13),\n", " (2, 6, 14),\n", " (2, 6, 15),\n", " (2, 7, 8),\n", " (2, 7, 9),\n", " (2, 7, 10),\n", " (2, 7, 11),\n", " (2, 7, 12),\n", " (2, 7, 13),\n", " (2, 7, 14),\n", " (2, 7, 15),\n", " (2, 8, 9),\n", " (2, 8, 10),\n", " (2, 8, 11),\n", " (2, 8, 12),\n", " (2, 8, 13),\n", " (2, 8, 14),\n", " (2, 8, 15),\n", " (2, 9, 10),\n", " (2, 9, 11),\n", " (2, 9, 12),\n", " (2, 9, 13),\n", " (2, 9, 14),\n", " (2, 9, 15),\n", " (2, 10, 11),\n", " (2, 10, 12),\n", " (2, 10, 13),\n", " (2, 10, 14),\n", " (2, 10, 15),\n", " (2, 11, 12),\n", " (2, 11, 13),\n", " (2, 11, 14),\n", " (2, 11, 15),\n", " (2, 12, 13),\n", " (2, 12, 14),\n", " (2, 12, 15),\n", " (2, 13, 14),\n", " (2, 13, 15),\n", " (2, 14, 15),\n", " (3, 4, 5),\n", " (3, 4, 6),\n", " (3, 4, 7),\n", " (3, 4, 8),\n", " (3, 4, 9),\n", " (3, 4, 10),\n", " (3, 4, 11),\n", " (3, 4, 12),\n", " (3, 4, 13),\n", " (3, 4, 14),\n", " (3, 4, 15),\n", " (3, 5, 6),\n", " (3, 5, 7),\n", " (3, 5, 8),\n", " (3, 5, 9),\n", " (3, 5, 10),\n", " (3, 5, 11),\n", " (3, 5, 12),\n", " (3, 5, 13),\n", " (3, 5, 14),\n", " (3, 5, 15),\n", " (3, 6, 7),\n", " (3, 6, 8),\n", " (3, 6, 9),\n", " (3, 6, 10),\n", " (3, 6, 11),\n", " (3, 6, 12),\n", " (3, 6, 13),\n", " (3, 6, 14),\n", " (3, 6, 15),\n", " (3, 7, 8),\n", " (3, 7, 9),\n", " (3, 7, 10),\n", " (3, 7, 11),\n", " (3, 7, 12),\n", " (3, 7, 13),\n", " (3, 7, 14),\n", " (3, 7, 15),\n", " (3, 8, 9),\n", " (3, 8, 10),\n", " (3, 8, 11),\n", " (3, 8, 12),\n", " (3, 8, 13),\n", " (3, 8, 14),\n", " (3, 8, 15),\n", " (3, 9, 10),\n", " (3, 9, 11),\n", " (3, 9, 12),\n", " (3, 9, 13),\n", " (3, 9, 14),\n", " (3, 9, 15),\n", " (3, 10, 11),\n", " (3, 10, 12),\n", " (3, 10, 13),\n", " (3, 10, 14),\n", " (3, 10, 15),\n", " (3, 11, 12),\n", " (3, 11, 13),\n", " (3, 11, 14),\n", " (3, 11, 15),\n", " (3, 12, 13),\n", " (3, 12, 14),\n", " (3, 12, 15),\n", " (3, 13, 14),\n", " (3, 13, 15),\n", " (3, 14, 15),\n", " (4, 5, 6),\n", " (4, 5, 7),\n", " (4, 5, 8),\n", " (4, 5, 9),\n", " (4, 5, 10),\n", " (4, 5, 11),\n", " (4, 5, 12),\n", " (4, 5, 13),\n", " (4, 5, 14),\n", " (4, 5, 15),\n", " (4, 6, 7),\n", " (4, 6, 8),\n", " (4, 6, 9),\n", " (4, 6, 10),\n", " (4, 6, 11),\n", " (4, 6, 12),\n", " (4, 6, 13),\n", " (4, 6, 14),\n", " (4, 6, 15),\n", " (4, 7, 8),\n", " (4, 7, 9),\n", " (4, 7, 10),\n", " (4, 7, 11),\n", " (4, 7, 12),\n", " (4, 7, 13),\n", " (4, 7, 14),\n", " (4, 7, 15),\n", " (4, 8, 9),\n", " (4, 8, 10),\n", " (4, 8, 11),\n", " (4, 8, 12),\n", " (4, 8, 13),\n", " (4, 8, 14),\n", " (4, 8, 15),\n", " (4, 9, 10),\n", " (4, 9, 11),\n", " (4, 9, 12),\n", " (4, 9, 13),\n", " (4, 9, 14),\n", " (4, 9, 15),\n", " (4, 10, 11),\n", " (4, 10, 12),\n", " (4, 10, 13),\n", " (4, 10, 14),\n", " (4, 10, 15),\n", " (4, 11, 12),\n", " (4, 11, 13),\n", " (4, 11, 14),\n", " (4, 11, 15),\n", " (4, 12, 13),\n", " (4, 12, 14),\n", " (4, 12, 15),\n", " (4, 13, 14),\n", " (4, 13, 15),\n", " (4, 14, 15),\n", " (5, 6, 7),\n", " (5, 6, 8),\n", " (5, 6, 9),\n", " (5, 6, 10),\n", " (5, 6, 11),\n", " (5, 6, 12),\n", " (5, 6, 13),\n", " (5, 6, 14),\n", " (5, 6, 15),\n", " (5, 7, 8),\n", " (5, 7, 9),\n", " (5, 7, 10),\n", " (5, 7, 11),\n", " (5, 7, 12),\n", " (5, 7, 13),\n", " (5, 7, 14),\n", " (5, 7, 15),\n", " (5, 8, 9),\n", " (5, 8, 10),\n", " (5, 8, 11),\n", " (5, 8, 12),\n", " (5, 8, 13),\n", " (5, 8, 14),\n", " (5, 8, 15),\n", " (5, 9, 10),\n", " (5, 9, 11),\n", " (5, 9, 12),\n", " (5, 9, 13),\n", " (5, 9, 14),\n", " (5, 9, 15),\n", " (5, 10, 11),\n", " (5, 10, 12),\n", " (5, 10, 13),\n", " (5, 10, 14),\n", " (5, 10, 15),\n", " (5, 11, 12),\n", " (5, 11, 13),\n", " (5, 11, 14),\n", " (5, 11, 15),\n", " (5, 12, 13),\n", " (5, 12, 14),\n", " (5, 12, 15),\n", " (5, 13, 14),\n", " (5, 13, 15),\n", " (5, 14, 15),\n", " (6, 7, 8),\n", " (6, 7, 9),\n", " (6, 7, 10),\n", " (6, 7, 11),\n", " (6, 7, 12),\n", " (6, 7, 13),\n", " (6, 7, 14),\n", " (6, 7, 15),\n", " (6, 8, 9),\n", " (6, 8, 10),\n", " (6, 8, 11),\n", " (6, 8, 12),\n", " (6, 8, 13),\n", " (6, 8, 14),\n", " (6, 8, 15),\n", " (6, 9, 10),\n", " (6, 9, 11),\n", " (6, 9, 12),\n", " (6, 9, 13),\n", " (6, 9, 14),\n", " (6, 9, 15),\n", " (6, 10, 11),\n", " (6, 10, 12),\n", " (6, 10, 13),\n", " (6, 10, 14),\n", " (6, 10, 15),\n", " (6, 11, 12),\n", " (6, 11, 13),\n", " (6, 11, 14),\n", " (6, 11, 15),\n", " (6, 12, 13),\n", " (6, 12, 14),\n", " (6, 12, 15),\n", " (6, 13, 14),\n", " (6, 13, 15),\n", " (6, 14, 15),\n", " (7, 8, 9),\n", " (7, 8, 10),\n", " (7, 8, 11),\n", " (7, 8, 12),\n", " (7, 8, 13),\n", " (7, 8, 14),\n", " (7, 8, 15),\n", " (7, 9, 10),\n", " (7, 9, 11),\n", " (7, 9, 12),\n", " (7, 9, 13),\n", " (7, 9, 14),\n", " (7, 9, 15),\n", " (7, 10, 11),\n", " (7, 10, 12),\n", " (7, 10, 13),\n", " (7, 10, 14),\n", " (7, 10, 15),\n", " (7, 11, 12),\n", " (7, 11, 13),\n", " (7, 11, 14),\n", " (7, 11, 15),\n", " (7, 12, 13),\n", " (7, 12, 14),\n", " (7, 12, 15),\n", " (7, 13, 14),\n", " (7, 13, 15),\n", " (7, 14, 15),\n", " (8, 9, 10),\n", " (8, 9, 11),\n", " (8, 9, 12),\n", " (8, 9, 13),\n", " (8, 9, 14),\n", " (8, 9, 15),\n", " (8, 10, 11),\n", " (8, 10, 12),\n", " (8, 10, 13),\n", " (8, 10, 14),\n", " (8, 10, 15),\n", " (8, 11, 12),\n", " (8, 11, 13),\n", " (8, 11, 14),\n", " (8, 11, 15),\n", " (8, 12, 13),\n", " (8, 12, 14),\n", " (8, 12, 15),\n", " (8, 13, 14),\n", " (8, 13, 15),\n", " (8, 14, 15),\n", " (9, 10, 11),\n", " (9, 10, 12),\n", " (9, 10, 13),\n", " (9, 10, 14),\n", " (9, 10, 15),\n", " (9, 11, 12),\n", " (9, 11, 13),\n", " (9, 11, 14),\n", " (9, 11, 15),\n", " (9, 12, 13),\n", " (9, 12, 14),\n", " (9, 12, 15),\n", " (9, 13, 14),\n", " (9, 13, 15),\n", " (9, 14, 15),\n", " (10, 11, 12),\n", " (10, 11, 13),\n", " (10, 11, 14),\n", " (10, 11, 15),\n", " (10, 12, 13),\n", " (10, 12, 14),\n", " (10, 12, 15),\n", " (10, 13, 14),\n", " (10, 13, 15),\n", " (10, 14, 15),\n", " (11, 12, 13),\n", " (11, 12, 14),\n", " (11, 12, 15),\n", " (11, 13, 14),\n", " (11, 13, 15),\n", " (11, 14, 15),\n", " (12, 13, 14),\n", " (12, 13, 15),\n", " (12, 14, 15),\n", " (13, 14, 15)]" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "comb=list(combinations(arr, r=3))\n", "comb" ] }, { "cell_type": "code", "execution_count": 53, "id": "meaning-heath", "metadata": {}, "outputs": [], "source": [ "sol_A = []\n", "for posible_sol in comb:\n", " a,b,c = posible_sol\n", " if a!=0 and b!=0 and c!=0:\n", " if a+b+c==28:\n", " sol_A.append([a,b,c])" ] }, { "cell_type": "code", "execution_count": 54, "id": "fiscal-mainland", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[1, 12, 15],\n", " [1, 13, 14],\n", " [2, 11, 15],\n", " [2, 12, 14],\n", " [3, 10, 15],\n", " [3, 11, 14],\n", " [3, 12, 13],\n", " [4, 9, 15],\n", " [4, 10, 14],\n", " [4, 11, 13],\n", " [5, 8, 15],\n", " [5, 9, 14],\n", " [5, 10, 13],\n", " [5, 11, 12],\n", " [6, 7, 15],\n", " [6, 8, 14],\n", " [6, 9, 13],\n", " [6, 10, 12],\n", " [7, 8, 13],\n", " [7, 9, 12],\n", " [7, 10, 11],\n", " [8, 9, 11]]" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sol_A" ] }, { "cell_type": "code", "execution_count": 55, "id": "supported-narrow", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "22" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(sol_A)" ] }, { "cell_type": "markdown", "id": "solid-killing", "metadata": {}, "source": [ "### Apartado B" ] }, { "cell_type": "code", "execution_count": 56, "id": "seasonal-expression", "metadata": {}, "outputs": [], "source": [ "balls = np.array([ [1, 2, 3, 4],\n", " [5, 6, 7, 8],\n", " [9, 10, 11, 12],\n", " [13, 14, 15, 0]])" ] }, { "cell_type": "code", "execution_count": 57, "id": "nonprofit-performer", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 1, 2, 3],\n", " [ 4, 5, 6, 7],\n", " [ 8, 9, 10, 11],\n", " [12, 13, 14, 15]])" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "balls" ] }, { "cell_type": "code", "execution_count": null, "id": "practical-waterproof", "metadata": {}, "outputs": [], "source": [ "# Es la misma que está arriba\n", "def sol_apartado_b(balls):\n", " solutions = find_solution(balls)\n", " sol_b = []\n", " for sol in solutions:\n", " a,b,c = sol\n", " i= np.where(balls==a)\n", " j= np.where(balls==b)\n", " k= np.where(balls==c)\n", " if i[0]!=j[0] and i[0]!=k[0] and j[0]!=k[0]:\n", " print\n", " sol_b.append([a,b,c])\n", " return sol_b" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.3rc1" }, "nbTranslate": { "displayLangs": [ "*" ], "hotkey": "alt-t", "langInMainMenu": true, "sourceLang": "en", "targetLang": "fr", "useGoogleTranslate": true }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": false, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": true, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 5 }