MinesweeperGame.prototype .countMines = function ( ) {
return this ._countCellsInDict( this ._mines) ;
} ;
MinesweeperGame.prototype .countFlags = function ( ) {
return this ._countCellsInDict( this ._flags) ;
} ;
MinesweeperGame.prototype .countOpenCells = function ( ) {
return this ._countCellsInDict( this ._openCells) ;
} ;
MinesweeperGame.prototype .hasMine = function ( x, y) {
return this ._isCellInDict( x, y, this ._mines) ;
} ;
MinesweeperGame.prototype .hasOpened = function ( x, y) {
return this ._isCellInDict( x, y, this ._openCells) ;
} ;
MinesweeperGame.prototype .hasFlag = function ( x, y) {
return this ._isCellInDict( x, y, this ._flags) ;
} ;
MinesweeperGame.prototype ._isCellInDict = function ( x, y, dict) {
if ( dict[ y] ) {
return dict[ y] [ x] ;
}
return false ;
} ;
MinesweeperGame.prototype ._countCellsInDict = function ( dict) {
var counter = 0 ;
for ( var y in dict) {
if ( ! dict.hasOwnProperty ( y) ) continue ;
for ( var x in dict[ y] ) {
if ( ! dict[ y] .hasOwnProperty ( x) ) continue ;
counter++;
}
}
return counter;
} ;
TWluZXN3ZWVwZXJHYW1lLnByb3RvdHlwZS5jb3VudE1pbmVzID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5fY291bnRDZWxsc0luRGljdCh0aGlzLl9taW5lcyk7Cn07CgpNaW5lc3dlZXBlckdhbWUucHJvdG90eXBlLmNvdW50RmxhZ3MgPSBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLl9jb3VudENlbGxzSW5EaWN0KHRoaXMuX2ZsYWdzKTsKfTsKCk1pbmVzd2VlcGVyR2FtZS5wcm90b3R5cGUuY291bnRPcGVuQ2VsbHMgPSBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLl9jb3VudENlbGxzSW5EaWN0KHRoaXMuX29wZW5DZWxscyk7Cn07CgpNaW5lc3dlZXBlckdhbWUucHJvdG90eXBlLmhhc01pbmUgPSBmdW5jdGlvbih4LCB5KSB7CiAgICByZXR1cm4gdGhpcy5faXNDZWxsSW5EaWN0KHgsIHksIHRoaXMuX21pbmVzKTsKfTsKCk1pbmVzd2VlcGVyR2FtZS5wcm90b3R5cGUuaGFzT3BlbmVkID0gZnVuY3Rpb24oeCwgeSkgewogICAgcmV0dXJuIHRoaXMuX2lzQ2VsbEluRGljdCh4LCB5LCB0aGlzLl9vcGVuQ2VsbHMpOwp9OwoKTWluZXN3ZWVwZXJHYW1lLnByb3RvdHlwZS5oYXNGbGFnID0gZnVuY3Rpb24oeCwgeSkgewogICAgcmV0dXJuIHRoaXMuX2lzQ2VsbEluRGljdCh4LCB5LCB0aGlzLl9mbGFncyk7Cn07CgpNaW5lc3dlZXBlckdhbWUucHJvdG90eXBlLl9pc0NlbGxJbkRpY3QgPSBmdW5jdGlvbih4LCB5LCBkaWN0KSB7CiAgICBpZiAoZGljdFt5XSkgewogICAgICAgIHJldHVybiBkaWN0W3ldW3hdOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9OwoKTWluZXN3ZWVwZXJHYW1lLnByb3RvdHlwZS5fY291bnRDZWxsc0luRGljdCA9IGZ1bmN0aW9uKGRpY3QpIHsKICAgIHZhciBjb3VudGVyID0gMDsKICAgIGZvciAodmFyIHkgaW4gZGljdCkgewogICAgICAgIGlmICghZGljdC5oYXNPd25Qcm9wZXJ0eSh5KSkgY29udGludWU7CiAgICAgICAgZm9yICh2YXIgeCBpbiBkaWN0W3ldKSB7CiAgICAgICAgICAgIGlmICghZGljdFt5XS5oYXNPd25Qcm9wZXJ0eSh4KSkgY29udGludWU7CiAgICAgICAgICAgIGNvdW50ZXIrKzsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gY291bnRlcjsKCn07