repositories
/
mc1516pa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
started with some necoding
[mc1516pa.git]
/
code
/
Sokoban.icl
diff --git
a/code/Sokoban.icl
b/code/Sokoban.icl
index
2788930
..
804a7cd
100644
(file)
--- a/
code/Sokoban.icl
+++ b/
code/Sokoban.icl
@@
-25,15
+25,24
@@
instance toString SokobanTile where
toString TargetBox = "*"
toString TargetAgent = "+"
toString TargetBox = "*"
toString TargetAgent = "+"
+parseFromFile :: *File -> (SokobanPuzzle, *File)
+parseFromFile f
+# (contents, f) = readEntireFile f
+| isEmpty contents = abort "File is empty or unreadable"
+= (Sokoban (parseRows contents), f)
+
parse :: String *World -> (SokobanPuzzle, *World)
parse fp w
# (ok, f, w) = fopen fp FReadText w
| not ok = abort ("Couldn't open file: '" +++ fp +++ "'")
parse :: String *World -> (SokobanPuzzle, *World)
parse fp w
# (ok, f, w) = fopen fp FReadText w
| not ok = abort ("Couldn't open file: '" +++ fp +++ "'")
-# (contents, f) = readEntireFile f
-| isEmpty contents = abort "File is empty or unreadable"
+# (puzzle, f) = parseFromFile f
# (ok, w) = fclose f w
| not ok = abort "Couldn't close file"
# (ok, w) = fclose f w
| not ok = abort "Couldn't close file"
-= (Sokoban (parseRows contents), w)
+= (puzzle, w)
+
+numberOfBlocks :: SokobanPuzzle -> Int
+numberOfBlocks (Sokoban bs) = let fbs = flatten bs in
+ length ([1\\(Box)<-fbs] ++ [1\\(TargetBox)<-fbs])
parseRows :: [Char] -> [[SokobanTile]]
parseRows cs = case parseRow cs of
parseRows :: [Char] -> [[SokobanTile]]
parseRows cs = case parseRow cs of