Árbol de las divisiones por 2, 3 ó 5
En la librería Data.Tree se definen los árboles y los bosques como sigue
1 2 |
data Tree a = Node a (Forest a) type Forest a = [Tree a] |
Se pueden definir árboles. Por ejemplo,
1 |
ej = Node 3 [Node 5 [Node 9 []], Node 7 []] |
Y se pueden dibujar con la función drawTree. Por ejemplo,
1 2 3 4 5 6 7 8 |
λ> putStrLn (drawTree (fmap show ej)) 3 | +- 5 | | | `- 9 | `- 7 |
Definir la función
1 |
arbolDivisiones :: Int -> Tree Int |
tal que (arbolDivisiones x) es el árbol de las divisiones enteras de x entre 2, 3 ó 5. Por ejemplo,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
λ> putStrLn (drawTree (fmap show (arbolDivisiones 20))) 20 | +- 10 | | | +- 5 | | | | | `- 1 | | | `- 2 | | | `- 1 | `- 4 | `- 2 | `- 1 λ> putStrLn (drawTree (fmap show (arbolDivisiones 30))) 30 | +- 15 | | | +- 5 | | | | | `- 1 | | | `- 3 | | | `- 1 | +- 10 | | | +- 5 | | | | | `- 1 | | | `- 2 | | | `- 1 | `- 6 | +- 3 | | | `- 1 | `- 2 | `- 1 |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import Data.Tree (Tree (Node), drawTree) arbolDivisiones :: Int -> Tree Int arbolDivisiones x = Node x (map arbolDivisiones (divisiones x)) -- (divisiones x) es la lista de las divisiones enteras de x entre 2, 3 -- y 5. Por ejemplo, -- divisiones 30 == [15,10,6] -- divisiones 15 == [5,3] divisiones :: Int -> [Int] divisiones x = [x `div` y | y <- [2,3,5], x `mod` y == 0] |
Nuevas soluciones
- En los comentarios se pueden escribir nuevas soluciones.
- El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>
Sí se puede, por ejemplo