1votos

Dibujar triangulo de sierpinski en Haskell

por josejuan hace 6 años

Que raro que no se hubiera planteado antes este desafío. Bueno, genero los infinitos triángulos de Sierpiński.

Gráfica el triangulo de sierpinski.

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
-- Esta función genera los infinitos triángulos de Sierpiński a partir de un 
-- inicializador (un triángulo normal). 
sierpiński k = k: map (\i -> grow $ (sierpiński k)!!i) [0..] 
  where grow s = map (\u -> w ++ u ++ w) s ++ s' 
          where s' = zipWith (\l r -> l ++ (' ':r)) s s 
                l = length . head 
                w = take ((l s' - l s) `div` 2) $ repeat ' ' 
 
 
 
 
 
 
-- Como generador de triángulos "normales y corrientes" podemos usar ésta función 
triangle n = map (\i -> r i ' ' ++ r (2 * (n - i) - 1) '*' ++ r i ' ') [n - 1, n - 2..0] 
  where r i = take i . repeat 
 
 
-- Así, un helper usando el inicializador anterior podría ser 
sierpiński' = sierpiński . triangle 
 
-- Y también podemos crear otros con un inicializador constante 
sierpiński2 = sierpiński' 2 
sierpiński3 = sierpiński' 3 
sierpiński4 = sierpiński' 4 
sierpiński5 = sierpiński' 5 
 
-- En cada caso, tenemos los infinitos triángulos de Sierpiński, por ejemplo: 
{- 
 
*Main> putStrLn $ unlines $ sierpiński2!!3 
               *                
              ***               
             *   *              
            *** ***             
           *       *            
          ***     ***           
         *   *   *   *          
        *** *** *** ***         
       *               *        
      ***             ***       
     *   *           *   *      
    *** ***         *** ***     
   *       *       *       *    
  ***     ***     ***     ***   
 *   *   *   *   *   *   *   *  
*** *** *** *** *** *** *** *** 
 
*Main> putStrLn $ unlines $ sierpiński5!!2 
                   *                    
                  ***                   
                 *****                  
                *******                 
               *********                
              *         *               
             ***       ***              
            *****     *****             
           *******   *******            
          ********* *********           
         *                   *          
        ***                 ***         
       *****               *****        
      *******             *******       
     *********           *********      
    *         *         *         *     
   ***       ***       ***       ***    
  *****     *****     *****     *****   
 *******   *******   *******   *******  
********* ********* ********* ********* 
 
*Main> putStrLn $ unlines $ sierpiński3!!4 
                                               *                                                
                                              ***                                               
                                             *****                                              
                                            *     *                                             
                                           ***   ***                                            
                                          ***** *****                                           
                                         *           *                                          
                                        ***         ***                                         
                                       *****       *****                                        
                                      *     *     *     *                                       
                                     ***   ***   ***   ***                                      
                                    ***** ***** ***** *****                                     
                                   *                       *                                    
                                  ***                     ***                                   
                                 *****                   *****                                  
                                *     *                 *     *                                 
                               ***   ***               ***   ***                                
                              ***** *****             ***** *****                               
                             *           *           *           *                              
                            ***         ***         ***         ***                             
                           *****       *****       *****       *****                            
                          *     *     *     *     *     *     *     *                           
                         ***   ***   ***   ***   ***   ***   ***   ***                          
                        ***** ***** ***** ***** ***** ***** ***** *****                         
                       *                                               *                        
                      ***                                             ***                       
                     *****                                           *****                      
                    *     *                                         *     *                     
                   ***   ***                                       ***   ***                    
                  ***** *****                                     ***** *****                   
                 *           *                                   *           *                  
                ***         ***                                 ***         ***                 
               *****       *****                               *****       *****                
              *     *     *     *                             *     *     *     *               
             ***   ***   ***   ***                           ***   ***   ***   ***              
            ***** ***** ***** *****                         ***** ***** ***** *****             
           *                       *                       *                       *            
          ***                     ***                     ***                     ***           
         *****                   *****                   *****                   *****          
        *     *                 *     *                 *     *                 *     *         
       ***   ***               ***   ***               ***   ***               ***   ***        
      ***** *****             ***** *****             ***** *****             ***** *****       
     *           *           *           *           *           *           *           *      
    ***         ***         ***         ***         ***         ***         ***         ***     
   *****       *****       *****       *****       *****       *****       *****       *****    
  *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *   
 ***   ***   ***   ***   ***   ***   ***   ***   ***   ***   ***   ***   ***   ***   ***   ***  
***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** 
 
-} 
1 comentario
0votos

Escrito por JoseRaul hace 6 años

Increíble implementacion en Haskell.

Aunque en el problema debí especificar que era gráfica en una ventana o imagen.

Gran aporte.

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.