<?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_23%2F04%2F21</id>
	<title>Examen 23/04/21 - 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_23%2F04%2F21"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_23/04/21&amp;action=history"/>
	<updated>2026-09-18T01:01: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_23/04/21&amp;diff=442&amp;oldid=prev</id>
		<title>Mdelamor en 22:17 17 nov 2021</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_23/04/21&amp;diff=442&amp;oldid=prev"/>
		<updated>2021-11-17T22:17:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revisión del 22:17 17 nov 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l21&quot;&gt;Línea 21:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 21:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- Nota 3: Todos los apartados valen igual.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- Nota 3: Todos los apartados valen igual.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- Nota 4: el fichero partida.txt se puede descargar aquí:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- https://www.cs.us.es/~mdelamor/i1m/2020/partida.txt&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import Data.List&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import Data.List&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Mdelamor</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_23/04/21&amp;diff=439&amp;oldid=prev</id>
		<title>Mdelamor: Protegió «Examen 23/04/21» ([Editar=Solo administradores] (indefinido) [Trasladar=Solo administradores] (indefinido))</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_23/04/21&amp;diff=439&amp;oldid=prev"/>
		<updated>2021-11-17T22:15:48Z</updated>

		<summary type="html">&lt;p&gt;Protegió «&lt;a href=&quot;/WIKIS/I1M2021G2/index.php/Examen_23/04/21&quot; title=&quot;Examen 23/04/21&quot;&gt;Examen 23/04/21&lt;/a&gt;» ([Editar=Solo administradores] (indefinido) [Trasladar=Solo administradores] (indefinido))&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revisión del 22:15 17 nov 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;es&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Sin diferencias)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Mdelamor</name></author>
	</entry>
	<entry>
		<id>https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_23/04/21&amp;diff=438&amp;oldid=prev</id>
		<title>Mdelamor: Página creada con «&lt;source lang=&#039;haskell&#039;&gt;  -- ================================================================== -- Informática (1º del Grado en Matemáticas), Grupo 2, Turno 2 -- 3er exam…»</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/WIKIS/I1M2021G2/index.php?title=Examen_23/04/21&amp;diff=438&amp;oldid=prev"/>
		<updated>2021-11-17T22:15:41Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;source lang=&amp;#039;haskell&amp;#039;&amp;gt;  -- ================================================================== -- Informática (1º del Grado en Matemáticas), Grupo 2, Turno 2 -- 3er exam…»&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;
