{"id":2723,"date":"2016-12-21T06:00:35","date_gmt":"2016-12-21T04:00:35","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=2723"},"modified":"2016-12-28T09:31:54","modified_gmt":"2016-12-28T07:31:54","slug":"dia-de-la-semana","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/dia-de-la-semana\/","title":{"rendered":"D\u00eda de la semana"},"content":{"rendered":"<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">   \n   dia :: Int -> Int -> Int -> String\n<\/pre>\n<p>tal que (dia d m a) es el d\u00eda de la semana correspondiente al d\u00eda d del mes m del a\u00f1o a. Por ejemplo,<\/p>\n<pre lang=\"text\">   \n   dia 21 12 2016  ==  \"Miercoles\"\n   dia 14  4 1936  ==  \"Martes\"\n<\/pre>\n<p><strong>Nota<\/strong>: Este ejercicio ha sido propuesto por Miguel Ib\u00e1\u00f1ez.<\/p>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\n-- Comentario: usar que el 1-1-2007 cay\u00f3 en lunes\n\ndSem :: [(String,Int)]\ndSem = [(\"Lunes\",0),(\"Martes\",1),(\"Miercoles\",2),(\"Jueves\",3),\n        (\"Viernes\",4),(\"Sabado\",5),(\"Domingo\",6)]\n\ndMes :: [(Int,Int)]\ndMes = [(1,31),(2,28),(3,31),( 4,30),( 5,31),( 6,30),\n        (7,31),(8,31),(9,30),(10,31),(11,30),(12,31)]\n\nbusca :: a -> [(a1,a2)] -> (a -> a1 -> Bool) -> [(a1,a2)]\nbusca x xs p  =  [(x',y) | (x',y) <- xs, p x x']\n\ndiaAno :: (Int,Int,Int) -> Int\ndiaAno (d,m,a)  =  d + sum [y | (x,y) <- busca m dMes (>)]\n\ndia :: Int -> Int -> Int -> String\ndia d m a = head [fst (x,y') | (x,y') <- dSem, n == y']\n  where  n = mod ((diaAno (d,m,a) + (a - 2007)*365) + x) 7\n         x | d <= 29 &#038;&#038; m <= 2  =  div (a - 2007) 4 - 1\n           | otherwise          =  div (a - 2007) 4\n\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\n-- Usando la congruencia de Zeller http:\/\/bit.ly\/2gYxHym\n\ndia2 :: Int -> Int -> Int -> String\ndia2 d m a = diasSemana !! h\n  where m1 = if   (m < 3)\n             then m + 12\n             else m\n\n        a1 = if   (m1 > 12)\n             then a - 1\n             else a\n\n        k  = a1 `mod` 100\n        j  = a1 `div` 100\n\n        h  = ( d\n             + ((13 * (m1 + 1)) `div` 5)\n             + k\n             + (k `div` 4)\n             + (j `div` 4)\n             - (2 * j)\n             ) `mod` 7\n\ndiasSemana :: [String]\ndiasSemana = [ \"Sabado\" \n             , \"Domingo\"\n             , \"Lunes\" \n             , \"Martes\"\n             , \"Miercoles\"\n             , \"Jueves\"\n             , \"Viernes\"]\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Definir la funci\u00f3n dia :: Int -> Int -> Int -> String tal que (dia d m a) es el d\u00eda de la semana correspondiente al d\u00eda d del mes m del a\u00f1o a. Por ejemplo, dia 21 12 2016 == \u00abMiercoles\u00bb dia 14 4 1936 == \u00abMartes\u00bb Nota: Este ejercicio ha sido propuesto por&#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":[7],"tags":[8,30,80,71,89,40],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2723"}],"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=2723"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2723\/revisions"}],"predecessor-version":[{"id":2758,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/2723\/revisions\/2758"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=2723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=2723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=2723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}