{"id":3116,"date":"2017-03-21T06:00:48","date_gmt":"2017-03-21T04:00:48","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3116"},"modified":"2017-03-29T06:24:39","modified_gmt":"2017-03-29T04:24:39","slug":"codificacion-matricial","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/codificacion-matricial\/","title":{"rendered":"Codificaci\u00f3n matricial"},"content":{"rendered":"<p>El procedimiento de codificaci\u00f3n matricial se puede entender siguiendo la codificaci\u00f3n del mensaje <code>\"todoparanada\"<\/code> como se muestra a continuaci\u00f3n:<\/p>\n<ul>\n<li>Se calcula la longitud L del mensaje. En el ejemplo es L es 12.<\/li>\n<li>Se calcula el menor entero positivo N cuyo cuadrado es mayor o igual que L. En el ejemplo N es 4.<\/li>\n<li>Se extiende el mensaje con N\u00b2-L asteriscos. En el ejemplo, el mensaje extendido es <code>\"todoparanada****\"<\/code><\/li>\n<li>Con el mensaje extendido se forma una matriz cuadrada NxN. En el ejemplo la matriz es<\/li>\n<\/ul>\n<pre lang=\"text\">\n     | t o d o |\n     | p a r a |\n     | n a d a |\n     | * * * * |\n<\/pre>\n<ul>\n<li>Se rota 90\u00ba la matriz del mensaje extendido. En el ejemplo, la matriz rotada es<\/li>\n<\/ul>\n<pre lang=\"text\">\n     | * n p t |\n     | * a a o |\n     | * d r d |\n     | * a a o |\n<\/pre>\n<ul>\n<li>Se calculan los elementos de la matriz rotada. En el ejemplo, los elementos son <code>\"*npt*aap*drd*aao\"<\/code><\/li>\n<li>El mensaje codificado se obtiene eliminando los asteriscos de los elementos de la matriz rotada. En el ejemplo, <code>\"nptaapdrdaao\"<\/code>.<\/li>\n<\/ul>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   codificado :: String -> String\n<\/pre>\n<p>tal que (codificado cs) es el mensaje obtenido aplicando la codificaci\u00f3n matricial al mensaje cs. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   codificado \"todoparanada\"    ==  \"nptaaodrdaao\"\n   codificado \"nptaaodrdaao\"    ==  \"danaopadtora\"\n   codificado \"danaopadtora\"    ==  \"todoparanada\"\n   codificado \"entodolamedida\"  ==  \"dmdeaeondltiao\"\n<\/pre>\n<p><strong>Nota<\/strong>: Este ejercicio est\u00e1 basado en el problema <a href=\"http:\/\/bit.ly\/2ng2YUq\">Secret Message<\/a> de <a href=\"https:\/\/open.kattis.com\">Kattis<\/a>.<\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (genericLength)\nimport Data.Array\n\ncodificado :: String -> String\ncodificado cs =\n  filter (\/='*') (elems (rota p))\n  where n = ceiling (sqrt (genericLength cs))\n        p = listArray ((1,1),(n,n)) (cs ++ repeat '*')\n\nrota :: Array (Int,Int) Char -> Array (Int,Int) Char\nrota p = array d [((i,j),p!(n+1-j,i)) | (i,j) <- indices p]\n  where d = bounds p\n        n = fst (snd d)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>El procedimiento de codificaci\u00f3n matricial se puede entender siguiendo la codificaci\u00f3n del mensaje \u00abtodoparanada\u00bb como se muestra a continuaci\u00f3n: Se calcula la longitud L del mensaje. En el ejemplo es L es 12. Se calcula el menor entero positivo N cuyo cuadrado es mayor o igual que L. En el ejemplo N es 4. Se&#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":[250,43,322,245,38,80,258,82,72,42,11,49,16,236],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3116"}],"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=3116"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3116\/revisions"}],"predecessor-version":[{"id":3153,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3116\/revisions\/3153"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}