-- Informática (1º del Grado en Matemáticas), Grupo 2, Turno 2&lt;br /&gt;
-- 3er examen de evaluación continua (23 de abril de 2021)&lt;br /&gt;
-- ------------------------------------------------------------------&lt;br /&gt;
-- Nombre: &lt;br /&gt;
--&lt;br /&gt;
-- Apellidos: &lt;br /&gt;
-- &lt;br /&gt;
-- Usuario Virtual de la Universidad(UVUS):&lt;br /&gt;
-- ==================================================================&lt;br /&gt;
&lt;br /&gt;
-- Nota 1: Es necesario que se pueda cargar el fichero. Es decir, que&lt;br /&gt;
-- no contenga errores sintácticos. Para ello, si alguna función no &lt;br /&gt;
-- está terminada de programar o bien tiene algún error sintáctico,&lt;br /&gt;
-- debe estar comentada. Si no, penalizará en la nota.&lt;br /&gt;
--&lt;br /&gt;
-- Nota 2: En cada ejercicio se valorará la corrección, claridad y &lt;br /&gt;
-- eficiencia de la solución propuesta. &lt;br /&gt;
-- &lt;br /&gt;
-- Nota 3: Todos los apartados valen igual.&lt;br /&gt;
&lt;br /&gt;
import Data.List&lt;br /&gt;
import Data.Matrix&lt;br /&gt;
import I1M.Pila&lt;br /&gt;
&lt;br /&gt;
-- ----------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 1&lt;br /&gt;
-- ----------------------------------------------------------------------&lt;br /&gt;
-- Un árbol genérico se dice escalonado si para cada nodo, la profundidad&lt;br /&gt;
-- de sus subárboles de izquierda a derecha es estrictamente creciente. &lt;br /&gt;
-- Es decir, la profundidad de un subárbol es siempre menor estricto que&lt;br /&gt;
-- que la profundidad del siguiente subárbol.&lt;br /&gt;
-- Por ejemplo, los árboles ej1 y ej3 son escalonados, pero ej2 no lo es.&lt;br /&gt;
--&lt;br /&gt;
--           A                       A                 A&lt;br /&gt;
--         / | \                   / | \              / \&lt;br /&gt;
--        B  C  E                 B  C  E            B   D&lt;br /&gt;
--           |  | \               |  |\             /     \&lt;br /&gt;
--           D  F  G              D  F G           C       E&lt;br /&gt;
-- ej1:         |  |      ej2:    |  |       ej3:          |&lt;br /&gt;
--              H  I              H  I                     F&lt;br /&gt;
--                 |              |                        |&lt;br /&gt;
--                 J              J                        G&lt;br /&gt;
&lt;br /&gt;
data Arbol a = N a [Arbol a]&lt;br /&gt;
&lt;br /&gt;
ejArbol1,ejArbol2 :: Arbol Char&lt;br /&gt;
ejArbol1 = N &amp;#039;A&amp;#039; [N &amp;#039;B&amp;#039; [], N &amp;#039;C&amp;#039; [N &amp;#039;D&amp;#039; []], N &amp;#039;E&amp;#039; [N &amp;#039;F&amp;#039; [N &amp;#039;H&amp;#039; []], N &amp;#039;G&amp;#039; [N &amp;#039;I&amp;#039; [N &amp;#039;J&amp;#039; []]]]]&lt;br /&gt;
ejArbol2 = N &amp;#039;A&amp;#039; [N &amp;#039;B&amp;#039; [N &amp;#039;D&amp;#039; [N &amp;#039;H&amp;#039; [N &amp;#039;J&amp;#039; []]]], N &amp;#039;C&amp;#039; [N &amp;#039;F&amp;#039; [N &amp;#039;I&amp;#039; []], N &amp;#039;G&amp;#039; []], N &amp;#039;E&amp;#039; []]&lt;br /&gt;
ejArbol3 = N &amp;#039;A&amp;#039; [N &amp;#039;B&amp;#039; [N &amp;#039;C&amp;#039; []], N &amp;#039;D&amp;#039; [N &amp;#039;E&amp;#039; [N &amp;#039;F&amp;#039; [N &amp;#039;G&amp;#039; []]]]]&lt;br /&gt;
&lt;br /&gt;
-- Define la función (escalonado a), tal que dado un árbol &amp;#039;a&amp;#039; devuelva si&lt;br /&gt;
-- es escalonado. Por ejemplo,&lt;br /&gt;
--   escalonado ejArbol1 == True&lt;br /&gt;
--   escalonado ejArbol2 == False&lt;br /&gt;
--   escalonado ejArbol3 == True&lt;br /&gt;
&lt;br /&gt;
-- Solución 1&lt;br /&gt;
escalonado :: Arbol a -&amp;gt; Bool&lt;br /&gt;
escalonado (N _ as) = and [escalonado a | a &amp;lt;- as] &amp;amp;&amp;amp; &lt;br /&gt;
                        and [ profundidad a &amp;lt; profundidad b | (a,b) &amp;lt;- (zip as (tail as))]&lt;br /&gt;
  where &lt;br /&gt;
    profundidad (N _ []) = 0&lt;br /&gt;
    profundidad (N _ as) = 1 + (maximum [profundidad a | a &amp;lt;- as])&lt;br /&gt;
