{"id":7727,"date":"2022-05-01T11:18:16","date_gmt":"2022-05-01T09:18:16","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=7727"},"modified":"2022-05-01T11:18:16","modified_gmt":"2022-05-01T09:18:16","slug":"pfh-la-semana-en-exercitium-del-25-al-30-de-abril","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/pfh-la-semana-en-exercitium-del-25-al-30-de-abril\/","title":{"rendered":"PFH: La semana en Exercitium (del 25 al 30 de abril)"},"content":{"rendered":"<p>Esta semana he publicado en <a href=\"http:\/\/bit.ly\/2sqPtGs\">Exercitium<\/a> las soluciones de los siguientes problemas:<\/p>\n<ul>\n<li><a href=\"#ej1\">1. Representaci\u00f3n de Zeckendorf<\/a><\/li>\n<li><a href=\"#ej2\">2. Producto cartesiano de una familia de conjuntos<\/a><\/li>\n<li><a href=\"#ej3\">3. N\u00fameros con todos sus d\u00edgitos primos<\/a><\/li>\n<\/ul>\n<p>A continuaci\u00f3n se muestran las soluciones.<br \/>\n<!--more--><\/p>\n<p><a name=\"ej1\"><\/a><\/p>\n<h3>1. Representaci\u00f3n de Zeckendorf<\/h3>\n<p>Los primeros n\u00fameros de Fibonacci son<\/p>\n<pre lang=\"text\">\n   1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ...\n<\/pre>\n<p>tales que los dos primeros son iguales a 1 y los siguientes se obtienen sumando los dos anteriores.<\/p>\n<p>El <a href=\"https:\/\/bit.ly\/3k5NNt1\">teorema de Zeckendorf<\/a> establece que todo entero positivo n se puede representar, de manera \u00fanica, como la suma de n\u00fameros de Fibonacci no consecutivos decrecientes. Dicha suma se llama la representaci\u00f3n de Zeckendorf de n. Por ejemplo, la representaci\u00f3n de Zeckendorf de 100 es<\/p>\n<pre lang=\"text\">\n   100 = 89 + 8 + 3\n<\/pre>\n<p>Hay otras formas de representar 100 como sumas de n\u00fameros de Fibonacci; por ejemplo,<\/p>\n<pre lang=\"text\">\n   100 = 89 +  8 + 2 + 1\n   100 = 55 + 34 + 8 + 3\n<\/pre>\n<p>pero no son representaciones de Zeckendorf porque 1 y 2 son n\u00fameros de Fibonacci consecutivos, al igual que 34 y 55.<\/p>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   zeckendorf :: Integer -> [Integer]\n<\/pre>\n<p>tal que <code>(zeckendorf n)<\/code> es la representaci\u00f3n de Zeckendorf de <code>n<\/code>. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   zeckendorf 100 == [89,8,3]\n   zeckendorf 200 == [144,55,1]\n   zeckendorf 300 == [233,55,8,3,1]\n   length (zeckendorf (10^50000)) == 66097\n<\/pre>\n<p><!--more--><\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nmodule Representacion_de_Zeckendorf where\n\nimport Data.List (subsequences)\nimport Test.QuickCheck\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nzeckendorf1 :: Integer -> [Integer]\nzeckendorf1 = head . zeckendorf1Aux\n\nzeckendorf1Aux :: Integer -> [[Integer]]\nzeckendorf1Aux n =\n  [xs | xs <- subsequences (reverse (takeWhile (<= n) (tail fibs))),\n        sum xs == n,\n        sinFibonacciConsecutivos xs]\n\n-- fibs es la la sucesi\u00f3n de los n\u00fameros de Fibonacci. Por ejemplo,\n--    take 14 fibs  == [1,1,2,3,5,8,13,21,34,55,89,144,233,377]\nfibs :: [Integer]\nfibs = 1 : scanl (+) 1 fibs\n-- (sinFibonacciConsecutivos xs) se verifica si en la sucesi\u00f3n\n-- decreciente de n\u00famero de Fibonacci xs no hay dos consecutivos. Por\n-- ejemplo,\n\n-- (sinFibonacciConsecutivos xs) se verifica si en la sucesi\u00f3n\n-- decreciente de n\u00famero de Fibonacci xs no hay dos consecutivos. Por\n-- ejemplo,\n--    sinFibonacciConsecutivos [89, 8, 3]      ==  True\n--    sinFibonacciConsecutivos [55, 34, 8, 3]  ==  False\nsinFibonacciConsecutivos :: [Integer] -> Bool\nsinFibonacciConsecutivos xs =\n  and [x \/= siguienteFibonacci y | (x,y) <- zip xs (tail xs)]\n\n-- (siguienteFibonacci n) es el menor n\u00famero de Fibonacci mayor que\n-- n. Por ejemplo,\n--    siguienteFibonacci 34  ==  55\nsiguienteFibonacci :: Integer -> Integer\nsiguienteFibonacci n =\n  head (dropWhile (<= n) fibs)\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nzeckendorf2 :: Integer -> [Integer]\nzeckendorf2 = head . zeckendorf2Aux\n\nzeckendorf2Aux :: Integer -> [[Integer]]\nzeckendorf2Aux n = map reverse (aux n (tail fibs))\n  where aux 0 _ = [[]]\n        aux m (x:y:zs)\n            | x <= m     = [x:xs | xs <- aux (m-x) zs] ++ aux m (y:zs)\n            | otherwise  = []\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\nzeckendorf3 :: Integer -> [Integer]\nzeckendorf3 0 = []\nzeckendorf3 n = x : zeckendorf3 (n - x)\n  where x = last (takeWhile (<= n) fibs)\n\n-- 4\u00aa soluci\u00f3n\n-- ===========\n\nzeckendorf4 :: Integer -> [Integer]\nzeckendorf4 n = aux n (reverse (takeWhile (<= n) fibs))\n  where aux 0 _      = []\n        aux m (x:xs) = x : aux (m-x) (dropWhile (>m-x) xs)\n\n-- Comprobaci\u00f3n de equivalencia\n-- ============================\n\n-- La propiedad es\nprop_zeckendorf :: Positive Integer -> Bool\nprop_zeckendorf (Positive n) =\n  all (== zeckendorf1 n)\n      [zeckendorf2 n,\n       zeckendorf3 n,\n       zeckendorf4 n]\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_zeckendorf\n--    +++ OK, passed 100 tests.\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> zeckendorf1 (7*10^4)\n--    [46368,17711,4181,1597,89,34,13,5,2]\n--    (1.49 secs, 2,380,707,744 bytes)\n--    \u03bb> zeckendorf2 (7*10^4)\n--    [46368,17711,4181,1597,89,34,13,5,2]\n--    (0.07 secs, 21,532,008 bytes)\n--\n--    \u03bb> zeckendorf2 (10^6)\n--    [832040,121393,46368,144,55]\n--    (1.40 secs, 762,413,432 bytes)\n--    \u03bb> zeckendorf3 (10^6)\n--    [832040,121393,46368,144,55]\n--    (0.01 secs, 542,488 bytes)\n--    \u03bb> zeckendorf4 (10^6)\n--    [832040,121393,46368,144,55]\n--    (0.01 secs, 536,424 bytes)\n--\n--    \u03bb> length (zeckendorf3 (10^3000))\n--    3947\n--    (3.02 secs, 1,611,966,408 bytes)\n--    \u03bb> length (zeckendorf4 (10^2000))\n--    2611\n--    (0.02 secs, 10,434,336 bytes)\n--\n--    \u03bb> length (zeckendorf4 (10^50000))\n--    66097\n--    (2.84 secs, 3,976,483,760 bytes)\n<\/pre>\n<p>El c\u00f3digo se encuentra en <a href=\"https:\/\/github.com\/jaalonso\/Exercitium\/blob\/main\/src\/Representacion_de_Zeckendorf.hs\">GitHub<\/a>.<\/p>\n<p>La elaboraci\u00f3n de las soluciones se describe en el siguiente v\u00eddeo<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/U-nBf1WnLTw\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p><a name=\"ej2\"><\/a><\/p>\n<h3>2. Producto cartesiano de una familia de conjuntos<\/h3>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   producto :: [[a]] -> [[a]]\n<\/pre>\n<p>tal que (producto xss) es el producto cartesiano de los conjuntos xss. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   \u03bb> producto [[1,3],[2,5]]\n   [[1,2],[1,5],[3,2],[3,5]]\n   \u03bb> producto [[1,3],[2,5],[6,4]]\n   [[1,2,6],[1,2,4],[1,5,6],[1,5,4],[3,2,6],[3,2,4],[3,5,6],[3,5,4]]\n   \u03bb> producto [[1,3,5],[2,4]]\n   [[1,2],[1,4],[3,2],[3,4],[5,2],[5,4]]\n   \u03bb> producto []\n   [[]]\n<\/pre>\n<p>Comprobar con QuickCheck que para toda lista de listas de n\u00fameros enteros, xss, se verifica que el n\u00famero de elementos de (producto xss) es igual al producto de los n\u00fameros de elementos de cada una de las listas de xss.<\/p>\n<p><!--more--><\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nmodule Producto_cartesiano where\n\nimport Test.QuickCheck (quickCheck)\nimport Control.Monad (liftM2)\nimport Control.Applicative (liftA2)\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nproducto1 :: [[a]] -> [[a]]\nproducto1 []       = [[]]\nproducto1 (xs:xss) = [x:ys | x <- xs, ys <- producto1 xss]\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nproducto2 :: [[a]] -> [[a]]\nproducto2 []       = [[]]\nproducto2 (xs:xss) = [x:ys | x <- xs, ys <- ps]\n  where ps = producto2 xss\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\nproducto3 :: [[a]] -> [[a]]\nproducto3 []       = [[]]\nproducto3 (xs:xss) = inserta3 xs (producto3 xss)\n\n-- (inserta xs xss) inserta cada elemento de xs en los elementos de\n-- xss. Por ejemplo,\n--    \u03bb> inserta [1,2] [[3,4],[5,6]]\n--    [[1,3,4],[1,5,6],[2,3,4],[2,5,6]]\ninserta3 :: [a] -> [[a]] -> [[a]]\ninserta3 [] _       = []\ninserta3 (x:xs) yss = [x:ys | ys <- yss] ++ inserta3 xs yss\n\n-- 4\u00aa soluci\u00f3n\n-- ===========\n\nproducto4 :: [[a]] -> [[a]]\nproducto4 = foldr inserta4 [[]]\n\ninserta4 :: [a] -> [[a]] -> [[a]]\ninserta4 []     _   = []\ninserta4 (x:xs) yss = map (x:) yss ++ inserta4 xs yss\n\n-- 5\u00aa soluci\u00f3n\n-- ===========\n\nproducto5 :: [[a]] -> [[a]]\nproducto5 = foldr inserta5 [[]]\n\ninserta5 :: [a] -> [[a]] -> [[a]]\ninserta5 xs yss = [x:ys | x <- xs, ys <- yss]\n\n-- 6\u00aa soluci\u00f3n\n-- ===========\n\nproducto6 :: [[a]] -> [[a]]\nproducto6 = foldr inserta6 [[]]\n\ninserta6 :: [a] -> [[a]] -> [[a]]\ninserta6 xs yss = concatMap (\\x -> map (x:) yss) xs\n\n-- 7\u00aa soluci\u00f3n\n-- ===========\n\nproducto7 :: [[a]] -> [[a]]\nproducto7 = foldr inserta7 [[]]\n\ninserta7 :: [a] -> [[a]] -> [[a]]\ninserta7 xs yss = xs >>= (\\x -> map (x:) yss)\n\n-- 8\u00aa soluci\u00f3n\n-- ===========\n\nproducto8 :: [[a]] -> [[a]]\nproducto8 = foldr inserta8 [[]]\n\ninserta8 :: [a] -> [[a]] -> [[a]]\ninserta8 xs yss = (:) <$> xs <*> yss\n\n-- 9\u00aa soluci\u00f3n\n-- ===========\n\nproducto9 :: [[a]] -> [[a]]\nproducto9 = foldr inserta9 [[]]\n\ninserta9 :: [a] -> [[a]] -> [[a]]\ninserta9 = liftA2 (:)\n\n-- 10\u00aa soluci\u00f3n\n-- ============\n\nproducto10 :: [[a]] -> [[a]]\nproducto10 = foldr (liftM2 (:)) [[]]\n\n-- 11\u00aa soluci\u00f3n\n-- ============\n\nproducto11 :: [[a]] -> [[a]]\nproducto11 = sequence\n\n-- Comprobaci\u00f3n de equivalencia\n-- ============================\n\n-- La propiedad es\nprop_producto :: [[Int]] -> Bool\nprop_producto xss =\n  all (== producto1 xss)\n      [ producto2 xss\n      , producto3 xss\n      , producto4 xss\n      , producto5 xss\n      , producto6 xss\n      , producto7 xss\n      , producto8 xss\n      , producto9 xss\n      , producto10 xss\n      , producto11 xss\n      ]\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheckWith (stdArgs {maxSize = 9}) prop_producto\n--    +++ OK, passed 100 tests.\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> length (producto1 (replicate 7 [0..9]))\n--    10000000\n--    (10.51 secs, 10,169,418,496 bytes)\n--    \u03bb> length (producto2 (replicate 7 [0..9]))\n--    10000000\n--    (2.14 secs, 1,333,870,712 bytes)\n--    \u03bb> length (producto3 (replicate 7 [0..9]))\n--    10000000\n--    (3.33 secs, 1,956,102,056 bytes)\n--    \u03bb> length (producto4 (replicate 7 [0..9]))\n--    10000000\n--    (0.98 secs, 1,600,542,752 bytes)\n--    \u03bb> length (producto5 (replicate 7 [0..9]))\n--    10000000\n--    (2.10 secs, 1,333,870,288 bytes)\n--    \u03bb> length (producto6 (replicate 7 [0..9]))\n--    10000000\n--    (1.17 secs, 1,600,534,632 bytes)\n--    \u03bb> length (producto7 (replicate 7 [0..9]))\n--    10000000\n--    (0.35 secs, 1,600,534,352 bytes)\n--    \u03bb> length (producto8 (replicate 7 [0..9]))\n--    10000000\n--    (0.87 secs, 978,317,848 bytes)\n--    \u03bb> length (producto9 (replicate 7 [0..9]))\n--    10000000\n--    (1.38 secs, 1,067,201,016 bytes)\n--    \u03bb> length (producto10 (replicate 7 [0..9]))\n--    10000000\n--    (0.54 secs, 2,311,645,392 bytes)\n--    \u03bb> length (producto11 (replicate 7 [0..9]))\n--    10000000\n--    (1.32 secs, 1,067,200,992 bytes)\n--\n--    \u03bb> length (producto7 (replicate 7 [1..14]))\n--    105413504\n--    (3.77 secs, 16,347,739,040 bytes)\n--    \u03bb> length (producto10 (replicate 7 [1..14]))\n--    105413504\n--    (5.11 secs, 23,613,162,016 bytes)\n\n-- Comprobaci\u00f3n de la propiedad\n-- ============================\n\n-- La propiedad es\nprop_longitud :: [[Int]] -> Bool\nprop_longitud xss =\n  length (producto7 xss) == product (map length xss)\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheckWith (stdArgs {maxSize = 7}) prop_longitud\n--    +++ OK, passed 100 tests.\n<\/pre>\n<p>El c\u00f3digo se encuentra en <a href=\"https:\/\/github.com\/jaalonso\/Exercitium\/blob\/main\/src\/Producto_cartesiano.hs\">GitHub<\/a>.<\/p>\n<p>La elaboraci\u00f3n de las soluciones se describe en el siguiente v\u00eddeo<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/5L2fbGmoQhU\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p><a name=\"ej3\"><\/a><\/p>\n<h3>3. N\u00fameros con todos sus d\u00edgitos primos<\/h3>\n<p>Definir la lista<\/p>\n<pre lang=\"text\">\n   numerosConDigitosPrimos :: [Integer]\n<\/pre>\n<p>cuyos elementos son los n\u00fameros con todos sus d\u00edgitos primos. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   \u03bb> take 22 numerosConDigitosPrimos\n   [2,3,5,7,22,23,25,27,32,33,35,37,52,53,55,57,72,73,75,77,222,223]\n   \u03bb> numerosConDigitosPrimos !! (10^7)\n   322732232572\n<\/pre>\n<p><!--more--><\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nmodule Numeros_con_digitos_primos where\n\nimport Test.QuickCheck (NonNegative (NonNegative), quickCheck)\nimport Data.Char (intToDigit)\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nnumerosConDigitosPrimos1 :: [Integer]\nnumerosConDigitosPrimos1 = [n | n <- [2..], digitosPrimos n]\n\n-- (digitosPrimos n) se verifica si todos los d\u00edgitos de n son\n-- primos. Por ejemplo,\n--    digitosPrimos 352  ==  True\n--    digitosPrimos 362  ==  False\ndigitosPrimos :: Integer -> Bool\ndigitosPrimos n = subconjunto (digitos n) [2,3,5,7]\n\n-- (digitos n) es la lista de las digitos de n. Por ejemplo,\n--    digitos 325  ==  [3,2,5]\ndigitos :: Integer -> [Integer]\ndigitos n = [read [x] | x <- show n]\n\n-- (subconjunto xs ys) se verifica si xs es un subconjunto de ys. Por\n-- ejemplo,\n--    subconjunto [3,2,5,2] [2,7,3,5]  ==  True\n--    subconjunto [3,2,5,2] [2,7,2,5]  ==  False\nsubconjunto :: Eq a => [a] -> [a] -> Bool\nsubconjunto xs ys = and [x `elem` ys | x <- xs]\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nnumerosConDigitosPrimos2 :: [Integer]\nnumerosConDigitosPrimos2 =\n  filter (all (`elem` \"2357\") . show) [2..]\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\n--    \u03bb> take 60 numerosConDigitosPrimos2\n--    [  2,  3,  5,  7,\n--      22, 23, 25, 27,\n--      32, 33, 35, 37,\n--      52, 53, 55, 57,\n--      72, 73, 75, 77,\n--     222,223,225,227,\n--     232,233,235,237,\n--     252,253,255,257,\n--     272,273,275,277,\n--     322,323,325,327,\n--     332,333,335,337,\n--     352,353,355,357,\n--     372,373,375,377,\n--     522,523,525,527,\n--     532,533,535,537]\n\nnumerosConDigitosPrimos3 :: [Integer]\nnumerosConDigitosPrimos3 =\n  [2,3,5,7] ++ [10*n+d | n <- numerosConDigitosPrimos3, d <- [2,3,5,7]]\n\n-- 4\u00aa soluci\u00f3n\n-- ===========\n\n--    \u03bb> take 60 numerosConDigitosPrimos2\n--    [ 2, 3, 5, 7,\n--     22,23,25,27,\n--     32,33,35,37,\n--     52,53,55,57,\n--     72,73,75,77,\n--     222,223,225,227, 232,233,235,237, 252,253,255,257, 272,273,275,277,\n--     322,323,325,327, 332,333,335,337, 352,353,355,357, 372,373,375,377,\n--     522,523,525,527, 532,533,535,537]\n\nnumerosConDigitosPrimos4 :: [Integer]\nnumerosConDigitosPrimos4 = concat (iterate siguiente [2,3,5,7])\n\n-- (siguiente xs) es la lista obtenida a\u00f1adiendo delante de cada\n-- elemento de xs los d\u00edgitos 2, 3, 5 y 7. Por ejemplo,\n--    \u03bb> siguiente [5,6,8]\n--    [25,26,28,\n--     35,36,38,\n--     55,56,58,\n--     75,76,78]\nsiguiente :: [Integer] -> [Integer]\nsiguiente xs = concat [map (pega d) xs | d <- [2,3,5,7]]\n\n-- (pega d n) es el n\u00famero obtenido a\u00f1adiendo el d\u00edgito d delante del\n-- n\u00famero n. Por ejemplo,\n--    pega 3 35  ==  335\npega :: Int -> Integer -> Integer\npega d n = read (intToDigit d : show n)\n\n-- Comprobaci\u00f3n de equivalencia\n-- ============================\n\n-- La propiedad es\nprop_numerosConDigitosPrimos :: NonNegative Int -> Bool\nprop_numerosConDigitosPrimos (NonNegative n) =\n  all (== numerosConDigitosPrimos1 !! n)\n      [ numerosConDigitosPrimos2 !! n\n      , numerosConDigitosPrimos3 !! n\n      , numerosConDigitosPrimos4 !! n\n      ]\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_numerosConDigitosPrimos\n--    +++ OK, passed 100 tests.\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> numerosConDigitosPrimos1 !! 5000\n--    752732\n--    (2.45 secs, 6,066,926,272 bytes)\n--    \u03bb> numerosConDigitosPrimos2 !! 5000\n--    752732\n--    (0.34 secs, 387,603,456 bytes)\n--    \u03bb> numerosConDigitosPrimos3 !! 5000\n--    752732\n--    (0.01 secs, 1,437,624 bytes)\n--    \u03bb> numerosConDigitosPrimos4 !! 5000\n--    752732\n--    (0.00 secs, 1,556,104 bytes)\n--\n--    \u03bb> numerosConDigitosPrimos3 !! (10^7)\n--    322732232572\n--    (3.94 secs, 1,820,533,328 bytes)\n--    \u03bb> numerosConDigitosPrimos4 !! (10^7)\n--    322732232572\n--    (1.84 secs, 2,000,606,640 bytes)\n<\/pre>\n<p>El c\u00f3digo se encuentra en <a href=\"https:\/\/github.com\/jaalonso\/Exercitium\/blob\/main\/src\/Numeros_con_digitos_primos.hs\">GitHub<\/a>.<\/p>\n<p>La elaboraci\u00f3n de las soluciones se describe en el siguiente v\u00eddeo<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/OEAD7fLZiSk\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esta semana he publicado en Exercitium las soluciones de los siguientes problemas: 1. Representaci\u00f3n de Zeckendorf 2. Producto cartesiano de una familia de conjuntos 3. N\u00fameros con todos sus d\u00edgitos primos A continuaci\u00f3n se muestran las soluciones.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[337],"tags":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/7727"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/comments?post=7727"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/7727\/revisions"}],"predecessor-version":[{"id":7728,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/7727\/revisions\/7728"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=7727"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=7727"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=7727"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}