<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?action=history&amp;feed=atom&amp;title=Examen_05%2F07%2F2021</id>
	<title>Examen 05/07/2021 - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?action=history&amp;feed=atom&amp;title=Examen_05%2F07%2F2021"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_05/07/2021&amp;action=history"/>
	<updated>2026-07-20T00:41:53Z</updated>
	<subtitle>Historial de revisiones de esta página en el wiki</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_05/07/2021&amp;diff=445&amp;oldid=prev</id>
		<title>Mdelamor: Página creada con «&lt;source lang=&#039;haskell&#039;&gt;   import Data.List import Data.Maybe import Data.Numbers.Primes import Test.QuickCheck import I1M.PolOperaciones  -- -------------------------------…»</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_05/07/2021&amp;diff=445&amp;oldid=prev"/>
		<updated>2021-11-17T22:18:21Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;source lang=&amp;#039;haskell&amp;#039;&amp;gt;   import Data.List import Data.Maybe import Data.Numbers.Primes import Test.QuickCheck import I1M.PolOperaciones  -- -------------------------------…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang=&amp;#039;haskell&amp;#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
import Data.List&lt;br /&gt;
import Data.Maybe&lt;br /&gt;
import Data.Numbers.Primes&lt;br /&gt;
import Test.QuickCheck&lt;br /&gt;
import I1M.PolOperaciones&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1. Dado un número entero n &amp;gt; 1, se puede transformar en una&lt;br /&gt;
-- lista como sigue:&lt;br /&gt;
-- + Se comienza con la lista xs formada por los divisores primos de n&lt;br /&gt;
--   ordenados de menor a mayor.&lt;br /&gt;
-- + A continuación, cada x elemento de xs se sustituye por la lista&lt;br /&gt;
--   vacía si x es igual a 2 o por su índice en la sucesión de los&lt;br /&gt;
--   números primos si x es distinto de 2. &lt;br /&gt;
-- La lista obtenida se llama la codificación de n. Por ejemplo, si n es&lt;br /&gt;
-- 3300 en el primer paso se obtiene la lista&lt;br /&gt;
--    [2,2,3,5,5,11]&lt;br /&gt;
-- y en el segundo,&lt;br /&gt;
--    [[],[],[1],[2],[2],[4]]&lt;br /&gt;
--&lt;br /&gt;
-- Definir las funciones&lt;br /&gt;
--    codificacion   :: Int -&amp;gt; [[Int]]&lt;br /&gt;
--    decodificacion :: [[Int]] -&amp;gt; Int&lt;br /&gt;
-- tales que&lt;br /&gt;
-- + (codificacion n) es la codificación del número n. Por ejemplo,&lt;br /&gt;
--      codificacion 3300  ==  [[],[],[1],[2],[2],[4]]&lt;br /&gt;
--      codificacion 12    ==  [[],[],[1]]&lt;br /&gt;
--      codificacion 324   ==  [[],[],[1],[1],[1],[1]]&lt;br /&gt;
--      codificacion 525   ==  [[1],[2],[2],[3]]&lt;br /&gt;
-- + (decodificacion xss) es el número n tal que su codificación es&lt;br /&gt;
--   xss. Por ejemplo,&lt;br /&gt;
--      decodificacion [[],[],[1],[2],[2],[4]] ==  3300&lt;br /&gt;
--      decodificacion [[],[],[1]]             ==  12&lt;br /&gt;
--      decodificacion [[],[],[1],[1],[1],[1]] ==  324&lt;br /&gt;
--      decodificacion [[1],[2],[2],[3]]       ==  525&lt;br /&gt;
--&lt;br /&gt;
-- Comprobar con QuickChek para todo número entero n &amp;gt; 1, si decodifica&lt;br /&gt;
-- la codificación de n se obtiene el número n.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
codificacion :: Int -&amp;gt; [[Int]]&lt;br /&gt;
codificacion n = map f (primeFactors n)&lt;br /&gt;
  where f p | p == 2    = []&lt;br /&gt;
            | otherwise = [indicePrimo p]&lt;br /&gt;