&lt;br /&gt;
-- Solución 2&lt;br /&gt;
escalonado&amp;#039; :: Arbol a -&amp;gt; Bool&lt;br /&gt;
escalonado&amp;#039; (N _ as) = all escalonado&amp;#039; as &amp;amp;&amp;amp; all (uncurry (&amp;lt;)) (zip ps (tail ps))&lt;br /&gt;
  where &lt;br /&gt;
    ps = map profundidad as &lt;br /&gt;
    profundidad (N _ []) = 0&lt;br /&gt;
    profundidad (N _ as) = 1 + (maximum . map profundidad) as&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ----------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 2&lt;br /&gt;
-- ----------------------------------------------------------------------&lt;br /&gt;
-- Se pide definir un pequeño juego mediante un programa interactivo:&lt;br /&gt;
--   * El programa debe cargar un fichero, llamado partida.txt, con el &lt;br /&gt;
--     contenido de la partida inicial en una pila. El contenido es una&lt;br /&gt;
--     secuencia de símbolos &amp;#039;+&amp;#039; y &amp;#039;-&amp;#039;. No se debe mostrar dicho contenido&lt;br /&gt;
--     al usuario, ya que se trata de adivinarlo.&lt;br /&gt;
--   * El usuario, sin saber dicho contenido, debe intentar eliminar los&lt;br /&gt;
--     símbolos cargados. Para ello, hay que adivinar el último símbolo&lt;br /&gt;
--     introducido. Para ello, el usuario presiona una tecla, pulsa intro,&lt;br /&gt;
--     y procesamos el símbolo leído:&lt;br /&gt;
--        - Si el símbolo no es &amp;#039;+&amp;#039; ni &amp;#039;-&amp;#039;, indicar que no es válido y &lt;br /&gt;
--          pedir de nuevo otro.&lt;br /&gt;
--        - Si el símbolo no coincide con la cima de la pila, añadir este&lt;br /&gt;
--          símbolo a la pila.&lt;br /&gt;
--        - Si el símbolo coincide con la cima, desapilar la pila.&lt;br /&gt;
--        - Cada 5 intentos, indicar el tamaño de la pila. También se debe&lt;br /&gt;
--          indicar justo al comenzar el juego.&lt;br /&gt;
--        - Si la pila es vacía, indicar un mensaje de enhorabuena.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
-- &amp;gt; main&lt;br /&gt;
-- Bienvenido al juego de la pila&lt;br /&gt;
-- Tamano de la pila: 4&lt;br /&gt;
-- Indica simbolo (+/-): +&lt;br /&gt;
-- Indica simbolo (+/-): 1&lt;br /&gt;
-- Simbolo no valido&lt;br /&gt;
-- Indica simbolo (+/-): 5&lt;br /&gt;
-- Simbolo no valido&lt;br /&gt;
-- Indica simbolo (+/-): +&lt;br /&gt;
-- Indica simbolo (+/-): -&lt;br /&gt;
-- Indica simbolo (+/-): -&lt;br /&gt;
-- Indica simbolo (+/-): +&lt;br /&gt;
-- Tamano de la pila: 3&lt;br /&gt;
-- Indica simbolo (+/-): +&lt;br /&gt;
-- Indica simbolo (+/-): -&lt;br /&gt;
-- Indica simbolo (+/-): +&lt;br /&gt;
-- Enhorabuena!! Has ganado!!&lt;br /&gt;
&lt;br /&gt;
main :: IO()&lt;br /&gt;
main = do&lt;br /&gt;
  putStrLn &amp;quot;Bienvenido al juego de la pila&amp;quot; -- mensaje de bienvenida&lt;br /&gt;
  input &amp;lt;- readFile &amp;quot;partida.txt&amp;quot;  -- lectura del fichero, solo un string&lt;br /&gt;
  let pila = foldr apila vacia input   -- cargar el contenido en la pila&lt;br /&gt;
  juego pila 0  -- comenzamos el juego&lt;br /&gt;
