En este repositorio se encuentran los códigos con las soluciones de los ejercicios de programación funcional propuestos en el blog Exercitium (y la continuación de Exercitium en GitHub) desde el curso 2013-14 hasta la actualidad.
Los objetivos de esta recopilación son:
- Escribir todos los ejercicios como un proyecto con Stack para evitar los problemas que surgen entre las distintas versiones de las librerías que se usan.
- Escribir los tests de cada ejercicio (en el directorio test) de forma que se puedan comprobar con Hspec.
- Número de ocurrencias de elementos.
- Suma de múltiplos de 3 o de 5.
- Ternas pitagóricas con suma dada.
- Sucesión de números amigos.
- Suma de los números amigos menores que n.
- Determinación de los elementos minimales.
- Mastermind.
- Primos consecutivos con media capicúa
- Iguales al siguiente.
- Ordenación por el máximo.
- La bandera tricolor.
- Anagramas.
- Suma si todos los valores son justos.
- Máximos locales (vídeo).
- Lista cuadrada (vídeo)-
- Segmentos maximales de elementos consecutivos (vídeo).
- Valor de un polinomio mediante vectores (vídeo).
- Ramas de un árbol (vídeo)-
- Alfabeto comenzado en un carácter (vídeo).
- Ordenación de estructuras (vídeo).
- Emparejamiento binario (vídeo).
- Ampliación de columnas de una matriz (vídeo).
- Regiones determinadas por n rectas del plano (vídeo).
- Elemento más repetido de manera consecutiva (vídeo).
- Número de pares de elementos adyacentes iguales (vídeo).
- Mayor producto de las ramas de un árbol (vídeo).
- Familias de números con algún dígito en común (vídeo).
- Biparticiones de una lista (vídeo).
- Trenzado de listas (vídeo).
- Enumeración de árboles binarios (vídeo).
- Elementos de una matriz con algún vecino menor (vídeo).
- Reiteración de una función (vídeo).
- Código de las alergias.
- Índices de valores verdaderos.
- Número de inversiones.
- Sepación por posición.
- Emparejamiento de árboles (vídeo)
- Eliminación de las ocurrencias aisladas (vídeo).
- Ordenada cíclicamente (vídeo).
- Producto cartesiano de una familia de conjuntos (vídeo).
- Clausura de un conjunto respecto de una función (vídeo).
- Puntos en regiones rectangulares.
- Sumas de 4 primos.
- Parejas de números y divisores.
- Sumas de divisores propios.
- Densidades de números abundantes, perfectos y deficientes.
- Matriz zigzagueante.
- Numeración con múltiples bases.
- El triángulo de Lloyd.
- Polinomios cuadráticos generadores de primos.
- Ordenación de los racionales.
- Polinomios de Bell.
- Término ausente en una progresión aritmética.
- Suma de los elementos de las diagonales de las matrices espirales.
- Descomposiciones con sumandos 1 o 2.
- Diccionario de frecuencias.
- Primos circulares.
- Codificación de Gödel.
- Representación matricial de relaciones binarias.
- Distancia esperada entre dos puntos de un cuadrado unitario.
- Menor número con una cantidad dada de divisores.
- Cálculo aproximado de integrales definidas.
- Cálculo de la suma 1*1! + 2*2! + 3*3! + … + n*n!.
- Números para los que mcm(1,2,…n-1) = mcm(1,2,…,n).
- Método de bisección para aproximar raíces de funciones.
- La sucesión del reloj astronómico de Praga.
- Codificación de Fibonacci.
- Pandigitales primos.
- Aproximación del número pi.
- Números autodescriptivos.
- Unión e intersección general de conjuntos.
- Intersecciones parciales.
- Mayor semiprimo menor que n.
- Particiones en k subconjuntos.
- Número de particiones en k subconjuntos.
- Composición de relaciones binarias.
- Transitividad de una relación.
- Clausura transitiva de una relación binaria.
- Suma alterna de factoriales.
- Potencias perfectas.
- Primos con cubos.
- Sucesión de suma de cuadrados de los dígitos.
- Números belgas.
- Número de representaciones de n como suma de dos cuadrados.
- Media aritmética de tres números
- Suma de monedas.
- Volumen de la esfera.
- Área de la corona circular.
- Último dígito.
- Máximo de tres números.
- El primero al final.
- Los primeros al final.
- Rango de una lista.
- Reconocimiento de palíndromos.
- Interior de una lista.
- Elementos finales.
- Segmento de una lista.
- Primeros y últimos elementos.
- Elemento mediano.
- Tres iguales.
- Tres diferentes.
- División segura.
- Disyunción excluyente.
- Mayor rectángulo.
- Intercambio de componentes de un par.
- Distancia entre dos puntos.
- Permutación cíclica.
- Mayor número con dos dígitos dados.
- Número de raíces de la ecuación de segundo grado.
- Raíces de la ecuación de segundo grado.
- Fórmula de Herón para el área de un triángulo.
- Intersección de intervalos cerrados.
- Números racionales.
- Reconocimiento de subconjunto.
- Igualdad de conjuntos.
- Unión conjuntista de listas.
- Intersección conjuntista de listas.
- Diferencia conjuntista de listas.
- Divisores de un número.
- Divisores primos.
- Números libres de cuadrados.
- Suma de los primeros números naturales.
- Suma de los cuadrados de los primeros números naturales.
- Suma de cuadrados menos cuadrado de la suma.
- Triángulo aritmético.
- Suma de divisores.
- Números perfectos.
- Números abundantes.
- Números abundantes menores o iguales que n.
- Todos los abundantes hasta n son pares.
- Números abundantes impares.
- Suma de múltiplos de 3 ó 5.
- Puntos dentro del círculo.
- Aproximación del número e.
- Aproximación al límite de sen(x)/x cuando x tiende a cero.
- Cálculo del número π mediante la fórmula de Leibniz.
- Ternas pitagóricas.
- Ternas pitagóricas con suma dada.
- Producto escalar.
- Representación densa de polinomios.
- Base de datos de actividades.
- Potencia entera.
- Algoritmo de Euclides del mcd.
- Dígitos de un número.
- Suma de los digitos de un número.
- Número a partir de sus dígitos.
- Exponente_de la mayor potencia de x que divide a y.
- Producto cartesiano de dos conjuntos.
- Subconjuntos_de_un_conjunto.
- El algoritmo de Luhn.
- Números de Lychrel
- Suma de los dígitos de una cadena.
- Poner en mayúscula la primera letra y las restantes en minúsculas.
- Mayúsculas iniciales.
- Posiciones de un carácter en una cadena.
- Reconocimiento de subcadenas.
- Segmentos cuyos elementos cumplen una propiedad.
- Elementos consecutivos relacionados.
- Agrupación de elementos por posición.
- Concatenación de una lista de listas.
- Aplica según propiedad.
- Máximo de una lista.
- Movimientos en el plano.
- El tipo de figuras geométricas.
- El tipo de los números naturales.
- El tipo de las listas.
- El tipo de los árboles binarios con valores en los nodos y en las hojas.
- Pertenencia de un elemento a un árbol.
- Aplanamiento de un árbol.
- Número de hojas de un árbol binario.
- Profundidad de un árbol binario.
- Recorrido de árboles binarios.
- Imagen especular de un árbol binario.
- Subárbol de profundidad dada.
- Árbol de profundidad n con nodos iguales.
- Árboles con igual estructura.
- Existencia de elementos del árbol que verifican una propiedad.
- Elementos del nivel k de un árbol.
- El tipo de los árboles binarios con valores en las hojas.
- El tipo de los árboles binarios con valores en los nodos.
- Árbol de factorización.
- Valor de un árbol booleano.
- El tipo de las fórmulas proposicionales.
- El tipo de las expresiones aritméticas.
- El tipo de las expresiones aritméticas básicas.
- El tipo de expresiones aritméticas con una variable.
- El tipo de las expresiones aritméticas con variables.
- Valor de expresiones aritméticas generales.
- Valor de una expresión vectorial.
- El tipo abstracto de datos de las pilas.
- El tipo de datos de las pilas mediante listas.
- El tipo de datos de las pilas mediante sucesiones.
- TAD de las pilas: Transformaciones entre pilas y listas.
- TAD de las pilas: Filtrado de pilas según una propiedad.
- TAD de las pilas: Aplicación de una función a los elementos de una pila.
- TAD de las pilas: Pertenencia a una pila.
- TAD de las pilas: Inclusión de pilas.
- TAD de las pilas: Reconocimiento de prefijos de pilas.
- TAD de las pilas: Reconocimiento de subpilas.
- TAD de las pilas: Reconocimiento de ordenación de pilas.
- TAD de las pilas: Ordenación de pilas por inserción.
- TAD de las pilas: Eliminación de repeticiones en una pila.
- TAD de las pilas: Máximo elemento de una pila.
- El tipo abstracto de datos de las colas.
- El tipo de datos de las colas mediante listas.
- El tipo de datos de las colas mediante sucesiones.
- El tipo de datos de las colas mediante dos listas.
- TAD de las colas: Transformaciones entre colas y listas.
- TAD de las colas: Último elemento.
- TAD de las colas: Longitud de una cola.
- TAD de las colas: Todos los elementos verifican una propiedad.
- TAD de las colas: Alguno de los elementos verifican una propiedad.
- TAD de las colas: Extensión de colas.
- TAD de las colas: Intercalado de dos colas.
- TAD de las colas: Agrupación de colas.
- TAD de las colas: Pertenencia a una cola.
- TAD de las colas: Inclusión de colas.
- TAD de las colas: Reconocimiento de prefijos de colas.
- TAD de las colas: Reconocimiento de subcolas.
- TAD de las colas: Reconocimiento de ordenación de colas.
- TAD de las colas: Máximo elemento de una cola.
- El tipo abstracto de datos de los conjuntos.
- El tipo de datos de los conjuntos mediante listas no ordenadas con duplicados.
- El tipo de datos de los conjuntos mediante listas no ordenadas sin duplicados.
- El tipo de datos de los conjuntos mediante listas ordenadas sin duplicados.
- El tipo de datos de los conjuntos mediante librería.
- TAD de los conjuntos: Transformaciones entre conjuntos y listas.
- TAD de los conjuntos: Reconocimiento de subconjunto.
- TAD de los conjuntos: Reconocimiento de_subconjunto propio.
- TAD de los conjuntos: Conjunto unitario.
- TAD de los conjuntos: Número de elementos de un conjunto.
- TAD de los conjuntos: Unión de dos conjuntos.
- TAD de los conjuntos: Unión de varios conjuntos.
- TAD de los conjuntos: Intersección de dos conjuntos.
- TAD de los conjuntos: Intersección de varios conjuntos.
- TAD de los conjuntos: Conjuntos disjuntos.
- TAD de los conjuntos: Diferencia de conjuntos.
- TAD de los conjuntos: Diferencia simétrica.
- TAD de los conjuntos: Subconjunto determinado por una propiedad.
- TAD de los conjuntos: Partición de un conjunto según una propiedad.
- TAD de los conjuntos: Partición según un número.
- TAD de los conjuntos: Aplicación de una función a los elementos de un conjunto.
- TAD de los conjuntos: Todos los elementos verifican una propiedad.
- TAD de los conjuntos: Algunos elementos verifican una propiedad.
- TAD de los conjuntos: TAD_Producto_cartesiano.
- Relaciones binarias.
- Universo y grafo de una relación binaria.
- Relaciones reflexivas.
- Relaciones simétricas.
- Composición de relaciones binarias.
- Reconocimiento de subconjunto.
- Relaciones transitivas.
- Relaciones de equivalencia.
- Relaciones irreflexivas.
- Relaciones antisimétricas.
- Relaciones totales.
- Clausura reflexiva.
- Clausura simétrica.
- Clausura transitiva.
- El tipo abstracto de datos de los polinomios.
- El TAD de los polinomios mediante tipos algebraicos.
- El TAD de los polinomios mediante listas densas.
- El TAD de los polinomios mediante listas dispersas.
- TAD de los polinomios: Transformaciones entre las representaciones dispersa y densa.
- TAD de los polinomios: Transformaciones entre polinomios y listas dispersas.
- TAD de los polinomios: Coeficiente del término de grado k.
- TAD de los polinomios: Transformaciones entre polinomios y listas densas.
- TAD de los polinomios: Construcción de términos.
- TAD de los polinomios: Término líder de un polinomio.
- TAD de los polinomios: Suma de polinomios.
- TAD de los polinomios: Producto de polinomios.
- TAD de los polinomios: Valor de un polinomio en un punto.
- TAD de los polinomios: Comprobación de raíces de polinomios
- TAD de los polinomios: Derivada de un polinomio.
- TAD de los polinomios: Resta de polinomios.
- TAD de los polinomios: Potencia de un polinomio.
- TAD de los polinomios: Integral de un polinomio.
- TAD de los polinomios: Integral definida de un polinomio.
- TAD de los polinomios: Multiplicación de un polinomio por un número.
- TAD de los polinomios: División de polinomios.
- TAD de los polinomios: Divisibilidad de polinomios.
- TAD de los polinomios: Método de Horner del valor de un polinomio.
- TAD de los polinomios: Término independiente de un polinomio.
- TAD de los polinomios: Regla de Ruffini con representación densa.
- TAD de los polinomios: Regla de Ruffini.
- TAD de los polinomios: Reconocimiento de raíces por la regla de Ruffini.
- TAD de los polinomios: Raíces enteras de un polinomio.
- TAD de los polinomios: Factorización de un polinomio.
- El tipo abstracto de datos de los grafos.
- El TAD de los grafos mediante listas de adyacencia.
- TAD de los grafos: Grafos_completos.
- TAD de los grafos: Grafos ciclos.
- TAD de los grafos: Número de vértices.
- TAD de los grafos: Incidentes de un vértice.
- TAD de los grafos: Contiguos de un vértice.
- TAD de los grafos: Lazos de un grafo.
- TAD de los grafos: Número de aristas de un grafo.
- TAD de los grafos: Grados positivos y negativos.
- TAD de los grafos: Generadores de grafos arbitrarios.
- TAD de los grafos: Propiedades de grados positivos y negativos.
- TAD de los grafos: Grado de un vértice.
- TAD de los grafos: Lema del apretón de manos.
- TAD de los grafos: Grafos regulares.
- TAD de los grafos: Grafos k-regulares.
- TAD de los grafos: Recorridos en un grafo completo.
- TAD de los grafos: Anchura de un grafo.
- TAD de los grafos: Recorrido en profundidad.
- TAD de los grafos: Recorrido en anchura.
- TAD de los grafos: Grafos conexos.
- TAD de los grafos: Coloreado correcto de un mapa.
- TAD de los grafos: Nodos aislados de un grafo.
- TAD de los grafos: Nodos conectados en un grafo.
- TAD de los grafos: Algoritmo de Kruskal.
- TAD de los grafos: Algoritmo de Prim.
- Búsqueda en espacios de estados por profundidad.
- El problema de las n reinas (mediante búsqueda en espacios de estados por profundidad).
- Búsqueda en espacios de estados por anchura.
- El problema de las n reinas (mediante búsqueda en espacios de estados por anchura).
- El problema de la mochila (mediante espacio de estados).
- El tipo abstracto de datos de las colas de prioridad.
- El tipo de datos de las colas de prioridad mediante listas.
- Búsqueda por primero el mejor.
- El problema del 8 puzzle.
- Búsqueda en escalada.
- El problema del cambio de monedas por escalada.
- El algoritmo de Prim del árbol de expansión mínimo por escalada.
- El problema del granjero mediante búsqueda en espacio de estado.
- El problema de las fichas mediante búsqueda en espacio de estado.
- El problema del calendario mediante búsqueda en espacio de estado.
- El problema del dominó.
- Problema de suma cero.
- Problema de las jarras.
- La función de Fibonacci por programación dinámica.
- Coeficientes binomiales.
- Longitud de la subsecuencia común máxima.
- Subsecuencia común máxima.
- La distancia Levenshtein (con programación dinámica).
- Caminos en una retícula (con programación dinámica).
- Caminos en una matriz (con programación dinámica).
- Máxima suma de los caminos en una matriz.
- Camino de máxima suma en una matriz.
- Método de Herón para calcular la raíz cuadrada.
- Método de Newton para calcular raíces.
- Funciones inversas por el método de Newton.
- Límites de sucesiones.
- Método de bisección para calcular ceros de una función.
- Raíces enteras.
- Integración por el método de los rectángulos.
- Algoritmo de bajada para resolver un sistema triangular inferior.
- 09 Números de Pentanacci.
- 14 El teorema de Navidad de Fermat.
- 19 Números primos de Hilbert.
- 24 Factorizaciones de números de Hilbert.
- 29 Sumas de dos primos.
- 04 Representaciones de un número como suma de dos cuadrados.
- 09 La serie de Thue-Morse.
- 14 La sucesión de Thue-Morse.
- 19 Huecos maximales entre primos.
- 24 La función indicatriz de Euler.
- 29 Ceros finales del factorial.
- 04 Primos cubanos.
- 09 Cuadrado más cercano (vídeo).
- 14 Suma de cadenas.
- 19 Sistema factorádico de numeración.
- 24 Duplicación de cada elemento.
- 29 Suma de fila del triángulo de los impares.
- 04 Reiteración de suma de consecutivos.
- 09 Producto de los elementos de la diagonal principal.
- 14 Reconocimiento de potencias de 4.
- 19 Exponente en la factorización.
- 24 Mayor órbita de la sucesión de Collatz
- 29 Máximos locales (vídeo).
- 04 Caminos en un triángulo.
- 09 Máxima suma de caminos en un triángulo.
- 14 Números amigos.
- 19 Primos equidistantes.
- 24 Numeración de ternas de naturales.
- 29 Números triangulares con n cifras distintas (vídeos).
- 04 Posiciones de las diagonales principales.
- 09 Diagonales principales de una matriz.
- 14 Matrices de Toeplitz.
- 19 Diferencia simétrica.
- 24 Conjunto de primos relativos.
- 29 Descomposiciones triangulares.