PFH: La semana en Exercitium (11 de junio de 2022)

Esta semana he publicado en Exercitium las soluciones de los siguientes problemas:

A continuación se muestran las soluciones.

1. Diccionario de frecuencias

Definir la función

tal que (frecuencias xs) es el diccionario formado por los elementos de xs junto con el número de veces que aparecen en xs. Por ejemplo,

Soluciones

El código se encuentra en GitHub.

2. Primos circulares

Un primo circular es un número tal que todas las rotaciones de dígitos producen números primos. Por ejemplo, 195 es un primo circular ya que las rotaciones de sus dígitos son 197, 971 y 719 y los tres números son primos.

Definir la lista

cuyo valor es la lista de los números primos circulares. Por ejemplo,

Soluciones

El código se encuentra en GitHub.

3. Codificación de Gödel

Dada una lista de números naturales xs, codificación de Gödel de xs se obtiene multiplicando las potencias de los primos sucesivos, siendo los exponentes los sucesores de los elementos de xs. Por ejemplo, si xs = [6,0,4], la codificación de xs es

Definir las funciones

tales que

  • (codificaG xs) es la codificación de Gödel de xs. Por ejemplo,

  • (decodificaG n) es la lista xs cuya codificación es n. Por ejemplo,

Comprobar con QuickCheck que ambas funciones son inversas; es decir,

Soluciones

El código se encuentra en GitHub.

4. Representación matricial de relaciones binarias

Dada una relación r sobre un conjunto de números enteros, la matriz asociada a r es una matriz booleana p (cuyos elementos son True o False), tal que p(i,j) = True si y sólo si i está relacionado con j mediante la relación r.

Las relaciones binarias homogéneas y las matrices booleanas se pueden representar por

Definir la función

tal que (matrizRB r) es la matriz booleana asociada a r. Por ejemplo,

Soluciones

El código se encuentra en GitHub.

5. Distancia esperada entre dos puntos de un cuadrado unitario

Definir, por simulación, la función

tal que (distanciaEsperada n) es la distancia esperada entre n puntos del cuadrado unitario de vértices opuestos (0,0) y (1,1), elegidos aleatoriamente. Por ejemplo,

El valor exacto de la distancia esperada es

Definir la función

tal que (graficaDistanciaEsperada ns) dibuja las gráficas de los pares (n, distanciaEsperada n) para n en la lista creciente ns junto con la recta y = ve, donde ve es el valor exacto. Por ejemplo, (graficaDistanciaEsperada [10,30..4000]) dibuja

Soluciones

El código se encuentra en GitHub.