{"id":3656,"date":"2018-01-23T06:00:06","date_gmt":"2018-01-23T04:00:06","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3656"},"modified":"2018-01-30T07:47:11","modified_gmt":"2018-01-30T05:47:11","slug":"sumas-parciales-de-juzuk","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/sumas-parciales-de-juzuk\/","title":{"rendered":"Sumas parciales de Juzuk"},"content":{"rendered":"<p>En 1939 Dov Juzuk extendi\u00f3 el <a href=\"http:\/\/bit.ly\/2G0nT4L\">m\u00e9todo de Nic\u00f3maco<\/a> del c\u00e1lculo de los cubos. La extensi\u00f3n se basaba en los siguientes pasos:<\/p>\n<ul>\n<li>se comienza con la lista de todos los enteros positivos<\/li>\n<\/ul>\n<pre lang=\"text\">\n     [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ...\n<\/pre>\n<ul>\n<li>se agrupan tomando el primer elemento, los dos siguientes, los tres<br \/>\nsiguientes, etc.<\/li>\n<\/ul>\n<pre lang=\"text\">\n     [[1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12, 13, 14, 15], ...\n<\/pre>\n<ul>\n<li>se seleccionan los elementos en posiciones pares<\/li>\n<\/ul>\n<pre lang=\"text\">\n     [[1],         [4, 5, 6],                [11, 12, 13, 14, 15], ...\n<\/pre>\n<ul>\n<li>se suman los elementos de cada grupo<\/li>\n<\/ul>\n<pre lang=\"text\">\n     [1,           15,                       65,                   ...\n<\/pre>\n<ul>\n<li>se calculan las sumas acumuladas <\/li>\n<\/ul>\n<pre lang=\"text\">\n     [1,           16,                       81,                   ...\n<\/pre>\n<p>Las sumas obtenidas son las cuantas potencias de los n\u00fameros enteros positivos.<\/p>\n<p>Definir las funciones<\/p>\n<pre lang=\"text\">\n   listasParcialesJuzuk :: [a] -> [[a]]\n   sumasParcialesJuzuk  :: [Integer] -> [Integer]\n<\/pre>\n<p>tal que<\/p>\n<ul>\n<li>(listasParcialesJuzuk xs) es lalista de ls listas parciales de Juzuk; es decir, la selecci\u00f3n de los elementos en posiciones pares de la agrupaci\u00f3n de los elementos de xs tomando el primer elemento, los dos siguientes, los tres siguientes, etc. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">\n     \u03bb> take 4 (listasParcialesJuzuk [1..])\n     [[1],[4,5,6],[11,12,13,14,15],[22,23,24,25,26,27,28]]\n     \u03bb> take 4 (listasParcialesJuzuk [1,3..])\n     [[1],[7,9,11],[21,23,25,27,29],[43,45,47,49,51,53,55]]\n<\/pre>\n<ul>\n<li>(sumasParcialesJuzuk xs) es la lista de las sumas acumuladas de los elementos de las listas de Juzuk generadas por xs. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">\n     take 4 (sumasParcialesJuzuk [1..])  ==  [1,16,81,256]\n     take 4 (sumasParcialesJuzuk [1,3..])  ==  [1,28,153,496]\n<\/pre>\n<p>Comprobar con QuickChek que, para todo entero positivo n,<\/p>\n<ul>\n<li>el elemento de (sumasParcialesJuzuk [1..]) en la posici\u00f3n (n-1) es <code>n^4<\/code>. <\/li>\n<li>el elemento de (sumasParcialesJuzuk [1,3..]) en la posici\u00f3n (n-1) es <code>n^2*(2*n^2 - 1)<\/code>. <\/li>\n<li>el elemento de (sumasParcialesJuzuk [1,5..]) en la posici\u00f3n (n-1) es <code>4*n^4-3*n^2<\/code>. <\/li>\n<li>el elemento de (sumasParcialesJuzuk [2,3..]) en la posici\u00f3n (n-1) es <code>n^2*(n^2+1)<\/code>.<\/li>\n<\/ul>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (genericIndex)\nimport Test.QuickCheck\n\nlistasParcialesJuzuk :: [a] -> [[a]]\nlistasParcialesJuzuk = elementosEnPares . listasParciales\n\n-- (listasParciales xs) es la agrupaci\u00f3n de los elementos de xs obtenida\n-- tomando el primer elemento, los dos siguientes, los tres siguientes,\n-- etc. Por ejemplo, \n--    \u03bb> take 5 (listasParciales [1..])\n--    [[1],[2,3],[4,5,6],[7,8,9,10],[11,12,13,14,15]]\nlistasParciales :: [a] -> [[a]]\nlistasParciales = aux 1\n  where aux n xs = ys : aux (n+1) zs  \n          where (ys,zs) = splitAt n xs\n\n-- (elementosEnPares xs) es la lista de los elementos de xs en\n-- posiciones pares. Por ejemplo,\n--    \u03bb> elementosEnPares [[1],[2,3],[4,5,6],[7,8,9,10],[11,12,13,14,15]]\n--    [[1],[4,5,6],[11,12,13,14,15]]\nelementosEnPares :: [a] -> [a]\nelementosEnPares []       = []\nelementosEnPares [x]      = [x]\nelementosEnPares (x:_:xs) = x : elementosEnPares xs\n\nsumasParcialesJuzuk :: [Integer] -> [Integer]\nsumasParcialesJuzuk xs =\n  scanl1 (+) (map sum (listasParcialesJuzuk xs))\n\n-- La primera propiedad es\nprop_sumasParcialesJuzuk :: (Positive Integer) -> Bool\nprop_sumasParcialesJuzuk (Positive n) =\n  sumasParcialesJuzuk [1..] `genericIndex` (n-1) == n^4\n\n-- Su comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_sumasParcialesJuzuk\n--    +++ OK, passed 100 tests.\n\n-- La segunda propiedad es\nprop_sumasParcialesJuzuk2 :: (Positive Integer) -> Bool\nprop_sumasParcialesJuzuk2 (Positive n) =\n  sumasParcialesJuzuk [1,3..] `genericIndex` (n-1) == n^2*(2*n^2 - 1)\n\n-- Su comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_sumasParcialesJuzuk2\n--    +++ OK, passed 100 tests.\n\n-- La tercera propiedad es\nprop_sumasParcialesJuzuk3 :: (Positive Integer) -> Bool\nprop_sumasParcialesJuzuk3 (Positive n) =\n  sumasParcialesJuzuk [1,5..] `genericIndex` (n-1) == 4*n^4-3*n^2\n\n-- Su comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_sumasParcialesJuzuk3\n--    +++ OK, passed 100 tests.\n\n-- La cuarta propiedad es\nprop_sumasParcialesJuzuk4 :: (Positive Integer) -> Bool\nprop_sumasParcialesJuzuk4 (Positive n) =\n  sumasParcialesJuzuk [2,3..] `genericIndex` (n-1) == n^2*(n^2+1)\n  \n-- Su comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_sumasParcialesJuzuk4\n--    +++ OK, passed 100 tests.\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En 1939 Dov Juzuk extendi\u00f3 el m\u00e9todo de Nic\u00f3maco del c\u00e1lculo de los cubos. La extensi\u00f3n se basaba en los siguientes pasos: se comienza con la lista de todos los enteros positivos [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, &#8230; se agrupan tomando el primer elemento, los&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","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":[4],"tags":[256,10,11,6,252,73,40,146],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3656"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/comments?post=3656"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3656\/revisions"}],"predecessor-version":[{"id":3690,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3656\/revisions\/3690"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3656"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3656"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}