&lt;br /&gt;
juego :: Pila Char -&amp;gt; Int -&amp;gt; IO ()&lt;br /&gt;
juego p n = do&lt;br /&gt;
  if (esVacia p) then do   -- partida finalizada&lt;br /&gt;
    putStrLn &amp;quot;Enhorabuena!! Has ganado!!&amp;quot;&lt;br /&gt;
    return ()&lt;br /&gt;
  else do&lt;br /&gt;
    if (mod n 5 == 0) then   -- cada 5 pasos, mostrar el contenido&lt;br /&gt;
      putStrLn $ &amp;quot;Tamano de la pila: &amp;quot; ++ (show (lengthP p))&lt;br /&gt;
    else putStr &amp;quot;&amp;quot; -- imprime nada&lt;br /&gt;
    putStr &amp;quot;Indica simbolo (+/-): &amp;quot;&lt;br /&gt;
    s &amp;lt;- getChar   -- lee la tecla&lt;br /&gt;
    getChar  -- lee \n introducido después&lt;br /&gt;
    if (notElem s &amp;quot;+-&amp;quot;) then do&lt;br /&gt;
      putStrLn &amp;quot;Simbolo no valido&amp;quot;&lt;br /&gt;
      juego p n   -- repetimos el proceso&lt;br /&gt;
    else &lt;br /&gt;
      juego (procesa p s) (n+1)  -- siguiente paso&lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
lengthP :: Pila a -&amp;gt; Int&lt;br /&gt;
lengthP p | esVacia p = 0&lt;br /&gt;
          | otherwise = 1 + lengthP (desapila p)&lt;br /&gt;
&lt;br /&gt;
procesa :: Pila Char -&amp;gt; Char -&amp;gt; Pila Char&lt;br /&gt;
procesa p c | cima p == c = desapila p&lt;br /&gt;
            | otherwise = apila c p&lt;br /&gt;
