Starting from:
$30

$24

Assignment 03 Solution







Instructions



In this assignment, you will be required to write Haskell functions that simplify navigating an elaborate maze.




1.1 Data File Speci cation




An example of properly formatted le is shown in Figure 1.




part01test01.emf




(




ll ul rr uu l " ,



[




x x x x x x x x x x " ,



xxx - - - - -1 x " ,



xx - -x - - - - x " , "x - - -x - - xxx " , "x -x -x - xx - x " , "x -x - - - - - - x " , "x - - - - - xx - x " , "x - - xg - -x - x " ,



xx -x - - - - - x " ,



x x x x x x x x x x "



]




)




Figure 1: A properly formatted maze encoding







One Player, One Move



The rst part (onePlayerOneMove in the le csce322homeWork03part01.hs) will take in two




arguments (the maze and a move) and returns one (1) value (the maze that is the result of Player 1 making the given move) . If the maze has already been solved, or the direction of the move is immediately blocked, the maze is unchanged. Otherwise, like the JavaScript assignment, the player keeps moving until the goal is reached, they reach a dead end (where the only open









1



move is \backwards"), or they occupy a spot with more options than just moving \forward" and \backward".




(




ll ul rr uu l " ,



[




x x x x x x x x x x " ,



xxx - - - - -1 x " ,



xx - -x - - - - x " , "x - - -x - - xxx " , "x -x -x - xx - x " , "x -x - - - - - - x " , "x - - - - - xx - x " , "x - - xg - -x - x " ,



xx -x - - - - - x " ,



x x x x x x x x x x "



]




)




Figure 2: Before onePlayerOneMove







" Result "




" x x x x x x x x x x "




" xxx - - - -1 - x "




" xx - -x - - - - x "




"x - - -x - - xxx "




"x -x -x - xx - x "




"x -x - - - - - - x "




"x - - - - - xx - x "




"x - - xg - -x - x "




" xx -x - - - - - x "




" x x x x x x x x x x "




""




Figure 3: After onePlayerOneMove







One Player, Many Moves



The second part (onePlayerManyMoves in the le csce322homeWork03part02.hs) will take in two




arguments (the maze and a list of moves) and returns one (1) value (the maze that is the result of Player 1 making all of the give moves). If the maze has already been solved the maze is unchanged. If the direction of a move is immediately blocked, the maze is unchanged for that move.


















Page 2



(




r l l l d l r d l r d u l " ,



[




x x x x x x x x x x x x x x x " , "x - xxx - - -x - - - xxx " , "x - - xx -x -x -x - xxx " ,



xx - -x - - - - - - -x - x " ,



xxxgxxxx -x -x - - x " , "x -x -x - -x - - xx - xx " , "x -x - - - - - - - - - - xx " , "x - - x1xx -x - -x - - x " , "x - - - - - - - xx -x - xx " ,



x x x x x x x x x x x x x x x "



]




)




Figure 4: Before onePlayerManyMoves







" Result "




" x x x x x x x x x x x x x x x "




"x - xxx - - -
x - - -
xxx "
"x - -
xx -x -x -x - xxx "
" xx -
-x - - -
----
x - x "



" xxx1xxxx -x -x - - x "




"x -x -x - -x - - xx - xx "




"x -x - - - - - - - - - - xx "




"x - -x - xx -x - -x - - x "




"x - - - - - - - xx -x - xx "




" x x x x x x x x x x x x x x x "




""




Figure 5: After onePlayerManyMoves







Many Players , One Move



The third part (manyPlayersOneMove in the le csce322homeWork03part03.hs) will take in two




arguments (the maze and a move) and returns one (1) value (the maze that is the result of Player 1 making the given move). If the maze has already been solved, or the direction of the move is immediately blocked, the maze is unchanged. This di ers from the rst part in that there may be more than 1 player in the maze.






























Page 3



(




lr " ,



[




x x x x x x x x x x x x " , "x - - - - - - -x - - x " , "x -x -x -x - - - - x " , "x - - -3 - -x - - xx " ,
xx - - - - xxx - - x " ,



xx - xxx -2 - x - x " ,



xx - - - - -x - - - x " ,



xxx - - xxxxx - x " , "x -x - - -1 - xx - x " , "x - xx - xxxxx - x " , "x -g - - -x - - - - x " ,



x x x x x x x x x x x x "



]




)




Figure 6: Before manyPlayersOneMove







" Result "




" x x x x x x x x x x x x "




"x - - -
----
x -
- x "
"x -x -x -x -
- -
- x "
"x - - -
3 - -x
- -
xx "
" xx - -
- - xxx -
- x "
" xx - xxx -2
- x - x "
" xx - -
- - -x
- -
- x "



" xxx - - xxxxx - x "




"x -x -1 - - - xx - x "




"x - xx - xxxxx - x "




"x -g - - -x - - - - x "




" x x x x x x x x x x x x "




""




Figure 7: After manyPlayersOneMove







Many Players , Many Moves



The fourth part (manyPlayersManyMoves in the le csce322homeWork03part04.hs) will take in two (2) arguments (the maze and a list of moves) and returns one (1) value (the maze that is the result of Player 1 making the rst move, Player 2 making the second. . . ). If the maze has already been solved, or the direction of the move is immediately blocked, the maze is unchanged and the next player makes the next move.
















Page 4



(




d " ,



[




x x x x x x x x x x x x x " ,



xx -x - -x - - - -1 x " ,



xx - - - - - - -x - - x " , "x -2 - x - -x -x - xx " , "x -x - xxx - -x - - x " , "x - -4 - - -x - -x - x " ,



xxx3 - xx - -x - - x " , "x - - - - - - -x - - - x " ,



xg - - - - - -x - xxx " ,



x x x x x x x x x x x x x "



]




)




Figure 8: Before manyPlayersManyMoves







" Result "




" x x x x x x x x x x x x x "




" xx -x - -x - - - - - x "




" xx - - - - - - - x1 - x "




"x -2 - x - -x -x - xx "




"x -x - xxx
- -x
- - x "
"x - -
4---
x - -
x - x "
" xxx3 - xx
- -x
- - x "
"x - -
----
-x -
- - x "
" xg - - - - -
-x - xxx "



" x x x x x x x x x x x x x "




""




Figure 9: After manyPlayersManyMoves







Naming Conventions



Your les should follow the naming convention of




csce322homeWork03part01.hs, csce322homeWork03part02.hs, csce322homeWork03part03.hs, and csce322homeWork03part04.hs.




6.1 Helpers.hs




A le named Helpers.hs has been provided with the functionality to read the .emf les into matrices. If a modi ed Helpers.hs le is not included with your submission, the default will be used in its place.
















Page 5
webgrader Note



Submissions will be tested with ghc. cse.unl.edu is currently running version 7:10:3 of ghc. If you would like to test things o ine, you can load a le in ghci with the command :l filename.hs and run the main method on a given le with the command :main "/path/to/inputfile.bff"




8
Point Allocation










Component
Points














csce322homeWork03part01.hs




Compilation
10


Test Cases
1 10


Total
20








csce322homeWork03part02.hs




Compilation
10


Test Cases
1 10


Total
20








csce322homeWork03part03.hs




Compilation
10


Test Cases
1 20


Total
30








csce322homeWork03part04.hs




Compilation
10


Test Cases
1 20


Total
30














Total
100






9
External Resources





Learn Haskell Fast and Hard




Learn You a Haskell for Great Good!




Red Bean Software




Functional Programming Fundamentals The Haskell Cheatsheet


























































Page 6

More products