Cálculo del número de islas rectangulares en una matriz

En este problema se consideran matrices cuyos elementos son 0 y 1. Los valores 1 aparecen en forma de islas rectangulares separadas por 0 de forma que como máximo las islas son diagonalmente adyacentes. Por ejemplo,

Definir la función

tal que (numeroDeIslas p) es el número de islas de la matriz p. Por ejemplo,

Soluciones

Mayor diferencia progresiva

La diferencia progresiva entre dos elementos de una lista es la resta entre el que ocupa la mayor posición y la menor. Por ejemplo, en la lista [1,5,8,2,9] la diferencia entre los elementos 5 y 8 es 3 y entre 5 y 2 es -3.

Definir la función

tal que (mayorDiferencia xs) es la mayor diferencia progresiva entre los elementos de xs. Por ejemplo,

Soluciones

Suma de conjuntos de polinomios

Los conjuntos de polinomios se pueden representar por listas de listas de la misma longitud. Por ejemplo, los polinomios 3x²+5x+9, 10x³+9 y 8x³+5x²+x-1 se pueden representar por las listas [0,3,5,9], [10,0,0,9] y [8,5,1,-1].

Definir la función

tal que (sumaPolinomios ps) es la suma de los polinomios ps. Por ejemplo,

Soluciones

Mínimo número de cambios para igualar una lista

Definir la función

tal que (nMinimoCambios xs) es el menor número de elementos de xs que hay que cambiar para que todos sean iguales. Por ejemplo,

En el primer ejemplo, los elementos que hay que cambiar son 5, 7, 9 y 6.

Soluciones

Diagonales secundarias de una matriz

Definir la función

tal que (diagonalesSecundarias p) es la lista de las diagonales secundarias de p. Por ejemplo, para la matriz

la lista de sus diagonales secundarias es

En Haskell,

Soluciones

Mayor producto de n dígitos consecutivos de un número

Definir la función

tal que (mayorProducto n x) es el mayor producto de n dígitos consecutivos del número x (suponiendo que x tiene al menos n dígitos). Por ejemplo,

Soluciones

Segmentos de longitud dada

Definir la función

tal que (segmentos n xs) es la lista de los segmentos de longitud n de la lista xs. Por ejemplo,

Soluciones

Menor número triangular con más de n divisores

La sucesión de los números triangulares se obtiene sumando los números naturales.

Así, el 7º número triangular es

Los primeros 10 números triangulares son

Los divisores de los primeros 7 números triangulares son:

Como se puede observar, 28 es el menor número triangular con más de 5 divisores.

Definir la función

tal que (menorTriangularConAlMenosNDivisores n) es el menor número triangular que tiene al menos n divisores. Por ejemplo,

Soluciones

Mayor capicúa producto de dos números de n cifras

Un capicúa es un número que es igual leído de izquierda a derecha que de derecha a izquierda.

Definir la función

tal que (mayorCapicuaP n) es el mayor capicúa que es el producto de dos números de n cifras. Por ejemplo,

Soluciones

Siguiente elemento en una lista

Definir la función

tal que (siguiente x ys) es justo el elemento siguiente a la primera ocurrencia de x en ys o Nothing si x no pertenece a ys. Por ejemplo,

Soluciones

Números polidivisibles

Introducción

Un número natural es polidivisible si cumple las siguientes condiciones:

  • El número formado por sus dos primeros dígitos es divisible por 2.
  • El número formado por sus tres primeros dígitos es divisible por 3.
  • El número formado por sus cuatros primeros dígitos es divisible por 4.
  • etcétera.

Por ejemplo, el número 345654 es un número polidivisible ya que

  • 34 es divisible por 2,
  • 345 es divisible por 3,
  • 3456 es divisible por 4,
  • 34565 es divisible por 5 y
  • 345654 es divisible por 6.

pero 123456 no lo es, porque 1234 no es divisible por 4.

