Difference between revisions of "FP Test3 2024"

From Marek Běhálek Wiki
Jump to navigation Jump to search
Line 156: Line 156:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
<translate>
 +
* Define a function <code>getFromMaze</code> that takes a character from a maze. The coordinates are given as: <code>(row index, column index)</code> where the indexes start from <code>(0,0)</code>. The coordinate <code>(0,0)</code> is a top left corner.
 +
</translate>
 +
 +
<syntaxhighlight lang="Haskell">getFromMaze :: Maze -> (Int, Int) -> Char</syntaxhighlight>
 +
<syntaxhighlight lang="Haskell" class="myDark">
 +
ghci> getFromMaze  sample1  (1,1)
 +
' '
 +
</syntaxhighlight>
 +
 +
<translate>
 +
* Define a function
 +
</translate>
  
 +
<syntaxhighlight lang="Haskell"></syntaxhighlight>
 +
<syntaxhighlight lang="Haskell" class="myDark">
 +
</syntaxhighlight>
  
 
<translate>
 
<translate>
<!--T:25-->
+
* Define a function
* Define a function makePicture where the list arguments gives the positions of the black points (represented by sharp) and the two integer arguments give the width and height of the picture.
 
 
</translate>
 
</translate>
<syntaxhighlight lang="Haskell">makePicture :: Int -> Int -> [(Int,Int)]-> Pic</syntaxhighlight>
+
 
 +
<syntaxhighlight lang="Haskell"></syntaxhighlight>
 +
<syntaxhighlight lang="Haskell" class="myDark">
 +
</syntaxhighlight>
 +
 
 +
<translate>
 +
* Define a function
 +
</translate>
 +
 
 +
<syntaxhighlight lang="Haskell"></syntaxhighlight>
 
<syntaxhighlight lang="Haskell" class="myDark">
 
<syntaxhighlight lang="Haskell" class="myDark">
*Main> pp(makePicture 7 5 [(1,3),(3,2)])
 
.......
 
...#...
 
.......
 
..#....
 
.......
 
 
</syntaxhighlight>
 
</syntaxhighlight>

Revision as of 11:03, 15 November 2024

Home Preparation For Test 3 - 2024

Data definition

Consider following type representing a maze:

type Maze = [String]

If you want to print this maze on a screen you can use:

printMaze :: Maze -> IO ()
printMaze x = putStr (concat (map (++"\n") x))

Maze example:

sample1 :: Maze
sample1 = ["*********",
           "* *   * *",
           "* * * * *",
           "* * * * *",
           "*   *   *",
           "******* *",
           "        *",
           "*********"]

sample2 :: Maze
sample2 = ["       ",
           "       ",
           "  ***  ",
           "  ***  ",
           "  ***  ",
           "       ",
           "       "]


sample3 :: Maze
sample3 = ["  * *  ",
           " ##### ",
           "  ***  ",
           "  * *  ",
           "  ***  ",
           "     * ",
           "       "]

arrow :: Maze
arrow = [ "....#....",
          "...###...",
          "..#.#.#..",
          ".#..#..#.",
          "....#....",
          "....#....",
          "....#####"]
ghci> printMaze sample1                                           
*********
* *   * *
* * * * *
* * * * *
*   *   *
******* *
        *
*********

Tasks

Create functions that:

  • Place one maze above another.
above :: Maze -> Maze -> Maze
*Main> printMaze(above arrow arrow)
....#....
...###...
..#.#.#..
.#..#..#.
....#....
....#....
....#####
....#....
...###...
..#.#.#..
.#..#..#.
....#....
....#....
....#####
  • Place two mazes side by side (consider, that they have the same height).
sideBySide :: Maze -> Maze -> Maze
*Main> printMaze(sideBySide arrow arrow)
....#........#....
...###......###...
..#.#.#....#.#.#..
.#..#..#..#..#..#.
....#........#....
....#........#....
....#####....#####
  • Rotate maze to the left and to the right.
rotateR :: Maze -> Maze
rotateL :: Maze -> Maze
*Main> printMaze (rotateR arrow)       
.......
...#...
....#..
.....#.
#######
#....#.
#...#..
#..#...
#......
*Main> printMaze(rotateL arrow)
......#
...#..#
..#...#
.#....#
#######
.#.....
..#....
...#...
.......
  • Define a function getFromMaze that takes a character from a maze. The coordinates are given as: (row index, column index) where the indexes start from (0,0). The coordinate (0,0) is a top left corner.
getFromMaze :: Maze -> (Int, Int) -> Char
ghci> getFromMaze  sample1  (1,1)
' '
  • Define a function
  • Define a function
  • Define a function