&lt;br /&gt;
-- ---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ----------------------------------------------------------------------&lt;br /&gt;
-- Ejercicio 3&lt;br /&gt;
-- ----------------------------------------------------------------------&lt;br /&gt;
-- La difusión de una matriz es resultado de asignar a cada elemento&lt;br /&gt;
-- la media de su valor junto con la de sus vecinos dentro de la matriz&lt;br /&gt;
-- a una distancia d. Por ejemplo, sea ejMat la siguiente matriz&lt;br /&gt;
-- ┌             ┐&lt;br /&gt;
-- │ 1 0 1 2 7 1 │&lt;br /&gt;
-- │ 2 1 3 4 0 2 │&lt;br /&gt;
-- │ 1 2 3 6 9 1 │&lt;br /&gt;
-- │ 0 3 6 4 7 8 │&lt;br /&gt;
-- │ 3 4 5 1 1 9 │&lt;br /&gt;
-- └             ┘&lt;br /&gt;
-- Los valores a tener en cuenta para la posición (3,3) con distancia d=1&lt;br /&gt;
-- son:&lt;br /&gt;
--    1  3  4 &lt;br /&gt;
--    2  3  6         la media es 3.5555556&lt;br /&gt;
--    3  6  4&lt;br /&gt;
-- Los valores a tener en cuenta para la posición (3,3) con distancia d=2&lt;br /&gt;
-- son:&lt;br /&gt;
--    1 0 1 2 7 &lt;br /&gt;
--    2 1 3 4 0 &lt;br /&gt;
--    1 2 3 6 9       la media es 3.04&lt;br /&gt;
--    0 3 6 4 7 &lt;br /&gt;
--    3 4 5 1 1 &lt;br /&gt;
-- Los valores a tener en cuenta para la posición (1,1) con distancia d=1&lt;br /&gt;
-- son:&lt;br /&gt;
--    1  0 &lt;br /&gt;
--    2  1            la media es 1.0&lt;br /&gt;
&lt;br /&gt;
ejMat :: Matrix Float&lt;br /&gt;
ejMat =  fromLists [[1,0,1,2,7,1],[2,1,3,4,0,2],[1,2,3,6,9,1],[0,3,6,4,7,8],[3,4,5,1,1,9]]     &lt;br /&gt;
&lt;br /&gt;
-- Ejercicio 3.1. Define la función (difumina m d) tal que devuelva la matriz &lt;br /&gt;
-- resultante de aplicar difusión a la matriz m usando distancia d. Por ejemplo,&lt;br /&gt;
-- &amp;gt; difumina ejMat 1&lt;br /&gt;
-- ┌                                                             ┐&lt;br /&gt;
-- │       1.0 1.3333334 1.8333334 2.8333333 2.6666667       2.5 │&lt;br /&gt;
-- │ 1.1666666 1.5555556 2.4444444 3.8888888 3.5555556 3.3333333 │&lt;br /&gt;
-- │       1.5 2.3333333 3.5555556 4.6666665 4.5555553       4.5 │&lt;br /&gt;
-- │ 2.1666667       3.0 3.7777777 4.6666665  5.111111 5.8333335 │&lt;br /&gt;
-- │       2.5       3.5 3.8333333       4.0       5.0      6.25 │&lt;br /&gt;
-- └                                                             ┘&lt;br /&gt;
-- &amp;gt; difumina ejMat 2&lt;br /&gt;
-- ┌                                                             ┐&lt;br /&gt;
-- │ 1.5555556 2.1666667       2.8       2.8      3.25 3.5555556 │&lt;br /&gt;
-- │ 1.9166666    2.4375       3.1       3.5       4.0      4.25 │&lt;br /&gt;
-- │ 2.3333333       2.6      3.04       3.6       4.0  4.133333 │&lt;br /&gt;
-- │      2.75       3.0      3.25      3.95    4.3125 4.3333335 │&lt;br /&gt;
-- │       3.0 3.1666667 3.6666667       4.6       5.0  5.111111 │&lt;br /&gt;
-- └                                                             ┘&lt;br /&gt;
&lt;br /&gt;
difumina :: Fractional a =&amp;gt; Matrix a -&amp;gt; Int -&amp;gt; Matrix a&lt;br /&gt;
difumina m d = matrix nr nc f &lt;br /&gt;
  where f (i,j) = sum (vecinos i j) / genericLength (vecinos i j)&lt;br /&gt;
        vecinos x y = [m!(i,j) | i &amp;lt;- [x-d..x+d], j &amp;lt;- [y-d..y+d],  i&amp;gt;0, j&amp;gt;0, i&amp;lt;=nr, j&amp;lt;=nc]&lt;br /&gt;
        nc = ncols m &lt;br /&gt;
        nr = nrows m &lt;br /&gt;
&lt;br /&gt;
-- Ejercicio 3.2. Define la función (numDifumina m d e) tal que devuelva el &lt;br /&gt;
-- número de veces a aplicar &amp;#039;difumina&amp;#039; a una matriz m con distancia d hasta&lt;br /&gt;
-- obtener una matriz cuyos elementos sean iguales entre sí con un error&lt;br /&gt;
-- de diferencia e.&lt;br /&gt;
-- Por ejemplo,&lt;br /&gt;
-- &amp;gt; numDifumina (fromLists [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]) 1 0.001 == 11&lt;br /&gt;
-- &amp;gt; numDifumina (fromLists [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]) 2 0.001 == 4&lt;br /&gt;
-- &amp;gt; numDifumina ejMat 1 0.0001 == 87&lt;br /&gt;
-- &amp;gt; numDifumina ejMat 2 0.0001 == 24&lt;br /&gt;
&lt;br /&gt;
numDifumina :: (Ord a,Floating a) =&amp;gt; Matrix a -&amp;gt; Int -&amp;gt; a -&amp;gt; Int &lt;br /&gt;
numDifumina m d e = snd $ until (todoIgual . fst) (\(p,s) -&amp;gt; (difumina p d,s+1)) (m,0)&lt;br /&gt;
  where todoIgual p = and [ abs (p!(1,1)-p!(i,j)) &amp;lt; e | i &amp;lt;- [1..nrows p], j &amp;lt;- [1..ncols p]]&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>