Enunciado

Definir las funciones

tales que

  • polidivisible es la sucesión cuyos elementos son los números polidivisibles. Por ejemplo,

  • (polidivisiblesN k) es la lista de los números polidivisibles con k dígitos. Por ejemplo,

Comprobar que, para n entre 1 y 5, la cantidad de números polidivisibles de n dígitos es 9*10^(n-1)/n!.

Soluciones

Posición del primer falso en un vector

Excercitium

Definir la función

tal que (posicion v) es la menor posición del vector de booleanos v cuyo valor es falso y es Nothing si todos los valores son verdaderos. Por ejemplo,

Soluciones

División según una propiedad

Enunciado

Definir la función

tal que (divideSegun p xs) es la lista de los segmentos de xs cuyos elementos no cumplen la propiedad p. Por ejemplo,

Comprobar con QuickCheck que, para cualquier lista xs de números enteros, la concatenación de los elementos de (divideSegun even xs) es la lista de los elementos de xs que no son pares.

Soluciones

Particiones en listas de segmentos

Exercitium

Definir la función

tal que (particiones n xs) es la lista de listas de n elementos cuya concatenación es xs. Por ejemplo,

Soluciones

Números naturales separados por ceros

Enunciado

Definir la sucesión

cuyos elementos son los números naturales separados por 0. Por ejemplo,

Comprobar con QuickCheck que el n-ésimo término de la sucesión es n*(1+(-1)^n)/4.

Nota. En la comprobación usar

Soluciones

Enumeración de los números enteros

Exercitium

Definir la sucesión

tal que sus elementos son los números enteros comenzando en el 0 e intercalando los positivos y los negativos. Por ejemplo,

Comprobar con QuickCheck que el n-ésimo término de la sucesión es (1-(2n+1)(-1)^n)/4.

Nota. En la comprobación usar

Soluciones

Sustitución de listas

Definir la función

tal que (sustituye xs ys zs) es la lista obtenida sustituyendo las ocurrencias de la lista no vacía xs en zs por ys. Por ejemplo,

Soluciones

Triparticiones de una lista

Definir la función

tal que (triparticiones xs) es la lista de las ternas (xs1,xs2,xs3) tales que su concatenación es xs. Por ejemplo,

Comprobar con QuickCheck que, suponiendo que xs es una lista de elementos comparables por igualdad, entonces para cada terna de (triparticiones xs) se cumple que la concatenación de sus elementos es xs.

Soluciones

Listas con suma dada

Definir la función

tal que (conSuma xs yss) es la lista de los vectores de xss cuya suma vectorial es xs. Por ejemplo,

Soluciones

Suma de una lista de vectores

Definir la función

tal que (sumaVec xss) es la suma de los vectores de xss. Por ejemplo,

Soluciones

Ordenación según una función

Definir la función

tal que (ordenaSegun f xs) es la lista obtenida ordenando los elementos de xs según sus valores mediante la función f. Por ejemplo,

Comprobar con QuickCheck que (ordenaSegun id) es equivalente a sort.

Soluciones

Mezcla de infinitas listas infinitas

Definir la función

tal que (mezclaTodas xss) es la mezcla ordenada de xss, donde tanto xss como sus elementos son listas infinitas ordenadas. Por ejemplo,

Soluciones

Conjuntos de puntos enteros en regiones rectangulares

Los puntos de una cuadrícula se puede representar mediante pares de números enteros

y las regiones rectangulares mediante el siguiente tipo de dato

donde

  • (Rectangulo p1 p2) es la región formada por un rectángulo cuyo vértice superior izquierdo es p1 y su vértice inferior derecho es p2.
  • (Union r1 r2) es la región cuyos puntos pertenecen a alguna de las regiones r1 y r2.
  • (Diferencia r1 r2) es la región cuyos puntos pertenecen a la región r1 pero no pertenecen a la r2.

Definir la función

