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

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

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

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

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

Simplificación de expresiones booleanas

El siguiente tipo de dato algebraico representa las expresiones booleanas construidas con una variable (X), las constantes verdadera (V) y falsa (F), la negación (Neg) y la disyunción (Dis):

Por ejemplo, la expresión (¬X v V) se representa por (Dis (Neg X) V).

Definir las funciones

tales que (valor p i) es el valor de la expresión p cuando se le asigna a X el valor i. Por ejemplo,

y (simplifica p) es la expresión obtenida aplicándole a p las siguientes reglas de simplificación:

Por ejemplo,

Comprobar con QuickCheck que para cualquier expresión p y cualquier booleano i se verifica que (valor (simplifica p) i) es igual a (valor p i).

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

Soluciones

2015 y los números con factorización capicúa

Un número tiene factorización capicúa si puede escribir como un producto de números primos tal que la concatenación de sus dígitos forma un número capicúa. Por ejemplo, el 2015 tiene factorización capicúa ya que 2015 = 13·5·31, los factores son primos y su concatenación es 13531 que es capicúa.

Definir la sucesión

formada por los números que tienen factorización capicúa. Por ejemplo,

Usando conFactorizacionesCapicuas escribir expresiones cuyos valores sean las respuestas a las siguientes preguntas y calcularlas

  1. ¿Qué lugar ocupa el 2015 en la sucesión?
  2. ¿Cuál fue el anterior año con factorización capicúa?
  3. ¿Cuál será el siguiente año con factorización capicúa?

Soluciones

Desemparejamiento de listas

Definir la función

tal que (desemparejada ps) es el par de lista (xs,ys) tal que al emparejar (con zip) xs e ys devuelve ps. Por ejemplo,

Comprobar con QuickCheck que

  • desemparejada es equivalente a la función predefinida unzip.
  • si el valor de (desemparejada ps) es (xs,ys), entonces (zip xs ys) es igual a ps.

Soluciones

Fractal de la curva del dragón

La curva del dragón es un fractal que se construye siguiendo los siguientes pasos:

  • A partir de un segmento, se construye el triángulo rectángulo e isósceles, como lo muestra las dos primeras figuras. Luego se borra el segmento inicial.
  • Se repite varias veces el proceso de remplazar un segmento por otros dos para cada línea de la curva, alternando siempre la orientación de los triángulos.

La siguiente figura muestra los trece primeros pasos:
Formación_de_la_curva_del_dragón

El ejercicio consiste en definir (en CodeWorld) la función

tal que dragon(n) es el dibujo correspondiente al paso n de la construcción de la curva del dragón. Por ejemplo, el dibujo de dragon(20) es
Dragon

Comentarios

  1. La descripción de la curva dragón es la que se encuentra en el artículo de la Wikipedia.
  2. Una definición análoga es la del fractal de la curva de Koch.

Soluciones

Elementos adicionales

Enunciado

Soluciones

Representaciones de matrices

Enunciado

Soluciones

Permutación de elementos consecutivos

Soluciones

Juego de bloques con letras

Introducción

Para el juego de los bloques se dispone de un conjunto de bloques con una letra en cada una de sus dos caras. El objetivo del juego consiste en formar palabras sin que se pueda usar un bloque más de una vez y sin diferenciar mayúsculas de minúsculas. Por ejemplo, si se tiene tres bloques de forma que el 1º tiene las letras A y B, el 2ª la N y la O y el 3º la O y la A entonces se puede obtener la palabra ANA de dos formas: una con los bloques 1, 2 y 3 y otra con los 3, 2 y 1.

Enunciado

Soluciones

Números que sumados a su siguiente primo dan primos

Introducción

La Enciclopedia electrónica de sucesiones de enteros (OEIS por sus siglas en inglés, de On-Line Encyclopedia of Integer Sequences) es una base de datos que registra sucesiones de números enteros. Está disponible libremente en Internet, en la dirección http://oeis.org.

La semana pasada Antonio Roldán añadió una nueva sucesión a la OEIS, la A249624 que sirve de base para el problema de hoy.

Enunciado

Soluciones

Normalización de expresiones aritméticas

Enunciado

Soluciones

Llanuras de longitud dada

Enunciado

Soluciones

Referencias

Esté ejercicio está basado en el problema Llanura de números iguales con longitud igual a n propuesto Solveet!

Expresiones vectoriales

Enunciado

Expresiones aritmética normalizadas

Enunciado

Soluciones

Particiones de longitud fija

Enunciado

Soluciones

Evaluación de árboles de expresiones aritméticas

Enunciado

Soluciones

Aplicaciones alternativas

Enunciado

Soluciones

[schedule expon=’2014-12-03′ expat=»06:00″]

  • Las soluciones se pueden escribir en los comentarios hasta el 3 de diciembre.
  • El código se debe escribir entre una línea con <pre lang=»haskell»> y otra con </pre>

[/schedule]

[schedule on=’2014-12-03′ at=»06:00″]

[/schedule]

Repetición cíclica

Enunciado

Soluciones

Elemento común en la menor posición

Enunciado

Soluciones

[schedule expon=’2014-12-01′ expat=»06:00″]

  • Las soluciones se pueden escribir en los comentarios hasta el 1 de diciembre.
  • El código se debe escribir entre una línea con <pre lang=»haskell»> y otra con </pre>

[/schedule]

[schedule on=’2014-12-01′ at=»06:00″]

[/schedule]

Cuantificadores sobre listas

Enunciado

Soluciones

[schedule expon=’2014-11-28′ expat=»06:00″]

  • Las soluciones se pueden escribir en los comentarios hasta el 28 de noviembre.
  • El código se debe escribir entre una línea con <pre lang=»haskell»> y otra con </pre>

[/schedule]

[schedule on=’2014-11-28′ at=»06:00″]

[/schedule]

Inversa a trozos

Enunciado

Soluciones

[schedule expon=’2014-11-27′ expat=»06:00″]

  • Las soluciones se pueden escribir en los comentarios hasta el 27 de noviembre.
  • El código se debe escribir entre una línea con <pre lang=»haskell»> y otra con </pre>

[/schedule]

[schedule on=’2014-11-27′ at=»06:00″]

[/schedule]