&lt;br /&gt;
-- (indicePrimo p) es la posición de p en la sucesión de los números&lt;br /&gt;
-- primos. Por ejemplo,&lt;br /&gt;
--    indicePrimo 3 ==  1&lt;br /&gt;
--    indicePrimo 7 ==  3&lt;br /&gt;
indicePrimo :: Int -&amp;gt; Int&lt;br /&gt;
indicePrimo p = head [i | (i,q) &amp;lt;- zip [0..] primes, q == p]&lt;br /&gt;
&lt;br /&gt;
-- Se puede redefinir como sigue&lt;br /&gt;
indicePrimo2 :: Int -&amp;gt; Int&lt;br /&gt;
indicePrimo2 = fromJust . (`elemIndex` primes)&lt;br /&gt;
&lt;br /&gt;
decodificacion :: [[Int]] -&amp;gt; Int&lt;br /&gt;
decodificacion = product . map g&lt;br /&gt;
  where g []     = 2&lt;br /&gt;
        g (x:xs) = primes !! x&lt;br /&gt;
&lt;br /&gt;
-- La propieda es&lt;br /&gt;
propCodificacion :: Int -&amp;gt; Bool&lt;br /&gt;
propCodificacion n = decodificacion (codificacion m) == m&lt;br /&gt;
  where m = 2 + abs n&lt;br /&gt;
&lt;br /&gt;
-- La comprobación es&lt;br /&gt;
--    λ&amp;gt; quickCheck propCodificacion&lt;br /&gt;
--    +++ OK, passed 100 tests.&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2. Definir la función&lt;br /&gt;
--    raicesApol :: (Num a, Eq a) =&amp;gt; [(a,Int)] -&amp;gt; Polinomio a&lt;br /&gt;
-- tal que (raicesApol xs) es el polinomio p tal que el xs s la lista de&lt;br /&gt;
-- los pares (x,m), donde x representa una raíz de p y m su&lt;br /&gt;
-- multiplicidad. Por ejemplo,&lt;br /&gt;
--    λ&amp;gt; raicesApol [(3,2)]&lt;br /&gt;
--    x^2 + -6*x + 9&lt;br /&gt;
--    λ&amp;gt; raicesApol [(2,3)]&lt;br /&gt;
--    x^3 + -6*x^2 + 12*x + -8&lt;br /&gt;
--    λ&amp;gt; raicesApol [(1,2),(2,1)]&lt;br /&gt;
--    x^3 + -4*x^2 + 5*x + -2&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
raicesApol :: (Num a, Eq a) =&amp;gt; [(a,Int)] -&amp;gt; Polinomio a&lt;br /&gt;
raicesApol xs = foldr multPol polUnidad ps&lt;br /&gt;
  where ps = [potencia (consPol 1 1 (consPol 0 (-x) polCero)) m | (x,m) &amp;lt;- xs]&lt;br /&gt;