tal que (puntos r) es la lista de puntos de la región r. Por ejemplo, usando las regiones definidas por

se tiene

Comprobar con QuickCheck, usando la función enRegion definida en el ejercicio [Puntos en regiones rectangulares](Puntos en regiones rectangulares) que (enRegion p r) es equivalente a (p elem puntos r).

Nota: Escribir las soluciones usando la siguiente plantilla que contiene un generador de regiones

Soluciones

Máxima suma de los segmentos

Un segmento de una lista xs es una sublista de xs formada por elementos consecutivos en la lista. El problema de la máxima suma de segmentos consiste en dada una lista de números enteros calcular el máximo de las sumas de todos los segmentos de la lista. Por ejemplo, para la lista [-1,2,-3,5,-2,1,3,-2,-2,-3,6] la máxima suma de segmentos es 7 que es la suma del segmento [5,-2,1,3] y para la lista [-1,-2,-3] es 0 que es la suma de la lista vacía.

Definir la función

tal que (mss xs) es la máxima suma de los segmentos de xs. Por ejemplo,

Soluciones

Referencias

Listas disjuntas

Definir la función

tal que (disjuntas xs ys) se verifica si las listas ordenadas crecientemente xs e ys son disjuntas. Por ejemplo,

Soluciones

Triángulos de Herón

Un triángulo de Herón es un triángulo tal que sus lados y su área son números enteros. Su nombre se debe al matemático griego Herón de Alejandría que descubrió la fórmula para calcular el área de un triángulo a partir de sus lados.

La fórmula de Herón dice que el área de un triángulo cuyos lados miden a, b y c es
     \sqrt{s(s-a)(s-b)(s-c)}
donde s es el semiperímetro del triángulo; es decir,
     s = \displaystyle \frac{a+b+c}{2}

Un ejemplo de triángulo de Herón es el triángulo de lados 3, 4 y 5 cuya área es 6. Se puede observar que cualquier triángulo cuyos lados sean múltiplos de 3, 4 y 5 también es de Herón; por ejemplo, el de lados 6, 8 y 10 también lo es.

Se dice que un triángulo de Herón es primitivo si el máximo común divisor de sus lados es 1. Por ejemplo, el de lados 3, 4 y 5 es primitivo; pero el de lados 6, 8 y 10 no lo es.

Definir la sucesión

tal que sus elementos son los triángulos de Herón primitivos ordenados por su perímetro. Por ejemplo,

Soluciones

2015 y los números pitagóricos

Un número pitagórico es un número natural cuyo cuadrado se puede escribir como la suma de los cuadrados de dos números naturales no nulos; es decir, el número natural a es pitagórico si existen dos números naturales b y c distintos de cero tales que a² = b²+c². Por ejemplo, 5 es un número pitagórico ya que 5² = 3²+4² y también lo es 2015 ya que 2015² = 1612²+1209².

Definir la sucesión

cuyos elementos son los números pitagóricos. Por ejemplo,

Calcular la posición de 2015 en la sucesión.

Soluciones

Varios cuadrados encajados rotando

Enunciado

Definir la función

de forma que (cuadrados n) sea la animación obtenida rotando n cuadrados encajados como se muestra a continuación.

Nota: Escribir las soluciones usando la siguiente plantilla

Soluciones

Varios cuadrados encajados

Enunciado

Definir la función

tal que (cuadrados n) dibuje n cuadrados encajados como se muestra en las siguientes figuras:

  • para n=2
    Cuadrados_encajados_2

  • para n=4
    Cuadrados_encajados_4

  • para n=10
    Cuadrados_encajados_10

Nota: Escribir las soluciones usando la siguiente plantilla

Soluciones

Dos cuadrados encajados

Enunciado

Definir la función

que dibuje dos cuadrados encajados como se muestra en la siguiente figura
2CuadradosEncajados

Nota: Escribir las soluciones usando la siguiente plantilla

Soluciones