0votos

imprimir una piramide de @ que este rodeada de asteriscos en Haskell

por josejuan hace 3 años

Lo de sin ciclos no lo entiendo. Ésta solución envuelve en los caracteres que se quiera cualquier figura (un triángulo, una letra, lo que sea). De forma repetida, podemos dibujar capas como una cebolla.

que un usuario ingrese un numero y el programa imprima una piramide: * *@* *@@@* *********

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
blank = ' ' 
 
wrap :: [String] -> Char -> [String] 
wrap xs c = [map fill [(x, y) | x <- [0..cols - 1]] | y <- [0..rows - 1]] 
  where rows = length xs 
        cols = length $ head xs 
        get (x, y) | x < 0 || y < 0 || y >= rows || x >= cols = blank 
                   | otherwise                                = (xs!!y)!!x 
        isBlank = (blank ==) . get 
        fill p@(x, y) | isBlank p = if any (not.isBlank) [(x + dx, y + dy) | (dx, dy) <- [(-1,0),(0,-1),(1,0),(0,1)]] 
                                      then c 
                                      else blank 
                      | otherwise = get p 
 
wraps :: [String] -> String -> [String] 
wraps = foldl wrap  
 
 
 
{- 
 
-- Por ejemplo ----------------------------------------- 
 
sample = ["                                         " 
         ,"                                         " 
         ,"                                         " 
         ,"                                         " 
         ,"                                         " 
         ,"              ##                         " 
         ,"               ##                        " 
         ,"                ##                       " 
         ,"                 ##                      " 
         ,"                 ###                     " 
         ,"                ## ##                    " 
         ,"               ##   ##                   " 
         ,"              ##     ##                  " 
         ,"             ##       ##                 " 
         ,"                                         " 
         ,"                                         " 
         ,"                                         " 
         ,"                                         " 
         ,"                                         "] 
 
*Main> mapM_ putStrLn $ wraps sample "@*+'·" 
              ·· 
             ·''· 
            ·'++'· 
           ·'+**+'· 
          ·'+*@@*+'· 
         ·'+*@##@*+'· 
          ·'+*@##@*+'· 
           ·'+*@##@*+'· 
            ·'+*@##@*+'· 
            ·'+*@###@*+'· 
           ·'+*@##@##@*+'· 
          ·'+*@##@*@##@*+'· 
         ·'+*@##@*+*@##@*+'· 
        ·'+*@##@*+'+*@##@*+'· 
         ·'+*@@*+'·'+*@@*+'· 
          ·'+**+'· ·'+**+'· 
           ·'++'·   ·'++'· 
            ·''·     ·''· 
             ··       ·· 
*Main> 
-} 
2 comentarios
0votos

Escrito por alejandro hace 3 años

hola josejuan

el ejercicio es solo asteriscos y arrobas se debe hacer en js y si lleva ciclos lo que es que no pueden ir anidados

ejemplo si el usuario ingresa 6 imprima esto:

                                       **
                                      *@@*
                                     ******
si el usuario ingresa 9 e imprime esto asi:

                                         *
                                        *@*
                                       *@@@*
                                      *@@@@@*
                                     *********

y asi sucesivamente 

gracias

0votos

Escrito por josejuan hace 3 años

Hola @alenjandro, efectivamente no resuelvo exactamente el desafío, lo he generalizado para poder "rodear" cualquier figura, no sólo triángulos, pero, como existen excepciones en el triángulo, el resultado no es exactamente el mismo.

Por ejemplo, tomando las soluciones que dibujan triángulos en el desafío Árbol de Navidad y aplicando mi "wrapeador", obtenemos:
    *
   *@*
  *@@@*
 *@@@@@*
*@@@@@@@*
 *******


Que, excepto las excepciones, es el resultado buscado, mi solución buscaba generalizarlo.

He creado una solución específica para los triángulos ;)

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.