{-# LANGUAGE NoMonomorphismRestriction #-} main = narisavatKvadratiki narisavatKvadratiki = flip mapM_ [razmer,razmer-odin.. -razmer] $ \yKoordinata -> flip mapM_ [-razmer..razmer] (\xKoordinata -> putStr [if elem [xKoordinata,yKoordinata] kvadratiki then chornayaTochka else pusto ,pusto]) >> putChar novayaLiniya where kvadratiki = popravitj $ zaeboshitKvadratiki (dva*dva*dva) [[-razmer,razmer],[razmer,razmer],[razmer,-razmer],[-razmer,-razmer]] zaeboshitKvadratiki kolichestvo = map (map (uncurry zaeboshitLiniyu) . obzmeitj) . take kolichestvo . iterate (map (uncurry srednyaaTochka) . obzmeitj) zaeboshitLiniyu odin dva = [zipWith (+) odin [dlina*cos ugol,dlina*sin ugol] | dlina <- [0,prirashenie..rasstojanie]] where ugol = vicheslitUgol odin dva rasstojanie = vicheslitRasstoyanie odin dva vicheslitRasstoyanie [xKoordinata1,yKoordinata1] [xKoordinata2,yKoordinata2] = sqrt $ (xKoordinata1-xKoordinata2)^dva + (yKoordinata1-yKoordinata2)^dva vicheslitUgol [xKoordinata1,yKoordinata1] [xKoordinata2,yKoordinata2] = atan2 (yKoordinata2-yKoordinata1) (xKoordinata2-xKoordinata1) srednyaaTochka [xKoordinata1,yKoordinata1] [xKoordinata2,yKoordinata2] = [(xKoordinata1+xKoordinata2)/dva,(yKoordinata1+yKoordinata2)/dva] obzmeitj spisok = zip spisok (tail spisok) ++ [(head spisok,last spisok)] popravitj = map (map round) . concat . concat razmer = 24 prirashenie = 0.1 nolj:odin:dva:_ = [0..] nachalo = [nolj,nolj] [chornayaTochka,pusto,novayaLiniya] = "# \n"