1votos

Árbol de Navidad en Haskell

por josejuan hace 6 años

No sólo un árbol, ¡los infinitos árboles de Navidad!

Escribe una función que dado un entero N, devuelve un árbol de asteriscos de N líneas.

1
2
3
4
5
6
7
8
9
10
11
12
13
-- Genera los INFINITOS árboles de Navidad 
bosque=a["*"]where a x=x:a(map(' ':)x++[take(1+2*length x)$repeat '*']) 
 
 
-- Para tomar un árbol concreto, basta referenciarlo por su índice 
arbol=(!!)bosque 
 
 
-- Para imprimirlo 
talar=putStrLn.unlines.arbol 
 
 
-- Haskell es precioso   O:) 
4 comentarios
0votos

Escrito por jneira hace 6 años

Muy chula la corecursion, aunque sigo prefiriendo replicate :-P
bosque=a["*"]
where a x=x:a (map (' ':) x ++
[replicate (1+2*length x) '*'])

Y aun mas que replicate, iterate con el que puedes quitar el a["*"] que no me acaba de convencer:
bosque=iterate (\x->map (' ':) x ++ [replicate (1+2*length x) '*']) ["*"]
(quitando espacios y tal es un pelin (5 chars?) mas corta :-P)
0votos

Escrito por jneira hace 6 años

La publico en clojure en un rato
0votos

Escrito por jneira hace 6 años

Por cierto, tambien se podria hacer en python (¡y en ruby!), aunque no se si habra alguien que lo conozca suficiente para poder hacerlo :-P

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.