&lt;br /&gt;
-- (potencia p n) es a n-ésima potencia del polinomio p. Por ejemplo,&lt;br /&gt;
--    λ&amp;gt; p = consPol 3 2 (consPol 0 10 polCero)&lt;br /&gt;
--    λ&amp;gt; p&lt;br /&gt;
--    2*x^3 + 10&lt;br /&gt;
--    λ&amp;gt; potencia p 2&lt;br /&gt;
--    4*x^6 + 40*x^3 + 100&lt;br /&gt;
--    λ&amp;gt; potencia p 3&lt;br /&gt;
--    8*x^9 + 120*x^6 + 600*x^3 + 1000&lt;br /&gt;
potencia :: (Num a, Eq a) =&amp;gt; Polinomio a -&amp;gt; Int -&amp;gt; Polinomio a&lt;br /&gt;
potencia p 0 = polUnidad&lt;br /&gt;
potencia p n = multPol p (potencia p (n-1))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3. El término&lt;br /&gt;
--    maximum (sum [3, y, product [2, z], 7]&lt;br /&gt;
-- se puede representar por&lt;br /&gt;
--    T &amp;quot;M&amp;quot; [T &amp;quot;S&amp;quot; [N 3, V &amp;#039;y&amp;#039;, T &amp;quot;P&amp;quot; [N 2, V &amp;#039;z&amp;#039;]], N 7&lt;br /&gt;
-- donde maximum se representa por &amp;quot;M&amp;quot;, sum por &amp;quot;S&amp;quot; y product por &amp;quot;P&amp;quot;.&lt;br /&gt;
-- Además, el valor del término anterior cuando y se interpreta por 5 y&lt;br /&gt;
-- z por 2 es 12.&lt;br /&gt;
--&lt;br /&gt;
-- En general, los términos aritméticos como los anteriores se pueden&lt;br /&gt;
-- definir por &lt;br /&gt;
--    data Termino = V Char&lt;br /&gt;
--                 | N Int&lt;br /&gt;
--                 | T String [Termino]&lt;br /&gt;
--      deriving Show&lt;br /&gt;
-- las interpretaciones de las variables son listas de pares, caracteres&lt;br /&gt;
-- y enteros&lt;br /&gt;
--    type InterpretacionVariables = [(Char, Int)]&lt;br /&gt;
-- las interpretaciones de las operaciones son listad de pares, cadenas&lt;br /&gt;
-- y funciones de listas de enteros en enteros&lt;br /&gt;
--    type InterpretacionOperaciones = [(String, ([Int] -&amp;gt; Int))]&lt;br /&gt;
-- y las interpretaciones son pares formados por interpretaciones de&lt;br /&gt;
-- variables y de operaciones&lt;br /&gt;
--    type Interpretacion = (InterpretacionVariables, InterpretacionOperaciones)&lt;br /&gt;
-- Por ejemplo, &lt;br /&gt;
--    ejInt1, ejInt2 :: Interpretacion&lt;br /&gt;
--    ejInt1 = ([(&amp;#039;x&amp;#039;,3),(&amp;#039;y&amp;#039;,5),(&amp;#039;z&amp;#039;,2)],&lt;br /&gt;
--              [(&amp;quot;S&amp;quot;, sum), (&amp;quot;P&amp;quot;, product), (&amp;quot;M&amp;quot;, maximum)])&lt;br /&gt;
--    ejInt2 = ([(&amp;#039;x&amp;#039;,1),(&amp;#039;y&amp;#039;,2),(&amp;#039;z&amp;#039;,3)],&lt;br /&gt;
--              [(&amp;quot;S&amp;quot;, sum), (&amp;quot;P&amp;quot;, product), (&amp;quot;M&amp;quot;, minimum)])&lt;br /&gt;
-- donde ejInt1 es la interpretación usada anteriormente.&lt;br /&gt;
--&lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    valor :: Termino -&amp;gt; Interpretacion -&amp;gt; Int&lt;br /&gt;
-- tal que (valor t i) es el valor del término t en la interpretación&lt;br /&gt;
-- i. Por ejemplo,&lt;br /&gt;
--    λ&amp;gt; valor (T &amp;quot;M&amp;quot; [T &amp;quot;S&amp;quot; [N 3, V &amp;#039;y&amp;#039;, T &amp;quot;P&amp;quot; [N 2, V &amp;#039;z&amp;#039;]], N 7]) ejInt1&lt;br /&gt;
--    12&lt;br /&gt;
--    λ&amp;gt; valor (T &amp;quot;M&amp;quot; [T &amp;quot;S&amp;quot; [N 3, V &amp;#039;y&amp;#039;, T &amp;quot;P&amp;quot; [N 2, V &amp;#039;z&amp;#039;]], N 7]) ejInt2&lt;br /&gt;
--    7&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
data Termino = V Char&lt;br /&gt;
             | N Int&lt;br /&gt;
             | T String [Termino]&lt;br /&gt;
  deriving Show&lt;br /&gt;
&lt;br /&gt;
type InterpretacionVariables = [(Char, Int)]&lt;br /&gt;
&lt;br /&gt;
type InterpretacionOperaciones = [(String, ([Int] -&amp;gt; Int))]&lt;br /&gt;
&lt;br /&gt;
type Interpretacion = (InterpretacionVariables, InterpretacionOperaciones)&lt;br /&gt;
&lt;br /&gt;
ejInt1, ejInt2 :: Interpretacion&lt;br /&gt;
ejInt1 = ([(&amp;#039;x&amp;#039;,3),(&amp;#039;y&amp;#039;,5),(&amp;#039;z&amp;#039;,2)],&lt;br /&gt;
          [(&amp;quot;S&amp;quot;, sum), (&amp;quot;P&amp;quot;, product), (&amp;quot;M&amp;quot;, maximum)])&lt;br /&gt;
ejInt2 = ([(&amp;#039;x&amp;#039;,1),(&amp;#039;y&amp;#039;,2),(&amp;#039;z&amp;#039;,3)],&lt;br /&gt;
          [(&amp;quot;S&amp;quot;, sum), (&amp;quot;P&amp;quot;, product), (&amp;quot;M&amp;quot;, minimum)])&lt;br /&gt;
               &lt;br /&gt;
--    λ&amp;gt; valor (T &amp;quot;M&amp;quot; [T &amp;quot;S&amp;quot; [N 3, V &amp;#039;y&amp;#039;, T &amp;quot;P&amp;quot; [N 2, V &amp;#039;z&amp;#039;]], N 7]) ejInt1&lt;br /&gt;
--    12&lt;br /&gt;
--    λ&amp;gt; valor (T &amp;quot;M&amp;quot; [T &amp;quot;S&amp;quot; [N 3, V &amp;#039;y&amp;#039;, T &amp;quot;P&amp;quot; [N 2, V &amp;#039;z&amp;#039;]], N 7]) ejInt2&lt;br /&gt;
--    7&lt;br /&gt;
valor :: Termino -&amp;gt; Interpretacion -&amp;gt; Int&lt;br /&gt;
valor (V x) i    = busca x (fst i)&lt;br /&gt;
valor (N n) _    = n&lt;br /&gt;
valor (T o ts) i = (busca o (snd i)) [valor t i | t &amp;lt;- ts]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Auxiliar:&lt;br /&gt;
busca :: Eq a1 =&amp;gt; a1 -&amp;gt; [(a1, a2)] -&amp;gt; a2&lt;br /&gt;
busca z ps = head [v | (u,v) &amp;lt;- ps, z == u]&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.1. Decimos que un número natural es creciente si sus&lt;br /&gt;
-- dígitos son distintos de cero y están ordenados de forma creciente;&lt;br /&gt;
-- es decir, cada uno es menor o igual que su siguiente. Por ejemplo,&lt;br /&gt;
-- 34468 es número creciente pero 34648 no lo es.&lt;br /&gt;
-- &lt;br /&gt;
-- Definir la función&lt;br /&gt;
--    crecientes :: Int -&amp;gt; Integer&lt;br /&gt;
-- tal que (crecientes n) es la cantidad de números crecientes con n&lt;br /&gt;
-- dígitos. Por ejemplo, &lt;br /&gt;
--    crecientes 1    ==  9&lt;br /&gt;
--    crecientes 2    ==  45&lt;br /&gt;
--    crecientes 3    ==  165&lt;br /&gt;
--    crecientes 7    ==  6435&lt;br /&gt;
--    crecientes 15   ==  490314&lt;br /&gt;
--    crecientes 30   ==  48903492&lt;br /&gt;
--    crecientes 100  ==  352025629371&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- 1ª solución&lt;br /&gt;
-- ===========&lt;br /&gt;
&lt;br /&gt;
crecientes1 :: Int -&amp;gt; Integer&lt;br /&gt;
crecientes1 = genericLength . sucCrecientes&lt;br /&gt;
&lt;br /&gt;
-- (sucCrecientes n) es la lista de las sucesiones crecientes con n&lt;br /&gt;
-- dígitos. Por ejemplo, &lt;br /&gt;
--    λ&amp;gt; sucCrecientes 2&lt;br /&gt;
--    [11,12,13,14,15,16,17,18,19,22,23,24,25,26,27,28,29,33,34,35,36,37,38,&lt;br /&gt;
--     39,44,45,46,47,48,49,55,56,57,58,59,66,67,68,69,77,78,79,88,89,99]&lt;br /&gt;
--    λ&amp;gt; take 10 (sucCrecientes 3)&lt;br /&gt;
--    [111,112,113,114,115,116,117,118,119,122]&lt;br /&gt;
--    λ&amp;gt; take 10 (sucCrecientes 4)&lt;br /&gt;
--    [1111,1112,1113,1114,1115,1116,1117,1118,1119,1122]&lt;br /&gt;
sucCrecientes :: Int -&amp;gt; [Int]&lt;br /&gt;
sucCrecientes n = filter esCreciente [10^(n-1)..10^n-1]&lt;br /&gt;
&lt;br /&gt;
-- (esCreciente n) se verifica si n es creciente. Por ejemplo,&lt;br /&gt;
--    esCreciente 3446 ==  True&lt;br /&gt;
--    esCreciente 3464 ==  False&lt;br /&gt;
esCreciente :: Int -&amp;gt; Bool&lt;br /&gt;
esCreciente n = sort ns == ns&lt;br /&gt;
  where ns = show n&lt;br /&gt;
&lt;br /&gt;
-- 2ª solución&lt;br /&gt;
-- ===========&lt;br /&gt;
&lt;br /&gt;
crecientes2 :: Int -&amp;gt; Integer&lt;br /&gt;
crecientes2 n = sum [crecientesDesde n k | k &amp;lt;- [1..9]]&lt;br /&gt;
&lt;br /&gt;
-- (crecientesDesde n k) es  la cantidad de números crecientes con&lt;br /&gt;
-- n dígitos cuyo primer dígito es k. Por ejemplo, &lt;br /&gt;
--    crecientesDesde 3 9 ==  1&lt;br /&gt;
--    crecientesDesde 3 8 ==  3&lt;br /&gt;
--    crecientesDesde 2 8 ==  2&lt;br /&gt;
--    crecientesDesde 3 8 ==  3&lt;br /&gt;
--    crecientesDesde 3 7 ==  6&lt;br /&gt;
crecientesDesde :: Int -&amp;gt; Int -&amp;gt; Integer&lt;br /&gt;
crecientesDesde 0 _ = 0&lt;br /&gt;
crecientesDesde 1 _ = 1&lt;br /&gt;
crecientesDesde n k = sum [crecientesDesde (n-1) j | j &amp;lt;- [k..9]]&lt;br /&gt;
&lt;br /&gt;
-- 3ª solución&lt;br /&gt;
-- ===========&lt;br /&gt;
&lt;br /&gt;
crecientes3 :: Int -&amp;gt; Integer&lt;br /&gt;
crecientes3 n = sum [p!(n,k) | k &amp;lt;- [1..9]]&lt;br /&gt;
  where p = matrizCrecientes3 n&lt;br /&gt;
&lt;br /&gt;
-- (matrizCrecientes3 n) es la matriz de n filas y 9 columnas p tal que&lt;br /&gt;
-- el valor en la posición (i,j) es cantidad de números crecientes3 con i&lt;br /&gt;
-- dígitos, cuyo primer dígito es j. Por ejemplo,&lt;br /&gt;
--    λ&amp;gt; matrizCrecientes3 1&lt;br /&gt;
--    ┌                   ┐&lt;br /&gt;
--    │ 1 1 1 1 1 1 1 1 1 │&lt;br /&gt;
--    └                   ┘&lt;br /&gt;
--    λ&amp;gt; matrizCrecientes3 2&lt;br /&gt;
--    ┌                   ┐&lt;br /&gt;
--    │ 1 1 1 1 1 1 1 1 1 │&lt;br /&gt;
--    │ 9 8 7 6 5 4 3 2 1 │&lt;br /&gt;
--    └                   ┘&lt;br /&gt;
--    λ&amp;gt; matrizCrecientes3 3&lt;br /&gt;
--    ┌                            ┐&lt;br /&gt;
--    │  1  1  1  1  1  1  1  1  1 │&lt;br /&gt;
--    │  9  8  7  6  5  4  3  2  1 │&lt;br /&gt;
--    │ 45 36 28 21 15 10  6  3  1 │&lt;br /&gt;
--    └                            ┘&lt;br /&gt;
--    λ&amp;gt; matrizCrecientes3 4&lt;br /&gt;
--    ┌                                     ┐&lt;br /&gt;
--    │   1   1   1   1   1   1   1   1   1 │&lt;br /&gt;
--    │   9   8   7   6   5   4   3   2   1 │&lt;br /&gt;
--    │  45  36  28  21  15  10   6   3   1 │&lt;br /&gt;
--    │ 165 120  84  56  35  20  10   4   1 │&lt;br /&gt;
--    └                                     ┘&lt;br /&gt;
matrizCrecientes3 :: Int -&amp;gt; Matrix Integer&lt;br /&gt;
matrizCrecientes3 n = p where&lt;br /&gt;
  p = matrix n 9 f&lt;br /&gt;
  f (1,_) = 1&lt;br /&gt;
  f (i,j) = sum [p!(i-1,k) | k &amp;lt;- [j..9]]&lt;br /&gt;
&lt;br /&gt;
-- 4ª solución&lt;br /&gt;
-- ===========&lt;br /&gt;
&lt;br /&gt;
crecientes :: Int -&amp;gt; Integer&lt;br /&gt;
crecientes n = sum [p!(n,k) | k &amp;lt;- [1..9]]&lt;br /&gt;
  where p = matrizCrecientes n&lt;br /&gt;
&lt;br /&gt;
-- (matrizCrecientes n) es la matriz de n filas y 9 columnas p tal que&lt;br /&gt;
-- el valor en la posición (i,j) es cantidad de números crecientes con i&lt;br /&gt;
-- dígitos, cuyo primer dígito es j. Por ejemplo,&lt;br /&gt;
--    λ&amp;gt; matrizCrecientes 1&lt;br /&gt;
--    ┌                   ┐&lt;br /&gt;
--    │ 1 1 1 1 1 1 1 1 1 │&lt;br /&gt;
--    └                   ┘&lt;br /&gt;
--    λ&amp;gt; matrizCrecientes 2&lt;br /&gt;
--    ┌                   ┐&lt;br /&gt;
--    │ 1 1 1 1 1 1 1 1 1 │&lt;br /&gt;
--    │ 9 8 7 6 5 4 3 2 1 │&lt;br /&gt;
--    └                   ┘&lt;br /&gt;
--    λ&amp;gt; matrizCrecientes 3&lt;br /&gt;
--    ┌                            ┐&lt;br /&gt;
--    │  1  1  1  1  1  1  1  1  1 │&lt;br /&gt;
--    │  9  8  7  6  5  4  3  2  1 │&lt;br /&gt;
--    │ 45 36 28 21 15 10  6  3  1 │&lt;br /&gt;
--    └                            ┘&lt;br /&gt;
--    λ&amp;gt; matrizCrecientes 4&lt;br /&gt;
--    ┌                                     ┐&lt;br /&gt;
--    │   1   1   1   1   1   1   1   1   1 │&lt;br /&gt;
--    │   9   8   7   6   5   4   3   2   1 │&lt;br /&gt;
--    │  45  36  28  21  15  10   6   3   1 │&lt;br /&gt;
--    │ 165 120  84  56  35  20  10   4   1 │&lt;br /&gt;
--    └                                     ┘&lt;br /&gt;
matrizCrecientes :: Int -&amp;gt; Matrix Integer&lt;br /&gt;
matrizCrecientes n = p where&lt;br /&gt;
  p = matrix n 9 f&lt;br /&gt;
  f (1,j) = 1&lt;br /&gt;
  f (i,9) = 1&lt;br /&gt;
  f (i,j) = p!(i,j+1) + p!(i-1,j)&lt;br /&gt;
&lt;br /&gt;
-- Comparación de eficiencia&lt;br /&gt;
-- =========================&lt;br /&gt;
&lt;br /&gt;
-- La comparación es&lt;br /&gt;
--    λ&amp;gt; crecientes1 7&lt;br /&gt;
--    6435&lt;br /&gt;
--    (4.97 secs, 12,711,235,024 bytes)&lt;br /&gt;
--    λ&amp;gt; crecientes2 7&lt;br /&gt;
--    6435&lt;br /&gt;
--    (0.04 secs, 5,723,952 bytes)&lt;br /&gt;
--    λ&amp;gt; crecientes3 7&lt;br /&gt;
--    6435&lt;br /&gt;
--    (0.01 secs, 225,704 bytes)&lt;br /&gt;
--    λ&amp;gt; crecientes 7&lt;br /&gt;
--    6435&lt;br /&gt;
--    (0.01 secs, 125,400 bytes)&lt;br /&gt;
--&lt;br /&gt;
--    λ&amp;gt; crecientes2 17&lt;br /&gt;
--    1081575&lt;br /&gt;
--    (2.17 secs, 1,714,280,592 bytes)&lt;br /&gt;
--    λ&amp;gt; crecientes3 17&lt;br /&gt;
--    1081575&lt;br /&gt;
--    (0.01 secs, 429,152 bytes)&lt;br /&gt;
--    λ&amp;gt; crecientes 17&lt;br /&gt;
--    1081575&lt;br /&gt;
--    (0.01 secs, 173,024 bytes)&lt;br /&gt;
--&lt;br /&gt;
--    λ&amp;gt; crecientes3 (10^5)&lt;br /&gt;
--    248105172272950452504148938027057501&lt;br /&gt;
--    (3.51 secs, 2,288,167,424 bytes)&lt;br /&gt;
--    λ&amp;gt; crecientes (10^5)&lt;br /&gt;
--    248105172272950452504148938027057501&lt;br /&gt;
--    (1.02 secs, 441,295,880 bytes)&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 4.2. Calcular la cantidad de números crecientes con 123456&lt;br /&gt;
-- dígitos.&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- El cálculo es&lt;br /&gt;
--    λ&amp;gt; crecientes4 123456&lt;br /&gt;
--    1338763082311070449095794652369476313&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mdelamor</name></author>
	</entry>
</feed>