module Picture where

type Picture = [String]

-- vertikales, horizontales und diagonales Spiegeln 
flipV, flipH, flipD :: Picture -> Picture
flipV = map reverse
flipH = reverse
flipD []     = []
flipD ([]:_) = []
flipD pic    = (map head pic) : flipD (map mytail pic)
                where   mytail [] = []
                        mytail xs = tail xs

-- Farbinversion
invertColour :: Picture -> Picture 
invertColour = map (map changeColour) 
  where  changeColour '#' = '.'
         changeColour '.' = '#'

-- Bildschirmausgabe
printPic :: [String] -> IO ()
printPic pic = putStr (concat (map (++"\n") pic))

-- Positionierung zweier Bilder übereinander und nebeneinander
above, aside :: Picture -> Picture -> Picture
above = (++)
aside = zipWith (++)

-- Übereinanderlegen zweier Bilder (gleichen Ausmasses)
superimpose :: Picture -> Picture -> Picture
superimpose = zipWith (zipWith blackOverWhite)
  where blackOverWhite '#' _ = '#'
        blackOverWhite '.' c = c

lambda=["................",
        "..###...........",
        ".#..##..........",
        ".....##.........",
        "......##........",
        ".....####.......",
        "....###.##......",
        "...###...##.....",
        "..###.....##..#.",
        ".###.......###..",
        "................"
        ]

white = take 11 (repeat "................")

blume= ["................",
        ".......###......",
        "......#####.....",
        ".......###......",
        "....#...#.......",
        ".....##.#..#....",
        "......##.##.....",
        "......##........",
        ".....#..........",
        "....#...........",
        "................"]

smilie=["................",
        "....########....",
        "...#........#...",
        "..#..#....#..#..",
        "..#..........#..",
        "..#..........#..",
        "..#..#....#..#..",
        "..#...####...#..",
        "...#........#...",
        "....########....",
        "................"]
