From 7096de6ad8f8798791a08c2727d421fc38ec9c56 Mon Sep 17 00:00:00 2001 From: Leonardo Val Date: Fri, 9 Oct 2015 12:30:44 -0300 Subject: [PATCH] Version 0.1.5 --- build/ludorum.js | 246 ++++++++++++++++++++++----------------- build/ludorum.js.map | 2 +- build/ludorum.min.js | 6 +- build/ludorum.min.js.map | 2 +- package.json | 2 +- tests/lib/ludorum.js | 246 ++++++++++++++++++++++----------------- tests/lib/ludorum.js.map | 2 +- 7 files changed, 287 insertions(+), 219 deletions(-) diff --git a/build/ludorum.js b/build/ludorum.js index 7799bba..55970e8 100644 --- a/build/ludorum.js +++ b/build/ludorum.js @@ -399,13 +399,12 @@ var Game = exports.Game = declare({ /** # Player -Player is the base type for all playing agents. Basically, playing a game means -choosing a move from all available ones, each time the game enables the player -to do so. +Player is the base type for all playing agents. Basically, playing a game means choosing a move from +all available ones, each time the game enables the player to do so. */ var Player = exports.Player = declare({ - /** The default constructor takes only its `name` from the given `params`. - This is an abstract class that is meant to be extended. + /** The default constructor takes only its `name` from the given `params`. This is an abstract + class that is meant to be extended. */ constructor: (function () { var __PlayerCount__ = 0; // Used by the Player's default naming. @@ -415,17 +414,15 @@ var Player = exports.Player = declare({ }; })(), - /** A player is asked to choose a move by calling - `Player.decision(game, role)`. The result is the selected move if it can be - obtained synchronously, else a future is returned. + /** A player is asked to choose a move by calling `Player.decision(game, role)`. The result is + the selected move if it can be obtained synchronously, else a future is returned. */ decision: function decision(game, role) { return this.movesFor(game, role)[0]; // Indeed not a very thoughtful base implementation. }, - /** To help implement the decision, `Player.movesFor(game, player)` gets - the moves in the game for the player. It also checks if there are any moves, - and if it not so an error is risen. + /** To help implement the decision, `Player.movesFor(game, player)` gets the moves in the game + for the player. It also checks if there are any moves, and if it not so an error is risen. */ movesFor: function movesFor(game, role) { var moves = game.moves(); @@ -434,32 +431,30 @@ var Player = exports.Player = declare({ return moves[role]; }, - /** Before starting a [match](Match.js.html), all players are asked to join - by calling `Player.participate(match, role)`. This allows the player to - prepare properly. If this implies building another instance of the player - object, it must be returned in order to participate in the match. + /** Before starting a [match](Match.js.html), all players are asked to join by calling + `Player.participate(match, role)`. This allows the player to prepare properly. If this implies + building another instance of the player object, it must be returned in order to participate in + the match. */ participate: function participate(match, role) { return this; }, - // ## Conversions & presentations ######################################### - - /** Players can also be serialized, pretty much in the same way - [games](Game.html) are. `Player.__serialize__()` returns an array, where the - first element should be the name of the game, and the rest the arguments to - call the player's constructor in order to rebuild this player's state. + // ## Utilities ################################################################################ + + /** Serialization and materialization using Sermat. */ - __serialize__: function __serialize__() { - return [this.constructor.name, {name: this.name}]; + 'static __SERMAT__': { + identifier: 'Player', + serializer: function serialize_Player(obj) { + return this.serializeAsProperties(obj, ['name']); + } }, - /** The string representation of the player is derived straight from its - serialization. + /** The string representation of the player is derived straight from its serialization. */ toString: function toString() { - var args = this.__serialize__(); - return args.shift() +'('+ args.map(JSON.stringify).join(',') +')'; + return Sermat.ser(this); } }); // declare Player. @@ -1852,8 +1847,8 @@ var GameTree = declare({ Automatic players that moves fully randomly. */ players.RandomPlayer = declare(Player, { - /** The constructor takes the player's `name` and a `random` number - generator (`base.Randomness.DEFAULT` by default). + /** The constructor takes the player's `name` and a `random` number generator + (`base.Randomness.DEFAULT` by default). */ constructor: function RandomPlayer(params) { Player.call(this, params); @@ -1865,7 +1860,18 @@ players.RandomPlayer = declare(Player, { */ decision: function(game, player) { return this.random.choice(this.movesFor(game, player)); - } + }, + + // ## Utilities ################################################################################ + + /** Serialization and materialization using Sermat. + */ + 'static __SERMAT__': { + identifier: 'RandomPlayer', + serializer: function serialize_RandomPlayer(obj) { + return this.serializeAsProperties(obj, ['name', 'random']); + } + }, }); // declare RandomPlayer. @@ -1874,8 +1880,7 @@ players.RandomPlayer = declare(Player, { Automatic player that is scripted previously. */ players.TracePlayer = declare(Player, { - /** The constructor takes the player's `name` and the `trace` as an - sequence of moves to make. + /** The constructor takes the player's `name` and the `trace` as an sequence of moves to make. */ constructor: function TracePlayer(params) { Player.call(this, params); @@ -1884,8 +1889,8 @@ players.TracePlayer = declare(Player, { this.__decision__ = this.__iter__(); }, - /** The `decision(game, player)` returns the next move in the trace, or the - last one if the trace has ended. + /** The `decision(game, player)` returns the next move in the trace, or the last one if the + trace has ended. */ decision: function(game, player) { try { @@ -1896,8 +1901,15 @@ players.TracePlayer = declare(Player, { return this.__decision__; }, - __serialize__: function __serialize__() { - return ['TracePlayer', { name: this.name, trace: this.trace.toArray() }]; + // ## Utilities ################################################################################ + + /** Serialization and materialization using Sermat. + */ + 'static __SERMAT__': { + identifier: 'Player', + serializer: function serialize_Player(obj) { + return [{name: obj.name, trace: obj.trace.toArray()}]; + } } }); // declare TracePlayer. @@ -1906,6 +1918,7 @@ players.TracePlayer = declare(Player, { This is the base type of automatic players based on heuristic evaluations of game states or moves. */ + var HeuristicPlayer = players.HeuristicPlayer = declare(Player, { /** The constructor takes the player's `name` and a `random` number generator (`base.Randomness.DEFAULT` by default). Many heuristic can be based on randomness, but this is @@ -1954,7 +1967,10 @@ var HeuristicPlayer = players.HeuristicPlayer = declare(Player, { return this.random.random(-0.5, 0.5); }, - /**TODO WIP + /** Heuristic players work by evaluating the moves of the `player` in the given `game` state. If + the game state is contingent, then all possible scenarios are evaluated and aggregated. The + result of `evaluatedMoves` is a sequence of pairs `[move, evaluation]`, or a future for such + sequence if the evaluation function is asynchronous. */ evaluatedMoves: function evaluatedMoves(game, player) { var heuristicPlayer = this, @@ -1998,7 +2014,8 @@ var HeuristicPlayer = players.HeuristicPlayer = declare(Player, { } }, // evaluatedMoves() - /** TODO WIP + /** The `possibleMoves` for a `player` in a given `game` is a set of objects, with one move for + the player, and all the options for the opponents. */ possibleMoves: function possibleMoves(game, player) { var moves = game.moves(); @@ -2013,8 +2030,8 @@ var HeuristicPlayer = players.HeuristicPlayer = declare(Player, { [move, evaluation]. */ bestMoves: function bestMoves(evaluatedMoves) { - return Future.then(iterable(evaluatedMoves), function (evaluatedMoves) { - return evaluatedMoves.greater(function (pair) { + return Future.then(evaluatedMoves, function (evaluatedMoves) { + return iterable(evaluatedMoves).greater(function (pair) { return pair[1]; }).map(function (pair) { return pair[0]; @@ -2063,12 +2080,11 @@ var HeuristicPlayer = players.HeuristicPlayer = declare(Player, { /** # MaxNPlayer -Automatic players based on the MaxN algorithm, a MiniMax variant for games of -more than two players. +Automatic players based on the MaxN algorithm, a MiniMax variant for games of more than two players. */ var MaxNPlayer = players.MaxNPlayer = declare(HeuristicPlayer, { - /** Besides the parameters of every [`HeuristicPlayer`](HeuristicPlayer.js.html), - an `horizon` for the search may be specified (3 plies by default). + /** Besides the parameters of every [`HeuristicPlayer`](HeuristicPlayer.js.html), an `horizon` + for the search may be specified (3 plies by default). */ constructor: function MaxNPlayer(params) { HeuristicPlayer.call(this, params); @@ -2076,15 +2092,14 @@ var MaxNPlayer = players.MaxNPlayer = declare(HeuristicPlayer, { .integer('horizon', { defaultValue: 3, coerce: true }); }, - /** This player evaluates each state using the `maxn` method, taking the - evaluation for the given `player`. + /** This player evaluates each state using the `maxn` method, taking the evaluation for the + given `player`. */ stateEvaluation: function stateEvaluation(game, player) { return this.maxN(game, player, 0)[player]; }, - /** `heuristics(game)` returns an heuristic value for each players in the - game, as an object. + /** `heuristics(game)` returns an heuristic value for each players in the game, as an object. */ heuristics: function heuristic(game) { var result = {}, maxN = this; @@ -2094,14 +2109,13 @@ var MaxNPlayer = players.MaxNPlayer = declare(HeuristicPlayer, { return result; }, - /** `quiescence(game, player, depth)` is a stability test for the given - `game` state and the given `player`. If the game is quiescent, this function - must return evaluations. Else it must return null. + /** `quiescence(game, player, depth)` is a stability test for the given `game` state and the + given `player`. If the game is quiescent, this function must return evaluations. Else it must + return null. - Final game states are always quiescent, and their evaluations are the game's - result for each player. This default implementation also returns heuristic - evaluations for every game state at a deeper depth than the player's - horizon, calculated via the `heuristics()` method. + Final game states are always quiescent, and their evaluations are the game's result for each + player. This default implementation also returns heuristic evaluations for every game state at + a deeper depth than the player's horizon, calculated via the `heuristics()` method. */ quiescence: function quiescence(game, player, depth) { var results = game.result(); @@ -2114,9 +2128,8 @@ var MaxNPlayer = players.MaxNPlayer = declare(HeuristicPlayer, { } }, - /** The core `maxN(game, player, depth)` algorithm return the evaluations - for each player of the given game, assuming each player tries to maximize - its own evaluation regardless of the others'. + /** The core `maxN(game, player, depth)` algorithm return the evaluations for each player of the + given game, assuming each player tries to maximize its own evaluation regardless of the others'. */ maxN: function maxN(game, player, depth) { var values = this.quiescence(game, player, depth); @@ -2139,13 +2152,17 @@ var MaxNPlayer = players.MaxNPlayer = declare(HeuristicPlayer, { return values; }, - toString: function toString() { - return (this.constructor.name || 'MaxNPlayer') +'('+ JSON.stringify({ - name: this.name, horizon: this.horizon - }) +')'; + // ## Utilities ################################################################################ + + /** Serialization and materialization using Sermat. + */ + 'static __SERMAT__': { + identifier: 'MaxNPlayer', + serializer: function serialize_MaxNPlayer(obj) { + return this.serializeAsProperties(obj, ['name', 'horizon']); + } } -}); // declare MiniMaxPlayer. - +}); // declare MaxNPlayer. /** # MiniMaxPlayer @@ -2216,14 +2233,18 @@ var MiniMaxPlayer = players.MiniMaxPlayer = declare(HeuristicPlayer, { return value; }, - toString: function toString() { - return (this.constructor.name || 'MiniMaxPlayer') +'('+ JSON.stringify({ - name: this.name, horizon: this.horizon - }) +')'; + // ## Utilities ################################################################################ + + /** Serialization and materialization using Sermat. + */ + 'static __SERMAT__': { + identifier: 'MiniMaxPlayer', + serializer: function serialize_MiniMaxPlayer(obj) { + return this.serializeAsProperties(obj, ['name', 'horizon']); + } } }); // declare MiniMaxPlayer. - /** # AlphaBetaPlayer Automatic players based on MiniMax with alfa-beta pruning. @@ -2277,6 +2298,17 @@ players.AlphaBetaPlayer = declare(MiniMaxPlayer, { } } return isActive ? alpha : beta; + }, + + // ## Utilities ################################################################################ + + /** Serialization and materialization using Sermat. + */ + 'static __SERMAT__': { + identifier: 'AlphaBetaPlayer', + serializer: function serialize_AlphaBetaPlayer(obj) { + return this.serializeAsProperties(obj, ['name', 'horizon']); + } } }); // declare AlphaBetaPlayer. @@ -2290,12 +2322,12 @@ var MonteCarloPlayer = players.MonteCarloPlayer = declare(HeuristicPlayer, { [flat Monte Carlo game tree search method](http://en.wikipedia.org/wiki/Monte-Carlo_tree_search). The parameters may include: - + `simulationCount=30`: Maximum amount of simulations performed for each - available move at each decision. + + `simulationCount=30`: Maximum amount of simulations performed for each available move at each + decision. + `timeCap=1000ms`: Time limit for the player to decide. + `horizon=500`: Maximum amount of moves performed in simulations. - + `agent`: Player instance used in the simulations. If undefined moves are - chosen at random. Agents with asynchronous decisions are not supported. + + `agent`: Player instance used in the simulations. If undefined moves are chosen at random. + Agents with asynchronous decisions are not supported. */ constructor: function MonteCarloPlayer(params) { HeuristicPlayer.call(this, params); @@ -2310,14 +2342,14 @@ var MonteCarloPlayer = players.MonteCarloPlayer = declare(HeuristicPlayer, { } }, - /** `selectMoves(moves, game, player)` return an array with the best - evaluated moves. + /** `evaluatedMoves(game, player)` returns a sequence with the evaluated moves. */ - selectMoves: function selectMoves(moves, game, player) { + evaluatedMoves: function evaluatedMoves(game, player) { + raiseIf(game.isContingent, "MonteCarloPlayer cannot evaluate root contingent states!"); //FIXME var monteCarloPlayer = this, endTime = Date.now() + this.timeCap, gameNext = game.next.bind(game), - options = moves.map(function (move) { + options = this.possibleMoves(game, player).map(function (move) { return { move: move, nexts: (Object.keys(move).length < 2 ? @@ -2327,7 +2359,7 @@ var MonteCarloPlayer = players.MonteCarloPlayer = declare(HeuristicPlayer, { sum: 0, count: 0 }; - }); + }).toArray(); // Else the following updates won't work. for (var i = 0; i < this.simulationCount && Date.now() < endTime; ++i) { options.forEach(function (option) { option.nexts = option.nexts.filter(function (next) { @@ -2338,17 +2370,14 @@ var MonteCarloPlayer = players.MonteCarloPlayer = declare(HeuristicPlayer, { }); }); } - options = iterable(options).greater(function (option) { + return options.map(function (option) { raiseIf(isNaN(option.sum), "State evaluation is NaN for move ", option.move, "!"); - return option.count > 0 ? option.sum / option.count : 0; - }).map(function (option) { - return option.move; + return [option.move, option.count > 0 ? option.sum / option.count : 0]; }); - return options; }, - /** This player's `stateEvaluation(game, player)` runs `simulationCount` - simulations and returns the average result. + /** This player's `stateEvaluation(game, player)` runs `simulationCount` simulations and returns + the average result. It is provided for compatibility, since `evaluatedMoves` does not call it. */ stateEvaluation: function stateEvaluation(game, player) { var resultSum = 0, @@ -2364,9 +2393,9 @@ var MonteCarloPlayer = players.MonteCarloPlayer = declare(HeuristicPlayer, { return simulationCount > 0 ? resultSum / simulationCount : 0; }, - /** A `simulation(game, player)` plays a random match from the given `game` - state and returns an object with the final state (`game`), its result - (`result`) and the number of plies simulated (`plies`). + /** A `simulation(game, player)` plays a random match from the given `game` state and returns an + object with the final state (`game`), its result (`result`) and the number of plies simulated + (`plies`). */ simulation: function simulation(game, player) { var mc = this, @@ -2393,11 +2422,15 @@ var MonteCarloPlayer = players.MonteCarloPlayer = declare(HeuristicPlayer, { raise("Simulation ended unexpectedly for player ", player, " in game ", game, "!"); }, - __serialize__: function __serialize__() { - return [this.constructor.name, { name: this.name, - simulationCount: this.simulationCount, timeCap: this.timeCap, - agent: this.agent - }]; + // ## Utilities ################################################################################ + + /** Serialization and materialization using Sermat. + */ + 'static __SERMAT__': { + identifier: 'MonteCarloPlayer', + serializer: function serialize_MonteCarloPlayer(obj) { + return this.serializeAsProperties(obj, ['name', 'simulationCount', 'timeCap', 'agent']); + } } }); // declare MonteCarloPlayer @@ -2433,9 +2466,9 @@ players.UCTPlayer = declare(MonteCarloPlayer, { })); }, - /** `selectMoves(moves, game, player)` return an array with the best evaluated moves. + /** `evaluatedMoves(game, player)` return a sequence with the evaluated moves. */ - selectMoves: function selectMoves(moves, game, player) { + evaluatedMoves: function evaluatedMoves(game, player) { var root = new GameTree(null, game), endTime = Date.now() + this.timeCap, node, simulationResult; @@ -2459,21 +2492,22 @@ players.UCTPlayer = declare(MonteCarloPlayer, { node.uct.rewards += (game.normalizedResult(simulationResult.result)[player] + 1) / 2; } } - moves = iterable(root.children).select(1).greater(function (n) { - return n.uct.visits; - }).map(function (n) { - return n.transition; + return iterable(root.children).select(1).map(function (n) { + return [n.transition, n.uct.visits]; }); - return moves; }, - __serialize__: function __serialize__() { - return [this.constructor.name, { name: this.name, - simulationCount: this.simulationCount, timeCap: this.timeCap, - explorationConstant: this.explorationConstant - }]; + // ## Utilities ################################################################################ + + /** Serialization and materialization using Sermat. + */ + 'static __SERMAT__': { + identifier: 'UCTPlayer', + serializer: function serialize_UCTPlayer(obj) { + return this.serializeAsProperties(obj, ['name', 'simulationCount', 'timeCap', 'explorationConstant']); + } } -}); // declare MonteCarloPlayer +}); // declare UCTPlayer /** # UserInterfacePlayer diff --git a/build/ludorum.js.map b/build/ludorum.js.map index c2ff034..bd674ef 100644 --- a/build/ludorum.js.map +++ b/build/ludorum.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/__prologue__.js","../src/Game.js","../src/Player.js","../src/Match.js","../src/Contingent.js","../src/Tournament.js","../src/utils/Checkerboard.js","../src/utils/CheckerboardFromString.js","../src/utils/CheckerboardFromPieces.js","../src/utils/Scanner.js","../src/utils/Cache.js","../src/utils/GameTree.js","../src/players/RandomPlayer.js","../src/players/TracePlayer.js","../src/players/HeuristicPlayer.js","../src/players/MaxNPlayer.js","../src/players/MiniMaxPlayer.js","../src/players/AlphaBetaPlayer.js","../src/players/MonteCarloPlayer.js","../src/players/UCTPlayer.js","../src/players/UserInterfacePlayer.js","../src/players/WebWorkerPlayer.js","../src/aleatories/Aleatory.js","../src/aleatories/UniformAleatory.js","../src/aleatories/dice.js","../src/games/Predefined.js","../src/games/Choose2Win.js","../src/games/ConnectionGame.js","../src/games/OddsAndEvens.js","../src/games/TicTacToe.js","../src/games/ToadsAndFrogs.js","../src/games/Pig.js","../src/games/Mutropas.js","../src/games/Bahab.js","../src/tournaments/RoundRobin.js","../src/tournaments/Measurement.js","../src/tournaments/Elimination.js","../src/__epilogue__.js"],"names":[],"mappings":"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","file":"ludorum.js","sourcesContent":["/** Package wrapper and layout.\n*/\n(function (global, init) { \"use strict\"; // Universal Module Definition.\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['creatartis-base', 'sermat'], init); // AMD module.\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = init(require('creatartis-base'), require('sermat')); // CommonJS module.\n\t} else { // Browser or web worker (probably).\n\t\tglobal.ludorum = init(global.base, global.Sermat); // Assumes base is loaded.\n\t}\n})(this, function __init__(base, Sermat) { \"use strict\";\n// Import synonyms. ////////////////////////////////////////////////////////////////////////////////\n\tvar unimplemented = base.objects.unimplemented,\n\t\tobj = base.obj,\n\t\tcopy = base.copy,\n\t\traise = base.raise,\n\t\traiseIf = base.raiseIf,\n\t\tdeclare = base.declare,\n\t\tIterable = base.Iterable,\n\t\titerable = base.iterable,\n\t\tFuture = base.Future,\n\t\tRandomness = base.Randomness,\n\t\tinitialize = base.initialize,\n\t\tStatistics = base.Statistics,\n\t\tEvents = base.Events;\n\n// Library layout. /////////////////////////////////////////////////////////////////////////////////\n\tvar exports = {\n\t\t\t__package__: 'ludorum',\n\t\t\t__name__: 'ludorum',\n\t\t\t__init__: __init__,\n\t\t\t__dependencies__: [base, Sermat],\n\t\t\t__SERMAT__: { include: [base] }\n\t\t},\n\t\t/** The library is organized in the following _namespaces_.\n\t\t*/\n\t\taleatories = exports.aleatories = {},\n\t\tgames = exports.games = {},\n\t\tplayers = exports.players = {},\n\t\ttournaments = exports.tournaments = {},\n\t\tutils = exports.utils = {}\n\t;","/** # Game\n\nThe class `ludorum.Game` is the base type for all games.\n*/\nvar Game = exports.Game = declare({\n\t/** Its constructor takes the active player/s. A player is active if and only if it can move. \n\tThe argument may be either a player's name (string) or an array of players' names. It is used to\n\tinitialize `Game.activePlayers`, an array with the active players' names.\n\t*/\n\tconstructor: function Game(activePlayers) {\n\t\tthis.activePlayers = !activePlayers ? [this.players[0]] : \n\t\t\t(!Array.isArray(activePlayers) ? [activePlayers] : activePlayers);\n\t},\n\n\t/** The game's `name` is used mainly for displaying purposes.\n\t*/\n\tname: '?',\n\t\n\t/** The game `players` are specified in an array of role names (strings), that the players can \n\tassume in a match of this game. For example: `\"Xs\"` and `\"Os\"` in TicTacToe, or `\"Whites\"` and \n\t`\"Blacks\"` in Chess.\n\t*/\n\tplayers: [],\n\n\t/** The moves of each active player are calculated by `moves()`. This method returns an object \n\twith every active player related to the moves each can make in this turn. For example: \n\t\n\t+ `{ Player1: ['Rock', 'Paper', 'Scissors'], Player2: ['Rock', 'Paper', 'Scissors'] }`\n\t\t\n\tIf the game has finished then a _falsy_ value must be returned (`null` is recommended).\n\t*/\n\tmoves: unimplemented(\"Game\", \"moves()\"),\n\n\t/** Once the players have chosen their moves, the method `next` is used to perform the given \n\tmoves. It returns a new game instance with the resulting state. The first `moves` argument \n\tshould be an object with a move for each active player. For example:\n\n\t+ `{ Player1: 'Rock', Player2: 'Paper' }`\n\t\n\tThere isn't a default implementation, so it must be overriden. It is strongly advised to check \n\tif the arguments are valid.\n\t*/\n\tnext: unimplemented(\"Game\", \"next(moves)\"),\n\n\t/** If the game is finished the result of the game is calculated with `result()`. It returns an \n\tobject with every player in the game related to a number. This number must be positive if the \n\tplayer wins, negative if the player loses or zero if the game is a tie. For example:\n\t\n\t+ `{ Player1: -1, Player2: +1 }`\n\t\n\tIf the game is not finished, this function must return a _falsy_ value (`null` is recommended).\n\t*/\n\tresult: unimplemented(\"Game\", \"result()\"),\n\n\t/** Some games may assign scores to the players in a finished game. This may differ from the\n\tresult, since the score sign doesn't have to indicate victory or defeat. For example:\n\t\n\t+ result: `{ Player1: -1, Player2: +1 }`\n\t+ scores: `{ Player1: 14, Player2: 15 }`\n\t\n\tThe method `scores()` returns the scores if such is the case. Also the score may be defined for\n\tunfinished games.\n\t\n\tBy default, it return the same that `result()` does.\n\t*/\n\tscores: function scores() {\n\t\treturn this.results();\n\t},\n\t\n\t/** In incomplete or imperfect information games players have different access to the game state\n\tdata. The method `view(player)` returns a modified version of this game, that shows only the\n\tinformation from the perspective of the given player. The other information is modelled as\n\taleatory variables.\n\t\n\tIn this way searches in the game tree can be performed without revealing to\tthe automatic player \n\tinformation it shouldn't have access to (a.k.a _cheating_).\n\t*/\n\tview: function view(player) {\n\t\treturn this;\n\t},\n\t\n\t// ## Player information #######################################################################\n\n\t/** Method `isActive(player...)` checks if the given players are all active.\n\t*/\n\tisActive: function isActive() {\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tif (this.activePlayers.indexOf(arguments[i]) < 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/** In most games there is only one active player per turn. The method `activePlayer()` returns \n\tthat active player's role if there is one and only one, else it raises an error.\n\t*/\n\tactivePlayer: function activePlayer() {\n\t\tvar len = this.activePlayers.length;\n\t\traiseIf(len < 1, 'There are no active players!');\n\t\traiseIf(len > 1, 'More than one player is active!');\n\t\treturn this.activePlayers[0];\n\t},\n\n\t/** All players in a game are assumed to be opponents. The method `opponents(players=activePlayers)` \n\treturns an array with the opponent roles of the given players, or of the active players by \n\tdefault. If not all players are opponents this method can be overriden.\n\t*/\n\topponents: function opponents(players) {\n\t\tplayers = players || this.activePlayers;\n\t\treturn this.players.filter(function (p) {\n\t\t\treturn players.indexOf(p) < 0;\n\t\t});\n\t},\n\n\t/** Since most games have only two players, the method `opponent(player=activePlayer)`\n\tconveniently returns the opponent of the given player, or the active player by default.\n\t*/\n\topponent: function opponent(player) {\n\t\tvar playerIndex = this.players.indexOf(player || this.activePlayer());\n\t\treturn this.players[(playerIndex + 1) % this.players.length];\n\t},\n\n\t// ## Game flow ################################################################################\n\t\n\t/** Since `next()` expects a moves object, the method `perform(move, player=activePlayer, ...)`\n\tpretends to simplify simpler game mechanics. It performs the given moves for the given players\n\t(activePlayer by default) and returns the next game state.\n\t*/\n\tperform: function perform() {\n\t\tvar moves = {}, player;\n\t\tfor (var i = 0; i < arguments.length; i += 2) {\n\t\t\tplayer = arguments[i + 1];\n\t\t\tif (typeof player === 'undefined') {\n\t\t\t\tplayer = this.activePlayer();\n\t\t\t}\n\t\t\tmoves[player] = arguments[i];\n\t\t}\n\t\treturn this.next(moves);\n\t},\n\n\t/** The method `moves()` returns the available moves for each player. Yet this is not the same\n\tas the `moves` objects that can be used with `next()` to obtain a next game state. Furthermore,\n\tif there are more than one active player per turn, the possible decisions can be build with all\n\tcombinations for all active players.\n\t\n\tThe method `possibleMoves(moves=this.moves())` calculates all possible `moves` objects based on \n\tthe result of `moves()`. For example, if `moves()` returns `{A:[1,2], B:[3,4]}`, then \n\t`possibleMoves()` would return `[{A:1, B:3}, {A:1, B:4}, {A:2, B:3}, {A:2, B:4}]`.\n\t*/\n\tpossibleMoves: function possibleMoves(moves) {\n\t\tmoves = arguments.length < 1 ? this.moves() : moves;\n\t\tif (!moves || typeof moves !== 'object') {\n\t\t\treturn [];\n\t\t}\n\t\tvar activePlayers = Object.keys(moves);\n\t\tif (activePlayers.length === 1) { // Most common case.\n\t\t\tvar activePlayer = activePlayers[0];\n\t\t\treturn moves[activePlayer].map(function (move) {\n\t\t\t\treturn obj(activePlayer, move);\n\t\t\t});\n\t\t} else { // Simultaneous games.\n\t\t\treturn Iterable.product.apply(Iterable, \n\t\t\t\titerable(moves).mapApply(function (player, moves) {\n\t\t\t\t\treturn moves.map(function (move) {\n\t\t\t\t\t\treturn [player, move];\n\t\t\t\t\t});\n\t\t\t\t}).toArray()\n\t\t\t).map(function (playerMoves) {\n\t\t\t\treturn iterable(playerMoves).toObject();\n\t\t\t}).toArray();\n\t\t}\n\t},\n\t\n\t// ## Result functions #########################################################################\n\n\t/** The maximum and minimum results may be useful and even required by some game search \n\talgorithm. To expose these values, `resultBounds()` returns an array with first the minimum and\n\tthen the maximum. Most game have one type of victory (+1) and one type of defeat (-1). That's \n\twhy `resultBounds()` returns [-1,+1] by default. Yet some games can define different bounds by \n\toverriding it.\n\t*/\n\tresultBounds: function resultBounds() {\n\t\treturn [-1,+1];\n\t},\n\t\n\t/** The `normalizedResult(result=this.result())` is the `result()` expressed so the minimum \n\tdefeat is equal to -1 and the maximum victory is equal to +1.\n\t*/\n\tnormalizedResult: function normalizedResult(result) {\n\t\tresult = result || this.result();\n\t\tif (result) {\n\t\t\tvar bounds = this.resultBounds();\n\t\t\tresult = base.copy(result);\n\t\t\tfor (var player in result) {\n\t\t\t\tresult[player] = (result[player] - bounds[0]) / (bounds[1] - bounds[0]) * 2 - 1;\n\t\t\t}\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t},\n\t\n\t/** Most games have victory and defeat results that cancel each other. It is said that all the\n\tvictors wins the defeated player loses. Those games are called _zerosum games_. The method \n\t`zerosumResult(score, players=activePlayers)` builds a game result object for a zerosum game.\n\tThe given score is split between the given players (the active players by default), and (-score)\n\tis split between their opponents.\n\t*/\n\tzerosumResult: function zerosumResult(score, players) {\n\t\tplayers = !players ? this.activePlayers : (!Array.isArray(players) ? [players] : players);\n\t\tscore = (+score) / (players.length || 1);\n\t\tvar result = ({}), player,\n\t\t\topponentScore = -score / (this.players.length - players.length || 1);\n\t\tfor (var i = 0; i < this.players.length; i++) {\n\t\t\tplayer = this.players[i];\n\t\t\tresult[player] = players.indexOf(player) < 0 ? opponentScore : score;\n\t\t}\n\t\treturn result;\n\t},\n\n\t/** There are two shortcuts for `zerosumResult()`. First `victory(players=activePlayers, score=1)`\n\treturns the zero-sum game result with the given players (or the active players by default) as\n\twinners, and their opponents as losers.\n\t*/\n\tvictory: function victory(players, score) {\n\t\treturn this.zerosumResult(score || 1, players);\n\t},\n\n\t/** Second `defeat(players=activePlayers, score=-1)` returns the zero-sum game result with the\n\tgiven players (or the active players by default) as losers, and their opponents as winners.\n\t*/\n\tdefeat: function defeat(players, score) {\n\t\treturn this.zerosumResult(score || -1, players);\n\t},\n\n\t/** Finally `draw(players=this.players, score=0)` returns the game result of a tied game with \n\tthe given players (or the active players by default) all with the same score (zero by default).\n\tA tied game must always have the same result for all players.\n\t*/\n\tdraw: function draw(players, score) {\n\t\tscore = +(score || 0);\n\t\tplayers = players || this.players;\n\t\tvar result = ({});\n\t\tfor (var player in players) {\n\t\t\tresult[players[player]] = score;\n\t\t}\n\t\treturn result;\n\t},\n\n\t// ## Conversions & presentations ##############################################################\n\n\t/** Some algorithms require an `identifier()` for each game state, in order to store them in \n\tcaches or hashes. This method calculates a string that uniquely identifies this game state,\n\tbased on the game's serialization.\n\t*/\n\tidentifier: unimplemented(\"Game\", \"identifier\"),\n\n\t/** Based on the game's serialization, `clone()` creates a copy of this game state.\n\t*/\n\tclone: function clone() {\n\t\treturn Sermat.sermat(this);\n\t},\n\n\t/** The default string representation of a game is equal to the result of `toJSON`.\n\t*/\n\ttoString: function toString() {\n\t\treturn Sermat.ser(this);\n\t},\n\t\t\n\t/** ## Cached games ############################################################################\n\n\tA `cached(game)` has modified `moves()` and `result()` methods that cache the calls of the base\n\tgame. The `next()` method is not cached because it may lead to memory leaks or overload.\n\t*/\n\t'static cached': function cached(game) {\n\t\tvar baseMoves = game.prototype.moves,\n\t\t\tbaseResult = game.prototype.result;\n\t\treturn declare(game, {\n\t\t\t/** The first time `moves()` is called, it is delegated to the base game's `moves()`,\n\t\t\tand keeps the value for future calls.\n\t\t\t*/\n\t\t\tmoves: function moves() {\n\t\t\t\tvar result = baseMoves.call(this);\n\t\t\t\tthis.moves = function cachedMoves() { // Replace moves() method with cached version.\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\t\n\t\t\t/** The first time `result()` is called, it is delegated to the base game's `result()`,\n\t\t\tand keeps the value for future calls.\n\t\t\t*/\n\t\t\tresult: function result() {\n\t\t\t\tvar r = game.result.call(this);\n\t\t\t\tthis.result = function cachedResult() { // Replace result() method with cached version.\n\t\t\t\t\treturn r;\n\t\t\t\t};\n\t\t\t\treturn r;\n\t\t\t}\n\t\t});\n\t}, // static cached\n\n\t\n\t/** ## Serialized simultaneous games. ##########################################################\n\t\n\t`serialized(game)` builds a serialized version of a simultaneous game, i.e. one in which two or\n\tmore players may be active in the same turn. It converts a simultaneous game to an alternated\n\tturn based game. This may be useful for using algorithms like MiniMax to build AIs for\n\tsimultaneous games.\n\t*/\n\t'static serialized': function serialized(game) {\n\t\tvar super_moves = game.prototype.moves,\n\t\t\tsuper_next = game.prototype.next;\n\t\treturn declare(game, {\n\t\t\t/** The `moves()` of a serialized game returns the moves of the player deemed as the\n\t\t\tactive player, if there are any moves.\n\t\t\t*/\n\t\t\tmoves: function moves() {\n\t\t\t\tvar fixedMoves = this.__fixedMoves__ || (this.__fixedMoves__ = {}),\n\t\t\t\t\tallMoves = super_moves.call(this),\n\t\t\t\t\tactivePlayer;\n\t\t\t\tfor (var i = 0; i < this.activePlayers.length; i++) {\n\t\t\t\t\tif (fixedMoves.hasOwnProperty(this.activePlayers[i])) {\n\t\t\t\t\t\tactivePlayer = this.activePlayers[i];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn activePlayer && allMoves ? obj(activePlayer, allMoves[activePlayer]) : null;\n\t\t\t},\n\t\t\n\t\t\t/** The `next(moves)` of a serialized game advances the actual game if with the given\n\t\t\tmove all active players in the real game state have moved. Else the next player that has\n\t\t\tto move becomes active.\n\t\t\t*/\n\t\t\tnext: function next(moves) {\n\t\t\t\tvar nextFixedMoves = copy({}, this.fixedMoves || {}, moves),\n\t\t\t\t\tallMoved = iterable(this.players).all(function (p) {\n\t\t\t\t\t\t\treturn nextFixedMoves.hasOwnProperty(p);\n\t\t\t\t\t\t}),\n\t\t\t\t\tresult;\n\t\t\t\tif (allMoved) {\n\t\t\t\t\tresult = super_next.call(this, nextFixedMoves);\n\t\t\t\t\tresult.fixedMoves = {};\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.clone();\n\t\t\t\t\tresult.fixedMoves = nextFixedMoves;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t} // static serialized\n\t\n}); // declare Game.\n","/** # Player\n\nPlayer is the base type for all playing agents. Basically, playing a game means\nchoosing a move from all available ones, each time the game enables the player \nto do so.\n*/\nvar Player = exports.Player = declare({\n\t/** The default constructor takes only its `name` from the given `params`.\n\tThis is an abstract class that is meant to be extended.\n\t*/\n\tconstructor: (function () {\n\t\tvar __PlayerCount__ = 0; // Used by the Player's default naming.\n\t\treturn function Player(params) {\n\t\t\tinitialize(this, params)\n\t\t\t\t.string('name', { defaultValue: 'Player' + (__PlayerCount__++), coerce: true });\n\t\t};\n\t})(),\n\n\t/** A player is asked to choose a move by calling \n\t`Player.decision(game, role)`. The result is the selected move if it can be \n\tobtained synchronously, else a future is returned.\n\t*/\n\tdecision: function decision(game, role) {\n\t\treturn this.movesFor(game, role)[0]; // Indeed not a very thoughtful base implementation. \n\t},\n\n\t/** To help implement the decision, `Player.movesFor(game, player)` gets\n\tthe moves in the game for the player. It also checks if there are any moves,\n\tand if it not so an error is risen.\n\t*/\n\tmovesFor: function movesFor(game, role) {\n\t\tvar moves = game.moves();\n\t\traiseIf(!moves || !moves[role] || moves[role].length < 1, \n\t\t\t\"Player \", role, \" has no moves for game \", game, \".\");\n\t\treturn moves[role];\n\t},\n\t\n\t/** Before starting a [match](Match.js.html), all players are asked to join\n\tby calling `Player.participate(match, role)`. This allows the player to\n\tprepare properly. If this implies building another instance of the player \n\tobject, it must be returned in order to participate in the match.\n\t*/\n\tparticipate: function participate(match, role) {\n\t\treturn this;\n\t},\n\t\n\t// ## Conversions & presentations #########################################\n\n\t/** Players can also be serialized, pretty much in the same way \n\t[games](Game.html) are. `Player.__serialize__()` returns an array, where the \n\tfirst element should be the name of the game, and the rest the arguments to \n\tcall the player's constructor in order to rebuild this player's state.\n\t*/\n\t__serialize__: function __serialize__() {\n\t\treturn [this.constructor.name, {name: this.name}];\n\t},\n\t\n\t/** The string representation of the player is derived straight from its\n\tserialization.\n\t*/\n\ttoString: function toString() {\n\t\tvar args = this.__serialize__();\n\t\treturn args.shift() +'('+ args.map(JSON.stringify).join(',') +')';\n\t}\n}); // declare Player.\n","/** # Match\n\nA match is a controller for a game, managing player decisions, handling the flow of the turns \nbetween the players by following the game's logic.\n*/\nvar Match = exports.Match = declare({\n\t/** `Match` objects are build with the [game's](Game.html) starting state and the players that \n\tparticipate. The players argument must be either an array of [`Player`](Player.html) objects or \n\tan object with a member for each of the game's players with a Player object as value.\n\t*/\n\tconstructor: function Match(game, players) {\n\t\tthis.game = game;\n\t\tthis.players = Array.isArray(players) ? iterable(game.players).zip(players).toObject() : players;\n\t\t/** The match records the sequence of game state in `Match.history`.\n\t\t*/\n\t\tthis.history = [game];\n\t\tthis.events = new Events({ \n\t\t\tevents: ['begin', 'move', 'next', 'end', 'quit']\n\t\t});\n\t\tfor (var p in this.players) { // Participate the players.\n\t\t\tthis.players[p] = this.players[p].participate(this, p) || this.players[p];\n\t\t}\n\t},\n\n\t/** Each step in the match's history is called a ply. `Match.ply()` indicates the current ply \n\tnumber.\n\t*/\n\tply: function ply() {\n\t\treturn this.history.length - 1;\n\t},\n\t\n\t/** Each ply has a game state. `Match.state(ply=last)` retrieves the game state for the given \n\tply, or the last one by default.\n\t*/\n\tstate: function state(ply) {\n\t\tply = isNaN(ply) ? this.ply() : +ply < 0 ? this.ply() + (+ply) : +ply;\n\t\treturn this.history[ply | 0];\n\t},\n\n\t/** If the last game state is finished, then the whole match is finished. If so, \n\t`Match.result()` returns the match result, which is the result of the last game state.\n\t*/\n\tresult: function result() {\n\t\treturn this.state().result();\n\t},\n\n\t/** If the last game state is not finished, then the match continues. To move the play on, \n\t`Match.decisions(game=state())` asks the active players in the game to choose their moves. \n\tReturns a future that is resolved when all players have decided.\n\t*/\n\tdecisions: function decisions(game) {\n\t\tgame = game || this.state();\n\t\tvar match = this,\n\t\t\tplayers = this.players,\n\t\t\tactivePlayers = game.activePlayers;\n\t\treturn Future.all(activePlayers.map(function (p) {\n\t\t\treturn players[p].decision(game.view(p), p);\n\t\t})).then(function (decisions) {\n\t\t\tvar moves = iterable(activePlayers).zip(decisions).toObject();\n\t\t\tmatch.onMove(game, moves);\n\t\t\treturn moves;\n\t\t});\n\t},\n\n\t/** `Match.run(plys=Infinity)` runs the match the given number of plys, or until the game \n\tfinishes. The result is a future that gets resolved when the game ends.\n\t*/\n\trun: function run(plys) {\n\t\tplys = isNaN(plys) ? Infinity : +plys;\n\t\tif (plys < 1) { // If the run must stop...\n\t\t\treturn Future.when(this);\n\t\t}\n\t\tvar ply = this.ply(), game = this.state(), results, next;\n\t\tif (ply < 1) {\n\t\t\tthis.onBegin(game);\n\t\t}\n\t\tgame = this.__advanceContingents__(game); // Remove all non-determinism.\n\t\tresults = game.result();\n\t\tif (results) { // If the match has finished ...\n\t\t\tthis.onEnd(game, results);\n\t\t\treturn Future.when(this);\n\t\t} else { // Else the run must continue ...\n\t\t\tvar match = this;\n\t\t\treturn this.decisions(game).then(function (moves) {\n\t\t\t\tif (match.__advance__(game, moves)) {\n\t\t\t\t\treturn match.run(plys - 1);\n\t\t\t\t} else {\n\t\t\t\t\treturn match;\n\t\t\t\t}\t\t\t\t\n\t\t\t});\n\t\t}\n\t},\n\t\n\t__advanceContingents__: function __advanceContingents__(game, moves) {\n\t\tfor (var next; game.isContingent; game = next) {\n\t\t\tnext = game.randomNext();\n\t\t\tthis.history.push(next);\n\t\t\tthis.onNext(game, next);\n\t\t}\n\t\treturn game;\n\t},\n\t\n\t__advance__: function __advance__(game, moves) {\n\t\tvar match = this,\n\t\t\tquitters = game.activePlayers.filter(function (p) {\n\t\t\t\treturn moves[p].__command__ === 'quit';\n\t\t\t});\n\t\tif (quitters.length > 0) {\n\t\t\tmatch.onQuit(game, quitters[0]);\n\t\t\treturn false;\n\t\t}\n\t\tvar next = game.next(moves); // Match must go on.\n\t\tthis.history.push(next);\n\t\tthis.onNext(game, next);\n\t\treturn true;\n\t},\n\t\n\t/** ## Commands ################################################################################\n\t\n\tCommands are pseudo-moves, which can be returned by the players instead of valid moves for the \n\tgame being played. Their intent is to control the match itself.\n\t\n\tThe available commands are:\n\t*/\n\t\n\t/** + `quit`: A quit command means the player that issued it is leaving the match. The match is \n\tthen aborted.\n\t*/\n\t\"static COMMAND_QUIT\": { __command__: 'quit' },\n\t\n\t/** ## Events ##################################################################################\n\t\n\tMatches provide game events that players and spectators can be registered to. `Match.events` is \n\tthe event handler. Emitted events are:\n\t*/\n\t\n\t/** + The `begin` event fired by `Match.onBegin(game)` when the match begins. The callbacks \n\tshould have the signature `function (game, match)`.\n\t*/\n\tonBegin: function onBegin(game) {\n\t\tthis.events.emit('begin', game, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match begins with ', iterable(this.players).map(function (attr) {\n\t\t\t\treturn attr[1] +' as '+ attr[0];\n\t\t\t}).join(', '), '; for ', game, '.');\n\t\t}\n\t},\n\t\n\t/** + The `move` event fired by `Match.onMove(game, moves)` every time the active players make \n\tmoves. The callbacks should have the signature `function (game, moves, match)`.\n\t*/\n\tonMove: function onMove(game, moves) {\n\t\tthis.events.emit('move', game, moves, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Players move: ', JSON.stringify(moves), ' in ', game);\n\t\t}\n\t},\n\t\n\t/** + The `next` event fired by `Match.onNext(game, next)` signals when the match advances to \n\tthe next game state. This may be due to moves or aleatory instantiation. The callbacks should \n\thave the signature `function (gameBefore, gameAfter, match)`.\n\t*/\n\tonNext: function onNext(game, next) {\n\t\tthis.events.emit('next', game, next, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match advances from ', game, ' to ', next);\n\t\t}\n\t},\n\t\n\t/** + The `end` event triggered by `Match.onEnd(game, results)` notifies when the match ends. \n\tThe callbacks should have the signature `function (game, result, match)`.\n\t*/\n\tonEnd: function onEnd(game, results) {\n\t\tthis.events.emit('end', game, results, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match for ', game, 'ends with ', JSON.stringify(results));\n\t\t}\n\t},\n\t\n\t/** + The `quit` event triggered by `Match.onQuit(game, player)` is emitted when the match is \n\taborted due to the given player leaving it. The callbacks should have the signature \n\t`function (game, quitter, match)`.\n\t*/\n\tonQuit: function onQuit(game, player) {\n\t\tthis.events.emit('quit', game, player, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match for ', game, ' aborted because player '+ player +' quitted.');\n\t\t}\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\ttoString: function toString() {\n\t\treturn 'Match('+ this.game +', '+ JSON.stringify(this.players) +')';\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Match',\n\t\tserializer: function serialize_Match(obj) {\n\t\t\treturn [obj.game, obj.players, obj.history];\n\t\t},\n\t\tmaterializer: function materialize_Match(obj, args) {\n\t\t\tif (args) {\n\t\t\t\tvar match = new Match(args[0], args[1]);\n\t\t\t\tmatch.history = args[2];\n\t\t\t\treturn match;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n}); // declare Match.\n","/** # Contingent\r\n\r\nContingent states are game states that depend on other factors that the players choices. They are\r\nused to represent randomness in non-deterministic games. The random variables (called `haps`) can\r\nbe dice, card decks, roulettes, etc.\r\n*/\r\nvar Contingent = exports.Contingent = declare({\r\n\t/** Flag to distinguish contingent states from normal game states.\r\n\t*/\r\n\tisContingent: true,\r\n\t\r\n\t/** The default implementation takes a set of `haps`, a game `state` and a set of `moves`. See\r\n\tthe `next` method for further details.\r\n\t*/\r\n\tconstructor: function Contingent(haps, state, moves) {\r\n\t\tif (haps) {\r\n\t\t\tthis.__haps__ = haps;\r\n\t\t}\r\n\t\tif (state) {\r\n\t\t\tthis.__state__ = state;\r\n\t\t}\r\n\t\tif (moves) {\r\n\t\t\tthis.__moves__ = moves;\r\n\t\t}\r\n\t},\r\n\t\r\n\t/** A contingent state's `haps` are the equivalent of `moves` in normal game states. The method \r\n\treturns an object with the random variables on which this node depends, e.g.: \r\n\t`{ die: aleatories.dice.D6 }`.\r\n\t*/\r\n\thaps: function haps() {\r\n\t\treturn this.__haps__;\r\n\t},\r\n\t\r\n\t/** Contingent game states' `next` states depend on the `haps` provided, e.g. `{die1: 4, die2: 2}`.\r\n\tIf values for the `haps` are not provided, they are resolved randonmly (using `randomHaps()`).\r\n\t\r\n\tBy default this method can have two possible behaviours. If the contingent state was created \r\n\twith `moves`, the previous `state`'s `next` method is called with these `moves` and the `haps`.\r\n\tElse, it is assumed that the game state constructor will deal with the haps. So it is called\r\n\twith the original arguments of the state and the `haps`.\r\n\t*/\r\n\tnext: function next(haps) {\r\n\t\tvar state = this.__state__;\r\n\t\tif (this.__moves__) {\r\n\t\t\treturn state.next(this.__moves__, haps || this.randomHaps());\r\n\t\t} else {\r\n\t\t\tvar sermatRecord = Sermat.record(state.constructor),\r\n\t\t\t\targs = sermatRecord.serializer(state)[0];\r\n\t\t\treturn sermatRecord.materializer(null, [copy(haps, args)]);\r\n\t\t}\r\n\t},\r\n\t\r\n\t/** Method `randomHaps` calculates a random set of haps.\r\n\t*/\r\n\trandomHaps: function randomHaps(random) {\r\n\t\treturn iterable(this.haps()).mapApply(function (n, h) {\r\n\t\t\treturn [n, h.value(random)];\r\n\t\t}).toObject();\r\n\t},\r\n\t\r\n\t/** A `randomNext` picks one of the next states at random.\r\n\t*/\r\n\trandomNext: function randomNext(random) {\r\n\t\treturn this.next(this.randomHaps(random));\r\n\t},\r\n\t\r\n\t/** The method `possibleHaps` is analogous to `Game.possibleMoves`. It calculates all possible \r\n\tcombinations of haps.\r\n\t*/\r\n\tpossibleHaps: function possibleHaps() {\r\n\t\treturn Iterable.product.apply(Iterable,\r\n\t\t\titerable(this.haps()).mapApply(function (n, hap) {\r\n\t\t\t\treturn hap.distribution().mapApply(function (v, p) {\r\n\t\t\t\t\treturn [n, v, p];\r\n\t\t\t\t});\r\n\t\t\t}).toArray()\r\n\t\t).map(function (haps) {\r\n\t\t\tvar prob = 1;\r\n\t\t\treturn [iterable(haps).mapApply(function (n, v, p) {\r\n\t\t\t\tprob *= p;\r\n\t\t\t\treturn [n, v];\r\n\t\t\t}).toObject(), prob];\r\n\t\t}).toArray();\r\n\t},\r\n\t\r\n\t// ## Utilities ################################################################################\r\n\t\r\n\t'static __SERMAT__': {\r\n\t\tidentifier: 'Contingent',\r\n\t\tserializer: function serialize_Contingent(obj) {\r\n\t\t\treturn [obj.__haps__ || null, obj.__state__ || null, obj.__moves__ || null];\r\n\t\t}\r\n\t}\r\n});","/** # Tournament\n\nA tournament is a set of matches played between many players. The whole contest \nranks the participants according to the result of the matches. This is an \nabstract base class for many different types of contests.\n*/\nvar Tournament = exports.Tournament = declare({\n\tconstructor: function Tournament(game, players) {\n\t\t/** The tournament always has one [`game`](Game.html) state from which \n\t\tall matches start.\n\t\t*/\n\t\tthis.game = game;\n\t\t/** All the [`players`](Player.html) involved in the tournament must be\n\t\tprovided to the constructor in an array.\n\t\t*/\n\t\tthis.players = Array.isArray(players) ? players : iterables.iterable(players).toArray();\n\t\tthis.statistics = new Statistics();\n\t\tthis.events = new Events({ \n\t\t\tevents: ['begin', 'beforeMatch', 'afterMatch', 'end']\n\t\t});\n\t},\n\n\t/** The next match to be played is determined by `__advance__`, which \n\treturns a match instance, or null if the tournament has finished. It is not \n\timplemented in this base class. \n\t*/\n\t__advance__: unimplemented(\"Tournament\", \"__advance__\"),\n\t\n\t/** `Tournament.run()` plays all the tournament's matches. Since running a \n\tmatch is asynchronous, running a tournament is too. Hence the result is \n\talways a future, which will be resolved when all matches have been played.\n\t*/\n\trun: function run() {\n\t\tthis.onBegin();\n\t\tvar tournament = this;\n\t\treturn Future.doWhile(function () {\n\t\t\treturn Future.then(tournament.__advance__(), function (match) {\n\t\t\t\tif (match) {\n\t\t\t\t\ttournament.beforeMatch(match);\n\t\t\t\t\treturn tournament.__runMatch__(match).then(function (match) {\n\t\t\t\t\t\ttournament.account(match);\n\t\t\t\t\t\ttournament.afterMatch(match);\n\t\t\t\t\t\treturn match;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t});\n\t\t}).then(this.onEnd.bind(this));\n\t},\n\t\n\t/** The method `__runMatch__` runs a match. It is present so it can be \n\toverridden, to implement some specific behaviour of the contest.\n\t*/\n\t__runMatch__: function __runMatch__(match) {\n\t\treturn match.run();\n\t},\n\t\n\t/** Tournaments gather information from the played matches using their\n\t`statistics` property (instance of `creatartis-base.Statistics`). The method \n\t`Tournament.account(match)` is called to accounts the results of each \n\tfinished match for the players' score.\n\t\n\tThe match results are gathered in the `results` key. The keys `victories`,\n\t`defeats` and `draws` count each result type. The length of each game is\n\trecorded under `length`. The move count at each ply is aggregated under\n\t`width`. All these numbers are open by game, role, player.\n\t*/\n\taccount: function account(match) {\n\t\tvar game = this.game,\n\t\t\tresults = match.result(), \n\t\t\tisDraw = false,\n\t\t\tstats = this.statistics;\n\t\traiseIf(!results, \"Match doesn't have results. Has it finished?\");\n\t\titerable(match.players).forEach(function (p) { // Player statistics.\n\t\t\tvar role = p[0],\n\t\t\t\tplayer = p[1],\n\t\t\t\tplayerResult = results[p[0]];\n\t\t\tstats.add({key:'results', game:game.name, role:role, player:player.name}, \n\t\t\t\tplayerResult);\n\t\t\tstats.add({key:(playerResult > 0 ? 'victories' : playerResult < 0 ? 'defeats' : 'draws'),\n\t\t\t\tgame:game.name, role:role, player:player.name}, playerResult);\n\t\t\tstats.add({key:'length', game:game.name, role:role, player:player.name}, \n\t\t\t\tmatch.ply()); //FIXME This may not be accurate if the game has random variables.\n\t\t\tmatch.history.forEach(function (entry) {\n\t\t\t\tif (typeof entry.moves === 'function') {\n\t\t\t\t\tvar moves = entry.moves();\t\n\t\t\t\t\tif (moves && moves.hasOwnProperty(role) && moves[role].length > 0) {\n\t\t\t\t\t\tstats.add({key:'width', game:game.name, role:role, player:player.name}, \n\t\t\t\t\t\t\tmoves[role].length);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** ## Events #############################################################\n\t\n\tTournaments provide events to enable further analysis and control over it. \n\t`Tournament.events` is the event handler. The emitted events are:\n\t*/\n\t\n\t/** + The `begin` event fired by `Tournament.onBegin()` when the whole \n\tcontest begins. The callbacks should have the signature \n\t`function (tournament)`.\n\t*/\t\n\tonBegin: function onBegin() {\n\t\tthis.events.emit('begin', this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Tournament begins for game ', game.name, '.');\n\t\t}\n\t},\n\t\n\t/** + The `beforeMatch` event triggered by `Tournament.beforeMatch(match)` \n\tjust before starting a match. The callbacks should have the signature \n\t`function (match, tournament)`.\n\t*/\n\tbeforeMatch: function beforeMatch(match) {\n\t\tthis.events.emit('beforeMatch', match, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.debug('Beginning match with ', JSON.stringify(match.players), '.');\n\t\t}\n\t},\n\t\n\t/** + The `afterMatch` event triggered by `Tournament.afterMatch(match)` \n\tjust after a match ends. The callbacks should have the signature \n\t`function (match, tournament)`.\n\t*/\n\tafterMatch: function afterMatch(match) {\n\t\tthis.events.emit('afterMatch', match, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.debug('Finishing match with ', JSON.stringify(match.players), '.');\n\t\t}\n\t},\n\t\n\t/** + The `end` event triggered by `Tournament.onEnd()` when the whole \n\tcontest is completed. The callbacks should have the signature \n\t`function (statistics, tournament)`.\n\t*/\n\tonEnd: function onEnd() {\n\t\tthis.events.emit('end', this.statistics, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Tournament ends for game ', game.name, ':\\n', this.statistics, '\\n');\n\t\t}\n\t}\n}); // declare Tournament\n","/** # Checkerboard\n\nBase class for checkerboards representations based on several different data structures.\n*/\nvar Checkerboard = utils.Checkerboard = declare({\n\t/** The base constructor only sets the board dimensions: `height` and `width`.\n\t*/\n\tconstructor: function Checkerboard(height, width) {\n\t\tif (!isNaN(height)) {\n\t\t\tthis.height = height|0;\n\t\t}\n\t\tif (!isNaN(width)) {\n\t\t\tthis.width = width|0;\n\t\t}\n\t},\n\t\n\t/** The value for empty squares is `emptySquare`. This will be used in functions walking and \n\ttraversing the board. \n\t*/\n\temptySquare: null,\n\t\n\t// ## Board information ########################################################################\n\t\n\t/** All coordinates are represented by `[row, column]` arrays. To check if a coordinate is \n\tinside the board, use `isValidCoord(coord)`.\n\t*/\n\tisValidCoord: function isValidCoord(coord) {\n\t\treturn Array.isArray(coord) && !isNaN(coord[0]) && !isNaN(coord[1])\t&& \n\t\t\tcoord[0] >= 0 && coord[0] < this.height && \n\t\t\tcoord[1] >= 0 && coord[1] < this.width;\n\t},\n\t\n\t/** Method `coordinates()` returns the sequence of the board's valid positions; first by row \n\tthen by column.\n\t*/\n\tcoordinates: function coordinates() {\n\t\treturn Iterable.range(this.height).product(Iterable.range(this.width));\n\t},\n\t\n\t/** Method `square(coord, outside)` should get the contents at a given coordinate. If the \n\tcoordinate is off the board, `outside` must be returned. This method is abstract so it must be \n\toverriden in subclasses.\n\t*/\n\tsquare: unimplemented('utils.Checkerboard', 'square'),\n\t\n\t/** A square is assumed to be empty when its value is equal to `emptySquare`.\n\t*/\n\tisEmptySquare: function isEmptySquare(coord) {\n\t\treturn this.square(coord) === this.emptySquare;\n\t},\n\t\n\t// ### Lines ###################################################################################\n\t\n\t/** Many games must deal with line configurations of pieces. The following methods help with \n\tthis kind of logic. Each line is a sequence of coordinates in the board.\n\t\n\t+ `horizontals()`: All the horizontal lines (rows).\n\t*/\n\thorizontals: function horizontals() {\n\t\tvar width = this.width;\n\t\treturn Iterable.range(this.height).map(function (row) {\n\t\t\treturn Iterable.range(width).map(function (column) {\n\t\t\t\treturn [row, column];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** \n\t+ `verticals()`: All the vertical lines (columns).\n\t*/\n\tverticals: function verticals() {\n\t\tvar height = this.height;\n\t\treturn Iterable.range(this.width).map(function (column) {\n\t\t\treturn Iterable.range(height).map(function (row) {\n\t\t\t\treturn [row, column];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** \n\t+ `orthogonals()`: All the horizontal (rows) and vertical lines (columns) in the board.\n\t*/\n\torthogonals: function orthogonals() {\n\t\treturn this.horizontals().chain(this.verticals());\n\t},\n\t\n\t/**\n\t+ `positiveDiagonals()`: All the positive diagonals lines (those where row = k + column).\n\t*/\n\tpositiveDiagonals: function positiveDiagonals() {\n\t\tvar width = this.width, \n\t\t\theight = this.height, \n\t\t\tcount = height + width - 1;\n\t\treturn Iterable.range(count).map(function (i) {\n\t\t\tvar row = Math.max(0, height - i - 1),\n\t\t\t\tcolumn = Math.max(0, i - height + 1);\n\t\t\treturn Iterable.range(Math.min(i + 1, count - i)).map(function (j) {\n\t\t\t\treturn [row + j, column + j];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** \n\t+ `negativeDiagonals()`: All the negative diagonals lines (those where row = k - column).\n\t*/\n\tnegativeDiagonals: function negativeDiagonals() {\n\t\tvar width = this.width, \n\t\t\theight = this.height, \n\t\t\tcount = height + width - 1;\n\t\treturn Iterable.range(count).map(function (i) {\n\t\t\tvar row = Math.min(i, height - 1),\n\t\t\t\tcolumn = Math.max(0, i - height + 1);\n\t\t\treturn Iterable.range(Math.min(i + 1, count - i)).map(function (j) {\n\t\t\t\treturn [row - j, column + j];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/**\n\t+ `diagonals()`: All the diagonal lines in the board.\n\t*/\n\tdiagonals: function diagonals() {\n\t\treturn this.positiveDiagonals().chain(this.negativeDiagonals());\n\t},\n\t\n\t/**\n\t+ `lines()`: All the horizontal, vertical and diagonal lines in the board.\n\t*/\n\tlines: function lines() {\n\t\treturn this.orthogonals().chain(this.diagonals());\n\t},\n\t\n\t/** The previous methods return the whole lines. Some times the game logic demands checking \n\tlines of a certain length. These are sublines, and can be calculated by \n\t`sublines(lines, length)`. It obviously filters lines which are shorter than length.\n\t*/\n\tsublines: function sublines(lines, length) {\n\t\treturn iterable(lines).map(function (line) {\n\t\t\treturn Array.isArray(line) ? line : iterable(line).toArray();\n\t\t}, function (line) {\n\t\t\treturn line.length >= length;\n\t\t}).map(function (line) {\n\t\t\treturn Iterable.range(0, line.length - length + 1).map(function (i) {\n\t\t\t\treturn line.slice(i, i + length);\n\t\t\t});\n\t\t}).flatten();\n\t},\n\t\n\t// ### Walks ###################################################################################\n\t\n\t/** A walk is a sequence of coordinates in the board that start at a given point and advances in\n\ta certain direction. The `walk(coord, delta)` method returns an iterable with coordinates from \n\t`coord` and on, adding `delta`'s row and column until going off the board.\n\t*/\n\twalk: function walk(coord, delta) {\n\t\tvar board = this;\n\t\treturn new Iterable(function __iter__() {\n\t\t\tvar current = coord.slice();\n\t\t\treturn function __walkIterator__() {\n\t\t\t\tif (board.isValidCoord(current)) {\n\t\t\t\t\tvar result = current.slice();\n\t\t\t\t\tcurrent[0] += delta[0];\n\t\t\t\t\tcurrent[1] += delta[1];\n\t\t\t\t\treturn result;\n\t\t\t\t} else {\n\t\t\t\t\tthrow Iterable.STOP_ITERATION;\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t},\n\t\n\t/** Convenient method `walks(coord, deltas)` can be used to get many walks from the same origin.\n\t*/\n\twalks: function walks(coord, deltas) {\n\t\tvar board = this;\n\t\treturn deltas.map(function (delta) {\n\t\t\treturn board.walk(coord, delta);\n\t\t});\n\t},\n\t\n\t/** Frequently used deltas for walks are available at `DIRECTIONS`.\n\t*/\n\t\"static DIRECTIONS\": {\n\t\tHORIZONTAL: [[0,-1], [0,+1]],\n\t\tVERTICAL: [[-1,0], [+1,0]], \n\t\tORTHOGONAL: [[0,-1], [0,+1], [-1,0], [+1,0]],\n\t\tDIAGONAL: [[-1,-1], [-1,+1], [+1,-1], [+1,+1]],\n\t\tEVERY: [[0,-1], [0,+1], [-1,0], [+1,0], [-1,-1], [-1,+1], [+1,-1], [+1,+1]]\n\t},\n\t\n\t// ## Board modification #######################################################################\n\t\n\t/** Game states must not be modifiable, else game search algorithms may fail or be extremely \n\tcomplicated. Then, all board altering method in `Checkerboard` must return a new board instance \n\tand leave this instance unspoiled.\n\t\n\tMost board modification functions have two versions: one which actually modifies the board state\n\tand another which returns a modified copy. This is meant to optimize chains of board \n\talterations. To get a copy of this board, the `clone` method can be used.\n\t*/\n\tclone: unimplemented('utils.Checkerboard', 'clone'),\n\t\n\t/** The first function to change the board is `place(coord, value)`. It places the value at the \n\tgiven coordinate, replacing whatever was there.\n\t\n\tThe `__place__` version modifies this board, and is not implemented in the base class. It should\n\treturn this instance, to enable chaining.\n\t*/\n\t__place__: unimplemented('utils.Checkerboard', 'place'),\n\t\n\tplace: function place(coord, value) {\n\t\treturn this.clone().__place__(coord, value);\n\t},\n\n\t/** Another usual operation is `move(coordFrom, coordTo, valueLeft)`. It moves the contents at \n\t`coordFrom` to `coordTo`. Whatever is at `coordTo` gets replaced, and `valueLeft` is placed at\n\t`coordFrom`. If `valueLeft` is undefined, `emptySquare` is used.\n\t*/\n\t__move__: function __move__(coordFrom, coordTo, valueLeft) {\n\t\treturn this.__place__(coordTo, this.square(coordFrom))\n\t\t\t.__place__(coordFrom, typeof valueLeft === 'undefined' ? this.emptySquare : valueLeft);\n\t},\n\t\n\tmove: function move(coordFrom, coordTo, valueLeft) {\n\t\treturn this.clone().__move__(coordFrom, coordTo, valueLeft);\n\t},\n\t\n\t/** The next board operation is `swap(coordFrom, coordTo)`, which moves the contents at \n\t`coordFrom` to `coordTo`, and viceversa.\n\t*/\n\t__swap__: function __swap__(coordFrom, coordTo) {\n\t\tvar valueTo = this.square(coordTo);\n\t\treturn this.__place__(coordTo, this.square(coordFrom))\n\t\t\t.__place__(coordFrom, valueTo);\n\t},\n\t\n\tswap: function swap(coordFrom, coordTo) {\n\t\treturn this.clone().__swap__(coordFrom, coordTo);\n\t},\n\t\n\t// ## Whole board operations ###################################################################\n\t\n\t/** The `transform` builds a new board mapping coordinates of this board with the given\n\tfunction.\n\t*/\n\ttransform: function transform(coordinateMapping) {\n\t\tvar result = this.clone(),\n\t\t\tboard = this;\n\t\tthis.coordinates().forEach(function (position) {\n\t\t\tvar newPosition = coordinateMapping.apply(board, [board, position].concat(position));\n\t\t\tresult.__place__(newPosition, board.square(position));\n\t\t});\n\t\treturn result;\n\t},\n\t\n\t/** Symmetries transform the whole board at once. The `horizontalSymmetry` of the board flips it \n\twith a vertical axis at its center, while the `verticalSymmetry` flips it with an horizontal \n\taxis.\n\t*/\n\thorizontalSymmetry: function horizontalSymmetry() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [row, board.width - column - 1];\n\t\t});\n\t},\n\t\n\tverticalSymmetry: function verticalSymmetry() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [board.height - row - 1, column];\n\t\t});\n\t},\n\t\n\t/** Rotations also transform the whole board at once. The `clockwiseRotation` of the board \n\trotates in the direction that the hands of a clock, while the `counterClockwiseRotation` rotates\n\tit in the opposite direction.\n\t*/\n\tclockwiseRotation: function clockwiseRotation() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [column, board.height - row - 1];\n\t\t});\n\t},\n\t\n\tcounterClockwiseRotation: function counterClockwiseRotation() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [board.width - column - 1, row];\n\t\t});\n\t},\n\t\n\t// ## Board presentation. ######################################################################\n\t\n\t/** Board games' user interfaces may be implemented using HTML & CSS. This is the case of \n\tLudorum's playtesters.\n\t*/\n\trenderAsHTMLTable: function (document, container, callback) {\n\t\tvar board = this, // for closures.\n\t\t\ttable = document.createElement('table');\n\t\tcontainer.appendChild(table);\n\t\tboard.horizontals().reverse().forEach(function (line) {\n\t\t\tvar tr = document.createElement('tr');\n\t\t\ttable.appendChild(tr);\n\t\t\tline.forEach(function (coord) {\n\t\t\t\tvar square = board.square(coord),\n\t\t\t\t\ttd = document.createElement('td'),\n\t\t\t\t\tdata = {\n\t\t\t\t\t\tid: \"ludorum-square-\"+ coord.join('-'),\n\t\t\t\t\t\tclassName: \"ludorum-square\",\n\t\t\t\t\t\tsquare: square,\n\t\t\t\t\t\tcoord: coord,\n\t\t\t\t\t\tinnerHTML: base.Text.escapeXML(square)\n\t\t\t\t\t};\n\t\t\t\tif (callback) {\n\t\t\t\t\tdata = callback(data) || data;\n\t\t\t\t}\n\t\t\t\ttd['ludorum-data'] = data;\n\t\t\t\ttd.id = data.id;\n\t\t\t\ttd.className = data.className;\n\t\t\t\ttd.innerHTML = data.innerHTML;\n\t\t\t\tif (data.onclick) {\n\t\t\t\t\ttd.onclick = data.onclick;\n\t\t\t\t}\n\t\t\t\ttr.appendChild(td);\n\t\t\t});\n\t\t});\n\t\treturn table;\n\t},\n\t\n\t// ## Heuristics ###############################################################################\n\t\n\t/** A `weightedSum` is an simple way of defining an heuristic. Every position in the board is \n\tassigned a weight, and every possible value is assigned a coefficients (usually player is 1, \n\topponent is -1, else is 0).\n\t\n\tWeights have to be in the same order that `coordinates()` enumerates the board's positions. This\n\tfunction assumes the weights are normalized and sufficient to cover the whole board.\n\t*/\n\tweightedSum: function weightedSum(weights, coefficients) {\n\t\tvar board = this;\n\t\treturn this.coordinates().zip(weights).mapApply(function (coord, weight) {\n\t\t\treturn coefficients[board.square(coord)] * weight || 0;\n\t\t}).sum();\n\t}\n}); //// declare utils.Checkerboard.\n","/** # CheckerboardFromString\n\n[`Checkerboard`](Checkerboard.html) implementation represented by a simple string (one character per \nsquare).\n*/\nvar CheckerboardFromString = utils.CheckerboardFromString = declare(Checkerboard, {\n\t/** The constructor takes `height`, `width`, the whole board content in a `string`, and \n\toptionally the empty square character.\n\t*/\n\tconstructor: function CheckerboardFromString(height, width, string, emptySquare) {\n\t\tCheckerboard.call(this, height, width);\n\t\tif (emptySquare && emptySquare !== this.emptySquare) {\n\t\t\tthis.emptySquare = (emptySquare +'').charAt(0);\n\t\t}\n\t\tif (string && string.length !== height * width) {\n\t\t\tthrow new Error('Given string '+ JSON.stringify(string) +' does not match board dimensions.');\n\t\t}\n\t\tthis.string = string || this.emptySquare.repeat(height * width);\n\t},\n\t\n\t/** The `emptySquare` in `CheckerboardFromString` is `'.'` by default.\n\t*/\n\temptySquare: '.',\t\n\t\n\t/** The default string conversion of `CheckerboardFromString` prints the board one line by row, \n\tlast row on top.\n\t*/\n\ttoString: function toString() {\n\t\tvar string = this.string, height = this.height, width = this.width;\n\t\treturn Iterable.range(height).map(function (i) {\n\t\t\treturn string.substr((height - i - 1) * width, width);\n\t\t}).join('\\n');\n\t},\n\t\n\t// ## Board information ########################################################################\n\t\n\t/** The `square(coord, outside)` return the character at `(row * width + column)` if the \n\tcoordinate is inside the board. Else returns `outside`.\n\t*/\n\tsquare: function square(coord, outside) {\n\t\tvar row = coord[0], \n\t\t\tcolumn = coord[1],\n\t\t\twidth = this.width;\n\t\tif (row >= 0 && row < this.height && column >= 0 && column < width) {\n\t\t\treturn this.string.charAt(row * width + column);\n\t\t} else {\n\t\t\treturn outside;\n\t\t}\n\t},\n\t\n\t// ### Lines ###################################################################################\n\t\n\t/** Since square contents in `CheckerboardFromString` are just characters, lines can be thought \n\tas strings. The method `asString(line)` takes an iterable of coordinates and returns a string of \n\tthe characters found at each point in the sequence.\n\t*/\n\tasString: function asString(line) {\n\t\tvar board = this;\n\t\treturn line.map(function (coord) {\n\t\t\treturn board.square(coord);\n\t\t}).join('');\n\t},\n\t\n\t/** The method `asStrings(lines)` can be used to easily map `asString(line)` to a sequence of \n\tlines, like the one calculated by `lines()`.\n\t*/\n\tasStrings: function asStrings(lines) {\n\t\tvar board = this;\n\t\treturn lines.map(function (line) {\n\t\t\treturn board.asString(line);\n\t\t});\n\t},\n\t\n\t/** Many games based on board configurations (like connection games) have patterns that can be \n\texpressed with regular expressions. The method `asRegExp(line, insideLine, outsideLine)` takes a \n\tline (iterable of coordinates) and returns a string with a regular expression. This may be used \n\tto tests the whole board string for the line.\n\t\n\t_Warning!_ Both `insideLine` and `outsideLine` must be simple regular expressions (e.g. a \n\tcharacter or atom). If more complex expressions are required they must be provided between \n\tparenthesis.\n\t*/\n\tasRegExp: function asRegExp(line, insideLine, outsideLine) {\n\t\toutsideLine = outsideLine || '.';\n\t\tvar width = this.width,\n\t\t\tsquares = Iterable.repeat(false, width * this.height).toArray();\n\t\tline.forEach(function (coord) {\n\t\t\tsquares[coord[0] * width + coord[1]] = true;\n\t\t});\n\t\tvar result = '', count = 0, current;\n\t\tfor (var i = 0; i < squares.length; count = 0) {\n\t\t\tcurrent = squares[i];\n\t\t\tdo {\n\t\t\t\t++count;\n\t\t\t} while (++i < squares.length && squares[i] === current);\n\t\t\tif (count < 2) {\n\t\t\t\tresult += current ? insideLine : outsideLine;\n\t\t\t} else {\n\t\t\t\tresult += (current ? insideLine : outsideLine) +'{'+ count +'}';\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\t\n\t/** The method `asRegExps(lines)` can be used to easily map `asRegExp(line)` to a sequence of \n\tlines. All regular expressions are joined as a union (`|`). Use with caution, because the whole \n\tregular expression can get very big even with small boards.\n\t*/\n\tasRegExps: function asRegExps(lines, insideLine, outsideLine) {\n\t\tvar board = this;\n\t\treturn lines.map(function (line) {\n\t\t\treturn board.asRegExp(line, insideLine, outsideLine);\n\t\t}).join('|');\n\t},\n\t\n\t// ## Board modification #######################################################################\n\t\n\t/** Cloning a CheckerboardFromString simply calls the constructor again with the proper \n\targuments to replicate this instance.\n\t*/\n\tclone: function clone() {\n\t\treturn new this.constructor(this.height, this.width, this.string, \n\t\t\tthis.hasOwnProperty('emptySquare') ? this.emptySquare : undefined);\n\t},\n\t\n\t/** A `place(coord, value)` means only changing one character in the underlying string. The \n\t`value` must be a character, and `coord` a point inside the board.\n\t*/\n\t__place__: function __place__(coord, value) {\n\t\traiseIf(!this.isValidCoord(coord), \"Invalid coordinate \", coord, \".\");\n\t\tvalue = (value + this.emptySquare).charAt(0);\n\t\tvar i = coord[0] * this.width + coord[1];\n\t\tthis.string = this.string.substr(0, i) + value + this.string.substr(i + 1);\n\t\treturn this;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'CheckerboardFromString',\n\t\tserializer: function serialize_CheckerboardFromString(obj) {\n\t\t\tvar r = [obj.height, obj.width, obj.string];\n\t\t\tif (obj.hasOwnProperty('emptySquare')) {\n\t\t\t\tr.push(obj.emptySquare);\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\t}\n}); // declare utils.CheckerboardFromString","/** # Checkerboard from pieces\n\n[`Checkerboard`](Checkerboard.html) implementation represented by a list of pieces (objects) with a\nlocation in the board.\n*/\nvar CheckerboardFromPieces = utils.CheckerboardFromPieces = declare(Checkerboard, {\n\t/** The constructor takes `height`, `width`, a list of piece objects and optionally the empty \n\tsquare object. The piece objects must have a property `position`. Only one piece is allowed at\n\teach square.\n\t*/\n\tconstructor: function CheckerboardFromPieces(height, width, pieces, emptySquare) {\n\t\tCheckerboard.call(this, height, width);\n\t\tvar board = this;\n\t\tif (emptySquare !== this.emptySquare) {\n\t\t\tthis.emptySquare = emptySquare;\n\t\t}\n\t\tif (Array.isArray(pieces)) {\n\t\t\tthis.pieces = {}; \n\t\t\titerable(pieces || []).forEach(function (piece) {\n\t\t\t\traiseIf(!Array.isArray(piece.position), \"Piece has not a position (\", piece, \")!\");\n\t\t\t\tboard.pieces[piece.position +''] = piece;\n\t\t\t});\n\t\t} else if (typeof pieces === 'object') {\n\t\t\tthis.pieces = base.copy({}, pieces);\n\t\t} else {\n\t\t\traise(\"Invalid pieces definition: \", pieces, \"!\");\n\t\t}\n\t},\n\t\n\t/** The `emptySquare` in `CheckerboardFromPieces` is `null` by default.\n\t*/\n\temptySquare: null,\t\n\t\n\t/** The default string conversion of `CheckerboardFromPieces` prints the piece list.\n\t*/\n\ttoString: function toString() {\n\t\treturn '['+ iterable(this.pieces).select(1).join(', ') +']';\n\t},\n\t\n\t// ## Board information ########################################################################\n\t\n\t/** The `square(coord, outside)` return the piece object at the given `coord` if there is one \n\tand the coordinate is inside the board. Else returns `outside`.\n\t*/\n\tsquare: function square(coord, outside) {\n\t\treturn this.pieces[coord] || outside;\n\t},\n\t\n\t// ## Board modification #######################################################################\n\t\n\t/** Cloning a `CheckerboardFromPieces` simply calls the constructor again with the proper \n\targuments to replicate this instance. The `pieces` object is copied _shallowly_ by the \n\tconstructor.\n\t*/\n\tclone: function clone() {\n\t\treturn new this.constructor(this.height, this.width, this.pieces, this.emptySquare);\n\t},\n\t\n\t/** A `place(coord, value)` means removing any existing piece at the given `coord` and adding \n\tthe `value` piece if given.\n\t*/\n\t__place__: function __place__(coord, value) {\n\t\traiseIf(!this.isValidCoord(coord), \"Invalid coordinate \", coord, \"!\");\n\t\tvar id = coord +'';\n\t\tdelete this.pieces[id];\n\t\tif (value) {\n\t\t\tthis.pieces[id] = value;\n\t\t}\n\t\treturn this;\n\t}\n}); // declare utils.CheckerboardFromPieces\n","/** # Scanner\n\nComponent for scanning a game's tree.\n*/\nexports.utils.Scanner = declare({\n\t/** A Scanner builds a sample of a game tree, in order to get statistics \n\tfrom some of all possible matches. The given `config` must have:\n\t*/\n\tconstructor: function Scanner(config) {\n\t\tinitialize(this, config)\n\t\t// + `game`: Game to scan.\n\t\t\t.object(\"game\", { ignore: true })\n\t\t// + `maxWidth=1000`: Maximum amount of game states held at each step.\n\t\t\t.integer(\"maxWidth\", { defaultValue: 1000, coerce: true })\n\t\t// + `maxLength=50`: Maximum length of simulated matches.\n\t\t\t.integer(\"maxLength\", { defaultValue: 50, coerce: true })\n\t\t// + `random=randomness.DEFAULT`: Pseudorandom number generator to use in the simulations.\n\t\t\t.object(\"random\", { defaultValue: Randomness.DEFAULT })\n\t\t// + `statistics=`: Component to gather relevant statistics.\n\t\t\t.object(\"statistics\", { defaultValue: new Statistics() });\n\t},\n\t\n\t/** A scan of a game's tree reproduces and samples the set of all possible \n\tmatches from the given game states. The simulation halts at `maxLength` \n\tplies, and never holds more than `maxWidth` game states. Since this process\n\tis asynchronous, this method returns a future.\n\t\n\tThe `players` argument may provide a player for some or all of the games' \n\troles. If available, they will be used to decide which move is applied to \n\teach game state. If missing, all next game states will be added. Ergo no \n\tplayers means a simulation off all possible matches.\t\t\n\t*/\n\tscan: function scan(players) {\n\t\tvar scanner = this,\n\t\t\twindow = arguments.length < 2 ? (this.game ? [this.game] : []) : Array.prototype.slice.call(arguments, 1),\n\t\t\tply = 0; \n\t\treturn Future.whileDo(function () {\n\t\t\treturn window.length > 0 && ply < scanner.maxLength;\n\t\t}, function () {\n\t\t\treturn Future.all(window.map(function (game) {\n\t\t\t\treturn scanner.__advance__(players, game, ply);\n\t\t\t})).then(function (level) {\n\t\t\t\twindow = iterable(level).flatten().sample(scanner.maxWidth, scanner.random).toArray();\n\t\t\t\treturn ++ply;\n\t\t\t});\n\t\t}).then(function () {\n\t\t\tscanner.statistics.add({ key:'aborted' }, window.length);\n\t\t\treturn scanner.statistics;\n\t\t});\n\t},\n\t\n\t/** Performs scans for many different player setups.\n\t*/\n\tscans: function scans() {\n\t\treturn Future.sequence(Array.prototype.slice.call(arguments), this.scan.bind(this));\n\t},\n\t\n\t/** The `__advance__` method advances the given game by one ply. This may \n\tmean for non final game states either instantiate random variables, ask the \n\tavailable player for a decision, or take all next game states. Final game \n\tstates are removed. \n\t\n\tAll game states are accounted in the scanner's statistics. The result is an \n\titerable with the game states to add to the next scan window.\n\t*/\n\t__advance__: function __advance__(players, game, ply) {\n\t\tif (game instanceof Aleatory) {\n\t\t\treturn iterable(game.distribution()).mapApply(function (value, prob) {\n\t\t\t\treturn game.next(value);\n\t\t\t});\n\t\t} else if (this.account(players, game, ply)) {\n\t\t\treturn Iterable.EMPTY;\n\t\t} else {\n\t\t\tvar scanner = this,\n\t\t\t\tmoves = game.moves(),\n\t\t\t\tstats = this.statistics;\n\t\t\treturn Future.all(game.activePlayers.map(function (role) {\n\t\t\t\tif (players && players[role]) {\n\t\t\t\t\tvar p = players[role],\n\t\t\t\t\t\tdecisionTime = stats.stat({key:'decision.time', game: game.name, role: role, player: p.name});\n\t\t\t\t\tdecisionTime.startTime();\n\t\t\t\t\treturn Future.when(p.decision(game, role)).then(function (move) {\n\t\t\t\t\t\tdecisionTime.addTime();\n\t\t\t\t\t\treturn [[role, move]];\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn moves[role].map(function (move) {\n\t\t\t\t\t\treturn [role, move];\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})).then(function (decisions) {\n\t\t\t\treturn Iterable.product.apply(Iterable, decisions).map(function (moves) {\n\t\t\t\t\treturn game.next(iterable(moves).toObject());\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t},\n\t\t\t\n\t/** The `account` method gathers statistics about the game. These include:\n\t\t\n\t+ `game.result`: Final game state results. Also available for victory and defeat.\n\t+ `game.length`: Match length in plies. Also available for victory and defeat.\n\t+ `game.width`: Number of available moves.\n\t+ `draw.length`: Drawn match length in plies.\n\t\n\tReturns whether the given game state is final or not.\n\t*/\n\taccount: function account(players, game, ply) {\n\t\tvar result = game.result(),\n\t\t\tstats = this.statistics;\n\t\tif (result) {\n\t\t\titerable(game.players).forEach(function (role) {\n\t\t\t\tvar r = result[role],\n\t\t\t\t\tp = (players && players[role]) ? players[role].name : '',\n\t\t\t\t\tkeys = ['game:'+ game.name, 'role:'+ role, 'player:'+ p];\n\t\t\t\tstats.add({key:'game.result', game:game.name, role:role, player:p}, r, game);\n\t\t\t\tstats.add({key:'game.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\tif (r < 0) {\n\t\t\t\t\tstats.add({key:'defeat.result', game:game.name, role:role, player:p}, r, game);\n\t\t\t\t\tstats.add({key:'defeat.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\t} else if (r > 0) {\n\t\t\t\t\tstats.add({key:'victory.result', game:game.name, role:role, player:p}, r, game);\n\t\t\t\t\tstats.add({key:'victory.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\t} else {\n\t\t\t\t\tstats.add({key:'draw.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn true;\n\t\t} else {\n\t\t\tvar moves = game.moves();\n\t\t\titerable(game.activePlayers).forEach(function (role) {\n\t\t\t\tstats.add({key:'game.width', game:game.name, role:role}, moves[role].length);\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\t}\n}); // Scanner.\n","/** # Cache\n\nA game cache contains a part of a game tree, avoiding redundancies. It can be\nused to implement a [transposition table](http://en.wikipedia.org/wiki/Transposition_table) \nor similar data structures.\n*/\nutils.Cache = declare({\n\t/** The `Cache` constructor may take a game to define as `root`.\n\t*/\n\tconstructor: function Cache(game) {\n\t\tthis.clear();\n\t\tif (game) {\n\t\t\tthis.root(game);\n\t\t}\n\t},\n\t\n\t/** The `stateIdentifier(state)` of every game state is used as the key in \n\tthe cache's entries. By default is calculated with the `Game.identifier()`\n\tmethod.\n\t*/\n\tstateIdentifier: function stateIdentifier(state) {\n\t\treturn state.identifier();\n\t},\n\t\n\t/** The `moveIdentifier(move)` is used as the key in each entry's \n\tdescendants. By default it uses the move JSON _stringification_.\n\t*/\n\tmoveIdentifier: function moveIdentifier(move) {\n\t\treturn JSON.stringify(move);\n\t},\n\t\n\t/** The `has(state|id)` returns if the given state or state identifier has \n\tan entry in this cache.\n\t*/\n\thas: function has(state) {\n\t\tvar stateId = typeof state === 'string' ? state : this.stateIdentifier(state);\n\t\treturn this.__entries__.hasOwnProperty(stateId);\n\t},\n\t\n\t/** If the given state or state identifier has en entry in this cache, \n\t`get(state)` returns that entry. Else it returns `undefined`.\n\t*/\n\tget: function get(state) {\n\t\tvar stateId = typeof state === 'string' ? state : this.stateIdentifier(state);\n\t\treturn this.__entries__[stateId];\n\t},\n\t\n\t/** `size()` returns the amount of entries in this cache.\n\t*/\n\tsize: function size() {\n\t\treturn Object.keys(this.__entries__).length;\n\t},\n\t\n\t/** If the given state has no entry in this cache, `entry(state, id)` builds\n\ta new entry, adds it to this cache and returns it. If the state is already\n\tcached, its entry is returned.\n\tEvery entry has the game `state`, its `id`, the states that may come before\n\t(the `precursors`) and the states that may follow (the `descendants`).\n\t*/\n\tentry: function entry(state, id) {\n\t\tid = id || this.stateIdentifier(state);\n\t\tif (this.has(id)) {\n\t\t\treturn this.get(id);\n\t\t} else {\n\t\t\tvar _entry = { id: id, state: state, precursors: [], descendants: {} };\n\t\t\tthis.__entries__[id] = _entry;\n\t\t\treturn _entry;\n\t\t}\n\t},\n\t\n\t/** An entry's `descendant(entry, moves)` is the entry of the game state \n\tfollowing the given entry's game state with the given moves. The method not\n\tonly returns the entry is this state, it creates and caches that entry if \n\tnot present.\n\t*/\n\tdescendant: function descendant(entry, moves) {\n\t\tvar movesId = this.moveIdentifier(moves),\n\t\t\tdescendants = entry.descendants;\n\t\tif (descendants.hasOwnProperty(movesId)) { // Already expanded.\n\t\t\treturn descendants[movesId][1];\n\t\t} else {\n\t\t\tvar nextState = entry.state.next(moves),\n\t\t\t\tnextStateId = this.stateIdentifier(nextState),\n\t\t\t\tnextEntry = this.get(nextStateId) || // Reuse entry in cache if it exists.\n\t\t\t\t\tthis.entry(nextState, nextStateId); // Else add new entry.\n\t\t\tdescendants[movesId] = [moves, nextEntry];\n\t\t\tnextEntry.precursors.push([moves, entry]);\n\t\t\treturn nextEntry;\n\t\t}\n\t},\n\t\n\t/** An entry `descendants(entry)` is an array of all the entry's \n\tdescendants, for all the possible moves for the entry's state.\n\t*/\n\tdescendants: function descendants(entry) {\n\t\tvar descendant = this.descendant.bind(this, entry);\n\t\tif (arguments.length > 1) {\n\t\t\treturn Array.prototype.slice.call(arguments, 1).map(descendant);\n\t\t} else { // if (arguments.length == 0)\n\t\t\treturn entry.state.possibleMoves().map(descendant);\n\t\t}\n\t},\n\t\n\t/** A clear cache has no entries and of course no root.\n\t*/\n\tclear: function clear() {\n\t\tthis.__entries__ = {};\n\t\tthis.__root__ = null;\n\t},\n\t\n\t/** If `root()` is called without arguments, it returns the current root.\n\tIf a state is given, that state is assigned as the new root, and the whole\n\tcache is pruned.\n\t*/\n\troot: function root(state) {\n\t\tif (arguments.length > 0) { // Called with argument means setter.\n\t\t\tvar stateId = this.stateIdentifier(state);\n\t\t\tthis.__root__ = this.get(stateId) || this.entry(state, stateId);\n\t\t\tthis.prune(stateId);\n\t\t}\n\t\treturn this.__root__;\n\t},\n\t\n\t/** `prune(id=root.id)` deletes all nodes except the one with the given id \n\tand its descendants.\n\t*/\n\tprune: function prune(id) {\n\t\tvar pending = [id || this.__root__.id], \n\t\t\tpruned = {},\n\t\t\tentry;\n\t\twhile (id = pending.shift()) {\n\t\t\tif (!pruned.hasOwnProperty(id)) {\n\t\t\t\tentry = this.get(id);\n\t\t\t\tpruned[id] = entry;\n\t\t\t\tpending.push.apply(pending, iterable(entry.descendants).mapApply(function (id, pair) {\n\t\t\t\t\treturn pair[1][id];\n\t\t\t\t}).toArray());\n\t\t\t}\n\t\t}\n\t\treturn this.__entries__ = pruned;\n\t}\t\n}); // declare Cache\n","/** # Game tree\r\n\r\nA data structure to help building game trees, i.e. trees in which each node is a game state, the\r\nfinal states are leaves and each child node belongs to one of the next states of its parent.\r\n*/\r\nvar GameTree = declare({\r\n\t/** Each instance represents a node in the game tree. The `parent` must be null or undefined at\r\n\tthe root. The given `transition` is either the moves or the aleatory values used to move from \r\n\tthe parent's state to this node's state. They also must be null or undefined at the root.\r\n\t*/\r\n\tconstructor: function GameTree(parent, state, transition) {\r\n\t\tthis.parent = parent;\r\n\t\tthis.state = state;\r\n\t\tthis.transition = transition;\r\n\t\tthis.children = {};\r\n\t},\r\n\t\r\n\t/** This node's `children` are stored in an object, hence getting the count is a little tricky.\r\n\t*/\r\n\tchildrenCount: function childrenCount() {\r\n\t\treturn Object.keys(this.children).length;\r\n\t},\r\n\t\r\n\t/** In the `children` object nodes are stored with a serialization of their transitions as keys.\r\n\tBy default the JSON _\"strinigification\"_ is used.\r\n\t*/\r\n\t__childSerialization__: function __childSerialization__(moves) {\r\n\t\treturn JSON.stringify(moves);\r\n\t},\r\n\t\r\n\t/** A node expansion takes the `moves` to calculate the next state and creates the child node\r\n\twith it. If the node already exists, it is returned and none is created.\r\n\t*/\r\n\texpand: function expand(transition) {\r\n\t\tvar key = this.__childSerialization__(transition),\r\n\t\t\tchild = this.children[key], nextState;\r\n\t\tif (!child) {\r\n\t\t\ttry {\r\n\t\t\t\tnextState = this.state.next(transition); \r\n\t\t\t} catch (err) {\r\n\t\t\t\traise(\"Node expansion for \", this.state, \" with \", JSON.stringify(transition),\r\n\t\t\t\t\t\" failed with: \", err);\r\n\t\t\t}\r\n\t\t\tchild = new this.constructor(this, nextState, transition);\r\n\t\t\tthis.children[key] = child;\r\n\t\t}\r\n\t\treturn child;\r\n\t},\r\n\t\r\n\t/** Returns the possible moves is the state is an instance of Game, or the possible values if\r\n\tthe state is an instance of Aleatory.\r\n\t*/\r\n\tpossibleTransitions: function possibleTransitions() {\r\n\t\tvar state = this.state;\r\n\t\tif (state.isContingent) {\r\n\t\t\treturn state.possibleHaps();\r\n\t\t} else {\r\n\t\t\treturn state.possibleMoves();\r\n\t\t}\r\n\t},\r\n\t\r\n\t/** A full expansion creates all child nodes for this node.\r\n\t*/\r\n\texpandAll: function expandAll() {\r\n\t\tvar node = this;\r\n\t\treturn this.possibleTransitions().map(function (transition) {\r\n\t\t\treturn node.expand(// An array as transition means it belongs to a contingent state\r\n\t\t\t\tArray.isArray(transition) ? transition[0] : transition);\r\n\t\t});\r\n\t}\r\n}); // declare GameTree","/** # RandomPlayer\n\nAutomatic players that moves fully randomly.\n*/\t\nplayers.RandomPlayer = declare(Player, {\n\t/** The constructor takes the player's `name` and a `random` number \n\tgenerator (`base.Randomness.DEFAULT` by default).\n\t*/\n\tconstructor: function RandomPlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT });\n\t},\n\n\t/** The `decision(game, player)` is made completely at random.\n\t*/\n\tdecision: function(game, player) {\n\t\treturn this.random.choice(this.movesFor(game, player));\n\t}\n}); // declare RandomPlayer.\n","/** # TracePlayer\n\nAutomatic player that is scripted previously.\n*/\nplayers.TracePlayer = declare(Player, {\n\t/** The constructor takes the player's `name` and the `trace` as an \n\tsequence of moves to make.\n\t*/\n\tconstructor: function TracePlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tthis.trace = iterable(params.trace);\n\t\tthis.__iter__ = this.trace.__iter__();\n\t\tthis.__decision__ = this.__iter__();\n\t},\n\n\t/** The `decision(game, player)` returns the next move in the trace, or the \n\tlast one if the trace has ended.\n\t*/\n\tdecision: function(game, player) {\n\t\ttry {\n\t\t\tthis.__decision__ = this.__iter__();\n\t\t} catch (err) {\n\t\t\tIterable.prototype.catchStop(err);\n\t\t}\n\t\treturn this.__decision__;\n\t},\n\t\n\t__serialize__: function __serialize__() {\n\t\treturn ['TracePlayer', { name: this.name, trace: this.trace.toArray() }];\n\t}\n}); // declare TracePlayer.\n","/** # HeuristicPlayer\n\nThis is the base type of automatic players based on heuristic evaluations of game states or moves.\n*/\nvar HeuristicPlayer = players.HeuristicPlayer = declare(Player, {\n\t/** The constructor takes the player's `name` and a `random` number generator \n\t(`base.Randomness.DEFAULT` by default). Many heuristic can be based on randomness, but this is \n\talso necessary to chose between moves with the same evaluation without any bias.\n\t*/\n\tconstructor: function HeuristicPlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT })\n\t\t\t.func('heuristic', { ignore: true });\n\t},\n\n\t/** An `HeuristicPlayer` choses the best moves at any given game state. For this purpose it \n\tevaluates every move with `moveEvaluation(move, game, player)`. By default this function \n\tevaluates the states resulting from making each move, which is the most common thing to do.\n\t*/\n\tmoveEvaluation: function moveEvaluation(move, game, player) {\n\t\tvar heuristicPlayer = this;\n\t\tif (Object.keys(move).length < 2) { // One active player.\n\t\t\treturn this.stateEvaluation(game.next(move), player);\n\t\t} else { // Many active players.\n\t\t\tvar sum = 0, count = 0;\n\t\t\tmove = copy(obj(player, [move[player]]), move);\n\t\t\tgame.possibleMoves(move).forEach(function (ms) {\n\t\t\t\tsum += heuristicPlayer.stateEvaluation(game.next(ms), player);\n\t\t\t\t++count;\n\t\t\t});\n\t\t\treturn count > 0 ? sum / count : 0; // Average all evaluations.\n\t\t}\n\t},\n\n\t/** The `stateEvaluation(game, player)` calculates a number as the assessment of the given game \n\tstate for the given player. The base implementation returns the result for the player is the \n\tgame has results, else it returns the heuristic value for the state.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\tvar gameResult = game.result();\n\t\treturn gameResult ? gameResult[player] : this.heuristic(game, player);\n\t},\n\n\t/** The `heuristic(game, player)` is an evaluation used at states that are not finished games. \n\tThe default implementation returns a random number in [-0.5, 0.5). This is only useful in \n\ttesting. Any serious use should redefine this.\n\t*/\n\theuristic: function heuristic(game, player) {\n\t\treturn this.random.random(-0.5, 0.5);\n\t},\n\t\n\t/**TODO WIP\n\t*/\n\tevaluatedMoves: function evaluatedMoves(game, player) {\n\t\tvar heuristicPlayer = this,\n\t\t\tisAsync = false;\n\t\tif (!game.isContingent) {\n\t\t\t/** Every move is evaluated using `moveEvaluation`. This may be asynchronous and hence\n\t\t\tresult in a `Future`.\n\t\t\t*/\n\t\t\tvar result = this.possibleMoves(game, player).map(function (move) {\n\t\t\t\tvar e = heuristicPlayer.moveEvaluation(move, game, player);\n\t\t\t\tisAsync = isAsync || Future.__isFuture__(e);\n\t\t\t\treturn Future.then(e, function (e) {\n\t\t\t\t\treturn [move, e];\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn isAsync ? Future.all(result) : result;\n\t\t} else {\n\t\t\t/** Contingent game states don't have moves. Hence all posible haps are explored, and\n\t\t\twhen a non-contingent game state is reached the moves are evaluated.\n\t\t\t*/\n\t\t\tvar posible = iterable(game.possibleHaps()).mapApply(function (haps, prob) {\n\t\t\t\tvar es = heuristicPlayer.evaluatedMoves(game.next(haps), player);\n\t\t\t\tisAsync = isAsync || Future.__isFuture__(es);\n\t\t\t\treturn Future.then(es, function (es) {\n\t\t\t\t\treturn es.map(function (e) {\n\t\t\t\t\t\te[1] *= prob; // Multiply the evaluation by the probability of the haps.\n\t\t\t\t\t\treturn e;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t\t/** After all posible scenarios have been evaluated, group the evaluations by move and\n\t\t\tsum the evaluations weighted by probability.\n\t\t\t*/\n\t\t\treturn Future.then(isAsync ? Future.all(posible) : posible, function (posible) {\n\t\t\t\treturn iterable(posible).groupBy(function (p) {\n\t\t\t\t\treturn p[0]; // Group evaluations by move.\n\t\t\t\t}).mapApply(function (move, evals) {\n\t\t\t\t\treturn [move, iterable(evals).select(1).sum()];\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}, // evaluatedMoves()\n\t\n\t/** TODO WIP\n\t*/\n\tpossibleMoves: function possibleMoves(game, player) {\n\t\tvar moves = game.moves();\n\t\traiseIf(!moves || !moves[player] || !Array.isArray(moves[player]) || moves[player].length < 1,\n\t\t\t\"Player \"+ player +\" has no moves in \"+ game +\" (moves= \"+ moves +\")!\");\n\t\treturn iterable(moves[player]).map(function (move) {\n\t\t\treturn copy(obj(player, move), moves);\n\t\t});\n\t},\n\t\n\t/** The `bestMoves(evaluatedMoves)` are all the best evaluated in the given sequence of tuples \n\t[move, evaluation].\n\t*/\n\tbestMoves: function bestMoves(evaluatedMoves) {\n\t\treturn Future.then(iterable(evaluatedMoves), function (evaluatedMoves) {\n\t\t\treturn evaluatedMoves.greater(function (pair) {\n\t\t\t\treturn pair[1];\n\t\t\t}).map(function (pair) {\n\t\t\t\treturn pair[0];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** The `decision(game, player)` selects randomly from the best evaluated moves.\n\t*/\n\tdecision: function decision(game, player) {\n\t\tvar random = this.random;\n\t\treturn Future.then(this.bestMoves(this.evaluatedMoves(game, player)), function (bestMoves) {\n\t\t\tbestMoves = iterable(bestMoves).toArray();\n\t\t\traiseIf(!bestMoves || !bestMoves.length, \n\t\t\t\t\"No moves where selected at \", game, \" for player \", player, \"!\");\n\t\t\treturn random.choice(bestMoves)[player];\n\t\t});\n\t},\n\t\n\t// ## Utilities to build heuristics ############################################################\n\t\n\t/** A `composite` heuristic function returns the weighted sum of other functions. The arguments \n\tmust be a sequence of heuristic functions and a weight. All weights must be between 0 and 1 and\n\tadd up to 1.\n\t*/\n\t'static composite': function composite() {\n\t\tvar components = Array.prototype.slice.call(arguments), weightSum = 0;\n\t\traiseIf(components.length < 1,\n\t\t\t\"HeuristicPlayer.composite() cannot take an odd number of arguments!\");\n\t\tfor (var i = 0; i < components.length; i += 2) {\n\t\t\traiseIf(typeof components[i] !== 'function', \n\t\t\t\t\"HeuristicPlayer.composite() argument \", i, \" (\", components[i], \") is not a function!\");\n\t\t\tcomponents[i+1] = +components[i+1];\n\t\t\traiseIf(isNaN(components[i+1]) || components[i+1] < 0 || components[i+1] > 1, \n\t\t\t\t\"HeuristicPlayer.composite() argument \", i+1, \" (\", components[i+1], \") is not a valid weight!\");\n\t\t}\n\t\treturn function compositeHeuristic(game, player) {\n\t\t\tvar sum = 0;\n\t\t\tfor (var i = 0; i+1 < components.length; i += 2) {\n\t\t\t\tsum += components[i](game, player) * components[i+1];\n\t\t\t}\n\t\t\treturn sum;\n\t\t};\n\t}\n}); // declare HeuristicPlayer.","/** # MaxNPlayer\n\nAutomatic players based on the MaxN algorithm, a MiniMax variant for games of\nmore than two players.\n*/\nvar MaxNPlayer = players.MaxNPlayer = declare(HeuristicPlayer, {\n\t/** Besides the parameters of every [`HeuristicPlayer`](HeuristicPlayer.js.html),\n\tan `horizon` for the search may be specified (3 plies by default).\n\t*/\n\tconstructor: function MaxNPlayer(params) {\n\t\tHeuristicPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.integer('horizon', { defaultValue: 3, coerce: true });\n\t},\n\n\t/** This player evaluates each state using the `maxn` method, taking the \n\tevaluation for the given `player`.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\treturn this.maxN(game, player, 0)[player];\n\t},\n\n\t/** `heuristics(game)` returns an heuristic value for each players in the \n\tgame, as an object.\n\t*/\n\theuristics: function heuristic(game) {\n\t\tvar result = {}, maxN = this;\n\t\tgame.players.forEach(function (role) {\n\t\t\tresult[role] = maxN.heuristic(game, role);\n\t\t});\n\t\treturn result;\n\t},\n\n\t/** `quiescence(game, player, depth)` is a stability test for the given \n\t`game` state and the given `player`. If the game is quiescent, this function\n\tmust return evaluations. Else it must return null. \n\t\n\tFinal game states are always quiescent, and their evaluations are the game's \n\tresult for each player. This default implementation also returns heuristic \n\tevaluations for every game state at a deeper depth than the player's \n\thorizon, calculated via the `heuristics()` method. \n\t*/\n\tquiescence: function quiescence(game, player, depth) {\n\t\tvar results = game.result();\n\t\tif (results) {\n\t\t\treturn results;\n\t\t} else if (depth >= this.horizon) {\n\t\t\treturn this.heuristics(game);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t},\n\t\n\t/** The core `maxN(game, player, depth)` algorithm return the evaluations \n\tfor each player of the given game, assuming each player tries to maximize \n\tits own evaluation regardless of the others'.\n\t*/\n\tmaxN: function maxN(game, player, depth) {\n\t\tvar values = this.quiescence(game, player, depth);\n\t\tif (!values) { // game is not quiescent.\n\t\t\tvar activePlayer = game.activePlayer(),\n\t\t\t\tmoves = this.movesFor(game, activePlayer),\n\t\t\t\totherValues, next;\n\t\t\tvalues = {};\n\t\t\tif (moves.length < 1) {\n\t\t\t\tthrow new Error('No moves for unfinished game '+ game +'.');\n\t\t\t}\n\t\t\tfor (var i = 0; i < moves.length; ++i) {\n\t\t\t\tnext = game.next(obj(activePlayer, moves[i]));\n\t\t\t\totherValues = this.maxN(next, player, depth + 1);\n\t\t\t\tif (otherValues[activePlayer] > (values[activePlayer] || -Infinity)) {\n\t\t\t\t\tvalues = otherValues;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn values;\n\t},\n\t\n\ttoString: function toString() {\n\t\treturn (this.constructor.name || 'MaxNPlayer') +'('+ JSON.stringify({\n\t\t\tname: this.name, horizon: this.horizon\n\t\t}) +')';\n\t}\n}); // declare MiniMaxPlayer.\n","/** # MiniMaxPlayer\n\nAutomatic players based on pure MiniMax.\n*/\nvar MiniMaxPlayer = players.MiniMaxPlayer = declare(HeuristicPlayer, {\n\t/** The constructor takes the player's `name` and the MiniMax search's \n\t`horizon` (`4` by default).\n\t*/\n\tconstructor: function MiniMaxPlayer(params) {\n\t\tHeuristicPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.integer('horizon', { defaultValue: 4, coerce: true });\n\t},\n\n\t/** Every state's evaluation is the minimax value for the given game and \n\tplayer.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\treturn this.minimax(game, player, 0);\n\t},\n\n\t/** The `quiescence(game, player, depth)` method is a stability test for the \n\tgiven game state. If the game is quiescent, this function must return an \n\tevaluation. Else it must return NaN or an equivalent value. \n\t\n\tFinal game states are always quiescent, and their evaluation is the game's\n\tresult for the given player. This default implementation also return an \n\theuristic evaluation for every game state at a deeper depth than the \n\tplayer's horizon.\n\t*/\n\tquiescence: function quiescence(game, player, depth) {\n\t\tvar results = game.result();\n\t\tif (results) {\n\t\t\treturn results[player];\n\t\t} else if (depth >= this.horizon) {\n\t\t\treturn this.heuristic(game, player);\n\t\t} else {\n\t\t\treturn NaN;\n\t\t}\n\t},\n\t\n\t/** The `minimax(game, player, depth)` method calculates the Minimax \n\tevaluation of the given game for the given player. If the game is not \n\tfinished and the depth is greater than the horizon, `heuristic` is used.\n\t*/\n\tminimax: function minimax(game, player, depth) {\n\t\tvar value = this.quiescence(game, player, depth);\n\t\tif (isNaN(value)) { // game is not quiescent.\n\t\t\tvar activePlayer = game.activePlayer(),\n\t\t\t\tmoves = this.movesFor(game, activePlayer), \n\t\t\t\tcomparison, next;\n\t\t\tif (moves.length < 1) {\n\t\t\t\tthrow new Error('No moves for unfinished game '+ game +'.');\n\t\t\t}\n\t\t\tif (activePlayer == player) {\n\t\t\t\tvalue = -Infinity;\n\t\t\t\tcomparison = Math.max;\n\t\t\t} else {\n\t\t\t\tvalue = +Infinity;\n\t\t\t\tcomparison = Math.min;\n\t\t\t}\n\t\t\tfor (var i = 0; i < moves.length; ++i) {\n\t\t\t\tnext = game.next(obj(activePlayer, moves[i]));\n\t\t\t\tvalue = comparison(value, this.minimax(next, player, depth + 1));\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\t\n\ttoString: function toString() {\n\t\treturn (this.constructor.name || 'MiniMaxPlayer') +'('+ JSON.stringify({\n\t\t\tname: this.name, horizon: this.horizon\n\t\t}) +')';\n\t}\n}); // declare MiniMaxPlayer.\n","/** # AlphaBetaPlayer\n\nAutomatic players based on MiniMax with alfa-beta pruning.\n*/\nplayers.AlphaBetaPlayer = declare(MiniMaxPlayer, {\n\t/** The constructor does not add anything to the parent\n\t[`MiniMaxPlayer`](MiniMaxPlayer.js.html) constructor.\n\t*/\n\tconstructor: function AlphaBetaPlayer(params) {\n\t\tMiniMaxPlayer.call(this, params);\n\t},\n\n\t/** Every state's evaluation is the minimax value for the given game and \n\tplayer. The alfa an beta arguments are initialized with `-Infinity` and\n\t`Infinity`.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\treturn this.minimax(game, player, 0, -Infinity, Infinity);\n\t},\n\n\t/** The `minimax(game, player, depth, alfa, beta)` method calculates the \n\tMinimax evaluation of the given game for the given player. If the game is \n\tnot finished and the depth is greater than the horizon, the heuristic is\n\tused.\n\t*/\n\tminimax: function minimax(game, player, depth, alpha, beta) {\n\t\tvar value = this.quiescence(game, player, depth);\n\t\tif (!isNaN(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tvar activePlayer = game.activePlayer(),\n\t\t\tisActive = activePlayer == player,\n\t\t\tmoves = this.movesFor(game, activePlayer), next;\n\t\tif (moves.length < 1) {\n\t\t\tthrow new Error('No moves for unfinished game '+ game +'.');\n\t\t}\n\t\tfor (var i = 0; i < moves.length; i++) {\n\t\t\tnext = game.next(obj(activePlayer, moves[i]));\n\t\t\tvalue = this.minimax(next, player, depth + 1, alpha, beta);\n\t\t\tif (isActive) {\n\t\t\t\tif (alpha < value) { // MAX\n\t\t\t\t\talpha = value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (beta > value) { // MIN\n\t\t\t\t\tbeta = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (beta <= alpha) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn isActive ? alpha : beta;\n\t}\n}); // declare AlphaBetaPlayer.\n","/** # MonteCarloPlayer\n\nAutomatic player based on flat Monte Carlo tree search.\n*/\nvar MonteCarloPlayer = players.MonteCarloPlayer = declare(HeuristicPlayer, {\n\t/** The constructor builds a player that chooses its moves using the \n\t[flat Monte Carlo game tree search method](http://en.wikipedia.org/wiki/Monte-Carlo_tree_search). \n\tThe parameters may include:\n\t\n\t+ `simulationCount=30`: Maximum amount of simulations performed for each \n\t\tavailable move at each decision.\n\t+ `timeCap=1000ms`: Time limit for the player to decide.\n\t+ `horizon=500`: Maximum amount of moves performed in simulations.\n\t+ `agent`: Player instance used in the simulations. If undefined moves are\n\t\tchosen at random. Agents with asynchronous decisions are not supported.\n\t*/\n\tconstructor: function MonteCarloPlayer(params) {\n\t\tHeuristicPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.number('simulationCount', { defaultValue: 30, coerce: true })\n\t\t\t.number('timeCap', { defaultValue: 1000, coerce: true })\n\t\t\t.number('horizon', { defaultValue: 500, coerce: true });\n\t\tif (params) switch (typeof params.agent) {\n\t\t\tcase 'function': this.agent = new HeuristicPlayer({ heuristic: params.agent }); break;\n\t\t\tcase 'object': this.agent = params.agent; break;\n\t\t\tdefault: this.agent = null;\n\t\t}\n\t},\n\t\n\t/** `selectMoves(moves, game, player)` return an array with the best \n\tevaluated moves.\n\t*/\n\tselectMoves: function selectMoves(moves, game, player) {\n\t\tvar monteCarloPlayer = this,\n\t\t\tendTime = Date.now() + this.timeCap,\n\t\t\tgameNext = game.next.bind(game),\n\t\t\toptions = moves.map(function (move) {\n\t\t\t\treturn { \n\t\t\t\t\tmove: move, \n\t\t\t\t\tnexts: (Object.keys(move).length < 2 ? \n\t\t\t\t\t\t[game.next(move)] :\n\t\t\t\t\t\tgame.possibleMoves(copy(obj(player, [move[player]]), move)).map(gameNext)\n\t\t\t\t\t),\n\t\t\t\t\tsum: 0, \n\t\t\t\t\tcount: 0 \n\t\t\t\t};\n\t\t\t});\n\t\tfor (var i = 0; i < this.simulationCount && Date.now() < endTime; ++i) {\n\t\t\toptions.forEach(function (option) {\n\t\t\t\toption.nexts = option.nexts.filter(function (next) {\n\t\t\t\t\tvar sim = monteCarloPlayer.simulation(next, player);\n\t\t\t\t\toption.sum += sim.result[player];\n\t\t\t\t\t++option.count;\n\t\t\t\t\treturn sim.plies > 0;\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\toptions = iterable(options).greater(function (option) {\n\t\t\traiseIf(isNaN(option.sum), \"State evaluation is NaN for move \", option.move, \"!\");\n\t\t\treturn option.count > 0 ? option.sum / option.count : 0;\n\t\t}).map(function (option) {\n\t\t\treturn option.move;\n\t\t});\n\t\treturn options;\n\t},\n\t\n\t/** This player's `stateEvaluation(game, player)` runs `simulationCount` \n\tsimulations and returns the average result.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\tvar resultSum = 0, \n\t\t\tsimulationCount = this.simulationCount,\n\t\t\tsim;\n\t\tfor (var i = 0; i < simulationCount; ++i) {\n\t\t\tsim = this.simulation(game, player);\n\t\t\tresultSum += sim.result[player];\n\t\t\tif (sim.plies < 1) { // game is final.\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn simulationCount > 0 ? resultSum / simulationCount : 0;\n\t},\n\t\n\t/** A `simulation(game, player)` plays a random match from the given `game`\n\tstate and returns an object with the final state (`game`), its result \n\t(`result`) and the number of plies simulated (`plies`).\n\t*/\n\tsimulation: function simulation(game, player) {\n\t\tvar mc = this,\n\t\t\tplies, move, moves;\n\t\tfor (plies = 0; true; ++plies) {\n\t\t\tif (game.isContingent) {\n\t\t\t\tgame = game.randomNext(this.random);\n\t\t\t} else {\n\t\t\t\tmoves = game.moves();\n\t\t\t\tif (!moves) { // If game state is final ...\n\t\t\t\t\treturn { game: game, result: game.result(), plies: plies };\n\t\t\t\t} else if (plies > this.horizon) { // If past horizon ...\n\t\t\t\t\treturn { game: game, result: obj(player, this.heuristic(game, player)), plies: plies };\n\t\t\t\t} else { // ... else advance.\n\t\t\t\t\tmove = {};\n\t\t\t\t\tgame.activePlayers.forEach(function (activePlayer) {\n\t\t\t\t\t\tmove[activePlayer] = mc.agent ? mc.agent.decision(game, activePlayer) \n\t\t\t\t\t\t\t: mc.random.choice(moves[activePlayer]);\n\t\t\t\t\t});\n\t\t\t\t\tgame = game.next(move);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\traise(\"Simulation ended unexpectedly for player \", player, \" in game \", game, \"!\");\n\t},\n\t\n\t__serialize__: function __serialize__() {\n\t\treturn [this.constructor.name, { name: this.name, \n\t\t\tsimulationCount: this.simulationCount, timeCap: this.timeCap, \n\t\t\tagent: this.agent \n\t\t}];\n\t}\n}); // declare MonteCarloPlayer\n","/** # UCTPlayer\n\nAutomatic player based on Upper Confidence Bound Monte Carlo tree search.\n*/\nplayers.UCTPlayer = declare(MonteCarloPlayer, {\n\t/** The constructor parameters may include:\n\t\n\t+ `simulationCount=30`: Maximum amount of simulations performed at each decision.\n\t+ `timeCap=1000ms`: Time limit for the player to decide.\n\t*/\n\tconstructor: function UCBPlayer(params) {\n\t\tMonteCarloPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `explorationConstant=sqrt(2)`: The exploration factor used in the UCT selection.\n\t\t*/\n\t\t\t.number('explorationConstant', { defaultValue: Math.sqrt(2), coerce: true })\n\t\t;\n\t},\n\t\n\t/** Evaluate all child nodes of the given `gameTree` according to the [Upper Confidence Bound\n\tformula by L. Kocsis and Cs. Szepesvári](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.102.1296). \n\tReturns one of the greatest evaluated, chosen at random.\n\t*/\n\tselectNode: function selectNode(gameTree, totalSimulationCount, explorationConstant) {\n\t\texplorationConstant = isNaN(explorationConstant) ? this.explorationConstant : +explorationConstant;\n\t\treturn this.random.choice(iterable(gameTree.children).select(1).greater(function (n) {\n\t\t\treturn n.uct.rewards / n.uct.visits + \n\t\t\t\texplorationConstant * Math.sqrt(Math.log(totalSimulationCount) / n.uct.visits);\n\t\t}));\n\t},\n\t\n\t/** `selectMoves(moves, game, player)` return an array with the best evaluated moves.\n\t*/\n\tselectMoves: function selectMoves(moves, game, player) {\n\t\tvar root = new GameTree(null, game),\n\t\t\tendTime = Date.now() + this.timeCap,\n\t\t\tnode, simulationResult;\n\t\troot.uct = {\n\t\t\tpending: this.random.shuffle(root.possibleTransitions()), visits: 0, rewards: 0\n\t\t};\n\t\tfor (var i = 0; i < this.simulationCount && Date.now() < endTime; ++i) {\n\t\t\tnode = root;\n\t\t\twhile (node.uct.pending.length < 1 && node.childrenCount() > 0) { // Selection\n\t\t\t\tnode = this.selectNode(node, i+1, this.explorationConstant);\n\t\t\t}\n\t\t\tif (node.uct.pending.length > 0) { // Expansion\n\t\t\t\tnode = node.expand(node.uct.pending.pop());\n\t\t\t\tnode.uct = {\n\t\t\t\t\tpending: this.random.shuffle(node.possibleTransitions()), visits: 0, rewards: 0\n\t\t\t\t};\n\t\t\t}\n\t\t\tsimulationResult = this.simulation(node.state, player); // Simulation\n\t\t\tfor (; node; node = node.parent) { // Backpropagation\n\t\t\t\t++node.uct.visits;\n\t\t\t\tnode.uct.rewards += (game.normalizedResult(simulationResult.result)[player] + 1) / 2;\n\t\t\t}\n\t\t}\n\t\tmoves = iterable(root.children).select(1).greater(function (n) {\n\t\t\treturn n.uct.visits;\n\t\t}).map(function (n) {\n\t\t\treturn n.transition;\n\t\t});\n\t\treturn moves;\n\t},\n\t\n\t__serialize__: function __serialize__() {\n\t\treturn [this.constructor.name, { name: this.name, \n\t\t\tsimulationCount: this.simulationCount, timeCap: this.timeCap, \n\t\t\texplorationConstant: this.explorationConstant \n\t\t}];\n\t}\n}); // declare MonteCarloPlayer\n","/** # UserInterfacePlayer\n\nImplementation of player user interfaces and proxies.\n*/\nvar UserInterfacePlayer = players.UserInterfacePlayer = declare(Player, {\n\t/** `UserInterfacePlayer` is a generic type for all players that are proxies \n\tof user interfaces.\n\t*/\n\tconstructor: function UserInterfacePlayer(params) {\n\t\tPlayer.call(this, params);\n\t},\n\n\t/** The `participate` method assigns this players role to the given role.\n\t*/\n\tparticipate: function participate(match, role) {\n\t\tthis.role = role;\n\t\treturn this;\n\t},\n\t\n\t/** The `decision(game, player)` of this players returns a future that will \n\tbe resolved when the `perform()` method is called.\n\t*/\n\tdecision: function decision(game, player) {\n\t\tif (this.__future__ && this.__future__.isPending()) {\n\t\t\tthis.__future__.resolve(new Match.CommandQuit());\n\t\t}\n\t\tthis.__future__ = new Future();\n\t\treturn this.__future__;\n\t},\n\t\n\t/** User interfaces have to be configured to call `perform(action)` upon \n\teach significant user action.players. It resolves the future returned by the\n\t`decision()` method.\n\t*/\n\tperform: function perform(action) {\n\t\tvar future = this.__future__;\n\t\tif (future) {\n\t\t\tthis.__future__ = null;\n\t\t\tfuture.resolve(action);\n\t\t}\n\t\treturn !!future;\n\t}\n}); // declare UserInterfacePlayer.\n\n// ## User interfaces ##########################################################\n\nvar UserInterface = players.UserInterface = declare({\n\t/** `UserInterface` is the base abstract type for user interfaces that \n\tdisplay a game and allow one or more players to play. The `config` argument \n\tmay include the `match` being played.\n\t*/\n\tconstructor: function UserInterface(config) {\n\t\tthis.onBegin = this.onBegin.bind(this);\n\t\tthis.onNext = this.onNext.bind(this);\n\t\tthis.onEnd = this.onEnd.bind(this);\n\t\tif (config.match) {\n\t\t\tthis.show(config.match);\n\t\t}\n\t},\n\t\n\t/** `show(match)` discards the current state and sets up to display the \n\tgiven `match`.\n\t*/\n\tshow: function show(match) {\n\t\tif (this.match) {\n\t\t\tmatch.events.off('begin', this.onBegin);\n\t\t\tmatch.events.off('next', this.onNext);\n\t\t\tmatch.events.off('end', this.onEnd);\n\t\t}\n\t\tthis.match = match;\n\t\tmatch.events.on('begin', this.onBegin);\n\t\tmatch.events.on('next', this.onNext);\n\t\tmatch.events.on('end', this.onEnd);\n\t},\n\t\n\t/** When the player is participated of a match, callbacks are registered to \n\tthe following match's events.\n\t\n\t+ `onBegin(game)` handles the `'begin'` event of the match.\n\t*/\n\tonBegin: function onBegin(game) {\n\t\tthis.display(game);\n\t},\n\t\n\t/** + `onNext(game, next)` handles the `'move'` event of the match.\n\t*/\n\tonNext: function onNext(game, next) {\n\t\tthis.display(next);\n\t},\n\t\n\t/** + `onEnd(game, results)` handles the `'end'` event of the match.\n\t*/\n\tonEnd: function onEnd(game, results) {\n\t\tthis.results = results;\n\t\tthis.display(game);\n\t},\n\t\n\t/** `display(game)` renders the game in this user interface. Not \n\timplemented, so please override.\n\t*/\n\tdisplay: unimplemented(\"UserInterface\", \"display\"),\n\t\n\t/** `perform(action, actionRole=undefined)` makes the given player perform \n\tthe action if the player has a `perform()` method and is included in this \n\tUI's players.\n\t*/\n\tperform: function perform(action, actionRole) {\n\t\titerable(this.match.players).forEach(function (pair) {\n\t\t\tvar role = pair[0], player = pair[1];\n\t\t\tif (player instanceof UserInterfacePlayer && (!actionRole || player.role === actionRole)) {\n\t\t\t\tplayer.perform(action);\n\t\t\t}\n\t\t});\n\t}\n}); // declare UserInterface.\n\n// ### HTML based user interfaces ##############################################\n\nUserInterface.BasicHTMLInterface = declare(UserInterface, {\n\t/** `BasicHTMLInterface(config)` builds a simple HTML based UI, that renders \n\tthe game on the DOM using its `display()` method. The `config` argument may\n\tinclude:\n\t\n\t+ `document=window.document`: the DOM root.\n\t+ `container`: the DOM node to render the game in, or its name.\n\t*/\n\tconstructor: function BasicHTMLInterface(config) {\n\t\tUserInterface.call(this, config);\n\t\tthis.document = config.document || base.global.document;\n\t\tthis.container = config.container;\n\t\tif (typeof this.container === 'string') {\n\t\t\tthis.container = this.document.getElementById(this.container);\n\t\t}\n\t},\n\n\t/** On `display(game)` the `container` is emptied and the game is rendered\n\tusing its `display(ui)` method.\n\t*/\n\tdisplay: function display(game) {\n\t\tvar container = this.container, child;\n\t\twhile (child = container.firstChild) { // It seems the DOM API does not provide a method for this. :-(\n\t\t\tcontainer.removeChild(child);\n\t\t}\n\t\tgame.display(this);\n\t},\n\t\n\t/** `build()` helps DOM creation. The `nodes` argument specifies DOM \n\telements, each with an array of the shape: `[tag, attributes, elements]`.\n\t*/\n\tbuild: function build(parent, nodes) {\n\t\tvar ui = this;\n\t\tnodes.forEach(function (node) {\n\t\t\tvar element;\n\t\t\tif (Array.isArray(node)) {\n\t\t\t\telement = ui.document.createElement(node[0]);\n\t\t\t\tif (node.length > 2 && node[1]) { // There are attributes.\n\t\t\t\t\tvar attrs = node[1];\n\t\t\t\t\tfor (var attrName in attrs) if (attr.hasOwnProperty(attrName)) {\n\t\t\t\t\t\telement.setAttribute(attrName, attrs[attrName]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (node.length > 1 && node[node.length-1]) { // There are child elements.\n\t\t\t\t\tui.build(element, node[node.length-1]);\n\t\t\t\t}\n\t\t\t} else if (typeof node === 'string') {\n\t\t\t\telement = ui.document.createTextNode(node);\n\t\t\t}\n\t\t\tif (element && parent) {\n\t\t\t\tparent.appendChild(element);\n\t\t\t}\n\t\t});\n\t\treturn parent;\n\t}\n}); // declare HTMLInterface.\n","/** # WebWorkerPlayer\n\nA proxy for another player executing inside a webworker.\n*/\nvar WebWorkerPlayer = players.WebWorkerPlayer = declare(Player, {\n\t/** The constructor builds a player that is a proxy for another player executing in a webworker. \n\tThe parameters must include:\n\t*/\n\tconstructor: function WebWorkerPlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `worker`: The `Worker` instance where the actual player is executing.\n\t\t\t*/\n\t\t\t.object('worker');\n\t\tthis.worker.onmessage = base.Parallel.prototype.__onmessage__.bind(this);\n\t},\n\t\n\t/** The static `createWorker(playerBuilder)` method creates (asynchronously) and initializes a \n\tweb worker. The modules `creatartis-base` and `ludorum` are loaded in the webworker's root \n\tnamespace (`self`). If a `workerSetup` function is given, it is also run. After that, the \n\t`playerBuilder` function is called and its results stored in the variable `self.PLAYER`.\n\t*/\n\t'static createWorker': function createWorker(playerBuilder, workerSetup) {\n\t\traiseIf('string function'.indexOf(typeof playerBuilder) < 0, \"Invalid player builder: \"+ playerBuilder +\"!\");\n\t\tvar parallel = new base.Parallel();\n\t\treturn parallel.loadModule(exports, true).then(function () {\n\t\t\treturn parallel.run(\n\t\t\t\t(typeof workerSetup === 'function' ? '('+ workerSetup +')(),\\n' : '')+\n\t\t\t\t'self.PLAYER = ('+ playerBuilder +').call(self),\\n'+\n\t\t\t\t'\"OK\"'\n\t\t\t);\n\t\t}).then(function () {\n\t\t\treturn parallel.worker;\n\t\t});\n\t},\n\t\n\t/** The static `create(params)` method creates (asynchronously) and initializes a \n\t`WebWorkerPlayer`, with a web worker ready to play. The `params` must include the \n\t`playerBuilder` function to execute on the web worker's environment.\n\t*/\n\t'static create': function create(params) {\n\t\tvar WebWorkerPlayer = this;\n\t\treturn WebWorkerPlayer.createWorker(params.playerBuilder, params.workerSetup).then(function (worker) {\n\t\t\treturn new WebWorkerPlayer({name: name, worker: worker}); \n\t\t});\n\t},\n\t\n\t/** This player's `decision(game, player)` is delegated to this player's webworker, returning a \n\tfuture that will be resolved when the parallel execution is over.\n\t\n\tWarning! If this method is called while another decision is pending, the player will assume the \n\tprevious match was aborted, issuing a quit command.\n\t*/\n\tdecision: function decision(game, player) {\n\t\tif (this.__future__ && this.__future__.isPending()) {\n\t\t\tthis.__future__.resolve(Match.commandQuit);\n\t\t}\n\t\tthis.__future__ = new Future();\n\t\tthis.worker.postMessage('PLAYER.decision(Sermat.mat('+ JSON.stringify(Sermat.ser(game)) +'), '+ JSON.stringify(player) +')');\n\t\treturn this.__future__;\n\t}\n}); // declare WebWorkerPlayer","/** # Aleatory\n\nAleatories are different means of non determinism that games can use, like: dice, card decks, \nroulettes, etc. They are used by `Aleatoric` game states.\n*/\nvar Aleatory = exports.aleatories.Aleatory = declare({\n\t/** The base class implements an integer uniform random variable between a minimum and maximum\n\tvalue (inclusively).\n\t+ \n\t*/\n\tconstructor: function Aleatory(min, max) {\n\t\tswitch (arguments.length) {\n\t\t\tcase 1: this.range = [1, min]; break;\n\t\t\tcase 2: this.range = [min, max]; break;\n\t\t}\n\t},\n\t\n\t/** The `Aleatory.value()` can be used to obtain a valid random value for the random variable.\n\t*/\n\tvalue: function value(random) {\n\t\treturn (random || Randomness.DEFAULT).randomInt(this.range[0], this.range[1] + 1);\n\t},\n\t\t\n\t/** In order to properly search a game tree with aleatory nodes, the random variables' \n\tdistribution has to be known. `Aleatory.distribution()` computes the histogram for the random \n\tvariables on which this aleatory depends, as a sequence of pairs `[value, probability]`.\n\t\n\tBy default it returns a flat histogram, assuming the random variable is uniform.\n\t*/\n\tdistribution: function () {\n\t\tvar min = this.range[0], \n\t\t\tmax = this.range[1],\n\t\t\tprobability = 1 / (max - min + 1);\n\t\treturn Iterable.range(min, max + 1).map(function (value) {\n\t\t\treturn [value, probability];\n\t\t});\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Aleatory',\n\t\tserializer: function serialize_Aleatory(obj) {\n\t\t\treturn [this.range];\n\t\t}\n\t}\n}); // declare Aleatory.\n","/** # UniformAleatory\r\n\r\nAn uniform aleatory is one that ranges over a set of values, all of which have the same probability\r\nof occurrence.\r\n*/\r\nvar UniformAleatory = exports.aleatories.UniformAleatory = declare(Aleatory, {\r\n\t/** An uniform aleatory is defined by a sequence of `values`. The sequence cannot be empty, but\r\n\tone value is supported as weird as it may be.\r\n\t*/\r\n\tconstructor: function UniformAleatory(values) {\r\n\t\tthis.__values__ = iterable(values).toArray();\r\n\t\traiseIf(this.__values__.length < 1, \"No values for aleatory!\");\r\n\t},\r\n\r\n\t/** The `value` is one of the `values` used to build this aleatory, picked at random.\r\n\t*/\r\n\tvalue: function value(random) {\r\n\t\treturn (random || Randomness.DEFAULT).choice(this.__values__);\r\n\t},\r\n\t\r\n\t/** The `distribution` of an uniform aleatory is a sequence of pairs `[value, probability]`.\r\n\t*/\r\n\tdistribution: function distribution() {\r\n\t\tvar prob = 1 / this.__values__.length;\r\n\t\treturn this.__values__.map(function (v) {\r\n\t\t\treturn [v, prob];\r\n\t\t});\r\n\t},\r\n\t\r\n\t// ## Utilities ################################################################################\r\n\t\r\n\t/** Serialization and materialization using Sermat.\r\n\t*/\r\n\t'static __SERMAT__': {\r\n\t\tidentifier: 'UniformAleatory',\r\n\t\tserializer: function serialize_UniformAleatory(obj) {\r\n\t\t\treturn [this.__values__];\r\n\t\t}\r\n\t}\r\n});","/** # Dice aleatories\n\nImplementations of common dice and related functions.\n*/\nvar dice = aleatories.dice = {\n\t/** Common dice variants.\n\t*/\n\tD4: new Aleatory(1, 4),\n\tD6: new Aleatory(1, 6),\n\tD8: new Aleatory(1, 8),\n\tD10: new Aleatory(1, 10),\n\tD12: new Aleatory(1, 12),\n\tD20: new Aleatory(1, 20),\n\tD100: new Aleatory(1, 100),\n\t\n\t/** The `sumProbability` that rolling `n` dice of `s` sides yields a sum equal to `p`. Check the \n\tarticle at [Mathworld](http://mathworld.wolfram.com/Dice.html).\n\t*/\n\tsumProbability: function sumProbability(p, n, s) {\n\t\tn = n|0;\n\t\ts = s|0;\n\t\tp = p|0;\n\t\tif (isNaN(n) || isNaN(s) || isNaN(p) || n < 1 || s < 2) {\n\t\t\treturn NaN;\n\t\t} else if (p < n || p > n * s) {\n\t\t\treturn 0;\n\t\t} else {\n\t\t\tvar factorial = base.math.factorial,\n\t\t\t\tfact_n = factorial(n),\n\t\t\t\tfact_n_1 = fact_n / n; // factorial(n - 1)\n\t\t\treturn Math.pow(s, -n) *\n\t\t\t\tIterable.range(0, Math.floor((p - n) / s) + 1).map(function (k) {\n\t\t\t\t\tvar comb1 = fact_n / factorial(k) / factorial(n - k),\n\t\t\t\t\t\tx = p - s * k - 1,\n\t\t\t\t\t\tcomb2 = factorial(x) / fact_n_1 / factorial(x - n + 1);\n\t\t\t\t\treturn (k % 2 ? -1 : 1) * comb1 * comb2;\n\t\t\t\t}).sum();\n\t\t}\n\t}\n}; //// declare Dice.","/** Simple reference games with a predefined outcome, mostly for testing \n\tpurposes.\n*/\ngames.Predefined = declare(Game, {\n\t/** new games.Predefined(activePlayer, results, height=5, width=5):\n\t\tA pseudogame used for testing purposes. It will give width amount of \n\t\tmoves for each player until height moves pass. Then the match is \n\t\tfinished with the given results, or a tie as default.\n\t*/\n\tconstructor: function Predefined(activePlayer, results, height, width) {\n\t\tif (results) {\n\t\t\tthis.__results__ = results;\n\t\t\tthis.players = Object.keys(results);\n\t\t}\n\t\tGame.call(this, activePlayer);\n\t\tthis.height = isNaN(height) ? 5 : +height;\n\t\tthis.width = isNaN(width) ? 5 : +width;\n\t},\n\n\tname: 'Predefined',\n\t\n\t/** games.Predefined.players:\n\t\tDefault players for Predefined: A and B.\n\t*/\n\tplayers: ['A', 'B'],\n\n\t/** games.Predefined.__results__:\n\t\tDefault results for Predefined: a tie between A and B.\n\t*/\n\t__results__: {'A': 0, 'B': 0},\n\n\t/** games.Predefined.moves():\n\t\tMoves for a Predefined are numbers from 1 to this.width. \n\t*/\n\tmoves: function moves() {\n\t\tif (this.height > 0) {\n\t\t\treturn obj(this.activePlayer(), \n\t\t\t\tIterable.range(1, this.width + 1).toArray()\n\t\t\t);\n\t\t}\n\t},\n\n\t/** games.Predefined.result():\n\t\tReturned the predefined results if height is zero or less.\n\t*/\n\tresult: function result() {\n\t\treturn this.height > 0 ? null : this.__results__;\n\t},\n\n\t/** games.Predefined.next(moves):\n\t\tMoves are completely irrelevant. They only advance in the match.\n\t*/\n\tnext: function next() {\n\t\treturn new this.constructor(this.opponent(), this.__results__, this.height - 1, this.width);\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Predefined',\n\t\tserializer: function serialize_Predefined(obj) {\n\t\t\treturn [obj.activePlayer(), obj.__results__, obj.height, obj.width];\n\t\t}\n\t}\n}); // declare Predefined.\n","/** # Choose2Win\n\nChoose2Win is a simple silly game. Each turn one of the players can decide to win, to lose or to \npass the turn. It is meant to be used only for testing Ludorum, since a game can hardly become less \ninteresting than this.\n*/\ngames.Choose2Win = declare(Game, {\n\t/** The constructor takes a number of turns for the game to last (`Infinity` by default), the \n\tactive player and the winner if the game has ended. \n\t*/\n\tconstructor: function Choose2Win(turns, activePlayer, winner) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.__turns__ = isNaN(turns) ? Infinity : +turns;\n\t\tthis.__winner__ = winner;\t\t\n\t},\n\n\tname: 'Choose2Win',\n\t\n\t/** Players of this dummy game are labeled This and That.\n\t*/\n\tplayers: ['This', 'That'],\n\n\t/** Every turn the active player's moves are: `'win'`, `'lose'` and `'pass'`.\n\t*/\n\tmoves: function moves() {\n\t\tif (!this.__winner__ && this.__turns__ > 0) {\n\t\t\treturn obj(this.activePlayer(), ['win', 'lose', 'pass']);\n\t\t}\n\t},\n\n\t/** Victory is for whom chooses to win first. Defeat is for whom chooses to lose first. A draw \n\tonly results when the limit of turns (if any) is met.\n\t*/\n\tresult: function result() {\n\t\treturn this.__winner__ ? this.victory(this.__winner__) :\n\t\t\tthis.__turns__ < 1 ? this.draw() : null;\n\t},\n\n\t/** If a player moves to win or lose, a final game state is returned. Else the game goes on.\n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\topponent = this.opponent(activePlayer);\n\t\traiseIf(!moves.hasOwnProperty(activePlayer), 'No move for active player ', activePlayer, ' at ', this, '!');\n\t\tswitch (moves[activePlayer]) {\n\t\t\tcase 'win': return new this.constructor(this.__turns__ - 1, opponent, activePlayer);\n\t\t\tcase 'lose': return new this.constructor(this.__turns__ - 1, opponent, opponent);\n\t\t\tcase 'pass': return new this.constructor(this.__turns__ - 1, opponent);\n\t\t\tdefault: raise('Invalid move ', moves[activePlayer], ' for player ', activePlayer, ' at ', this, '!');\n\t\t}\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Choose2Win',\n\t\tserializer: function serialize_Choose2Win(obj) {\n\t\t\tvar r = [obj.__turns__, obj.activePlayer()];\n\t\t\tif (obj.__winner__) {\n\t\t\t\tr.push(obj.__winner__);\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\t}\n}); // declare Choose2Win.","/** # ConnectionGame\n\nBase class for a subset of the family of [connection games](http://en.wikipedia.org/wiki/Connection_game), \nwhich includes [TicTacToe](http://en.wikipedia.org/wiki/Tic-tac-toe), \n[ConnectFour](http://en.wikipedia.org/wiki/Connect_Four) and [Gomoku](http://en.wikipedia.org/wiki/Gomoku).\nIt implements a rectangular board, the placing of the pieces and the checks for lines.\n*/\ngames.ConnectionGame = declare(Game, {\n\t/** Boards by default have 9 rows ...\n\t*/\n\theight: 9,\n\t\n\t/** ... and 9 columns.\n\t*/\n\twidth: 9,\n\t\n\t/** A player has to make a line of 5 pieces to win, by default.\n\t*/\n\tlineLength: 5,\n\n\t/** The constructor takes the active player and the board given as a string. For the game's \n\t`board` this last string argument is used to build a [`CheckerboardFromString`](../utils/CheckerboardFromString.js.html).\n\t*/\n\tconstructor: function ConnectionGame(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = (board instanceof CheckerboardFromString) ? board :\n\t\t\tnew CheckerboardFromString(this.height, this.width, \n\t\t\t\t(board || '.'.repeat(this.height * this.width)) +''\n\t\t\t);\n\t},\n\n\tname: 'ConnectionGame',\n\t\n\t/** This base implementations names its players First and Second.\n\t*/\n\tplayers: ['First', 'Second'],\n\t\n\t/** Lines in the board are cached to accelerate the result calculation. */\n\t__lines__: (function () {\n\t\tvar CACHE = {};\n\t\tfunction __lines__(height, width, lineLength) {\n\t\t\tvar key = height +'x'+ width +'/'+ lineLength;\n\t\t\tif (!CACHE.hasOwnProperty(key)) {\n\t\t\t\tvar board = new CheckerboardFromString(height, width, '.'.repeat(height * width));\n\t\t\t\tCACHE[key] = board.lines().map(function (line) {\n\t\t\t\t\treturn line.toArray();\n\t\t\t\t}, function (line) {\n\t\t\t\t\treturn line.length >= lineLength;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\treturn CACHE[key];\n\t\t}\n\t\t__lines__.CACHE = CACHE;\n\t\treturn __lines__;\n\t})(),\n\t\n\t/** A connection game ends when either player gets the required amount of pieces aligned (either\n\thorizontally, vertically or diagonally), hence winning the game. The match ends in a tie if the \n\tboard gets full.\n\t*/\n\tresult: function result() {\n\t\tif (this.hasOwnProperty('__result__')) {\n\t\t\treturn this.__result__;\n\t\t}\n\t\tvar lineLength = this.lineLength,\n\t\t\tlines = this.board.asStrings(this.__lines__(this.height, this.width, lineLength)).join(' ');\n\t\tfor (var i = 0; i < this.players.length; ++i) {\n\t\t\tif (lines.indexOf(i.toString(36).repeat(lineLength)) >= 0) {\n\t\t\t\treturn this.__result__ = this.victory([this.players[i]]);\n\t\t\t}\n\t\t}\n\t\tif (lines.indexOf('.') < 0) { // No empty squares means a tie.\n\t\t\treturn this.__result__ = this.draw();\n\t\t}\n\t\treturn this.__result__ = null; // The game continues.\n\t},\n\t\n\t/** The active player can place a piece in any empty square in the board. The moves are indices\n\tin the board's string representation.\n\t*/\n\tmoves: function moves() {\n\t\tif (this.hasOwnProperty('__moves__')) {\n\t\t\treturn this.__moves__;\n\t\t} else if (this.result()) {\n\t\t\treturn this.__moves__ = null;\n\t\t} else {\n\t\t\treturn this.__moves__ = obj(this.activePlayer(), \n\t\t\t\titerable(this.board.string).filter(function (c) {\n\t\t\t\t\treturn c === '.';\n\t\t\t\t}, function (c, i) {\n\t\t\t\t\treturn i;\n\t\t\t\t}).toArray()\n\t\t\t);\n\t\t}\n\t},\n\n\t/** To get from one game state to the next, an active player's piece in the square indicated by \n\tits move.\n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tplayerIndex = this.players.indexOf(activePlayer),\n\t\t\tsquareIndex = +moves[activePlayer],\n\t\t\trow = (squareIndex / this.width) >> 0,\n\t\t\tcolumn = squareIndex % this.width;\n\t\treturn new this.constructor((playerIndex + 1) % this.players.length, \n\t\t\tthis.board.place([row, column], playerIndex.toString(36))\n\t\t);\n\t},\n\t\n\t// ## User intefaces ###########################################################################\n\t\n\t/** The `display(ui)` method is called by a `UserInterface` to render the game state. The only \n\tsupported user interface type is `BasicHTMLInterface`. The look can be configured using CSS \n\tclasses.\n\t*/\n\tdisplay: function display(ui) {\n\t\traiseIf(!ui || !(ui instanceof UserInterface.BasicHTMLInterface), \"Unsupported UI!\");\n\t\tvar moves = this.moves(),\n\t\t\tactivePlayer = this.activePlayer(),\n\t\t\tboard = this.board;\n\t\tmoves = moves && moves[activePlayer];\n\t\tvar table = this.board.renderAsHTMLTable(ui.document, ui.container, function (data) {\n\t\t\t\tdata.className = data.square === '.' ? 'ludorum-empty' : 'ludorum-player'+ data.square;\n\t\t\t\tdata.innerHTML = data.square === '.' ? \" \" : \"●\";\n\t\t\t\tvar i = data.coord[0] * board.height + data.coord[1];\n\t\t\t\tif (moves && moves.indexOf(i) >= 0) {\n\t\t\t\t\tdata.move = i;\n\t\t\t\t\tdata.activePlayer = activePlayer;\n\t\t\t\t\tdata.onclick = ui.perform.bind(ui, data.move, activePlayer);\n\t\t\t\t}\n\t\t\t});\n\t\treturn ui;\n\t},\n\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'ConnectionGame',\n\t\tserializer: function serialize_ConnectionGame(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t}\n}); // declare ConnectionGame.","/** # Odds & Evens\n\n[Odds and evens](http://en.wikipedia.org/wiki/Odds_and_evens) is a classic child game, implemented \nas a simple example of a simultaneous game, i.e. a game in which more than one player can move at \nany given turn.\n*/\ngames.OddsAndEvens = declare(Game, {\n\t/** The constructor takes:\n\t\n\t\t+ `turns=1`: The number of turns remaining in the game.\n\t\t+ `points=`: The scores for every player.\n\t*/\n\tconstructor: function OddsAndEvens(turns, points) {\n\t\tGame.call(this, this.players); // Both players are active.\n\t\tthis.turns = isNaN(turns) ? 1 : +turns;\n\t\tthis.points = points || { Evens: 0, Odds: 0 };\n\t},\n\n\tname: 'OddsAndEvens',\n\t\n\t/** Players for odds and evens are called like that: Evens and Odds.\n\t*/\n\tplayers: ['Evens', 'Odds'],\n\n\t/** Each turn both players draw either a 1 or a 2.\n\t*/\n\tmoves: function moves() {\n\t\treturn this.turns < 1 ? null : { Evens: [1, 2], Odds: [1, 2] };\n\t},\n\n\t/** The winner is the player with more points.\n\t*/\n\tresult: function result() {\n\t\tvar pointDifference = this.points.Evens - this.points.Odds;\n\t\treturn this.turns > 0 ? null : {\n\t\t\tEvens: +pointDifference,\n\t\t\tOdds: -pointDifference\n\t\t};\n\t},\n\n\t/** The player matching the parity of the moves sum earns a point.\n\t*/\n\tnext: function next(moves) {\n\t\traiseIf(typeof moves.Evens !== 'number' || typeof moves.Odds !== 'number',\n\t\t\t'Invalid moves '+ (JSON.stringify(moves) || moves) +'!');\n\t\tvar parity = (moves.Evens + moves.Odds) % 2 === 0;\n\t\treturn new this.constructor(this.turns - 1, {\n\t\t\tEvens: this.points.Evens + (parity ? 1 : 0),\n\t\t\tOdds: this.points.Odds + (parity ? 0 : 1)\n\t\t});\n\t},\n\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'OddsAndEvens',\n\t\tserializer: function serialize_OddsAndEvens(obj) {\n\t\t\treturn [obj.turns, obj.points];\n\t\t}\n\t}\n}); // declare OddsAndEvens.\n","/** # TicTacToe.\n\nImplementation of the traditional [Tic-Tac-Toe game](http://en.wikipedia.org/wiki/Tictactoe).\n*/\ngames.TicTacToe = declare(Game, {\n\tname: 'TicTacToe',\n\n\t/** The constructor takes the `activePlayer` (`\"Xs\"` by default) and the `board` as a string \n\t(empty board as default).\n\t*/\n\tconstructor: function TicTacToe(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = board || '_________';\n\t},\n\t\n\t/** This game's players are `\"Xs\"` and `\"Os\"`.\n\t*/\n\tplayers: ['Xs', 'Os'],\n\t\n\t/** A match ends with a victory for any player that has three marks in line, or a draw if the \n\tboard is full.\n\t*/\n\tresult: (function () {\n\t\treturn function result() {\t\t\t\n\t\t\tif (this.board.match(this.WIN_X)) { // Xs wins.\n\t\t\t\treturn this.victory([\"Xs\"]);\n\t\t\t} else if (this.board.match(this.WIN_O)) { // Os wins.\n\t\t\t\treturn this.victory([\"Os\"]);\n\t\t\t} else if (this.board.indexOf('_') < 0) { // No empty squares means a tie.\n\t\t\t\treturn this.draw();\n\t\t\t} else {\n\t\t\t\treturn null; // The game continues.\n\t\t\t}\n\t\t};\n\t})(),\n\t\n\t/** The active player's `moves()` are the indexes of empty squares in the board.\n\t*/\n\tmoves: function moves() {\n\t\tif (!this.result()) {\n\t\t\tvar result = {};\n\t\t\tresult[this.activePlayer()] = iterable(this.board).filter(function (chr, i) {\n\t\t\t\treturn chr === '_'; // Keep only empty squares.\n\t\t\t}, function (chr, i) {\n\t\t\t\treturn i; // Grab the index.\n\t\t\t}).toArray();\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\t\t\n\t},\n\t\n\t/** The `next(moves)` game state puts the mark of the active player in the square indicated by \n\tthe move. \n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(), \n\t\t\tmove = +moves[activePlayer];\n\t\tif (isNaN(move) || this.board.charAt(move) !== '_') {\n\t\t\tthrow new Error('Invalid move '+ JSON.stringify(moves) +' for board '+ this.board +\n\t\t\t\t' (moves= '+ JSON.stringify(moves) +').');\n\t\t}\n\t\tvar newBoard = this.board.substring(0, move) + activePlayer.charAt(0) + this.board.substring(move + 1);\n\t\treturn new this.constructor(this.opponent(activePlayer), newBoard);\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'TicTacToe',\n\t\tserializer: function serialize_TicTacToe(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t},\n\t\n\t// ## User intefaces ###########################################################################\n\t\n\t/** `printBoard()` creates a text (ASCII) version of the board.\n\t*/\n\tprintBoard: function printBoard() {\n\t\tvar board = this.board;\n\t\treturn [\n\t\t\tboard.substr(0,3).split('').join('|'), '-+-+-',\n\t\t\tboard.substr(3,3).split('').join('|'), '-+-+-',\n\t\t\tboard.substr(6,3).split('').join('|')\n\t\t].join('\\n');\n\t},\n\t\n\t/** The `display(ui)` method is called by a `UserInterface` to render the game state. The only \n\tsupported user interface type is `BasicHTMLInterface`. The look can be configured using CSS \n\tclasses.\n\t*/\n\tdisplay: function display(ui) {\n\t\traiseIf(!ui || !(ui instanceof UserInterface.BasicHTMLInterface), \"Unsupported UI!\");\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tmoves = this.moves(),\n\t\t\tboard = this.board,\n\t\t\tclassNames = { 'X': \"ludorum-square-Xs\", 'O': \"ludorum-square-Os\", '_': \"ludorum-square-empty\" },\n\t\t\tsquareHTML = { 'X': \"X\", 'O': \"O\", '_': \" \" };\n\t\tmoves = moves && moves[activePlayer] && moves[activePlayer].length > 0;\n\t\t(new CheckerboardFromString(3, 3, this.board, '_'))\n\t\t\t.renderAsHTMLTable(ui.document, ui.container, function (data) {\n\t\t\t\tdata.className = classNames[data.square];\n\t\t\t\tdata.innerHTML = squareHTML[data.square];\n\t\t\t\tif (moves && data.square === '_') {\n\t\t\t\t\tdata.move = data.coord[0] * 3 + data.coord[1];\n\t\t\t\t\tdata.activePlayer = activePlayer;\n\t\t\t\t\tdata.onclick = ui.perform.bind(ui, data.move, activePlayer);\n\t\t\t\t}\n\t\t\t});\n\t\treturn ui;\n\t},\n\t\n\t// ## Heuristics and AI ########################################################################\n\t\n\t/** `TicTacToe.heuristics` is a bundle of helper functions to build heuristic evaluation \n\tfunctions for this game.\n\t*/\n\t\"static heuristics\": {\n\t\t/** `heuristicFromWeights(weights)` builds an heuristic evaluation function from weights for\n\t\teach square in the board. The result of the function is the weighted sum, empty squares \n\t\tbeing ignored, opponent squares considered negative.\n\t\t*/\n\t\theuristicFromWeights: function heuristicFromWeights(weights) {\n\t\t\tvar weightSum = iterable(weights).map(Math.abs).sum();\n\t\t\tfunction __heuristic__(game, player) {\n\t\t\t\tvar playerChar = player.charAt(0);\n\t\t\t\treturn iterable(game.board).map(function (square, i) {\n\t\t\t\t\treturn (square === '_' ? 0 : weights[i] * (square === playerChar ? 1 : -1));\n\t\t\t\t}).sum() / weightSum;\n\t\t\t}\n\t\t\t__heuristic__.weights = weights;\n\t\t\treturn __heuristic__;\n\t\t}\n\t},\n\t\n\t// ## TicTacToe type initialization ############################################################\n\t\n\t'': function () { \n\t\t/** The regular expressions `WIN_X` and `WIN_O` used in the victory test are calculated \n\t\there.\n\t\t*/\n\t\tvar board3x3 = new CheckerboardFromString(3, 3, '_'.repeat(9)),\n\t\t\tlines = board3x3.sublines(board3x3.lines(), 3);\n\t\tthis.prototype.WIN_X = new RegExp(board3x3.asRegExps(lines, 'X', '.'));\n\t\tthis.prototype.WIN_O = new RegExp(board3x3.asRegExps(lines, 'O', '.'));\n\t\t\n\t\t/** The `defaultHeuristic `for TicTacToe is based on weights for each square. Center is \n\t\tworth 5, corners 2 and the other squares 1.\n\t\t*/\n\t\tthis.heuristics.defaultHeuristic = this.heuristics\n\t\t\t.heuristicFromWeights([2,1,2,1,5,1,2,1,2]);\n\t}\t\n}); // declare TicTacToe","/** Implementation of the [Toads & Frogs](http://en.wikipedia.org/wiki/Toads_and_Frogs_%28game%29) \n\tgame.\n*/\ngames.ToadsAndFrogs = declare(Game, {\n\t/** new games.ToadsAndFrogs(activePlayer=\"Toads\", board='TTT__FFF'):\n\t\tConstructor of Toads & Frogs games. The first player is always Toads.\n\t*/\n\tconstructor: function ToadsAndFrogs(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = board || ToadsAndFrogs.board();\n\t},\n\t\n\t/** static games.ToadsAndFrogs.board(chips=3, separation=2):\n\t\tMakes a board for Toads & Frogs. This is a single row with the given \n\t\tnumber of chips for each player (toads to the left and frogs to the\n\t\tright) separated by the given number of empty spaces.\n\t*/\n\t\"static board\": function board(chips, separation) {\n\t\tchips = isNaN(chips) ? 3 : +chips;\n\t\tseparation = isNaN(separation) ? 2 : +separation;\n\t\treturn 'T'.repeat(chips) + '_'.repeat(separation) + 'F'.repeat(chips);\n\t},\n\t\n\tname: 'ToadsAndFrogs',\n\t\n\t/** games.ToadsAndFrogs.players:\n\t\tThere are two roles in this game: \"Toads\" and \"Frogs\".\n\t*/\n\tplayers: ['Toads', 'Frogs'],\n\t\n\t/** games.ToadsAndFrogs.result():\n\t\tThe match finishes when one player cannot move, hence losing the game.\n\t*/\n\tresult: function result() {\n\t\treturn this.moves() ? null : this.defeat();\n\t},\n\t\n\t/** games.ToadsAndFrogs.moves():\n\t*/\n\tmoves: function moves() {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tresult = {}, \n\t\t\tms = result[activePlayer] = [];\n\t\tthis.board.replace(activePlayer == this.players[0] ? /TF?_/g : /_T?F/g, function (m, i) {\n\t\t\tms.push(i);\n\t\t\treturn m;\n\t\t});\n\t\treturn ms.length > 0 ? result : null;\n\t},\n\t\n\t/** games.ToadsAndFrogs.next(moves):\n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(), \n\t\t\tmove = moves[activePlayer], \n\t\t\tchip = activePlayer.charAt(0),\n\t\t\tboard = this.board;\n\t\tif (board.substr(move, 2) == 'T_') {\n\t\t\tboard = board.substring(0, move) + '_T' + board.substring(move + 2);\n\t\t} else if (board.substr(move, 2) == '_F') {\n\t\t\tboard = board.substring(0, move) + 'F_' + board.substring(move + 2);\n\t\t} else if (board.substr(move, 3) == 'TF_') {\n\t\t\tboard = board.substring(0, move) + '_FT' + board.substring(move + 3);\n\t\t} else if (board.substr(move, 3) == '_TF') {\n\t\t\tboard = board.substring(0, move) + 'FT_' + board.substring(move + 3);\n\t\t} else {\n\t\t\tthrow new Error('Invalid move ', move, ' for board <', board, '>.');\n\t\t}\n\t\treturn new this.constructor(this.opponent(), board);\n\t},\n\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'ToadsAndFrogs',\n\t\tserializer: function serialize_ToadsAndFrogs(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t}\t\n}); // declare ToadsAndFrogs\n","/** # Pig.\n\n[Pig](http://en.wikipedia.org/wiki/Pig_%28dice_game%29) is a simple dice betting game, used as an \nexample of a game with random variables.\n*/\ngames.Pig = declare(Game, {\n\t/** The constructor takes:\n\t\n\t\t+ `activePlayer='One'`: The active player.\n\t\t+ `goal=100`: The amount of points a player has to reach to win the game.\n\t\t+ `scores`: The scores so far in the match.\n\t\t+ `rolls`: The rolls the active player has made in his turn.\n\t*/\n\tconstructor: function Pig(activePlayer, goal, scores, rolls) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.goal = isNaN(goal) ? 100 : +goal;\n\t\tthis.__scores__ = scores || iterable(this.players).zip([0, 0]).toObject();\n\t\tthis.__rolls__ = rolls || [];\n\t},\n\t\n\tname: 'Pig',\n\t\n\t/** Players for Pig are named `One`, `Two`.\n\t*/\n\tplayers: ['One', 'Two'],\n\n\t/** The active player can either hold and pass the turn, or roll.\n\t*/\n\tmoves: function moves() {\n\t\tif (!this.result()) {\n\t\t\tvar activePlayer = this.activePlayer(),\n\t\t\t\tcurrentScore = this.__scores__[activePlayer] + iterable(this.__rolls__).sum();\n\t\t\treturn obj(activePlayer, this.__rolls__.length < 1 ? ['roll'] :\n\t\t\t\tcurrentScore >= this.goal ? ['hold'] : ['roll', 'hold']);\n\t\t}\n\t},\n\n\t/** A Pig match finishes when one player reaches or passes the goal score. The result for each \n\tplayer is the difference between its score and its opponent's score.\n\t*/\n\tresult: function result() {\n\t\tvar score0 = this.__scores__[this.players[0]],\n\t\t\tscore1 = this.__scores__[this.players[1]];\n\t\tif (score0 >= this.goal || score1 >= this.goal) {\n\t\t\tvar r = {};\n\t\t\tr[this.players[0]] = Math.min(this.goal, score0) - Math.min(this.goal, score1);\n\t\t\tr[this.players[1]] = -r[this.players[0]];\n\t\t\treturn r;\n\t\t}\n\t},\n\n\t/** If the active player holds, it earns the sum of the rolls made so in its turn. If the move \n\tis roll, a die is rolled. A roll of 1 stops the this turn and the active player earns no \n\tpoints. A roll of 2 or up, makes the turn continue.\n\t\n\tFor this game mechanic, an [contingent game state](../Contingent.js.html) is used. If the move \n\tis `roll`, an instance of this class is build and returned using the [dice shotcuts](\n\t../aleatories/dice.js.html) as random variables. This aleatoric game state will call the `next` \n\tmethod again with the same moves and the values of the random variables, and then the match will\n\tcontinue.\n\t*/\n\tnext: function next(moves, haps) {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tmove = moves && moves[activePlayer];\n\t\traiseIf(!move, 'No move for active player ', activePlayer, ' at ', this, '!');\n\t\tif (move === 'hold') {\n\t\t\tvar scores = copy(this.__scores__);\n\t\t\tscores[activePlayer] += iterable(this.__rolls__).sum();\n\t\t\treturn new this.constructor(this.opponent(), this.goal, scores, []);\n\t\t} else if (move === 'roll') {\n\t\t\tvar roll = (haps && haps.die)|0;\n\t\t\tif (!roll) { // Dice has not been rolled.\n\t\t\t\treturn new Contingent({ die: aleatories.dice.D6 }, this, moves);\n\t\t\t} else { // Dice has been rolled.\n\t\t\t\treturn (roll > 1) ? \n\t\t\t\t\tnew this.constructor(activePlayer, this.goal, this.__scores__, this.__rolls__.concat(roll)) :\n\t\t\t\t\tnew this.constructor(this.opponent(), this.goal, this.__scores__, []);\n\t\t\t}\n\t\t} else {\n\t\t\traise(\"Invalid moves \", JSON.stringify(moves), \" at \", this, \"!\");\n\t\t}\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\n\t/** The `resultBounds` for a Pig game are estimated with the goals.\n\t*/\n\tresultBounds: function resultBounds() {\n\t\treturn [-this.goal, +this.goal];\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Pig',\n\t\tserializer: function serialize_Pig(obj) {\n\t\t\treturn [obj.activePlayer(), obj.goal, obj.__scores__, obj.__rolls__];\n\t\t}\n\t}\n}); // Pig.\n","/** # Mutropas\n\nMutropas is a game invented for Ludorum as a simple example of a game of hidden (a.k.a. incomplete)\ninformation. It is also a simultaneous game.\n*/\ngames.Mutropas = declare(Game, {\n\tname: 'Mutropas',\n\t\n\t/** The players' roles are `\"Left\"` and `\"Right\"`.\n\t*/\n\tplayers: ['Left', 'Right'],\n\n\t/** The constructor takes an `args` object with:\n\t\n\t+ `pieces`: an object with the available pieces for each player. By default pieces get randomly\n\tdealt.\n\t\n\t+ `scores`: an object with current score for each player (0 by default for all players).\n\t\n\t+ `random`: the pseudorandom number generator to use (`base.Randomness.DEFAULT` by default).\n\t*/\n\tconstructor: function Mutropas(args) {\n\t\tGame.call(this, this.players);\n\t\targs = args || {};\n\t\tthis.playedPieces = args.playedPieces || [];\n\t\tthis.pieces = args.pieces || this.dealPieces();\n\t\tthis.__scores__ = args.scores || obj(this.players[0], 0, this.players[1], 0);\n\t},\n\t\n\t\n\t/** All the pieces to be used in a match of Mutropas are stored in `allPieces`, which by default\n\thas the numbers from 0 to 8.\n\t*/\n\tallPieces: Iterable.range(9).toArray(),\t\n\t\n\t/** The method `dealPieces` is used to split the pieces randomly between all players. Half the\n\tpieces go to each player, and one is left out.\n\t*/\n\tdealPieces: function dealPieces(random) {\n\t\trandom = random || Randomness.DEFAULT;\n\t\tvar piecesPerPlayer = (this.allPieces.length / 2)|0,\n\t\t\tsplit1 = random.split(piecesPerPlayer, this.allPieces),\n\t\t\tsplit2 = random.split(piecesPerPlayer, split1[1]);\n\t\treturn obj(this.players[0], split1[0], this.players[1], split2[0]);\n\t},\n\t\n\t/** Mutropas is a simultaneous game. Hence every turn all players can move. The moves are the\n\tpieces of each player that have not been played.\n\t*/\n\tmoves: function moves() {\n\t\treturn this.result() ? null : copy({}, this.pieces);\n\t},\n\t\n\t/** If all pieces are put in a circle, each piece beats half the pieces next to it, and it is \n\tbeaten by half the pieces before it. For example if `allPieces` where `[0,1,2,3,4]`:\n\t\n\t+ piece `1` would beat pieces `2` and `3`, and lose against `4` and `0`,\n\t+ piece `2` would beat pieces `3` and `4`, and lose against `0` and `1`,\n\t+ piece `4` would beat pieces `0` and `1`, and lose against `2` and `3`,\n\t\n\tThe `moveResult` returns 1 if `piece1` beats `piece2` or -1 if otherwise.\n\t*/\n\tmoveResult: function moveResult(piece1, piece2) {\n\t\tvar upperBound = iterable(this.allPieces).max(0) + 1;\n\t\tif (piece1 < piece2) {\n\t\t\treturn piece2 - piece1 <= (upperBound / 2) ? 1 : -1;\n\t\t} else if (piece1 > piece2) {\n\t\t\treturn piece1 - piece2 >= (upperBound / 2) + 1 ? 1 : -1;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t},\n\t\n\t/** Each turn all players play a piece, and the player who plays the greatest piece wins a \n\tpoint.\n\t*/\n\tnext: function next(moves) {\n\t\tvar player0 = this.players[0], player1 = this.players[1],\n\t\t\tmove0 = moves[player0], move1 = moves[player1],\n\t\t\tpieces = this.pieces;\n\t\traiseIf(pieces[player0].indexOf(move0) < 0, \"Invalid move \", JSON.stringify(move0),\n\t\t\t\" for player \", player0, \"! (moves= \", JSON.stringify(moves), \")\");\n\t\traiseIf(pieces[player1].indexOf(move1) < 0, \"Invalid move \", JSON.stringify(move1),\n\t\t\t\" for player \", player1, \"! (moves= \", JSON.stringify(moves), \")\");\n\t\tvar moveResult = this.moveResult(move0, move1);\n\t\treturn new this.constructor({\n\t\t\trandom: this.random,\n\t\t\tplayedPieces: this.playedPieces.concat([move0, move1]),\n\t\t\tpieces: obj(\n\t\t\t\tplayer0, pieces[player0].filter(function (p) { \n\t\t\t\t\treturn p !== move0; \n\t\t\t\t}), \n\t\t\t\tplayer1, pieces[player1].filter(function (p) { \n\t\t\t\t\treturn p !== move1;\n\t\t\t\t})\n\t\t\t),\n\t\t\tscores: obj(\n\t\t\t\tplayer0, this.__scores__[player0] + moveResult,\n\t\t\t\tplayer1, this.__scores__[player1] - moveResult\n\t\t\t)\n\t\t});\n\t},\n\t\n\t/** The game's `score` is simply the sum of the move results for each player.\n\t*/\n\tscores: function scores() {\n\t\treturn copy({}, this.__scores__);\n\t},\n\t\n\t/** A game of Mutropas ends when the players have no more pieces to play. The result is the \n\tdifference in scores.\n\t*/\n\tresult: function result() {\n\t\tvar players = this.players;\n\t\tif (this.playedPieces.length >= this.allPieces.length - 1) {\n\t\t\tvar scores = this.scores();\n\t\t\treturn this.zerosumResult(scores[players[0]] - scores[players[1]], players[0]);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t},\n\t\n\t// ## Game views ###############################################################################\n\t\n\t/** The method `__possiblePieces__` calculates the pieces the `player` may have.\n\t*/\n\t__possiblePieces__: function __possiblePieces__(player) {\n\t\tvar playedPieces = this.playedPieces,\n\t\t\topponentPieces = this.pieces[this.opponent(player)],\n\t\t\tpossiblePieces = iterable(this.allPieces).filter(function (p) {\n\t\t\t\treturn playedPieces.indexOf(p) < 0 && // p has not been played yet ...\n\t\t\t\t\topponentPieces.indexOf(p) < 0; // ... and the opponent does not have it.\n\t\t\t});\n\t\treturn possiblePieces.combinations(possiblePieces.count() - 1);\n\t},\n\t\n\t/** In this view of the game the hidden information is modelled as random variables. The \n\taleatory that is returned ranges over all possible piece sets that the opponent of the given\n\t`player` may have. After each possibility the assumption is maintained for the rest of the\n\tgame.\n\t\n\tThis allows to model the uncertainty that each player has about its opponent's pieces. By doing\n\tso an artificial player that searches the game space cannot infer the pieces the opponent has,\n\tand hence it cannot cheat.\n\t*/\t\n\tview: function view(player) {\n\t\tvar opponent = this.opponent(player);\n\t\treturn new Contingent({ pieces: new UniformAleatory(this.__possiblePieces__(opponent)) }, this);\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Mutropas',\n\t\tserializer: function serialize_Mutropas(obj) {\n\t\t\treturn [{\n\t\t\t\tpieces: obj.pieces, \n\t\t\t\tplayedPieces: obj.playedPieces,\n\t\t\t\tscores: obj.__scores__\n\t\t\t}];\n\t\t}\n\t}\n}); // declare Mutropas","/** # Bahab\n\nBahab is a chess-like board game originally designed for Ludorum.\n*/\ngames.Bahab = declare(Game, {\n\tname: 'Bahab',\n\t\n\t/** Players are `Uppercase` and `Lowercase`.\n\t*/\n\tplayers: ['Uppercase', 'Lowercase'],\n\t\n\t/** The constructor takes the `activePlayer` (Uppercase by default) and the `board` as a string \n\t(`initialBoard` by default).\n\t*/\n\tconstructor: function Bahab(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = board instanceof CheckerboardFromString ? board\n\t\t\t: new CheckerboardFromString(5, 5, board || this.initialBoard);\n\t},\n\t\n\t/** The `initialBoard` has two ranks of pieces for each player. All B pieces except one A piece \n\tat the center of the first rank.\n\t*/\n\tinitialBoard: ['BBABB', 'BBBBB', '.....', 'bbbbb', 'bbabb'].join(''),\n\n\t/** `__PLAYER_ENDGAME_RE__` regular expressions are used to optimize result calculations. They \n\tmatch if the player has no A piece or if its opponent has an A piece in its rank.\n\t*/\n\t__PLAYER_ENDGAME_RE__: {\n\t\tUppercase: /^[.Bab]+$|^.{0,4}[a]/, \n\t\tLowercase: /^[.bAB]+$|[A].{0,4}$/ \n\t},\n\t\n\t/** A player wins when it moves its A piece to the opponent's first rank, and loses when its A \n\tpiece is captured by the opponent.\n\t*/\n\tresult: function result() {\n\t\tvar board = this.board.string, player;\n\t\tfor (var i = 0; i < 2; ++i) {\n\t\t\tplayer = this.players[i];\n\t\t\tif (board.match(this.__PLAYER_ENDGAME_RE__[player])) {\n\t\t\t\treturn this.defeat(player); \n\t\t\t}\n\t\t}\n\t\treturn this.moves() ? null : this.defeat(this.activePlayer());\n\t},\n\t\n\t/** `__PLAYER_PIECES_RE__` regular expressions are used to optimize move calculations.\n\t*/\n\t__PLAYER_PIECES_RE__: {\n\t\tUppercase: /[AB]/g,\n\t\tLowercase: /[ab]/g\n\t},\n\t\n\t/** All pieces move one square forward. Piece A can move straight backwards or diagonally \n\tforward, and B pieces move only diagonally forward. Pieces can move to any square that is empty \n\tor occupied by an opponent's piece of the same type. If the piece moves to an occupied square, \n\tit captures the piece in it.\n\t*/\n\tmoves: function moves() {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tpieceRegExp = this.__PLAYER_PIECES_RE__[activePlayer],\n\t\t\tboard = this.board,\n\t\t\t_moves = [];\n\t\tboard.string.replace(pieceRegExp, function (piece, i) {\n\t\t\tvar coord = [(i / 5)|0, i % 5], pieceMoves;\n\t\t\tswitch (piece) {\n\t\t\t\tcase 'A': pieceMoves = [[+1,-1], [-1, 0], [+1,+1]]; break;\n\t\t\t\tcase 'B': pieceMoves = [[+1,-1], [+1,+1]]; break;\n\t\t\t\tcase 'a': pieceMoves = [[-1,-1], [+1, 0], [-1,+1]]; break;\n\t\t\t\tcase 'b': pieceMoves = [[-1,-1], [-1,+1]]; break;\n\t\t\t}\n\t\t\titerable(pieceMoves).forEachApply(function (dx, dy) {\n\t\t\t\tvar coordTo = [coord[0] + dx, coord[1] + dy],\n\t\t\t\t\tsquareTo = board.square(coordTo);\n\t\t\t\tif (board.isValidCoord(coordTo) && !squareTo.match(pieceRegExp) &&\n\t\t\t\t\t\t(squareTo == '.' || piece.toLowerCase() == squareTo.toLowerCase())) {\n\t\t\t\t\t_moves.push([coord, coordTo]); // Valid coordinate and not occupied by a friendly piece.\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn piece;\n\t\t});\n\t\treturn _moves.length > 0 ? obj(activePlayer, _moves) : null;\n\t},\n\t\n\t/** Valid move for this game are pairs of coordinates (`[row, column]`), the first one being \n\twhere the moving piece starts, and the second one being where the moving piece ends.\t\n\t*/\n\tnext: function next(moves) {\n\t\tif (!moves) {\n\t\t\tthrow new Error(\"Invalid moves \"+ moves +\"!\");\n\t\t}\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tmove = moves[activePlayer];\n\t\tif (!Array.isArray(moves[activePlayer])) {\n\t\t\tthrow new Error(\"Invalid moves \"+ JSON.stringify(moves) +\"!\");\n\t\t}\n\t\treturn new this.constructor(this.opponent(), this.board.move(move[0], move[1]));\n\t},\n\t\n\t// ## User intefaces ###########################################################################\n\t\n\t/** The `display(ui)` method is called by a `UserInterface` to render the game state. The only \n\tsupported user interface type is `BasicHTMLInterface`. The look can be configured using CSS \n\tclasses.\n\t*/\n\tdisplay: function display(ui) {\n\t\traiseIf(!ui || !(ui instanceof UserInterface.BasicHTMLInterface), \"Unsupported UI!\");\n\t\treturn this.__displayHTML__(ui);\n\t},\n\t\n\t/** The game board is rendered in HTML as a table. The look can be customized with CSS classes.\n\t*/\n\t__displayHTML__: function __displayHTML__(ui) {\n\t\tvar game = this,\n\t\t\tmoves = this.moves(),\n\t\t\tactivePlayer = this.activePlayer(),\n\t\t\tboard = this.board,\n\t\t\tclassNames = {\n\t\t\t\t'A': \"ludorum-square-Uppercase-A\", 'B': \"ludorum-square-Uppercase-B\",\n\t\t\t\t'a': \"ludorum-square-Lowercase-A\", 'b': \"ludorum-square-Lowercase-B\",\n\t\t\t\t'.': \"ludorum-square-empty\"\n\t\t\t},\n\t\t\tmovesByFrom = moves ? iterable(moves[activePlayer]).groupAll(function (m) {\n\t\t\t\treturn JSON.stringify(m[0]);\n\t\t\t}) : {},\n\t\t\tselectedMoves = ui.selectedPiece && \n\t\t\t\tmovesByFrom[JSON.stringify(ui.selectedPiece)].map(function (m) {\n\t\t\t\t\treturn JSON.stringify(m[1]);\n\t\t\t\t});\n\t\tboard.renderAsHTMLTable(ui.document, ui.container, function (data) {\n\t\t\tdata.className = classNames[data.square];\n\t\t\tdata.innerHTML = data.square == '.' ? ' ' : data.square;\n\t\t\tif (ui.selectedPiece) {\n\t\t\t\tif (selectedMoves && selectedMoves.indexOf(JSON.stringify(data.coord)) >= 0) {\n\t\t\t\t\tdata.className = \"ludorum-square-\"+ activePlayer +\"-move\";\n\t\t\t\t\tdata.onclick = function () {\n\t\t\t\t\t\tvar selectedPiece = ui.selectedPiece;\n\t\t\t\t\t\tui.selectedPiece = (void 0);\n\t\t\t\t\t\tui.perform([selectedPiece, data.coord], activePlayer);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (movesByFrom.hasOwnProperty(JSON.stringify(data.coord))) {\n\t\t\t\tdata.onclick = function () {\n\t\t\t\t\tui.selectedPiece = data.coord;\n\t\t\t\t\tui.display(game); // Redraw the game state.\t\t\t\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t\treturn ui;\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Bahab',\n\t\tserializer: function serialize_Bahab(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t}\n}); // declare Bahab.","/** # RoundRobin\n\n[Round-robins](http://en.wikipedia.org/wiki/Round-robin_tournament) are \ntournaments where all players play against each other a certain number of times.\n*/\ntournaments.RoundRobin = declare(Tournament, {\n\t/** The constructor takes the `game` to be played, the `players` and the \n\tamount of matches each player should play (`matchCount`).\n\t*/\n\tconstructor: function RoundRobin(game, players, matchCount) {\n\t\tTournament.call(this, game, players);\n\t\tthis.matchCount = isNaN(matchCount) ? game.players.length : +matchCount;\n\t\tthis.__advance__ = this.__matches__().chain(Iterable.repeat(null)).__iter__();\n\t},\n\n\t/** Round-robin matches make every player plays `matchCount` matches for \n\teach role in the game against all the other opponents.\n\t*/\n\t__matches__: function __matches__() {\n\t\tvar tournament = this,\n\t\t\tgame = this.game,\n\t\t\tms = iterable(this.players);\n\t\tms = ms.product.apply(ms, Iterable.repeat(this.players, game.players.length - 1).toArray());\n\t\treturn ms.filter(function (tuple) { // Check for repeated.\n\t\t\tfor (var i = 1; i < tuple.length; i++) {\n\t\t\t\tfor (var j = 0; j < i; j++) {\n\t\t\t\t\tif (tuple[i] === tuple[j]) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}).product(Iterable.range(this.matchCount)).map(function (tuple) {\n\t\t\treturn new Match(game, tuple[0]);\n\t\t});\n\t}\n}); //// declare RoundRobin.\n","/** # Measurement\n\nMeasurement tournaments pit the player being measured against others in order\nto assess that player's performance at a game. They are used to evaluate how \nwell the players play by confronting them with the opponents, rotating their \nroles in the matches.\n*/\ntournaments.Measurement = declare(Tournament, {\n\t/** The constructor takes the `game` used in the contest, the `players`\n\tbeing evaluated, the `opponents` used to evaluate them, and the amount of\n\tmatches each player will play (`matchCount`).\n\t*/\n\tconstructor: function Measurement(game, players, opponents, matchCount) {\n\t\tTournament.call(this, game, Array.isArray(players) ? players : [players]);\n\t\tthis.opponents = Array.isArray(opponents) ? opponents : [opponents];\n\t\traiseIf(this.opponents.length < game.players.length - 1, \"Not enough opponents.\");\n\t\tthis.matchCount = isNaN(matchCount) ? game.players.length : +matchCount;\n\t\tthis.__advance__ = this.__matches__().chain(Iterable.repeat(null)).__iter__();\n\t},\n\n\t/** A measurement tournament makes every player play `matchCount` matches \n\tfor each role in the game against all possible combinations of opponents.\n\t*/\n\t__matches__: function __matches__() {\n\t\tvar game = this.game,\n\t\t\tplayerCount = game.players.length,\n\t\t\topponentCombinations = iterable(this.opponents);\n\t\tif (playerCount > 2) {\n\t\t\topponentCombinations = opponentCombinations.product.apply(opponentCombinations, \n\t\t\t\tIterable.repeat(this.opponents, playerCount - 2).toArray());\n\t\t} else {\n\t\t\topponentCombinations = opponentCombinations.map(function (p) {\n\t\t\t\treturn [p];\n\t\t\t});\n\t\t}\n\t\treturn iterable(this.players).product( \n\t\t\tIterable.range(playerCount),\n\t\t\topponentCombinations,\n\t\t\tIterable.range(this.matchCount)).map(function (tuple){\n\t\t\t\tvar players = tuple[2].slice(0);\n\t\t\t\tplayers.splice(tuple[1], 0, tuple[0]);\n\t\t\t\treturn new Match(game, players);\n\t\t\t});\n\t}\n}); //// declare Measurement.\n","/** # Elimination\n\nPlayoffs or sudden death kind of contests, also known as \n[elimination tournaments](http://en.wikipedia.org/wiki/Single-elimination_tournament).\nIn this tournaments players get randomly matched in successive brackets, each \nmatch's winner passing to the next round until the final match. Games are \nassumed to have only one winner per match.\n*/\ntournaments.Elimination = declare(Tournament, {\n\t/** The constructor takes the `game` to be played, the `players` and the \n\tamount of matches that make each playoff (`matchCount`, 1 by default).\n\t*/\n\tconstructor: function Elimination(game, players, matchCount) {\n\t\tTournament.call(this, game, players);\n\t\tthis.matchCount = isNaN(matchCount) ? 1 : +matchCount >> 0;\n\t},\n\n\t/** Each bracket is defined by partitioning the `players` in groups of the\n\tsize required by the game (usually two). If there are not enough players,\n\tsome players get reassigned. The bracket includes `matchCount` matches \n\tbetween these participants, rotating roles if possible.\n\t*/\n\t__bracket__: function __bracket__(players) {\n\t\tvar game = this.game,\n\t\t\tmatchCount = this.matchCount,\n\t\t\troleCount = this.game.players.length;\n\t\tplayers = players || this.players;\n\t\tif (players.length < roleCount) {\n\t\t\treturn [];\n\t\t} else {\n\t\t\treturn Iterable.range(0, players.length, roleCount).map(function (i) {\n\t\t\t\tvar participants = Iterable.range(i, i + roleCount).map(function (j) {\n\t\t\t\t\treturn players[j % players.length]; // Fill by repeating players if necessary.\n\t\t\t\t}).toArray();\n\t\t\t\treturn Iterable.range(matchCount).map(function (i) {\n\t\t\t\t\tparticipants.unshift(participants.pop()); // Rotate partipants roles.\n\t\t\t\t\treturn new Match(game, participants);\n\t\t\t\t}).toArray();\n\t\t\t}).toArray();\n\t\t}\n\t},\n\t\n\t/** A playoff is resolved by aggregating the results of all its matches. The\n\twinner of the playoff is the one with the greater result sum.\n\t*/\n\t__playoff__: function __playoff__(matches) {\n\t\tvar playoffResult = {},\n\t\t\tplayers = {};\n\t\tmatches.forEach(function (match) {\n\t\t\tvar matchResult = match.result();\n\t\t\tif (!matchResult) {\n\t\t\t\tthrow new Error('Unfinished match in playoff!');\n\t\t\t}\n\t\t\titerable(match.players).forEach(function (tuple) {\n\t\t\t\tvar role = tuple[0],\n\t\t\t\t\tplayerName = tuple[1].name;\n\t\t\t\tplayoffResult[playerName] = (+playoffResult[playerName] || 0) + matchResult[role];\n\t\t\t\tplayers[playerName] = tuple[1];\n\t\t\t});\n\t\t});\n\t\tvar winnerName = iterable(playoffResult).greater(function (pair) {\n\t\t\treturn pair[1];\n\t\t})[0][0];\n\t\treturn players[winnerName];\n\t},\n\t\n\t/** The elimination tournament runs until there is less players in the next\n\tbracket than the amount required to play the game. Since this amount is \n\tusually two, the contest ends with one player at the top.\n\t*/\n\t__advance__: function __advance__() {\n\t\tif (!this.__matches__ || this.__matches__.length < 1) {\n\t\t\tif (!this.__currentBracket__) { // First bracket.\n\t\t\t\tthis.__currentBracket__ = this.__bracket__(this.players);\n\t\t\t} else if (this.__currentBracket__.length < 1) { // Tournament is finished.\n\t\t\t\treturn null;\n\t\t\t} else { // Second and on brackets.\n\t\t\t\tvar players = this.__currentBracket__.map(this.__playoff__);\n\t\t\t\tthis.__currentBracket__ = this.__bracket__(players);\n\t\t\t}\n\t\t\tthis.__matches__ = iterable(this.__currentBracket__).flatten().toArray();\n\t\t}\t\n\t\treturn this.__matches__.shift();\n\t}\n}); //// declare Elimination.\n","// See __prologue__.js\n\t[Match,\n\t\tgames.Bahab, games.Choose2Win, games.ConnectionGame, games.Mutropas, games.OddsAndEvens,\n\t\t\tgames.Pig, games.Predefined, games.TicTacToe, games.ToadsAndFrogs,\n\t\taleatories.Aleatory, aleatories.UniformAleatory,\n\t\tutils.CheckerboardFromString\n\t].forEach(function (type) {\n\t\ttype.__SERMAT__.identifier = exports.__package__ +'.'+ type.__SERMAT__.identifier;\n\t\texports.__SERMAT__.include.push(type);\n\t});\n\tSermat.include(exports); // Ludorum uses Sermat internally.\n\n\treturn exports;\n});"]} \ No newline at end of file +{"version":3,"sources":["../src/__prologue__.js","../src/Game.js","../src/Player.js","../src/Match.js","../src/Contingent.js","../src/Tournament.js","../src/utils/Checkerboard.js","../src/utils/CheckerboardFromString.js","../src/utils/CheckerboardFromPieces.js","../src/utils/Scanner.js","../src/utils/Cache.js","../src/utils/GameTree.js","../src/players/RandomPlayer.js","../src/players/TracePlayer.js","../src/players/HeuristicPlayer.js","../src/players/MaxNPlayer.js","../src/players/MiniMaxPlayer.js","../src/players/AlphaBetaPlayer.js","../src/players/MonteCarloPlayer.js","../src/players/UCTPlayer.js","../src/players/UserInterfacePlayer.js","../src/players/WebWorkerPlayer.js","../src/aleatories/Aleatory.js","../src/aleatories/UniformAleatory.js","../src/aleatories/dice.js","../src/games/Predefined.js","../src/games/Choose2Win.js","../src/games/ConnectionGame.js","../src/games/OddsAndEvens.js","../src/games/TicTacToe.js","../src/games/ToadsAndFrogs.js","../src/games/Pig.js","../src/games/Mutropas.js","../src/games/Bahab.js","../src/tournaments/RoundRobin.js","../src/tournaments/Measurement.js","../src/tournaments/Elimination.js","../src/__epilogue__.js"],"names":[],"mappings":"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","file":"ludorum.js","sourcesContent":["/** Package wrapper and layout.\n*/\n(function (global, init) { \"use strict\"; // Universal Module Definition.\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['creatartis-base', 'sermat'], init); // AMD module.\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = init(require('creatartis-base'), require('sermat')); // CommonJS module.\n\t} else { // Browser or web worker (probably).\n\t\tglobal.ludorum = init(global.base, global.Sermat); // Assumes base is loaded.\n\t}\n})(this, function __init__(base, Sermat) { \"use strict\";\n// Import synonyms. ////////////////////////////////////////////////////////////////////////////////\n\tvar unimplemented = base.objects.unimplemented,\n\t\tobj = base.obj,\n\t\tcopy = base.copy,\n\t\traise = base.raise,\n\t\traiseIf = base.raiseIf,\n\t\tdeclare = base.declare,\n\t\tIterable = base.Iterable,\n\t\titerable = base.iterable,\n\t\tFuture = base.Future,\n\t\tRandomness = base.Randomness,\n\t\tinitialize = base.initialize,\n\t\tStatistics = base.Statistics,\n\t\tEvents = base.Events;\n\n// Library layout. /////////////////////////////////////////////////////////////////////////////////\n\tvar exports = {\n\t\t\t__package__: 'ludorum',\n\t\t\t__name__: 'ludorum',\n\t\t\t__init__: __init__,\n\t\t\t__dependencies__: [base, Sermat],\n\t\t\t__SERMAT__: { include: [base] }\n\t\t},\n\t\t/** The library is organized in the following _namespaces_.\n\t\t*/\n\t\taleatories = exports.aleatories = {},\n\t\tgames = exports.games = {},\n\t\tplayers = exports.players = {},\n\t\ttournaments = exports.tournaments = {},\n\t\tutils = exports.utils = {}\n\t;","/** # Game\n\nThe class `ludorum.Game` is the base type for all games.\n*/\nvar Game = exports.Game = declare({\n\t/** Its constructor takes the active player/s. A player is active if and only if it can move. \n\tThe argument may be either a player's name (string) or an array of players' names. It is used to\n\tinitialize `Game.activePlayers`, an array with the active players' names.\n\t*/\n\tconstructor: function Game(activePlayers) {\n\t\tthis.activePlayers = !activePlayers ? [this.players[0]] : \n\t\t\t(!Array.isArray(activePlayers) ? [activePlayers] : activePlayers);\n\t},\n\n\t/** The game's `name` is used mainly for displaying purposes.\n\t*/\n\tname: '?',\n\t\n\t/** The game `players` are specified in an array of role names (strings), that the players can \n\tassume in a match of this game. For example: `\"Xs\"` and `\"Os\"` in TicTacToe, or `\"Whites\"` and \n\t`\"Blacks\"` in Chess.\n\t*/\n\tplayers: [],\n\n\t/** The moves of each active player are calculated by `moves()`. This method returns an object \n\twith every active player related to the moves each can make in this turn. For example: \n\t\n\t+ `{ Player1: ['Rock', 'Paper', 'Scissors'], Player2: ['Rock', 'Paper', 'Scissors'] }`\n\t\t\n\tIf the game has finished then a _falsy_ value must be returned (`null` is recommended).\n\t*/\n\tmoves: unimplemented(\"Game\", \"moves()\"),\n\n\t/** Once the players have chosen their moves, the method `next` is used to perform the given \n\tmoves. It returns a new game instance with the resulting state. The first `moves` argument \n\tshould be an object with a move for each active player. For example:\n\n\t+ `{ Player1: 'Rock', Player2: 'Paper' }`\n\t\n\tThere isn't a default implementation, so it must be overriden. It is strongly advised to check \n\tif the arguments are valid.\n\t*/\n\tnext: unimplemented(\"Game\", \"next(moves)\"),\n\n\t/** If the game is finished the result of the game is calculated with `result()`. It returns an \n\tobject with every player in the game related to a number. This number must be positive if the \n\tplayer wins, negative if the player loses or zero if the game is a tie. For example:\n\t\n\t+ `{ Player1: -1, Player2: +1 }`\n\t\n\tIf the game is not finished, this function must return a _falsy_ value (`null` is recommended).\n\t*/\n\tresult: unimplemented(\"Game\", \"result()\"),\n\n\t/** Some games may assign scores to the players in a finished game. This may differ from the\n\tresult, since the score sign doesn't have to indicate victory or defeat. For example:\n\t\n\t+ result: `{ Player1: -1, Player2: +1 }`\n\t+ scores: `{ Player1: 14, Player2: 15 }`\n\t\n\tThe method `scores()` returns the scores if such is the case. Also the score may be defined for\n\tunfinished games.\n\t\n\tBy default, it return the same that `result()` does.\n\t*/\n\tscores: function scores() {\n\t\treturn this.results();\n\t},\n\t\n\t/** In incomplete or imperfect information games players have different access to the game state\n\tdata. The method `view(player)` returns a modified version of this game, that shows only the\n\tinformation from the perspective of the given player. The other information is modelled as\n\taleatory variables.\n\t\n\tIn this way searches in the game tree can be performed without revealing to\tthe automatic player \n\tinformation it shouldn't have access to (a.k.a _cheating_).\n\t*/\n\tview: function view(player) {\n\t\treturn this;\n\t},\n\t\n\t// ## Player information #######################################################################\n\n\t/** Method `isActive(player...)` checks if the given players are all active.\n\t*/\n\tisActive: function isActive() {\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tif (this.activePlayers.indexOf(arguments[i]) < 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/** In most games there is only one active player per turn. The method `activePlayer()` returns \n\tthat active player's role if there is one and only one, else it raises an error.\n\t*/\n\tactivePlayer: function activePlayer() {\n\t\tvar len = this.activePlayers.length;\n\t\traiseIf(len < 1, 'There are no active players!');\n\t\traiseIf(len > 1, 'More than one player is active!');\n\t\treturn this.activePlayers[0];\n\t},\n\n\t/** All players in a game are assumed to be opponents. The method `opponents(players=activePlayers)` \n\treturns an array with the opponent roles of the given players, or of the active players by \n\tdefault. If not all players are opponents this method can be overriden.\n\t*/\n\topponents: function opponents(players) {\n\t\tplayers = players || this.activePlayers;\n\t\treturn this.players.filter(function (p) {\n\t\t\treturn players.indexOf(p) < 0;\n\t\t});\n\t},\n\n\t/** Since most games have only two players, the method `opponent(player=activePlayer)`\n\tconveniently returns the opponent of the given player, or the active player by default.\n\t*/\n\topponent: function opponent(player) {\n\t\tvar playerIndex = this.players.indexOf(player || this.activePlayer());\n\t\treturn this.players[(playerIndex + 1) % this.players.length];\n\t},\n\n\t// ## Game flow ################################################################################\n\t\n\t/** Since `next()` expects a moves object, the method `perform(move, player=activePlayer, ...)`\n\tpretends to simplify simpler game mechanics. It performs the given moves for the given players\n\t(activePlayer by default) and returns the next game state.\n\t*/\n\tperform: function perform() {\n\t\tvar moves = {}, player;\n\t\tfor (var i = 0; i < arguments.length; i += 2) {\n\t\t\tplayer = arguments[i + 1];\n\t\t\tif (typeof player === 'undefined') {\n\t\t\t\tplayer = this.activePlayer();\n\t\t\t}\n\t\t\tmoves[player] = arguments[i];\n\t\t}\n\t\treturn this.next(moves);\n\t},\n\n\t/** The method `moves()` returns the available moves for each player. Yet this is not the same\n\tas the `moves` objects that can be used with `next()` to obtain a next game state. Furthermore,\n\tif there are more than one active player per turn, the possible decisions can be build with all\n\tcombinations for all active players.\n\t\n\tThe method `possibleMoves(moves=this.moves())` calculates all possible `moves` objects based on \n\tthe result of `moves()`. For example, if `moves()` returns `{A:[1,2], B:[3,4]}`, then \n\t`possibleMoves()` would return `[{A:1, B:3}, {A:1, B:4}, {A:2, B:3}, {A:2, B:4}]`.\n\t*/\n\tpossibleMoves: function possibleMoves(moves) {\n\t\tmoves = arguments.length < 1 ? this.moves() : moves;\n\t\tif (!moves || typeof moves !== 'object') {\n\t\t\treturn [];\n\t\t}\n\t\tvar activePlayers = Object.keys(moves);\n\t\tif (activePlayers.length === 1) { // Most common case.\n\t\t\tvar activePlayer = activePlayers[0];\n\t\t\treturn moves[activePlayer].map(function (move) {\n\t\t\t\treturn obj(activePlayer, move);\n\t\t\t});\n\t\t} else { // Simultaneous games.\n\t\t\treturn Iterable.product.apply(Iterable, \n\t\t\t\titerable(moves).mapApply(function (player, moves) {\n\t\t\t\t\treturn moves.map(function (move) {\n\t\t\t\t\t\treturn [player, move];\n\t\t\t\t\t});\n\t\t\t\t}).toArray()\n\t\t\t).map(function (playerMoves) {\n\t\t\t\treturn iterable(playerMoves).toObject();\n\t\t\t}).toArray();\n\t\t}\n\t},\n\t\n\t// ## Result functions #########################################################################\n\n\t/** The maximum and minimum results may be useful and even required by some game search \n\talgorithm. To expose these values, `resultBounds()` returns an array with first the minimum and\n\tthen the maximum. Most game have one type of victory (+1) and one type of defeat (-1). That's \n\twhy `resultBounds()` returns [-1,+1] by default. Yet some games can define different bounds by \n\toverriding it.\n\t*/\n\tresultBounds: function resultBounds() {\n\t\treturn [-1,+1];\n\t},\n\t\n\t/** The `normalizedResult(result=this.result())` is the `result()` expressed so the minimum \n\tdefeat is equal to -1 and the maximum victory is equal to +1.\n\t*/\n\tnormalizedResult: function normalizedResult(result) {\n\t\tresult = result || this.result();\n\t\tif (result) {\n\t\t\tvar bounds = this.resultBounds();\n\t\t\tresult = base.copy(result);\n\t\t\tfor (var player in result) {\n\t\t\t\tresult[player] = (result[player] - bounds[0]) / (bounds[1] - bounds[0]) * 2 - 1;\n\t\t\t}\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t},\n\t\n\t/** Most games have victory and defeat results that cancel each other. It is said that all the\n\tvictors wins the defeated player loses. Those games are called _zerosum games_. The method \n\t`zerosumResult(score, players=activePlayers)` builds a game result object for a zerosum game.\n\tThe given score is split between the given players (the active players by default), and (-score)\n\tis split between their opponents.\n\t*/\n\tzerosumResult: function zerosumResult(score, players) {\n\t\tplayers = !players ? this.activePlayers : (!Array.isArray(players) ? [players] : players);\n\t\tscore = (+score) / (players.length || 1);\n\t\tvar result = ({}), player,\n\t\t\topponentScore = -score / (this.players.length - players.length || 1);\n\t\tfor (var i = 0; i < this.players.length; i++) {\n\t\t\tplayer = this.players[i];\n\t\t\tresult[player] = players.indexOf(player) < 0 ? opponentScore : score;\n\t\t}\n\t\treturn result;\n\t},\n\n\t/** There are two shortcuts for `zerosumResult()`. First `victory(players=activePlayers, score=1)`\n\treturns the zero-sum game result with the given players (or the active players by default) as\n\twinners, and their opponents as losers.\n\t*/\n\tvictory: function victory(players, score) {\n\t\treturn this.zerosumResult(score || 1, players);\n\t},\n\n\t/** Second `defeat(players=activePlayers, score=-1)` returns the zero-sum game result with the\n\tgiven players (or the active players by default) as losers, and their opponents as winners.\n\t*/\n\tdefeat: function defeat(players, score) {\n\t\treturn this.zerosumResult(score || -1, players);\n\t},\n\n\t/** Finally `draw(players=this.players, score=0)` returns the game result of a tied game with \n\tthe given players (or the active players by default) all with the same score (zero by default).\n\tA tied game must always have the same result for all players.\n\t*/\n\tdraw: function draw(players, score) {\n\t\tscore = +(score || 0);\n\t\tplayers = players || this.players;\n\t\tvar result = ({});\n\t\tfor (var player in players) {\n\t\t\tresult[players[player]] = score;\n\t\t}\n\t\treturn result;\n\t},\n\n\t// ## Conversions & presentations ##############################################################\n\n\t/** Some algorithms require an `identifier()` for each game state, in order to store them in \n\tcaches or hashes. This method calculates a string that uniquely identifies this game state,\n\tbased on the game's serialization.\n\t*/\n\tidentifier: unimplemented(\"Game\", \"identifier\"),\n\n\t/** Based on the game's serialization, `clone()` creates a copy of this game state.\n\t*/\n\tclone: function clone() {\n\t\treturn Sermat.sermat(this);\n\t},\n\n\t/** The default string representation of a game is equal to the result of `toJSON`.\n\t*/\n\ttoString: function toString() {\n\t\treturn Sermat.ser(this);\n\t},\n\t\t\n\t/** ## Cached games ############################################################################\n\n\tA `cached(game)` has modified `moves()` and `result()` methods that cache the calls of the base\n\tgame. The `next()` method is not cached because it may lead to memory leaks or overload.\n\t*/\n\t'static cached': function cached(game) {\n\t\tvar baseMoves = game.prototype.moves,\n\t\t\tbaseResult = game.prototype.result;\n\t\treturn declare(game, {\n\t\t\t/** The first time `moves()` is called, it is delegated to the base game's `moves()`,\n\t\t\tand keeps the value for future calls.\n\t\t\t*/\n\t\t\tmoves: function moves() {\n\t\t\t\tvar result = baseMoves.call(this);\n\t\t\t\tthis.moves = function cachedMoves() { // Replace moves() method with cached version.\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\t\n\t\t\t/** The first time `result()` is called, it is delegated to the base game's `result()`,\n\t\t\tand keeps the value for future calls.\n\t\t\t*/\n\t\t\tresult: function result() {\n\t\t\t\tvar r = game.result.call(this);\n\t\t\t\tthis.result = function cachedResult() { // Replace result() method with cached version.\n\t\t\t\t\treturn r;\n\t\t\t\t};\n\t\t\t\treturn r;\n\t\t\t}\n\t\t});\n\t}, // static cached\n\n\t\n\t/** ## Serialized simultaneous games. ##########################################################\n\t\n\t`serialized(game)` builds a serialized version of a simultaneous game, i.e. one in which two or\n\tmore players may be active in the same turn. It converts a simultaneous game to an alternated\n\tturn based game. This may be useful for using algorithms like MiniMax to build AIs for\n\tsimultaneous games.\n\t*/\n\t'static serialized': function serialized(game) {\n\t\tvar super_moves = game.prototype.moves,\n\t\t\tsuper_next = game.prototype.next;\n\t\treturn declare(game, {\n\t\t\t/** The `moves()` of a serialized game returns the moves of the player deemed as the\n\t\t\tactive player, if there are any moves.\n\t\t\t*/\n\t\t\tmoves: function moves() {\n\t\t\t\tvar fixedMoves = this.__fixedMoves__ || (this.__fixedMoves__ = {}),\n\t\t\t\t\tallMoves = super_moves.call(this),\n\t\t\t\t\tactivePlayer;\n\t\t\t\tfor (var i = 0; i < this.activePlayers.length; i++) {\n\t\t\t\t\tif (fixedMoves.hasOwnProperty(this.activePlayers[i])) {\n\t\t\t\t\t\tactivePlayer = this.activePlayers[i];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn activePlayer && allMoves ? obj(activePlayer, allMoves[activePlayer]) : null;\n\t\t\t},\n\t\t\n\t\t\t/** The `next(moves)` of a serialized game advances the actual game if with the given\n\t\t\tmove all active players in the real game state have moved. Else the next player that has\n\t\t\tto move becomes active.\n\t\t\t*/\n\t\t\tnext: function next(moves) {\n\t\t\t\tvar nextFixedMoves = copy({}, this.fixedMoves || {}, moves),\n\t\t\t\t\tallMoved = iterable(this.players).all(function (p) {\n\t\t\t\t\t\t\treturn nextFixedMoves.hasOwnProperty(p);\n\t\t\t\t\t\t}),\n\t\t\t\t\tresult;\n\t\t\t\tif (allMoved) {\n\t\t\t\t\tresult = super_next.call(this, nextFixedMoves);\n\t\t\t\t\tresult.fixedMoves = {};\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.clone();\n\t\t\t\t\tresult.fixedMoves = nextFixedMoves;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t} // static serialized\n\t\n}); // declare Game.\n","/** # Player\n\nPlayer is the base type for all playing agents. Basically, playing a game means choosing a move from \nall available ones, each time the game enables the player to do so.\n*/\nvar Player = exports.Player = declare({\n\t/** The default constructor takes only its `name` from the given `params`. This is an abstract \n\tclass that is meant to be extended.\n\t*/\n\tconstructor: (function () {\n\t\tvar __PlayerCount__ = 0; // Used by the Player's default naming.\n\t\treturn function Player(params) {\n\t\t\tinitialize(this, params)\n\t\t\t\t.string('name', { defaultValue: 'Player' + (__PlayerCount__++), coerce: true });\n\t\t};\n\t})(),\n\n\t/** A player is asked to choose a move by calling `Player.decision(game, role)`. The result is \n\tthe selected move if it can be obtained synchronously, else a future is returned.\n\t*/\n\tdecision: function decision(game, role) {\n\t\treturn this.movesFor(game, role)[0]; // Indeed not a very thoughtful base implementation. \n\t},\n\n\t/** To help implement the decision, `Player.movesFor(game, player)` gets the moves in the game \n\tfor the player. It also checks if there are any moves, and if it not so an error is risen.\n\t*/\n\tmovesFor: function movesFor(game, role) {\n\t\tvar moves = game.moves();\n\t\traiseIf(!moves || !moves[role] || moves[role].length < 1, \n\t\t\t\"Player \", role, \" has no moves for game \", game, \".\");\n\t\treturn moves[role];\n\t},\n\t\n\t/** Before starting a [match](Match.js.html), all players are asked to join by calling \n\t`Player.participate(match, role)`. This allows the player to prepare properly. If this implies \n\tbuilding another instance of the player object, it must be returned in order to participate in \n\tthe match.\n\t*/\n\tparticipate: function participate(match, role) {\n\t\treturn this;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Player',\n\t\tserializer: function serialize_Player(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name']);\n\t\t}\n\t},\n\t\n\t/** The string representation of the player is derived straight from its serialization.\n\t*/\n\ttoString: function toString() {\n\t\treturn Sermat.ser(this);\n\t}\n}); // declare Player.\n","/** # Match\n\nA match is a controller for a game, managing player decisions, handling the flow of the turns \nbetween the players by following the game's logic.\n*/\nvar Match = exports.Match = declare({\n\t/** `Match` objects are build with the [game's](Game.html) starting state and the players that \n\tparticipate. The players argument must be either an array of [`Player`](Player.html) objects or \n\tan object with a member for each of the game's players with a Player object as value.\n\t*/\n\tconstructor: function Match(game, players) {\n\t\tthis.game = game;\n\t\tthis.players = Array.isArray(players) ? iterable(game.players).zip(players).toObject() : players;\n\t\t/** The match records the sequence of game state in `Match.history`.\n\t\t*/\n\t\tthis.history = [game];\n\t\tthis.events = new Events({ \n\t\t\tevents: ['begin', 'move', 'next', 'end', 'quit']\n\t\t});\n\t\tfor (var p in this.players) { // Participate the players.\n\t\t\tthis.players[p] = this.players[p].participate(this, p) || this.players[p];\n\t\t}\n\t},\n\n\t/** Each step in the match's history is called a ply. `Match.ply()` indicates the current ply \n\tnumber.\n\t*/\n\tply: function ply() {\n\t\treturn this.history.length - 1;\n\t},\n\t\n\t/** Each ply has a game state. `Match.state(ply=last)` retrieves the game state for the given \n\tply, or the last one by default.\n\t*/\n\tstate: function state(ply) {\n\t\tply = isNaN(ply) ? this.ply() : +ply < 0 ? this.ply() + (+ply) : +ply;\n\t\treturn this.history[ply | 0];\n\t},\n\n\t/** If the last game state is finished, then the whole match is finished. If so, \n\t`Match.result()` returns the match result, which is the result of the last game state.\n\t*/\n\tresult: function result() {\n\t\treturn this.state().result();\n\t},\n\n\t/** If the last game state is not finished, then the match continues. To move the play on, \n\t`Match.decisions(game=state())` asks the active players in the game to choose their moves. \n\tReturns a future that is resolved when all players have decided.\n\t*/\n\tdecisions: function decisions(game) {\n\t\tgame = game || this.state();\n\t\tvar match = this,\n\t\t\tplayers = this.players,\n\t\t\tactivePlayers = game.activePlayers;\n\t\treturn Future.all(activePlayers.map(function (p) {\n\t\t\treturn players[p].decision(game.view(p), p);\n\t\t})).then(function (decisions) {\n\t\t\tvar moves = iterable(activePlayers).zip(decisions).toObject();\n\t\t\tmatch.onMove(game, moves);\n\t\t\treturn moves;\n\t\t});\n\t},\n\n\t/** `Match.run(plys=Infinity)` runs the match the given number of plys, or until the game \n\tfinishes. The result is a future that gets resolved when the game ends.\n\t*/\n\trun: function run(plys) {\n\t\tplys = isNaN(plys) ? Infinity : +plys;\n\t\tif (plys < 1) { // If the run must stop...\n\t\t\treturn Future.when(this);\n\t\t}\n\t\tvar ply = this.ply(), game = this.state(), results, next;\n\t\tif (ply < 1) {\n\t\t\tthis.onBegin(game);\n\t\t}\n\t\tgame = this.__advanceContingents__(game); // Remove all non-determinism.\n\t\tresults = game.result();\n\t\tif (results) { // If the match has finished ...\n\t\t\tthis.onEnd(game, results);\n\t\t\treturn Future.when(this);\n\t\t} else { // Else the run must continue ...\n\t\t\tvar match = this;\n\t\t\treturn this.decisions(game).then(function (moves) {\n\t\t\t\tif (match.__advance__(game, moves)) {\n\t\t\t\t\treturn match.run(plys - 1);\n\t\t\t\t} else {\n\t\t\t\t\treturn match;\n\t\t\t\t}\t\t\t\t\n\t\t\t});\n\t\t}\n\t},\n\t\n\t__advanceContingents__: function __advanceContingents__(game, moves) {\n\t\tfor (var next; game.isContingent; game = next) {\n\t\t\tnext = game.randomNext();\n\t\t\tthis.history.push(next);\n\t\t\tthis.onNext(game, next);\n\t\t}\n\t\treturn game;\n\t},\n\t\n\t__advance__: function __advance__(game, moves) {\n\t\tvar match = this,\n\t\t\tquitters = game.activePlayers.filter(function (p) {\n\t\t\t\treturn moves[p].__command__ === 'quit';\n\t\t\t});\n\t\tif (quitters.length > 0) {\n\t\t\tmatch.onQuit(game, quitters[0]);\n\t\t\treturn false;\n\t\t}\n\t\tvar next = game.next(moves); // Match must go on.\n\t\tthis.history.push(next);\n\t\tthis.onNext(game, next);\n\t\treturn true;\n\t},\n\t\n\t/** ## Commands ################################################################################\n\t\n\tCommands are pseudo-moves, which can be returned by the players instead of valid moves for the \n\tgame being played. Their intent is to control the match itself.\n\t\n\tThe available commands are:\n\t*/\n\t\n\t/** + `quit`: A quit command means the player that issued it is leaving the match. The match is \n\tthen aborted.\n\t*/\n\t\"static COMMAND_QUIT\": { __command__: 'quit' },\n\t\n\t/** ## Events ##################################################################################\n\t\n\tMatches provide game events that players and spectators can be registered to. `Match.events` is \n\tthe event handler. Emitted events are:\n\t*/\n\t\n\t/** + The `begin` event fired by `Match.onBegin(game)` when the match begins. The callbacks \n\tshould have the signature `function (game, match)`.\n\t*/\n\tonBegin: function onBegin(game) {\n\t\tthis.events.emit('begin', game, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match begins with ', iterable(this.players).map(function (attr) {\n\t\t\t\treturn attr[1] +' as '+ attr[0];\n\t\t\t}).join(', '), '; for ', game, '.');\n\t\t}\n\t},\n\t\n\t/** + The `move` event fired by `Match.onMove(game, moves)` every time the active players make \n\tmoves. The callbacks should have the signature `function (game, moves, match)`.\n\t*/\n\tonMove: function onMove(game, moves) {\n\t\tthis.events.emit('move', game, moves, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Players move: ', JSON.stringify(moves), ' in ', game);\n\t\t}\n\t},\n\t\n\t/** + The `next` event fired by `Match.onNext(game, next)` signals when the match advances to \n\tthe next game state. This may be due to moves or aleatory instantiation. The callbacks should \n\thave the signature `function (gameBefore, gameAfter, match)`.\n\t*/\n\tonNext: function onNext(game, next) {\n\t\tthis.events.emit('next', game, next, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match advances from ', game, ' to ', next);\n\t\t}\n\t},\n\t\n\t/** + The `end` event triggered by `Match.onEnd(game, results)` notifies when the match ends. \n\tThe callbacks should have the signature `function (game, result, match)`.\n\t*/\n\tonEnd: function onEnd(game, results) {\n\t\tthis.events.emit('end', game, results, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match for ', game, 'ends with ', JSON.stringify(results));\n\t\t}\n\t},\n\t\n\t/** + The `quit` event triggered by `Match.onQuit(game, player)` is emitted when the match is \n\taborted due to the given player leaving it. The callbacks should have the signature \n\t`function (game, quitter, match)`.\n\t*/\n\tonQuit: function onQuit(game, player) {\n\t\tthis.events.emit('quit', game, player, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match for ', game, ' aborted because player '+ player +' quitted.');\n\t\t}\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\ttoString: function toString() {\n\t\treturn 'Match('+ this.game +', '+ JSON.stringify(this.players) +')';\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Match',\n\t\tserializer: function serialize_Match(obj) {\n\t\t\treturn [obj.game, obj.players, obj.history];\n\t\t},\n\t\tmaterializer: function materialize_Match(obj, args) {\n\t\t\tif (args) {\n\t\t\t\tvar match = new Match(args[0], args[1]);\n\t\t\t\tmatch.history = args[2];\n\t\t\t\treturn match;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n}); // declare Match.\n","/** # Contingent\r\n\r\nContingent states are game states that depend on other factors that the players choices. They are\r\nused to represent randomness in non-deterministic games. The random variables (called `haps`) can\r\nbe dice, card decks, roulettes, etc.\r\n*/\r\nvar Contingent = exports.Contingent = declare({\r\n\t/** Flag to distinguish contingent states from normal game states.\r\n\t*/\r\n\tisContingent: true,\r\n\t\r\n\t/** The default implementation takes a set of `haps`, a game `state` and a set of `moves`. See\r\n\tthe `next` method for further details.\r\n\t*/\r\n\tconstructor: function Contingent(haps, state, moves) {\r\n\t\tif (haps) {\r\n\t\t\tthis.__haps__ = haps;\r\n\t\t}\r\n\t\tif (state) {\r\n\t\t\tthis.__state__ = state;\r\n\t\t}\r\n\t\tif (moves) {\r\n\t\t\tthis.__moves__ = moves;\r\n\t\t}\r\n\t},\r\n\t\r\n\t/** A contingent state's `haps` are the equivalent of `moves` in normal game states. The method \r\n\treturns an object with the random variables on which this node depends, e.g.: \r\n\t`{ die: aleatories.dice.D6 }`.\r\n\t*/\r\n\thaps: function haps() {\r\n\t\treturn this.__haps__;\r\n\t},\r\n\t\r\n\t/** Contingent game states' `next` states depend on the `haps` provided, e.g. `{die1: 4, die2: 2}`.\r\n\tIf values for the `haps` are not provided, they are resolved randonmly (using `randomHaps()`).\r\n\t\r\n\tBy default this method can have two possible behaviours. If the contingent state was created \r\n\twith `moves`, the previous `state`'s `next` method is called with these `moves` and the `haps`.\r\n\tElse, it is assumed that the game state constructor will deal with the haps. So it is called\r\n\twith the original arguments of the state and the `haps`.\r\n\t*/\r\n\tnext: function next(haps) {\r\n\t\tvar state = this.__state__;\r\n\t\tif (this.__moves__) {\r\n\t\t\treturn state.next(this.__moves__, haps || this.randomHaps());\r\n\t\t} else {\r\n\t\t\tvar sermatRecord = Sermat.record(state.constructor),\r\n\t\t\t\targs = sermatRecord.serializer(state)[0];\r\n\t\t\treturn sermatRecord.materializer(null, [copy(haps, args)]);\r\n\t\t}\r\n\t},\r\n\t\r\n\t/** Method `randomHaps` calculates a random set of haps.\r\n\t*/\r\n\trandomHaps: function randomHaps(random) {\r\n\t\treturn iterable(this.haps()).mapApply(function (n, h) {\r\n\t\t\treturn [n, h.value(random)];\r\n\t\t}).toObject();\r\n\t},\r\n\t\r\n\t/** A `randomNext` picks one of the next states at random.\r\n\t*/\r\n\trandomNext: function randomNext(random) {\r\n\t\treturn this.next(this.randomHaps(random));\r\n\t},\r\n\t\r\n\t/** The method `possibleHaps` is analogous to `Game.possibleMoves`. It calculates all possible \r\n\tcombinations of haps.\r\n\t*/\r\n\tpossibleHaps: function possibleHaps() {\r\n\t\treturn Iterable.product.apply(Iterable,\r\n\t\t\titerable(this.haps()).mapApply(function (n, hap) {\r\n\t\t\t\treturn hap.distribution().mapApply(function (v, p) {\r\n\t\t\t\t\treturn [n, v, p];\r\n\t\t\t\t});\r\n\t\t\t}).toArray()\r\n\t\t).map(function (haps) {\r\n\t\t\tvar prob = 1;\r\n\t\t\treturn [iterable(haps).mapApply(function (n, v, p) {\r\n\t\t\t\tprob *= p;\r\n\t\t\t\treturn [n, v];\r\n\t\t\t}).toObject(), prob];\r\n\t\t}).toArray();\r\n\t},\r\n\t\r\n\t// ## Utilities ################################################################################\r\n\t\r\n\t'static __SERMAT__': {\r\n\t\tidentifier: 'Contingent',\r\n\t\tserializer: function serialize_Contingent(obj) {\r\n\t\t\treturn [obj.__haps__ || null, obj.__state__ || null, obj.__moves__ || null];\r\n\t\t}\r\n\t}\r\n});","/** # Tournament\n\nA tournament is a set of matches played between many players. The whole contest \nranks the participants according to the result of the matches. This is an \nabstract base class for many different types of contests.\n*/\nvar Tournament = exports.Tournament = declare({\n\tconstructor: function Tournament(game, players) {\n\t\t/** The tournament always has one [`game`](Game.html) state from which \n\t\tall matches start.\n\t\t*/\n\t\tthis.game = game;\n\t\t/** All the [`players`](Player.html) involved in the tournament must be\n\t\tprovided to the constructor in an array.\n\t\t*/\n\t\tthis.players = Array.isArray(players) ? players : iterables.iterable(players).toArray();\n\t\tthis.statistics = new Statistics();\n\t\tthis.events = new Events({ \n\t\t\tevents: ['begin', 'beforeMatch', 'afterMatch', 'end']\n\t\t});\n\t},\n\n\t/** The next match to be played is determined by `__advance__`, which \n\treturns a match instance, or null if the tournament has finished. It is not \n\timplemented in this base class. \n\t*/\n\t__advance__: unimplemented(\"Tournament\", \"__advance__\"),\n\t\n\t/** `Tournament.run()` plays all the tournament's matches. Since running a \n\tmatch is asynchronous, running a tournament is too. Hence the result is \n\talways a future, which will be resolved when all matches have been played.\n\t*/\n\trun: function run() {\n\t\tthis.onBegin();\n\t\tvar tournament = this;\n\t\treturn Future.doWhile(function () {\n\t\t\treturn Future.then(tournament.__advance__(), function (match) {\n\t\t\t\tif (match) {\n\t\t\t\t\ttournament.beforeMatch(match);\n\t\t\t\t\treturn tournament.__runMatch__(match).then(function (match) {\n\t\t\t\t\t\ttournament.account(match);\n\t\t\t\t\t\ttournament.afterMatch(match);\n\t\t\t\t\t\treturn match;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t});\n\t\t}).then(this.onEnd.bind(this));\n\t},\n\t\n\t/** The method `__runMatch__` runs a match. It is present so it can be \n\toverridden, to implement some specific behaviour of the contest.\n\t*/\n\t__runMatch__: function __runMatch__(match) {\n\t\treturn match.run();\n\t},\n\t\n\t/** Tournaments gather information from the played matches using their\n\t`statistics` property (instance of `creatartis-base.Statistics`). The method \n\t`Tournament.account(match)` is called to accounts the results of each \n\tfinished match for the players' score.\n\t\n\tThe match results are gathered in the `results` key. The keys `victories`,\n\t`defeats` and `draws` count each result type. The length of each game is\n\trecorded under `length`. The move count at each ply is aggregated under\n\t`width`. All these numbers are open by game, role, player.\n\t*/\n\taccount: function account(match) {\n\t\tvar game = this.game,\n\t\t\tresults = match.result(), \n\t\t\tisDraw = false,\n\t\t\tstats = this.statistics;\n\t\traiseIf(!results, \"Match doesn't have results. Has it finished?\");\n\t\titerable(match.players).forEach(function (p) { // Player statistics.\n\t\t\tvar role = p[0],\n\t\t\t\tplayer = p[1],\n\t\t\t\tplayerResult = results[p[0]];\n\t\t\tstats.add({key:'results', game:game.name, role:role, player:player.name}, \n\t\t\t\tplayerResult);\n\t\t\tstats.add({key:(playerResult > 0 ? 'victories' : playerResult < 0 ? 'defeats' : 'draws'),\n\t\t\t\tgame:game.name, role:role, player:player.name}, playerResult);\n\t\t\tstats.add({key:'length', game:game.name, role:role, player:player.name}, \n\t\t\t\tmatch.ply()); //FIXME This may not be accurate if the game has random variables.\n\t\t\tmatch.history.forEach(function (entry) {\n\t\t\t\tif (typeof entry.moves === 'function') {\n\t\t\t\t\tvar moves = entry.moves();\t\n\t\t\t\t\tif (moves && moves.hasOwnProperty(role) && moves[role].length > 0) {\n\t\t\t\t\t\tstats.add({key:'width', game:game.name, role:role, player:player.name}, \n\t\t\t\t\t\t\tmoves[role].length);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** ## Events #############################################################\n\t\n\tTournaments provide events to enable further analysis and control over it. \n\t`Tournament.events` is the event handler. The emitted events are:\n\t*/\n\t\n\t/** + The `begin` event fired by `Tournament.onBegin()` when the whole \n\tcontest begins. The callbacks should have the signature \n\t`function (tournament)`.\n\t*/\t\n\tonBegin: function onBegin() {\n\t\tthis.events.emit('begin', this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Tournament begins for game ', game.name, '.');\n\t\t}\n\t},\n\t\n\t/** + The `beforeMatch` event triggered by `Tournament.beforeMatch(match)` \n\tjust before starting a match. The callbacks should have the signature \n\t`function (match, tournament)`.\n\t*/\n\tbeforeMatch: function beforeMatch(match) {\n\t\tthis.events.emit('beforeMatch', match, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.debug('Beginning match with ', JSON.stringify(match.players), '.');\n\t\t}\n\t},\n\t\n\t/** + The `afterMatch` event triggered by `Tournament.afterMatch(match)` \n\tjust after a match ends. The callbacks should have the signature \n\t`function (match, tournament)`.\n\t*/\n\tafterMatch: function afterMatch(match) {\n\t\tthis.events.emit('afterMatch', match, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.debug('Finishing match with ', JSON.stringify(match.players), '.');\n\t\t}\n\t},\n\t\n\t/** + The `end` event triggered by `Tournament.onEnd()` when the whole \n\tcontest is completed. The callbacks should have the signature \n\t`function (statistics, tournament)`.\n\t*/\n\tonEnd: function onEnd() {\n\t\tthis.events.emit('end', this.statistics, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Tournament ends for game ', game.name, ':\\n', this.statistics, '\\n');\n\t\t}\n\t}\n}); // declare Tournament\n","/** # Checkerboard\n\nBase class for checkerboards representations based on several different data structures.\n*/\nvar Checkerboard = utils.Checkerboard = declare({\n\t/** The base constructor only sets the board dimensions: `height` and `width`.\n\t*/\n\tconstructor: function Checkerboard(height, width) {\n\t\tif (!isNaN(height)) {\n\t\t\tthis.height = height|0;\n\t\t}\n\t\tif (!isNaN(width)) {\n\t\t\tthis.width = width|0;\n\t\t}\n\t},\n\t\n\t/** The value for empty squares is `emptySquare`. This will be used in functions walking and \n\ttraversing the board. \n\t*/\n\temptySquare: null,\n\t\n\t// ## Board information ########################################################################\n\t\n\t/** All coordinates are represented by `[row, column]` arrays. To check if a coordinate is \n\tinside the board, use `isValidCoord(coord)`.\n\t*/\n\tisValidCoord: function isValidCoord(coord) {\n\t\treturn Array.isArray(coord) && !isNaN(coord[0]) && !isNaN(coord[1])\t&& \n\t\t\tcoord[0] >= 0 && coord[0] < this.height && \n\t\t\tcoord[1] >= 0 && coord[1] < this.width;\n\t},\n\t\n\t/** Method `coordinates()` returns the sequence of the board's valid positions; first by row \n\tthen by column.\n\t*/\n\tcoordinates: function coordinates() {\n\t\treturn Iterable.range(this.height).product(Iterable.range(this.width));\n\t},\n\t\n\t/** Method `square(coord, outside)` should get the contents at a given coordinate. If the \n\tcoordinate is off the board, `outside` must be returned. This method is abstract so it must be \n\toverriden in subclasses.\n\t*/\n\tsquare: unimplemented('utils.Checkerboard', 'square'),\n\t\n\t/** A square is assumed to be empty when its value is equal to `emptySquare`.\n\t*/\n\tisEmptySquare: function isEmptySquare(coord) {\n\t\treturn this.square(coord) === this.emptySquare;\n\t},\n\t\n\t// ### Lines ###################################################################################\n\t\n\t/** Many games must deal with line configurations of pieces. The following methods help with \n\tthis kind of logic. Each line is a sequence of coordinates in the board.\n\t\n\t+ `horizontals()`: All the horizontal lines (rows).\n\t*/\n\thorizontals: function horizontals() {\n\t\tvar width = this.width;\n\t\treturn Iterable.range(this.height).map(function (row) {\n\t\t\treturn Iterable.range(width).map(function (column) {\n\t\t\t\treturn [row, column];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** \n\t+ `verticals()`: All the vertical lines (columns).\n\t*/\n\tverticals: function verticals() {\n\t\tvar height = this.height;\n\t\treturn Iterable.range(this.width).map(function (column) {\n\t\t\treturn Iterable.range(height).map(function (row) {\n\t\t\t\treturn [row, column];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** \n\t+ `orthogonals()`: All the horizontal (rows) and vertical lines (columns) in the board.\n\t*/\n\torthogonals: function orthogonals() {\n\t\treturn this.horizontals().chain(this.verticals());\n\t},\n\t\n\t/**\n\t+ `positiveDiagonals()`: All the positive diagonals lines (those where row = k + column).\n\t*/\n\tpositiveDiagonals: function positiveDiagonals() {\n\t\tvar width = this.width, \n\t\t\theight = this.height, \n\t\t\tcount = height + width - 1;\n\t\treturn Iterable.range(count).map(function (i) {\n\t\t\tvar row = Math.max(0, height - i - 1),\n\t\t\t\tcolumn = Math.max(0, i - height + 1);\n\t\t\treturn Iterable.range(Math.min(i + 1, count - i)).map(function (j) {\n\t\t\t\treturn [row + j, column + j];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** \n\t+ `negativeDiagonals()`: All the negative diagonals lines (those where row = k - column).\n\t*/\n\tnegativeDiagonals: function negativeDiagonals() {\n\t\tvar width = this.width, \n\t\t\theight = this.height, \n\t\t\tcount = height + width - 1;\n\t\treturn Iterable.range(count).map(function (i) {\n\t\t\tvar row = Math.min(i, height - 1),\n\t\t\t\tcolumn = Math.max(0, i - height + 1);\n\t\t\treturn Iterable.range(Math.min(i + 1, count - i)).map(function (j) {\n\t\t\t\treturn [row - j, column + j];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/**\n\t+ `diagonals()`: All the diagonal lines in the board.\n\t*/\n\tdiagonals: function diagonals() {\n\t\treturn this.positiveDiagonals().chain(this.negativeDiagonals());\n\t},\n\t\n\t/**\n\t+ `lines()`: All the horizontal, vertical and diagonal lines in the board.\n\t*/\n\tlines: function lines() {\n\t\treturn this.orthogonals().chain(this.diagonals());\n\t},\n\t\n\t/** The previous methods return the whole lines. Some times the game logic demands checking \n\tlines of a certain length. These are sublines, and can be calculated by \n\t`sublines(lines, length)`. It obviously filters lines which are shorter than length.\n\t*/\n\tsublines: function sublines(lines, length) {\n\t\treturn iterable(lines).map(function (line) {\n\t\t\treturn Array.isArray(line) ? line : iterable(line).toArray();\n\t\t}, function (line) {\n\t\t\treturn line.length >= length;\n\t\t}).map(function (line) {\n\t\t\treturn Iterable.range(0, line.length - length + 1).map(function (i) {\n\t\t\t\treturn line.slice(i, i + length);\n\t\t\t});\n\t\t}).flatten();\n\t},\n\t\n\t// ### Walks ###################################################################################\n\t\n\t/** A walk is a sequence of coordinates in the board that start at a given point and advances in\n\ta certain direction. The `walk(coord, delta)` method returns an iterable with coordinates from \n\t`coord` and on, adding `delta`'s row and column until going off the board.\n\t*/\n\twalk: function walk(coord, delta) {\n\t\tvar board = this;\n\t\treturn new Iterable(function __iter__() {\n\t\t\tvar current = coord.slice();\n\t\t\treturn function __walkIterator__() {\n\t\t\t\tif (board.isValidCoord(current)) {\n\t\t\t\t\tvar result = current.slice();\n\t\t\t\t\tcurrent[0] += delta[0];\n\t\t\t\t\tcurrent[1] += delta[1];\n\t\t\t\t\treturn result;\n\t\t\t\t} else {\n\t\t\t\t\tthrow Iterable.STOP_ITERATION;\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t},\n\t\n\t/** Convenient method `walks(coord, deltas)` can be used to get many walks from the same origin.\n\t*/\n\twalks: function walks(coord, deltas) {\n\t\tvar board = this;\n\t\treturn deltas.map(function (delta) {\n\t\t\treturn board.walk(coord, delta);\n\t\t});\n\t},\n\t\n\t/** Frequently used deltas for walks are available at `DIRECTIONS`.\n\t*/\n\t\"static DIRECTIONS\": {\n\t\tHORIZONTAL: [[0,-1], [0,+1]],\n\t\tVERTICAL: [[-1,0], [+1,0]], \n\t\tORTHOGONAL: [[0,-1], [0,+1], [-1,0], [+1,0]],\n\t\tDIAGONAL: [[-1,-1], [-1,+1], [+1,-1], [+1,+1]],\n\t\tEVERY: [[0,-1], [0,+1], [-1,0], [+1,0], [-1,-1], [-1,+1], [+1,-1], [+1,+1]]\n\t},\n\t\n\t// ## Board modification #######################################################################\n\t\n\t/** Game states must not be modifiable, else game search algorithms may fail or be extremely \n\tcomplicated. Then, all board altering method in `Checkerboard` must return a new board instance \n\tand leave this instance unspoiled.\n\t\n\tMost board modification functions have two versions: one which actually modifies the board state\n\tand another which returns a modified copy. This is meant to optimize chains of board \n\talterations. To get a copy of this board, the `clone` method can be used.\n\t*/\n\tclone: unimplemented('utils.Checkerboard', 'clone'),\n\t\n\t/** The first function to change the board is `place(coord, value)`. It places the value at the \n\tgiven coordinate, replacing whatever was there.\n\t\n\tThe `__place__` version modifies this board, and is not implemented in the base class. It should\n\treturn this instance, to enable chaining.\n\t*/\n\t__place__: unimplemented('utils.Checkerboard', 'place'),\n\t\n\tplace: function place(coord, value) {\n\t\treturn this.clone().__place__(coord, value);\n\t},\n\n\t/** Another usual operation is `move(coordFrom, coordTo, valueLeft)`. It moves the contents at \n\t`coordFrom` to `coordTo`. Whatever is at `coordTo` gets replaced, and `valueLeft` is placed at\n\t`coordFrom`. If `valueLeft` is undefined, `emptySquare` is used.\n\t*/\n\t__move__: function __move__(coordFrom, coordTo, valueLeft) {\n\t\treturn this.__place__(coordTo, this.square(coordFrom))\n\t\t\t.__place__(coordFrom, typeof valueLeft === 'undefined' ? this.emptySquare : valueLeft);\n\t},\n\t\n\tmove: function move(coordFrom, coordTo, valueLeft) {\n\t\treturn this.clone().__move__(coordFrom, coordTo, valueLeft);\n\t},\n\t\n\t/** The next board operation is `swap(coordFrom, coordTo)`, which moves the contents at \n\t`coordFrom` to `coordTo`, and viceversa.\n\t*/\n\t__swap__: function __swap__(coordFrom, coordTo) {\n\t\tvar valueTo = this.square(coordTo);\n\t\treturn this.__place__(coordTo, this.square(coordFrom))\n\t\t\t.__place__(coordFrom, valueTo);\n\t},\n\t\n\tswap: function swap(coordFrom, coordTo) {\n\t\treturn this.clone().__swap__(coordFrom, coordTo);\n\t},\n\t\n\t// ## Whole board operations ###################################################################\n\t\n\t/** The `transform` builds a new board mapping coordinates of this board with the given\n\tfunction.\n\t*/\n\ttransform: function transform(coordinateMapping) {\n\t\tvar result = this.clone(),\n\t\t\tboard = this;\n\t\tthis.coordinates().forEach(function (position) {\n\t\t\tvar newPosition = coordinateMapping.apply(board, [board, position].concat(position));\n\t\t\tresult.__place__(newPosition, board.square(position));\n\t\t});\n\t\treturn result;\n\t},\n\t\n\t/** Symmetries transform the whole board at once. The `horizontalSymmetry` of the board flips it \n\twith a vertical axis at its center, while the `verticalSymmetry` flips it with an horizontal \n\taxis.\n\t*/\n\thorizontalSymmetry: function horizontalSymmetry() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [row, board.width - column - 1];\n\t\t});\n\t},\n\t\n\tverticalSymmetry: function verticalSymmetry() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [board.height - row - 1, column];\n\t\t});\n\t},\n\t\n\t/** Rotations also transform the whole board at once. The `clockwiseRotation` of the board \n\trotates in the direction that the hands of a clock, while the `counterClockwiseRotation` rotates\n\tit in the opposite direction.\n\t*/\n\tclockwiseRotation: function clockwiseRotation() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [column, board.height - row - 1];\n\t\t});\n\t},\n\t\n\tcounterClockwiseRotation: function counterClockwiseRotation() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [board.width - column - 1, row];\n\t\t});\n\t},\n\t\n\t// ## Board presentation. ######################################################################\n\t\n\t/** Board games' user interfaces may be implemented using HTML & CSS. This is the case of \n\tLudorum's playtesters.\n\t*/\n\trenderAsHTMLTable: function (document, container, callback) {\n\t\tvar board = this, // for closures.\n\t\t\ttable = document.createElement('table');\n\t\tcontainer.appendChild(table);\n\t\tboard.horizontals().reverse().forEach(function (line) {\n\t\t\tvar tr = document.createElement('tr');\n\t\t\ttable.appendChild(tr);\n\t\t\tline.forEach(function (coord) {\n\t\t\t\tvar square = board.square(coord),\n\t\t\t\t\ttd = document.createElement('td'),\n\t\t\t\t\tdata = {\n\t\t\t\t\t\tid: \"ludorum-square-\"+ coord.join('-'),\n\t\t\t\t\t\tclassName: \"ludorum-square\",\n\t\t\t\t\t\tsquare: square,\n\t\t\t\t\t\tcoord: coord,\n\t\t\t\t\t\tinnerHTML: base.Text.escapeXML(square)\n\t\t\t\t\t};\n\t\t\t\tif (callback) {\n\t\t\t\t\tdata = callback(data) || data;\n\t\t\t\t}\n\t\t\t\ttd['ludorum-data'] = data;\n\t\t\t\ttd.id = data.id;\n\t\t\t\ttd.className = data.className;\n\t\t\t\ttd.innerHTML = data.innerHTML;\n\t\t\t\tif (data.onclick) {\n\t\t\t\t\ttd.onclick = data.onclick;\n\t\t\t\t}\n\t\t\t\ttr.appendChild(td);\n\t\t\t});\n\t\t});\n\t\treturn table;\n\t},\n\t\n\t// ## Heuristics ###############################################################################\n\t\n\t/** A `weightedSum` is an simple way of defining an heuristic. Every position in the board is \n\tassigned a weight, and every possible value is assigned a coefficients (usually player is 1, \n\topponent is -1, else is 0).\n\t\n\tWeights have to be in the same order that `coordinates()` enumerates the board's positions. This\n\tfunction assumes the weights are normalized and sufficient to cover the whole board.\n\t*/\n\tweightedSum: function weightedSum(weights, coefficients) {\n\t\tvar board = this;\n\t\treturn this.coordinates().zip(weights).mapApply(function (coord, weight) {\n\t\t\treturn coefficients[board.square(coord)] * weight || 0;\n\t\t}).sum();\n\t}\n}); //// declare utils.Checkerboard.\n","/** # CheckerboardFromString\n\n[`Checkerboard`](Checkerboard.html) implementation represented by a simple string (one character per \nsquare).\n*/\nvar CheckerboardFromString = utils.CheckerboardFromString = declare(Checkerboard, {\n\t/** The constructor takes `height`, `width`, the whole board content in a `string`, and \n\toptionally the empty square character.\n\t*/\n\tconstructor: function CheckerboardFromString(height, width, string, emptySquare) {\n\t\tCheckerboard.call(this, height, width);\n\t\tif (emptySquare && emptySquare !== this.emptySquare) {\n\t\t\tthis.emptySquare = (emptySquare +'').charAt(0);\n\t\t}\n\t\tif (string && string.length !== height * width) {\n\t\t\tthrow new Error('Given string '+ JSON.stringify(string) +' does not match board dimensions.');\n\t\t}\n\t\tthis.string = string || this.emptySquare.repeat(height * width);\n\t},\n\t\n\t/** The `emptySquare` in `CheckerboardFromString` is `'.'` by default.\n\t*/\n\temptySquare: '.',\t\n\t\n\t/** The default string conversion of `CheckerboardFromString` prints the board one line by row, \n\tlast row on top.\n\t*/\n\ttoString: function toString() {\n\t\tvar string = this.string, height = this.height, width = this.width;\n\t\treturn Iterable.range(height).map(function (i) {\n\t\t\treturn string.substr((height - i - 1) * width, width);\n\t\t}).join('\\n');\n\t},\n\t\n\t// ## Board information ########################################################################\n\t\n\t/** The `square(coord, outside)` return the character at `(row * width + column)` if the \n\tcoordinate is inside the board. Else returns `outside`.\n\t*/\n\tsquare: function square(coord, outside) {\n\t\tvar row = coord[0], \n\t\t\tcolumn = coord[1],\n\t\t\twidth = this.width;\n\t\tif (row >= 0 && row < this.height && column >= 0 && column < width) {\n\t\t\treturn this.string.charAt(row * width + column);\n\t\t} else {\n\t\t\treturn outside;\n\t\t}\n\t},\n\t\n\t// ### Lines ###################################################################################\n\t\n\t/** Since square contents in `CheckerboardFromString` are just characters, lines can be thought \n\tas strings. The method `asString(line)` takes an iterable of coordinates and returns a string of \n\tthe characters found at each point in the sequence.\n\t*/\n\tasString: function asString(line) {\n\t\tvar board = this;\n\t\treturn line.map(function (coord) {\n\t\t\treturn board.square(coord);\n\t\t}).join('');\n\t},\n\t\n\t/** The method `asStrings(lines)` can be used to easily map `asString(line)` to a sequence of \n\tlines, like the one calculated by `lines()`.\n\t*/\n\tasStrings: function asStrings(lines) {\n\t\tvar board = this;\n\t\treturn lines.map(function (line) {\n\t\t\treturn board.asString(line);\n\t\t});\n\t},\n\t\n\t/** Many games based on board configurations (like connection games) have patterns that can be \n\texpressed with regular expressions. The method `asRegExp(line, insideLine, outsideLine)` takes a \n\tline (iterable of coordinates) and returns a string with a regular expression. This may be used \n\tto tests the whole board string for the line.\n\t\n\t_Warning!_ Both `insideLine` and `outsideLine` must be simple regular expressions (e.g. a \n\tcharacter or atom). If more complex expressions are required they must be provided between \n\tparenthesis.\n\t*/\n\tasRegExp: function asRegExp(line, insideLine, outsideLine) {\n\t\toutsideLine = outsideLine || '.';\n\t\tvar width = this.width,\n\t\t\tsquares = Iterable.repeat(false, width * this.height).toArray();\n\t\tline.forEach(function (coord) {\n\t\t\tsquares[coord[0] * width + coord[1]] = true;\n\t\t});\n\t\tvar result = '', count = 0, current;\n\t\tfor (var i = 0; i < squares.length; count = 0) {\n\t\t\tcurrent = squares[i];\n\t\t\tdo {\n\t\t\t\t++count;\n\t\t\t} while (++i < squares.length && squares[i] === current);\n\t\t\tif (count < 2) {\n\t\t\t\tresult += current ? insideLine : outsideLine;\n\t\t\t} else {\n\t\t\t\tresult += (current ? insideLine : outsideLine) +'{'+ count +'}';\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\t\n\t/** The method `asRegExps(lines)` can be used to easily map `asRegExp(line)` to a sequence of \n\tlines. All regular expressions are joined as a union (`|`). Use with caution, because the whole \n\tregular expression can get very big even with small boards.\n\t*/\n\tasRegExps: function asRegExps(lines, insideLine, outsideLine) {\n\t\tvar board = this;\n\t\treturn lines.map(function (line) {\n\t\t\treturn board.asRegExp(line, insideLine, outsideLine);\n\t\t}).join('|');\n\t},\n\t\n\t// ## Board modification #######################################################################\n\t\n\t/** Cloning a CheckerboardFromString simply calls the constructor again with the proper \n\targuments to replicate this instance.\n\t*/\n\tclone: function clone() {\n\t\treturn new this.constructor(this.height, this.width, this.string, \n\t\t\tthis.hasOwnProperty('emptySquare') ? this.emptySquare : undefined);\n\t},\n\t\n\t/** A `place(coord, value)` means only changing one character in the underlying string. The \n\t`value` must be a character, and `coord` a point inside the board.\n\t*/\n\t__place__: function __place__(coord, value) {\n\t\traiseIf(!this.isValidCoord(coord), \"Invalid coordinate \", coord, \".\");\n\t\tvalue = (value + this.emptySquare).charAt(0);\n\t\tvar i = coord[0] * this.width + coord[1];\n\t\tthis.string = this.string.substr(0, i) + value + this.string.substr(i + 1);\n\t\treturn this;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'CheckerboardFromString',\n\t\tserializer: function serialize_CheckerboardFromString(obj) {\n\t\t\tvar r = [obj.height, obj.width, obj.string];\n\t\t\tif (obj.hasOwnProperty('emptySquare')) {\n\t\t\t\tr.push(obj.emptySquare);\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\t}\n}); // declare utils.CheckerboardFromString","/** # Checkerboard from pieces\n\n[`Checkerboard`](Checkerboard.html) implementation represented by a list of pieces (objects) with a\nlocation in the board.\n*/\nvar CheckerboardFromPieces = utils.CheckerboardFromPieces = declare(Checkerboard, {\n\t/** The constructor takes `height`, `width`, a list of piece objects and optionally the empty \n\tsquare object. The piece objects must have a property `position`. Only one piece is allowed at\n\teach square.\n\t*/\n\tconstructor: function CheckerboardFromPieces(height, width, pieces, emptySquare) {\n\t\tCheckerboard.call(this, height, width);\n\t\tvar board = this;\n\t\tif (emptySquare !== this.emptySquare) {\n\t\t\tthis.emptySquare = emptySquare;\n\t\t}\n\t\tif (Array.isArray(pieces)) {\n\t\t\tthis.pieces = {}; \n\t\t\titerable(pieces || []).forEach(function (piece) {\n\t\t\t\traiseIf(!Array.isArray(piece.position), \"Piece has not a position (\", piece, \")!\");\n\t\t\t\tboard.pieces[piece.position +''] = piece;\n\t\t\t});\n\t\t} else if (typeof pieces === 'object') {\n\t\t\tthis.pieces = base.copy({}, pieces);\n\t\t} else {\n\t\t\traise(\"Invalid pieces definition: \", pieces, \"!\");\n\t\t}\n\t},\n\t\n\t/** The `emptySquare` in `CheckerboardFromPieces` is `null` by default.\n\t*/\n\temptySquare: null,\t\n\t\n\t/** The default string conversion of `CheckerboardFromPieces` prints the piece list.\n\t*/\n\ttoString: function toString() {\n\t\treturn '['+ iterable(this.pieces).select(1).join(', ') +']';\n\t},\n\t\n\t// ## Board information ########################################################################\n\t\n\t/** The `square(coord, outside)` return the piece object at the given `coord` if there is one \n\tand the coordinate is inside the board. Else returns `outside`.\n\t*/\n\tsquare: function square(coord, outside) {\n\t\treturn this.pieces[coord] || outside;\n\t},\n\t\n\t// ## Board modification #######################################################################\n\t\n\t/** Cloning a `CheckerboardFromPieces` simply calls the constructor again with the proper \n\targuments to replicate this instance. The `pieces` object is copied _shallowly_ by the \n\tconstructor.\n\t*/\n\tclone: function clone() {\n\t\treturn new this.constructor(this.height, this.width, this.pieces, this.emptySquare);\n\t},\n\t\n\t/** A `place(coord, value)` means removing any existing piece at the given `coord` and adding \n\tthe `value` piece if given.\n\t*/\n\t__place__: function __place__(coord, value) {\n\t\traiseIf(!this.isValidCoord(coord), \"Invalid coordinate \", coord, \"!\");\n\t\tvar id = coord +'';\n\t\tdelete this.pieces[id];\n\t\tif (value) {\n\t\t\tthis.pieces[id] = value;\n\t\t}\n\t\treturn this;\n\t}\n}); // declare utils.CheckerboardFromPieces\n","/** # Scanner\n\nComponent for scanning a game's tree.\n*/\nexports.utils.Scanner = declare({\n\t/** A Scanner builds a sample of a game tree, in order to get statistics \n\tfrom some of all possible matches. The given `config` must have:\n\t*/\n\tconstructor: function Scanner(config) {\n\t\tinitialize(this, config)\n\t\t// + `game`: Game to scan.\n\t\t\t.object(\"game\", { ignore: true })\n\t\t// + `maxWidth=1000`: Maximum amount of game states held at each step.\n\t\t\t.integer(\"maxWidth\", { defaultValue: 1000, coerce: true })\n\t\t// + `maxLength=50`: Maximum length of simulated matches.\n\t\t\t.integer(\"maxLength\", { defaultValue: 50, coerce: true })\n\t\t// + `random=randomness.DEFAULT`: Pseudorandom number generator to use in the simulations.\n\t\t\t.object(\"random\", { defaultValue: Randomness.DEFAULT })\n\t\t// + `statistics=`: Component to gather relevant statistics.\n\t\t\t.object(\"statistics\", { defaultValue: new Statistics() });\n\t},\n\t\n\t/** A scan of a game's tree reproduces and samples the set of all possible \n\tmatches from the given game states. The simulation halts at `maxLength` \n\tplies, and never holds more than `maxWidth` game states. Since this process\n\tis asynchronous, this method returns a future.\n\t\n\tThe `players` argument may provide a player for some or all of the games' \n\troles. If available, they will be used to decide which move is applied to \n\teach game state. If missing, all next game states will be added. Ergo no \n\tplayers means a simulation off all possible matches.\t\t\n\t*/\n\tscan: function scan(players) {\n\t\tvar scanner = this,\n\t\t\twindow = arguments.length < 2 ? (this.game ? [this.game] : []) : Array.prototype.slice.call(arguments, 1),\n\t\t\tply = 0; \n\t\treturn Future.whileDo(function () {\n\t\t\treturn window.length > 0 && ply < scanner.maxLength;\n\t\t}, function () {\n\t\t\treturn Future.all(window.map(function (game) {\n\t\t\t\treturn scanner.__advance__(players, game, ply);\n\t\t\t})).then(function (level) {\n\t\t\t\twindow = iterable(level).flatten().sample(scanner.maxWidth, scanner.random).toArray();\n\t\t\t\treturn ++ply;\n\t\t\t});\n\t\t}).then(function () {\n\t\t\tscanner.statistics.add({ key:'aborted' }, window.length);\n\t\t\treturn scanner.statistics;\n\t\t});\n\t},\n\t\n\t/** Performs scans for many different player setups.\n\t*/\n\tscans: function scans() {\n\t\treturn Future.sequence(Array.prototype.slice.call(arguments), this.scan.bind(this));\n\t},\n\t\n\t/** The `__advance__` method advances the given game by one ply. This may \n\tmean for non final game states either instantiate random variables, ask the \n\tavailable player for a decision, or take all next game states. Final game \n\tstates are removed. \n\t\n\tAll game states are accounted in the scanner's statistics. The result is an \n\titerable with the game states to add to the next scan window.\n\t*/\n\t__advance__: function __advance__(players, game, ply) {\n\t\tif (game instanceof Aleatory) {\n\t\t\treturn iterable(game.distribution()).mapApply(function (value, prob) {\n\t\t\t\treturn game.next(value);\n\t\t\t});\n\t\t} else if (this.account(players, game, ply)) {\n\t\t\treturn Iterable.EMPTY;\n\t\t} else {\n\t\t\tvar scanner = this,\n\t\t\t\tmoves = game.moves(),\n\t\t\t\tstats = this.statistics;\n\t\t\treturn Future.all(game.activePlayers.map(function (role) {\n\t\t\t\tif (players && players[role]) {\n\t\t\t\t\tvar p = players[role],\n\t\t\t\t\t\tdecisionTime = stats.stat({key:'decision.time', game: game.name, role: role, player: p.name});\n\t\t\t\t\tdecisionTime.startTime();\n\t\t\t\t\treturn Future.when(p.decision(game, role)).then(function (move) {\n\t\t\t\t\t\tdecisionTime.addTime();\n\t\t\t\t\t\treturn [[role, move]];\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn moves[role].map(function (move) {\n\t\t\t\t\t\treturn [role, move];\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})).then(function (decisions) {\n\t\t\t\treturn Iterable.product.apply(Iterable, decisions).map(function (moves) {\n\t\t\t\t\treturn game.next(iterable(moves).toObject());\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t},\n\t\t\t\n\t/** The `account` method gathers statistics about the game. These include:\n\t\t\n\t+ `game.result`: Final game state results. Also available for victory and defeat.\n\t+ `game.length`: Match length in plies. Also available for victory and defeat.\n\t+ `game.width`: Number of available moves.\n\t+ `draw.length`: Drawn match length in plies.\n\t\n\tReturns whether the given game state is final or not.\n\t*/\n\taccount: function account(players, game, ply) {\n\t\tvar result = game.result(),\n\t\t\tstats = this.statistics;\n\t\tif (result) {\n\t\t\titerable(game.players).forEach(function (role) {\n\t\t\t\tvar r = result[role],\n\t\t\t\t\tp = (players && players[role]) ? players[role].name : '',\n\t\t\t\t\tkeys = ['game:'+ game.name, 'role:'+ role, 'player:'+ p];\n\t\t\t\tstats.add({key:'game.result', game:game.name, role:role, player:p}, r, game);\n\t\t\t\tstats.add({key:'game.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\tif (r < 0) {\n\t\t\t\t\tstats.add({key:'defeat.result', game:game.name, role:role, player:p}, r, game);\n\t\t\t\t\tstats.add({key:'defeat.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\t} else if (r > 0) {\n\t\t\t\t\tstats.add({key:'victory.result', game:game.name, role:role, player:p}, r, game);\n\t\t\t\t\tstats.add({key:'victory.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\t} else {\n\t\t\t\t\tstats.add({key:'draw.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn true;\n\t\t} else {\n\t\t\tvar moves = game.moves();\n\t\t\titerable(game.activePlayers).forEach(function (role) {\n\t\t\t\tstats.add({key:'game.width', game:game.name, role:role}, moves[role].length);\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\t}\n}); // Scanner.\n","/** # Cache\n\nA game cache contains a part of a game tree, avoiding redundancies. It can be\nused to implement a [transposition table](http://en.wikipedia.org/wiki/Transposition_table) \nor similar data structures.\n*/\nutils.Cache = declare({\n\t/** The `Cache` constructor may take a game to define as `root`.\n\t*/\n\tconstructor: function Cache(game) {\n\t\tthis.clear();\n\t\tif (game) {\n\t\t\tthis.root(game);\n\t\t}\n\t},\n\t\n\t/** The `stateIdentifier(state)` of every game state is used as the key in \n\tthe cache's entries. By default is calculated with the `Game.identifier()`\n\tmethod.\n\t*/\n\tstateIdentifier: function stateIdentifier(state) {\n\t\treturn state.identifier();\n\t},\n\t\n\t/** The `moveIdentifier(move)` is used as the key in each entry's \n\tdescendants. By default it uses the move JSON _stringification_.\n\t*/\n\tmoveIdentifier: function moveIdentifier(move) {\n\t\treturn JSON.stringify(move);\n\t},\n\t\n\t/** The `has(state|id)` returns if the given state or state identifier has \n\tan entry in this cache.\n\t*/\n\thas: function has(state) {\n\t\tvar stateId = typeof state === 'string' ? state : this.stateIdentifier(state);\n\t\treturn this.__entries__.hasOwnProperty(stateId);\n\t},\n\t\n\t/** If the given state or state identifier has en entry in this cache, \n\t`get(state)` returns that entry. Else it returns `undefined`.\n\t*/\n\tget: function get(state) {\n\t\tvar stateId = typeof state === 'string' ? state : this.stateIdentifier(state);\n\t\treturn this.__entries__[stateId];\n\t},\n\t\n\t/** `size()` returns the amount of entries in this cache.\n\t*/\n\tsize: function size() {\n\t\treturn Object.keys(this.__entries__).length;\n\t},\n\t\n\t/** If the given state has no entry in this cache, `entry(state, id)` builds\n\ta new entry, adds it to this cache and returns it. If the state is already\n\tcached, its entry is returned.\n\tEvery entry has the game `state`, its `id`, the states that may come before\n\t(the `precursors`) and the states that may follow (the `descendants`).\n\t*/\n\tentry: function entry(state, id) {\n\t\tid = id || this.stateIdentifier(state);\n\t\tif (this.has(id)) {\n\t\t\treturn this.get(id);\n\t\t} else {\n\t\t\tvar _entry = { id: id, state: state, precursors: [], descendants: {} };\n\t\t\tthis.__entries__[id] = _entry;\n\t\t\treturn _entry;\n\t\t}\n\t},\n\t\n\t/** An entry's `descendant(entry, moves)` is the entry of the game state \n\tfollowing the given entry's game state with the given moves. The method not\n\tonly returns the entry is this state, it creates and caches that entry if \n\tnot present.\n\t*/\n\tdescendant: function descendant(entry, moves) {\n\t\tvar movesId = this.moveIdentifier(moves),\n\t\t\tdescendants = entry.descendants;\n\t\tif (descendants.hasOwnProperty(movesId)) { // Already expanded.\n\t\t\treturn descendants[movesId][1];\n\t\t} else {\n\t\t\tvar nextState = entry.state.next(moves),\n\t\t\t\tnextStateId = this.stateIdentifier(nextState),\n\t\t\t\tnextEntry = this.get(nextStateId) || // Reuse entry in cache if it exists.\n\t\t\t\t\tthis.entry(nextState, nextStateId); // Else add new entry.\n\t\t\tdescendants[movesId] = [moves, nextEntry];\n\t\t\tnextEntry.precursors.push([moves, entry]);\n\t\t\treturn nextEntry;\n\t\t}\n\t},\n\t\n\t/** An entry `descendants(entry)` is an array of all the entry's \n\tdescendants, for all the possible moves for the entry's state.\n\t*/\n\tdescendants: function descendants(entry) {\n\t\tvar descendant = this.descendant.bind(this, entry);\n\t\tif (arguments.length > 1) {\n\t\t\treturn Array.prototype.slice.call(arguments, 1).map(descendant);\n\t\t} else { // if (arguments.length == 0)\n\t\t\treturn entry.state.possibleMoves().map(descendant);\n\t\t}\n\t},\n\t\n\t/** A clear cache has no entries and of course no root.\n\t*/\n\tclear: function clear() {\n\t\tthis.__entries__ = {};\n\t\tthis.__root__ = null;\n\t},\n\t\n\t/** If `root()` is called without arguments, it returns the current root.\n\tIf a state is given, that state is assigned as the new root, and the whole\n\tcache is pruned.\n\t*/\n\troot: function root(state) {\n\t\tif (arguments.length > 0) { // Called with argument means setter.\n\t\t\tvar stateId = this.stateIdentifier(state);\n\t\t\tthis.__root__ = this.get(stateId) || this.entry(state, stateId);\n\t\t\tthis.prune(stateId);\n\t\t}\n\t\treturn this.__root__;\n\t},\n\t\n\t/** `prune(id=root.id)` deletes all nodes except the one with the given id \n\tand its descendants.\n\t*/\n\tprune: function prune(id) {\n\t\tvar pending = [id || this.__root__.id], \n\t\t\tpruned = {},\n\t\t\tentry;\n\t\twhile (id = pending.shift()) {\n\t\t\tif (!pruned.hasOwnProperty(id)) {\n\t\t\t\tentry = this.get(id);\n\t\t\t\tpruned[id] = entry;\n\t\t\t\tpending.push.apply(pending, iterable(entry.descendants).mapApply(function (id, pair) {\n\t\t\t\t\treturn pair[1][id];\n\t\t\t\t}).toArray());\n\t\t\t}\n\t\t}\n\t\treturn this.__entries__ = pruned;\n\t}\t\n}); // declare Cache\n","/** # Game tree\r\n\r\nA data structure to help building game trees, i.e. trees in which each node is a game state, the\r\nfinal states are leaves and each child node belongs to one of the next states of its parent.\r\n*/\r\nvar GameTree = declare({\r\n\t/** Each instance represents a node in the game tree. The `parent` must be null or undefined at\r\n\tthe root. The given `transition` is either the moves or the aleatory values used to move from \r\n\tthe parent's state to this node's state. They also must be null or undefined at the root.\r\n\t*/\r\n\tconstructor: function GameTree(parent, state, transition) {\r\n\t\tthis.parent = parent;\r\n\t\tthis.state = state;\r\n\t\tthis.transition = transition;\r\n\t\tthis.children = {};\r\n\t},\r\n\t\r\n\t/** This node's `children` are stored in an object, hence getting the count is a little tricky.\r\n\t*/\r\n\tchildrenCount: function childrenCount() {\r\n\t\treturn Object.keys(this.children).length;\r\n\t},\r\n\t\r\n\t/** In the `children` object nodes are stored with a serialization of their transitions as keys.\r\n\tBy default the JSON _\"strinigification\"_ is used.\r\n\t*/\r\n\t__childSerialization__: function __childSerialization__(moves) {\r\n\t\treturn JSON.stringify(moves);\r\n\t},\r\n\t\r\n\t/** A node expansion takes the `moves` to calculate the next state and creates the child node\r\n\twith it. If the node already exists, it is returned and none is created.\r\n\t*/\r\n\texpand: function expand(transition) {\r\n\t\tvar key = this.__childSerialization__(transition),\r\n\t\t\tchild = this.children[key], nextState;\r\n\t\tif (!child) {\r\n\t\t\ttry {\r\n\t\t\t\tnextState = this.state.next(transition); \r\n\t\t\t} catch (err) {\r\n\t\t\t\traise(\"Node expansion for \", this.state, \" with \", JSON.stringify(transition),\r\n\t\t\t\t\t\" failed with: \", err);\r\n\t\t\t}\r\n\t\t\tchild = new this.constructor(this, nextState, transition);\r\n\t\t\tthis.children[key] = child;\r\n\t\t}\r\n\t\treturn child;\r\n\t},\r\n\t\r\n\t/** Returns the possible moves is the state is an instance of Game, or the possible values if\r\n\tthe state is an instance of Aleatory.\r\n\t*/\r\n\tpossibleTransitions: function possibleTransitions() {\r\n\t\tvar state = this.state;\r\n\t\tif (state.isContingent) {\r\n\t\t\treturn state.possibleHaps();\r\n\t\t} else {\r\n\t\t\treturn state.possibleMoves();\r\n\t\t}\r\n\t},\r\n\t\r\n\t/** A full expansion creates all child nodes for this node.\r\n\t*/\r\n\texpandAll: function expandAll() {\r\n\t\tvar node = this;\r\n\t\treturn this.possibleTransitions().map(function (transition) {\r\n\t\t\treturn node.expand(// An array as transition means it belongs to a contingent state\r\n\t\t\t\tArray.isArray(transition) ? transition[0] : transition);\r\n\t\t});\r\n\t}\r\n}); // declare GameTree","/** # RandomPlayer\n\nAutomatic players that moves fully randomly.\n*/\t\nplayers.RandomPlayer = declare(Player, {\n\t/** The constructor takes the player's `name` and a `random` number generator\n\t(`base.Randomness.DEFAULT` by default).\n\t*/\n\tconstructor: function RandomPlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT });\n\t},\n\n\t/** The `decision(game, player)` is made completely at random.\n\t*/\n\tdecision: function(game, player) {\n\t\treturn this.random.choice(this.movesFor(game, player));\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'RandomPlayer',\n\t\tserializer: function serialize_RandomPlayer(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name', 'random']);\n\t\t}\n\t},\n}); // declare RandomPlayer.\n","/** # TracePlayer\n\nAutomatic player that is scripted previously.\n*/\nplayers.TracePlayer = declare(Player, {\n\t/** The constructor takes the player's `name` and the `trace` as an sequence of moves to make.\n\t*/\n\tconstructor: function TracePlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tthis.trace = iterable(params.trace);\n\t\tthis.__iter__ = this.trace.__iter__();\n\t\tthis.__decision__ = this.__iter__();\n\t},\n\n\t/** The `decision(game, player)` returns the next move in the trace, or the last one if the \n\ttrace has ended.\n\t*/\n\tdecision: function(game, player) {\n\t\ttry {\n\t\t\tthis.__decision__ = this.__iter__();\n\t\t} catch (err) {\n\t\t\tIterable.prototype.catchStop(err);\n\t\t}\n\t\treturn this.__decision__;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Player',\n\t\tserializer: function serialize_Player(obj) {\n\t\t\treturn [{name: obj.name, trace: obj.trace.toArray()}];\n\t\t}\n\t}\n}); // declare TracePlayer.\n","/** # HeuristicPlayer\n\nThis is the base type of automatic players based on heuristic evaluations of game states or moves.\n*/\n\nvar HeuristicPlayer = players.HeuristicPlayer = declare(Player, {\n\t/** The constructor takes the player's `name` and a `random` number generator \n\t(`base.Randomness.DEFAULT` by default). Many heuristic can be based on randomness, but this is \n\talso necessary to chose between moves with the same evaluation without any bias.\n\t*/\n\tconstructor: function HeuristicPlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT })\n\t\t\t.func('heuristic', { ignore: true });\n\t},\n\n\t/** An `HeuristicPlayer` choses the best moves at any given game state. For this purpose it \n\tevaluates every move with `moveEvaluation(move, game, player)`. By default this function \n\tevaluates the states resulting from making each move, which is the most common thing to do.\n\t*/\n\tmoveEvaluation: function moveEvaluation(move, game, player) {\n\t\tvar heuristicPlayer = this;\n\t\tif (Object.keys(move).length < 2) { // One active player.\n\t\t\treturn this.stateEvaluation(game.next(move), player);\n\t\t} else { // Many active players.\n\t\t\tvar sum = 0, count = 0;\n\t\t\tmove = copy(obj(player, [move[player]]), move);\n\t\t\tgame.possibleMoves(move).forEach(function (ms) {\n\t\t\t\tsum += heuristicPlayer.stateEvaluation(game.next(ms), player);\n\t\t\t\t++count;\n\t\t\t});\n\t\t\treturn count > 0 ? sum / count : 0; // Average all evaluations.\n\t\t}\n\t},\n\n\t/** The `stateEvaluation(game, player)` calculates a number as the assessment of the given game \n\tstate for the given player. The base implementation returns the result for the player is the \n\tgame has results, else it returns the heuristic value for the state.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\tvar gameResult = game.result();\n\t\treturn gameResult ? gameResult[player] : this.heuristic(game, player);\n\t},\n\n\t/** The `heuristic(game, player)` is an evaluation used at states that are not finished games. \n\tThe default implementation returns a random number in [-0.5, 0.5). This is only useful in \n\ttesting. Any serious use should redefine this.\n\t*/\n\theuristic: function heuristic(game, player) {\n\t\treturn this.random.random(-0.5, 0.5);\n\t},\n\t\n\t/** Heuristic players work by evaluating the moves of the `player` in the given `game` state. If\n\tthe game state is contingent, then all possible scenarios are evaluated and aggregated. The \n\tresult of `evaluatedMoves` is a sequence of pairs `[move, evaluation]`, or a future for such \n\tsequence if the evaluation function is asynchronous.\n\t*/\n\tevaluatedMoves: function evaluatedMoves(game, player) {\n\t\tvar heuristicPlayer = this,\n\t\t\tisAsync = false;\n\t\tif (!game.isContingent) {\n\t\t\t/** Every move is evaluated using `moveEvaluation`. This may be asynchronous and hence\n\t\t\tresult in a `Future`.\n\t\t\t*/\n\t\t\tvar result = this.possibleMoves(game, player).map(function (move) {\n\t\t\t\tvar e = heuristicPlayer.moveEvaluation(move, game, player);\n\t\t\t\tisAsync = isAsync || Future.__isFuture__(e);\n\t\t\t\treturn Future.then(e, function (e) {\n\t\t\t\t\treturn [move, e];\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn isAsync ? Future.all(result) : result;\n\t\t} else {\n\t\t\t/** Contingent game states don't have moves. Hence all posible haps are explored, and\n\t\t\twhen a non-contingent game state is reached the moves are evaluated.\n\t\t\t*/\n\t\t\tvar posible = iterable(game.possibleHaps()).mapApply(function (haps, prob) {\n\t\t\t\tvar es = heuristicPlayer.evaluatedMoves(game.next(haps), player);\n\t\t\t\tisAsync = isAsync || Future.__isFuture__(es);\n\t\t\t\treturn Future.then(es, function (es) {\n\t\t\t\t\treturn es.map(function (e) {\n\t\t\t\t\t\te[1] *= prob; // Multiply the evaluation by the probability of the haps.\n\t\t\t\t\t\treturn e;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t\t/** After all posible scenarios have been evaluated, group the evaluations by move and\n\t\t\tsum the evaluations weighted by probability.\n\t\t\t*/\n\t\t\treturn Future.then(isAsync ? Future.all(posible) : posible, function (posible) {\n\t\t\t\treturn iterable(posible).groupBy(function (p) {\n\t\t\t\t\treturn p[0]; // Group evaluations by move.\n\t\t\t\t}).mapApply(function (move, evals) {\n\t\t\t\t\treturn [move, iterable(evals).select(1).sum()];\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}, // evaluatedMoves()\n\t\n\t/** The `possibleMoves` for a `player` in a given `game` is a set of objects, with one move for\n\tthe player, and all the options for the opponents.\n\t*/\n\tpossibleMoves: function possibleMoves(game, player) {\n\t\tvar moves = game.moves();\n\t\traiseIf(!moves || !moves[player] || !Array.isArray(moves[player]) || moves[player].length < 1,\n\t\t\t\"Player \"+ player +\" has no moves in \"+ game +\" (moves= \"+ moves +\")!\");\n\t\treturn iterable(moves[player]).map(function (move) {\n\t\t\treturn copy(obj(player, move), moves);\n\t\t});\n\t},\n\t\n\t/** The `bestMoves(evaluatedMoves)` are all the best evaluated in the given sequence of tuples \n\t[move, evaluation].\n\t*/\n\tbestMoves: function bestMoves(evaluatedMoves) {\n\t\treturn Future.then(evaluatedMoves, function (evaluatedMoves) {\n\t\t\treturn iterable(evaluatedMoves).greater(function (pair) {\n\t\t\t\treturn pair[1];\n\t\t\t}).map(function (pair) {\n\t\t\t\treturn pair[0];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** The `decision(game, player)` selects randomly from the best evaluated moves.\n\t*/\n\tdecision: function decision(game, player) {\n\t\tvar random = this.random;\n\t\treturn Future.then(this.bestMoves(this.evaluatedMoves(game, player)), function (bestMoves) {\n\t\t\tbestMoves = iterable(bestMoves).toArray();\n\t\t\traiseIf(!bestMoves || !bestMoves.length, \n\t\t\t\t\"No moves where selected at \", game, \" for player \", player, \"!\");\n\t\t\treturn random.choice(bestMoves)[player];\n\t\t});\n\t},\n\t\n\t// ## Utilities to build heuristics ############################################################\n\t\n\t/** A `composite` heuristic function returns the weighted sum of other functions. The arguments \n\tmust be a sequence of heuristic functions and a weight. All weights must be between 0 and 1 and\n\tadd up to 1.\n\t*/\n\t'static composite': function composite() {\n\t\tvar components = Array.prototype.slice.call(arguments), weightSum = 0;\n\t\traiseIf(components.length < 1,\n\t\t\t\"HeuristicPlayer.composite() cannot take an odd number of arguments!\");\n\t\tfor (var i = 0; i < components.length; i += 2) {\n\t\t\traiseIf(typeof components[i] !== 'function', \n\t\t\t\t\"HeuristicPlayer.composite() argument \", i, \" (\", components[i], \") is not a function!\");\n\t\t\tcomponents[i+1] = +components[i+1];\n\t\t\traiseIf(isNaN(components[i+1]) || components[i+1] < 0 || components[i+1] > 1, \n\t\t\t\t\"HeuristicPlayer.composite() argument \", i+1, \" (\", components[i+1], \") is not a valid weight!\");\n\t\t}\n\t\treturn function compositeHeuristic(game, player) {\n\t\t\tvar sum = 0;\n\t\t\tfor (var i = 0; i+1 < components.length; i += 2) {\n\t\t\t\tsum += components[i](game, player) * components[i+1];\n\t\t\t}\n\t\t\treturn sum;\n\t\t};\n\t}\n}); // declare HeuristicPlayer.","/** # MaxNPlayer\n\nAutomatic players based on the MaxN algorithm, a MiniMax variant for games of more than two players.\n*/\nvar MaxNPlayer = players.MaxNPlayer = declare(HeuristicPlayer, {\n\t/** Besides the parameters of every [`HeuristicPlayer`](HeuristicPlayer.js.html), an `horizon` \n\tfor the search may be specified (3 plies by default).\n\t*/\n\tconstructor: function MaxNPlayer(params) {\n\t\tHeuristicPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.integer('horizon', { defaultValue: 3, coerce: true });\n\t},\n\n\t/** This player evaluates each state using the `maxn` method, taking the evaluation for the \n\tgiven `player`.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\treturn this.maxN(game, player, 0)[player];\n\t},\n\n\t/** `heuristics(game)` returns an heuristic value for each players in the game, as an object.\n\t*/\n\theuristics: function heuristic(game) {\n\t\tvar result = {}, maxN = this;\n\t\tgame.players.forEach(function (role) {\n\t\t\tresult[role] = maxN.heuristic(game, role);\n\t\t});\n\t\treturn result;\n\t},\n\n\t/** `quiescence(game, player, depth)` is a stability test for the given `game` state and the \n\tgiven `player`. If the game is quiescent, this function must return evaluations. Else it must \n\treturn null. \n\t\n\tFinal game states are always quiescent, and their evaluations are the game's result for each \n\tplayer. This default implementation also returns heuristic evaluations for every game state at \n\ta deeper depth than the player's horizon, calculated via the `heuristics()` method. \n\t*/\n\tquiescence: function quiescence(game, player, depth) {\n\t\tvar results = game.result();\n\t\tif (results) {\n\t\t\treturn results;\n\t\t} else if (depth >= this.horizon) {\n\t\t\treturn this.heuristics(game);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t},\n\t\n\t/** The core `maxN(game, player, depth)` algorithm return the evaluations for each player of the \n\tgiven game, assuming each player tries to maximize its own evaluation regardless of the others'.\n\t*/\n\tmaxN: function maxN(game, player, depth) {\n\t\tvar values = this.quiescence(game, player, depth);\n\t\tif (!values) { // game is not quiescent.\n\t\t\tvar activePlayer = game.activePlayer(),\n\t\t\t\tmoves = this.movesFor(game, activePlayer),\n\t\t\t\totherValues, next;\n\t\t\tvalues = {};\n\t\t\tif (moves.length < 1) {\n\t\t\t\tthrow new Error('No moves for unfinished game '+ game +'.');\n\t\t\t}\n\t\t\tfor (var i = 0; i < moves.length; ++i) {\n\t\t\t\tnext = game.next(obj(activePlayer, moves[i]));\n\t\t\t\totherValues = this.maxN(next, player, depth + 1);\n\t\t\t\tif (otherValues[activePlayer] > (values[activePlayer] || -Infinity)) {\n\t\t\t\t\tvalues = otherValues;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn values;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'MaxNPlayer',\n\t\tserializer: function serialize_MaxNPlayer(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name', 'horizon']);\n\t\t}\n\t}\n}); // declare MaxNPlayer.","/** # MiniMaxPlayer\n\nAutomatic players based on pure MiniMax.\n*/\nvar MiniMaxPlayer = players.MiniMaxPlayer = declare(HeuristicPlayer, {\n\t/** The constructor takes the player's `name` and the MiniMax search's \n\t`horizon` (`4` by default).\n\t*/\n\tconstructor: function MiniMaxPlayer(params) {\n\t\tHeuristicPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.integer('horizon', { defaultValue: 4, coerce: true });\n\t},\n\n\t/** Every state's evaluation is the minimax value for the given game and \n\tplayer.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\treturn this.minimax(game, player, 0);\n\t},\n\n\t/** The `quiescence(game, player, depth)` method is a stability test for the \n\tgiven game state. If the game is quiescent, this function must return an \n\tevaluation. Else it must return NaN or an equivalent value. \n\t\n\tFinal game states are always quiescent, and their evaluation is the game's\n\tresult for the given player. This default implementation also return an \n\theuristic evaluation for every game state at a deeper depth than the \n\tplayer's horizon.\n\t*/\n\tquiescence: function quiescence(game, player, depth) {\n\t\tvar results = game.result();\n\t\tif (results) {\n\t\t\treturn results[player];\n\t\t} else if (depth >= this.horizon) {\n\t\t\treturn this.heuristic(game, player);\n\t\t} else {\n\t\t\treturn NaN;\n\t\t}\n\t},\n\t\n\t/** The `minimax(game, player, depth)` method calculates the Minimax \n\tevaluation of the given game for the given player. If the game is not \n\tfinished and the depth is greater than the horizon, `heuristic` is used.\n\t*/\n\tminimax: function minimax(game, player, depth) {\n\t\tvar value = this.quiescence(game, player, depth);\n\t\tif (isNaN(value)) { // game is not quiescent.\n\t\t\tvar activePlayer = game.activePlayer(),\n\t\t\t\tmoves = this.movesFor(game, activePlayer), \n\t\t\t\tcomparison, next;\n\t\t\tif (moves.length < 1) {\n\t\t\t\tthrow new Error('No moves for unfinished game '+ game +'.');\n\t\t\t}\n\t\t\tif (activePlayer == player) {\n\t\t\t\tvalue = -Infinity;\n\t\t\t\tcomparison = Math.max;\n\t\t\t} else {\n\t\t\t\tvalue = +Infinity;\n\t\t\t\tcomparison = Math.min;\n\t\t\t}\n\t\t\tfor (var i = 0; i < moves.length; ++i) {\n\t\t\t\tnext = game.next(obj(activePlayer, moves[i]));\n\t\t\t\tvalue = comparison(value, this.minimax(next, player, depth + 1));\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'MiniMaxPlayer',\n\t\tserializer: function serialize_MiniMaxPlayer(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name', 'horizon']);\n\t\t}\n\t}\n}); // declare MiniMaxPlayer.","/** # AlphaBetaPlayer\n\nAutomatic players based on MiniMax with alfa-beta pruning.\n*/\nplayers.AlphaBetaPlayer = declare(MiniMaxPlayer, {\n\t/** The constructor does not add anything to the parent\n\t[`MiniMaxPlayer`](MiniMaxPlayer.js.html) constructor.\n\t*/\n\tconstructor: function AlphaBetaPlayer(params) {\n\t\tMiniMaxPlayer.call(this, params);\n\t},\n\n\t/** Every state's evaluation is the minimax value for the given game and \n\tplayer. The alfa an beta arguments are initialized with `-Infinity` and\n\t`Infinity`.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\treturn this.minimax(game, player, 0, -Infinity, Infinity);\n\t},\n\n\t/** The `minimax(game, player, depth, alfa, beta)` method calculates the \n\tMinimax evaluation of the given game for the given player. If the game is \n\tnot finished and the depth is greater than the horizon, the heuristic is\n\tused.\n\t*/\n\tminimax: function minimax(game, player, depth, alpha, beta) {\n\t\tvar value = this.quiescence(game, player, depth);\n\t\tif (!isNaN(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tvar activePlayer = game.activePlayer(),\n\t\t\tisActive = activePlayer == player,\n\t\t\tmoves = this.movesFor(game, activePlayer), next;\n\t\tif (moves.length < 1) {\n\t\t\tthrow new Error('No moves for unfinished game '+ game +'.');\n\t\t}\n\t\tfor (var i = 0; i < moves.length; i++) {\n\t\t\tnext = game.next(obj(activePlayer, moves[i]));\n\t\t\tvalue = this.minimax(next, player, depth + 1, alpha, beta);\n\t\t\tif (isActive) {\n\t\t\t\tif (alpha < value) { // MAX\n\t\t\t\t\talpha = value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (beta > value) { // MIN\n\t\t\t\t\tbeta = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (beta <= alpha) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn isActive ? alpha : beta;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'AlphaBetaPlayer',\n\t\tserializer: function serialize_AlphaBetaPlayer(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name', 'horizon']);\n\t\t}\n\t}\n}); // declare AlphaBetaPlayer.\n","/** # MonteCarloPlayer\n\nAutomatic player based on flat Monte Carlo tree search.\n*/\nvar MonteCarloPlayer = players.MonteCarloPlayer = declare(HeuristicPlayer, {\n\t/** The constructor builds a player that chooses its moves using the \n\t[flat Monte Carlo game tree search method](http://en.wikipedia.org/wiki/Monte-Carlo_tree_search). \n\tThe parameters may include:\n\t\n\t+ `simulationCount=30`: Maximum amount of simulations performed for each available move at each \n\t\tdecision.\n\t+ `timeCap=1000ms`: Time limit for the player to decide.\n\t+ `horizon=500`: Maximum amount of moves performed in simulations.\n\t+ `agent`: Player instance used in the simulations. If undefined moves are chosen at random. \n\t\tAgents with asynchronous decisions are not supported.\n\t*/\n\tconstructor: function MonteCarloPlayer(params) {\n\t\tHeuristicPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.number('simulationCount', { defaultValue: 30, coerce: true })\n\t\t\t.number('timeCap', { defaultValue: 1000, coerce: true })\n\t\t\t.number('horizon', { defaultValue: 500, coerce: true });\n\t\tif (params) switch (typeof params.agent) {\n\t\t\tcase 'function': this.agent = new HeuristicPlayer({ heuristic: params.agent }); break;\n\t\t\tcase 'object': this.agent = params.agent; break;\n\t\t\tdefault: this.agent = null;\n\t\t}\n\t},\n\t\n\t/** `evaluatedMoves(game, player)` returns a sequence with the evaluated moves.\n\t*/\n\tevaluatedMoves: function evaluatedMoves(game, player) {\n\t\traiseIf(game.isContingent, \"MonteCarloPlayer cannot evaluate root contingent states!\"); //FIXME\n\t\tvar monteCarloPlayer = this,\n\t\t\tendTime = Date.now() + this.timeCap,\n\t\t\tgameNext = game.next.bind(game),\n\t\t\toptions = this.possibleMoves(game, player).map(function (move) {\n\t\t\t\treturn { \n\t\t\t\t\tmove: move, \n\t\t\t\t\tnexts: (Object.keys(move).length < 2 ? \n\t\t\t\t\t\t[game.next(move)] :\n\t\t\t\t\t\tgame.possibleMoves(copy(obj(player, [move[player]]), move)).map(gameNext)\n\t\t\t\t\t),\n\t\t\t\t\tsum: 0, \n\t\t\t\t\tcount: 0 \n\t\t\t\t};\n\t\t\t}).toArray(); // Else the following updates won't work.\n\t\tfor (var i = 0; i < this.simulationCount && Date.now() < endTime; ++i) {\n\t\t\toptions.forEach(function (option) {\n\t\t\t\toption.nexts = option.nexts.filter(function (next) {\n\t\t\t\t\tvar sim = monteCarloPlayer.simulation(next, player);\n\t\t\t\t\toption.sum += sim.result[player];\n\t\t\t\t\t++option.count;\n\t\t\t\t\treturn sim.plies > 0;\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\treturn options.map(function (option) {\n\t\t\traiseIf(isNaN(option.sum), \"State evaluation is NaN for move \", option.move, \"!\");\n\t\t\treturn [option.move, option.count > 0 ? option.sum / option.count : 0];\n\t\t});\n\t},\n\t\n\t/** This player's `stateEvaluation(game, player)` runs `simulationCount` simulations and returns \n\tthe average result. It is provided for compatibility, since `evaluatedMoves` does not call it.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\tvar resultSum = 0, \n\t\t\tsimulationCount = this.simulationCount,\n\t\t\tsim;\n\t\tfor (var i = 0; i < simulationCount; ++i) {\n\t\t\tsim = this.simulation(game, player);\n\t\t\tresultSum += sim.result[player];\n\t\t\tif (sim.plies < 1) { // game is final.\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn simulationCount > 0 ? resultSum / simulationCount : 0;\n\t},\n\t\n\t/** A `simulation(game, player)` plays a random match from the given `game` state and returns an \n\tobject with the final state (`game`), its result (`result`) and the number of plies simulated \n\t(`plies`).\n\t*/\n\tsimulation: function simulation(game, player) {\n\t\tvar mc = this,\n\t\t\tplies, move, moves;\n\t\tfor (plies = 0; true; ++plies) {\n\t\t\tif (game.isContingent) {\n\t\t\t\tgame = game.randomNext(this.random);\n\t\t\t} else {\n\t\t\t\tmoves = game.moves();\n\t\t\t\tif (!moves) { // If game state is final ...\n\t\t\t\t\treturn { game: game, result: game.result(), plies: plies };\n\t\t\t\t} else if (plies > this.horizon) { // If past horizon ...\n\t\t\t\t\treturn { game: game, result: obj(player, this.heuristic(game, player)), plies: plies };\n\t\t\t\t} else { // ... else advance.\n\t\t\t\t\tmove = {};\n\t\t\t\t\tgame.activePlayers.forEach(function (activePlayer) {\n\t\t\t\t\t\tmove[activePlayer] = mc.agent ? mc.agent.decision(game, activePlayer) \n\t\t\t\t\t\t\t: mc.random.choice(moves[activePlayer]);\n\t\t\t\t\t});\n\t\t\t\t\tgame = game.next(move);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\traise(\"Simulation ended unexpectedly for player \", player, \" in game \", game, \"!\");\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'MonteCarloPlayer',\n\t\tserializer: function serialize_MonteCarloPlayer(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name', 'simulationCount', 'timeCap', 'agent']);\n\t\t}\n\t}\n}); // declare MonteCarloPlayer\n","/** # UCTPlayer\n\nAutomatic player based on Upper Confidence Bound Monte Carlo tree search.\n*/\nplayers.UCTPlayer = declare(MonteCarloPlayer, {\n\t/** The constructor parameters may include:\n\t\n\t+ `simulationCount=30`: Maximum amount of simulations performed at each decision.\n\t+ `timeCap=1000ms`: Time limit for the player to decide.\n\t*/\n\tconstructor: function UCBPlayer(params) {\n\t\tMonteCarloPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `explorationConstant=sqrt(2)`: The exploration factor used in the UCT selection.\n\t\t*/\n\t\t\t.number('explorationConstant', { defaultValue: Math.sqrt(2), coerce: true })\n\t\t;\n\t},\n\t\n\t/** Evaluate all child nodes of the given `gameTree` according to the [Upper Confidence Bound\n\tformula by L. Kocsis and Cs. Szepesvári](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.102.1296). \n\tReturns one of the greatest evaluated, chosen at random.\n\t*/\n\tselectNode: function selectNode(gameTree, totalSimulationCount, explorationConstant) {\n\t\texplorationConstant = isNaN(explorationConstant) ? this.explorationConstant : +explorationConstant;\n\t\treturn this.random.choice(iterable(gameTree.children).select(1).greater(function (n) {\n\t\t\treturn n.uct.rewards / n.uct.visits + \n\t\t\t\texplorationConstant * Math.sqrt(Math.log(totalSimulationCount) / n.uct.visits);\n\t\t}));\n\t},\n\t\n\t/** `evaluatedMoves(game, player)` return a sequence with the evaluated moves.\n\t*/\n\tevaluatedMoves: function evaluatedMoves(game, player) {\n\t\tvar root = new GameTree(null, game),\n\t\t\tendTime = Date.now() + this.timeCap,\n\t\t\tnode, simulationResult;\n\t\troot.uct = {\n\t\t\tpending: this.random.shuffle(root.possibleTransitions()), visits: 0, rewards: 0\n\t\t};\n\t\tfor (var i = 0; i < this.simulationCount && Date.now() < endTime; ++i) {\n\t\t\tnode = root;\n\t\t\twhile (node.uct.pending.length < 1 && node.childrenCount() > 0) { // Selection\n\t\t\t\tnode = this.selectNode(node, i+1, this.explorationConstant);\n\t\t\t}\n\t\t\tif (node.uct.pending.length > 0) { // Expansion\n\t\t\t\tnode = node.expand(node.uct.pending.pop());\n\t\t\t\tnode.uct = {\n\t\t\t\t\tpending: this.random.shuffle(node.possibleTransitions()), visits: 0, rewards: 0\n\t\t\t\t};\n\t\t\t}\n\t\t\tsimulationResult = this.simulation(node.state, player); // Simulation\n\t\t\tfor (; node; node = node.parent) { // Backpropagation\n\t\t\t\t++node.uct.visits;\n\t\t\t\tnode.uct.rewards += (game.normalizedResult(simulationResult.result)[player] + 1) / 2;\n\t\t\t}\n\t\t}\n\t\treturn iterable(root.children).select(1).map(function (n) {\n\t\t\treturn [n.transition, n.uct.visits];\n\t\t});\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'UCTPlayer',\n\t\tserializer: function serialize_UCTPlayer(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name', 'simulationCount', 'timeCap', 'explorationConstant']);\n\t\t}\n\t}\n}); // declare UCTPlayer\n","/** # UserInterfacePlayer\n\nImplementation of player user interfaces and proxies.\n*/\nvar UserInterfacePlayer = players.UserInterfacePlayer = declare(Player, {\n\t/** `UserInterfacePlayer` is a generic type for all players that are proxies \n\tof user interfaces.\n\t*/\n\tconstructor: function UserInterfacePlayer(params) {\n\t\tPlayer.call(this, params);\n\t},\n\n\t/** The `participate` method assigns this players role to the given role.\n\t*/\n\tparticipate: function participate(match, role) {\n\t\tthis.role = role;\n\t\treturn this;\n\t},\n\t\n\t/** The `decision(game, player)` of this players returns a future that will \n\tbe resolved when the `perform()` method is called.\n\t*/\n\tdecision: function decision(game, player) {\n\t\tif (this.__future__ && this.__future__.isPending()) {\n\t\t\tthis.__future__.resolve(new Match.CommandQuit());\n\t\t}\n\t\tthis.__future__ = new Future();\n\t\treturn this.__future__;\n\t},\n\t\n\t/** User interfaces have to be configured to call `perform(action)` upon \n\teach significant user action.players. It resolves the future returned by the\n\t`decision()` method.\n\t*/\n\tperform: function perform(action) {\n\t\tvar future = this.__future__;\n\t\tif (future) {\n\t\t\tthis.__future__ = null;\n\t\t\tfuture.resolve(action);\n\t\t}\n\t\treturn !!future;\n\t}\n}); // declare UserInterfacePlayer.\n\n// ## User interfaces ##########################################################\n\nvar UserInterface = players.UserInterface = declare({\n\t/** `UserInterface` is the base abstract type for user interfaces that \n\tdisplay a game and allow one or more players to play. The `config` argument \n\tmay include the `match` being played.\n\t*/\n\tconstructor: function UserInterface(config) {\n\t\tthis.onBegin = this.onBegin.bind(this);\n\t\tthis.onNext = this.onNext.bind(this);\n\t\tthis.onEnd = this.onEnd.bind(this);\n\t\tif (config.match) {\n\t\t\tthis.show(config.match);\n\t\t}\n\t},\n\t\n\t/** `show(match)` discards the current state and sets up to display the \n\tgiven `match`.\n\t*/\n\tshow: function show(match) {\n\t\tif (this.match) {\n\t\t\tmatch.events.off('begin', this.onBegin);\n\t\t\tmatch.events.off('next', this.onNext);\n\t\t\tmatch.events.off('end', this.onEnd);\n\t\t}\n\t\tthis.match = match;\n\t\tmatch.events.on('begin', this.onBegin);\n\t\tmatch.events.on('next', this.onNext);\n\t\tmatch.events.on('end', this.onEnd);\n\t},\n\t\n\t/** When the player is participated of a match, callbacks are registered to \n\tthe following match's events.\n\t\n\t+ `onBegin(game)` handles the `'begin'` event of the match.\n\t*/\n\tonBegin: function onBegin(game) {\n\t\tthis.display(game);\n\t},\n\t\n\t/** + `onNext(game, next)` handles the `'move'` event of the match.\n\t*/\n\tonNext: function onNext(game, next) {\n\t\tthis.display(next);\n\t},\n\t\n\t/** + `onEnd(game, results)` handles the `'end'` event of the match.\n\t*/\n\tonEnd: function onEnd(game, results) {\n\t\tthis.results = results;\n\t\tthis.display(game);\n\t},\n\t\n\t/** `display(game)` renders the game in this user interface. Not \n\timplemented, so please override.\n\t*/\n\tdisplay: unimplemented(\"UserInterface\", \"display\"),\n\t\n\t/** `perform(action, actionRole=undefined)` makes the given player perform \n\tthe action if the player has a `perform()` method and is included in this \n\tUI's players.\n\t*/\n\tperform: function perform(action, actionRole) {\n\t\titerable(this.match.players).forEach(function (pair) {\n\t\t\tvar role = pair[0], player = pair[1];\n\t\t\tif (player instanceof UserInterfacePlayer && (!actionRole || player.role === actionRole)) {\n\t\t\t\tplayer.perform(action);\n\t\t\t}\n\t\t});\n\t}\n}); // declare UserInterface.\n\n// ### HTML based user interfaces ##############################################\n\nUserInterface.BasicHTMLInterface = declare(UserInterface, {\n\t/** `BasicHTMLInterface(config)` builds a simple HTML based UI, that renders \n\tthe game on the DOM using its `display()` method. The `config` argument may\n\tinclude:\n\t\n\t+ `document=window.document`: the DOM root.\n\t+ `container`: the DOM node to render the game in, or its name.\n\t*/\n\tconstructor: function BasicHTMLInterface(config) {\n\t\tUserInterface.call(this, config);\n\t\tthis.document = config.document || base.global.document;\n\t\tthis.container = config.container;\n\t\tif (typeof this.container === 'string') {\n\t\t\tthis.container = this.document.getElementById(this.container);\n\t\t}\n\t},\n\n\t/** On `display(game)` the `container` is emptied and the game is rendered\n\tusing its `display(ui)` method.\n\t*/\n\tdisplay: function display(game) {\n\t\tvar container = this.container, child;\n\t\twhile (child = container.firstChild) { // It seems the DOM API does not provide a method for this. :-(\n\t\t\tcontainer.removeChild(child);\n\t\t}\n\t\tgame.display(this);\n\t},\n\t\n\t/** `build()` helps DOM creation. The `nodes` argument specifies DOM \n\telements, each with an array of the shape: `[tag, attributes, elements]`.\n\t*/\n\tbuild: function build(parent, nodes) {\n\t\tvar ui = this;\n\t\tnodes.forEach(function (node) {\n\t\t\tvar element;\n\t\t\tif (Array.isArray(node)) {\n\t\t\t\telement = ui.document.createElement(node[0]);\n\t\t\t\tif (node.length > 2 && node[1]) { // There are attributes.\n\t\t\t\t\tvar attrs = node[1];\n\t\t\t\t\tfor (var attrName in attrs) if (attr.hasOwnProperty(attrName)) {\n\t\t\t\t\t\telement.setAttribute(attrName, attrs[attrName]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (node.length > 1 && node[node.length-1]) { // There are child elements.\n\t\t\t\t\tui.build(element, node[node.length-1]);\n\t\t\t\t}\n\t\t\t} else if (typeof node === 'string') {\n\t\t\t\telement = ui.document.createTextNode(node);\n\t\t\t}\n\t\t\tif (element && parent) {\n\t\t\t\tparent.appendChild(element);\n\t\t\t}\n\t\t});\n\t\treturn parent;\n\t}\n}); // declare HTMLInterface.\n","/** # WebWorkerPlayer\n\nA proxy for another player executing inside a webworker.\n*/\nvar WebWorkerPlayer = players.WebWorkerPlayer = declare(Player, {\n\t/** The constructor builds a player that is a proxy for another player executing in a webworker. \n\tThe parameters must include:\n\t*/\n\tconstructor: function WebWorkerPlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `worker`: The `Worker` instance where the actual player is executing.\n\t\t\t*/\n\t\t\t.object('worker');\n\t\tthis.worker.onmessage = base.Parallel.prototype.__onmessage__.bind(this);\n\t},\n\t\n\t/** The static `createWorker(playerBuilder)` method creates (asynchronously) and initializes a \n\tweb worker. The modules `creatartis-base` and `ludorum` are loaded in the webworker's root \n\tnamespace (`self`). If a `workerSetup` function is given, it is also run. After that, the \n\t`playerBuilder` function is called and its results stored in the variable `self.PLAYER`.\n\t*/\n\t'static createWorker': function createWorker(playerBuilder, workerSetup) {\n\t\traiseIf('string function'.indexOf(typeof playerBuilder) < 0, \"Invalid player builder: \"+ playerBuilder +\"!\");\n\t\tvar parallel = new base.Parallel();\n\t\treturn parallel.loadModule(exports, true).then(function () {\n\t\t\treturn parallel.run(\n\t\t\t\t(typeof workerSetup === 'function' ? '('+ workerSetup +')(),\\n' : '')+\n\t\t\t\t'self.PLAYER = ('+ playerBuilder +').call(self),\\n'+\n\t\t\t\t'\"OK\"'\n\t\t\t);\n\t\t}).then(function () {\n\t\t\treturn parallel.worker;\n\t\t});\n\t},\n\t\n\t/** The static `create(params)` method creates (asynchronously) and initializes a \n\t`WebWorkerPlayer`, with a web worker ready to play. The `params` must include the \n\t`playerBuilder` function to execute on the web worker's environment.\n\t*/\n\t'static create': function create(params) {\n\t\tvar WebWorkerPlayer = this;\n\t\treturn WebWorkerPlayer.createWorker(params.playerBuilder, params.workerSetup).then(function (worker) {\n\t\t\treturn new WebWorkerPlayer({name: name, worker: worker}); \n\t\t});\n\t},\n\t\n\t/** This player's `decision(game, player)` is delegated to this player's webworker, returning a \n\tfuture that will be resolved when the parallel execution is over.\n\t\n\tWarning! If this method is called while another decision is pending, the player will assume the \n\tprevious match was aborted, issuing a quit command.\n\t*/\n\tdecision: function decision(game, player) {\n\t\tif (this.__future__ && this.__future__.isPending()) {\n\t\t\tthis.__future__.resolve(Match.commandQuit);\n\t\t}\n\t\tthis.__future__ = new Future();\n\t\tthis.worker.postMessage('PLAYER.decision(Sermat.mat('+ JSON.stringify(Sermat.ser(game)) +'), '+ JSON.stringify(player) +')');\n\t\treturn this.__future__;\n\t}\n}); // declare WebWorkerPlayer","/** # Aleatory\n\nAleatories are different means of non determinism that games can use, like: dice, card decks, \nroulettes, etc. They are used by `Aleatoric` game states.\n*/\nvar Aleatory = exports.aleatories.Aleatory = declare({\n\t/** The base class implements an integer uniform random variable between a minimum and maximum\n\tvalue (inclusively).\n\t+ \n\t*/\n\tconstructor: function Aleatory(min, max) {\n\t\tswitch (arguments.length) {\n\t\t\tcase 1: this.range = [1, min]; break;\n\t\t\tcase 2: this.range = [min, max]; break;\n\t\t}\n\t},\n\t\n\t/** The `Aleatory.value()` can be used to obtain a valid random value for the random variable.\n\t*/\n\tvalue: function value(random) {\n\t\treturn (random || Randomness.DEFAULT).randomInt(this.range[0], this.range[1] + 1);\n\t},\n\t\t\n\t/** In order to properly search a game tree with aleatory nodes, the random variables' \n\tdistribution has to be known. `Aleatory.distribution()` computes the histogram for the random \n\tvariables on which this aleatory depends, as a sequence of pairs `[value, probability]`.\n\t\n\tBy default it returns a flat histogram, assuming the random variable is uniform.\n\t*/\n\tdistribution: function () {\n\t\tvar min = this.range[0], \n\t\t\tmax = this.range[1],\n\t\t\tprobability = 1 / (max - min + 1);\n\t\treturn Iterable.range(min, max + 1).map(function (value) {\n\t\t\treturn [value, probability];\n\t\t});\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Aleatory',\n\t\tserializer: function serialize_Aleatory(obj) {\n\t\t\treturn [this.range];\n\t\t}\n\t}\n}); // declare Aleatory.\n","/** # UniformAleatory\r\n\r\nAn uniform aleatory is one that ranges over a set of values, all of which have the same probability\r\nof occurrence.\r\n*/\r\nvar UniformAleatory = exports.aleatories.UniformAleatory = declare(Aleatory, {\r\n\t/** An uniform aleatory is defined by a sequence of `values`. The sequence cannot be empty, but\r\n\tone value is supported as weird as it may be.\r\n\t*/\r\n\tconstructor: function UniformAleatory(values) {\r\n\t\tthis.__values__ = iterable(values).toArray();\r\n\t\traiseIf(this.__values__.length < 1, \"No values for aleatory!\");\r\n\t},\r\n\r\n\t/** The `value` is one of the `values` used to build this aleatory, picked at random.\r\n\t*/\r\n\tvalue: function value(random) {\r\n\t\treturn (random || Randomness.DEFAULT).choice(this.__values__);\r\n\t},\r\n\t\r\n\t/** The `distribution` of an uniform aleatory is a sequence of pairs `[value, probability]`.\r\n\t*/\r\n\tdistribution: function distribution() {\r\n\t\tvar prob = 1 / this.__values__.length;\r\n\t\treturn this.__values__.map(function (v) {\r\n\t\t\treturn [v, prob];\r\n\t\t});\r\n\t},\r\n\t\r\n\t// ## Utilities ################################################################################\r\n\t\r\n\t/** Serialization and materialization using Sermat.\r\n\t*/\r\n\t'static __SERMAT__': {\r\n\t\tidentifier: 'UniformAleatory',\r\n\t\tserializer: function serialize_UniformAleatory(obj) {\r\n\t\t\treturn [this.__values__];\r\n\t\t}\r\n\t}\r\n});","/** # Dice aleatories\n\nImplementations of common dice and related functions.\n*/\nvar dice = aleatories.dice = {\n\t/** Common dice variants.\n\t*/\n\tD4: new Aleatory(1, 4),\n\tD6: new Aleatory(1, 6),\n\tD8: new Aleatory(1, 8),\n\tD10: new Aleatory(1, 10),\n\tD12: new Aleatory(1, 12),\n\tD20: new Aleatory(1, 20),\n\tD100: new Aleatory(1, 100),\n\t\n\t/** The `sumProbability` that rolling `n` dice of `s` sides yields a sum equal to `p`. Check the \n\tarticle at [Mathworld](http://mathworld.wolfram.com/Dice.html).\n\t*/\n\tsumProbability: function sumProbability(p, n, s) {\n\t\tn = n|0;\n\t\ts = s|0;\n\t\tp = p|0;\n\t\tif (isNaN(n) || isNaN(s) || isNaN(p) || n < 1 || s < 2) {\n\t\t\treturn NaN;\n\t\t} else if (p < n || p > n * s) {\n\t\t\treturn 0;\n\t\t} else {\n\t\t\tvar factorial = base.math.factorial,\n\t\t\t\tfact_n = factorial(n),\n\t\t\t\tfact_n_1 = fact_n / n; // factorial(n - 1)\n\t\t\treturn Math.pow(s, -n) *\n\t\t\t\tIterable.range(0, Math.floor((p - n) / s) + 1).map(function (k) {\n\t\t\t\t\tvar comb1 = fact_n / factorial(k) / factorial(n - k),\n\t\t\t\t\t\tx = p - s * k - 1,\n\t\t\t\t\t\tcomb2 = factorial(x) / fact_n_1 / factorial(x - n + 1);\n\t\t\t\t\treturn (k % 2 ? -1 : 1) * comb1 * comb2;\n\t\t\t\t}).sum();\n\t\t}\n\t}\n}; //// declare Dice.","/** Simple reference games with a predefined outcome, mostly for testing \n\tpurposes.\n*/\ngames.Predefined = declare(Game, {\n\t/** new games.Predefined(activePlayer, results, height=5, width=5):\n\t\tA pseudogame used for testing purposes. It will give width amount of \n\t\tmoves for each player until height moves pass. Then the match is \n\t\tfinished with the given results, or a tie as default.\n\t*/\n\tconstructor: function Predefined(activePlayer, results, height, width) {\n\t\tif (results) {\n\t\t\tthis.__results__ = results;\n\t\t\tthis.players = Object.keys(results);\n\t\t}\n\t\tGame.call(this, activePlayer);\n\t\tthis.height = isNaN(height) ? 5 : +height;\n\t\tthis.width = isNaN(width) ? 5 : +width;\n\t},\n\n\tname: 'Predefined',\n\t\n\t/** games.Predefined.players:\n\t\tDefault players for Predefined: A and B.\n\t*/\n\tplayers: ['A', 'B'],\n\n\t/** games.Predefined.__results__:\n\t\tDefault results for Predefined: a tie between A and B.\n\t*/\n\t__results__: {'A': 0, 'B': 0},\n\n\t/** games.Predefined.moves():\n\t\tMoves for a Predefined are numbers from 1 to this.width. \n\t*/\n\tmoves: function moves() {\n\t\tif (this.height > 0) {\n\t\t\treturn obj(this.activePlayer(), \n\t\t\t\tIterable.range(1, this.width + 1).toArray()\n\t\t\t);\n\t\t}\n\t},\n\n\t/** games.Predefined.result():\n\t\tReturned the predefined results if height is zero or less.\n\t*/\n\tresult: function result() {\n\t\treturn this.height > 0 ? null : this.__results__;\n\t},\n\n\t/** games.Predefined.next(moves):\n\t\tMoves are completely irrelevant. They only advance in the match.\n\t*/\n\tnext: function next() {\n\t\treturn new this.constructor(this.opponent(), this.__results__, this.height - 1, this.width);\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Predefined',\n\t\tserializer: function serialize_Predefined(obj) {\n\t\t\treturn [obj.activePlayer(), obj.__results__, obj.height, obj.width];\n\t\t}\n\t}\n}); // declare Predefined.\n","/** # Choose2Win\n\nChoose2Win is a simple silly game. Each turn one of the players can decide to win, to lose or to \npass the turn. It is meant to be used only for testing Ludorum, since a game can hardly become less \ninteresting than this.\n*/\ngames.Choose2Win = declare(Game, {\n\t/** The constructor takes a number of turns for the game to last (`Infinity` by default), the \n\tactive player and the winner if the game has ended. \n\t*/\n\tconstructor: function Choose2Win(turns, activePlayer, winner) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.__turns__ = isNaN(turns) ? Infinity : +turns;\n\t\tthis.__winner__ = winner;\t\t\n\t},\n\n\tname: 'Choose2Win',\n\t\n\t/** Players of this dummy game are labeled This and That.\n\t*/\n\tplayers: ['This', 'That'],\n\n\t/** Every turn the active player's moves are: `'win'`, `'lose'` and `'pass'`.\n\t*/\n\tmoves: function moves() {\n\t\tif (!this.__winner__ && this.__turns__ > 0) {\n\t\t\treturn obj(this.activePlayer(), ['win', 'lose', 'pass']);\n\t\t}\n\t},\n\n\t/** Victory is for whom chooses to win first. Defeat is for whom chooses to lose first. A draw \n\tonly results when the limit of turns (if any) is met.\n\t*/\n\tresult: function result() {\n\t\treturn this.__winner__ ? this.victory(this.__winner__) :\n\t\t\tthis.__turns__ < 1 ? this.draw() : null;\n\t},\n\n\t/** If a player moves to win or lose, a final game state is returned. Else the game goes on.\n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\topponent = this.opponent(activePlayer);\n\t\traiseIf(!moves.hasOwnProperty(activePlayer), 'No move for active player ', activePlayer, ' at ', this, '!');\n\t\tswitch (moves[activePlayer]) {\n\t\t\tcase 'win': return new this.constructor(this.__turns__ - 1, opponent, activePlayer);\n\t\t\tcase 'lose': return new this.constructor(this.__turns__ - 1, opponent, opponent);\n\t\t\tcase 'pass': return new this.constructor(this.__turns__ - 1, opponent);\n\t\t\tdefault: raise('Invalid move ', moves[activePlayer], ' for player ', activePlayer, ' at ', this, '!');\n\t\t}\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Choose2Win',\n\t\tserializer: function serialize_Choose2Win(obj) {\n\t\t\tvar r = [obj.__turns__, obj.activePlayer()];\n\t\t\tif (obj.__winner__) {\n\t\t\t\tr.push(obj.__winner__);\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\t}\n}); // declare Choose2Win.","/** # ConnectionGame\n\nBase class for a subset of the family of [connection games](http://en.wikipedia.org/wiki/Connection_game), \nwhich includes [TicTacToe](http://en.wikipedia.org/wiki/Tic-tac-toe), \n[ConnectFour](http://en.wikipedia.org/wiki/Connect_Four) and [Gomoku](http://en.wikipedia.org/wiki/Gomoku).\nIt implements a rectangular board, the placing of the pieces and the checks for lines.\n*/\ngames.ConnectionGame = declare(Game, {\n\t/** Boards by default have 9 rows ...\n\t*/\n\theight: 9,\n\t\n\t/** ... and 9 columns.\n\t*/\n\twidth: 9,\n\t\n\t/** A player has to make a line of 5 pieces to win, by default.\n\t*/\n\tlineLength: 5,\n\n\t/** The constructor takes the active player and the board given as a string. For the game's \n\t`board` this last string argument is used to build a [`CheckerboardFromString`](../utils/CheckerboardFromString.js.html).\n\t*/\n\tconstructor: function ConnectionGame(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = (board instanceof CheckerboardFromString) ? board :\n\t\t\tnew CheckerboardFromString(this.height, this.width, \n\t\t\t\t(board || '.'.repeat(this.height * this.width)) +''\n\t\t\t);\n\t},\n\n\tname: 'ConnectionGame',\n\t\n\t/** This base implementations names its players First and Second.\n\t*/\n\tplayers: ['First', 'Second'],\n\t\n\t/** Lines in the board are cached to accelerate the result calculation. */\n\t__lines__: (function () {\n\t\tvar CACHE = {};\n\t\tfunction __lines__(height, width, lineLength) {\n\t\t\tvar key = height +'x'+ width +'/'+ lineLength;\n\t\t\tif (!CACHE.hasOwnProperty(key)) {\n\t\t\t\tvar board = new CheckerboardFromString(height, width, '.'.repeat(height * width));\n\t\t\t\tCACHE[key] = board.lines().map(function (line) {\n\t\t\t\t\treturn line.toArray();\n\t\t\t\t}, function (line) {\n\t\t\t\t\treturn line.length >= lineLength;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\treturn CACHE[key];\n\t\t}\n\t\t__lines__.CACHE = CACHE;\n\t\treturn __lines__;\n\t})(),\n\t\n\t/** A connection game ends when either player gets the required amount of pieces aligned (either\n\thorizontally, vertically or diagonally), hence winning the game. The match ends in a tie if the \n\tboard gets full.\n\t*/\n\tresult: function result() {\n\t\tif (this.hasOwnProperty('__result__')) {\n\t\t\treturn this.__result__;\n\t\t}\n\t\tvar lineLength = this.lineLength,\n\t\t\tlines = this.board.asStrings(this.__lines__(this.height, this.width, lineLength)).join(' ');\n\t\tfor (var i = 0; i < this.players.length; ++i) {\n\t\t\tif (lines.indexOf(i.toString(36).repeat(lineLength)) >= 0) {\n\t\t\t\treturn this.__result__ = this.victory([this.players[i]]);\n\t\t\t}\n\t\t}\n\t\tif (lines.indexOf('.') < 0) { // No empty squares means a tie.\n\t\t\treturn this.__result__ = this.draw();\n\t\t}\n\t\treturn this.__result__ = null; // The game continues.\n\t},\n\t\n\t/** The active player can place a piece in any empty square in the board. The moves are indices\n\tin the board's string representation.\n\t*/\n\tmoves: function moves() {\n\t\tif (this.hasOwnProperty('__moves__')) {\n\t\t\treturn this.__moves__;\n\t\t} else if (this.result()) {\n\t\t\treturn this.__moves__ = null;\n\t\t} else {\n\t\t\treturn this.__moves__ = obj(this.activePlayer(), \n\t\t\t\titerable(this.board.string).filter(function (c) {\n\t\t\t\t\treturn c === '.';\n\t\t\t\t}, function (c, i) {\n\t\t\t\t\treturn i;\n\t\t\t\t}).toArray()\n\t\t\t);\n\t\t}\n\t},\n\n\t/** To get from one game state to the next, an active player's piece in the square indicated by \n\tits move.\n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tplayerIndex = this.players.indexOf(activePlayer),\n\t\t\tsquareIndex = +moves[activePlayer],\n\t\t\trow = (squareIndex / this.width) >> 0,\n\t\t\tcolumn = squareIndex % this.width;\n\t\treturn new this.constructor((playerIndex + 1) % this.players.length, \n\t\t\tthis.board.place([row, column], playerIndex.toString(36))\n\t\t);\n\t},\n\t\n\t// ## User intefaces ###########################################################################\n\t\n\t/** The `display(ui)` method is called by a `UserInterface` to render the game state. The only \n\tsupported user interface type is `BasicHTMLInterface`. The look can be configured using CSS \n\tclasses.\n\t*/\n\tdisplay: function display(ui) {\n\t\traiseIf(!ui || !(ui instanceof UserInterface.BasicHTMLInterface), \"Unsupported UI!\");\n\t\tvar moves = this.moves(),\n\t\t\tactivePlayer = this.activePlayer(),\n\t\t\tboard = this.board;\n\t\tmoves = moves && moves[activePlayer];\n\t\tvar table = this.board.renderAsHTMLTable(ui.document, ui.container, function (data) {\n\t\t\t\tdata.className = data.square === '.' ? 'ludorum-empty' : 'ludorum-player'+ data.square;\n\t\t\t\tdata.innerHTML = data.square === '.' ? \" \" : \"●\";\n\t\t\t\tvar i = data.coord[0] * board.height + data.coord[1];\n\t\t\t\tif (moves && moves.indexOf(i) >= 0) {\n\t\t\t\t\tdata.move = i;\n\t\t\t\t\tdata.activePlayer = activePlayer;\n\t\t\t\t\tdata.onclick = ui.perform.bind(ui, data.move, activePlayer);\n\t\t\t\t}\n\t\t\t});\n\t\treturn ui;\n\t},\n\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'ConnectionGame',\n\t\tserializer: function serialize_ConnectionGame(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t}\n}); // declare ConnectionGame.","/** # Odds & Evens\n\n[Odds and evens](http://en.wikipedia.org/wiki/Odds_and_evens) is a classic child game, implemented \nas a simple example of a simultaneous game, i.e. a game in which more than one player can move at \nany given turn.\n*/\ngames.OddsAndEvens = declare(Game, {\n\t/** The constructor takes:\n\t\n\t\t+ `turns=1`: The number of turns remaining in the game.\n\t\t+ `points=`: The scores for every player.\n\t*/\n\tconstructor: function OddsAndEvens(turns, points) {\n\t\tGame.call(this, this.players); // Both players are active.\n\t\tthis.turns = isNaN(turns) ? 1 : +turns;\n\t\tthis.points = points || { Evens: 0, Odds: 0 };\n\t},\n\n\tname: 'OddsAndEvens',\n\t\n\t/** Players for odds and evens are called like that: Evens and Odds.\n\t*/\n\tplayers: ['Evens', 'Odds'],\n\n\t/** Each turn both players draw either a 1 or a 2.\n\t*/\n\tmoves: function moves() {\n\t\treturn this.turns < 1 ? null : { Evens: [1, 2], Odds: [1, 2] };\n\t},\n\n\t/** The winner is the player with more points.\n\t*/\n\tresult: function result() {\n\t\tvar pointDifference = this.points.Evens - this.points.Odds;\n\t\treturn this.turns > 0 ? null : {\n\t\t\tEvens: +pointDifference,\n\t\t\tOdds: -pointDifference\n\t\t};\n\t},\n\n\t/** The player matching the parity of the moves sum earns a point.\n\t*/\n\tnext: function next(moves) {\n\t\traiseIf(typeof moves.Evens !== 'number' || typeof moves.Odds !== 'number',\n\t\t\t'Invalid moves '+ (JSON.stringify(moves) || moves) +'!');\n\t\tvar parity = (moves.Evens + moves.Odds) % 2 === 0;\n\t\treturn new this.constructor(this.turns - 1, {\n\t\t\tEvens: this.points.Evens + (parity ? 1 : 0),\n\t\t\tOdds: this.points.Odds + (parity ? 0 : 1)\n\t\t});\n\t},\n\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'OddsAndEvens',\n\t\tserializer: function serialize_OddsAndEvens(obj) {\n\t\t\treturn [obj.turns, obj.points];\n\t\t}\n\t}\n}); // declare OddsAndEvens.\n","/** # TicTacToe.\n\nImplementation of the traditional [Tic-Tac-Toe game](http://en.wikipedia.org/wiki/Tictactoe).\n*/\ngames.TicTacToe = declare(Game, {\n\tname: 'TicTacToe',\n\n\t/** The constructor takes the `activePlayer` (`\"Xs\"` by default) and the `board` as a string \n\t(empty board as default).\n\t*/\n\tconstructor: function TicTacToe(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = board || '_________';\n\t},\n\t\n\t/** This game's players are `\"Xs\"` and `\"Os\"`.\n\t*/\n\tplayers: ['Xs', 'Os'],\n\t\n\t/** A match ends with a victory for any player that has three marks in line, or a draw if the \n\tboard is full.\n\t*/\n\tresult: (function () {\n\t\treturn function result() {\t\t\t\n\t\t\tif (this.board.match(this.WIN_X)) { // Xs wins.\n\t\t\t\treturn this.victory([\"Xs\"]);\n\t\t\t} else if (this.board.match(this.WIN_O)) { // Os wins.\n\t\t\t\treturn this.victory([\"Os\"]);\n\t\t\t} else if (this.board.indexOf('_') < 0) { // No empty squares means a tie.\n\t\t\t\treturn this.draw();\n\t\t\t} else {\n\t\t\t\treturn null; // The game continues.\n\t\t\t}\n\t\t};\n\t})(),\n\t\n\t/** The active player's `moves()` are the indexes of empty squares in the board.\n\t*/\n\tmoves: function moves() {\n\t\tif (!this.result()) {\n\t\t\tvar result = {};\n\t\t\tresult[this.activePlayer()] = iterable(this.board).filter(function (chr, i) {\n\t\t\t\treturn chr === '_'; // Keep only empty squares.\n\t\t\t}, function (chr, i) {\n\t\t\t\treturn i; // Grab the index.\n\t\t\t}).toArray();\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\t\t\n\t},\n\t\n\t/** The `next(moves)` game state puts the mark of the active player in the square indicated by \n\tthe move. \n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(), \n\t\t\tmove = +moves[activePlayer];\n\t\tif (isNaN(move) || this.board.charAt(move) !== '_') {\n\t\t\tthrow new Error('Invalid move '+ JSON.stringify(moves) +' for board '+ this.board +\n\t\t\t\t' (moves= '+ JSON.stringify(moves) +').');\n\t\t}\n\t\tvar newBoard = this.board.substring(0, move) + activePlayer.charAt(0) + this.board.substring(move + 1);\n\t\treturn new this.constructor(this.opponent(activePlayer), newBoard);\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'TicTacToe',\n\t\tserializer: function serialize_TicTacToe(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t},\n\t\n\t// ## User intefaces ###########################################################################\n\t\n\t/** `printBoard()` creates a text (ASCII) version of the board.\n\t*/\n\tprintBoard: function printBoard() {\n\t\tvar board = this.board;\n\t\treturn [\n\t\t\tboard.substr(0,3).split('').join('|'), '-+-+-',\n\t\t\tboard.substr(3,3).split('').join('|'), '-+-+-',\n\t\t\tboard.substr(6,3).split('').join('|')\n\t\t].join('\\n');\n\t},\n\t\n\t/** The `display(ui)` method is called by a `UserInterface` to render the game state. The only \n\tsupported user interface type is `BasicHTMLInterface`. The look can be configured using CSS \n\tclasses.\n\t*/\n\tdisplay: function display(ui) {\n\t\traiseIf(!ui || !(ui instanceof UserInterface.BasicHTMLInterface), \"Unsupported UI!\");\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tmoves = this.moves(),\n\t\t\tboard = this.board,\n\t\t\tclassNames = { 'X': \"ludorum-square-Xs\", 'O': \"ludorum-square-Os\", '_': \"ludorum-square-empty\" },\n\t\t\tsquareHTML = { 'X': \"X\", 'O': \"O\", '_': \" \" };\n\t\tmoves = moves && moves[activePlayer] && moves[activePlayer].length > 0;\n\t\t(new CheckerboardFromString(3, 3, this.board, '_'))\n\t\t\t.renderAsHTMLTable(ui.document, ui.container, function (data) {\n\t\t\t\tdata.className = classNames[data.square];\n\t\t\t\tdata.innerHTML = squareHTML[data.square];\n\t\t\t\tif (moves && data.square === '_') {\n\t\t\t\t\tdata.move = data.coord[0] * 3 + data.coord[1];\n\t\t\t\t\tdata.activePlayer = activePlayer;\n\t\t\t\t\tdata.onclick = ui.perform.bind(ui, data.move, activePlayer);\n\t\t\t\t}\n\t\t\t});\n\t\treturn ui;\n\t},\n\t\n\t// ## Heuristics and AI ########################################################################\n\t\n\t/** `TicTacToe.heuristics` is a bundle of helper functions to build heuristic evaluation \n\tfunctions for this game.\n\t*/\n\t\"static heuristics\": {\n\t\t/** `heuristicFromWeights(weights)` builds an heuristic evaluation function from weights for\n\t\teach square in the board. The result of the function is the weighted sum, empty squares \n\t\tbeing ignored, opponent squares considered negative.\n\t\t*/\n\t\theuristicFromWeights: function heuristicFromWeights(weights) {\n\t\t\tvar weightSum = iterable(weights).map(Math.abs).sum();\n\t\t\tfunction __heuristic__(game, player) {\n\t\t\t\tvar playerChar = player.charAt(0);\n\t\t\t\treturn iterable(game.board).map(function (square, i) {\n\t\t\t\t\treturn (square === '_' ? 0 : weights[i] * (square === playerChar ? 1 : -1));\n\t\t\t\t}).sum() / weightSum;\n\t\t\t}\n\t\t\t__heuristic__.weights = weights;\n\t\t\treturn __heuristic__;\n\t\t}\n\t},\n\t\n\t// ## TicTacToe type initialization ############################################################\n\t\n\t'': function () { \n\t\t/** The regular expressions `WIN_X` and `WIN_O` used in the victory test are calculated \n\t\there.\n\t\t*/\n\t\tvar board3x3 = new CheckerboardFromString(3, 3, '_'.repeat(9)),\n\t\t\tlines = board3x3.sublines(board3x3.lines(), 3);\n\t\tthis.prototype.WIN_X = new RegExp(board3x3.asRegExps(lines, 'X', '.'));\n\t\tthis.prototype.WIN_O = new RegExp(board3x3.asRegExps(lines, 'O', '.'));\n\t\t\n\t\t/** The `defaultHeuristic `for TicTacToe is based on weights for each square. Center is \n\t\tworth 5, corners 2 and the other squares 1.\n\t\t*/\n\t\tthis.heuristics.defaultHeuristic = this.heuristics\n\t\t\t.heuristicFromWeights([2,1,2,1,5,1,2,1,2]);\n\t}\t\n}); // declare TicTacToe","/** Implementation of the [Toads & Frogs](http://en.wikipedia.org/wiki/Toads_and_Frogs_%28game%29) \n\tgame.\n*/\ngames.ToadsAndFrogs = declare(Game, {\n\t/** new games.ToadsAndFrogs(activePlayer=\"Toads\", board='TTT__FFF'):\n\t\tConstructor of Toads & Frogs games. The first player is always Toads.\n\t*/\n\tconstructor: function ToadsAndFrogs(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = board || ToadsAndFrogs.board();\n\t},\n\t\n\t/** static games.ToadsAndFrogs.board(chips=3, separation=2):\n\t\tMakes a board for Toads & Frogs. This is a single row with the given \n\t\tnumber of chips for each player (toads to the left and frogs to the\n\t\tright) separated by the given number of empty spaces.\n\t*/\n\t\"static board\": function board(chips, separation) {\n\t\tchips = isNaN(chips) ? 3 : +chips;\n\t\tseparation = isNaN(separation) ? 2 : +separation;\n\t\treturn 'T'.repeat(chips) + '_'.repeat(separation) + 'F'.repeat(chips);\n\t},\n\t\n\tname: 'ToadsAndFrogs',\n\t\n\t/** games.ToadsAndFrogs.players:\n\t\tThere are two roles in this game: \"Toads\" and \"Frogs\".\n\t*/\n\tplayers: ['Toads', 'Frogs'],\n\t\n\t/** games.ToadsAndFrogs.result():\n\t\tThe match finishes when one player cannot move, hence losing the game.\n\t*/\n\tresult: function result() {\n\t\treturn this.moves() ? null : this.defeat();\n\t},\n\t\n\t/** games.ToadsAndFrogs.moves():\n\t*/\n\tmoves: function moves() {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tresult = {}, \n\t\t\tms = result[activePlayer] = [];\n\t\tthis.board.replace(activePlayer == this.players[0] ? /TF?_/g : /_T?F/g, function (m, i) {\n\t\t\tms.push(i);\n\t\t\treturn m;\n\t\t});\n\t\treturn ms.length > 0 ? result : null;\n\t},\n\t\n\t/** games.ToadsAndFrogs.next(moves):\n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(), \n\t\t\tmove = moves[activePlayer], \n\t\t\tchip = activePlayer.charAt(0),\n\t\t\tboard = this.board;\n\t\tif (board.substr(move, 2) == 'T_') {\n\t\t\tboard = board.substring(0, move) + '_T' + board.substring(move + 2);\n\t\t} else if (board.substr(move, 2) == '_F') {\n\t\t\tboard = board.substring(0, move) + 'F_' + board.substring(move + 2);\n\t\t} else if (board.substr(move, 3) == 'TF_') {\n\t\t\tboard = board.substring(0, move) + '_FT' + board.substring(move + 3);\n\t\t} else if (board.substr(move, 3) == '_TF') {\n\t\t\tboard = board.substring(0, move) + 'FT_' + board.substring(move + 3);\n\t\t} else {\n\t\t\tthrow new Error('Invalid move ', move, ' for board <', board, '>.');\n\t\t}\n\t\treturn new this.constructor(this.opponent(), board);\n\t},\n\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'ToadsAndFrogs',\n\t\tserializer: function serialize_ToadsAndFrogs(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t}\t\n}); // declare ToadsAndFrogs\n","/** # Pig.\n\n[Pig](http://en.wikipedia.org/wiki/Pig_%28dice_game%29) is a simple dice betting game, used as an \nexample of a game with random variables.\n*/\ngames.Pig = declare(Game, {\n\t/** The constructor takes:\n\t\n\t\t+ `activePlayer='One'`: The active player.\n\t\t+ `goal=100`: The amount of points a player has to reach to win the game.\n\t\t+ `scores`: The scores so far in the match.\n\t\t+ `rolls`: The rolls the active player has made in his turn.\n\t*/\n\tconstructor: function Pig(activePlayer, goal, scores, rolls) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.goal = isNaN(goal) ? 100 : +goal;\n\t\tthis.__scores__ = scores || iterable(this.players).zip([0, 0]).toObject();\n\t\tthis.__rolls__ = rolls || [];\n\t},\n\t\n\tname: 'Pig',\n\t\n\t/** Players for Pig are named `One`, `Two`.\n\t*/\n\tplayers: ['One', 'Two'],\n\n\t/** The active player can either hold and pass the turn, or roll.\n\t*/\n\tmoves: function moves() {\n\t\tif (!this.result()) {\n\t\t\tvar activePlayer = this.activePlayer(),\n\t\t\t\tcurrentScore = this.__scores__[activePlayer] + iterable(this.__rolls__).sum();\n\t\t\treturn obj(activePlayer, this.__rolls__.length < 1 ? ['roll'] :\n\t\t\t\tcurrentScore >= this.goal ? ['hold'] : ['roll', 'hold']);\n\t\t}\n\t},\n\n\t/** A Pig match finishes when one player reaches or passes the goal score. The result for each \n\tplayer is the difference between its score and its opponent's score.\n\t*/\n\tresult: function result() {\n\t\tvar score0 = this.__scores__[this.players[0]],\n\t\t\tscore1 = this.__scores__[this.players[1]];\n\t\tif (score0 >= this.goal || score1 >= this.goal) {\n\t\t\tvar r = {};\n\t\t\tr[this.players[0]] = Math.min(this.goal, score0) - Math.min(this.goal, score1);\n\t\t\tr[this.players[1]] = -r[this.players[0]];\n\t\t\treturn r;\n\t\t}\n\t},\n\n\t/** If the active player holds, it earns the sum of the rolls made so in its turn. If the move \n\tis roll, a die is rolled. A roll of 1 stops the this turn and the active player earns no \n\tpoints. A roll of 2 or up, makes the turn continue.\n\t\n\tFor this game mechanic, an [contingent game state](../Contingent.js.html) is used. If the move \n\tis `roll`, an instance of this class is build and returned using the [dice shotcuts](\n\t../aleatories/dice.js.html) as random variables. This aleatoric game state will call the `next` \n\tmethod again with the same moves and the values of the random variables, and then the match will\n\tcontinue.\n\t*/\n\tnext: function next(moves, haps) {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tmove = moves && moves[activePlayer];\n\t\traiseIf(!move, 'No move for active player ', activePlayer, ' at ', this, '!');\n\t\tif (move === 'hold') {\n\t\t\tvar scores = copy(this.__scores__);\n\t\t\tscores[activePlayer] += iterable(this.__rolls__).sum();\n\t\t\treturn new this.constructor(this.opponent(), this.goal, scores, []);\n\t\t} else if (move === 'roll') {\n\t\t\tvar roll = (haps && haps.die)|0;\n\t\t\tif (!roll) { // Dice has not been rolled.\n\t\t\t\treturn new Contingent({ die: aleatories.dice.D6 }, this, moves);\n\t\t\t} else { // Dice has been rolled.\n\t\t\t\treturn (roll > 1) ? \n\t\t\t\t\tnew this.constructor(activePlayer, this.goal, this.__scores__, this.__rolls__.concat(roll)) :\n\t\t\t\t\tnew this.constructor(this.opponent(), this.goal, this.__scores__, []);\n\t\t\t}\n\t\t} else {\n\t\t\traise(\"Invalid moves \", JSON.stringify(moves), \" at \", this, \"!\");\n\t\t}\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\n\t/** The `resultBounds` for a Pig game are estimated with the goals.\n\t*/\n\tresultBounds: function resultBounds() {\n\t\treturn [-this.goal, +this.goal];\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Pig',\n\t\tserializer: function serialize_Pig(obj) {\n\t\t\treturn [obj.activePlayer(), obj.goal, obj.__scores__, obj.__rolls__];\n\t\t}\n\t}\n}); // Pig.\n","/** # Mutropas\n\nMutropas is a game invented for Ludorum as a simple example of a game of hidden (a.k.a. incomplete)\ninformation. It is also a simultaneous game.\n*/\ngames.Mutropas = declare(Game, {\n\tname: 'Mutropas',\n\t\n\t/** The players' roles are `\"Left\"` and `\"Right\"`.\n\t*/\n\tplayers: ['Left', 'Right'],\n\n\t/** The constructor takes an `args` object with:\n\t\n\t+ `pieces`: an object with the available pieces for each player. By default pieces get randomly\n\tdealt.\n\t\n\t+ `scores`: an object with current score for each player (0 by default for all players).\n\t\n\t+ `random`: the pseudorandom number generator to use (`base.Randomness.DEFAULT` by default).\n\t*/\n\tconstructor: function Mutropas(args) {\n\t\tGame.call(this, this.players);\n\t\targs = args || {};\n\t\tthis.playedPieces = args.playedPieces || [];\n\t\tthis.pieces = args.pieces || this.dealPieces();\n\t\tthis.__scores__ = args.scores || obj(this.players[0], 0, this.players[1], 0);\n\t},\n\t\n\t\n\t/** All the pieces to be used in a match of Mutropas are stored in `allPieces`, which by default\n\thas the numbers from 0 to 8.\n\t*/\n\tallPieces: Iterable.range(9).toArray(),\t\n\t\n\t/** The method `dealPieces` is used to split the pieces randomly between all players. Half the\n\tpieces go to each player, and one is left out.\n\t*/\n\tdealPieces: function dealPieces(random) {\n\t\trandom = random || Randomness.DEFAULT;\n\t\tvar piecesPerPlayer = (this.allPieces.length / 2)|0,\n\t\t\tsplit1 = random.split(piecesPerPlayer, this.allPieces),\n\t\t\tsplit2 = random.split(piecesPerPlayer, split1[1]);\n\t\treturn obj(this.players[0], split1[0], this.players[1], split2[0]);\n\t},\n\t\n\t/** Mutropas is a simultaneous game. Hence every turn all players can move. The moves are the\n\tpieces of each player that have not been played.\n\t*/\n\tmoves: function moves() {\n\t\treturn this.result() ? null : copy({}, this.pieces);\n\t},\n\t\n\t/** If all pieces are put in a circle, each piece beats half the pieces next to it, and it is \n\tbeaten by half the pieces before it. For example if `allPieces` where `[0,1,2,3,4]`:\n\t\n\t+ piece `1` would beat pieces `2` and `3`, and lose against `4` and `0`,\n\t+ piece `2` would beat pieces `3` and `4`, and lose against `0` and `1`,\n\t+ piece `4` would beat pieces `0` and `1`, and lose against `2` and `3`,\n\t\n\tThe `moveResult` returns 1 if `piece1` beats `piece2` or -1 if otherwise.\n\t*/\n\tmoveResult: function moveResult(piece1, piece2) {\n\t\tvar upperBound = iterable(this.allPieces).max(0) + 1;\n\t\tif (piece1 < piece2) {\n\t\t\treturn piece2 - piece1 <= (upperBound / 2) ? 1 : -1;\n\t\t} else if (piece1 > piece2) {\n\t\t\treturn piece1 - piece2 >= (upperBound / 2) + 1 ? 1 : -1;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t},\n\t\n\t/** Each turn all players play a piece, and the player who plays the greatest piece wins a \n\tpoint.\n\t*/\n\tnext: function next(moves) {\n\t\tvar player0 = this.players[0], player1 = this.players[1],\n\t\t\tmove0 = moves[player0], move1 = moves[player1],\n\t\t\tpieces = this.pieces;\n\t\traiseIf(pieces[player0].indexOf(move0) < 0, \"Invalid move \", JSON.stringify(move0),\n\t\t\t\" for player \", player0, \"! (moves= \", JSON.stringify(moves), \")\");\n\t\traiseIf(pieces[player1].indexOf(move1) < 0, \"Invalid move \", JSON.stringify(move1),\n\t\t\t\" for player \", player1, \"! (moves= \", JSON.stringify(moves), \")\");\n\t\tvar moveResult = this.moveResult(move0, move1);\n\t\treturn new this.constructor({\n\t\t\trandom: this.random,\n\t\t\tplayedPieces: this.playedPieces.concat([move0, move1]),\n\t\t\tpieces: obj(\n\t\t\t\tplayer0, pieces[player0].filter(function (p) { \n\t\t\t\t\treturn p !== move0; \n\t\t\t\t}), \n\t\t\t\tplayer1, pieces[player1].filter(function (p) { \n\t\t\t\t\treturn p !== move1;\n\t\t\t\t})\n\t\t\t),\n\t\t\tscores: obj(\n\t\t\t\tplayer0, this.__scores__[player0] + moveResult,\n\t\t\t\tplayer1, this.__scores__[player1] - moveResult\n\t\t\t)\n\t\t});\n\t},\n\t\n\t/** The game's `score` is simply the sum of the move results for each player.\n\t*/\n\tscores: function scores() {\n\t\treturn copy({}, this.__scores__);\n\t},\n\t\n\t/** A game of Mutropas ends when the players have no more pieces to play. The result is the \n\tdifference in scores.\n\t*/\n\tresult: function result() {\n\t\tvar players = this.players;\n\t\tif (this.playedPieces.length >= this.allPieces.length - 1) {\n\t\t\tvar scores = this.scores();\n\t\t\treturn this.zerosumResult(scores[players[0]] - scores[players[1]], players[0]);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t},\n\t\n\t// ## Game views ###############################################################################\n\t\n\t/** The method `__possiblePieces__` calculates the pieces the `player` may have.\n\t*/\n\t__possiblePieces__: function __possiblePieces__(player) {\n\t\tvar playedPieces = this.playedPieces,\n\t\t\topponentPieces = this.pieces[this.opponent(player)],\n\t\t\tpossiblePieces = iterable(this.allPieces).filter(function (p) {\n\t\t\t\treturn playedPieces.indexOf(p) < 0 && // p has not been played yet ...\n\t\t\t\t\topponentPieces.indexOf(p) < 0; // ... and the opponent does not have it.\n\t\t\t});\n\t\treturn possiblePieces.combinations(possiblePieces.count() - 1);\n\t},\n\t\n\t/** In this view of the game the hidden information is modelled as random variables. The \n\taleatory that is returned ranges over all possible piece sets that the opponent of the given\n\t`player` may have. After each possibility the assumption is maintained for the rest of the\n\tgame.\n\t\n\tThis allows to model the uncertainty that each player has about its opponent's pieces. By doing\n\tso an artificial player that searches the game space cannot infer the pieces the opponent has,\n\tand hence it cannot cheat.\n\t*/\t\n\tview: function view(player) {\n\t\tvar opponent = this.opponent(player);\n\t\treturn new Contingent({ pieces: new UniformAleatory(this.__possiblePieces__(opponent)) }, this);\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Mutropas',\n\t\tserializer: function serialize_Mutropas(obj) {\n\t\t\treturn [{\n\t\t\t\tpieces: obj.pieces, \n\t\t\t\tplayedPieces: obj.playedPieces,\n\t\t\t\tscores: obj.__scores__\n\t\t\t}];\n\t\t}\n\t}\n}); // declare Mutropas","/** # Bahab\n\nBahab is a chess-like board game originally designed for Ludorum.\n*/\ngames.Bahab = declare(Game, {\n\tname: 'Bahab',\n\t\n\t/** Players are `Uppercase` and `Lowercase`.\n\t*/\n\tplayers: ['Uppercase', 'Lowercase'],\n\t\n\t/** The constructor takes the `activePlayer` (Uppercase by default) and the `board` as a string \n\t(`initialBoard` by default).\n\t*/\n\tconstructor: function Bahab(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = board instanceof CheckerboardFromString ? board\n\t\t\t: new CheckerboardFromString(5, 5, board || this.initialBoard);\n\t},\n\t\n\t/** The `initialBoard` has two ranks of pieces for each player. All B pieces except one A piece \n\tat the center of the first rank.\n\t*/\n\tinitialBoard: ['BBABB', 'BBBBB', '.....', 'bbbbb', 'bbabb'].join(''),\n\n\t/** `__PLAYER_ENDGAME_RE__` regular expressions are used to optimize result calculations. They \n\tmatch if the player has no A piece or if its opponent has an A piece in its rank.\n\t*/\n\t__PLAYER_ENDGAME_RE__: {\n\t\tUppercase: /^[.Bab]+$|^.{0,4}[a]/, \n\t\tLowercase: /^[.bAB]+$|[A].{0,4}$/ \n\t},\n\t\n\t/** A player wins when it moves its A piece to the opponent's first rank, and loses when its A \n\tpiece is captured by the opponent.\n\t*/\n\tresult: function result() {\n\t\tvar board = this.board.string, player;\n\t\tfor (var i = 0; i < 2; ++i) {\n\t\t\tplayer = this.players[i];\n\t\t\tif (board.match(this.__PLAYER_ENDGAME_RE__[player])) {\n\t\t\t\treturn this.defeat(player); \n\t\t\t}\n\t\t}\n\t\treturn this.moves() ? null : this.defeat(this.activePlayer());\n\t},\n\t\n\t/** `__PLAYER_PIECES_RE__` regular expressions are used to optimize move calculations.\n\t*/\n\t__PLAYER_PIECES_RE__: {\n\t\tUppercase: /[AB]/g,\n\t\tLowercase: /[ab]/g\n\t},\n\t\n\t/** All pieces move one square forward. Piece A can move straight backwards or diagonally \n\tforward, and B pieces move only diagonally forward. Pieces can move to any square that is empty \n\tor occupied by an opponent's piece of the same type. If the piece moves to an occupied square, \n\tit captures the piece in it.\n\t*/\n\tmoves: function moves() {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tpieceRegExp = this.__PLAYER_PIECES_RE__[activePlayer],\n\t\t\tboard = this.board,\n\t\t\t_moves = [];\n\t\tboard.string.replace(pieceRegExp, function (piece, i) {\n\t\t\tvar coord = [(i / 5)|0, i % 5], pieceMoves;\n\t\t\tswitch (piece) {\n\t\t\t\tcase 'A': pieceMoves = [[+1,-1], [-1, 0], [+1,+1]]; break;\n\t\t\t\tcase 'B': pieceMoves = [[+1,-1], [+1,+1]]; break;\n\t\t\t\tcase 'a': pieceMoves = [[-1,-1], [+1, 0], [-1,+1]]; break;\n\t\t\t\tcase 'b': pieceMoves = [[-1,-1], [-1,+1]]; break;\n\t\t\t}\n\t\t\titerable(pieceMoves).forEachApply(function (dx, dy) {\n\t\t\t\tvar coordTo = [coord[0] + dx, coord[1] + dy],\n\t\t\t\t\tsquareTo = board.square(coordTo);\n\t\t\t\tif (board.isValidCoord(coordTo) && !squareTo.match(pieceRegExp) &&\n\t\t\t\t\t\t(squareTo == '.' || piece.toLowerCase() == squareTo.toLowerCase())) {\n\t\t\t\t\t_moves.push([coord, coordTo]); // Valid coordinate and not occupied by a friendly piece.\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn piece;\n\t\t});\n\t\treturn _moves.length > 0 ? obj(activePlayer, _moves) : null;\n\t},\n\t\n\t/** Valid move for this game are pairs of coordinates (`[row, column]`), the first one being \n\twhere the moving piece starts, and the second one being where the moving piece ends.\t\n\t*/\n\tnext: function next(moves) {\n\t\tif (!moves) {\n\t\t\tthrow new Error(\"Invalid moves \"+ moves +\"!\");\n\t\t}\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tmove = moves[activePlayer];\n\t\tif (!Array.isArray(moves[activePlayer])) {\n\t\t\tthrow new Error(\"Invalid moves \"+ JSON.stringify(moves) +\"!\");\n\t\t}\n\t\treturn new this.constructor(this.opponent(), this.board.move(move[0], move[1]));\n\t},\n\t\n\t// ## User intefaces ###########################################################################\n\t\n\t/** The `display(ui)` method is called by a `UserInterface` to render the game state. The only \n\tsupported user interface type is `BasicHTMLInterface`. The look can be configured using CSS \n\tclasses.\n\t*/\n\tdisplay: function display(ui) {\n\t\traiseIf(!ui || !(ui instanceof UserInterface.BasicHTMLInterface), \"Unsupported UI!\");\n\t\treturn this.__displayHTML__(ui);\n\t},\n\t\n\t/** The game board is rendered in HTML as a table. The look can be customized with CSS classes.\n\t*/\n\t__displayHTML__: function __displayHTML__(ui) {\n\t\tvar game = this,\n\t\t\tmoves = this.moves(),\n\t\t\tactivePlayer = this.activePlayer(),\n\t\t\tboard = this.board,\n\t\t\tclassNames = {\n\t\t\t\t'A': \"ludorum-square-Uppercase-A\", 'B': \"ludorum-square-Uppercase-B\",\n\t\t\t\t'a': \"ludorum-square-Lowercase-A\", 'b': \"ludorum-square-Lowercase-B\",\n\t\t\t\t'.': \"ludorum-square-empty\"\n\t\t\t},\n\t\t\tmovesByFrom = moves ? iterable(moves[activePlayer]).groupAll(function (m) {\n\t\t\t\treturn JSON.stringify(m[0]);\n\t\t\t}) : {},\n\t\t\tselectedMoves = ui.selectedPiece && \n\t\t\t\tmovesByFrom[JSON.stringify(ui.selectedPiece)].map(function (m) {\n\t\t\t\t\treturn JSON.stringify(m[1]);\n\t\t\t\t});\n\t\tboard.renderAsHTMLTable(ui.document, ui.container, function (data) {\n\t\t\tdata.className = classNames[data.square];\n\t\t\tdata.innerHTML = data.square == '.' ? ' ' : data.square;\n\t\t\tif (ui.selectedPiece) {\n\t\t\t\tif (selectedMoves && selectedMoves.indexOf(JSON.stringify(data.coord)) >= 0) {\n\t\t\t\t\tdata.className = \"ludorum-square-\"+ activePlayer +\"-move\";\n\t\t\t\t\tdata.onclick = function () {\n\t\t\t\t\t\tvar selectedPiece = ui.selectedPiece;\n\t\t\t\t\t\tui.selectedPiece = (void 0);\n\t\t\t\t\t\tui.perform([selectedPiece, data.coord], activePlayer);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (movesByFrom.hasOwnProperty(JSON.stringify(data.coord))) {\n\t\t\t\tdata.onclick = function () {\n\t\t\t\t\tui.selectedPiece = data.coord;\n\t\t\t\t\tui.display(game); // Redraw the game state.\t\t\t\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t\treturn ui;\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Bahab',\n\t\tserializer: function serialize_Bahab(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t}\n}); // declare Bahab.","/** # RoundRobin\n\n[Round-robins](http://en.wikipedia.org/wiki/Round-robin_tournament) are \ntournaments where all players play against each other a certain number of times.\n*/\ntournaments.RoundRobin = declare(Tournament, {\n\t/** The constructor takes the `game` to be played, the `players` and the \n\tamount of matches each player should play (`matchCount`).\n\t*/\n\tconstructor: function RoundRobin(game, players, matchCount) {\n\t\tTournament.call(this, game, players);\n\t\tthis.matchCount = isNaN(matchCount) ? game.players.length : +matchCount;\n\t\tthis.__advance__ = this.__matches__().chain(Iterable.repeat(null)).__iter__();\n\t},\n\n\t/** Round-robin matches make every player plays `matchCount` matches for \n\teach role in the game against all the other opponents.\n\t*/\n\t__matches__: function __matches__() {\n\t\tvar tournament = this,\n\t\t\tgame = this.game,\n\t\t\tms = iterable(this.players);\n\t\tms = ms.product.apply(ms, Iterable.repeat(this.players, game.players.length - 1).toArray());\n\t\treturn ms.filter(function (tuple) { // Check for repeated.\n\t\t\tfor (var i = 1; i < tuple.length; i++) {\n\t\t\t\tfor (var j = 0; j < i; j++) {\n\t\t\t\t\tif (tuple[i] === tuple[j]) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}).product(Iterable.range(this.matchCount)).map(function (tuple) {\n\t\t\treturn new Match(game, tuple[0]);\n\t\t});\n\t}\n}); //// declare RoundRobin.\n","/** # Measurement\n\nMeasurement tournaments pit the player being measured against others in order\nto assess that player's performance at a game. They are used to evaluate how \nwell the players play by confronting them with the opponents, rotating their \nroles in the matches.\n*/\ntournaments.Measurement = declare(Tournament, {\n\t/** The constructor takes the `game` used in the contest, the `players`\n\tbeing evaluated, the `opponents` used to evaluate them, and the amount of\n\tmatches each player will play (`matchCount`).\n\t*/\n\tconstructor: function Measurement(game, players, opponents, matchCount) {\n\t\tTournament.call(this, game, Array.isArray(players) ? players : [players]);\n\t\tthis.opponents = Array.isArray(opponents) ? opponents : [opponents];\n\t\traiseIf(this.opponents.length < game.players.length - 1, \"Not enough opponents.\");\n\t\tthis.matchCount = isNaN(matchCount) ? game.players.length : +matchCount;\n\t\tthis.__advance__ = this.__matches__().chain(Iterable.repeat(null)).__iter__();\n\t},\n\n\t/** A measurement tournament makes every player play `matchCount` matches \n\tfor each role in the game against all possible combinations of opponents.\n\t*/\n\t__matches__: function __matches__() {\n\t\tvar game = this.game,\n\t\t\tplayerCount = game.players.length,\n\t\t\topponentCombinations = iterable(this.opponents);\n\t\tif (playerCount > 2) {\n\t\t\topponentCombinations = opponentCombinations.product.apply(opponentCombinations, \n\t\t\t\tIterable.repeat(this.opponents, playerCount - 2).toArray());\n\t\t} else {\n\t\t\topponentCombinations = opponentCombinations.map(function (p) {\n\t\t\t\treturn [p];\n\t\t\t});\n\t\t}\n\t\treturn iterable(this.players).product( \n\t\t\tIterable.range(playerCount),\n\t\t\topponentCombinations,\n\t\t\tIterable.range(this.matchCount)).map(function (tuple){\n\t\t\t\tvar players = tuple[2].slice(0);\n\t\t\t\tplayers.splice(tuple[1], 0, tuple[0]);\n\t\t\t\treturn new Match(game, players);\n\t\t\t});\n\t}\n}); //// declare Measurement.\n","/** # Elimination\n\nPlayoffs or sudden death kind of contests, also known as \n[elimination tournaments](http://en.wikipedia.org/wiki/Single-elimination_tournament).\nIn this tournaments players get randomly matched in successive brackets, each \nmatch's winner passing to the next round until the final match. Games are \nassumed to have only one winner per match.\n*/\ntournaments.Elimination = declare(Tournament, {\n\t/** The constructor takes the `game` to be played, the `players` and the \n\tamount of matches that make each playoff (`matchCount`, 1 by default).\n\t*/\n\tconstructor: function Elimination(game, players, matchCount) {\n\t\tTournament.call(this, game, players);\n\t\tthis.matchCount = isNaN(matchCount) ? 1 : +matchCount >> 0;\n\t},\n\n\t/** Each bracket is defined by partitioning the `players` in groups of the\n\tsize required by the game (usually two). If there are not enough players,\n\tsome players get reassigned. The bracket includes `matchCount` matches \n\tbetween these participants, rotating roles if possible.\n\t*/\n\t__bracket__: function __bracket__(players) {\n\t\tvar game = this.game,\n\t\t\tmatchCount = this.matchCount,\n\t\t\troleCount = this.game.players.length;\n\t\tplayers = players || this.players;\n\t\tif (players.length < roleCount) {\n\t\t\treturn [];\n\t\t} else {\n\t\t\treturn Iterable.range(0, players.length, roleCount).map(function (i) {\n\t\t\t\tvar participants = Iterable.range(i, i + roleCount).map(function (j) {\n\t\t\t\t\treturn players[j % players.length]; // Fill by repeating players if necessary.\n\t\t\t\t}).toArray();\n\t\t\t\treturn Iterable.range(matchCount).map(function (i) {\n\t\t\t\t\tparticipants.unshift(participants.pop()); // Rotate partipants roles.\n\t\t\t\t\treturn new Match(game, participants);\n\t\t\t\t}).toArray();\n\t\t\t}).toArray();\n\t\t}\n\t},\n\t\n\t/** A playoff is resolved by aggregating the results of all its matches. The\n\twinner of the playoff is the one with the greater result sum.\n\t*/\n\t__playoff__: function __playoff__(matches) {\n\t\tvar playoffResult = {},\n\t\t\tplayers = {};\n\t\tmatches.forEach(function (match) {\n\t\t\tvar matchResult = match.result();\n\t\t\tif (!matchResult) {\n\t\t\t\tthrow new Error('Unfinished match in playoff!');\n\t\t\t}\n\t\t\titerable(match.players).forEach(function (tuple) {\n\t\t\t\tvar role = tuple[0],\n\t\t\t\t\tplayerName = tuple[1].name;\n\t\t\t\tplayoffResult[playerName] = (+playoffResult[playerName] || 0) + matchResult[role];\n\t\t\t\tplayers[playerName] = tuple[1];\n\t\t\t});\n\t\t});\n\t\tvar winnerName = iterable(playoffResult).greater(function (pair) {\n\t\t\treturn pair[1];\n\t\t})[0][0];\n\t\treturn players[winnerName];\n\t},\n\t\n\t/** The elimination tournament runs until there is less players in the next\n\tbracket than the amount required to play the game. Since this amount is \n\tusually two, the contest ends with one player at the top.\n\t*/\n\t__advance__: function __advance__() {\n\t\tif (!this.__matches__ || this.__matches__.length < 1) {\n\t\t\tif (!this.__currentBracket__) { // First bracket.\n\t\t\t\tthis.__currentBracket__ = this.__bracket__(this.players);\n\t\t\t} else if (this.__currentBracket__.length < 1) { // Tournament is finished.\n\t\t\t\treturn null;\n\t\t\t} else { // Second and on brackets.\n\t\t\t\tvar players = this.__currentBracket__.map(this.__playoff__);\n\t\t\t\tthis.__currentBracket__ = this.__bracket__(players);\n\t\t\t}\n\t\t\tthis.__matches__ = iterable(this.__currentBracket__).flatten().toArray();\n\t\t}\t\n\t\treturn this.__matches__.shift();\n\t}\n}); //// declare Elimination.\n","// See __prologue__.js\n\t[Match,\n\t\tgames.Bahab, games.Choose2Win, games.ConnectionGame, games.Mutropas, games.OddsAndEvens,\n\t\t\tgames.Pig, games.Predefined, games.TicTacToe, games.ToadsAndFrogs,\n\t\taleatories.Aleatory, aleatories.UniformAleatory,\n\t\tutils.CheckerboardFromString\n\t].forEach(function (type) {\n\t\ttype.__SERMAT__.identifier = exports.__package__ +'.'+ type.__SERMAT__.identifier;\n\t\texports.__SERMAT__.include.push(type);\n\t});\n\tSermat.include(exports); // Ludorum uses Sermat internally.\n\n\treturn exports;\n});"]} \ No newline at end of file diff --git a/build/ludorum.min.js b/build/ludorum.min.js index ce426c5..f46f13b 100644 --- a/build/ludorum.min.js +++ b/build/ludorum.min.js @@ -1,5 +1,5 @@ -//! ludorum 0.1.4 +//! ludorum 0.1.5 -!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["creatartis-base","sermat"],b):"object"==typeof module&&module.exports?module.exports=b(require("creatartis-base"),require("sermat")):a.ludorum=b(a.base,a.Sermat)}(this,function a(b,c){"use strict";{var d=b.objects.unimplemented,e=b.obj,f=b.copy,g=b.raise,h=b.raiseIf,i=b.declare,j=b.Iterable,k=b.iterable,l=b.Future,m=b.Randomness,n=b.initialize,o=b.Statistics,p=b.Events,q={__package__:"ludorum",__name__:"ludorum",__init__:a,__dependencies__:[b,c],__SERMAT__:{include:[b]}},r=q.aleatories={},s=q.games={},t=q.players={},u=q.tournaments={},v=q.utils={},w=q.Game=i({constructor:function(a){this.activePlayers=a?Array.isArray(a)?a:[a]:[this.players[0]]},name:"?",players:[],moves:d("Game","moves()"),next:d("Game","next(moves)"),result:d("Game","result()"),scores:function(){return this.results()},view:function(){return this},isActive:function(){for(var a=0;aa,"There are no active players!"),h(a>1,"More than one player is active!"),this.activePlayers[0]},opponents:function(a){return a=a||this.activePlayers,this.players.filter(function(b){return a.indexOf(b)<0})},opponent:function(a){var b=this.players.indexOf(a||this.activePlayer());return this.players[(b+1)%this.players.length]},perform:function(){for(var a,b={},c=0;c+a?this.ply()+ +a:+a,this.history[0|a]},result:function(){return this.state().result()},decisions:function(a){a=a||this.state();var b=this,c=this.players,d=a.activePlayers;return l.all(d.map(function(b){return c[b].decision(a.view(b),b)})).then(function(c){var e=k(d).zip(c).toObject();return b.onMove(a,e),e})},run:function(a){if(a=isNaN(a)?1/0:+a,1>a)return l.when(this);var b,c=this.ply(),d=this.state();if(1>c&&this.onBegin(d),d=this.__advanceContingents__(d),b=d.result())return this.onEnd(d,b),l.when(this);var e=this;return this.decisions(d).then(function(b){return e.__advance__(d,b)?e.run(a-1):e})},__advanceContingents__:function(a){for(var b;a.isContingent;a=b)b=a.randomNext(),this.history.push(b),this.onNext(a,b);return a},__advance__:function(a,b){var c=this,d=a.activePlayers.filter(function(a){return"quit"===b[a].__command__});if(d.length>0)return c.onQuit(a,d[0]),!1;var e=a.next(b);return this.history.push(e),this.onNext(a,e),!0},"static COMMAND_QUIT":{__command__:"quit"},onBegin:function(a){this.events.emit("begin",a,this),this.logger&&this.logger.info("Match begins with ",k(this.players).map(function(a){return a[1]+" as "+a[0]}).join(", "),"; for ",a,".")},onMove:function(a,b){this.events.emit("move",a,b,this),this.logger&&this.logger.info("Players move: ",JSON.stringify(b)," in ",a)},onNext:function(a,b){this.events.emit("next",a,b,this),this.logger&&this.logger.info("Match advances from ",a," to ",b)},onEnd:function(a,b){this.events.emit("end",a,b,this),this.logger&&this.logger.info("Match for ",a,"ends with ",JSON.stringify(b))},onQuit:function(a,b){this.events.emit("quit",a,b,this),this.logger&&this.logger.info("Match for ",a," aborted because player "+b+" quitted.")},toString:function(){return"Match("+this.game+", "+JSON.stringify(this.players)+")"},"static __SERMAT__":{identifier:"Match",serializer:function(a){return[a.game,a.players,a.history]},materializer:function(a,b){if(b){var c=new y(b[0],b[1]);return c.history=b[2],c}return null}}}),z=q.Contingent=i({isContingent:!0,constructor:function(a,b,c){a&&(this.__haps__=a),b&&(this.__state__=b),c&&(this.__moves__=c)},haps:function(){return this.__haps__},next:function(a){var b=this.__state__;if(this.__moves__)return b.next(this.__moves__,a||this.randomHaps());var d=c.record(b.constructor),e=d.serializer(b)[0];return d.materializer(null,[f(a,e)])},randomHaps:function(a){return k(this.haps()).mapApply(function(b,c){return[b,c.value(a)]}).toObject()},randomNext:function(a){return this.next(this.randomHaps(a))},possibleHaps:function(){return j.product.apply(j,k(this.haps()).mapApply(function(a,b){return b.distribution().mapApply(function(b,c){return[a,b,c]})}).toArray()).map(function(a){var b=1;return[k(a).mapApply(function(a,c,d){return b*=d,[a,c]}).toObject(),b]}).toArray()},"static __SERMAT__":{identifier:"Contingent",serializer:function(a){return[a.__haps__||null,a.__state__||null,a.__moves__||null]}}}),A=q.Tournament=i({constructor:function(a,b){this.game=a,this.players=Array.isArray(b)?b:iterables.iterable(b).toArray(),this.statistics=new o,this.events=new p({events:["begin","beforeMatch","afterMatch","end"]})},__advance__:d("Tournament","__advance__"),run:function(){this.onBegin();var a=this;return l.doWhile(function(){return l.then(a.__advance__(),function(b){return b?(a.beforeMatch(b),a.__runMatch__(b).then(function(b){return a.account(b),a.afterMatch(b),b})):null})}).then(this.onEnd.bind(this))},__runMatch__:function(a){return a.run()},account:function(a){var b=this.game,c=a.result(),d=this.statistics;h(!c,"Match doesn't have results. Has it finished?"),k(a.players).forEach(function(e){var f=e[0],g=e[1],h=c[e[0]];d.add({key:"results",game:b.name,role:f,player:g.name},h),d.add({key:h>0?"victories":0>h?"defeats":"draws",game:b.name,role:f,player:g.name},h),d.add({key:"length",game:b.name,role:f,player:g.name},a.ply()),a.history.forEach(function(a){if("function"==typeof a.moves){var c=a.moves();c&&c.hasOwnProperty(f)&&c[f].length>0&&d.add({key:"width",game:b.name,role:f,player:g.name},c[f].length)}})})},onBegin:function(){this.events.emit("begin",this),this.logger&&this.logger.info("Tournament begins for game ",game.name,".")},beforeMatch:function(a){this.events.emit("beforeMatch",a,this),this.logger&&this.logger.debug("Beginning match with ",JSON.stringify(a.players),".")},afterMatch:function(a){this.events.emit("afterMatch",a,this),this.logger&&this.logger.debug("Finishing match with ",JSON.stringify(a.players),".")},onEnd:function(){this.events.emit("end",this.statistics,this),this.logger&&this.logger.info("Tournament ends for game ",game.name,":\n",this.statistics,"\n")}}),B=v.Checkerboard=i({constructor:function(a,b){isNaN(a)||(this.height=0|a),isNaN(b)||(this.width=0|b)},emptySquare:null,isValidCoord:function(a){return Array.isArray(a)&&!isNaN(a[0])&&!isNaN(a[1])&&a[0]>=0&&a[0]=0&&a[1]=b}).map(function(a){return j.range(0,a.length-b+1).map(function(c){return a.slice(c,c+b)})}).flatten()},walk:function(a,b){var c=this;return new j(function(){var d=a.slice();return function(){if(c.isValidCoord(d)){var a=d.slice();return d[0]+=b[0],d[1]+=b[1],a}throw j.STOP_ITERATION}})},walks:function(a,b){var c=this;return b.map(function(b){return c.walk(a,b)})},"static DIRECTIONS":{HORIZONTAL:[[0,-1],[0,1]],VERTICAL:[[-1,0],[1,0]],ORTHOGONAL:[[0,-1],[0,1],[-1,0],[1,0]],DIAGONAL:[[-1,-1],[-1,1],[1,-1],[1,1]],EVERY:[[0,-1],[0,1],[-1,0],[1,0],[-1,-1],[-1,1],[1,-1],[1,1]]},clone:d("utils.Checkerboard","clone"),__place__:d("utils.Checkerboard","place"),place:function(a,b){return this.clone().__place__(a,b)},__move__:function(a,b,c){return this.__place__(b,this.square(a)).__place__(a,"undefined"==typeof c?this.emptySquare:c)},move:function(a,b,c){return this.clone().__move__(a,b,c)},__swap__:function(a,b){var c=this.square(b);return this.__place__(b,this.square(a)).__place__(a,c)},swap:function(a,b){return this.clone().__swap__(a,b)},transform:function(a){var b=this.clone(),c=this;return this.coordinates().forEach(function(d){var e=a.apply(c,[c,d].concat(d));b.__place__(e,c.square(d))}),b},horizontalSymmetry:function(){return this.transform(function(a,b,c,d){return[c,a.width-d-1]})},verticalSymmetry:function(){return this.transform(function(a,b,c,d){return[a.height-c-1,d]})},clockwiseRotation:function(){return this.transform(function(a,b,c,d){return[d,a.height-c-1]})},counterClockwiseRotation:function(){return this.transform(function(a,b,c,d){return[a.width-d-1,c]})},renderAsHTMLTable:function(a,c,d){var e=this,f=a.createElement("table");return c.appendChild(f),e.horizontals().reverse().forEach(function(c){var g=a.createElement("tr");f.appendChild(g),c.forEach(function(c){var f=e.square(c),h=a.createElement("td"),i={id:"ludorum-square-"+c.join("-"),className:"ludorum-square",square:f,coord:c,innerHTML:b.Text.escapeXML(f)};d&&(i=d(i)||i),h["ludorum-data"]=i,h.id=i.id,h.className=i.className,h.innerHTML=i.innerHTML,i.onclick&&(h.onclick=i.onclick),g.appendChild(h)})}),f},weightedSum:function(a,b){var c=this;return this.coordinates().zip(a).mapApply(function(a,d){return b[c.square(a)]*d||0}).sum()}}),C=v.CheckerboardFromString=i(B,{constructor:function(a,b,c,d){if(B.call(this,a,b),d&&d!==this.emptySquare&&(this.emptySquare=(d+"").charAt(0)),c&&c.length!==a*b)throw new Error("Given string "+JSON.stringify(c)+" does not match board dimensions.");this.string=c||this.emptySquare.repeat(a*b)},emptySquare:".",toString:function(){var a=this.string,b=this.height,c=this.width;return j.range(b).map(function(d){return a.substr((b-d-1)*c,c)}).join("\n")},square:function(a,b){var c=a[0],d=a[1],e=this.width;return c>=0&&c=0&&e>d?this.string.charAt(c*e+d):b},asString:function(a){var b=this;return a.map(function(a){return b.square(a)}).join("")},asStrings:function(a){var b=this;return a.map(function(a){return b.asString(a)})},asRegExp:function(a,b,c){c=c||".";var d=this.width,e=j.repeat(!1,d*this.height).toArray();a.forEach(function(a){e[a[0]*d+a[1]]=!0});for(var f,g="",h=0,i=0;ih?f?b:c:(f?b:c)+"{"+h+"}"}return g},asRegExps:function(a,b,c){var d=this;return a.map(function(a){return d.asRegExp(a,b,c)}).join("|")},clone:function(){return new this.constructor(this.height,this.width,this.string,this.hasOwnProperty("emptySquare")?this.emptySquare:void 0)},__place__:function(a,b){h(!this.isValidCoord(a),"Invalid coordinate ",a,"."),b=(b+this.emptySquare).charAt(0);var c=a[0]*this.width+a[1];return this.string=this.string.substr(0,c)+b+this.string.substr(c+1),this},"static __SERMAT__":{identifier:"CheckerboardFromString",serializer:function(a){var b=[a.height,a.width,a.string];return a.hasOwnProperty("emptySquare")&&b.push(a.emptySquare),b}}});v.CheckerboardFromPieces=i(B,{constructor:function(a,c,d,e){B.call(this,a,c);var f=this;e!==this.emptySquare&&(this.emptySquare=e),Array.isArray(d)?(this.pieces={},k(d||[]).forEach(function(a){h(!Array.isArray(a.position),"Piece has not a position (",a,")!"),f.pieces[a.position+""]=a})):"object"==typeof d?this.pieces=b.copy({},d):g("Invalid pieces definition: ",d,"!")},emptySquare:null,toString:function(){return"["+k(this.pieces).select(1).join(", ")+"]"},square:function(a,b){return this.pieces[a]||b},clone:function(){return new this.constructor(this.height,this.width,this.pieces,this.emptySquare)},__place__:function(a,b){h(!this.isValidCoord(a),"Invalid coordinate ",a,"!");var c=a+"";return delete this.pieces[c],b&&(this.pieces[c]=b),this}})}q.utils.Scanner=i({constructor:function(a){n(this,a).object("game",{ignore:!0}).integer("maxWidth",{defaultValue:1e3,coerce:!0}).integer("maxLength",{defaultValue:50,coerce:!0}).object("random",{defaultValue:m.DEFAULT}).object("statistics",{defaultValue:new o})},scan:function(a){var b=this,c=arguments.length<2?this.game?[this.game]:[]:Array.prototype.slice.call(arguments,1),d=0;return l.whileDo(function(){return c.length>0&&dg?(e.add({key:"defeat.result",game:b.name,role:f,player:h},g,b),e.add({key:"defeat.length",game:b.name,role:f,player:h},c,b)):g>0?(e.add({key:"victory.result",game:b.name,role:f,player:h},g,b),e.add({key:"victory.length",game:b.name,role:f,player:h},c,b)):e.add({key:"draw.length",game:b.name,role:f,player:h},c,b)}),!0;var f=b.moves();return k(b.activePlayers).forEach(function(a){e.add({key:"game.width",game:b.name,role:a},f[a].length)}),!1}}),v.Cache=i({constructor:function(a){this.clear(),a&&this.root(a)},stateIdentifier:function(a){return a.identifier()},moveIdentifier:function(a){return JSON.stringify(a)},has:function(a){var b="string"==typeof a?a:this.stateIdentifier(a);return this.__entries__.hasOwnProperty(b)},get:function(a){var b="string"==typeof a?a:this.stateIdentifier(a);return this.__entries__[b]},size:function(){return Object.keys(this.__entries__).length},entry:function(a,b){if(b=b||this.stateIdentifier(a),this.has(b))return this.get(b);var c={id:b,state:a,precursors:[],descendants:{}};return this.__entries__[b]=c,c},descendant:function(a,b){var c=this.moveIdentifier(b),d=a.descendants;if(d.hasOwnProperty(c))return d[c][1];var e=a.state.next(b),f=this.stateIdentifier(e),g=this.get(f)||this.entry(e,f);return d[c]=[b,g],g.precursors.push([b,a]),g},descendants:function(a){var b=this.descendant.bind(this,a);return arguments.length>1?Array.prototype.slice.call(arguments,1).map(b):a.state.possibleMoves().map(b)},clear:function(){this.__entries__={},this.__root__=null},root:function(a){if(arguments.length>0){var b=this.stateIdentifier(a);this.__root__=this.get(b)||this.entry(a,b),this.prune(b)}return this.__root__},prune:function(a){for(var b,c=[a||this.__root__.id],d={};a=c.shift();)d.hasOwnProperty(a)||(b=this.get(a),d[a]=b,c.push.apply(c,k(b.descendants).mapApply(function(a,b){return b[1][a]}).toArray()));return this.__entries__=d}});var D=i({constructor:function(a,b,c){this.parent=a,this.state=b,this.transition=c,this.children={}},childrenCount:function(){return Object.keys(this.children).length},__childSerialization__:function(a){return JSON.stringify(a)},expand:function(a){var b,c=this.__childSerialization__(a),d=this.children[c];if(!d){try{b=this.state.next(a)}catch(e){g("Node expansion for ",this.state," with ",JSON.stringify(a)," failed with: ",e)}d=new this.constructor(this,b,a),this.children[c]=d}return d},possibleTransitions:function(){var a=this.state;return a.isContingent?a.possibleHaps():a.possibleMoves()},expandAll:function(){var a=this;return this.possibleTransitions().map(function(b){return a.expand(Array.isArray(b)?b[0]:b)})}});t.RandomPlayer=i(x,{constructor:function(a){x.call(this,a),n(this,a).object("random",{defaultValue:m.DEFAULT})},decision:function(a,b){return this.random.choice(this.movesFor(a,b))}}),t.TracePlayer=i(x,{constructor:function(a){x.call(this,a),this.trace=k(a.trace),this.__iter__=this.trace.__iter__(),this.__decision__=this.__iter__()},decision:function(){try{this.__decision__=this.__iter__()}catch(a){j.prototype.catchStop(a)}return this.__decision__},__serialize__:function(){return["TracePlayer",{name:this.name,trace:this.trace.toArray()}]}});var E=t.HeuristicPlayer=i(x,{constructor:function(a){x.call(this,a),n(this,a).object("random",{defaultValue:m.DEFAULT}).func("heuristic",{ignore:!0})},moveEvaluation:function(a,b,c){var d=this;if(Object.keys(a).length<2)return this.stateEvaluation(b.next(a),c);var g=0,h=0;return a=f(e(c,[a[c]]),a),b.possibleMoves(a).forEach(function(a){g+=d.stateEvaluation(b.next(a),c),++h}),h>0?g/h:0},stateEvaluation:function(a,b){var c=a.result();return c?c[b]:this.heuristic(a,b)},heuristic:function(){return this.random.random(-.5,.5)},evaluatedMoves:function(a,b){var c=this,d=!1;if(a.isContingent){var e=k(a.possibleHaps()).mapApply(function(e,f){var g=c.evaluatedMoves(a.next(e),b);return d=d||l.__isFuture__(g),l.then(g,function(a){return a.map(function(a){return a[1]*=f,a})})});return l.then(d?l.all(e):e,function(a){return k(a).groupBy(function(a){return a[0]}).mapApply(function(a,b){return[a,k(b).select(1).sum()]})})}var f=this.possibleMoves(a,b).map(function(e){var f=c.moveEvaluation(e,a,b);return d=d||l.__isFuture__(f),l.then(f,function(a){return[e,a]})});return d?l.all(f):f},possibleMoves:function(a,b){var c=a.moves();return h(!c||!c[b]||!Array.isArray(c[b])||c[b].length<1,"Player "+b+" has no moves in "+a+" (moves= "+c+")!"),k(c[b]).map(function(a){return f(e(b,a),c)})},bestMoves:function(a){return l.then(k(a),function(a){return a.greater(function(a){return a[1]}).map(function(a){return a[0]})})},decision:function(a,b){var c=this.random;return l.then(this.bestMoves(this.evaluatedMoves(a,b)),function(d){return d=k(d).toArray(),h(!d||!d.length,"No moves where selected at ",a," for player ",b,"!"),c.choice(d)[b]})},"static composite":function(){var a=Array.prototype.slice.call(arguments);h(a.length<1,"HeuristicPlayer.composite() cannot take an odd number of arguments!");for(var b=0;b1,"HeuristicPlayer.composite() argument ",b+1," (",a[b+1],") is not a valid weight!");return function(b,c){for(var d=0,e=0;e+1=this.horizon?this.heuristics(a):null},maxN:function(a,b,c){var d=this.quiescence(a,b,c);if(!d){var f,g,h=a.activePlayer(),i=this.movesFor(a,h);if(d={},i.length<1)throw new Error("No moves for unfinished game "+a+".");for(var j=0;j(d[h]||-1/0)&&(d=f)}return d},toString:function(){return(this.constructor.name||"MaxNPlayer")+"("+JSON.stringify({name:this.name,horizon:this.horizon})+")"}}),t.MiniMaxPlayer=i(E,{constructor:function(a){E.call(this,a),n(this,a).integer("horizon",{defaultValue:4,coerce:!0})},stateEvaluation:function(a,b){return this.minimax(a,b,0)},quiescence:function(a,b,c){var d=a.result();return d?d[b]:c>=this.horizon?this.heuristic(a,b):0/0},minimax:function(a,b,c){var d=this.quiescence(a,b,c);if(isNaN(d)){var f,g,h=a.activePlayer(),i=this.movesFor(a,h);if(i.length<1)throw new Error("No moves for unfinished game "+a+".");h==b?(d=-1/0,f=Math.max):(d=+1/0,f=Math.min);for(var j=0;jd&&(d=g):f>g&&(f=g),!(d>=f));l++);return j?d:f}});var G=t.MonteCarloPlayer=i(E,{constructor:function(a){if(E.call(this,a),n(this,a).number("simulationCount",{defaultValue:30,coerce:!0}).number("timeCap",{defaultValue:1e3,coerce:!0}).number("horizon",{defaultValue:500,coerce:!0}),a)switch(typeof a.agent){case"function":this.agent=new E({heuristic:a.agent});break;case"object":this.agent=a.agent;break;default:this.agent=null}},selectMoves:function(a,b,c){for(var d=this,g=Date.now()+this.timeCap,i=b.next.bind(b),j=a.map(function(a){return{move:a,nexts:Object.keys(a).length<2?[b.next(a)]:b.possibleMoves(f(e(c,[a[c]]),a)).map(i),sum:0,count:0}}),l=0;l0})});return j=k(j).greater(function(a){return h(isNaN(a.sum),"State evaluation is NaN for move ",a.move,"!"),a.count>0?a.sum/a.count:0}).map(function(a){return a.move})},stateEvaluation:function(a,b){for(var c,d=0,e=this.simulationCount,f=0;e>f&&(c=this.simulation(a,b),d+=c.result[b],!(c.plies<1));++f);return e>0?d/e:0},simulation:function(a,b){var c,d,f,h=this;for(c=0;!0;++c)if(a.isContingent)a=a.randomNext(this.random);else{if(f=a.moves(),!f)return{game:a,result:a.result(),plies:c};if(c>this.horizon)return{game:a,result:e(b,this.heuristic(a,b)),plies:c};d={},a.activePlayers.forEach(function(b){d[b]=h.agent?h.agent.decision(a,b):h.random.choice(f[b])}),a=a.next(d)}g("Simulation ended unexpectedly for player ",b," in game ",a,"!")},__serialize__:function(){return[this.constructor.name,{name:this.name,simulationCount:this.simulationCount,timeCap:this.timeCap,agent:this.agent}]}});t.UCTPlayer=i(G,{constructor:function(a){G.call(this,a),n(this,a).number("explorationConstant",{defaultValue:Math.sqrt(2),coerce:!0})},selectNode:function(a,b,c){return c=isNaN(c)?this.explorationConstant:+c,this.random.choice(k(a.children).select(1).greater(function(a){return a.uct.rewards/a.uct.visits+c*Math.sqrt(Math.log(b)/a.uct.visits)}))},selectMoves:function(a,b,c){var d,e,f=new D(null,b),g=Date.now()+this.timeCap;f.uct={pending:this.random.shuffle(f.possibleTransitions()),visits:0,rewards:0};for(var h=0;h0;)d=this.selectNode(d,h+1,this.explorationConstant);for(d.uct.pending.length>0&&(d=d.expand(d.uct.pending.pop()),d.uct={pending:this.random.shuffle(d.possibleTransitions()),visits:0,rewards:0}),e=this.simulation(d.state,c);d;d=d.parent)++d.uct.visits,d.uct.rewards+=(b.normalizedResult(e.result)[c]+1)/2}return a=k(f.children).select(1).greater(function(a){return a.uct.visits}).map(function(a){return a.transition})},__serialize__:function(){return[this.constructor.name,{name:this.name,simulationCount:this.simulationCount,timeCap:this.timeCap,explorationConstant:this.explorationConstant}]}});var H=t.UserInterfacePlayer=i(x,{constructor:function(a){x.call(this,a)},participate:function(a,b){return this.role=b,this},decision:function(){return this.__future__&&this.__future__.isPending()&&this.__future__.resolve(new y.CommandQuit),this.__future__=new l,this.__future__},perform:function(a){var b=this.__future__;return b&&(this.__future__=null,b.resolve(a)),!!b}}),I=t.UserInterface=i({constructor:function(a){this.onBegin=this.onBegin.bind(this),this.onNext=this.onNext.bind(this),this.onEnd=this.onEnd.bind(this),a.match&&this.show(a.match)},show:function(a){this.match&&(a.events.off("begin",this.onBegin),a.events.off("next",this.onNext),a.events.off("end",this.onEnd)),this.match=a,a.events.on("begin",this.onBegin),a.events.on("next",this.onNext),a.events.on("end",this.onEnd)},onBegin:function(a){this.display(a)},onNext:function(a,b){this.display(b)},onEnd:function(a,b){this.results=b,this.display(a)},display:d("UserInterface","display"),perform:function(a,b){k(this.match.players).forEach(function(c){var d=(c[0],c[1]);d instanceof H&&(!b||d.role===b)&&d.perform(a)})}});I.BasicHTMLInterface=i(I,{constructor:function(a){I.call(this,a),this.document=a.document||b.global.document,this.container=a.container,"string"==typeof this.container&&(this.container=this.document.getElementById(this.container))},display:function(a){for(var b,c=this.container;b=c.firstChild;)c.removeChild(b);a.display(this)},build:function(a,b){var c=this;return b.forEach(function(b){var d;if(Array.isArray(b)){if(d=c.document.createElement(b[0]),b.length>2&&b[1]){var e=b[1];for(var f in e)attr.hasOwnProperty(f)&&d.setAttribute(f,e[f])}b.length>1&&b[b.length-1]&&c.build(d,b[b.length-1])}else"string"==typeof b&&(d=c.document.createTextNode(b));d&&a&&a.appendChild(d)}),a}});{var J=(t.WebWorkerPlayer=i(x,{constructor:function(a){x.call(this,a),n(this,a).object("worker"),this.worker.onmessage=b.Parallel.prototype.__onmessage__.bind(this)},"static createWorker":function(a,c){h("string function".indexOf(typeof a)<0,"Invalid player builder: "+a+"!");var d=new b.Parallel;return d.loadModule(q,!0).then(function(){return d.run(("function"==typeof c?"("+c+")(),\n":"")+"self.PLAYER = ("+a+').call(self),\n"OK"')}).then(function(){return d.worker})},"static create":function(a){var b=this;return b.createWorker(a.playerBuilder,a.workerSetup).then(function(a){return new b({name:name,worker:a})})},decision:function(a,b){return this.__future__&&this.__future__.isPending()&&this.__future__.resolve(y.commandQuit),this.__future__=new l,this.worker.postMessage("PLAYER.decision(Sermat.mat("+JSON.stringify(c.ser(a))+"), "+JSON.stringify(b)+")"),this.__future__}}),q.aleatories.Aleatory=i({constructor:function(a,b){switch(arguments.length){case 1:this.range=[1,a];break;case 2:this.range=[a,b]}},value:function(a){return(a||m.DEFAULT).randomInt(this.range[0],this.range[1]+1)},distribution:function(){var a=this.range[0],b=this.range[1],c=1/(b-a+1);return j.range(a,b+1).map(function(a){return[a,c]})},"static __SERMAT__":{identifier:"Aleatory",serializer:function(){return[this.range]}}})),K=q.aleatories.UniformAleatory=i(J,{constructor:function(a){this.__values__=k(a).toArray(),h(this.__values__.length<1,"No values for aleatory!")},value:function(a){return(a||m.DEFAULT).choice(this.__values__)},distribution:function(){var a=1/this.__values__.length;return this.__values__.map(function(b){return[b,a]})},"static __SERMAT__":{identifier:"UniformAleatory",serializer:function(){return[this.__values__]}}});r.dice={D4:new J(1,4),D6:new J(1,6),D8:new J(1,8),D10:new J(1,10),D12:new J(1,12),D20:new J(1,20),D100:new J(1,100),sumProbability:function(a,c,d){if(c=0|c,d=0|d,a=0|a,isNaN(c)||isNaN(d)||isNaN(a)||1>c||2>d)return 0/0;if(c>a||a>c*d)return 0;var e=b.math.factorial,f=e(c),g=f/c;return Math.pow(d,-c)*j.range(0,Math.floor((a-c)/d)+1).map(function(b){var h=f/e(b)/e(c-b),i=a-d*b-1,j=e(i)/g/e(i-c+1);return(b%2?-1:1)*h*j}).sum()}}}return s.Predefined=i(w,{constructor:function(a,b,c,d){b&&(this.__results__=b,this.players=Object.keys(b)),w.call(this,a),this.height=isNaN(c)?5:+c,this.width=isNaN(d)?5:+d},name:"Predefined",players:["A","B"],__results__:{A:0,B:0},moves:function(){return this.height>0?e(this.activePlayer(),j.range(1,this.width+1).toArray()):void 0},result:function(){return this.height>0?null:this.__results__},next:function(){return new this.constructor(this.opponent(),this.__results__,this.height-1,this.width)},"static __SERMAT__":{identifier:"Predefined",serializer:function(a){return[a.activePlayer(),a.__results__,a.height,a.width]}}}),s.Choose2Win=i(w,{constructor:function(a,b,c){w.call(this,b),this.__turns__=isNaN(a)?1/0:+a,this.__winner__=c},name:"Choose2Win",players:["This","That"],moves:function(){return!this.__winner__&&this.__turns__>0?e(this.activePlayer(),["win","lose","pass"]):void 0},result:function(){return this.__winner__?this.victory(this.__winner__):this.__turns__<1?this.draw():null},next:function(a){var b=this.activePlayer(),c=this.opponent(b);switch(h(!a.hasOwnProperty(b),"No move for active player ",b," at ",this,"!"),a[b]){case"win":return new this.constructor(this.__turns__-1,c,b);case"lose":return new this.constructor(this.__turns__-1,c,c); -case"pass":return new this.constructor(this.__turns__-1,c);default:g("Invalid move ",a[b]," for player ",b," at ",this,"!")}},"static __SERMAT__":{identifier:"Choose2Win",serializer:function(a){var b=[a.__turns__,a.activePlayer()];return a.__winner__&&b.push(a.__winner__),b}}}),s.ConnectionGame=i(w,{height:9,width:9,lineLength:5,constructor:function(a,b){w.call(this,a),this.board=b instanceof C?b:new C(this.height,this.width,(b||".".repeat(this.height*this.width))+"")},name:"ConnectionGame",players:["First","Second"],__lines__:function(){function a(a,c,d){var e=a+"x"+c+"/"+d;if(!b.hasOwnProperty(e)){var f=new C(a,c,".".repeat(a*c));b[e]=f.lines().map(function(a){return a.toArray()},function(a){return a.length>=d}).toArray()}return b[e]}var b={};return a.CACHE=b,a}(),result:function(){if(this.hasOwnProperty("__result__"))return this.__result__;for(var a=this.lineLength,b=this.board.asStrings(this.__lines__(this.height,this.width,a)).join(" "),c=0;c=0)return this.__result__=this.victory([this.players[c]]);return this.__result__=b.indexOf(".")<0?this.draw():null},moves:function(){return this.hasOwnProperty("__moves__")?this.__moves__:this.__moves__=this.result()?null:e(this.activePlayer(),k(this.board.string).filter(function(a){return"."===a},function(a,b){return b}).toArray())},next:function(a){var b=this.activePlayer(),c=this.players.indexOf(b),d=+a[b],e=d/this.width>>0,f=d%this.width;return new this.constructor((c+1)%this.players.length,this.board.place([e,f],c.toString(36)))},display:function(a){h(!(a&&a instanceof I.BasicHTMLInterface),"Unsupported UI!");var b=this.moves(),c=this.activePlayer(),d=this.board;b=b&&b[c];this.board.renderAsHTMLTable(a.document,a.container,function(e){e.className="."===e.square?"ludorum-empty":"ludorum-player"+e.square,e.innerHTML="."===e.square?" ":"●";var f=e.coord[0]*d.height+e.coord[1];b&&b.indexOf(f)>=0&&(e.move=f,e.activePlayer=c,e.onclick=a.perform.bind(a,e.move,c))});return a},"static __SERMAT__":{identifier:"ConnectionGame",serializer:function(a){return[a.activePlayer(),a.board]}}}),s.OddsAndEvens=i(w,{constructor:function(a,b){w.call(this,this.players),this.turns=isNaN(a)?1:+a,this.points=b||{Evens:0,Odds:0}},name:"OddsAndEvens",players:["Evens","Odds"],moves:function(){return this.turns<1?null:{Evens:[1,2],Odds:[1,2]}},result:function(){var a=this.points.Evens-this.points.Odds;return this.turns>0?null:{Evens:+a,Odds:-a}},next:function(a){h("number"!=typeof a.Evens||"number"!=typeof a.Odds,"Invalid moves "+(JSON.stringify(a)||a)+"!");var b=(a.Evens+a.Odds)%2===0;return new this.constructor(this.turns-1,{Evens:this.points.Evens+(b?1:0),Odds:this.points.Odds+(b?0:1)})},"static __SERMAT__":{identifier:"OddsAndEvens",serializer:function(a){return[a.turns,a.points]}}}),s.TicTacToe=i(w,{name:"TicTacToe",constructor:function(a,b){w.call(this,a),this.board=b||"_________"},players:["Xs","Os"],result:function(){return function(){return this.board.match(this.WIN_X)?this.victory(["Xs"]):this.board.match(this.WIN_O)?this.victory(["Os"]):this.board.indexOf("_")<0?this.draw():null}}(),moves:function(){if(this.result())return null;var a={};return a[this.activePlayer()]=k(this.board).filter(function(a){return"_"===a},function(a,b){return b}).toArray(),a},next:function(a){var b=this.activePlayer(),c=+a[b];if(isNaN(c)||"_"!==this.board.charAt(c))throw new Error("Invalid move "+JSON.stringify(a)+" for board "+this.board+" (moves= "+JSON.stringify(a)+").");var d=this.board.substring(0,c)+b.charAt(0)+this.board.substring(c+1);return new this.constructor(this.opponent(b),d)},"static __SERMAT__":{identifier:"TicTacToe",serializer:function(a){return[a.activePlayer(),a.board]}},printBoard:function(){var a=this.board;return[a.substr(0,3).split("").join("|"),"-+-+-",a.substr(3,3).split("").join("|"),"-+-+-",a.substr(6,3).split("").join("|")].join("\n")},display:function(a){h(!(a&&a instanceof I.BasicHTMLInterface),"Unsupported UI!");var b=this.activePlayer(),c=this.moves(),d=(this.board,{X:"ludorum-square-Xs",O:"ludorum-square-Os",_:"ludorum-square-empty"}),e={X:"X",O:"O",_:" "};return c=c&&c[b]&&c[b].length>0,new C(3,3,this.board,"_").renderAsHTMLTable(a.document,a.container,function(f){f.className=d[f.square],f.innerHTML=e[f.square],c&&"_"===f.square&&(f.move=3*f.coord[0]+f.coord[1],f.activePlayer=b,f.onclick=a.perform.bind(a,f.move,b))}),a},"static heuristics":{heuristicFromWeights:function(a){function b(b,d){var e=d.charAt(0);return k(b.board).map(function(b,c){return"_"===b?0:a[c]*(b===e?1:-1)}).sum()/c}var c=k(a).map(Math.abs).sum();return b.weights=a,b}},"":function(){var a=new C(3,3,"_".repeat(9)),b=a.sublines(a.lines(),3);this.prototype.WIN_X=new RegExp(a.asRegExps(b,"X",".")),this.prototype.WIN_O=new RegExp(a.asRegExps(b,"O",".")),this.heuristics.defaultHeuristic=this.heuristics.heuristicFromWeights([2,1,2,1,5,1,2,1,2])}}),s.ToadsAndFrogs=i(w,{constructor:function L(a,b){w.call(this,a),this.board=b||L.board()},"static board":function(a,b){return a=isNaN(a)?3:+a,b=isNaN(b)?2:+b,"T".repeat(a)+"_".repeat(b)+"F".repeat(a)},name:"ToadsAndFrogs",players:["Toads","Frogs"],result:function(){return this.moves()?null:this.defeat()},moves:function(){var a=this.activePlayer(),b={},c=b[a]=[];return this.board.replace(a==this.players[0]?/TF?_/g:/_T?F/g,function(a,b){return c.push(b),a}),c.length>0?b:null},next:function(a){var b=this.activePlayer(),c=a[b],d=(b.charAt(0),this.board);if("T_"==d.substr(c,2))d=d.substring(0,c)+"_T"+d.substring(c+2);else if("_F"==d.substr(c,2))d=d.substring(0,c)+"F_"+d.substring(c+2);else if("TF_"==d.substr(c,3))d=d.substring(0,c)+"_FT"+d.substring(c+3);else{if("_TF"!=d.substr(c,3))throw new Error("Invalid move ",c," for board <",d,">.");d=d.substring(0,c)+"FT_"+d.substring(c+3)}return new this.constructor(this.opponent(),d)},"static __SERMAT__":{identifier:"ToadsAndFrogs",serializer:function(a){return[a.activePlayer(),a.board]}}}),s.Pig=i(w,{constructor:function(a,b,c,d){w.call(this,a),this.goal=isNaN(b)?100:+b,this.__scores__=c||k(this.players).zip([0,0]).toObject(),this.__rolls__=d||[]},name:"Pig",players:["One","Two"],moves:function(){if(!this.result()){var a=this.activePlayer(),b=this.__scores__[a]+k(this.__rolls__).sum();return e(a,this.__rolls__.length<1?["roll"]:b>=this.goal?["hold"]:["roll","hold"])}},result:function(){var a=this.__scores__[this.players[0]],b=this.__scores__[this.players[1]];if(a>=this.goal||b>=this.goal){var c={};return c[this.players[0]]=Math.min(this.goal,a)-Math.min(this.goal,b),c[this.players[1]]=-c[this.players[0]],c}},next:function(a,b){var c=this.activePlayer(),d=a&&a[c];if(h(!d,"No move for active player ",c," at ",this,"!"),"hold"===d){var e=f(this.__scores__);return e[c]+=k(this.__rolls__).sum(),new this.constructor(this.opponent(),this.goal,e,[])}if("roll"===d){var i=0|(b&&b.die);return i?i>1?new this.constructor(c,this.goal,this.__scores__,this.__rolls__.concat(i)):new this.constructor(this.opponent(),this.goal,this.__scores__,[]):new z({die:r.dice.D6},this,a)}g("Invalid moves ",JSON.stringify(a)," at ",this,"!")},resultBounds:function(){return[-this.goal,+this.goal]},"static __SERMAT__":{identifier:"Pig",serializer:function(a){return[a.activePlayer(),a.goal,a.__scores__,a.__rolls__]}}}),s.Mutropas=i(w,{name:"Mutropas",players:["Left","Right"],constructor:function(a){w.call(this,this.players),a=a||{},this.playedPieces=a.playedPieces||[],this.pieces=a.pieces||this.dealPieces(),this.__scores__=a.scores||e(this.players[0],0,this.players[1],0)},allPieces:j.range(9).toArray(),dealPieces:function(a){a=a||m.DEFAULT;var b=this.allPieces.length/2|0,c=a.split(b,this.allPieces),d=a.split(b,c[1]);return e(this.players[0],c[0],this.players[1],d[0])},moves:function(){return this.result()?null:f({},this.pieces)},moveResult:function(a,b){var c=k(this.allPieces).max(0)+1;return b>a?c/2>=b-a?1:-1:a>b?a-b>=c/2+1?1:-1:0},next:function(a){var b=this.players[0],c=this.players[1],d=a[b],f=a[c],g=this.pieces;h(g[b].indexOf(d)<0,"Invalid move ",JSON.stringify(d)," for player ",b,"! (moves= ",JSON.stringify(a),")"),h(g[c].indexOf(f)<0,"Invalid move ",JSON.stringify(f)," for player ",c,"! (moves= ",JSON.stringify(a),")");var i=this.moveResult(d,f);return new this.constructor({random:this.random,playedPieces:this.playedPieces.concat([d,f]),pieces:e(b,g[b].filter(function(a){return a!==d}),c,g[c].filter(function(a){return a!==f})),scores:e(b,this.__scores__[b]+i,c,this.__scores__[c]-i)})},scores:function(){return f({},this.__scores__)},result:function(){var a=this.players;if(this.playedPieces.length>=this.allPieces.length-1){var b=this.scores();return this.zerosumResult(b[a[0]]-b[a[1]],a[0])}return null},__possiblePieces__:function(a){var b=this.playedPieces,c=this.pieces[this.opponent(a)],d=k(this.allPieces).filter(function(a){return b.indexOf(a)<0&&c.indexOf(a)<0});return d.combinations(d.count()-1)},view:function(a){var b=this.opponent(a);return new z({pieces:new K(this.__possiblePieces__(b))},this)},"static __SERMAT__":{identifier:"Mutropas",serializer:function(a){return[{pieces:a.pieces,playedPieces:a.playedPieces,scores:a.__scores__}]}}}),s.Bahab=i(w,{name:"Bahab",players:["Uppercase","Lowercase"],constructor:function(a,b){w.call(this,a),this.board=b instanceof C?b:new C(5,5,b||this.initialBoard)},initialBoard:["BBABB","BBBBB",".....","bbbbb","bbabb"].join(""),__PLAYER_ENDGAME_RE__:{Uppercase:/^[.Bab]+$|^.{0,4}[a]/,Lowercase:/^[.bAB]+$|[A].{0,4}$/},result:function(){for(var a,b=this.board.string,c=0;2>c;++c)if(a=this.players[c],b.match(this.__PLAYER_ENDGAME_RE__[a]))return this.defeat(a);return this.moves()?null:this.defeat(this.activePlayer())},__PLAYER_PIECES_RE__:{Uppercase:/[AB]/g,Lowercase:/[ab]/g},moves:function(){var a=this.activePlayer(),b=this.__PLAYER_PIECES_RE__[a],c=this.board,d=[];return c.string.replace(b,function(a,e){var f,g=[e/5|0,e%5];switch(a){case"A":f=[[1,-1],[-1,0],[1,1]];break;case"B":f=[[1,-1],[1,1]];break;case"a":f=[[-1,-1],[1,0],[-1,1]];break;case"b":f=[[-1,-1],[-1,1]]}return k(f).forEachApply(function(e,f){var h=[g[0]+e,g[1]+f],i=c.square(h);!c.isValidCoord(h)||i.match(b)||"."!=i&&a.toLowerCase()!=i.toLowerCase()||d.push([g,h])}),a}),d.length>0?e(a,d):null},next:function(a){if(!a)throw new Error("Invalid moves "+a+"!");var b=this.activePlayer(),c=a[b];if(!Array.isArray(a[b]))throw new Error("Invalid moves "+JSON.stringify(a)+"!");return new this.constructor(this.opponent(),this.board.move(c[0],c[1]))},display:function(a){return h(!(a&&a instanceof I.BasicHTMLInterface),"Unsupported UI!"),this.__displayHTML__(a)},__displayHTML__:function(a){var b=this,c=this.moves(),d=this.activePlayer(),e=this.board,f={A:"ludorum-square-Uppercase-A",B:"ludorum-square-Uppercase-B",a:"ludorum-square-Lowercase-A",b:"ludorum-square-Lowercase-B",".":"ludorum-square-empty"},g=c?k(c[d]).groupAll(function(a){return JSON.stringify(a[0])}):{},h=a.selectedPiece&&g[JSON.stringify(a.selectedPiece)].map(function(a){return JSON.stringify(a[1])});return e.renderAsHTMLTable(a.document,a.container,function(c){c.className=f[c.square],c.innerHTML="."==c.square?" ":c.square,a.selectedPiece&&h&&h.indexOf(JSON.stringify(c.coord))>=0&&(c.className="ludorum-square-"+d+"-move",c.onclick=function(){var b=a.selectedPiece;a.selectedPiece=void 0,a.perform([b,c.coord],d)}),g.hasOwnProperty(JSON.stringify(c.coord))&&(c.onclick=function(){a.selectedPiece=c.coord,a.display(b)})}),a},"static __SERMAT__":{identifier:"Bahab",serializer:function(a){return[a.activePlayer(),a.board]}}}),u.RoundRobin=i(A,{constructor:function(a,b,c){A.call(this,a,b),this.matchCount=isNaN(c)?a.players.length:+c,this.__advance__=this.__matches__().chain(j.repeat(null)).__iter__()},__matches__:function(){var a=this.game,b=k(this.players);return b=b.product.apply(b,j.repeat(this.players,a.players.length-1).toArray()),b.filter(function(a){for(var b=1;bc;c++)if(a[b]===a[c])return!1;return!0}).product(j.range(this.matchCount)).map(function(b){return new y(a,b[0])})}}),u.Measurement=i(A,{constructor:function(a,b,c,d){A.call(this,a,Array.isArray(b)?b:[b]),this.opponents=Array.isArray(c)?c:[c],h(this.opponents.length2?c.product.apply(c,j.repeat(this.opponents,b-2).toArray()):c.map(function(a){return[a]}),k(this.players).product(j.range(b),c,j.range(this.matchCount)).map(function(b){var c=b[2].slice(0);return c.splice(b[1],0,b[0]),new y(a,c)})}}),u.Elimination=i(A,{constructor:function(a,b,c){A.call(this,a,b),this.matchCount=isNaN(c)?1:+c>>0},__bracket__:function(a){var b=this.game,c=this.matchCount,d=this.game.players.length;return a=a||this.players,a.lengtha,"There are no active players!"),h(a>1,"More than one player is active!"),this.activePlayers[0]},opponents:function(a){return a=a||this.activePlayers,this.players.filter(function(b){return a.indexOf(b)<0})},opponent:function(a){var b=this.players.indexOf(a||this.activePlayer());return this.players[(b+1)%this.players.length]},perform:function(){for(var a,b={},c=0;c+a?this.ply()+ +a:+a,this.history[0|a]},result:function(){return this.state().result()},decisions:function(a){a=a||this.state();var b=this,c=this.players,d=a.activePlayers;return l.all(d.map(function(b){return c[b].decision(a.view(b),b)})).then(function(c){var e=k(d).zip(c).toObject();return b.onMove(a,e),e})},run:function(a){if(a=isNaN(a)?1/0:+a,1>a)return l.when(this);var b,c=this.ply(),d=this.state();if(1>c&&this.onBegin(d),d=this.__advanceContingents__(d),b=d.result())return this.onEnd(d,b),l.when(this);var e=this;return this.decisions(d).then(function(b){return e.__advance__(d,b)?e.run(a-1):e})},__advanceContingents__:function(a){for(var b;a.isContingent;a=b)b=a.randomNext(),this.history.push(b),this.onNext(a,b);return a},__advance__:function(a,b){var c=this,d=a.activePlayers.filter(function(a){return"quit"===b[a].__command__});if(d.length>0)return c.onQuit(a,d[0]),!1;var e=a.next(b);return this.history.push(e),this.onNext(a,e),!0},"static COMMAND_QUIT":{__command__:"quit"},onBegin:function(a){this.events.emit("begin",a,this),this.logger&&this.logger.info("Match begins with ",k(this.players).map(function(a){return a[1]+" as "+a[0]}).join(", "),"; for ",a,".")},onMove:function(a,b){this.events.emit("move",a,b,this),this.logger&&this.logger.info("Players move: ",JSON.stringify(b)," in ",a)},onNext:function(a,b){this.events.emit("next",a,b,this),this.logger&&this.logger.info("Match advances from ",a," to ",b)},onEnd:function(a,b){this.events.emit("end",a,b,this),this.logger&&this.logger.info("Match for ",a,"ends with ",JSON.stringify(b))},onQuit:function(a,b){this.events.emit("quit",a,b,this),this.logger&&this.logger.info("Match for ",a," aborted because player "+b+" quitted.")},toString:function(){return"Match("+this.game+", "+JSON.stringify(this.players)+")"},"static __SERMAT__":{identifier:"Match",serializer:function(a){return[a.game,a.players,a.history]},materializer:function(a,b){if(b){var c=new y(b[0],b[1]);return c.history=b[2],c}return null}}}),z=q.Contingent=i({isContingent:!0,constructor:function(a,b,c){a&&(this.__haps__=a),b&&(this.__state__=b),c&&(this.__moves__=c)},haps:function(){return this.__haps__},next:function(a){var b=this.__state__;if(this.__moves__)return b.next(this.__moves__,a||this.randomHaps());var d=c.record(b.constructor),e=d.serializer(b)[0];return d.materializer(null,[f(a,e)])},randomHaps:function(a){return k(this.haps()).mapApply(function(b,c){return[b,c.value(a)]}).toObject()},randomNext:function(a){return this.next(this.randomHaps(a))},possibleHaps:function(){return j.product.apply(j,k(this.haps()).mapApply(function(a,b){return b.distribution().mapApply(function(b,c){return[a,b,c]})}).toArray()).map(function(a){var b=1;return[k(a).mapApply(function(a,c,d){return b*=d,[a,c]}).toObject(),b]}).toArray()},"static __SERMAT__":{identifier:"Contingent",serializer:function(a){return[a.__haps__||null,a.__state__||null,a.__moves__||null]}}}),A=q.Tournament=i({constructor:function(a,b){this.game=a,this.players=Array.isArray(b)?b:iterables.iterable(b).toArray(),this.statistics=new o,this.events=new p({events:["begin","beforeMatch","afterMatch","end"]})},__advance__:d("Tournament","__advance__"),run:function(){this.onBegin();var a=this;return l.doWhile(function(){return l.then(a.__advance__(),function(b){return b?(a.beforeMatch(b),a.__runMatch__(b).then(function(b){return a.account(b),a.afterMatch(b),b})):null})}).then(this.onEnd.bind(this))},__runMatch__:function(a){return a.run()},account:function(a){var b=this.game,c=a.result(),d=this.statistics;h(!c,"Match doesn't have results. Has it finished?"),k(a.players).forEach(function(e){var f=e[0],g=e[1],h=c[e[0]];d.add({key:"results",game:b.name,role:f,player:g.name},h),d.add({key:h>0?"victories":0>h?"defeats":"draws",game:b.name,role:f,player:g.name},h),d.add({key:"length",game:b.name,role:f,player:g.name},a.ply()),a.history.forEach(function(a){if("function"==typeof a.moves){var c=a.moves();c&&c.hasOwnProperty(f)&&c[f].length>0&&d.add({key:"width",game:b.name,role:f,player:g.name},c[f].length)}})})},onBegin:function(){this.events.emit("begin",this),this.logger&&this.logger.info("Tournament begins for game ",game.name,".")},beforeMatch:function(a){this.events.emit("beforeMatch",a,this),this.logger&&this.logger.debug("Beginning match with ",JSON.stringify(a.players),".")},afterMatch:function(a){this.events.emit("afterMatch",a,this),this.logger&&this.logger.debug("Finishing match with ",JSON.stringify(a.players),".")},onEnd:function(){this.events.emit("end",this.statistics,this),this.logger&&this.logger.info("Tournament ends for game ",game.name,":\n",this.statistics,"\n")}}),B=v.Checkerboard=i({constructor:function(a,b){isNaN(a)||(this.height=0|a),isNaN(b)||(this.width=0|b)},emptySquare:null,isValidCoord:function(a){return Array.isArray(a)&&!isNaN(a[0])&&!isNaN(a[1])&&a[0]>=0&&a[0]=0&&a[1]=b}).map(function(a){return j.range(0,a.length-b+1).map(function(c){return a.slice(c,c+b)})}).flatten()},walk:function(a,b){var c=this;return new j(function(){var d=a.slice();return function(){if(c.isValidCoord(d)){var a=d.slice();return d[0]+=b[0],d[1]+=b[1],a}throw j.STOP_ITERATION}})},walks:function(a,b){var c=this;return b.map(function(b){return c.walk(a,b)})},"static DIRECTIONS":{HORIZONTAL:[[0,-1],[0,1]],VERTICAL:[[-1,0],[1,0]],ORTHOGONAL:[[0,-1],[0,1],[-1,0],[1,0]],DIAGONAL:[[-1,-1],[-1,1],[1,-1],[1,1]],EVERY:[[0,-1],[0,1],[-1,0],[1,0],[-1,-1],[-1,1],[1,-1],[1,1]]},clone:d("utils.Checkerboard","clone"),__place__:d("utils.Checkerboard","place"),place:function(a,b){return this.clone().__place__(a,b)},__move__:function(a,b,c){return this.__place__(b,this.square(a)).__place__(a,"undefined"==typeof c?this.emptySquare:c)},move:function(a,b,c){return this.clone().__move__(a,b,c)},__swap__:function(a,b){var c=this.square(b);return this.__place__(b,this.square(a)).__place__(a,c)},swap:function(a,b){return this.clone().__swap__(a,b)},transform:function(a){var b=this.clone(),c=this;return this.coordinates().forEach(function(d){var e=a.apply(c,[c,d].concat(d));b.__place__(e,c.square(d))}),b},horizontalSymmetry:function(){return this.transform(function(a,b,c,d){return[c,a.width-d-1]})},verticalSymmetry:function(){return this.transform(function(a,b,c,d){return[a.height-c-1,d]})},clockwiseRotation:function(){return this.transform(function(a,b,c,d){return[d,a.height-c-1]})},counterClockwiseRotation:function(){return this.transform(function(a,b,c,d){return[a.width-d-1,c]})},renderAsHTMLTable:function(a,c,d){var e=this,f=a.createElement("table");return c.appendChild(f),e.horizontals().reverse().forEach(function(c){var g=a.createElement("tr");f.appendChild(g),c.forEach(function(c){var f=e.square(c),h=a.createElement("td"),i={id:"ludorum-square-"+c.join("-"),className:"ludorum-square",square:f,coord:c,innerHTML:b.Text.escapeXML(f)};d&&(i=d(i)||i),h["ludorum-data"]=i,h.id=i.id,h.className=i.className,h.innerHTML=i.innerHTML,i.onclick&&(h.onclick=i.onclick),g.appendChild(h)})}),f},weightedSum:function(a,b){var c=this;return this.coordinates().zip(a).mapApply(function(a,d){return b[c.square(a)]*d||0}).sum()}}),C=v.CheckerboardFromString=i(B,{constructor:function(a,b,c,d){if(B.call(this,a,b),d&&d!==this.emptySquare&&(this.emptySquare=(d+"").charAt(0)),c&&c.length!==a*b)throw new Error("Given string "+JSON.stringify(c)+" does not match board dimensions.");this.string=c||this.emptySquare.repeat(a*b)},emptySquare:".",toString:function(){var a=this.string,b=this.height,c=this.width;return j.range(b).map(function(d){return a.substr((b-d-1)*c,c)}).join("\n")},square:function(a,b){var c=a[0],d=a[1],e=this.width;return c>=0&&c=0&&e>d?this.string.charAt(c*e+d):b},asString:function(a){var b=this;return a.map(function(a){return b.square(a)}).join("")},asStrings:function(a){var b=this;return a.map(function(a){return b.asString(a)})},asRegExp:function(a,b,c){c=c||".";var d=this.width,e=j.repeat(!1,d*this.height).toArray();a.forEach(function(a){e[a[0]*d+a[1]]=!0});for(var f,g="",h=0,i=0;ih?f?b:c:(f?b:c)+"{"+h+"}"}return g},asRegExps:function(a,b,c){var d=this;return a.map(function(a){return d.asRegExp(a,b,c)}).join("|")},clone:function(){return new this.constructor(this.height,this.width,this.string,this.hasOwnProperty("emptySquare")?this.emptySquare:void 0)},__place__:function(a,b){h(!this.isValidCoord(a),"Invalid coordinate ",a,"."),b=(b+this.emptySquare).charAt(0);var c=a[0]*this.width+a[1];return this.string=this.string.substr(0,c)+b+this.string.substr(c+1),this},"static __SERMAT__":{identifier:"CheckerboardFromString",serializer:function(a){var b=[a.height,a.width,a.string];return a.hasOwnProperty("emptySquare")&&b.push(a.emptySquare),b}}});v.CheckerboardFromPieces=i(B,{constructor:function(a,c,d,e){B.call(this,a,c);var f=this;e!==this.emptySquare&&(this.emptySquare=e),Array.isArray(d)?(this.pieces={},k(d||[]).forEach(function(a){h(!Array.isArray(a.position),"Piece has not a position (",a,")!"),f.pieces[a.position+""]=a})):"object"==typeof d?this.pieces=b.copy({},d):g("Invalid pieces definition: ",d,"!")},emptySquare:null,toString:function(){return"["+k(this.pieces).select(1).join(", ")+"]"},square:function(a,b){return this.pieces[a]||b},clone:function(){return new this.constructor(this.height,this.width,this.pieces,this.emptySquare)},__place__:function(a,b){h(!this.isValidCoord(a),"Invalid coordinate ",a,"!");var c=a+"";return delete this.pieces[c],b&&(this.pieces[c]=b),this}})}q.utils.Scanner=i({constructor:function(a){n(this,a).object("game",{ignore:!0}).integer("maxWidth",{defaultValue:1e3,coerce:!0}).integer("maxLength",{defaultValue:50,coerce:!0}).object("random",{defaultValue:m.DEFAULT}).object("statistics",{defaultValue:new o})},scan:function(a){var b=this,c=arguments.length<2?this.game?[this.game]:[]:Array.prototype.slice.call(arguments,1),d=0;return l.whileDo(function(){return c.length>0&&dg?(e.add({key:"defeat.result",game:b.name,role:f,player:h},g,b),e.add({key:"defeat.length",game:b.name,role:f,player:h},c,b)):g>0?(e.add({key:"victory.result",game:b.name,role:f,player:h},g,b),e.add({key:"victory.length",game:b.name,role:f,player:h},c,b)):e.add({key:"draw.length",game:b.name,role:f,player:h},c,b)}),!0;var f=b.moves();return k(b.activePlayers).forEach(function(a){e.add({key:"game.width",game:b.name,role:a},f[a].length)}),!1}}),v.Cache=i({constructor:function(a){this.clear(),a&&this.root(a)},stateIdentifier:function(a){return a.identifier()},moveIdentifier:function(a){return JSON.stringify(a)},has:function(a){var b="string"==typeof a?a:this.stateIdentifier(a);return this.__entries__.hasOwnProperty(b)},get:function(a){var b="string"==typeof a?a:this.stateIdentifier(a);return this.__entries__[b]},size:function(){return Object.keys(this.__entries__).length},entry:function(a,b){if(b=b||this.stateIdentifier(a),this.has(b))return this.get(b);var c={id:b,state:a,precursors:[],descendants:{}};return this.__entries__[b]=c,c},descendant:function(a,b){var c=this.moveIdentifier(b),d=a.descendants;if(d.hasOwnProperty(c))return d[c][1];var e=a.state.next(b),f=this.stateIdentifier(e),g=this.get(f)||this.entry(e,f);return d[c]=[b,g],g.precursors.push([b,a]),g},descendants:function(a){var b=this.descendant.bind(this,a);return arguments.length>1?Array.prototype.slice.call(arguments,1).map(b):a.state.possibleMoves().map(b)},clear:function(){this.__entries__={},this.__root__=null},root:function(a){if(arguments.length>0){var b=this.stateIdentifier(a);this.__root__=this.get(b)||this.entry(a,b),this.prune(b)}return this.__root__},prune:function(a){for(var b,c=[a||this.__root__.id],d={};a=c.shift();)d.hasOwnProperty(a)||(b=this.get(a),d[a]=b,c.push.apply(c,k(b.descendants).mapApply(function(a,b){return b[1][a]}).toArray()));return this.__entries__=d}});var D=i({constructor:function(a,b,c){this.parent=a,this.state=b,this.transition=c,this.children={}},childrenCount:function(){return Object.keys(this.children).length},__childSerialization__:function(a){return JSON.stringify(a)},expand:function(a){var b,c=this.__childSerialization__(a),d=this.children[c];if(!d){try{b=this.state.next(a)}catch(e){g("Node expansion for ",this.state," with ",JSON.stringify(a)," failed with: ",e)}d=new this.constructor(this,b,a),this.children[c]=d}return d},possibleTransitions:function(){var a=this.state;return a.isContingent?a.possibleHaps():a.possibleMoves()},expandAll:function(){var a=this;return this.possibleTransitions().map(function(b){return a.expand(Array.isArray(b)?b[0]:b)})}});t.RandomPlayer=i(x,{constructor:function(a){x.call(this,a),n(this,a).object("random",{defaultValue:m.DEFAULT})},decision:function(a,b){return this.random.choice(this.movesFor(a,b))},"static __SERMAT__":{identifier:"RandomPlayer",serializer:function(a){return this.serializeAsProperties(a,["name","random"])}}}),t.TracePlayer=i(x,{constructor:function(a){x.call(this,a),this.trace=k(a.trace),this.__iter__=this.trace.__iter__(),this.__decision__=this.__iter__()},decision:function(){try{this.__decision__=this.__iter__()}catch(a){j.prototype.catchStop(a)}return this.__decision__},"static __SERMAT__":{identifier:"Player",serializer:function(a){return[{name:a.name,trace:a.trace.toArray()}]}}});var E=t.HeuristicPlayer=i(x,{constructor:function(a){x.call(this,a),n(this,a).object("random",{defaultValue:m.DEFAULT}).func("heuristic",{ignore:!0})},moveEvaluation:function(a,b,c){var d=this;if(Object.keys(a).length<2)return this.stateEvaluation(b.next(a),c);var g=0,h=0;return a=f(e(c,[a[c]]),a),b.possibleMoves(a).forEach(function(a){g+=d.stateEvaluation(b.next(a),c),++h}),h>0?g/h:0},stateEvaluation:function(a,b){var c=a.result();return c?c[b]:this.heuristic(a,b)},heuristic:function(){return this.random.random(-.5,.5)},evaluatedMoves:function(a,b){var c=this,d=!1;if(a.isContingent){var e=k(a.possibleHaps()).mapApply(function(e,f){var g=c.evaluatedMoves(a.next(e),b);return d=d||l.__isFuture__(g),l.then(g,function(a){return a.map(function(a){return a[1]*=f,a})})});return l.then(d?l.all(e):e,function(a){return k(a).groupBy(function(a){return a[0]}).mapApply(function(a,b){return[a,k(b).select(1).sum()]})})}var f=this.possibleMoves(a,b).map(function(e){var f=c.moveEvaluation(e,a,b);return d=d||l.__isFuture__(f),l.then(f,function(a){return[e,a]})});return d?l.all(f):f},possibleMoves:function(a,b){var c=a.moves();return h(!c||!c[b]||!Array.isArray(c[b])||c[b].length<1,"Player "+b+" has no moves in "+a+" (moves= "+c+")!"),k(c[b]).map(function(a){return f(e(b,a),c)})},bestMoves:function(a){return l.then(a,function(a){return k(a).greater(function(a){return a[1]}).map(function(a){return a[0]})})},decision:function(a,b){var c=this.random;return l.then(this.bestMoves(this.evaluatedMoves(a,b)),function(d){return d=k(d).toArray(),h(!d||!d.length,"No moves where selected at ",a," for player ",b,"!"),c.choice(d)[b]})},"static composite":function(){var a=Array.prototype.slice.call(arguments);h(a.length<1,"HeuristicPlayer.composite() cannot take an odd number of arguments!");for(var b=0;b1,"HeuristicPlayer.composite() argument ",b+1," (",a[b+1],") is not a valid weight!");return function(b,c){for(var d=0,e=0;e+1=this.horizon?this.heuristics(a):null},maxN:function(a,b,c){var d=this.quiescence(a,b,c);if(!d){var f,g,h=a.activePlayer(),i=this.movesFor(a,h);if(d={},i.length<1)throw new Error("No moves for unfinished game "+a+".");for(var j=0;j(d[h]||-1/0)&&(d=f)}return d},"static __SERMAT__":{identifier:"MaxNPlayer",serializer:function(a){return this.serializeAsProperties(a,["name","horizon"])}}}),t.MiniMaxPlayer=i(E,{constructor:function(a){E.call(this,a),n(this,a).integer("horizon",{defaultValue:4,coerce:!0})},stateEvaluation:function(a,b){return this.minimax(a,b,0)},quiescence:function(a,b,c){var d=a.result();return d?d[b]:c>=this.horizon?this.heuristic(a,b):0/0},minimax:function(a,b,c){var d=this.quiescence(a,b,c);if(isNaN(d)){var f,g,h=a.activePlayer(),i=this.movesFor(a,h);if(i.length<1)throw new Error("No moves for unfinished game "+a+".");h==b?(d=-1/0,f=Math.max):(d=+1/0,f=Math.min);for(var j=0;jd&&(d=g):f>g&&(f=g),!(d>=f));l++);return j?d:f},"static __SERMAT__":{identifier:"AlphaBetaPlayer",serializer:function(a){return this.serializeAsProperties(a,["name","horizon"])}}});var G=t.MonteCarloPlayer=i(E,{constructor:function(a){if(E.call(this,a),n(this,a).number("simulationCount",{defaultValue:30,coerce:!0}).number("timeCap",{defaultValue:1e3,coerce:!0}).number("horizon",{defaultValue:500,coerce:!0}),a)switch(typeof a.agent){case"function":this.agent=new E({heuristic:a.agent});break;case"object":this.agent=a.agent;break;default:this.agent=null}},evaluatedMoves:function(a,b){h(a.isContingent,"MonteCarloPlayer cannot evaluate root contingent states!");for(var c=this,d=Date.now()+this.timeCap,g=a.next.bind(a),i=this.possibleMoves(a,b).map(function(c){return{move:c,nexts:Object.keys(c).length<2?[a.next(c)]:a.possibleMoves(f(e(b,[c[b]]),c)).map(g),sum:0,count:0}}).toArray(),j=0;j0})});return i.map(function(a){return h(isNaN(a.sum),"State evaluation is NaN for move ",a.move,"!"),[a.move,a.count>0?a.sum/a.count:0]})},stateEvaluation:function(a,b){for(var c,d=0,e=this.simulationCount,f=0;e>f&&(c=this.simulation(a,b),d+=c.result[b],!(c.plies<1));++f);return e>0?d/e:0},simulation:function(a,b){var c,d,f,h=this;for(c=0;!0;++c)if(a.isContingent)a=a.randomNext(this.random);else{if(f=a.moves(),!f)return{game:a,result:a.result(),plies:c};if(c>this.horizon)return{game:a,result:e(b,this.heuristic(a,b)),plies:c};d={},a.activePlayers.forEach(function(b){d[b]=h.agent?h.agent.decision(a,b):h.random.choice(f[b])}),a=a.next(d)}g("Simulation ended unexpectedly for player ",b," in game ",a,"!")},"static __SERMAT__":{identifier:"MonteCarloPlayer",serializer:function(a){return this.serializeAsProperties(a,["name","simulationCount","timeCap","agent"])}}});t.UCTPlayer=i(G,{constructor:function(a){G.call(this,a),n(this,a).number("explorationConstant",{defaultValue:Math.sqrt(2),coerce:!0})},selectNode:function(a,b,c){return c=isNaN(c)?this.explorationConstant:+c,this.random.choice(k(a.children).select(1).greater(function(a){return a.uct.rewards/a.uct.visits+c*Math.sqrt(Math.log(b)/a.uct.visits)}))},evaluatedMoves:function(a,b){var c,d,e=new D(null,a),f=Date.now()+this.timeCap;e.uct={pending:this.random.shuffle(e.possibleTransitions()),visits:0,rewards:0};for(var g=0;g0;)c=this.selectNode(c,g+1,this.explorationConstant);for(c.uct.pending.length>0&&(c=c.expand(c.uct.pending.pop()),c.uct={pending:this.random.shuffle(c.possibleTransitions()),visits:0,rewards:0}),d=this.simulation(c.state,b);c;c=c.parent)++c.uct.visits,c.uct.rewards+=(a.normalizedResult(d.result)[b]+1)/2}return k(e.children).select(1).map(function(a){return[a.transition,a.uct.visits]})},"static __SERMAT__":{identifier:"UCTPlayer",serializer:function(a){return this.serializeAsProperties(a,["name","simulationCount","timeCap","explorationConstant"])}}});var H=t.UserInterfacePlayer=i(x,{constructor:function(a){x.call(this,a)},participate:function(a,b){return this.role=b,this},decision:function(){return this.__future__&&this.__future__.isPending()&&this.__future__.resolve(new y.CommandQuit),this.__future__=new l,this.__future__},perform:function(a){var b=this.__future__;return b&&(this.__future__=null,b.resolve(a)),!!b}}),I=t.UserInterface=i({constructor:function(a){this.onBegin=this.onBegin.bind(this),this.onNext=this.onNext.bind(this),this.onEnd=this.onEnd.bind(this),a.match&&this.show(a.match)},show:function(a){this.match&&(a.events.off("begin",this.onBegin),a.events.off("next",this.onNext),a.events.off("end",this.onEnd)),this.match=a,a.events.on("begin",this.onBegin),a.events.on("next",this.onNext),a.events.on("end",this.onEnd)},onBegin:function(a){this.display(a)},onNext:function(a,b){this.display(b)},onEnd:function(a,b){this.results=b,this.display(a)},display:d("UserInterface","display"),perform:function(a,b){k(this.match.players).forEach(function(c){var d=(c[0],c[1]);d instanceof H&&(!b||d.role===b)&&d.perform(a)})}});I.BasicHTMLInterface=i(I,{constructor:function(a){I.call(this,a),this.document=a.document||b.global.document,this.container=a.container,"string"==typeof this.container&&(this.container=this.document.getElementById(this.container))},display:function(a){for(var b,c=this.container;b=c.firstChild;)c.removeChild(b);a.display(this)},build:function(a,b){var c=this;return b.forEach(function(b){var d;if(Array.isArray(b)){if(d=c.document.createElement(b[0]),b.length>2&&b[1]){var e=b[1];for(var f in e)attr.hasOwnProperty(f)&&d.setAttribute(f,e[f])}b.length>1&&b[b.length-1]&&c.build(d,b[b.length-1])}else"string"==typeof b&&(d=c.document.createTextNode(b));d&&a&&a.appendChild(d)}),a}});{var J=(t.WebWorkerPlayer=i(x,{constructor:function(a){x.call(this,a),n(this,a).object("worker"),this.worker.onmessage=b.Parallel.prototype.__onmessage__.bind(this)},"static createWorker":function(a,c){h("string function".indexOf(typeof a)<0,"Invalid player builder: "+a+"!");var d=new b.Parallel;return d.loadModule(q,!0).then(function(){return d.run(("function"==typeof c?"("+c+")(),\n":"")+"self.PLAYER = ("+a+').call(self),\n"OK"')}).then(function(){return d.worker})},"static create":function(a){var b=this;return b.createWorker(a.playerBuilder,a.workerSetup).then(function(a){return new b({name:name,worker:a})})},decision:function(a,b){return this.__future__&&this.__future__.isPending()&&this.__future__.resolve(y.commandQuit),this.__future__=new l,this.worker.postMessage("PLAYER.decision(Sermat.mat("+JSON.stringify(c.ser(a))+"), "+JSON.stringify(b)+")"),this.__future__}}),q.aleatories.Aleatory=i({constructor:function(a,b){switch(arguments.length){case 1:this.range=[1,a];break;case 2:this.range=[a,b]}},value:function(a){return(a||m.DEFAULT).randomInt(this.range[0],this.range[1]+1)},distribution:function(){var a=this.range[0],b=this.range[1],c=1/(b-a+1);return j.range(a,b+1).map(function(a){return[a,c]})},"static __SERMAT__":{identifier:"Aleatory",serializer:function(){return[this.range]}}})),K=q.aleatories.UniformAleatory=i(J,{constructor:function(a){this.__values__=k(a).toArray(),h(this.__values__.length<1,"No values for aleatory!")},value:function(a){return(a||m.DEFAULT).choice(this.__values__)},distribution:function(){var a=1/this.__values__.length;return this.__values__.map(function(b){return[b,a]})},"static __SERMAT__":{identifier:"UniformAleatory",serializer:function(){return[this.__values__]}}});r.dice={D4:new J(1,4),D6:new J(1,6),D8:new J(1,8),D10:new J(1,10),D12:new J(1,12),D20:new J(1,20),D100:new J(1,100),sumProbability:function(a,c,d){if(c=0|c,d=0|d,a=0|a,isNaN(c)||isNaN(d)||isNaN(a)||1>c||2>d)return 0/0;if(c>a||a>c*d)return 0;var e=b.math.factorial,f=e(c),g=f/c;return Math.pow(d,-c)*j.range(0,Math.floor((a-c)/d)+1).map(function(b){var h=f/e(b)/e(c-b),i=a-d*b-1,j=e(i)/g/e(i-c+1);return(b%2?-1:1)*h*j}).sum()}}}return s.Predefined=i(w,{constructor:function(a,b,c,d){b&&(this.__results__=b,this.players=Object.keys(b)),w.call(this,a),this.height=isNaN(c)?5:+c,this.width=isNaN(d)?5:+d},name:"Predefined",players:["A","B"],__results__:{A:0,B:0},moves:function(){return this.height>0?e(this.activePlayer(),j.range(1,this.width+1).toArray()):void 0},result:function(){return this.height>0?null:this.__results__},next:function(){return new this.constructor(this.opponent(),this.__results__,this.height-1,this.width)},"static __SERMAT__":{identifier:"Predefined",serializer:function(a){return[a.activePlayer(),a.__results__,a.height,a.width]}}}),s.Choose2Win=i(w,{constructor:function(a,b,c){w.call(this,b),this.__turns__=isNaN(a)?1/0:+a,this.__winner__=c},name:"Choose2Win",players:["This","That"],moves:function(){return!this.__winner__&&this.__turns__>0?e(this.activePlayer(),["win","lose","pass"]):void 0},result:function(){return this.__winner__?this.victory(this.__winner__):this.__turns__<1?this.draw():null +},next:function(a){var b=this.activePlayer(),c=this.opponent(b);switch(h(!a.hasOwnProperty(b),"No move for active player ",b," at ",this,"!"),a[b]){case"win":return new this.constructor(this.__turns__-1,c,b);case"lose":return new this.constructor(this.__turns__-1,c,c);case"pass":return new this.constructor(this.__turns__-1,c);default:g("Invalid move ",a[b]," for player ",b," at ",this,"!")}},"static __SERMAT__":{identifier:"Choose2Win",serializer:function(a){var b=[a.__turns__,a.activePlayer()];return a.__winner__&&b.push(a.__winner__),b}}}),s.ConnectionGame=i(w,{height:9,width:9,lineLength:5,constructor:function(a,b){w.call(this,a),this.board=b instanceof C?b:new C(this.height,this.width,(b||".".repeat(this.height*this.width))+"")},name:"ConnectionGame",players:["First","Second"],__lines__:function(){function a(a,c,d){var e=a+"x"+c+"/"+d;if(!b.hasOwnProperty(e)){var f=new C(a,c,".".repeat(a*c));b[e]=f.lines().map(function(a){return a.toArray()},function(a){return a.length>=d}).toArray()}return b[e]}var b={};return a.CACHE=b,a}(),result:function(){if(this.hasOwnProperty("__result__"))return this.__result__;for(var a=this.lineLength,b=this.board.asStrings(this.__lines__(this.height,this.width,a)).join(" "),c=0;c=0)return this.__result__=this.victory([this.players[c]]);return this.__result__=b.indexOf(".")<0?this.draw():null},moves:function(){return this.hasOwnProperty("__moves__")?this.__moves__:this.__moves__=this.result()?null:e(this.activePlayer(),k(this.board.string).filter(function(a){return"."===a},function(a,b){return b}).toArray())},next:function(a){var b=this.activePlayer(),c=this.players.indexOf(b),d=+a[b],e=d/this.width>>0,f=d%this.width;return new this.constructor((c+1)%this.players.length,this.board.place([e,f],c.toString(36)))},display:function(a){h(!(a&&a instanceof I.BasicHTMLInterface),"Unsupported UI!");var b=this.moves(),c=this.activePlayer(),d=this.board;b=b&&b[c];this.board.renderAsHTMLTable(a.document,a.container,function(e){e.className="."===e.square?"ludorum-empty":"ludorum-player"+e.square,e.innerHTML="."===e.square?" ":"●";var f=e.coord[0]*d.height+e.coord[1];b&&b.indexOf(f)>=0&&(e.move=f,e.activePlayer=c,e.onclick=a.perform.bind(a,e.move,c))});return a},"static __SERMAT__":{identifier:"ConnectionGame",serializer:function(a){return[a.activePlayer(),a.board]}}}),s.OddsAndEvens=i(w,{constructor:function(a,b){w.call(this,this.players),this.turns=isNaN(a)?1:+a,this.points=b||{Evens:0,Odds:0}},name:"OddsAndEvens",players:["Evens","Odds"],moves:function(){return this.turns<1?null:{Evens:[1,2],Odds:[1,2]}},result:function(){var a=this.points.Evens-this.points.Odds;return this.turns>0?null:{Evens:+a,Odds:-a}},next:function(a){h("number"!=typeof a.Evens||"number"!=typeof a.Odds,"Invalid moves "+(JSON.stringify(a)||a)+"!");var b=(a.Evens+a.Odds)%2===0;return new this.constructor(this.turns-1,{Evens:this.points.Evens+(b?1:0),Odds:this.points.Odds+(b?0:1)})},"static __SERMAT__":{identifier:"OddsAndEvens",serializer:function(a){return[a.turns,a.points]}}}),s.TicTacToe=i(w,{name:"TicTacToe",constructor:function(a,b){w.call(this,a),this.board=b||"_________"},players:["Xs","Os"],result:function(){return function(){return this.board.match(this.WIN_X)?this.victory(["Xs"]):this.board.match(this.WIN_O)?this.victory(["Os"]):this.board.indexOf("_")<0?this.draw():null}}(),moves:function(){if(this.result())return null;var a={};return a[this.activePlayer()]=k(this.board).filter(function(a){return"_"===a},function(a,b){return b}).toArray(),a},next:function(a){var b=this.activePlayer(),c=+a[b];if(isNaN(c)||"_"!==this.board.charAt(c))throw new Error("Invalid move "+JSON.stringify(a)+" for board "+this.board+" (moves= "+JSON.stringify(a)+").");var d=this.board.substring(0,c)+b.charAt(0)+this.board.substring(c+1);return new this.constructor(this.opponent(b),d)},"static __SERMAT__":{identifier:"TicTacToe",serializer:function(a){return[a.activePlayer(),a.board]}},printBoard:function(){var a=this.board;return[a.substr(0,3).split("").join("|"),"-+-+-",a.substr(3,3).split("").join("|"),"-+-+-",a.substr(6,3).split("").join("|")].join("\n")},display:function(a){h(!(a&&a instanceof I.BasicHTMLInterface),"Unsupported UI!");var b=this.activePlayer(),c=this.moves(),d=(this.board,{X:"ludorum-square-Xs",O:"ludorum-square-Os",_:"ludorum-square-empty"}),e={X:"X",O:"O",_:" "};return c=c&&c[b]&&c[b].length>0,new C(3,3,this.board,"_").renderAsHTMLTable(a.document,a.container,function(f){f.className=d[f.square],f.innerHTML=e[f.square],c&&"_"===f.square&&(f.move=3*f.coord[0]+f.coord[1],f.activePlayer=b,f.onclick=a.perform.bind(a,f.move,b))}),a},"static heuristics":{heuristicFromWeights:function(a){function b(b,d){var e=d.charAt(0);return k(b.board).map(function(b,c){return"_"===b?0:a[c]*(b===e?1:-1)}).sum()/c}var c=k(a).map(Math.abs).sum();return b.weights=a,b}},"":function(){var a=new C(3,3,"_".repeat(9)),b=a.sublines(a.lines(),3);this.prototype.WIN_X=new RegExp(a.asRegExps(b,"X",".")),this.prototype.WIN_O=new RegExp(a.asRegExps(b,"O",".")),this.heuristics.defaultHeuristic=this.heuristics.heuristicFromWeights([2,1,2,1,5,1,2,1,2])}}),s.ToadsAndFrogs=i(w,{constructor:function L(a,b){w.call(this,a),this.board=b||L.board()},"static board":function(a,b){return a=isNaN(a)?3:+a,b=isNaN(b)?2:+b,"T".repeat(a)+"_".repeat(b)+"F".repeat(a)},name:"ToadsAndFrogs",players:["Toads","Frogs"],result:function(){return this.moves()?null:this.defeat()},moves:function(){var a=this.activePlayer(),b={},c=b[a]=[];return this.board.replace(a==this.players[0]?/TF?_/g:/_T?F/g,function(a,b){return c.push(b),a}),c.length>0?b:null},next:function(a){var b=this.activePlayer(),c=a[b],d=(b.charAt(0),this.board);if("T_"==d.substr(c,2))d=d.substring(0,c)+"_T"+d.substring(c+2);else if("_F"==d.substr(c,2))d=d.substring(0,c)+"F_"+d.substring(c+2);else if("TF_"==d.substr(c,3))d=d.substring(0,c)+"_FT"+d.substring(c+3);else{if("_TF"!=d.substr(c,3))throw new Error("Invalid move ",c," for board <",d,">.");d=d.substring(0,c)+"FT_"+d.substring(c+3)}return new this.constructor(this.opponent(),d)},"static __SERMAT__":{identifier:"ToadsAndFrogs",serializer:function(a){return[a.activePlayer(),a.board]}}}),s.Pig=i(w,{constructor:function(a,b,c,d){w.call(this,a),this.goal=isNaN(b)?100:+b,this.__scores__=c||k(this.players).zip([0,0]).toObject(),this.__rolls__=d||[]},name:"Pig",players:["One","Two"],moves:function(){if(!this.result()){var a=this.activePlayer(),b=this.__scores__[a]+k(this.__rolls__).sum();return e(a,this.__rolls__.length<1?["roll"]:b>=this.goal?["hold"]:["roll","hold"])}},result:function(){var a=this.__scores__[this.players[0]],b=this.__scores__[this.players[1]];if(a>=this.goal||b>=this.goal){var c={};return c[this.players[0]]=Math.min(this.goal,a)-Math.min(this.goal,b),c[this.players[1]]=-c[this.players[0]],c}},next:function(a,b){var c=this.activePlayer(),d=a&&a[c];if(h(!d,"No move for active player ",c," at ",this,"!"),"hold"===d){var e=f(this.__scores__);return e[c]+=k(this.__rolls__).sum(),new this.constructor(this.opponent(),this.goal,e,[])}if("roll"===d){var i=0|(b&&b.die);return i?i>1?new this.constructor(c,this.goal,this.__scores__,this.__rolls__.concat(i)):new this.constructor(this.opponent(),this.goal,this.__scores__,[]):new z({die:r.dice.D6},this,a)}g("Invalid moves ",JSON.stringify(a)," at ",this,"!")},resultBounds:function(){return[-this.goal,+this.goal]},"static __SERMAT__":{identifier:"Pig",serializer:function(a){return[a.activePlayer(),a.goal,a.__scores__,a.__rolls__]}}}),s.Mutropas=i(w,{name:"Mutropas",players:["Left","Right"],constructor:function(a){w.call(this,this.players),a=a||{},this.playedPieces=a.playedPieces||[],this.pieces=a.pieces||this.dealPieces(),this.__scores__=a.scores||e(this.players[0],0,this.players[1],0)},allPieces:j.range(9).toArray(),dealPieces:function(a){a=a||m.DEFAULT;var b=this.allPieces.length/2|0,c=a.split(b,this.allPieces),d=a.split(b,c[1]);return e(this.players[0],c[0],this.players[1],d[0])},moves:function(){return this.result()?null:f({},this.pieces)},moveResult:function(a,b){var c=k(this.allPieces).max(0)+1;return b>a?c/2>=b-a?1:-1:a>b?a-b>=c/2+1?1:-1:0},next:function(a){var b=this.players[0],c=this.players[1],d=a[b],f=a[c],g=this.pieces;h(g[b].indexOf(d)<0,"Invalid move ",JSON.stringify(d)," for player ",b,"! (moves= ",JSON.stringify(a),")"),h(g[c].indexOf(f)<0,"Invalid move ",JSON.stringify(f)," for player ",c,"! (moves= ",JSON.stringify(a),")");var i=this.moveResult(d,f);return new this.constructor({random:this.random,playedPieces:this.playedPieces.concat([d,f]),pieces:e(b,g[b].filter(function(a){return a!==d}),c,g[c].filter(function(a){return a!==f})),scores:e(b,this.__scores__[b]+i,c,this.__scores__[c]-i)})},scores:function(){return f({},this.__scores__)},result:function(){var a=this.players;if(this.playedPieces.length>=this.allPieces.length-1){var b=this.scores();return this.zerosumResult(b[a[0]]-b[a[1]],a[0])}return null},__possiblePieces__:function(a){var b=this.playedPieces,c=this.pieces[this.opponent(a)],d=k(this.allPieces).filter(function(a){return b.indexOf(a)<0&&c.indexOf(a)<0});return d.combinations(d.count()-1)},view:function(a){var b=this.opponent(a);return new z({pieces:new K(this.__possiblePieces__(b))},this)},"static __SERMAT__":{identifier:"Mutropas",serializer:function(a){return[{pieces:a.pieces,playedPieces:a.playedPieces,scores:a.__scores__}]}}}),s.Bahab=i(w,{name:"Bahab",players:["Uppercase","Lowercase"],constructor:function(a,b){w.call(this,a),this.board=b instanceof C?b:new C(5,5,b||this.initialBoard)},initialBoard:["BBABB","BBBBB",".....","bbbbb","bbabb"].join(""),__PLAYER_ENDGAME_RE__:{Uppercase:/^[.Bab]+$|^.{0,4}[a]/,Lowercase:/^[.bAB]+$|[A].{0,4}$/},result:function(){for(var a,b=this.board.string,c=0;2>c;++c)if(a=this.players[c],b.match(this.__PLAYER_ENDGAME_RE__[a]))return this.defeat(a);return this.moves()?null:this.defeat(this.activePlayer())},__PLAYER_PIECES_RE__:{Uppercase:/[AB]/g,Lowercase:/[ab]/g},moves:function(){var a=this.activePlayer(),b=this.__PLAYER_PIECES_RE__[a],c=this.board,d=[];return c.string.replace(b,function(a,e){var f,g=[e/5|0,e%5];switch(a){case"A":f=[[1,-1],[-1,0],[1,1]];break;case"B":f=[[1,-1],[1,1]];break;case"a":f=[[-1,-1],[1,0],[-1,1]];break;case"b":f=[[-1,-1],[-1,1]]}return k(f).forEachApply(function(e,f){var h=[g[0]+e,g[1]+f],i=c.square(h);!c.isValidCoord(h)||i.match(b)||"."!=i&&a.toLowerCase()!=i.toLowerCase()||d.push([g,h])}),a}),d.length>0?e(a,d):null},next:function(a){if(!a)throw new Error("Invalid moves "+a+"!");var b=this.activePlayer(),c=a[b];if(!Array.isArray(a[b]))throw new Error("Invalid moves "+JSON.stringify(a)+"!");return new this.constructor(this.opponent(),this.board.move(c[0],c[1]))},display:function(a){return h(!(a&&a instanceof I.BasicHTMLInterface),"Unsupported UI!"),this.__displayHTML__(a)},__displayHTML__:function(a){var b=this,c=this.moves(),d=this.activePlayer(),e=this.board,f={A:"ludorum-square-Uppercase-A",B:"ludorum-square-Uppercase-B",a:"ludorum-square-Lowercase-A",b:"ludorum-square-Lowercase-B",".":"ludorum-square-empty"},g=c?k(c[d]).groupAll(function(a){return JSON.stringify(a[0])}):{},h=a.selectedPiece&&g[JSON.stringify(a.selectedPiece)].map(function(a){return JSON.stringify(a[1])});return e.renderAsHTMLTable(a.document,a.container,function(c){c.className=f[c.square],c.innerHTML="."==c.square?" ":c.square,a.selectedPiece&&h&&h.indexOf(JSON.stringify(c.coord))>=0&&(c.className="ludorum-square-"+d+"-move",c.onclick=function(){var b=a.selectedPiece;a.selectedPiece=void 0,a.perform([b,c.coord],d)}),g.hasOwnProperty(JSON.stringify(c.coord))&&(c.onclick=function(){a.selectedPiece=c.coord,a.display(b)})}),a},"static __SERMAT__":{identifier:"Bahab",serializer:function(a){return[a.activePlayer(),a.board]}}}),u.RoundRobin=i(A,{constructor:function(a,b,c){A.call(this,a,b),this.matchCount=isNaN(c)?a.players.length:+c,this.__advance__=this.__matches__().chain(j.repeat(null)).__iter__()},__matches__:function(){var a=this.game,b=k(this.players);return b=b.product.apply(b,j.repeat(this.players,a.players.length-1).toArray()),b.filter(function(a){for(var b=1;bc;c++)if(a[b]===a[c])return!1;return!0}).product(j.range(this.matchCount)).map(function(b){return new y(a,b[0])})}}),u.Measurement=i(A,{constructor:function(a,b,c,d){A.call(this,a,Array.isArray(b)?b:[b]),this.opponents=Array.isArray(c)?c:[c],h(this.opponents.length2?c.product.apply(c,j.repeat(this.opponents,b-2).toArray()):c.map(function(a){return[a]}),k(this.players).product(j.range(b),c,j.range(this.matchCount)).map(function(b){var c=b[2].slice(0);return c.splice(b[1],0,b[0]),new y(a,c)})}}),u.Elimination=i(A,{constructor:function(a,b,c){A.call(this,a,b),this.matchCount=isNaN(c)?1:+c>>0},__bracket__:function(a){var b=this.game,c=this.matchCount,d=this.game.players.length;return a=a||this.players,a.length 0 ? option.sum / option.count : 0; - }).map(function (option) { - return option.move; + return [option.move, option.count > 0 ? option.sum / option.count : 0]; }); - return options; }, - /** This player's `stateEvaluation(game, player)` runs `simulationCount` - simulations and returns the average result. + /** This player's `stateEvaluation(game, player)` runs `simulationCount` simulations and returns + the average result. It is provided for compatibility, since `evaluatedMoves` does not call it. */ stateEvaluation: function stateEvaluation(game, player) { var resultSum = 0, @@ -2364,9 +2393,9 @@ var MonteCarloPlayer = players.MonteCarloPlayer = declare(HeuristicPlayer, { return simulationCount > 0 ? resultSum / simulationCount : 0; }, - /** A `simulation(game, player)` plays a random match from the given `game` - state and returns an object with the final state (`game`), its result - (`result`) and the number of plies simulated (`plies`). + /** A `simulation(game, player)` plays a random match from the given `game` state and returns an + object with the final state (`game`), its result (`result`) and the number of plies simulated + (`plies`). */ simulation: function simulation(game, player) { var mc = this, @@ -2393,11 +2422,15 @@ var MonteCarloPlayer = players.MonteCarloPlayer = declare(HeuristicPlayer, { raise("Simulation ended unexpectedly for player ", player, " in game ", game, "!"); }, - __serialize__: function __serialize__() { - return [this.constructor.name, { name: this.name, - simulationCount: this.simulationCount, timeCap: this.timeCap, - agent: this.agent - }]; + // ## Utilities ################################################################################ + + /** Serialization and materialization using Sermat. + */ + 'static __SERMAT__': { + identifier: 'MonteCarloPlayer', + serializer: function serialize_MonteCarloPlayer(obj) { + return this.serializeAsProperties(obj, ['name', 'simulationCount', 'timeCap', 'agent']); + } } }); // declare MonteCarloPlayer @@ -2433,9 +2466,9 @@ players.UCTPlayer = declare(MonteCarloPlayer, { })); }, - /** `selectMoves(moves, game, player)` return an array with the best evaluated moves. + /** `evaluatedMoves(game, player)` return a sequence with the evaluated moves. */ - selectMoves: function selectMoves(moves, game, player) { + evaluatedMoves: function evaluatedMoves(game, player) { var root = new GameTree(null, game), endTime = Date.now() + this.timeCap, node, simulationResult; @@ -2459,21 +2492,22 @@ players.UCTPlayer = declare(MonteCarloPlayer, { node.uct.rewards += (game.normalizedResult(simulationResult.result)[player] + 1) / 2; } } - moves = iterable(root.children).select(1).greater(function (n) { - return n.uct.visits; - }).map(function (n) { - return n.transition; + return iterable(root.children).select(1).map(function (n) { + return [n.transition, n.uct.visits]; }); - return moves; }, - __serialize__: function __serialize__() { - return [this.constructor.name, { name: this.name, - simulationCount: this.simulationCount, timeCap: this.timeCap, - explorationConstant: this.explorationConstant - }]; + // ## Utilities ################################################################################ + + /** Serialization and materialization using Sermat. + */ + 'static __SERMAT__': { + identifier: 'UCTPlayer', + serializer: function serialize_UCTPlayer(obj) { + return this.serializeAsProperties(obj, ['name', 'simulationCount', 'timeCap', 'explorationConstant']); + } } -}); // declare MonteCarloPlayer +}); // declare UCTPlayer /** # UserInterfacePlayer diff --git a/tests/lib/ludorum.js.map b/tests/lib/ludorum.js.map index c2ff034..bd674ef 100644 --- a/tests/lib/ludorum.js.map +++ b/tests/lib/ludorum.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/__prologue__.js","../src/Game.js","../src/Player.js","../src/Match.js","../src/Contingent.js","../src/Tournament.js","../src/utils/Checkerboard.js","../src/utils/CheckerboardFromString.js","../src/utils/CheckerboardFromPieces.js","../src/utils/Scanner.js","../src/utils/Cache.js","../src/utils/GameTree.js","../src/players/RandomPlayer.js","../src/players/TracePlayer.js","../src/players/HeuristicPlayer.js","../src/players/MaxNPlayer.js","../src/players/MiniMaxPlayer.js","../src/players/AlphaBetaPlayer.js","../src/players/MonteCarloPlayer.js","../src/players/UCTPlayer.js","../src/players/UserInterfacePlayer.js","../src/players/WebWorkerPlayer.js","../src/aleatories/Aleatory.js","../src/aleatories/UniformAleatory.js","../src/aleatories/dice.js","../src/games/Predefined.js","../src/games/Choose2Win.js","../src/games/ConnectionGame.js","../src/games/OddsAndEvens.js","../src/games/TicTacToe.js","../src/games/ToadsAndFrogs.js","../src/games/Pig.js","../src/games/Mutropas.js","../src/games/Bahab.js","../src/tournaments/RoundRobin.js","../src/tournaments/Measurement.js","../src/tournaments/Elimination.js","../src/__epilogue__.js"],"names":[],"mappings":"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","file":"ludorum.js","sourcesContent":["/** Package wrapper and layout.\n*/\n(function (global, init) { \"use strict\"; // Universal Module Definition.\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['creatartis-base', 'sermat'], init); // AMD module.\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = init(require('creatartis-base'), require('sermat')); // CommonJS module.\n\t} else { // Browser or web worker (probably).\n\t\tglobal.ludorum = init(global.base, global.Sermat); // Assumes base is loaded.\n\t}\n})(this, function __init__(base, Sermat) { \"use strict\";\n// Import synonyms. ////////////////////////////////////////////////////////////////////////////////\n\tvar unimplemented = base.objects.unimplemented,\n\t\tobj = base.obj,\n\t\tcopy = base.copy,\n\t\traise = base.raise,\n\t\traiseIf = base.raiseIf,\n\t\tdeclare = base.declare,\n\t\tIterable = base.Iterable,\n\t\titerable = base.iterable,\n\t\tFuture = base.Future,\n\t\tRandomness = base.Randomness,\n\t\tinitialize = base.initialize,\n\t\tStatistics = base.Statistics,\n\t\tEvents = base.Events;\n\n// Library layout. /////////////////////////////////////////////////////////////////////////////////\n\tvar exports = {\n\t\t\t__package__: 'ludorum',\n\t\t\t__name__: 'ludorum',\n\t\t\t__init__: __init__,\n\t\t\t__dependencies__: [base, Sermat],\n\t\t\t__SERMAT__: { include: [base] }\n\t\t},\n\t\t/** The library is organized in the following _namespaces_.\n\t\t*/\n\t\taleatories = exports.aleatories = {},\n\t\tgames = exports.games = {},\n\t\tplayers = exports.players = {},\n\t\ttournaments = exports.tournaments = {},\n\t\tutils = exports.utils = {}\n\t;","/** # Game\n\nThe class `ludorum.Game` is the base type for all games.\n*/\nvar Game = exports.Game = declare({\n\t/** Its constructor takes the active player/s. A player is active if and only if it can move. \n\tThe argument may be either a player's name (string) or an array of players' names. It is used to\n\tinitialize `Game.activePlayers`, an array with the active players' names.\n\t*/\n\tconstructor: function Game(activePlayers) {\n\t\tthis.activePlayers = !activePlayers ? [this.players[0]] : \n\t\t\t(!Array.isArray(activePlayers) ? [activePlayers] : activePlayers);\n\t},\n\n\t/** The game's `name` is used mainly for displaying purposes.\n\t*/\n\tname: '?',\n\t\n\t/** The game `players` are specified in an array of role names (strings), that the players can \n\tassume in a match of this game. For example: `\"Xs\"` and `\"Os\"` in TicTacToe, or `\"Whites\"` and \n\t`\"Blacks\"` in Chess.\n\t*/\n\tplayers: [],\n\n\t/** The moves of each active player are calculated by `moves()`. This method returns an object \n\twith every active player related to the moves each can make in this turn. For example: \n\t\n\t+ `{ Player1: ['Rock', 'Paper', 'Scissors'], Player2: ['Rock', 'Paper', 'Scissors'] }`\n\t\t\n\tIf the game has finished then a _falsy_ value must be returned (`null` is recommended).\n\t*/\n\tmoves: unimplemented(\"Game\", \"moves()\"),\n\n\t/** Once the players have chosen their moves, the method `next` is used to perform the given \n\tmoves. It returns a new game instance with the resulting state. The first `moves` argument \n\tshould be an object with a move for each active player. For example:\n\n\t+ `{ Player1: 'Rock', Player2: 'Paper' }`\n\t\n\tThere isn't a default implementation, so it must be overriden. It is strongly advised to check \n\tif the arguments are valid.\n\t*/\n\tnext: unimplemented(\"Game\", \"next(moves)\"),\n\n\t/** If the game is finished the result of the game is calculated with `result()`. It returns an \n\tobject with every player in the game related to a number. This number must be positive if the \n\tplayer wins, negative if the player loses or zero if the game is a tie. For example:\n\t\n\t+ `{ Player1: -1, Player2: +1 }`\n\t\n\tIf the game is not finished, this function must return a _falsy_ value (`null` is recommended).\n\t*/\n\tresult: unimplemented(\"Game\", \"result()\"),\n\n\t/** Some games may assign scores to the players in a finished game. This may differ from the\n\tresult, since the score sign doesn't have to indicate victory or defeat. For example:\n\t\n\t+ result: `{ Player1: -1, Player2: +1 }`\n\t+ scores: `{ Player1: 14, Player2: 15 }`\n\t\n\tThe method `scores()` returns the scores if such is the case. Also the score may be defined for\n\tunfinished games.\n\t\n\tBy default, it return the same that `result()` does.\n\t*/\n\tscores: function scores() {\n\t\treturn this.results();\n\t},\n\t\n\t/** In incomplete or imperfect information games players have different access to the game state\n\tdata. The method `view(player)` returns a modified version of this game, that shows only the\n\tinformation from the perspective of the given player. The other information is modelled as\n\taleatory variables.\n\t\n\tIn this way searches in the game tree can be performed without revealing to\tthe automatic player \n\tinformation it shouldn't have access to (a.k.a _cheating_).\n\t*/\n\tview: function view(player) {\n\t\treturn this;\n\t},\n\t\n\t// ## Player information #######################################################################\n\n\t/** Method `isActive(player...)` checks if the given players are all active.\n\t*/\n\tisActive: function isActive() {\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tif (this.activePlayers.indexOf(arguments[i]) < 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/** In most games there is only one active player per turn. The method `activePlayer()` returns \n\tthat active player's role if there is one and only one, else it raises an error.\n\t*/\n\tactivePlayer: function activePlayer() {\n\t\tvar len = this.activePlayers.length;\n\t\traiseIf(len < 1, 'There are no active players!');\n\t\traiseIf(len > 1, 'More than one player is active!');\n\t\treturn this.activePlayers[0];\n\t},\n\n\t/** All players in a game are assumed to be opponents. The method `opponents(players=activePlayers)` \n\treturns an array with the opponent roles of the given players, or of the active players by \n\tdefault. If not all players are opponents this method can be overriden.\n\t*/\n\topponents: function opponents(players) {\n\t\tplayers = players || this.activePlayers;\n\t\treturn this.players.filter(function (p) {\n\t\t\treturn players.indexOf(p) < 0;\n\t\t});\n\t},\n\n\t/** Since most games have only two players, the method `opponent(player=activePlayer)`\n\tconveniently returns the opponent of the given player, or the active player by default.\n\t*/\n\topponent: function opponent(player) {\n\t\tvar playerIndex = this.players.indexOf(player || this.activePlayer());\n\t\treturn this.players[(playerIndex + 1) % this.players.length];\n\t},\n\n\t// ## Game flow ################################################################################\n\t\n\t/** Since `next()` expects a moves object, the method `perform(move, player=activePlayer, ...)`\n\tpretends to simplify simpler game mechanics. It performs the given moves for the given players\n\t(activePlayer by default) and returns the next game state.\n\t*/\n\tperform: function perform() {\n\t\tvar moves = {}, player;\n\t\tfor (var i = 0; i < arguments.length; i += 2) {\n\t\t\tplayer = arguments[i + 1];\n\t\t\tif (typeof player === 'undefined') {\n\t\t\t\tplayer = this.activePlayer();\n\t\t\t}\n\t\t\tmoves[player] = arguments[i];\n\t\t}\n\t\treturn this.next(moves);\n\t},\n\n\t/** The method `moves()` returns the available moves for each player. Yet this is not the same\n\tas the `moves` objects that can be used with `next()` to obtain a next game state. Furthermore,\n\tif there are more than one active player per turn, the possible decisions can be build with all\n\tcombinations for all active players.\n\t\n\tThe method `possibleMoves(moves=this.moves())` calculates all possible `moves` objects based on \n\tthe result of `moves()`. For example, if `moves()` returns `{A:[1,2], B:[3,4]}`, then \n\t`possibleMoves()` would return `[{A:1, B:3}, {A:1, B:4}, {A:2, B:3}, {A:2, B:4}]`.\n\t*/\n\tpossibleMoves: function possibleMoves(moves) {\n\t\tmoves = arguments.length < 1 ? this.moves() : moves;\n\t\tif (!moves || typeof moves !== 'object') {\n\t\t\treturn [];\n\t\t}\n\t\tvar activePlayers = Object.keys(moves);\n\t\tif (activePlayers.length === 1) { // Most common case.\n\t\t\tvar activePlayer = activePlayers[0];\n\t\t\treturn moves[activePlayer].map(function (move) {\n\t\t\t\treturn obj(activePlayer, move);\n\t\t\t});\n\t\t} else { // Simultaneous games.\n\t\t\treturn Iterable.product.apply(Iterable, \n\t\t\t\titerable(moves).mapApply(function (player, moves) {\n\t\t\t\t\treturn moves.map(function (move) {\n\t\t\t\t\t\treturn [player, move];\n\t\t\t\t\t});\n\t\t\t\t}).toArray()\n\t\t\t).map(function (playerMoves) {\n\t\t\t\treturn iterable(playerMoves).toObject();\n\t\t\t}).toArray();\n\t\t}\n\t},\n\t\n\t// ## Result functions #########################################################################\n\n\t/** The maximum and minimum results may be useful and even required by some game search \n\talgorithm. To expose these values, `resultBounds()` returns an array with first the minimum and\n\tthen the maximum. Most game have one type of victory (+1) and one type of defeat (-1). That's \n\twhy `resultBounds()` returns [-1,+1] by default. Yet some games can define different bounds by \n\toverriding it.\n\t*/\n\tresultBounds: function resultBounds() {\n\t\treturn [-1,+1];\n\t},\n\t\n\t/** The `normalizedResult(result=this.result())` is the `result()` expressed so the minimum \n\tdefeat is equal to -1 and the maximum victory is equal to +1.\n\t*/\n\tnormalizedResult: function normalizedResult(result) {\n\t\tresult = result || this.result();\n\t\tif (result) {\n\t\t\tvar bounds = this.resultBounds();\n\t\t\tresult = base.copy(result);\n\t\t\tfor (var player in result) {\n\t\t\t\tresult[player] = (result[player] - bounds[0]) / (bounds[1] - bounds[0]) * 2 - 1;\n\t\t\t}\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t},\n\t\n\t/** Most games have victory and defeat results that cancel each other. It is said that all the\n\tvictors wins the defeated player loses. Those games are called _zerosum games_. The method \n\t`zerosumResult(score, players=activePlayers)` builds a game result object for a zerosum game.\n\tThe given score is split between the given players (the active players by default), and (-score)\n\tis split between their opponents.\n\t*/\n\tzerosumResult: function zerosumResult(score, players) {\n\t\tplayers = !players ? this.activePlayers : (!Array.isArray(players) ? [players] : players);\n\t\tscore = (+score) / (players.length || 1);\n\t\tvar result = ({}), player,\n\t\t\topponentScore = -score / (this.players.length - players.length || 1);\n\t\tfor (var i = 0; i < this.players.length; i++) {\n\t\t\tplayer = this.players[i];\n\t\t\tresult[player] = players.indexOf(player) < 0 ? opponentScore : score;\n\t\t}\n\t\treturn result;\n\t},\n\n\t/** There are two shortcuts for `zerosumResult()`. First `victory(players=activePlayers, score=1)`\n\treturns the zero-sum game result with the given players (or the active players by default) as\n\twinners, and their opponents as losers.\n\t*/\n\tvictory: function victory(players, score) {\n\t\treturn this.zerosumResult(score || 1, players);\n\t},\n\n\t/** Second `defeat(players=activePlayers, score=-1)` returns the zero-sum game result with the\n\tgiven players (or the active players by default) as losers, and their opponents as winners.\n\t*/\n\tdefeat: function defeat(players, score) {\n\t\treturn this.zerosumResult(score || -1, players);\n\t},\n\n\t/** Finally `draw(players=this.players, score=0)` returns the game result of a tied game with \n\tthe given players (or the active players by default) all with the same score (zero by default).\n\tA tied game must always have the same result for all players.\n\t*/\n\tdraw: function draw(players, score) {\n\t\tscore = +(score || 0);\n\t\tplayers = players || this.players;\n\t\tvar result = ({});\n\t\tfor (var player in players) {\n\t\t\tresult[players[player]] = score;\n\t\t}\n\t\treturn result;\n\t},\n\n\t// ## Conversions & presentations ##############################################################\n\n\t/** Some algorithms require an `identifier()` for each game state, in order to store them in \n\tcaches or hashes. This method calculates a string that uniquely identifies this game state,\n\tbased on the game's serialization.\n\t*/\n\tidentifier: unimplemented(\"Game\", \"identifier\"),\n\n\t/** Based on the game's serialization, `clone()` creates a copy of this game state.\n\t*/\n\tclone: function clone() {\n\t\treturn Sermat.sermat(this);\n\t},\n\n\t/** The default string representation of a game is equal to the result of `toJSON`.\n\t*/\n\ttoString: function toString() {\n\t\treturn Sermat.ser(this);\n\t},\n\t\t\n\t/** ## Cached games ############################################################################\n\n\tA `cached(game)` has modified `moves()` and `result()` methods that cache the calls of the base\n\tgame. The `next()` method is not cached because it may lead to memory leaks or overload.\n\t*/\n\t'static cached': function cached(game) {\n\t\tvar baseMoves = game.prototype.moves,\n\t\t\tbaseResult = game.prototype.result;\n\t\treturn declare(game, {\n\t\t\t/** The first time `moves()` is called, it is delegated to the base game's `moves()`,\n\t\t\tand keeps the value for future calls.\n\t\t\t*/\n\t\t\tmoves: function moves() {\n\t\t\t\tvar result = baseMoves.call(this);\n\t\t\t\tthis.moves = function cachedMoves() { // Replace moves() method with cached version.\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\t\n\t\t\t/** The first time `result()` is called, it is delegated to the base game's `result()`,\n\t\t\tand keeps the value for future calls.\n\t\t\t*/\n\t\t\tresult: function result() {\n\t\t\t\tvar r = game.result.call(this);\n\t\t\t\tthis.result = function cachedResult() { // Replace result() method with cached version.\n\t\t\t\t\treturn r;\n\t\t\t\t};\n\t\t\t\treturn r;\n\t\t\t}\n\t\t});\n\t}, // static cached\n\n\t\n\t/** ## Serialized simultaneous games. ##########################################################\n\t\n\t`serialized(game)` builds a serialized version of a simultaneous game, i.e. one in which two or\n\tmore players may be active in the same turn. It converts a simultaneous game to an alternated\n\tturn based game. This may be useful for using algorithms like MiniMax to build AIs for\n\tsimultaneous games.\n\t*/\n\t'static serialized': function serialized(game) {\n\t\tvar super_moves = game.prototype.moves,\n\t\t\tsuper_next = game.prototype.next;\n\t\treturn declare(game, {\n\t\t\t/** The `moves()` of a serialized game returns the moves of the player deemed as the\n\t\t\tactive player, if there are any moves.\n\t\t\t*/\n\t\t\tmoves: function moves() {\n\t\t\t\tvar fixedMoves = this.__fixedMoves__ || (this.__fixedMoves__ = {}),\n\t\t\t\t\tallMoves = super_moves.call(this),\n\t\t\t\t\tactivePlayer;\n\t\t\t\tfor (var i = 0; i < this.activePlayers.length; i++) {\n\t\t\t\t\tif (fixedMoves.hasOwnProperty(this.activePlayers[i])) {\n\t\t\t\t\t\tactivePlayer = this.activePlayers[i];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn activePlayer && allMoves ? obj(activePlayer, allMoves[activePlayer]) : null;\n\t\t\t},\n\t\t\n\t\t\t/** The `next(moves)` of a serialized game advances the actual game if with the given\n\t\t\tmove all active players in the real game state have moved. Else the next player that has\n\t\t\tto move becomes active.\n\t\t\t*/\n\t\t\tnext: function next(moves) {\n\t\t\t\tvar nextFixedMoves = copy({}, this.fixedMoves || {}, moves),\n\t\t\t\t\tallMoved = iterable(this.players).all(function (p) {\n\t\t\t\t\t\t\treturn nextFixedMoves.hasOwnProperty(p);\n\t\t\t\t\t\t}),\n\t\t\t\t\tresult;\n\t\t\t\tif (allMoved) {\n\t\t\t\t\tresult = super_next.call(this, nextFixedMoves);\n\t\t\t\t\tresult.fixedMoves = {};\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.clone();\n\t\t\t\t\tresult.fixedMoves = nextFixedMoves;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t} // static serialized\n\t\n}); // declare Game.\n","/** # Player\n\nPlayer is the base type for all playing agents. Basically, playing a game means\nchoosing a move from all available ones, each time the game enables the player \nto do so.\n*/\nvar Player = exports.Player = declare({\n\t/** The default constructor takes only its `name` from the given `params`.\n\tThis is an abstract class that is meant to be extended.\n\t*/\n\tconstructor: (function () {\n\t\tvar __PlayerCount__ = 0; // Used by the Player's default naming.\n\t\treturn function Player(params) {\n\t\t\tinitialize(this, params)\n\t\t\t\t.string('name', { defaultValue: 'Player' + (__PlayerCount__++), coerce: true });\n\t\t};\n\t})(),\n\n\t/** A player is asked to choose a move by calling \n\t`Player.decision(game, role)`. The result is the selected move if it can be \n\tobtained synchronously, else a future is returned.\n\t*/\n\tdecision: function decision(game, role) {\n\t\treturn this.movesFor(game, role)[0]; // Indeed not a very thoughtful base implementation. \n\t},\n\n\t/** To help implement the decision, `Player.movesFor(game, player)` gets\n\tthe moves in the game for the player. It also checks if there are any moves,\n\tand if it not so an error is risen.\n\t*/\n\tmovesFor: function movesFor(game, role) {\n\t\tvar moves = game.moves();\n\t\traiseIf(!moves || !moves[role] || moves[role].length < 1, \n\t\t\t\"Player \", role, \" has no moves for game \", game, \".\");\n\t\treturn moves[role];\n\t},\n\t\n\t/** Before starting a [match](Match.js.html), all players are asked to join\n\tby calling `Player.participate(match, role)`. This allows the player to\n\tprepare properly. If this implies building another instance of the player \n\tobject, it must be returned in order to participate in the match.\n\t*/\n\tparticipate: function participate(match, role) {\n\t\treturn this;\n\t},\n\t\n\t// ## Conversions & presentations #########################################\n\n\t/** Players can also be serialized, pretty much in the same way \n\t[games](Game.html) are. `Player.__serialize__()` returns an array, where the \n\tfirst element should be the name of the game, and the rest the arguments to \n\tcall the player's constructor in order to rebuild this player's state.\n\t*/\n\t__serialize__: function __serialize__() {\n\t\treturn [this.constructor.name, {name: this.name}];\n\t},\n\t\n\t/** The string representation of the player is derived straight from its\n\tserialization.\n\t*/\n\ttoString: function toString() {\n\t\tvar args = this.__serialize__();\n\t\treturn args.shift() +'('+ args.map(JSON.stringify).join(',') +')';\n\t}\n}); // declare Player.\n","/** # Match\n\nA match is a controller for a game, managing player decisions, handling the flow of the turns \nbetween the players by following the game's logic.\n*/\nvar Match = exports.Match = declare({\n\t/** `Match` objects are build with the [game's](Game.html) starting state and the players that \n\tparticipate. The players argument must be either an array of [`Player`](Player.html) objects or \n\tan object with a member for each of the game's players with a Player object as value.\n\t*/\n\tconstructor: function Match(game, players) {\n\t\tthis.game = game;\n\t\tthis.players = Array.isArray(players) ? iterable(game.players).zip(players).toObject() : players;\n\t\t/** The match records the sequence of game state in `Match.history`.\n\t\t*/\n\t\tthis.history = [game];\n\t\tthis.events = new Events({ \n\t\t\tevents: ['begin', 'move', 'next', 'end', 'quit']\n\t\t});\n\t\tfor (var p in this.players) { // Participate the players.\n\t\t\tthis.players[p] = this.players[p].participate(this, p) || this.players[p];\n\t\t}\n\t},\n\n\t/** Each step in the match's history is called a ply. `Match.ply()` indicates the current ply \n\tnumber.\n\t*/\n\tply: function ply() {\n\t\treturn this.history.length - 1;\n\t},\n\t\n\t/** Each ply has a game state. `Match.state(ply=last)` retrieves the game state for the given \n\tply, or the last one by default.\n\t*/\n\tstate: function state(ply) {\n\t\tply = isNaN(ply) ? this.ply() : +ply < 0 ? this.ply() + (+ply) : +ply;\n\t\treturn this.history[ply | 0];\n\t},\n\n\t/** If the last game state is finished, then the whole match is finished. If so, \n\t`Match.result()` returns the match result, which is the result of the last game state.\n\t*/\n\tresult: function result() {\n\t\treturn this.state().result();\n\t},\n\n\t/** If the last game state is not finished, then the match continues. To move the play on, \n\t`Match.decisions(game=state())` asks the active players in the game to choose their moves. \n\tReturns a future that is resolved when all players have decided.\n\t*/\n\tdecisions: function decisions(game) {\n\t\tgame = game || this.state();\n\t\tvar match = this,\n\t\t\tplayers = this.players,\n\t\t\tactivePlayers = game.activePlayers;\n\t\treturn Future.all(activePlayers.map(function (p) {\n\t\t\treturn players[p].decision(game.view(p), p);\n\t\t})).then(function (decisions) {\n\t\t\tvar moves = iterable(activePlayers).zip(decisions).toObject();\n\t\t\tmatch.onMove(game, moves);\n\t\t\treturn moves;\n\t\t});\n\t},\n\n\t/** `Match.run(plys=Infinity)` runs the match the given number of plys, or until the game \n\tfinishes. The result is a future that gets resolved when the game ends.\n\t*/\n\trun: function run(plys) {\n\t\tplys = isNaN(plys) ? Infinity : +plys;\n\t\tif (plys < 1) { // If the run must stop...\n\t\t\treturn Future.when(this);\n\t\t}\n\t\tvar ply = this.ply(), game = this.state(), results, next;\n\t\tif (ply < 1) {\n\t\t\tthis.onBegin(game);\n\t\t}\n\t\tgame = this.__advanceContingents__(game); // Remove all non-determinism.\n\t\tresults = game.result();\n\t\tif (results) { // If the match has finished ...\n\t\t\tthis.onEnd(game, results);\n\t\t\treturn Future.when(this);\n\t\t} else { // Else the run must continue ...\n\t\t\tvar match = this;\n\t\t\treturn this.decisions(game).then(function (moves) {\n\t\t\t\tif (match.__advance__(game, moves)) {\n\t\t\t\t\treturn match.run(plys - 1);\n\t\t\t\t} else {\n\t\t\t\t\treturn match;\n\t\t\t\t}\t\t\t\t\n\t\t\t});\n\t\t}\n\t},\n\t\n\t__advanceContingents__: function __advanceContingents__(game, moves) {\n\t\tfor (var next; game.isContingent; game = next) {\n\t\t\tnext = game.randomNext();\n\t\t\tthis.history.push(next);\n\t\t\tthis.onNext(game, next);\n\t\t}\n\t\treturn game;\n\t},\n\t\n\t__advance__: function __advance__(game, moves) {\n\t\tvar match = this,\n\t\t\tquitters = game.activePlayers.filter(function (p) {\n\t\t\t\treturn moves[p].__command__ === 'quit';\n\t\t\t});\n\t\tif (quitters.length > 0) {\n\t\t\tmatch.onQuit(game, quitters[0]);\n\t\t\treturn false;\n\t\t}\n\t\tvar next = game.next(moves); // Match must go on.\n\t\tthis.history.push(next);\n\t\tthis.onNext(game, next);\n\t\treturn true;\n\t},\n\t\n\t/** ## Commands ################################################################################\n\t\n\tCommands are pseudo-moves, which can be returned by the players instead of valid moves for the \n\tgame being played. Their intent is to control the match itself.\n\t\n\tThe available commands are:\n\t*/\n\t\n\t/** + `quit`: A quit command means the player that issued it is leaving the match. The match is \n\tthen aborted.\n\t*/\n\t\"static COMMAND_QUIT\": { __command__: 'quit' },\n\t\n\t/** ## Events ##################################################################################\n\t\n\tMatches provide game events that players and spectators can be registered to. `Match.events` is \n\tthe event handler. Emitted events are:\n\t*/\n\t\n\t/** + The `begin` event fired by `Match.onBegin(game)` when the match begins. The callbacks \n\tshould have the signature `function (game, match)`.\n\t*/\n\tonBegin: function onBegin(game) {\n\t\tthis.events.emit('begin', game, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match begins with ', iterable(this.players).map(function (attr) {\n\t\t\t\treturn attr[1] +' as '+ attr[0];\n\t\t\t}).join(', '), '; for ', game, '.');\n\t\t}\n\t},\n\t\n\t/** + The `move` event fired by `Match.onMove(game, moves)` every time the active players make \n\tmoves. The callbacks should have the signature `function (game, moves, match)`.\n\t*/\n\tonMove: function onMove(game, moves) {\n\t\tthis.events.emit('move', game, moves, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Players move: ', JSON.stringify(moves), ' in ', game);\n\t\t}\n\t},\n\t\n\t/** + The `next` event fired by `Match.onNext(game, next)` signals when the match advances to \n\tthe next game state. This may be due to moves or aleatory instantiation. The callbacks should \n\thave the signature `function (gameBefore, gameAfter, match)`.\n\t*/\n\tonNext: function onNext(game, next) {\n\t\tthis.events.emit('next', game, next, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match advances from ', game, ' to ', next);\n\t\t}\n\t},\n\t\n\t/** + The `end` event triggered by `Match.onEnd(game, results)` notifies when the match ends. \n\tThe callbacks should have the signature `function (game, result, match)`.\n\t*/\n\tonEnd: function onEnd(game, results) {\n\t\tthis.events.emit('end', game, results, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match for ', game, 'ends with ', JSON.stringify(results));\n\t\t}\n\t},\n\t\n\t/** + The `quit` event triggered by `Match.onQuit(game, player)` is emitted when the match is \n\taborted due to the given player leaving it. The callbacks should have the signature \n\t`function (game, quitter, match)`.\n\t*/\n\tonQuit: function onQuit(game, player) {\n\t\tthis.events.emit('quit', game, player, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match for ', game, ' aborted because player '+ player +' quitted.');\n\t\t}\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\ttoString: function toString() {\n\t\treturn 'Match('+ this.game +', '+ JSON.stringify(this.players) +')';\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Match',\n\t\tserializer: function serialize_Match(obj) {\n\t\t\treturn [obj.game, obj.players, obj.history];\n\t\t},\n\t\tmaterializer: function materialize_Match(obj, args) {\n\t\t\tif (args) {\n\t\t\t\tvar match = new Match(args[0], args[1]);\n\t\t\t\tmatch.history = args[2];\n\t\t\t\treturn match;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n}); // declare Match.\n","/** # Contingent\r\n\r\nContingent states are game states that depend on other factors that the players choices. They are\r\nused to represent randomness in non-deterministic games. The random variables (called `haps`) can\r\nbe dice, card decks, roulettes, etc.\r\n*/\r\nvar Contingent = exports.Contingent = declare({\r\n\t/** Flag to distinguish contingent states from normal game states.\r\n\t*/\r\n\tisContingent: true,\r\n\t\r\n\t/** The default implementation takes a set of `haps`, a game `state` and a set of `moves`. See\r\n\tthe `next` method for further details.\r\n\t*/\r\n\tconstructor: function Contingent(haps, state, moves) {\r\n\t\tif (haps) {\r\n\t\t\tthis.__haps__ = haps;\r\n\t\t}\r\n\t\tif (state) {\r\n\t\t\tthis.__state__ = state;\r\n\t\t}\r\n\t\tif (moves) {\r\n\t\t\tthis.__moves__ = moves;\r\n\t\t}\r\n\t},\r\n\t\r\n\t/** A contingent state's `haps` are the equivalent of `moves` in normal game states. The method \r\n\treturns an object with the random variables on which this node depends, e.g.: \r\n\t`{ die: aleatories.dice.D6 }`.\r\n\t*/\r\n\thaps: function haps() {\r\n\t\treturn this.__haps__;\r\n\t},\r\n\t\r\n\t/** Contingent game states' `next` states depend on the `haps` provided, e.g. `{die1: 4, die2: 2}`.\r\n\tIf values for the `haps` are not provided, they are resolved randonmly (using `randomHaps()`).\r\n\t\r\n\tBy default this method can have two possible behaviours. If the contingent state was created \r\n\twith `moves`, the previous `state`'s `next` method is called with these `moves` and the `haps`.\r\n\tElse, it is assumed that the game state constructor will deal with the haps. So it is called\r\n\twith the original arguments of the state and the `haps`.\r\n\t*/\r\n\tnext: function next(haps) {\r\n\t\tvar state = this.__state__;\r\n\t\tif (this.__moves__) {\r\n\t\t\treturn state.next(this.__moves__, haps || this.randomHaps());\r\n\t\t} else {\r\n\t\t\tvar sermatRecord = Sermat.record(state.constructor),\r\n\t\t\t\targs = sermatRecord.serializer(state)[0];\r\n\t\t\treturn sermatRecord.materializer(null, [copy(haps, args)]);\r\n\t\t}\r\n\t},\r\n\t\r\n\t/** Method `randomHaps` calculates a random set of haps.\r\n\t*/\r\n\trandomHaps: function randomHaps(random) {\r\n\t\treturn iterable(this.haps()).mapApply(function (n, h) {\r\n\t\t\treturn [n, h.value(random)];\r\n\t\t}).toObject();\r\n\t},\r\n\t\r\n\t/** A `randomNext` picks one of the next states at random.\r\n\t*/\r\n\trandomNext: function randomNext(random) {\r\n\t\treturn this.next(this.randomHaps(random));\r\n\t},\r\n\t\r\n\t/** The method `possibleHaps` is analogous to `Game.possibleMoves`. It calculates all possible \r\n\tcombinations of haps.\r\n\t*/\r\n\tpossibleHaps: function possibleHaps() {\r\n\t\treturn Iterable.product.apply(Iterable,\r\n\t\t\titerable(this.haps()).mapApply(function (n, hap) {\r\n\t\t\t\treturn hap.distribution().mapApply(function (v, p) {\r\n\t\t\t\t\treturn [n, v, p];\r\n\t\t\t\t});\r\n\t\t\t}).toArray()\r\n\t\t).map(function (haps) {\r\n\t\t\tvar prob = 1;\r\n\t\t\treturn [iterable(haps).mapApply(function (n, v, p) {\r\n\t\t\t\tprob *= p;\r\n\t\t\t\treturn [n, v];\r\n\t\t\t}).toObject(), prob];\r\n\t\t}).toArray();\r\n\t},\r\n\t\r\n\t// ## Utilities ################################################################################\r\n\t\r\n\t'static __SERMAT__': {\r\n\t\tidentifier: 'Contingent',\r\n\t\tserializer: function serialize_Contingent(obj) {\r\n\t\t\treturn [obj.__haps__ || null, obj.__state__ || null, obj.__moves__ || null];\r\n\t\t}\r\n\t}\r\n});","/** # Tournament\n\nA tournament is a set of matches played between many players. The whole contest \nranks the participants according to the result of the matches. This is an \nabstract base class for many different types of contests.\n*/\nvar Tournament = exports.Tournament = declare({\n\tconstructor: function Tournament(game, players) {\n\t\t/** The tournament always has one [`game`](Game.html) state from which \n\t\tall matches start.\n\t\t*/\n\t\tthis.game = game;\n\t\t/** All the [`players`](Player.html) involved in the tournament must be\n\t\tprovided to the constructor in an array.\n\t\t*/\n\t\tthis.players = Array.isArray(players) ? players : iterables.iterable(players).toArray();\n\t\tthis.statistics = new Statistics();\n\t\tthis.events = new Events({ \n\t\t\tevents: ['begin', 'beforeMatch', 'afterMatch', 'end']\n\t\t});\n\t},\n\n\t/** The next match to be played is determined by `__advance__`, which \n\treturns a match instance, or null if the tournament has finished. It is not \n\timplemented in this base class. \n\t*/\n\t__advance__: unimplemented(\"Tournament\", \"__advance__\"),\n\t\n\t/** `Tournament.run()` plays all the tournament's matches. Since running a \n\tmatch is asynchronous, running a tournament is too. Hence the result is \n\talways a future, which will be resolved when all matches have been played.\n\t*/\n\trun: function run() {\n\t\tthis.onBegin();\n\t\tvar tournament = this;\n\t\treturn Future.doWhile(function () {\n\t\t\treturn Future.then(tournament.__advance__(), function (match) {\n\t\t\t\tif (match) {\n\t\t\t\t\ttournament.beforeMatch(match);\n\t\t\t\t\treturn tournament.__runMatch__(match).then(function (match) {\n\t\t\t\t\t\ttournament.account(match);\n\t\t\t\t\t\ttournament.afterMatch(match);\n\t\t\t\t\t\treturn match;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t});\n\t\t}).then(this.onEnd.bind(this));\n\t},\n\t\n\t/** The method `__runMatch__` runs a match. It is present so it can be \n\toverridden, to implement some specific behaviour of the contest.\n\t*/\n\t__runMatch__: function __runMatch__(match) {\n\t\treturn match.run();\n\t},\n\t\n\t/** Tournaments gather information from the played matches using their\n\t`statistics` property (instance of `creatartis-base.Statistics`). The method \n\t`Tournament.account(match)` is called to accounts the results of each \n\tfinished match for the players' score.\n\t\n\tThe match results are gathered in the `results` key. The keys `victories`,\n\t`defeats` and `draws` count each result type. The length of each game is\n\trecorded under `length`. The move count at each ply is aggregated under\n\t`width`. All these numbers are open by game, role, player.\n\t*/\n\taccount: function account(match) {\n\t\tvar game = this.game,\n\t\t\tresults = match.result(), \n\t\t\tisDraw = false,\n\t\t\tstats = this.statistics;\n\t\traiseIf(!results, \"Match doesn't have results. Has it finished?\");\n\t\titerable(match.players).forEach(function (p) { // Player statistics.\n\t\t\tvar role = p[0],\n\t\t\t\tplayer = p[1],\n\t\t\t\tplayerResult = results[p[0]];\n\t\t\tstats.add({key:'results', game:game.name, role:role, player:player.name}, \n\t\t\t\tplayerResult);\n\t\t\tstats.add({key:(playerResult > 0 ? 'victories' : playerResult < 0 ? 'defeats' : 'draws'),\n\t\t\t\tgame:game.name, role:role, player:player.name}, playerResult);\n\t\t\tstats.add({key:'length', game:game.name, role:role, player:player.name}, \n\t\t\t\tmatch.ply()); //FIXME This may not be accurate if the game has random variables.\n\t\t\tmatch.history.forEach(function (entry) {\n\t\t\t\tif (typeof entry.moves === 'function') {\n\t\t\t\t\tvar moves = entry.moves();\t\n\t\t\t\t\tif (moves && moves.hasOwnProperty(role) && moves[role].length > 0) {\n\t\t\t\t\t\tstats.add({key:'width', game:game.name, role:role, player:player.name}, \n\t\t\t\t\t\t\tmoves[role].length);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** ## Events #############################################################\n\t\n\tTournaments provide events to enable further analysis and control over it. \n\t`Tournament.events` is the event handler. The emitted events are:\n\t*/\n\t\n\t/** + The `begin` event fired by `Tournament.onBegin()` when the whole \n\tcontest begins. The callbacks should have the signature \n\t`function (tournament)`.\n\t*/\t\n\tonBegin: function onBegin() {\n\t\tthis.events.emit('begin', this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Tournament begins for game ', game.name, '.');\n\t\t}\n\t},\n\t\n\t/** + The `beforeMatch` event triggered by `Tournament.beforeMatch(match)` \n\tjust before starting a match. The callbacks should have the signature \n\t`function (match, tournament)`.\n\t*/\n\tbeforeMatch: function beforeMatch(match) {\n\t\tthis.events.emit('beforeMatch', match, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.debug('Beginning match with ', JSON.stringify(match.players), '.');\n\t\t}\n\t},\n\t\n\t/** + The `afterMatch` event triggered by `Tournament.afterMatch(match)` \n\tjust after a match ends. The callbacks should have the signature \n\t`function (match, tournament)`.\n\t*/\n\tafterMatch: function afterMatch(match) {\n\t\tthis.events.emit('afterMatch', match, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.debug('Finishing match with ', JSON.stringify(match.players), '.');\n\t\t}\n\t},\n\t\n\t/** + The `end` event triggered by `Tournament.onEnd()` when the whole \n\tcontest is completed. The callbacks should have the signature \n\t`function (statistics, tournament)`.\n\t*/\n\tonEnd: function onEnd() {\n\t\tthis.events.emit('end', this.statistics, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Tournament ends for game ', game.name, ':\\n', this.statistics, '\\n');\n\t\t}\n\t}\n}); // declare Tournament\n","/** # Checkerboard\n\nBase class for checkerboards representations based on several different data structures.\n*/\nvar Checkerboard = utils.Checkerboard = declare({\n\t/** The base constructor only sets the board dimensions: `height` and `width`.\n\t*/\n\tconstructor: function Checkerboard(height, width) {\n\t\tif (!isNaN(height)) {\n\t\t\tthis.height = height|0;\n\t\t}\n\t\tif (!isNaN(width)) {\n\t\t\tthis.width = width|0;\n\t\t}\n\t},\n\t\n\t/** The value for empty squares is `emptySquare`. This will be used in functions walking and \n\ttraversing the board. \n\t*/\n\temptySquare: null,\n\t\n\t// ## Board information ########################################################################\n\t\n\t/** All coordinates are represented by `[row, column]` arrays. To check if a coordinate is \n\tinside the board, use `isValidCoord(coord)`.\n\t*/\n\tisValidCoord: function isValidCoord(coord) {\n\t\treturn Array.isArray(coord) && !isNaN(coord[0]) && !isNaN(coord[1])\t&& \n\t\t\tcoord[0] >= 0 && coord[0] < this.height && \n\t\t\tcoord[1] >= 0 && coord[1] < this.width;\n\t},\n\t\n\t/** Method `coordinates()` returns the sequence of the board's valid positions; first by row \n\tthen by column.\n\t*/\n\tcoordinates: function coordinates() {\n\t\treturn Iterable.range(this.height).product(Iterable.range(this.width));\n\t},\n\t\n\t/** Method `square(coord, outside)` should get the contents at a given coordinate. If the \n\tcoordinate is off the board, `outside` must be returned. This method is abstract so it must be \n\toverriden in subclasses.\n\t*/\n\tsquare: unimplemented('utils.Checkerboard', 'square'),\n\t\n\t/** A square is assumed to be empty when its value is equal to `emptySquare`.\n\t*/\n\tisEmptySquare: function isEmptySquare(coord) {\n\t\treturn this.square(coord) === this.emptySquare;\n\t},\n\t\n\t// ### Lines ###################################################################################\n\t\n\t/** Many games must deal with line configurations of pieces. The following methods help with \n\tthis kind of logic. Each line is a sequence of coordinates in the board.\n\t\n\t+ `horizontals()`: All the horizontal lines (rows).\n\t*/\n\thorizontals: function horizontals() {\n\t\tvar width = this.width;\n\t\treturn Iterable.range(this.height).map(function (row) {\n\t\t\treturn Iterable.range(width).map(function (column) {\n\t\t\t\treturn [row, column];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** \n\t+ `verticals()`: All the vertical lines (columns).\n\t*/\n\tverticals: function verticals() {\n\t\tvar height = this.height;\n\t\treturn Iterable.range(this.width).map(function (column) {\n\t\t\treturn Iterable.range(height).map(function (row) {\n\t\t\t\treturn [row, column];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** \n\t+ `orthogonals()`: All the horizontal (rows) and vertical lines (columns) in the board.\n\t*/\n\torthogonals: function orthogonals() {\n\t\treturn this.horizontals().chain(this.verticals());\n\t},\n\t\n\t/**\n\t+ `positiveDiagonals()`: All the positive diagonals lines (those where row = k + column).\n\t*/\n\tpositiveDiagonals: function positiveDiagonals() {\n\t\tvar width = this.width, \n\t\t\theight = this.height, \n\t\t\tcount = height + width - 1;\n\t\treturn Iterable.range(count).map(function (i) {\n\t\t\tvar row = Math.max(0, height - i - 1),\n\t\t\t\tcolumn = Math.max(0, i - height + 1);\n\t\t\treturn Iterable.range(Math.min(i + 1, count - i)).map(function (j) {\n\t\t\t\treturn [row + j, column + j];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** \n\t+ `negativeDiagonals()`: All the negative diagonals lines (those where row = k - column).\n\t*/\n\tnegativeDiagonals: function negativeDiagonals() {\n\t\tvar width = this.width, \n\t\t\theight = this.height, \n\t\t\tcount = height + width - 1;\n\t\treturn Iterable.range(count).map(function (i) {\n\t\t\tvar row = Math.min(i, height - 1),\n\t\t\t\tcolumn = Math.max(0, i - height + 1);\n\t\t\treturn Iterable.range(Math.min(i + 1, count - i)).map(function (j) {\n\t\t\t\treturn [row - j, column + j];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/**\n\t+ `diagonals()`: All the diagonal lines in the board.\n\t*/\n\tdiagonals: function diagonals() {\n\t\treturn this.positiveDiagonals().chain(this.negativeDiagonals());\n\t},\n\t\n\t/**\n\t+ `lines()`: All the horizontal, vertical and diagonal lines in the board.\n\t*/\n\tlines: function lines() {\n\t\treturn this.orthogonals().chain(this.diagonals());\n\t},\n\t\n\t/** The previous methods return the whole lines. Some times the game logic demands checking \n\tlines of a certain length. These are sublines, and can be calculated by \n\t`sublines(lines, length)`. It obviously filters lines which are shorter than length.\n\t*/\n\tsublines: function sublines(lines, length) {\n\t\treturn iterable(lines).map(function (line) {\n\t\t\treturn Array.isArray(line) ? line : iterable(line).toArray();\n\t\t}, function (line) {\n\t\t\treturn line.length >= length;\n\t\t}).map(function (line) {\n\t\t\treturn Iterable.range(0, line.length - length + 1).map(function (i) {\n\t\t\t\treturn line.slice(i, i + length);\n\t\t\t});\n\t\t}).flatten();\n\t},\n\t\n\t// ### Walks ###################################################################################\n\t\n\t/** A walk is a sequence of coordinates in the board that start at a given point and advances in\n\ta certain direction. The `walk(coord, delta)` method returns an iterable with coordinates from \n\t`coord` and on, adding `delta`'s row and column until going off the board.\n\t*/\n\twalk: function walk(coord, delta) {\n\t\tvar board = this;\n\t\treturn new Iterable(function __iter__() {\n\t\t\tvar current = coord.slice();\n\t\t\treturn function __walkIterator__() {\n\t\t\t\tif (board.isValidCoord(current)) {\n\t\t\t\t\tvar result = current.slice();\n\t\t\t\t\tcurrent[0] += delta[0];\n\t\t\t\t\tcurrent[1] += delta[1];\n\t\t\t\t\treturn result;\n\t\t\t\t} else {\n\t\t\t\t\tthrow Iterable.STOP_ITERATION;\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t},\n\t\n\t/** Convenient method `walks(coord, deltas)` can be used to get many walks from the same origin.\n\t*/\n\twalks: function walks(coord, deltas) {\n\t\tvar board = this;\n\t\treturn deltas.map(function (delta) {\n\t\t\treturn board.walk(coord, delta);\n\t\t});\n\t},\n\t\n\t/** Frequently used deltas for walks are available at `DIRECTIONS`.\n\t*/\n\t\"static DIRECTIONS\": {\n\t\tHORIZONTAL: [[0,-1], [0,+1]],\n\t\tVERTICAL: [[-1,0], [+1,0]], \n\t\tORTHOGONAL: [[0,-1], [0,+1], [-1,0], [+1,0]],\n\t\tDIAGONAL: [[-1,-1], [-1,+1], [+1,-1], [+1,+1]],\n\t\tEVERY: [[0,-1], [0,+1], [-1,0], [+1,0], [-1,-1], [-1,+1], [+1,-1], [+1,+1]]\n\t},\n\t\n\t// ## Board modification #######################################################################\n\t\n\t/** Game states must not be modifiable, else game search algorithms may fail or be extremely \n\tcomplicated. Then, all board altering method in `Checkerboard` must return a new board instance \n\tand leave this instance unspoiled.\n\t\n\tMost board modification functions have two versions: one which actually modifies the board state\n\tand another which returns a modified copy. This is meant to optimize chains of board \n\talterations. To get a copy of this board, the `clone` method can be used.\n\t*/\n\tclone: unimplemented('utils.Checkerboard', 'clone'),\n\t\n\t/** The first function to change the board is `place(coord, value)`. It places the value at the \n\tgiven coordinate, replacing whatever was there.\n\t\n\tThe `__place__` version modifies this board, and is not implemented in the base class. It should\n\treturn this instance, to enable chaining.\n\t*/\n\t__place__: unimplemented('utils.Checkerboard', 'place'),\n\t\n\tplace: function place(coord, value) {\n\t\treturn this.clone().__place__(coord, value);\n\t},\n\n\t/** Another usual operation is `move(coordFrom, coordTo, valueLeft)`. It moves the contents at \n\t`coordFrom` to `coordTo`. Whatever is at `coordTo` gets replaced, and `valueLeft` is placed at\n\t`coordFrom`. If `valueLeft` is undefined, `emptySquare` is used.\n\t*/\n\t__move__: function __move__(coordFrom, coordTo, valueLeft) {\n\t\treturn this.__place__(coordTo, this.square(coordFrom))\n\t\t\t.__place__(coordFrom, typeof valueLeft === 'undefined' ? this.emptySquare : valueLeft);\n\t},\n\t\n\tmove: function move(coordFrom, coordTo, valueLeft) {\n\t\treturn this.clone().__move__(coordFrom, coordTo, valueLeft);\n\t},\n\t\n\t/** The next board operation is `swap(coordFrom, coordTo)`, which moves the contents at \n\t`coordFrom` to `coordTo`, and viceversa.\n\t*/\n\t__swap__: function __swap__(coordFrom, coordTo) {\n\t\tvar valueTo = this.square(coordTo);\n\t\treturn this.__place__(coordTo, this.square(coordFrom))\n\t\t\t.__place__(coordFrom, valueTo);\n\t},\n\t\n\tswap: function swap(coordFrom, coordTo) {\n\t\treturn this.clone().__swap__(coordFrom, coordTo);\n\t},\n\t\n\t// ## Whole board operations ###################################################################\n\t\n\t/** The `transform` builds a new board mapping coordinates of this board with the given\n\tfunction.\n\t*/\n\ttransform: function transform(coordinateMapping) {\n\t\tvar result = this.clone(),\n\t\t\tboard = this;\n\t\tthis.coordinates().forEach(function (position) {\n\t\t\tvar newPosition = coordinateMapping.apply(board, [board, position].concat(position));\n\t\t\tresult.__place__(newPosition, board.square(position));\n\t\t});\n\t\treturn result;\n\t},\n\t\n\t/** Symmetries transform the whole board at once. The `horizontalSymmetry` of the board flips it \n\twith a vertical axis at its center, while the `verticalSymmetry` flips it with an horizontal \n\taxis.\n\t*/\n\thorizontalSymmetry: function horizontalSymmetry() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [row, board.width - column - 1];\n\t\t});\n\t},\n\t\n\tverticalSymmetry: function verticalSymmetry() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [board.height - row - 1, column];\n\t\t});\n\t},\n\t\n\t/** Rotations also transform the whole board at once. The `clockwiseRotation` of the board \n\trotates in the direction that the hands of a clock, while the `counterClockwiseRotation` rotates\n\tit in the opposite direction.\n\t*/\n\tclockwiseRotation: function clockwiseRotation() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [column, board.height - row - 1];\n\t\t});\n\t},\n\t\n\tcounterClockwiseRotation: function counterClockwiseRotation() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [board.width - column - 1, row];\n\t\t});\n\t},\n\t\n\t// ## Board presentation. ######################################################################\n\t\n\t/** Board games' user interfaces may be implemented using HTML & CSS. This is the case of \n\tLudorum's playtesters.\n\t*/\n\trenderAsHTMLTable: function (document, container, callback) {\n\t\tvar board = this, // for closures.\n\t\t\ttable = document.createElement('table');\n\t\tcontainer.appendChild(table);\n\t\tboard.horizontals().reverse().forEach(function (line) {\n\t\t\tvar tr = document.createElement('tr');\n\t\t\ttable.appendChild(tr);\n\t\t\tline.forEach(function (coord) {\n\t\t\t\tvar square = board.square(coord),\n\t\t\t\t\ttd = document.createElement('td'),\n\t\t\t\t\tdata = {\n\t\t\t\t\t\tid: \"ludorum-square-\"+ coord.join('-'),\n\t\t\t\t\t\tclassName: \"ludorum-square\",\n\t\t\t\t\t\tsquare: square,\n\t\t\t\t\t\tcoord: coord,\n\t\t\t\t\t\tinnerHTML: base.Text.escapeXML(square)\n\t\t\t\t\t};\n\t\t\t\tif (callback) {\n\t\t\t\t\tdata = callback(data) || data;\n\t\t\t\t}\n\t\t\t\ttd['ludorum-data'] = data;\n\t\t\t\ttd.id = data.id;\n\t\t\t\ttd.className = data.className;\n\t\t\t\ttd.innerHTML = data.innerHTML;\n\t\t\t\tif (data.onclick) {\n\t\t\t\t\ttd.onclick = data.onclick;\n\t\t\t\t}\n\t\t\t\ttr.appendChild(td);\n\t\t\t});\n\t\t});\n\t\treturn table;\n\t},\n\t\n\t// ## Heuristics ###############################################################################\n\t\n\t/** A `weightedSum` is an simple way of defining an heuristic. Every position in the board is \n\tassigned a weight, and every possible value is assigned a coefficients (usually player is 1, \n\topponent is -1, else is 0).\n\t\n\tWeights have to be in the same order that `coordinates()` enumerates the board's positions. This\n\tfunction assumes the weights are normalized and sufficient to cover the whole board.\n\t*/\n\tweightedSum: function weightedSum(weights, coefficients) {\n\t\tvar board = this;\n\t\treturn this.coordinates().zip(weights).mapApply(function (coord, weight) {\n\t\t\treturn coefficients[board.square(coord)] * weight || 0;\n\t\t}).sum();\n\t}\n}); //// declare utils.Checkerboard.\n","/** # CheckerboardFromString\n\n[`Checkerboard`](Checkerboard.html) implementation represented by a simple string (one character per \nsquare).\n*/\nvar CheckerboardFromString = utils.CheckerboardFromString = declare(Checkerboard, {\n\t/** The constructor takes `height`, `width`, the whole board content in a `string`, and \n\toptionally the empty square character.\n\t*/\n\tconstructor: function CheckerboardFromString(height, width, string, emptySquare) {\n\t\tCheckerboard.call(this, height, width);\n\t\tif (emptySquare && emptySquare !== this.emptySquare) {\n\t\t\tthis.emptySquare = (emptySquare +'').charAt(0);\n\t\t}\n\t\tif (string && string.length !== height * width) {\n\t\t\tthrow new Error('Given string '+ JSON.stringify(string) +' does not match board dimensions.');\n\t\t}\n\t\tthis.string = string || this.emptySquare.repeat(height * width);\n\t},\n\t\n\t/** The `emptySquare` in `CheckerboardFromString` is `'.'` by default.\n\t*/\n\temptySquare: '.',\t\n\t\n\t/** The default string conversion of `CheckerboardFromString` prints the board one line by row, \n\tlast row on top.\n\t*/\n\ttoString: function toString() {\n\t\tvar string = this.string, height = this.height, width = this.width;\n\t\treturn Iterable.range(height).map(function (i) {\n\t\t\treturn string.substr((height - i - 1) * width, width);\n\t\t}).join('\\n');\n\t},\n\t\n\t// ## Board information ########################################################################\n\t\n\t/** The `square(coord, outside)` return the character at `(row * width + column)` if the \n\tcoordinate is inside the board. Else returns `outside`.\n\t*/\n\tsquare: function square(coord, outside) {\n\t\tvar row = coord[0], \n\t\t\tcolumn = coord[1],\n\t\t\twidth = this.width;\n\t\tif (row >= 0 && row < this.height && column >= 0 && column < width) {\n\t\t\treturn this.string.charAt(row * width + column);\n\t\t} else {\n\t\t\treturn outside;\n\t\t}\n\t},\n\t\n\t// ### Lines ###################################################################################\n\t\n\t/** Since square contents in `CheckerboardFromString` are just characters, lines can be thought \n\tas strings. The method `asString(line)` takes an iterable of coordinates and returns a string of \n\tthe characters found at each point in the sequence.\n\t*/\n\tasString: function asString(line) {\n\t\tvar board = this;\n\t\treturn line.map(function (coord) {\n\t\t\treturn board.square(coord);\n\t\t}).join('');\n\t},\n\t\n\t/** The method `asStrings(lines)` can be used to easily map `asString(line)` to a sequence of \n\tlines, like the one calculated by `lines()`.\n\t*/\n\tasStrings: function asStrings(lines) {\n\t\tvar board = this;\n\t\treturn lines.map(function (line) {\n\t\t\treturn board.asString(line);\n\t\t});\n\t},\n\t\n\t/** Many games based on board configurations (like connection games) have patterns that can be \n\texpressed with regular expressions. The method `asRegExp(line, insideLine, outsideLine)` takes a \n\tline (iterable of coordinates) and returns a string with a regular expression. This may be used \n\tto tests the whole board string for the line.\n\t\n\t_Warning!_ Both `insideLine` and `outsideLine` must be simple regular expressions (e.g. a \n\tcharacter or atom). If more complex expressions are required they must be provided between \n\tparenthesis.\n\t*/\n\tasRegExp: function asRegExp(line, insideLine, outsideLine) {\n\t\toutsideLine = outsideLine || '.';\n\t\tvar width = this.width,\n\t\t\tsquares = Iterable.repeat(false, width * this.height).toArray();\n\t\tline.forEach(function (coord) {\n\t\t\tsquares[coord[0] * width + coord[1]] = true;\n\t\t});\n\t\tvar result = '', count = 0, current;\n\t\tfor (var i = 0; i < squares.length; count = 0) {\n\t\t\tcurrent = squares[i];\n\t\t\tdo {\n\t\t\t\t++count;\n\t\t\t} while (++i < squares.length && squares[i] === current);\n\t\t\tif (count < 2) {\n\t\t\t\tresult += current ? insideLine : outsideLine;\n\t\t\t} else {\n\t\t\t\tresult += (current ? insideLine : outsideLine) +'{'+ count +'}';\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\t\n\t/** The method `asRegExps(lines)` can be used to easily map `asRegExp(line)` to a sequence of \n\tlines. All regular expressions are joined as a union (`|`). Use with caution, because the whole \n\tregular expression can get very big even with small boards.\n\t*/\n\tasRegExps: function asRegExps(lines, insideLine, outsideLine) {\n\t\tvar board = this;\n\t\treturn lines.map(function (line) {\n\t\t\treturn board.asRegExp(line, insideLine, outsideLine);\n\t\t}).join('|');\n\t},\n\t\n\t// ## Board modification #######################################################################\n\t\n\t/** Cloning a CheckerboardFromString simply calls the constructor again with the proper \n\targuments to replicate this instance.\n\t*/\n\tclone: function clone() {\n\t\treturn new this.constructor(this.height, this.width, this.string, \n\t\t\tthis.hasOwnProperty('emptySquare') ? this.emptySquare : undefined);\n\t},\n\t\n\t/** A `place(coord, value)` means only changing one character in the underlying string. The \n\t`value` must be a character, and `coord` a point inside the board.\n\t*/\n\t__place__: function __place__(coord, value) {\n\t\traiseIf(!this.isValidCoord(coord), \"Invalid coordinate \", coord, \".\");\n\t\tvalue = (value + this.emptySquare).charAt(0);\n\t\tvar i = coord[0] * this.width + coord[1];\n\t\tthis.string = this.string.substr(0, i) + value + this.string.substr(i + 1);\n\t\treturn this;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'CheckerboardFromString',\n\t\tserializer: function serialize_CheckerboardFromString(obj) {\n\t\t\tvar r = [obj.height, obj.width, obj.string];\n\t\t\tif (obj.hasOwnProperty('emptySquare')) {\n\t\t\t\tr.push(obj.emptySquare);\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\t}\n}); // declare utils.CheckerboardFromString","/** # Checkerboard from pieces\n\n[`Checkerboard`](Checkerboard.html) implementation represented by a list of pieces (objects) with a\nlocation in the board.\n*/\nvar CheckerboardFromPieces = utils.CheckerboardFromPieces = declare(Checkerboard, {\n\t/** The constructor takes `height`, `width`, a list of piece objects and optionally the empty \n\tsquare object. The piece objects must have a property `position`. Only one piece is allowed at\n\teach square.\n\t*/\n\tconstructor: function CheckerboardFromPieces(height, width, pieces, emptySquare) {\n\t\tCheckerboard.call(this, height, width);\n\t\tvar board = this;\n\t\tif (emptySquare !== this.emptySquare) {\n\t\t\tthis.emptySquare = emptySquare;\n\t\t}\n\t\tif (Array.isArray(pieces)) {\n\t\t\tthis.pieces = {}; \n\t\t\titerable(pieces || []).forEach(function (piece) {\n\t\t\t\traiseIf(!Array.isArray(piece.position), \"Piece has not a position (\", piece, \")!\");\n\t\t\t\tboard.pieces[piece.position +''] = piece;\n\t\t\t});\n\t\t} else if (typeof pieces === 'object') {\n\t\t\tthis.pieces = base.copy({}, pieces);\n\t\t} else {\n\t\t\traise(\"Invalid pieces definition: \", pieces, \"!\");\n\t\t}\n\t},\n\t\n\t/** The `emptySquare` in `CheckerboardFromPieces` is `null` by default.\n\t*/\n\temptySquare: null,\t\n\t\n\t/** The default string conversion of `CheckerboardFromPieces` prints the piece list.\n\t*/\n\ttoString: function toString() {\n\t\treturn '['+ iterable(this.pieces).select(1).join(', ') +']';\n\t},\n\t\n\t// ## Board information ########################################################################\n\t\n\t/** The `square(coord, outside)` return the piece object at the given `coord` if there is one \n\tand the coordinate is inside the board. Else returns `outside`.\n\t*/\n\tsquare: function square(coord, outside) {\n\t\treturn this.pieces[coord] || outside;\n\t},\n\t\n\t// ## Board modification #######################################################################\n\t\n\t/** Cloning a `CheckerboardFromPieces` simply calls the constructor again with the proper \n\targuments to replicate this instance. The `pieces` object is copied _shallowly_ by the \n\tconstructor.\n\t*/\n\tclone: function clone() {\n\t\treturn new this.constructor(this.height, this.width, this.pieces, this.emptySquare);\n\t},\n\t\n\t/** A `place(coord, value)` means removing any existing piece at the given `coord` and adding \n\tthe `value` piece if given.\n\t*/\n\t__place__: function __place__(coord, value) {\n\t\traiseIf(!this.isValidCoord(coord), \"Invalid coordinate \", coord, \"!\");\n\t\tvar id = coord +'';\n\t\tdelete this.pieces[id];\n\t\tif (value) {\n\t\t\tthis.pieces[id] = value;\n\t\t}\n\t\treturn this;\n\t}\n}); // declare utils.CheckerboardFromPieces\n","/** # Scanner\n\nComponent for scanning a game's tree.\n*/\nexports.utils.Scanner = declare({\n\t/** A Scanner builds a sample of a game tree, in order to get statistics \n\tfrom some of all possible matches. The given `config` must have:\n\t*/\n\tconstructor: function Scanner(config) {\n\t\tinitialize(this, config)\n\t\t// + `game`: Game to scan.\n\t\t\t.object(\"game\", { ignore: true })\n\t\t// + `maxWidth=1000`: Maximum amount of game states held at each step.\n\t\t\t.integer(\"maxWidth\", { defaultValue: 1000, coerce: true })\n\t\t// + `maxLength=50`: Maximum length of simulated matches.\n\t\t\t.integer(\"maxLength\", { defaultValue: 50, coerce: true })\n\t\t// + `random=randomness.DEFAULT`: Pseudorandom number generator to use in the simulations.\n\t\t\t.object(\"random\", { defaultValue: Randomness.DEFAULT })\n\t\t// + `statistics=`: Component to gather relevant statistics.\n\t\t\t.object(\"statistics\", { defaultValue: new Statistics() });\n\t},\n\t\n\t/** A scan of a game's tree reproduces and samples the set of all possible \n\tmatches from the given game states. The simulation halts at `maxLength` \n\tplies, and never holds more than `maxWidth` game states. Since this process\n\tis asynchronous, this method returns a future.\n\t\n\tThe `players` argument may provide a player for some or all of the games' \n\troles. If available, they will be used to decide which move is applied to \n\teach game state. If missing, all next game states will be added. Ergo no \n\tplayers means a simulation off all possible matches.\t\t\n\t*/\n\tscan: function scan(players) {\n\t\tvar scanner = this,\n\t\t\twindow = arguments.length < 2 ? (this.game ? [this.game] : []) : Array.prototype.slice.call(arguments, 1),\n\t\t\tply = 0; \n\t\treturn Future.whileDo(function () {\n\t\t\treturn window.length > 0 && ply < scanner.maxLength;\n\t\t}, function () {\n\t\t\treturn Future.all(window.map(function (game) {\n\t\t\t\treturn scanner.__advance__(players, game, ply);\n\t\t\t})).then(function (level) {\n\t\t\t\twindow = iterable(level).flatten().sample(scanner.maxWidth, scanner.random).toArray();\n\t\t\t\treturn ++ply;\n\t\t\t});\n\t\t}).then(function () {\n\t\t\tscanner.statistics.add({ key:'aborted' }, window.length);\n\t\t\treturn scanner.statistics;\n\t\t});\n\t},\n\t\n\t/** Performs scans for many different player setups.\n\t*/\n\tscans: function scans() {\n\t\treturn Future.sequence(Array.prototype.slice.call(arguments), this.scan.bind(this));\n\t},\n\t\n\t/** The `__advance__` method advances the given game by one ply. This may \n\tmean for non final game states either instantiate random variables, ask the \n\tavailable player for a decision, or take all next game states. Final game \n\tstates are removed. \n\t\n\tAll game states are accounted in the scanner's statistics. The result is an \n\titerable with the game states to add to the next scan window.\n\t*/\n\t__advance__: function __advance__(players, game, ply) {\n\t\tif (game instanceof Aleatory) {\n\t\t\treturn iterable(game.distribution()).mapApply(function (value, prob) {\n\t\t\t\treturn game.next(value);\n\t\t\t});\n\t\t} else if (this.account(players, game, ply)) {\n\t\t\treturn Iterable.EMPTY;\n\t\t} else {\n\t\t\tvar scanner = this,\n\t\t\t\tmoves = game.moves(),\n\t\t\t\tstats = this.statistics;\n\t\t\treturn Future.all(game.activePlayers.map(function (role) {\n\t\t\t\tif (players && players[role]) {\n\t\t\t\t\tvar p = players[role],\n\t\t\t\t\t\tdecisionTime = stats.stat({key:'decision.time', game: game.name, role: role, player: p.name});\n\t\t\t\t\tdecisionTime.startTime();\n\t\t\t\t\treturn Future.when(p.decision(game, role)).then(function (move) {\n\t\t\t\t\t\tdecisionTime.addTime();\n\t\t\t\t\t\treturn [[role, move]];\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn moves[role].map(function (move) {\n\t\t\t\t\t\treturn [role, move];\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})).then(function (decisions) {\n\t\t\t\treturn Iterable.product.apply(Iterable, decisions).map(function (moves) {\n\t\t\t\t\treturn game.next(iterable(moves).toObject());\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t},\n\t\t\t\n\t/** The `account` method gathers statistics about the game. These include:\n\t\t\n\t+ `game.result`: Final game state results. Also available for victory and defeat.\n\t+ `game.length`: Match length in plies. Also available for victory and defeat.\n\t+ `game.width`: Number of available moves.\n\t+ `draw.length`: Drawn match length in plies.\n\t\n\tReturns whether the given game state is final or not.\n\t*/\n\taccount: function account(players, game, ply) {\n\t\tvar result = game.result(),\n\t\t\tstats = this.statistics;\n\t\tif (result) {\n\t\t\titerable(game.players).forEach(function (role) {\n\t\t\t\tvar r = result[role],\n\t\t\t\t\tp = (players && players[role]) ? players[role].name : '',\n\t\t\t\t\tkeys = ['game:'+ game.name, 'role:'+ role, 'player:'+ p];\n\t\t\t\tstats.add({key:'game.result', game:game.name, role:role, player:p}, r, game);\n\t\t\t\tstats.add({key:'game.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\tif (r < 0) {\n\t\t\t\t\tstats.add({key:'defeat.result', game:game.name, role:role, player:p}, r, game);\n\t\t\t\t\tstats.add({key:'defeat.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\t} else if (r > 0) {\n\t\t\t\t\tstats.add({key:'victory.result', game:game.name, role:role, player:p}, r, game);\n\t\t\t\t\tstats.add({key:'victory.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\t} else {\n\t\t\t\t\tstats.add({key:'draw.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn true;\n\t\t} else {\n\t\t\tvar moves = game.moves();\n\t\t\titerable(game.activePlayers).forEach(function (role) {\n\t\t\t\tstats.add({key:'game.width', game:game.name, role:role}, moves[role].length);\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\t}\n}); // Scanner.\n","/** # Cache\n\nA game cache contains a part of a game tree, avoiding redundancies. It can be\nused to implement a [transposition table](http://en.wikipedia.org/wiki/Transposition_table) \nor similar data structures.\n*/\nutils.Cache = declare({\n\t/** The `Cache` constructor may take a game to define as `root`.\n\t*/\n\tconstructor: function Cache(game) {\n\t\tthis.clear();\n\t\tif (game) {\n\t\t\tthis.root(game);\n\t\t}\n\t},\n\t\n\t/** The `stateIdentifier(state)` of every game state is used as the key in \n\tthe cache's entries. By default is calculated with the `Game.identifier()`\n\tmethod.\n\t*/\n\tstateIdentifier: function stateIdentifier(state) {\n\t\treturn state.identifier();\n\t},\n\t\n\t/** The `moveIdentifier(move)` is used as the key in each entry's \n\tdescendants. By default it uses the move JSON _stringification_.\n\t*/\n\tmoveIdentifier: function moveIdentifier(move) {\n\t\treturn JSON.stringify(move);\n\t},\n\t\n\t/** The `has(state|id)` returns if the given state or state identifier has \n\tan entry in this cache.\n\t*/\n\thas: function has(state) {\n\t\tvar stateId = typeof state === 'string' ? state : this.stateIdentifier(state);\n\t\treturn this.__entries__.hasOwnProperty(stateId);\n\t},\n\t\n\t/** If the given state or state identifier has en entry in this cache, \n\t`get(state)` returns that entry. Else it returns `undefined`.\n\t*/\n\tget: function get(state) {\n\t\tvar stateId = typeof state === 'string' ? state : this.stateIdentifier(state);\n\t\treturn this.__entries__[stateId];\n\t},\n\t\n\t/** `size()` returns the amount of entries in this cache.\n\t*/\n\tsize: function size() {\n\t\treturn Object.keys(this.__entries__).length;\n\t},\n\t\n\t/** If the given state has no entry in this cache, `entry(state, id)` builds\n\ta new entry, adds it to this cache and returns it. If the state is already\n\tcached, its entry is returned.\n\tEvery entry has the game `state`, its `id`, the states that may come before\n\t(the `precursors`) and the states that may follow (the `descendants`).\n\t*/\n\tentry: function entry(state, id) {\n\t\tid = id || this.stateIdentifier(state);\n\t\tif (this.has(id)) {\n\t\t\treturn this.get(id);\n\t\t} else {\n\t\t\tvar _entry = { id: id, state: state, precursors: [], descendants: {} };\n\t\t\tthis.__entries__[id] = _entry;\n\t\t\treturn _entry;\n\t\t}\n\t},\n\t\n\t/** An entry's `descendant(entry, moves)` is the entry of the game state \n\tfollowing the given entry's game state with the given moves. The method not\n\tonly returns the entry is this state, it creates and caches that entry if \n\tnot present.\n\t*/\n\tdescendant: function descendant(entry, moves) {\n\t\tvar movesId = this.moveIdentifier(moves),\n\t\t\tdescendants = entry.descendants;\n\t\tif (descendants.hasOwnProperty(movesId)) { // Already expanded.\n\t\t\treturn descendants[movesId][1];\n\t\t} else {\n\t\t\tvar nextState = entry.state.next(moves),\n\t\t\t\tnextStateId = this.stateIdentifier(nextState),\n\t\t\t\tnextEntry = this.get(nextStateId) || // Reuse entry in cache if it exists.\n\t\t\t\t\tthis.entry(nextState, nextStateId); // Else add new entry.\n\t\t\tdescendants[movesId] = [moves, nextEntry];\n\t\t\tnextEntry.precursors.push([moves, entry]);\n\t\t\treturn nextEntry;\n\t\t}\n\t},\n\t\n\t/** An entry `descendants(entry)` is an array of all the entry's \n\tdescendants, for all the possible moves for the entry's state.\n\t*/\n\tdescendants: function descendants(entry) {\n\t\tvar descendant = this.descendant.bind(this, entry);\n\t\tif (arguments.length > 1) {\n\t\t\treturn Array.prototype.slice.call(arguments, 1).map(descendant);\n\t\t} else { // if (arguments.length == 0)\n\t\t\treturn entry.state.possibleMoves().map(descendant);\n\t\t}\n\t},\n\t\n\t/** A clear cache has no entries and of course no root.\n\t*/\n\tclear: function clear() {\n\t\tthis.__entries__ = {};\n\t\tthis.__root__ = null;\n\t},\n\t\n\t/** If `root()` is called without arguments, it returns the current root.\n\tIf a state is given, that state is assigned as the new root, and the whole\n\tcache is pruned.\n\t*/\n\troot: function root(state) {\n\t\tif (arguments.length > 0) { // Called with argument means setter.\n\t\t\tvar stateId = this.stateIdentifier(state);\n\t\t\tthis.__root__ = this.get(stateId) || this.entry(state, stateId);\n\t\t\tthis.prune(stateId);\n\t\t}\n\t\treturn this.__root__;\n\t},\n\t\n\t/** `prune(id=root.id)` deletes all nodes except the one with the given id \n\tand its descendants.\n\t*/\n\tprune: function prune(id) {\n\t\tvar pending = [id || this.__root__.id], \n\t\t\tpruned = {},\n\t\t\tentry;\n\t\twhile (id = pending.shift()) {\n\t\t\tif (!pruned.hasOwnProperty(id)) {\n\t\t\t\tentry = this.get(id);\n\t\t\t\tpruned[id] = entry;\n\t\t\t\tpending.push.apply(pending, iterable(entry.descendants).mapApply(function (id, pair) {\n\t\t\t\t\treturn pair[1][id];\n\t\t\t\t}).toArray());\n\t\t\t}\n\t\t}\n\t\treturn this.__entries__ = pruned;\n\t}\t\n}); // declare Cache\n","/** # Game tree\r\n\r\nA data structure to help building game trees, i.e. trees in which each node is a game state, the\r\nfinal states are leaves and each child node belongs to one of the next states of its parent.\r\n*/\r\nvar GameTree = declare({\r\n\t/** Each instance represents a node in the game tree. The `parent` must be null or undefined at\r\n\tthe root. The given `transition` is either the moves or the aleatory values used to move from \r\n\tthe parent's state to this node's state. They also must be null or undefined at the root.\r\n\t*/\r\n\tconstructor: function GameTree(parent, state, transition) {\r\n\t\tthis.parent = parent;\r\n\t\tthis.state = state;\r\n\t\tthis.transition = transition;\r\n\t\tthis.children = {};\r\n\t},\r\n\t\r\n\t/** This node's `children` are stored in an object, hence getting the count is a little tricky.\r\n\t*/\r\n\tchildrenCount: function childrenCount() {\r\n\t\treturn Object.keys(this.children).length;\r\n\t},\r\n\t\r\n\t/** In the `children` object nodes are stored with a serialization of their transitions as keys.\r\n\tBy default the JSON _\"strinigification\"_ is used.\r\n\t*/\r\n\t__childSerialization__: function __childSerialization__(moves) {\r\n\t\treturn JSON.stringify(moves);\r\n\t},\r\n\t\r\n\t/** A node expansion takes the `moves` to calculate the next state and creates the child node\r\n\twith it. If the node already exists, it is returned and none is created.\r\n\t*/\r\n\texpand: function expand(transition) {\r\n\t\tvar key = this.__childSerialization__(transition),\r\n\t\t\tchild = this.children[key], nextState;\r\n\t\tif (!child) {\r\n\t\t\ttry {\r\n\t\t\t\tnextState = this.state.next(transition); \r\n\t\t\t} catch (err) {\r\n\t\t\t\traise(\"Node expansion for \", this.state, \" with \", JSON.stringify(transition),\r\n\t\t\t\t\t\" failed with: \", err);\r\n\t\t\t}\r\n\t\t\tchild = new this.constructor(this, nextState, transition);\r\n\t\t\tthis.children[key] = child;\r\n\t\t}\r\n\t\treturn child;\r\n\t},\r\n\t\r\n\t/** Returns the possible moves is the state is an instance of Game, or the possible values if\r\n\tthe state is an instance of Aleatory.\r\n\t*/\r\n\tpossibleTransitions: function possibleTransitions() {\r\n\t\tvar state = this.state;\r\n\t\tif (state.isContingent) {\r\n\t\t\treturn state.possibleHaps();\r\n\t\t} else {\r\n\t\t\treturn state.possibleMoves();\r\n\t\t}\r\n\t},\r\n\t\r\n\t/** A full expansion creates all child nodes for this node.\r\n\t*/\r\n\texpandAll: function expandAll() {\r\n\t\tvar node = this;\r\n\t\treturn this.possibleTransitions().map(function (transition) {\r\n\t\t\treturn node.expand(// An array as transition means it belongs to a contingent state\r\n\t\t\t\tArray.isArray(transition) ? transition[0] : transition);\r\n\t\t});\r\n\t}\r\n}); // declare GameTree","/** # RandomPlayer\n\nAutomatic players that moves fully randomly.\n*/\t\nplayers.RandomPlayer = declare(Player, {\n\t/** The constructor takes the player's `name` and a `random` number \n\tgenerator (`base.Randomness.DEFAULT` by default).\n\t*/\n\tconstructor: function RandomPlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT });\n\t},\n\n\t/** The `decision(game, player)` is made completely at random.\n\t*/\n\tdecision: function(game, player) {\n\t\treturn this.random.choice(this.movesFor(game, player));\n\t}\n}); // declare RandomPlayer.\n","/** # TracePlayer\n\nAutomatic player that is scripted previously.\n*/\nplayers.TracePlayer = declare(Player, {\n\t/** The constructor takes the player's `name` and the `trace` as an \n\tsequence of moves to make.\n\t*/\n\tconstructor: function TracePlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tthis.trace = iterable(params.trace);\n\t\tthis.__iter__ = this.trace.__iter__();\n\t\tthis.__decision__ = this.__iter__();\n\t},\n\n\t/** The `decision(game, player)` returns the next move in the trace, or the \n\tlast one if the trace has ended.\n\t*/\n\tdecision: function(game, player) {\n\t\ttry {\n\t\t\tthis.__decision__ = this.__iter__();\n\t\t} catch (err) {\n\t\t\tIterable.prototype.catchStop(err);\n\t\t}\n\t\treturn this.__decision__;\n\t},\n\t\n\t__serialize__: function __serialize__() {\n\t\treturn ['TracePlayer', { name: this.name, trace: this.trace.toArray() }];\n\t}\n}); // declare TracePlayer.\n","/** # HeuristicPlayer\n\nThis is the base type of automatic players based on heuristic evaluations of game states or moves.\n*/\nvar HeuristicPlayer = players.HeuristicPlayer = declare(Player, {\n\t/** The constructor takes the player's `name` and a `random` number generator \n\t(`base.Randomness.DEFAULT` by default). Many heuristic can be based on randomness, but this is \n\talso necessary to chose between moves with the same evaluation without any bias.\n\t*/\n\tconstructor: function HeuristicPlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT })\n\t\t\t.func('heuristic', { ignore: true });\n\t},\n\n\t/** An `HeuristicPlayer` choses the best moves at any given game state. For this purpose it \n\tevaluates every move with `moveEvaluation(move, game, player)`. By default this function \n\tevaluates the states resulting from making each move, which is the most common thing to do.\n\t*/\n\tmoveEvaluation: function moveEvaluation(move, game, player) {\n\t\tvar heuristicPlayer = this;\n\t\tif (Object.keys(move).length < 2) { // One active player.\n\t\t\treturn this.stateEvaluation(game.next(move), player);\n\t\t} else { // Many active players.\n\t\t\tvar sum = 0, count = 0;\n\t\t\tmove = copy(obj(player, [move[player]]), move);\n\t\t\tgame.possibleMoves(move).forEach(function (ms) {\n\t\t\t\tsum += heuristicPlayer.stateEvaluation(game.next(ms), player);\n\t\t\t\t++count;\n\t\t\t});\n\t\t\treturn count > 0 ? sum / count : 0; // Average all evaluations.\n\t\t}\n\t},\n\n\t/** The `stateEvaluation(game, player)` calculates a number as the assessment of the given game \n\tstate for the given player. The base implementation returns the result for the player is the \n\tgame has results, else it returns the heuristic value for the state.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\tvar gameResult = game.result();\n\t\treturn gameResult ? gameResult[player] : this.heuristic(game, player);\n\t},\n\n\t/** The `heuristic(game, player)` is an evaluation used at states that are not finished games. \n\tThe default implementation returns a random number in [-0.5, 0.5). This is only useful in \n\ttesting. Any serious use should redefine this.\n\t*/\n\theuristic: function heuristic(game, player) {\n\t\treturn this.random.random(-0.5, 0.5);\n\t},\n\t\n\t/**TODO WIP\n\t*/\n\tevaluatedMoves: function evaluatedMoves(game, player) {\n\t\tvar heuristicPlayer = this,\n\t\t\tisAsync = false;\n\t\tif (!game.isContingent) {\n\t\t\t/** Every move is evaluated using `moveEvaluation`. This may be asynchronous and hence\n\t\t\tresult in a `Future`.\n\t\t\t*/\n\t\t\tvar result = this.possibleMoves(game, player).map(function (move) {\n\t\t\t\tvar e = heuristicPlayer.moveEvaluation(move, game, player);\n\t\t\t\tisAsync = isAsync || Future.__isFuture__(e);\n\t\t\t\treturn Future.then(e, function (e) {\n\t\t\t\t\treturn [move, e];\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn isAsync ? Future.all(result) : result;\n\t\t} else {\n\t\t\t/** Contingent game states don't have moves. Hence all posible haps are explored, and\n\t\t\twhen a non-contingent game state is reached the moves are evaluated.\n\t\t\t*/\n\t\t\tvar posible = iterable(game.possibleHaps()).mapApply(function (haps, prob) {\n\t\t\t\tvar es = heuristicPlayer.evaluatedMoves(game.next(haps), player);\n\t\t\t\tisAsync = isAsync || Future.__isFuture__(es);\n\t\t\t\treturn Future.then(es, function (es) {\n\t\t\t\t\treturn es.map(function (e) {\n\t\t\t\t\t\te[1] *= prob; // Multiply the evaluation by the probability of the haps.\n\t\t\t\t\t\treturn e;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t\t/** After all posible scenarios have been evaluated, group the evaluations by move and\n\t\t\tsum the evaluations weighted by probability.\n\t\t\t*/\n\t\t\treturn Future.then(isAsync ? Future.all(posible) : posible, function (posible) {\n\t\t\t\treturn iterable(posible).groupBy(function (p) {\n\t\t\t\t\treturn p[0]; // Group evaluations by move.\n\t\t\t\t}).mapApply(function (move, evals) {\n\t\t\t\t\treturn [move, iterable(evals).select(1).sum()];\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}, // evaluatedMoves()\n\t\n\t/** TODO WIP\n\t*/\n\tpossibleMoves: function possibleMoves(game, player) {\n\t\tvar moves = game.moves();\n\t\traiseIf(!moves || !moves[player] || !Array.isArray(moves[player]) || moves[player].length < 1,\n\t\t\t\"Player \"+ player +\" has no moves in \"+ game +\" (moves= \"+ moves +\")!\");\n\t\treturn iterable(moves[player]).map(function (move) {\n\t\t\treturn copy(obj(player, move), moves);\n\t\t});\n\t},\n\t\n\t/** The `bestMoves(evaluatedMoves)` are all the best evaluated in the given sequence of tuples \n\t[move, evaluation].\n\t*/\n\tbestMoves: function bestMoves(evaluatedMoves) {\n\t\treturn Future.then(iterable(evaluatedMoves), function (evaluatedMoves) {\n\t\t\treturn evaluatedMoves.greater(function (pair) {\n\t\t\t\treturn pair[1];\n\t\t\t}).map(function (pair) {\n\t\t\t\treturn pair[0];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** The `decision(game, player)` selects randomly from the best evaluated moves.\n\t*/\n\tdecision: function decision(game, player) {\n\t\tvar random = this.random;\n\t\treturn Future.then(this.bestMoves(this.evaluatedMoves(game, player)), function (bestMoves) {\n\t\t\tbestMoves = iterable(bestMoves).toArray();\n\t\t\traiseIf(!bestMoves || !bestMoves.length, \n\t\t\t\t\"No moves where selected at \", game, \" for player \", player, \"!\");\n\t\t\treturn random.choice(bestMoves)[player];\n\t\t});\n\t},\n\t\n\t// ## Utilities to build heuristics ############################################################\n\t\n\t/** A `composite` heuristic function returns the weighted sum of other functions. The arguments \n\tmust be a sequence of heuristic functions and a weight. All weights must be between 0 and 1 and\n\tadd up to 1.\n\t*/\n\t'static composite': function composite() {\n\t\tvar components = Array.prototype.slice.call(arguments), weightSum = 0;\n\t\traiseIf(components.length < 1,\n\t\t\t\"HeuristicPlayer.composite() cannot take an odd number of arguments!\");\n\t\tfor (var i = 0; i < components.length; i += 2) {\n\t\t\traiseIf(typeof components[i] !== 'function', \n\t\t\t\t\"HeuristicPlayer.composite() argument \", i, \" (\", components[i], \") is not a function!\");\n\t\t\tcomponents[i+1] = +components[i+1];\n\t\t\traiseIf(isNaN(components[i+1]) || components[i+1] < 0 || components[i+1] > 1, \n\t\t\t\t\"HeuristicPlayer.composite() argument \", i+1, \" (\", components[i+1], \") is not a valid weight!\");\n\t\t}\n\t\treturn function compositeHeuristic(game, player) {\n\t\t\tvar sum = 0;\n\t\t\tfor (var i = 0; i+1 < components.length; i += 2) {\n\t\t\t\tsum += components[i](game, player) * components[i+1];\n\t\t\t}\n\t\t\treturn sum;\n\t\t};\n\t}\n}); // declare HeuristicPlayer.","/** # MaxNPlayer\n\nAutomatic players based on the MaxN algorithm, a MiniMax variant for games of\nmore than two players.\n*/\nvar MaxNPlayer = players.MaxNPlayer = declare(HeuristicPlayer, {\n\t/** Besides the parameters of every [`HeuristicPlayer`](HeuristicPlayer.js.html),\n\tan `horizon` for the search may be specified (3 plies by default).\n\t*/\n\tconstructor: function MaxNPlayer(params) {\n\t\tHeuristicPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.integer('horizon', { defaultValue: 3, coerce: true });\n\t},\n\n\t/** This player evaluates each state using the `maxn` method, taking the \n\tevaluation for the given `player`.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\treturn this.maxN(game, player, 0)[player];\n\t},\n\n\t/** `heuristics(game)` returns an heuristic value for each players in the \n\tgame, as an object.\n\t*/\n\theuristics: function heuristic(game) {\n\t\tvar result = {}, maxN = this;\n\t\tgame.players.forEach(function (role) {\n\t\t\tresult[role] = maxN.heuristic(game, role);\n\t\t});\n\t\treturn result;\n\t},\n\n\t/** `quiescence(game, player, depth)` is a stability test for the given \n\t`game` state and the given `player`. If the game is quiescent, this function\n\tmust return evaluations. Else it must return null. \n\t\n\tFinal game states are always quiescent, and their evaluations are the game's \n\tresult for each player. This default implementation also returns heuristic \n\tevaluations for every game state at a deeper depth than the player's \n\thorizon, calculated via the `heuristics()` method. \n\t*/\n\tquiescence: function quiescence(game, player, depth) {\n\t\tvar results = game.result();\n\t\tif (results) {\n\t\t\treturn results;\n\t\t} else if (depth >= this.horizon) {\n\t\t\treturn this.heuristics(game);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t},\n\t\n\t/** The core `maxN(game, player, depth)` algorithm return the evaluations \n\tfor each player of the given game, assuming each player tries to maximize \n\tits own evaluation regardless of the others'.\n\t*/\n\tmaxN: function maxN(game, player, depth) {\n\t\tvar values = this.quiescence(game, player, depth);\n\t\tif (!values) { // game is not quiescent.\n\t\t\tvar activePlayer = game.activePlayer(),\n\t\t\t\tmoves = this.movesFor(game, activePlayer),\n\t\t\t\totherValues, next;\n\t\t\tvalues = {};\n\t\t\tif (moves.length < 1) {\n\t\t\t\tthrow new Error('No moves for unfinished game '+ game +'.');\n\t\t\t}\n\t\t\tfor (var i = 0; i < moves.length; ++i) {\n\t\t\t\tnext = game.next(obj(activePlayer, moves[i]));\n\t\t\t\totherValues = this.maxN(next, player, depth + 1);\n\t\t\t\tif (otherValues[activePlayer] > (values[activePlayer] || -Infinity)) {\n\t\t\t\t\tvalues = otherValues;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn values;\n\t},\n\t\n\ttoString: function toString() {\n\t\treturn (this.constructor.name || 'MaxNPlayer') +'('+ JSON.stringify({\n\t\t\tname: this.name, horizon: this.horizon\n\t\t}) +')';\n\t}\n}); // declare MiniMaxPlayer.\n","/** # MiniMaxPlayer\n\nAutomatic players based on pure MiniMax.\n*/\nvar MiniMaxPlayer = players.MiniMaxPlayer = declare(HeuristicPlayer, {\n\t/** The constructor takes the player's `name` and the MiniMax search's \n\t`horizon` (`4` by default).\n\t*/\n\tconstructor: function MiniMaxPlayer(params) {\n\t\tHeuristicPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.integer('horizon', { defaultValue: 4, coerce: true });\n\t},\n\n\t/** Every state's evaluation is the minimax value for the given game and \n\tplayer.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\treturn this.minimax(game, player, 0);\n\t},\n\n\t/** The `quiescence(game, player, depth)` method is a stability test for the \n\tgiven game state. If the game is quiescent, this function must return an \n\tevaluation. Else it must return NaN or an equivalent value. \n\t\n\tFinal game states are always quiescent, and their evaluation is the game's\n\tresult for the given player. This default implementation also return an \n\theuristic evaluation for every game state at a deeper depth than the \n\tplayer's horizon.\n\t*/\n\tquiescence: function quiescence(game, player, depth) {\n\t\tvar results = game.result();\n\t\tif (results) {\n\t\t\treturn results[player];\n\t\t} else if (depth >= this.horizon) {\n\t\t\treturn this.heuristic(game, player);\n\t\t} else {\n\t\t\treturn NaN;\n\t\t}\n\t},\n\t\n\t/** The `minimax(game, player, depth)` method calculates the Minimax \n\tevaluation of the given game for the given player. If the game is not \n\tfinished and the depth is greater than the horizon, `heuristic` is used.\n\t*/\n\tminimax: function minimax(game, player, depth) {\n\t\tvar value = this.quiescence(game, player, depth);\n\t\tif (isNaN(value)) { // game is not quiescent.\n\t\t\tvar activePlayer = game.activePlayer(),\n\t\t\t\tmoves = this.movesFor(game, activePlayer), \n\t\t\t\tcomparison, next;\n\t\t\tif (moves.length < 1) {\n\t\t\t\tthrow new Error('No moves for unfinished game '+ game +'.');\n\t\t\t}\n\t\t\tif (activePlayer == player) {\n\t\t\t\tvalue = -Infinity;\n\t\t\t\tcomparison = Math.max;\n\t\t\t} else {\n\t\t\t\tvalue = +Infinity;\n\t\t\t\tcomparison = Math.min;\n\t\t\t}\n\t\t\tfor (var i = 0; i < moves.length; ++i) {\n\t\t\t\tnext = game.next(obj(activePlayer, moves[i]));\n\t\t\t\tvalue = comparison(value, this.minimax(next, player, depth + 1));\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\t\n\ttoString: function toString() {\n\t\treturn (this.constructor.name || 'MiniMaxPlayer') +'('+ JSON.stringify({\n\t\t\tname: this.name, horizon: this.horizon\n\t\t}) +')';\n\t}\n}); // declare MiniMaxPlayer.\n","/** # AlphaBetaPlayer\n\nAutomatic players based on MiniMax with alfa-beta pruning.\n*/\nplayers.AlphaBetaPlayer = declare(MiniMaxPlayer, {\n\t/** The constructor does not add anything to the parent\n\t[`MiniMaxPlayer`](MiniMaxPlayer.js.html) constructor.\n\t*/\n\tconstructor: function AlphaBetaPlayer(params) {\n\t\tMiniMaxPlayer.call(this, params);\n\t},\n\n\t/** Every state's evaluation is the minimax value for the given game and \n\tplayer. The alfa an beta arguments are initialized with `-Infinity` and\n\t`Infinity`.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\treturn this.minimax(game, player, 0, -Infinity, Infinity);\n\t},\n\n\t/** The `minimax(game, player, depth, alfa, beta)` method calculates the \n\tMinimax evaluation of the given game for the given player. If the game is \n\tnot finished and the depth is greater than the horizon, the heuristic is\n\tused.\n\t*/\n\tminimax: function minimax(game, player, depth, alpha, beta) {\n\t\tvar value = this.quiescence(game, player, depth);\n\t\tif (!isNaN(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tvar activePlayer = game.activePlayer(),\n\t\t\tisActive = activePlayer == player,\n\t\t\tmoves = this.movesFor(game, activePlayer), next;\n\t\tif (moves.length < 1) {\n\t\t\tthrow new Error('No moves for unfinished game '+ game +'.');\n\t\t}\n\t\tfor (var i = 0; i < moves.length; i++) {\n\t\t\tnext = game.next(obj(activePlayer, moves[i]));\n\t\t\tvalue = this.minimax(next, player, depth + 1, alpha, beta);\n\t\t\tif (isActive) {\n\t\t\t\tif (alpha < value) { // MAX\n\t\t\t\t\talpha = value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (beta > value) { // MIN\n\t\t\t\t\tbeta = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (beta <= alpha) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn isActive ? alpha : beta;\n\t}\n}); // declare AlphaBetaPlayer.\n","/** # MonteCarloPlayer\n\nAutomatic player based on flat Monte Carlo tree search.\n*/\nvar MonteCarloPlayer = players.MonteCarloPlayer = declare(HeuristicPlayer, {\n\t/** The constructor builds a player that chooses its moves using the \n\t[flat Monte Carlo game tree search method](http://en.wikipedia.org/wiki/Monte-Carlo_tree_search). \n\tThe parameters may include:\n\t\n\t+ `simulationCount=30`: Maximum amount of simulations performed for each \n\t\tavailable move at each decision.\n\t+ `timeCap=1000ms`: Time limit for the player to decide.\n\t+ `horizon=500`: Maximum amount of moves performed in simulations.\n\t+ `agent`: Player instance used in the simulations. If undefined moves are\n\t\tchosen at random. Agents with asynchronous decisions are not supported.\n\t*/\n\tconstructor: function MonteCarloPlayer(params) {\n\t\tHeuristicPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.number('simulationCount', { defaultValue: 30, coerce: true })\n\t\t\t.number('timeCap', { defaultValue: 1000, coerce: true })\n\t\t\t.number('horizon', { defaultValue: 500, coerce: true });\n\t\tif (params) switch (typeof params.agent) {\n\t\t\tcase 'function': this.agent = new HeuristicPlayer({ heuristic: params.agent }); break;\n\t\t\tcase 'object': this.agent = params.agent; break;\n\t\t\tdefault: this.agent = null;\n\t\t}\n\t},\n\t\n\t/** `selectMoves(moves, game, player)` return an array with the best \n\tevaluated moves.\n\t*/\n\tselectMoves: function selectMoves(moves, game, player) {\n\t\tvar monteCarloPlayer = this,\n\t\t\tendTime = Date.now() + this.timeCap,\n\t\t\tgameNext = game.next.bind(game),\n\t\t\toptions = moves.map(function (move) {\n\t\t\t\treturn { \n\t\t\t\t\tmove: move, \n\t\t\t\t\tnexts: (Object.keys(move).length < 2 ? \n\t\t\t\t\t\t[game.next(move)] :\n\t\t\t\t\t\tgame.possibleMoves(copy(obj(player, [move[player]]), move)).map(gameNext)\n\t\t\t\t\t),\n\t\t\t\t\tsum: 0, \n\t\t\t\t\tcount: 0 \n\t\t\t\t};\n\t\t\t});\n\t\tfor (var i = 0; i < this.simulationCount && Date.now() < endTime; ++i) {\n\t\t\toptions.forEach(function (option) {\n\t\t\t\toption.nexts = option.nexts.filter(function (next) {\n\t\t\t\t\tvar sim = monteCarloPlayer.simulation(next, player);\n\t\t\t\t\toption.sum += sim.result[player];\n\t\t\t\t\t++option.count;\n\t\t\t\t\treturn sim.plies > 0;\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\toptions = iterable(options).greater(function (option) {\n\t\t\traiseIf(isNaN(option.sum), \"State evaluation is NaN for move \", option.move, \"!\");\n\t\t\treturn option.count > 0 ? option.sum / option.count : 0;\n\t\t}).map(function (option) {\n\t\t\treturn option.move;\n\t\t});\n\t\treturn options;\n\t},\n\t\n\t/** This player's `stateEvaluation(game, player)` runs `simulationCount` \n\tsimulations and returns the average result.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\tvar resultSum = 0, \n\t\t\tsimulationCount = this.simulationCount,\n\t\t\tsim;\n\t\tfor (var i = 0; i < simulationCount; ++i) {\n\t\t\tsim = this.simulation(game, player);\n\t\t\tresultSum += sim.result[player];\n\t\t\tif (sim.plies < 1) { // game is final.\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn simulationCount > 0 ? resultSum / simulationCount : 0;\n\t},\n\t\n\t/** A `simulation(game, player)` plays a random match from the given `game`\n\tstate and returns an object with the final state (`game`), its result \n\t(`result`) and the number of plies simulated (`plies`).\n\t*/\n\tsimulation: function simulation(game, player) {\n\t\tvar mc = this,\n\t\t\tplies, move, moves;\n\t\tfor (plies = 0; true; ++plies) {\n\t\t\tif (game.isContingent) {\n\t\t\t\tgame = game.randomNext(this.random);\n\t\t\t} else {\n\t\t\t\tmoves = game.moves();\n\t\t\t\tif (!moves) { // If game state is final ...\n\t\t\t\t\treturn { game: game, result: game.result(), plies: plies };\n\t\t\t\t} else if (plies > this.horizon) { // If past horizon ...\n\t\t\t\t\treturn { game: game, result: obj(player, this.heuristic(game, player)), plies: plies };\n\t\t\t\t} else { // ... else advance.\n\t\t\t\t\tmove = {};\n\t\t\t\t\tgame.activePlayers.forEach(function (activePlayer) {\n\t\t\t\t\t\tmove[activePlayer] = mc.agent ? mc.agent.decision(game, activePlayer) \n\t\t\t\t\t\t\t: mc.random.choice(moves[activePlayer]);\n\t\t\t\t\t});\n\t\t\t\t\tgame = game.next(move);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\traise(\"Simulation ended unexpectedly for player \", player, \" in game \", game, \"!\");\n\t},\n\t\n\t__serialize__: function __serialize__() {\n\t\treturn [this.constructor.name, { name: this.name, \n\t\t\tsimulationCount: this.simulationCount, timeCap: this.timeCap, \n\t\t\tagent: this.agent \n\t\t}];\n\t}\n}); // declare MonteCarloPlayer\n","/** # UCTPlayer\n\nAutomatic player based on Upper Confidence Bound Monte Carlo tree search.\n*/\nplayers.UCTPlayer = declare(MonteCarloPlayer, {\n\t/** The constructor parameters may include:\n\t\n\t+ `simulationCount=30`: Maximum amount of simulations performed at each decision.\n\t+ `timeCap=1000ms`: Time limit for the player to decide.\n\t*/\n\tconstructor: function UCBPlayer(params) {\n\t\tMonteCarloPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `explorationConstant=sqrt(2)`: The exploration factor used in the UCT selection.\n\t\t*/\n\t\t\t.number('explorationConstant', { defaultValue: Math.sqrt(2), coerce: true })\n\t\t;\n\t},\n\t\n\t/** Evaluate all child nodes of the given `gameTree` according to the [Upper Confidence Bound\n\tformula by L. Kocsis and Cs. Szepesvári](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.102.1296). \n\tReturns one of the greatest evaluated, chosen at random.\n\t*/\n\tselectNode: function selectNode(gameTree, totalSimulationCount, explorationConstant) {\n\t\texplorationConstant = isNaN(explorationConstant) ? this.explorationConstant : +explorationConstant;\n\t\treturn this.random.choice(iterable(gameTree.children).select(1).greater(function (n) {\n\t\t\treturn n.uct.rewards / n.uct.visits + \n\t\t\t\texplorationConstant * Math.sqrt(Math.log(totalSimulationCount) / n.uct.visits);\n\t\t}));\n\t},\n\t\n\t/** `selectMoves(moves, game, player)` return an array with the best evaluated moves.\n\t*/\n\tselectMoves: function selectMoves(moves, game, player) {\n\t\tvar root = new GameTree(null, game),\n\t\t\tendTime = Date.now() + this.timeCap,\n\t\t\tnode, simulationResult;\n\t\troot.uct = {\n\t\t\tpending: this.random.shuffle(root.possibleTransitions()), visits: 0, rewards: 0\n\t\t};\n\t\tfor (var i = 0; i < this.simulationCount && Date.now() < endTime; ++i) {\n\t\t\tnode = root;\n\t\t\twhile (node.uct.pending.length < 1 && node.childrenCount() > 0) { // Selection\n\t\t\t\tnode = this.selectNode(node, i+1, this.explorationConstant);\n\t\t\t}\n\t\t\tif (node.uct.pending.length > 0) { // Expansion\n\t\t\t\tnode = node.expand(node.uct.pending.pop());\n\t\t\t\tnode.uct = {\n\t\t\t\t\tpending: this.random.shuffle(node.possibleTransitions()), visits: 0, rewards: 0\n\t\t\t\t};\n\t\t\t}\n\t\t\tsimulationResult = this.simulation(node.state, player); // Simulation\n\t\t\tfor (; node; node = node.parent) { // Backpropagation\n\t\t\t\t++node.uct.visits;\n\t\t\t\tnode.uct.rewards += (game.normalizedResult(simulationResult.result)[player] + 1) / 2;\n\t\t\t}\n\t\t}\n\t\tmoves = iterable(root.children).select(1).greater(function (n) {\n\t\t\treturn n.uct.visits;\n\t\t}).map(function (n) {\n\t\t\treturn n.transition;\n\t\t});\n\t\treturn moves;\n\t},\n\t\n\t__serialize__: function __serialize__() {\n\t\treturn [this.constructor.name, { name: this.name, \n\t\t\tsimulationCount: this.simulationCount, timeCap: this.timeCap, \n\t\t\texplorationConstant: this.explorationConstant \n\t\t}];\n\t}\n}); // declare MonteCarloPlayer\n","/** # UserInterfacePlayer\n\nImplementation of player user interfaces and proxies.\n*/\nvar UserInterfacePlayer = players.UserInterfacePlayer = declare(Player, {\n\t/** `UserInterfacePlayer` is a generic type for all players that are proxies \n\tof user interfaces.\n\t*/\n\tconstructor: function UserInterfacePlayer(params) {\n\t\tPlayer.call(this, params);\n\t},\n\n\t/** The `participate` method assigns this players role to the given role.\n\t*/\n\tparticipate: function participate(match, role) {\n\t\tthis.role = role;\n\t\treturn this;\n\t},\n\t\n\t/** The `decision(game, player)` of this players returns a future that will \n\tbe resolved when the `perform()` method is called.\n\t*/\n\tdecision: function decision(game, player) {\n\t\tif (this.__future__ && this.__future__.isPending()) {\n\t\t\tthis.__future__.resolve(new Match.CommandQuit());\n\t\t}\n\t\tthis.__future__ = new Future();\n\t\treturn this.__future__;\n\t},\n\t\n\t/** User interfaces have to be configured to call `perform(action)` upon \n\teach significant user action.players. It resolves the future returned by the\n\t`decision()` method.\n\t*/\n\tperform: function perform(action) {\n\t\tvar future = this.__future__;\n\t\tif (future) {\n\t\t\tthis.__future__ = null;\n\t\t\tfuture.resolve(action);\n\t\t}\n\t\treturn !!future;\n\t}\n}); // declare UserInterfacePlayer.\n\n// ## User interfaces ##########################################################\n\nvar UserInterface = players.UserInterface = declare({\n\t/** `UserInterface` is the base abstract type for user interfaces that \n\tdisplay a game and allow one or more players to play. The `config` argument \n\tmay include the `match` being played.\n\t*/\n\tconstructor: function UserInterface(config) {\n\t\tthis.onBegin = this.onBegin.bind(this);\n\t\tthis.onNext = this.onNext.bind(this);\n\t\tthis.onEnd = this.onEnd.bind(this);\n\t\tif (config.match) {\n\t\t\tthis.show(config.match);\n\t\t}\n\t},\n\t\n\t/** `show(match)` discards the current state and sets up to display the \n\tgiven `match`.\n\t*/\n\tshow: function show(match) {\n\t\tif (this.match) {\n\t\t\tmatch.events.off('begin', this.onBegin);\n\t\t\tmatch.events.off('next', this.onNext);\n\t\t\tmatch.events.off('end', this.onEnd);\n\t\t}\n\t\tthis.match = match;\n\t\tmatch.events.on('begin', this.onBegin);\n\t\tmatch.events.on('next', this.onNext);\n\t\tmatch.events.on('end', this.onEnd);\n\t},\n\t\n\t/** When the player is participated of a match, callbacks are registered to \n\tthe following match's events.\n\t\n\t+ `onBegin(game)` handles the `'begin'` event of the match.\n\t*/\n\tonBegin: function onBegin(game) {\n\t\tthis.display(game);\n\t},\n\t\n\t/** + `onNext(game, next)` handles the `'move'` event of the match.\n\t*/\n\tonNext: function onNext(game, next) {\n\t\tthis.display(next);\n\t},\n\t\n\t/** + `onEnd(game, results)` handles the `'end'` event of the match.\n\t*/\n\tonEnd: function onEnd(game, results) {\n\t\tthis.results = results;\n\t\tthis.display(game);\n\t},\n\t\n\t/** `display(game)` renders the game in this user interface. Not \n\timplemented, so please override.\n\t*/\n\tdisplay: unimplemented(\"UserInterface\", \"display\"),\n\t\n\t/** `perform(action, actionRole=undefined)` makes the given player perform \n\tthe action if the player has a `perform()` method and is included in this \n\tUI's players.\n\t*/\n\tperform: function perform(action, actionRole) {\n\t\titerable(this.match.players).forEach(function (pair) {\n\t\t\tvar role = pair[0], player = pair[1];\n\t\t\tif (player instanceof UserInterfacePlayer && (!actionRole || player.role === actionRole)) {\n\t\t\t\tplayer.perform(action);\n\t\t\t}\n\t\t});\n\t}\n}); // declare UserInterface.\n\n// ### HTML based user interfaces ##############################################\n\nUserInterface.BasicHTMLInterface = declare(UserInterface, {\n\t/** `BasicHTMLInterface(config)` builds a simple HTML based UI, that renders \n\tthe game on the DOM using its `display()` method. The `config` argument may\n\tinclude:\n\t\n\t+ `document=window.document`: the DOM root.\n\t+ `container`: the DOM node to render the game in, or its name.\n\t*/\n\tconstructor: function BasicHTMLInterface(config) {\n\t\tUserInterface.call(this, config);\n\t\tthis.document = config.document || base.global.document;\n\t\tthis.container = config.container;\n\t\tif (typeof this.container === 'string') {\n\t\t\tthis.container = this.document.getElementById(this.container);\n\t\t}\n\t},\n\n\t/** On `display(game)` the `container` is emptied and the game is rendered\n\tusing its `display(ui)` method.\n\t*/\n\tdisplay: function display(game) {\n\t\tvar container = this.container, child;\n\t\twhile (child = container.firstChild) { // It seems the DOM API does not provide a method for this. :-(\n\t\t\tcontainer.removeChild(child);\n\t\t}\n\t\tgame.display(this);\n\t},\n\t\n\t/** `build()` helps DOM creation. The `nodes` argument specifies DOM \n\telements, each with an array of the shape: `[tag, attributes, elements]`.\n\t*/\n\tbuild: function build(parent, nodes) {\n\t\tvar ui = this;\n\t\tnodes.forEach(function (node) {\n\t\t\tvar element;\n\t\t\tif (Array.isArray(node)) {\n\t\t\t\telement = ui.document.createElement(node[0]);\n\t\t\t\tif (node.length > 2 && node[1]) { // There are attributes.\n\t\t\t\t\tvar attrs = node[1];\n\t\t\t\t\tfor (var attrName in attrs) if (attr.hasOwnProperty(attrName)) {\n\t\t\t\t\t\telement.setAttribute(attrName, attrs[attrName]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (node.length > 1 && node[node.length-1]) { // There are child elements.\n\t\t\t\t\tui.build(element, node[node.length-1]);\n\t\t\t\t}\n\t\t\t} else if (typeof node === 'string') {\n\t\t\t\telement = ui.document.createTextNode(node);\n\t\t\t}\n\t\t\tif (element && parent) {\n\t\t\t\tparent.appendChild(element);\n\t\t\t}\n\t\t});\n\t\treturn parent;\n\t}\n}); // declare HTMLInterface.\n","/** # WebWorkerPlayer\n\nA proxy for another player executing inside a webworker.\n*/\nvar WebWorkerPlayer = players.WebWorkerPlayer = declare(Player, {\n\t/** The constructor builds a player that is a proxy for another player executing in a webworker. \n\tThe parameters must include:\n\t*/\n\tconstructor: function WebWorkerPlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `worker`: The `Worker` instance where the actual player is executing.\n\t\t\t*/\n\t\t\t.object('worker');\n\t\tthis.worker.onmessage = base.Parallel.prototype.__onmessage__.bind(this);\n\t},\n\t\n\t/** The static `createWorker(playerBuilder)` method creates (asynchronously) and initializes a \n\tweb worker. The modules `creatartis-base` and `ludorum` are loaded in the webworker's root \n\tnamespace (`self`). If a `workerSetup` function is given, it is also run. After that, the \n\t`playerBuilder` function is called and its results stored in the variable `self.PLAYER`.\n\t*/\n\t'static createWorker': function createWorker(playerBuilder, workerSetup) {\n\t\traiseIf('string function'.indexOf(typeof playerBuilder) < 0, \"Invalid player builder: \"+ playerBuilder +\"!\");\n\t\tvar parallel = new base.Parallel();\n\t\treturn parallel.loadModule(exports, true).then(function () {\n\t\t\treturn parallel.run(\n\t\t\t\t(typeof workerSetup === 'function' ? '('+ workerSetup +')(),\\n' : '')+\n\t\t\t\t'self.PLAYER = ('+ playerBuilder +').call(self),\\n'+\n\t\t\t\t'\"OK\"'\n\t\t\t);\n\t\t}).then(function () {\n\t\t\treturn parallel.worker;\n\t\t});\n\t},\n\t\n\t/** The static `create(params)` method creates (asynchronously) and initializes a \n\t`WebWorkerPlayer`, with a web worker ready to play. The `params` must include the \n\t`playerBuilder` function to execute on the web worker's environment.\n\t*/\n\t'static create': function create(params) {\n\t\tvar WebWorkerPlayer = this;\n\t\treturn WebWorkerPlayer.createWorker(params.playerBuilder, params.workerSetup).then(function (worker) {\n\t\t\treturn new WebWorkerPlayer({name: name, worker: worker}); \n\t\t});\n\t},\n\t\n\t/** This player's `decision(game, player)` is delegated to this player's webworker, returning a \n\tfuture that will be resolved when the parallel execution is over.\n\t\n\tWarning! If this method is called while another decision is pending, the player will assume the \n\tprevious match was aborted, issuing a quit command.\n\t*/\n\tdecision: function decision(game, player) {\n\t\tif (this.__future__ && this.__future__.isPending()) {\n\t\t\tthis.__future__.resolve(Match.commandQuit);\n\t\t}\n\t\tthis.__future__ = new Future();\n\t\tthis.worker.postMessage('PLAYER.decision(Sermat.mat('+ JSON.stringify(Sermat.ser(game)) +'), '+ JSON.stringify(player) +')');\n\t\treturn this.__future__;\n\t}\n}); // declare WebWorkerPlayer","/** # Aleatory\n\nAleatories are different means of non determinism that games can use, like: dice, card decks, \nroulettes, etc. They are used by `Aleatoric` game states.\n*/\nvar Aleatory = exports.aleatories.Aleatory = declare({\n\t/** The base class implements an integer uniform random variable between a minimum and maximum\n\tvalue (inclusively).\n\t+ \n\t*/\n\tconstructor: function Aleatory(min, max) {\n\t\tswitch (arguments.length) {\n\t\t\tcase 1: this.range = [1, min]; break;\n\t\t\tcase 2: this.range = [min, max]; break;\n\t\t}\n\t},\n\t\n\t/** The `Aleatory.value()` can be used to obtain a valid random value for the random variable.\n\t*/\n\tvalue: function value(random) {\n\t\treturn (random || Randomness.DEFAULT).randomInt(this.range[0], this.range[1] + 1);\n\t},\n\t\t\n\t/** In order to properly search a game tree with aleatory nodes, the random variables' \n\tdistribution has to be known. `Aleatory.distribution()` computes the histogram for the random \n\tvariables on which this aleatory depends, as a sequence of pairs `[value, probability]`.\n\t\n\tBy default it returns a flat histogram, assuming the random variable is uniform.\n\t*/\n\tdistribution: function () {\n\t\tvar min = this.range[0], \n\t\t\tmax = this.range[1],\n\t\t\tprobability = 1 / (max - min + 1);\n\t\treturn Iterable.range(min, max + 1).map(function (value) {\n\t\t\treturn [value, probability];\n\t\t});\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Aleatory',\n\t\tserializer: function serialize_Aleatory(obj) {\n\t\t\treturn [this.range];\n\t\t}\n\t}\n}); // declare Aleatory.\n","/** # UniformAleatory\r\n\r\nAn uniform aleatory is one that ranges over a set of values, all of which have the same probability\r\nof occurrence.\r\n*/\r\nvar UniformAleatory = exports.aleatories.UniformAleatory = declare(Aleatory, {\r\n\t/** An uniform aleatory is defined by a sequence of `values`. The sequence cannot be empty, but\r\n\tone value is supported as weird as it may be.\r\n\t*/\r\n\tconstructor: function UniformAleatory(values) {\r\n\t\tthis.__values__ = iterable(values).toArray();\r\n\t\traiseIf(this.__values__.length < 1, \"No values for aleatory!\");\r\n\t},\r\n\r\n\t/** The `value` is one of the `values` used to build this aleatory, picked at random.\r\n\t*/\r\n\tvalue: function value(random) {\r\n\t\treturn (random || Randomness.DEFAULT).choice(this.__values__);\r\n\t},\r\n\t\r\n\t/** The `distribution` of an uniform aleatory is a sequence of pairs `[value, probability]`.\r\n\t*/\r\n\tdistribution: function distribution() {\r\n\t\tvar prob = 1 / this.__values__.length;\r\n\t\treturn this.__values__.map(function (v) {\r\n\t\t\treturn [v, prob];\r\n\t\t});\r\n\t},\r\n\t\r\n\t// ## Utilities ################################################################################\r\n\t\r\n\t/** Serialization and materialization using Sermat.\r\n\t*/\r\n\t'static __SERMAT__': {\r\n\t\tidentifier: 'UniformAleatory',\r\n\t\tserializer: function serialize_UniformAleatory(obj) {\r\n\t\t\treturn [this.__values__];\r\n\t\t}\r\n\t}\r\n});","/** # Dice aleatories\n\nImplementations of common dice and related functions.\n*/\nvar dice = aleatories.dice = {\n\t/** Common dice variants.\n\t*/\n\tD4: new Aleatory(1, 4),\n\tD6: new Aleatory(1, 6),\n\tD8: new Aleatory(1, 8),\n\tD10: new Aleatory(1, 10),\n\tD12: new Aleatory(1, 12),\n\tD20: new Aleatory(1, 20),\n\tD100: new Aleatory(1, 100),\n\t\n\t/** The `sumProbability` that rolling `n` dice of `s` sides yields a sum equal to `p`. Check the \n\tarticle at [Mathworld](http://mathworld.wolfram.com/Dice.html).\n\t*/\n\tsumProbability: function sumProbability(p, n, s) {\n\t\tn = n|0;\n\t\ts = s|0;\n\t\tp = p|0;\n\t\tif (isNaN(n) || isNaN(s) || isNaN(p) || n < 1 || s < 2) {\n\t\t\treturn NaN;\n\t\t} else if (p < n || p > n * s) {\n\t\t\treturn 0;\n\t\t} else {\n\t\t\tvar factorial = base.math.factorial,\n\t\t\t\tfact_n = factorial(n),\n\t\t\t\tfact_n_1 = fact_n / n; // factorial(n - 1)\n\t\t\treturn Math.pow(s, -n) *\n\t\t\t\tIterable.range(0, Math.floor((p - n) / s) + 1).map(function (k) {\n\t\t\t\t\tvar comb1 = fact_n / factorial(k) / factorial(n - k),\n\t\t\t\t\t\tx = p - s * k - 1,\n\t\t\t\t\t\tcomb2 = factorial(x) / fact_n_1 / factorial(x - n + 1);\n\t\t\t\t\treturn (k % 2 ? -1 : 1) * comb1 * comb2;\n\t\t\t\t}).sum();\n\t\t}\n\t}\n}; //// declare Dice.","/** Simple reference games with a predefined outcome, mostly for testing \n\tpurposes.\n*/\ngames.Predefined = declare(Game, {\n\t/** new games.Predefined(activePlayer, results, height=5, width=5):\n\t\tA pseudogame used for testing purposes. It will give width amount of \n\t\tmoves for each player until height moves pass. Then the match is \n\t\tfinished with the given results, or a tie as default.\n\t*/\n\tconstructor: function Predefined(activePlayer, results, height, width) {\n\t\tif (results) {\n\t\t\tthis.__results__ = results;\n\t\t\tthis.players = Object.keys(results);\n\t\t}\n\t\tGame.call(this, activePlayer);\n\t\tthis.height = isNaN(height) ? 5 : +height;\n\t\tthis.width = isNaN(width) ? 5 : +width;\n\t},\n\n\tname: 'Predefined',\n\t\n\t/** games.Predefined.players:\n\t\tDefault players for Predefined: A and B.\n\t*/\n\tplayers: ['A', 'B'],\n\n\t/** games.Predefined.__results__:\n\t\tDefault results for Predefined: a tie between A and B.\n\t*/\n\t__results__: {'A': 0, 'B': 0},\n\n\t/** games.Predefined.moves():\n\t\tMoves for a Predefined are numbers from 1 to this.width. \n\t*/\n\tmoves: function moves() {\n\t\tif (this.height > 0) {\n\t\t\treturn obj(this.activePlayer(), \n\t\t\t\tIterable.range(1, this.width + 1).toArray()\n\t\t\t);\n\t\t}\n\t},\n\n\t/** games.Predefined.result():\n\t\tReturned the predefined results if height is zero or less.\n\t*/\n\tresult: function result() {\n\t\treturn this.height > 0 ? null : this.__results__;\n\t},\n\n\t/** games.Predefined.next(moves):\n\t\tMoves are completely irrelevant. They only advance in the match.\n\t*/\n\tnext: function next() {\n\t\treturn new this.constructor(this.opponent(), this.__results__, this.height - 1, this.width);\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Predefined',\n\t\tserializer: function serialize_Predefined(obj) {\n\t\t\treturn [obj.activePlayer(), obj.__results__, obj.height, obj.width];\n\t\t}\n\t}\n}); // declare Predefined.\n","/** # Choose2Win\n\nChoose2Win is a simple silly game. Each turn one of the players can decide to win, to lose or to \npass the turn. It is meant to be used only for testing Ludorum, since a game can hardly become less \ninteresting than this.\n*/\ngames.Choose2Win = declare(Game, {\n\t/** The constructor takes a number of turns for the game to last (`Infinity` by default), the \n\tactive player and the winner if the game has ended. \n\t*/\n\tconstructor: function Choose2Win(turns, activePlayer, winner) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.__turns__ = isNaN(turns) ? Infinity : +turns;\n\t\tthis.__winner__ = winner;\t\t\n\t},\n\n\tname: 'Choose2Win',\n\t\n\t/** Players of this dummy game are labeled This and That.\n\t*/\n\tplayers: ['This', 'That'],\n\n\t/** Every turn the active player's moves are: `'win'`, `'lose'` and `'pass'`.\n\t*/\n\tmoves: function moves() {\n\t\tif (!this.__winner__ && this.__turns__ > 0) {\n\t\t\treturn obj(this.activePlayer(), ['win', 'lose', 'pass']);\n\t\t}\n\t},\n\n\t/** Victory is for whom chooses to win first. Defeat is for whom chooses to lose first. A draw \n\tonly results when the limit of turns (if any) is met.\n\t*/\n\tresult: function result() {\n\t\treturn this.__winner__ ? this.victory(this.__winner__) :\n\t\t\tthis.__turns__ < 1 ? this.draw() : null;\n\t},\n\n\t/** If a player moves to win or lose, a final game state is returned. Else the game goes on.\n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\topponent = this.opponent(activePlayer);\n\t\traiseIf(!moves.hasOwnProperty(activePlayer), 'No move for active player ', activePlayer, ' at ', this, '!');\n\t\tswitch (moves[activePlayer]) {\n\t\t\tcase 'win': return new this.constructor(this.__turns__ - 1, opponent, activePlayer);\n\t\t\tcase 'lose': return new this.constructor(this.__turns__ - 1, opponent, opponent);\n\t\t\tcase 'pass': return new this.constructor(this.__turns__ - 1, opponent);\n\t\t\tdefault: raise('Invalid move ', moves[activePlayer], ' for player ', activePlayer, ' at ', this, '!');\n\t\t}\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Choose2Win',\n\t\tserializer: function serialize_Choose2Win(obj) {\n\t\t\tvar r = [obj.__turns__, obj.activePlayer()];\n\t\t\tif (obj.__winner__) {\n\t\t\t\tr.push(obj.__winner__);\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\t}\n}); // declare Choose2Win.","/** # ConnectionGame\n\nBase class for a subset of the family of [connection games](http://en.wikipedia.org/wiki/Connection_game), \nwhich includes [TicTacToe](http://en.wikipedia.org/wiki/Tic-tac-toe), \n[ConnectFour](http://en.wikipedia.org/wiki/Connect_Four) and [Gomoku](http://en.wikipedia.org/wiki/Gomoku).\nIt implements a rectangular board, the placing of the pieces and the checks for lines.\n*/\ngames.ConnectionGame = declare(Game, {\n\t/** Boards by default have 9 rows ...\n\t*/\n\theight: 9,\n\t\n\t/** ... and 9 columns.\n\t*/\n\twidth: 9,\n\t\n\t/** A player has to make a line of 5 pieces to win, by default.\n\t*/\n\tlineLength: 5,\n\n\t/** The constructor takes the active player and the board given as a string. For the game's \n\t`board` this last string argument is used to build a [`CheckerboardFromString`](../utils/CheckerboardFromString.js.html).\n\t*/\n\tconstructor: function ConnectionGame(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = (board instanceof CheckerboardFromString) ? board :\n\t\t\tnew CheckerboardFromString(this.height, this.width, \n\t\t\t\t(board || '.'.repeat(this.height * this.width)) +''\n\t\t\t);\n\t},\n\n\tname: 'ConnectionGame',\n\t\n\t/** This base implementations names its players First and Second.\n\t*/\n\tplayers: ['First', 'Second'],\n\t\n\t/** Lines in the board are cached to accelerate the result calculation. */\n\t__lines__: (function () {\n\t\tvar CACHE = {};\n\t\tfunction __lines__(height, width, lineLength) {\n\t\t\tvar key = height +'x'+ width +'/'+ lineLength;\n\t\t\tif (!CACHE.hasOwnProperty(key)) {\n\t\t\t\tvar board = new CheckerboardFromString(height, width, '.'.repeat(height * width));\n\t\t\t\tCACHE[key] = board.lines().map(function (line) {\n\t\t\t\t\treturn line.toArray();\n\t\t\t\t}, function (line) {\n\t\t\t\t\treturn line.length >= lineLength;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\treturn CACHE[key];\n\t\t}\n\t\t__lines__.CACHE = CACHE;\n\t\treturn __lines__;\n\t})(),\n\t\n\t/** A connection game ends when either player gets the required amount of pieces aligned (either\n\thorizontally, vertically or diagonally), hence winning the game. The match ends in a tie if the \n\tboard gets full.\n\t*/\n\tresult: function result() {\n\t\tif (this.hasOwnProperty('__result__')) {\n\t\t\treturn this.__result__;\n\t\t}\n\t\tvar lineLength = this.lineLength,\n\t\t\tlines = this.board.asStrings(this.__lines__(this.height, this.width, lineLength)).join(' ');\n\t\tfor (var i = 0; i < this.players.length; ++i) {\n\t\t\tif (lines.indexOf(i.toString(36).repeat(lineLength)) >= 0) {\n\t\t\t\treturn this.__result__ = this.victory([this.players[i]]);\n\t\t\t}\n\t\t}\n\t\tif (lines.indexOf('.') < 0) { // No empty squares means a tie.\n\t\t\treturn this.__result__ = this.draw();\n\t\t}\n\t\treturn this.__result__ = null; // The game continues.\n\t},\n\t\n\t/** The active player can place a piece in any empty square in the board. The moves are indices\n\tin the board's string representation.\n\t*/\n\tmoves: function moves() {\n\t\tif (this.hasOwnProperty('__moves__')) {\n\t\t\treturn this.__moves__;\n\t\t} else if (this.result()) {\n\t\t\treturn this.__moves__ = null;\n\t\t} else {\n\t\t\treturn this.__moves__ = obj(this.activePlayer(), \n\t\t\t\titerable(this.board.string).filter(function (c) {\n\t\t\t\t\treturn c === '.';\n\t\t\t\t}, function (c, i) {\n\t\t\t\t\treturn i;\n\t\t\t\t}).toArray()\n\t\t\t);\n\t\t}\n\t},\n\n\t/** To get from one game state to the next, an active player's piece in the square indicated by \n\tits move.\n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tplayerIndex = this.players.indexOf(activePlayer),\n\t\t\tsquareIndex = +moves[activePlayer],\n\t\t\trow = (squareIndex / this.width) >> 0,\n\t\t\tcolumn = squareIndex % this.width;\n\t\treturn new this.constructor((playerIndex + 1) % this.players.length, \n\t\t\tthis.board.place([row, column], playerIndex.toString(36))\n\t\t);\n\t},\n\t\n\t// ## User intefaces ###########################################################################\n\t\n\t/** The `display(ui)` method is called by a `UserInterface` to render the game state. The only \n\tsupported user interface type is `BasicHTMLInterface`. The look can be configured using CSS \n\tclasses.\n\t*/\n\tdisplay: function display(ui) {\n\t\traiseIf(!ui || !(ui instanceof UserInterface.BasicHTMLInterface), \"Unsupported UI!\");\n\t\tvar moves = this.moves(),\n\t\t\tactivePlayer = this.activePlayer(),\n\t\t\tboard = this.board;\n\t\tmoves = moves && moves[activePlayer];\n\t\tvar table = this.board.renderAsHTMLTable(ui.document, ui.container, function (data) {\n\t\t\t\tdata.className = data.square === '.' ? 'ludorum-empty' : 'ludorum-player'+ data.square;\n\t\t\t\tdata.innerHTML = data.square === '.' ? \" \" : \"●\";\n\t\t\t\tvar i = data.coord[0] * board.height + data.coord[1];\n\t\t\t\tif (moves && moves.indexOf(i) >= 0) {\n\t\t\t\t\tdata.move = i;\n\t\t\t\t\tdata.activePlayer = activePlayer;\n\t\t\t\t\tdata.onclick = ui.perform.bind(ui, data.move, activePlayer);\n\t\t\t\t}\n\t\t\t});\n\t\treturn ui;\n\t},\n\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'ConnectionGame',\n\t\tserializer: function serialize_ConnectionGame(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t}\n}); // declare ConnectionGame.","/** # Odds & Evens\n\n[Odds and evens](http://en.wikipedia.org/wiki/Odds_and_evens) is a classic child game, implemented \nas a simple example of a simultaneous game, i.e. a game in which more than one player can move at \nany given turn.\n*/\ngames.OddsAndEvens = declare(Game, {\n\t/** The constructor takes:\n\t\n\t\t+ `turns=1`: The number of turns remaining in the game.\n\t\t+ `points=`: The scores for every player.\n\t*/\n\tconstructor: function OddsAndEvens(turns, points) {\n\t\tGame.call(this, this.players); // Both players are active.\n\t\tthis.turns = isNaN(turns) ? 1 : +turns;\n\t\tthis.points = points || { Evens: 0, Odds: 0 };\n\t},\n\n\tname: 'OddsAndEvens',\n\t\n\t/** Players for odds and evens are called like that: Evens and Odds.\n\t*/\n\tplayers: ['Evens', 'Odds'],\n\n\t/** Each turn both players draw either a 1 or a 2.\n\t*/\n\tmoves: function moves() {\n\t\treturn this.turns < 1 ? null : { Evens: [1, 2], Odds: [1, 2] };\n\t},\n\n\t/** The winner is the player with more points.\n\t*/\n\tresult: function result() {\n\t\tvar pointDifference = this.points.Evens - this.points.Odds;\n\t\treturn this.turns > 0 ? null : {\n\t\t\tEvens: +pointDifference,\n\t\t\tOdds: -pointDifference\n\t\t};\n\t},\n\n\t/** The player matching the parity of the moves sum earns a point.\n\t*/\n\tnext: function next(moves) {\n\t\traiseIf(typeof moves.Evens !== 'number' || typeof moves.Odds !== 'number',\n\t\t\t'Invalid moves '+ (JSON.stringify(moves) || moves) +'!');\n\t\tvar parity = (moves.Evens + moves.Odds) % 2 === 0;\n\t\treturn new this.constructor(this.turns - 1, {\n\t\t\tEvens: this.points.Evens + (parity ? 1 : 0),\n\t\t\tOdds: this.points.Odds + (parity ? 0 : 1)\n\t\t});\n\t},\n\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'OddsAndEvens',\n\t\tserializer: function serialize_OddsAndEvens(obj) {\n\t\t\treturn [obj.turns, obj.points];\n\t\t}\n\t}\n}); // declare OddsAndEvens.\n","/** # TicTacToe.\n\nImplementation of the traditional [Tic-Tac-Toe game](http://en.wikipedia.org/wiki/Tictactoe).\n*/\ngames.TicTacToe = declare(Game, {\n\tname: 'TicTacToe',\n\n\t/** The constructor takes the `activePlayer` (`\"Xs\"` by default) and the `board` as a string \n\t(empty board as default).\n\t*/\n\tconstructor: function TicTacToe(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = board || '_________';\n\t},\n\t\n\t/** This game's players are `\"Xs\"` and `\"Os\"`.\n\t*/\n\tplayers: ['Xs', 'Os'],\n\t\n\t/** A match ends with a victory for any player that has three marks in line, or a draw if the \n\tboard is full.\n\t*/\n\tresult: (function () {\n\t\treturn function result() {\t\t\t\n\t\t\tif (this.board.match(this.WIN_X)) { // Xs wins.\n\t\t\t\treturn this.victory([\"Xs\"]);\n\t\t\t} else if (this.board.match(this.WIN_O)) { // Os wins.\n\t\t\t\treturn this.victory([\"Os\"]);\n\t\t\t} else if (this.board.indexOf('_') < 0) { // No empty squares means a tie.\n\t\t\t\treturn this.draw();\n\t\t\t} else {\n\t\t\t\treturn null; // The game continues.\n\t\t\t}\n\t\t};\n\t})(),\n\t\n\t/** The active player's `moves()` are the indexes of empty squares in the board.\n\t*/\n\tmoves: function moves() {\n\t\tif (!this.result()) {\n\t\t\tvar result = {};\n\t\t\tresult[this.activePlayer()] = iterable(this.board).filter(function (chr, i) {\n\t\t\t\treturn chr === '_'; // Keep only empty squares.\n\t\t\t}, function (chr, i) {\n\t\t\t\treturn i; // Grab the index.\n\t\t\t}).toArray();\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\t\t\n\t},\n\t\n\t/** The `next(moves)` game state puts the mark of the active player in the square indicated by \n\tthe move. \n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(), \n\t\t\tmove = +moves[activePlayer];\n\t\tif (isNaN(move) || this.board.charAt(move) !== '_') {\n\t\t\tthrow new Error('Invalid move '+ JSON.stringify(moves) +' for board '+ this.board +\n\t\t\t\t' (moves= '+ JSON.stringify(moves) +').');\n\t\t}\n\t\tvar newBoard = this.board.substring(0, move) + activePlayer.charAt(0) + this.board.substring(move + 1);\n\t\treturn new this.constructor(this.opponent(activePlayer), newBoard);\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'TicTacToe',\n\t\tserializer: function serialize_TicTacToe(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t},\n\t\n\t// ## User intefaces ###########################################################################\n\t\n\t/** `printBoard()` creates a text (ASCII) version of the board.\n\t*/\n\tprintBoard: function printBoard() {\n\t\tvar board = this.board;\n\t\treturn [\n\t\t\tboard.substr(0,3).split('').join('|'), '-+-+-',\n\t\t\tboard.substr(3,3).split('').join('|'), '-+-+-',\n\t\t\tboard.substr(6,3).split('').join('|')\n\t\t].join('\\n');\n\t},\n\t\n\t/** The `display(ui)` method is called by a `UserInterface` to render the game state. The only \n\tsupported user interface type is `BasicHTMLInterface`. The look can be configured using CSS \n\tclasses.\n\t*/\n\tdisplay: function display(ui) {\n\t\traiseIf(!ui || !(ui instanceof UserInterface.BasicHTMLInterface), \"Unsupported UI!\");\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tmoves = this.moves(),\n\t\t\tboard = this.board,\n\t\t\tclassNames = { 'X': \"ludorum-square-Xs\", 'O': \"ludorum-square-Os\", '_': \"ludorum-square-empty\" },\n\t\t\tsquareHTML = { 'X': \"X\", 'O': \"O\", '_': \" \" };\n\t\tmoves = moves && moves[activePlayer] && moves[activePlayer].length > 0;\n\t\t(new CheckerboardFromString(3, 3, this.board, '_'))\n\t\t\t.renderAsHTMLTable(ui.document, ui.container, function (data) {\n\t\t\t\tdata.className = classNames[data.square];\n\t\t\t\tdata.innerHTML = squareHTML[data.square];\n\t\t\t\tif (moves && data.square === '_') {\n\t\t\t\t\tdata.move = data.coord[0] * 3 + data.coord[1];\n\t\t\t\t\tdata.activePlayer = activePlayer;\n\t\t\t\t\tdata.onclick = ui.perform.bind(ui, data.move, activePlayer);\n\t\t\t\t}\n\t\t\t});\n\t\treturn ui;\n\t},\n\t\n\t// ## Heuristics and AI ########################################################################\n\t\n\t/** `TicTacToe.heuristics` is a bundle of helper functions to build heuristic evaluation \n\tfunctions for this game.\n\t*/\n\t\"static heuristics\": {\n\t\t/** `heuristicFromWeights(weights)` builds an heuristic evaluation function from weights for\n\t\teach square in the board. The result of the function is the weighted sum, empty squares \n\t\tbeing ignored, opponent squares considered negative.\n\t\t*/\n\t\theuristicFromWeights: function heuristicFromWeights(weights) {\n\t\t\tvar weightSum = iterable(weights).map(Math.abs).sum();\n\t\t\tfunction __heuristic__(game, player) {\n\t\t\t\tvar playerChar = player.charAt(0);\n\t\t\t\treturn iterable(game.board).map(function (square, i) {\n\t\t\t\t\treturn (square === '_' ? 0 : weights[i] * (square === playerChar ? 1 : -1));\n\t\t\t\t}).sum() / weightSum;\n\t\t\t}\n\t\t\t__heuristic__.weights = weights;\n\t\t\treturn __heuristic__;\n\t\t}\n\t},\n\t\n\t// ## TicTacToe type initialization ############################################################\n\t\n\t'': function () { \n\t\t/** The regular expressions `WIN_X` and `WIN_O` used in the victory test are calculated \n\t\there.\n\t\t*/\n\t\tvar board3x3 = new CheckerboardFromString(3, 3, '_'.repeat(9)),\n\t\t\tlines = board3x3.sublines(board3x3.lines(), 3);\n\t\tthis.prototype.WIN_X = new RegExp(board3x3.asRegExps(lines, 'X', '.'));\n\t\tthis.prototype.WIN_O = new RegExp(board3x3.asRegExps(lines, 'O', '.'));\n\t\t\n\t\t/** The `defaultHeuristic `for TicTacToe is based on weights for each square. Center is \n\t\tworth 5, corners 2 and the other squares 1.\n\t\t*/\n\t\tthis.heuristics.defaultHeuristic = this.heuristics\n\t\t\t.heuristicFromWeights([2,1,2,1,5,1,2,1,2]);\n\t}\t\n}); // declare TicTacToe","/** Implementation of the [Toads & Frogs](http://en.wikipedia.org/wiki/Toads_and_Frogs_%28game%29) \n\tgame.\n*/\ngames.ToadsAndFrogs = declare(Game, {\n\t/** new games.ToadsAndFrogs(activePlayer=\"Toads\", board='TTT__FFF'):\n\t\tConstructor of Toads & Frogs games. The first player is always Toads.\n\t*/\n\tconstructor: function ToadsAndFrogs(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = board || ToadsAndFrogs.board();\n\t},\n\t\n\t/** static games.ToadsAndFrogs.board(chips=3, separation=2):\n\t\tMakes a board for Toads & Frogs. This is a single row with the given \n\t\tnumber of chips for each player (toads to the left and frogs to the\n\t\tright) separated by the given number of empty spaces.\n\t*/\n\t\"static board\": function board(chips, separation) {\n\t\tchips = isNaN(chips) ? 3 : +chips;\n\t\tseparation = isNaN(separation) ? 2 : +separation;\n\t\treturn 'T'.repeat(chips) + '_'.repeat(separation) + 'F'.repeat(chips);\n\t},\n\t\n\tname: 'ToadsAndFrogs',\n\t\n\t/** games.ToadsAndFrogs.players:\n\t\tThere are two roles in this game: \"Toads\" and \"Frogs\".\n\t*/\n\tplayers: ['Toads', 'Frogs'],\n\t\n\t/** games.ToadsAndFrogs.result():\n\t\tThe match finishes when one player cannot move, hence losing the game.\n\t*/\n\tresult: function result() {\n\t\treturn this.moves() ? null : this.defeat();\n\t},\n\t\n\t/** games.ToadsAndFrogs.moves():\n\t*/\n\tmoves: function moves() {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tresult = {}, \n\t\t\tms = result[activePlayer] = [];\n\t\tthis.board.replace(activePlayer == this.players[0] ? /TF?_/g : /_T?F/g, function (m, i) {\n\t\t\tms.push(i);\n\t\t\treturn m;\n\t\t});\n\t\treturn ms.length > 0 ? result : null;\n\t},\n\t\n\t/** games.ToadsAndFrogs.next(moves):\n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(), \n\t\t\tmove = moves[activePlayer], \n\t\t\tchip = activePlayer.charAt(0),\n\t\t\tboard = this.board;\n\t\tif (board.substr(move, 2) == 'T_') {\n\t\t\tboard = board.substring(0, move) + '_T' + board.substring(move + 2);\n\t\t} else if (board.substr(move, 2) == '_F') {\n\t\t\tboard = board.substring(0, move) + 'F_' + board.substring(move + 2);\n\t\t} else if (board.substr(move, 3) == 'TF_') {\n\t\t\tboard = board.substring(0, move) + '_FT' + board.substring(move + 3);\n\t\t} else if (board.substr(move, 3) == '_TF') {\n\t\t\tboard = board.substring(0, move) + 'FT_' + board.substring(move + 3);\n\t\t} else {\n\t\t\tthrow new Error('Invalid move ', move, ' for board <', board, '>.');\n\t\t}\n\t\treturn new this.constructor(this.opponent(), board);\n\t},\n\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'ToadsAndFrogs',\n\t\tserializer: function serialize_ToadsAndFrogs(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t}\t\n}); // declare ToadsAndFrogs\n","/** # Pig.\n\n[Pig](http://en.wikipedia.org/wiki/Pig_%28dice_game%29) is a simple dice betting game, used as an \nexample of a game with random variables.\n*/\ngames.Pig = declare(Game, {\n\t/** The constructor takes:\n\t\n\t\t+ `activePlayer='One'`: The active player.\n\t\t+ `goal=100`: The amount of points a player has to reach to win the game.\n\t\t+ `scores`: The scores so far in the match.\n\t\t+ `rolls`: The rolls the active player has made in his turn.\n\t*/\n\tconstructor: function Pig(activePlayer, goal, scores, rolls) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.goal = isNaN(goal) ? 100 : +goal;\n\t\tthis.__scores__ = scores || iterable(this.players).zip([0, 0]).toObject();\n\t\tthis.__rolls__ = rolls || [];\n\t},\n\t\n\tname: 'Pig',\n\t\n\t/** Players for Pig are named `One`, `Two`.\n\t*/\n\tplayers: ['One', 'Two'],\n\n\t/** The active player can either hold and pass the turn, or roll.\n\t*/\n\tmoves: function moves() {\n\t\tif (!this.result()) {\n\t\t\tvar activePlayer = this.activePlayer(),\n\t\t\t\tcurrentScore = this.__scores__[activePlayer] + iterable(this.__rolls__).sum();\n\t\t\treturn obj(activePlayer, this.__rolls__.length < 1 ? ['roll'] :\n\t\t\t\tcurrentScore >= this.goal ? ['hold'] : ['roll', 'hold']);\n\t\t}\n\t},\n\n\t/** A Pig match finishes when one player reaches or passes the goal score. The result for each \n\tplayer is the difference between its score and its opponent's score.\n\t*/\n\tresult: function result() {\n\t\tvar score0 = this.__scores__[this.players[0]],\n\t\t\tscore1 = this.__scores__[this.players[1]];\n\t\tif (score0 >= this.goal || score1 >= this.goal) {\n\t\t\tvar r = {};\n\t\t\tr[this.players[0]] = Math.min(this.goal, score0) - Math.min(this.goal, score1);\n\t\t\tr[this.players[1]] = -r[this.players[0]];\n\t\t\treturn r;\n\t\t}\n\t},\n\n\t/** If the active player holds, it earns the sum of the rolls made so in its turn. If the move \n\tis roll, a die is rolled. A roll of 1 stops the this turn and the active player earns no \n\tpoints. A roll of 2 or up, makes the turn continue.\n\t\n\tFor this game mechanic, an [contingent game state](../Contingent.js.html) is used. If the move \n\tis `roll`, an instance of this class is build and returned using the [dice shotcuts](\n\t../aleatories/dice.js.html) as random variables. This aleatoric game state will call the `next` \n\tmethod again with the same moves and the values of the random variables, and then the match will\n\tcontinue.\n\t*/\n\tnext: function next(moves, haps) {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tmove = moves && moves[activePlayer];\n\t\traiseIf(!move, 'No move for active player ', activePlayer, ' at ', this, '!');\n\t\tif (move === 'hold') {\n\t\t\tvar scores = copy(this.__scores__);\n\t\t\tscores[activePlayer] += iterable(this.__rolls__).sum();\n\t\t\treturn new this.constructor(this.opponent(), this.goal, scores, []);\n\t\t} else if (move === 'roll') {\n\t\t\tvar roll = (haps && haps.die)|0;\n\t\t\tif (!roll) { // Dice has not been rolled.\n\t\t\t\treturn new Contingent({ die: aleatories.dice.D6 }, this, moves);\n\t\t\t} else { // Dice has been rolled.\n\t\t\t\treturn (roll > 1) ? \n\t\t\t\t\tnew this.constructor(activePlayer, this.goal, this.__scores__, this.__rolls__.concat(roll)) :\n\t\t\t\t\tnew this.constructor(this.opponent(), this.goal, this.__scores__, []);\n\t\t\t}\n\t\t} else {\n\t\t\traise(\"Invalid moves \", JSON.stringify(moves), \" at \", this, \"!\");\n\t\t}\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\n\t/** The `resultBounds` for a Pig game are estimated with the goals.\n\t*/\n\tresultBounds: function resultBounds() {\n\t\treturn [-this.goal, +this.goal];\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Pig',\n\t\tserializer: function serialize_Pig(obj) {\n\t\t\treturn [obj.activePlayer(), obj.goal, obj.__scores__, obj.__rolls__];\n\t\t}\n\t}\n}); // Pig.\n","/** # Mutropas\n\nMutropas is a game invented for Ludorum as a simple example of a game of hidden (a.k.a. incomplete)\ninformation. It is also a simultaneous game.\n*/\ngames.Mutropas = declare(Game, {\n\tname: 'Mutropas',\n\t\n\t/** The players' roles are `\"Left\"` and `\"Right\"`.\n\t*/\n\tplayers: ['Left', 'Right'],\n\n\t/** The constructor takes an `args` object with:\n\t\n\t+ `pieces`: an object with the available pieces for each player. By default pieces get randomly\n\tdealt.\n\t\n\t+ `scores`: an object with current score for each player (0 by default for all players).\n\t\n\t+ `random`: the pseudorandom number generator to use (`base.Randomness.DEFAULT` by default).\n\t*/\n\tconstructor: function Mutropas(args) {\n\t\tGame.call(this, this.players);\n\t\targs = args || {};\n\t\tthis.playedPieces = args.playedPieces || [];\n\t\tthis.pieces = args.pieces || this.dealPieces();\n\t\tthis.__scores__ = args.scores || obj(this.players[0], 0, this.players[1], 0);\n\t},\n\t\n\t\n\t/** All the pieces to be used in a match of Mutropas are stored in `allPieces`, which by default\n\thas the numbers from 0 to 8.\n\t*/\n\tallPieces: Iterable.range(9).toArray(),\t\n\t\n\t/** The method `dealPieces` is used to split the pieces randomly between all players. Half the\n\tpieces go to each player, and one is left out.\n\t*/\n\tdealPieces: function dealPieces(random) {\n\t\trandom = random || Randomness.DEFAULT;\n\t\tvar piecesPerPlayer = (this.allPieces.length / 2)|0,\n\t\t\tsplit1 = random.split(piecesPerPlayer, this.allPieces),\n\t\t\tsplit2 = random.split(piecesPerPlayer, split1[1]);\n\t\treturn obj(this.players[0], split1[0], this.players[1], split2[0]);\n\t},\n\t\n\t/** Mutropas is a simultaneous game. Hence every turn all players can move. The moves are the\n\tpieces of each player that have not been played.\n\t*/\n\tmoves: function moves() {\n\t\treturn this.result() ? null : copy({}, this.pieces);\n\t},\n\t\n\t/** If all pieces are put in a circle, each piece beats half the pieces next to it, and it is \n\tbeaten by half the pieces before it. For example if `allPieces` where `[0,1,2,3,4]`:\n\t\n\t+ piece `1` would beat pieces `2` and `3`, and lose against `4` and `0`,\n\t+ piece `2` would beat pieces `3` and `4`, and lose against `0` and `1`,\n\t+ piece `4` would beat pieces `0` and `1`, and lose against `2` and `3`,\n\t\n\tThe `moveResult` returns 1 if `piece1` beats `piece2` or -1 if otherwise.\n\t*/\n\tmoveResult: function moveResult(piece1, piece2) {\n\t\tvar upperBound = iterable(this.allPieces).max(0) + 1;\n\t\tif (piece1 < piece2) {\n\t\t\treturn piece2 - piece1 <= (upperBound / 2) ? 1 : -1;\n\t\t} else if (piece1 > piece2) {\n\t\t\treturn piece1 - piece2 >= (upperBound / 2) + 1 ? 1 : -1;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t},\n\t\n\t/** Each turn all players play a piece, and the player who plays the greatest piece wins a \n\tpoint.\n\t*/\n\tnext: function next(moves) {\n\t\tvar player0 = this.players[0], player1 = this.players[1],\n\t\t\tmove0 = moves[player0], move1 = moves[player1],\n\t\t\tpieces = this.pieces;\n\t\traiseIf(pieces[player0].indexOf(move0) < 0, \"Invalid move \", JSON.stringify(move0),\n\t\t\t\" for player \", player0, \"! (moves= \", JSON.stringify(moves), \")\");\n\t\traiseIf(pieces[player1].indexOf(move1) < 0, \"Invalid move \", JSON.stringify(move1),\n\t\t\t\" for player \", player1, \"! (moves= \", JSON.stringify(moves), \")\");\n\t\tvar moveResult = this.moveResult(move0, move1);\n\t\treturn new this.constructor({\n\t\t\trandom: this.random,\n\t\t\tplayedPieces: this.playedPieces.concat([move0, move1]),\n\t\t\tpieces: obj(\n\t\t\t\tplayer0, pieces[player0].filter(function (p) { \n\t\t\t\t\treturn p !== move0; \n\t\t\t\t}), \n\t\t\t\tplayer1, pieces[player1].filter(function (p) { \n\t\t\t\t\treturn p !== move1;\n\t\t\t\t})\n\t\t\t),\n\t\t\tscores: obj(\n\t\t\t\tplayer0, this.__scores__[player0] + moveResult,\n\t\t\t\tplayer1, this.__scores__[player1] - moveResult\n\t\t\t)\n\t\t});\n\t},\n\t\n\t/** The game's `score` is simply the sum of the move results for each player.\n\t*/\n\tscores: function scores() {\n\t\treturn copy({}, this.__scores__);\n\t},\n\t\n\t/** A game of Mutropas ends when the players have no more pieces to play. The result is the \n\tdifference in scores.\n\t*/\n\tresult: function result() {\n\t\tvar players = this.players;\n\t\tif (this.playedPieces.length >= this.allPieces.length - 1) {\n\t\t\tvar scores = this.scores();\n\t\t\treturn this.zerosumResult(scores[players[0]] - scores[players[1]], players[0]);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t},\n\t\n\t// ## Game views ###############################################################################\n\t\n\t/** The method `__possiblePieces__` calculates the pieces the `player` may have.\n\t*/\n\t__possiblePieces__: function __possiblePieces__(player) {\n\t\tvar playedPieces = this.playedPieces,\n\t\t\topponentPieces = this.pieces[this.opponent(player)],\n\t\t\tpossiblePieces = iterable(this.allPieces).filter(function (p) {\n\t\t\t\treturn playedPieces.indexOf(p) < 0 && // p has not been played yet ...\n\t\t\t\t\topponentPieces.indexOf(p) < 0; // ... and the opponent does not have it.\n\t\t\t});\n\t\treturn possiblePieces.combinations(possiblePieces.count() - 1);\n\t},\n\t\n\t/** In this view of the game the hidden information is modelled as random variables. The \n\taleatory that is returned ranges over all possible piece sets that the opponent of the given\n\t`player` may have. After each possibility the assumption is maintained for the rest of the\n\tgame.\n\t\n\tThis allows to model the uncertainty that each player has about its opponent's pieces. By doing\n\tso an artificial player that searches the game space cannot infer the pieces the opponent has,\n\tand hence it cannot cheat.\n\t*/\t\n\tview: function view(player) {\n\t\tvar opponent = this.opponent(player);\n\t\treturn new Contingent({ pieces: new UniformAleatory(this.__possiblePieces__(opponent)) }, this);\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Mutropas',\n\t\tserializer: function serialize_Mutropas(obj) {\n\t\t\treturn [{\n\t\t\t\tpieces: obj.pieces, \n\t\t\t\tplayedPieces: obj.playedPieces,\n\t\t\t\tscores: obj.__scores__\n\t\t\t}];\n\t\t}\n\t}\n}); // declare Mutropas","/** # Bahab\n\nBahab is a chess-like board game originally designed for Ludorum.\n*/\ngames.Bahab = declare(Game, {\n\tname: 'Bahab',\n\t\n\t/** Players are `Uppercase` and `Lowercase`.\n\t*/\n\tplayers: ['Uppercase', 'Lowercase'],\n\t\n\t/** The constructor takes the `activePlayer` (Uppercase by default) and the `board` as a string \n\t(`initialBoard` by default).\n\t*/\n\tconstructor: function Bahab(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = board instanceof CheckerboardFromString ? board\n\t\t\t: new CheckerboardFromString(5, 5, board || this.initialBoard);\n\t},\n\t\n\t/** The `initialBoard` has two ranks of pieces for each player. All B pieces except one A piece \n\tat the center of the first rank.\n\t*/\n\tinitialBoard: ['BBABB', 'BBBBB', '.....', 'bbbbb', 'bbabb'].join(''),\n\n\t/** `__PLAYER_ENDGAME_RE__` regular expressions are used to optimize result calculations. They \n\tmatch if the player has no A piece or if its opponent has an A piece in its rank.\n\t*/\n\t__PLAYER_ENDGAME_RE__: {\n\t\tUppercase: /^[.Bab]+$|^.{0,4}[a]/, \n\t\tLowercase: /^[.bAB]+$|[A].{0,4}$/ \n\t},\n\t\n\t/** A player wins when it moves its A piece to the opponent's first rank, and loses when its A \n\tpiece is captured by the opponent.\n\t*/\n\tresult: function result() {\n\t\tvar board = this.board.string, player;\n\t\tfor (var i = 0; i < 2; ++i) {\n\t\t\tplayer = this.players[i];\n\t\t\tif (board.match(this.__PLAYER_ENDGAME_RE__[player])) {\n\t\t\t\treturn this.defeat(player); \n\t\t\t}\n\t\t}\n\t\treturn this.moves() ? null : this.defeat(this.activePlayer());\n\t},\n\t\n\t/** `__PLAYER_PIECES_RE__` regular expressions are used to optimize move calculations.\n\t*/\n\t__PLAYER_PIECES_RE__: {\n\t\tUppercase: /[AB]/g,\n\t\tLowercase: /[ab]/g\n\t},\n\t\n\t/** All pieces move one square forward. Piece A can move straight backwards or diagonally \n\tforward, and B pieces move only diagonally forward. Pieces can move to any square that is empty \n\tor occupied by an opponent's piece of the same type. If the piece moves to an occupied square, \n\tit captures the piece in it.\n\t*/\n\tmoves: function moves() {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tpieceRegExp = this.__PLAYER_PIECES_RE__[activePlayer],\n\t\t\tboard = this.board,\n\t\t\t_moves = [];\n\t\tboard.string.replace(pieceRegExp, function (piece, i) {\n\t\t\tvar coord = [(i / 5)|0, i % 5], pieceMoves;\n\t\t\tswitch (piece) {\n\t\t\t\tcase 'A': pieceMoves = [[+1,-1], [-1, 0], [+1,+1]]; break;\n\t\t\t\tcase 'B': pieceMoves = [[+1,-1], [+1,+1]]; break;\n\t\t\t\tcase 'a': pieceMoves = [[-1,-1], [+1, 0], [-1,+1]]; break;\n\t\t\t\tcase 'b': pieceMoves = [[-1,-1], [-1,+1]]; break;\n\t\t\t}\n\t\t\titerable(pieceMoves).forEachApply(function (dx, dy) {\n\t\t\t\tvar coordTo = [coord[0] + dx, coord[1] + dy],\n\t\t\t\t\tsquareTo = board.square(coordTo);\n\t\t\t\tif (board.isValidCoord(coordTo) && !squareTo.match(pieceRegExp) &&\n\t\t\t\t\t\t(squareTo == '.' || piece.toLowerCase() == squareTo.toLowerCase())) {\n\t\t\t\t\t_moves.push([coord, coordTo]); // Valid coordinate and not occupied by a friendly piece.\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn piece;\n\t\t});\n\t\treturn _moves.length > 0 ? obj(activePlayer, _moves) : null;\n\t},\n\t\n\t/** Valid move for this game are pairs of coordinates (`[row, column]`), the first one being \n\twhere the moving piece starts, and the second one being where the moving piece ends.\t\n\t*/\n\tnext: function next(moves) {\n\t\tif (!moves) {\n\t\t\tthrow new Error(\"Invalid moves \"+ moves +\"!\");\n\t\t}\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tmove = moves[activePlayer];\n\t\tif (!Array.isArray(moves[activePlayer])) {\n\t\t\tthrow new Error(\"Invalid moves \"+ JSON.stringify(moves) +\"!\");\n\t\t}\n\t\treturn new this.constructor(this.opponent(), this.board.move(move[0], move[1]));\n\t},\n\t\n\t// ## User intefaces ###########################################################################\n\t\n\t/** The `display(ui)` method is called by a `UserInterface` to render the game state. The only \n\tsupported user interface type is `BasicHTMLInterface`. The look can be configured using CSS \n\tclasses.\n\t*/\n\tdisplay: function display(ui) {\n\t\traiseIf(!ui || !(ui instanceof UserInterface.BasicHTMLInterface), \"Unsupported UI!\");\n\t\treturn this.__displayHTML__(ui);\n\t},\n\t\n\t/** The game board is rendered in HTML as a table. The look can be customized with CSS classes.\n\t*/\n\t__displayHTML__: function __displayHTML__(ui) {\n\t\tvar game = this,\n\t\t\tmoves = this.moves(),\n\t\t\tactivePlayer = this.activePlayer(),\n\t\t\tboard = this.board,\n\t\t\tclassNames = {\n\t\t\t\t'A': \"ludorum-square-Uppercase-A\", 'B': \"ludorum-square-Uppercase-B\",\n\t\t\t\t'a': \"ludorum-square-Lowercase-A\", 'b': \"ludorum-square-Lowercase-B\",\n\t\t\t\t'.': \"ludorum-square-empty\"\n\t\t\t},\n\t\t\tmovesByFrom = moves ? iterable(moves[activePlayer]).groupAll(function (m) {\n\t\t\t\treturn JSON.stringify(m[0]);\n\t\t\t}) : {},\n\t\t\tselectedMoves = ui.selectedPiece && \n\t\t\t\tmovesByFrom[JSON.stringify(ui.selectedPiece)].map(function (m) {\n\t\t\t\t\treturn JSON.stringify(m[1]);\n\t\t\t\t});\n\t\tboard.renderAsHTMLTable(ui.document, ui.container, function (data) {\n\t\t\tdata.className = classNames[data.square];\n\t\t\tdata.innerHTML = data.square == '.' ? ' ' : data.square;\n\t\t\tif (ui.selectedPiece) {\n\t\t\t\tif (selectedMoves && selectedMoves.indexOf(JSON.stringify(data.coord)) >= 0) {\n\t\t\t\t\tdata.className = \"ludorum-square-\"+ activePlayer +\"-move\";\n\t\t\t\t\tdata.onclick = function () {\n\t\t\t\t\t\tvar selectedPiece = ui.selectedPiece;\n\t\t\t\t\t\tui.selectedPiece = (void 0);\n\t\t\t\t\t\tui.perform([selectedPiece, data.coord], activePlayer);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (movesByFrom.hasOwnProperty(JSON.stringify(data.coord))) {\n\t\t\t\tdata.onclick = function () {\n\t\t\t\t\tui.selectedPiece = data.coord;\n\t\t\t\t\tui.display(game); // Redraw the game state.\t\t\t\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t\treturn ui;\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Bahab',\n\t\tserializer: function serialize_Bahab(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t}\n}); // declare Bahab.","/** # RoundRobin\n\n[Round-robins](http://en.wikipedia.org/wiki/Round-robin_tournament) are \ntournaments where all players play against each other a certain number of times.\n*/\ntournaments.RoundRobin = declare(Tournament, {\n\t/** The constructor takes the `game` to be played, the `players` and the \n\tamount of matches each player should play (`matchCount`).\n\t*/\n\tconstructor: function RoundRobin(game, players, matchCount) {\n\t\tTournament.call(this, game, players);\n\t\tthis.matchCount = isNaN(matchCount) ? game.players.length : +matchCount;\n\t\tthis.__advance__ = this.__matches__().chain(Iterable.repeat(null)).__iter__();\n\t},\n\n\t/** Round-robin matches make every player plays `matchCount` matches for \n\teach role in the game against all the other opponents.\n\t*/\n\t__matches__: function __matches__() {\n\t\tvar tournament = this,\n\t\t\tgame = this.game,\n\t\t\tms = iterable(this.players);\n\t\tms = ms.product.apply(ms, Iterable.repeat(this.players, game.players.length - 1).toArray());\n\t\treturn ms.filter(function (tuple) { // Check for repeated.\n\t\t\tfor (var i = 1; i < tuple.length; i++) {\n\t\t\t\tfor (var j = 0; j < i; j++) {\n\t\t\t\t\tif (tuple[i] === tuple[j]) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}).product(Iterable.range(this.matchCount)).map(function (tuple) {\n\t\t\treturn new Match(game, tuple[0]);\n\t\t});\n\t}\n}); //// declare RoundRobin.\n","/** # Measurement\n\nMeasurement tournaments pit the player being measured against others in order\nto assess that player's performance at a game. They are used to evaluate how \nwell the players play by confronting them with the opponents, rotating their \nroles in the matches.\n*/\ntournaments.Measurement = declare(Tournament, {\n\t/** The constructor takes the `game` used in the contest, the `players`\n\tbeing evaluated, the `opponents` used to evaluate them, and the amount of\n\tmatches each player will play (`matchCount`).\n\t*/\n\tconstructor: function Measurement(game, players, opponents, matchCount) {\n\t\tTournament.call(this, game, Array.isArray(players) ? players : [players]);\n\t\tthis.opponents = Array.isArray(opponents) ? opponents : [opponents];\n\t\traiseIf(this.opponents.length < game.players.length - 1, \"Not enough opponents.\");\n\t\tthis.matchCount = isNaN(matchCount) ? game.players.length : +matchCount;\n\t\tthis.__advance__ = this.__matches__().chain(Iterable.repeat(null)).__iter__();\n\t},\n\n\t/** A measurement tournament makes every player play `matchCount` matches \n\tfor each role in the game against all possible combinations of opponents.\n\t*/\n\t__matches__: function __matches__() {\n\t\tvar game = this.game,\n\t\t\tplayerCount = game.players.length,\n\t\t\topponentCombinations = iterable(this.opponents);\n\t\tif (playerCount > 2) {\n\t\t\topponentCombinations = opponentCombinations.product.apply(opponentCombinations, \n\t\t\t\tIterable.repeat(this.opponents, playerCount - 2).toArray());\n\t\t} else {\n\t\t\topponentCombinations = opponentCombinations.map(function (p) {\n\t\t\t\treturn [p];\n\t\t\t});\n\t\t}\n\t\treturn iterable(this.players).product( \n\t\t\tIterable.range(playerCount),\n\t\t\topponentCombinations,\n\t\t\tIterable.range(this.matchCount)).map(function (tuple){\n\t\t\t\tvar players = tuple[2].slice(0);\n\t\t\t\tplayers.splice(tuple[1], 0, tuple[0]);\n\t\t\t\treturn new Match(game, players);\n\t\t\t});\n\t}\n}); //// declare Measurement.\n","/** # Elimination\n\nPlayoffs or sudden death kind of contests, also known as \n[elimination tournaments](http://en.wikipedia.org/wiki/Single-elimination_tournament).\nIn this tournaments players get randomly matched in successive brackets, each \nmatch's winner passing to the next round until the final match. Games are \nassumed to have only one winner per match.\n*/\ntournaments.Elimination = declare(Tournament, {\n\t/** The constructor takes the `game` to be played, the `players` and the \n\tamount of matches that make each playoff (`matchCount`, 1 by default).\n\t*/\n\tconstructor: function Elimination(game, players, matchCount) {\n\t\tTournament.call(this, game, players);\n\t\tthis.matchCount = isNaN(matchCount) ? 1 : +matchCount >> 0;\n\t},\n\n\t/** Each bracket is defined by partitioning the `players` in groups of the\n\tsize required by the game (usually two). If there are not enough players,\n\tsome players get reassigned. The bracket includes `matchCount` matches \n\tbetween these participants, rotating roles if possible.\n\t*/\n\t__bracket__: function __bracket__(players) {\n\t\tvar game = this.game,\n\t\t\tmatchCount = this.matchCount,\n\t\t\troleCount = this.game.players.length;\n\t\tplayers = players || this.players;\n\t\tif (players.length < roleCount) {\n\t\t\treturn [];\n\t\t} else {\n\t\t\treturn Iterable.range(0, players.length, roleCount).map(function (i) {\n\t\t\t\tvar participants = Iterable.range(i, i + roleCount).map(function (j) {\n\t\t\t\t\treturn players[j % players.length]; // Fill by repeating players if necessary.\n\t\t\t\t}).toArray();\n\t\t\t\treturn Iterable.range(matchCount).map(function (i) {\n\t\t\t\t\tparticipants.unshift(participants.pop()); // Rotate partipants roles.\n\t\t\t\t\treturn new Match(game, participants);\n\t\t\t\t}).toArray();\n\t\t\t}).toArray();\n\t\t}\n\t},\n\t\n\t/** A playoff is resolved by aggregating the results of all its matches. The\n\twinner of the playoff is the one with the greater result sum.\n\t*/\n\t__playoff__: function __playoff__(matches) {\n\t\tvar playoffResult = {},\n\t\t\tplayers = {};\n\t\tmatches.forEach(function (match) {\n\t\t\tvar matchResult = match.result();\n\t\t\tif (!matchResult) {\n\t\t\t\tthrow new Error('Unfinished match in playoff!');\n\t\t\t}\n\t\t\titerable(match.players).forEach(function (tuple) {\n\t\t\t\tvar role = tuple[0],\n\t\t\t\t\tplayerName = tuple[1].name;\n\t\t\t\tplayoffResult[playerName] = (+playoffResult[playerName] || 0) + matchResult[role];\n\t\t\t\tplayers[playerName] = tuple[1];\n\t\t\t});\n\t\t});\n\t\tvar winnerName = iterable(playoffResult).greater(function (pair) {\n\t\t\treturn pair[1];\n\t\t})[0][0];\n\t\treturn players[winnerName];\n\t},\n\t\n\t/** The elimination tournament runs until there is less players in the next\n\tbracket than the amount required to play the game. Since this amount is \n\tusually two, the contest ends with one player at the top.\n\t*/\n\t__advance__: function __advance__() {\n\t\tif (!this.__matches__ || this.__matches__.length < 1) {\n\t\t\tif (!this.__currentBracket__) { // First bracket.\n\t\t\t\tthis.__currentBracket__ = this.__bracket__(this.players);\n\t\t\t} else if (this.__currentBracket__.length < 1) { // Tournament is finished.\n\t\t\t\treturn null;\n\t\t\t} else { // Second and on brackets.\n\t\t\t\tvar players = this.__currentBracket__.map(this.__playoff__);\n\t\t\t\tthis.__currentBracket__ = this.__bracket__(players);\n\t\t\t}\n\t\t\tthis.__matches__ = iterable(this.__currentBracket__).flatten().toArray();\n\t\t}\t\n\t\treturn this.__matches__.shift();\n\t}\n}); //// declare Elimination.\n","// See __prologue__.js\n\t[Match,\n\t\tgames.Bahab, games.Choose2Win, games.ConnectionGame, games.Mutropas, games.OddsAndEvens,\n\t\t\tgames.Pig, games.Predefined, games.TicTacToe, games.ToadsAndFrogs,\n\t\taleatories.Aleatory, aleatories.UniformAleatory,\n\t\tutils.CheckerboardFromString\n\t].forEach(function (type) {\n\t\ttype.__SERMAT__.identifier = exports.__package__ +'.'+ type.__SERMAT__.identifier;\n\t\texports.__SERMAT__.include.push(type);\n\t});\n\tSermat.include(exports); // Ludorum uses Sermat internally.\n\n\treturn exports;\n});"]} \ No newline at end of file +{"version":3,"sources":["../src/__prologue__.js","../src/Game.js","../src/Player.js","../src/Match.js","../src/Contingent.js","../src/Tournament.js","../src/utils/Checkerboard.js","../src/utils/CheckerboardFromString.js","../src/utils/CheckerboardFromPieces.js","../src/utils/Scanner.js","../src/utils/Cache.js","../src/utils/GameTree.js","../src/players/RandomPlayer.js","../src/players/TracePlayer.js","../src/players/HeuristicPlayer.js","../src/players/MaxNPlayer.js","../src/players/MiniMaxPlayer.js","../src/players/AlphaBetaPlayer.js","../src/players/MonteCarloPlayer.js","../src/players/UCTPlayer.js","../src/players/UserInterfacePlayer.js","../src/players/WebWorkerPlayer.js","../src/aleatories/Aleatory.js","../src/aleatories/UniformAleatory.js","../src/aleatories/dice.js","../src/games/Predefined.js","../src/games/Choose2Win.js","../src/games/ConnectionGame.js","../src/games/OddsAndEvens.js","../src/games/TicTacToe.js","../src/games/ToadsAndFrogs.js","../src/games/Pig.js","../src/games/Mutropas.js","../src/games/Bahab.js","../src/tournaments/RoundRobin.js","../src/tournaments/Measurement.js","../src/tournaments/Elimination.js","../src/__epilogue__.js"],"names":[],"mappings":"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","file":"ludorum.js","sourcesContent":["/** Package wrapper and layout.\n*/\n(function (global, init) { \"use strict\"; // Universal Module Definition.\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['creatartis-base', 'sermat'], init); // AMD module.\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = init(require('creatartis-base'), require('sermat')); // CommonJS module.\n\t} else { // Browser or web worker (probably).\n\t\tglobal.ludorum = init(global.base, global.Sermat); // Assumes base is loaded.\n\t}\n})(this, function __init__(base, Sermat) { \"use strict\";\n// Import synonyms. ////////////////////////////////////////////////////////////////////////////////\n\tvar unimplemented = base.objects.unimplemented,\n\t\tobj = base.obj,\n\t\tcopy = base.copy,\n\t\traise = base.raise,\n\t\traiseIf = base.raiseIf,\n\t\tdeclare = base.declare,\n\t\tIterable = base.Iterable,\n\t\titerable = base.iterable,\n\t\tFuture = base.Future,\n\t\tRandomness = base.Randomness,\n\t\tinitialize = base.initialize,\n\t\tStatistics = base.Statistics,\n\t\tEvents = base.Events;\n\n// Library layout. /////////////////////////////////////////////////////////////////////////////////\n\tvar exports = {\n\t\t\t__package__: 'ludorum',\n\t\t\t__name__: 'ludorum',\n\t\t\t__init__: __init__,\n\t\t\t__dependencies__: [base, Sermat],\n\t\t\t__SERMAT__: { include: [base] }\n\t\t},\n\t\t/** The library is organized in the following _namespaces_.\n\t\t*/\n\t\taleatories = exports.aleatories = {},\n\t\tgames = exports.games = {},\n\t\tplayers = exports.players = {},\n\t\ttournaments = exports.tournaments = {},\n\t\tutils = exports.utils = {}\n\t;","/** # Game\n\nThe class `ludorum.Game` is the base type for all games.\n*/\nvar Game = exports.Game = declare({\n\t/** Its constructor takes the active player/s. A player is active if and only if it can move. \n\tThe argument may be either a player's name (string) or an array of players' names. It is used to\n\tinitialize `Game.activePlayers`, an array with the active players' names.\n\t*/\n\tconstructor: function Game(activePlayers) {\n\t\tthis.activePlayers = !activePlayers ? [this.players[0]] : \n\t\t\t(!Array.isArray(activePlayers) ? [activePlayers] : activePlayers);\n\t},\n\n\t/** The game's `name` is used mainly for displaying purposes.\n\t*/\n\tname: '?',\n\t\n\t/** The game `players` are specified in an array of role names (strings), that the players can \n\tassume in a match of this game. For example: `\"Xs\"` and `\"Os\"` in TicTacToe, or `\"Whites\"` and \n\t`\"Blacks\"` in Chess.\n\t*/\n\tplayers: [],\n\n\t/** The moves of each active player are calculated by `moves()`. This method returns an object \n\twith every active player related to the moves each can make in this turn. For example: \n\t\n\t+ `{ Player1: ['Rock', 'Paper', 'Scissors'], Player2: ['Rock', 'Paper', 'Scissors'] }`\n\t\t\n\tIf the game has finished then a _falsy_ value must be returned (`null` is recommended).\n\t*/\n\tmoves: unimplemented(\"Game\", \"moves()\"),\n\n\t/** Once the players have chosen their moves, the method `next` is used to perform the given \n\tmoves. It returns a new game instance with the resulting state. The first `moves` argument \n\tshould be an object with a move for each active player. For example:\n\n\t+ `{ Player1: 'Rock', Player2: 'Paper' }`\n\t\n\tThere isn't a default implementation, so it must be overriden. It is strongly advised to check \n\tif the arguments are valid.\n\t*/\n\tnext: unimplemented(\"Game\", \"next(moves)\"),\n\n\t/** If the game is finished the result of the game is calculated with `result()`. It returns an \n\tobject with every player in the game related to a number. This number must be positive if the \n\tplayer wins, negative if the player loses or zero if the game is a tie. For example:\n\t\n\t+ `{ Player1: -1, Player2: +1 }`\n\t\n\tIf the game is not finished, this function must return a _falsy_ value (`null` is recommended).\n\t*/\n\tresult: unimplemented(\"Game\", \"result()\"),\n\n\t/** Some games may assign scores to the players in a finished game. This may differ from the\n\tresult, since the score sign doesn't have to indicate victory or defeat. For example:\n\t\n\t+ result: `{ Player1: -1, Player2: +1 }`\n\t+ scores: `{ Player1: 14, Player2: 15 }`\n\t\n\tThe method `scores()` returns the scores if such is the case. Also the score may be defined for\n\tunfinished games.\n\t\n\tBy default, it return the same that `result()` does.\n\t*/\n\tscores: function scores() {\n\t\treturn this.results();\n\t},\n\t\n\t/** In incomplete or imperfect information games players have different access to the game state\n\tdata. The method `view(player)` returns a modified version of this game, that shows only the\n\tinformation from the perspective of the given player. The other information is modelled as\n\taleatory variables.\n\t\n\tIn this way searches in the game tree can be performed without revealing to\tthe automatic player \n\tinformation it shouldn't have access to (a.k.a _cheating_).\n\t*/\n\tview: function view(player) {\n\t\treturn this;\n\t},\n\t\n\t// ## Player information #######################################################################\n\n\t/** Method `isActive(player...)` checks if the given players are all active.\n\t*/\n\tisActive: function isActive() {\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tif (this.activePlayers.indexOf(arguments[i]) < 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/** In most games there is only one active player per turn. The method `activePlayer()` returns \n\tthat active player's role if there is one and only one, else it raises an error.\n\t*/\n\tactivePlayer: function activePlayer() {\n\t\tvar len = this.activePlayers.length;\n\t\traiseIf(len < 1, 'There are no active players!');\n\t\traiseIf(len > 1, 'More than one player is active!');\n\t\treturn this.activePlayers[0];\n\t},\n\n\t/** All players in a game are assumed to be opponents. The method `opponents(players=activePlayers)` \n\treturns an array with the opponent roles of the given players, or of the active players by \n\tdefault. If not all players are opponents this method can be overriden.\n\t*/\n\topponents: function opponents(players) {\n\t\tplayers = players || this.activePlayers;\n\t\treturn this.players.filter(function (p) {\n\t\t\treturn players.indexOf(p) < 0;\n\t\t});\n\t},\n\n\t/** Since most games have only two players, the method `opponent(player=activePlayer)`\n\tconveniently returns the opponent of the given player, or the active player by default.\n\t*/\n\topponent: function opponent(player) {\n\t\tvar playerIndex = this.players.indexOf(player || this.activePlayer());\n\t\treturn this.players[(playerIndex + 1) % this.players.length];\n\t},\n\n\t// ## Game flow ################################################################################\n\t\n\t/** Since `next()` expects a moves object, the method `perform(move, player=activePlayer, ...)`\n\tpretends to simplify simpler game mechanics. It performs the given moves for the given players\n\t(activePlayer by default) and returns the next game state.\n\t*/\n\tperform: function perform() {\n\t\tvar moves = {}, player;\n\t\tfor (var i = 0; i < arguments.length; i += 2) {\n\t\t\tplayer = arguments[i + 1];\n\t\t\tif (typeof player === 'undefined') {\n\t\t\t\tplayer = this.activePlayer();\n\t\t\t}\n\t\t\tmoves[player] = arguments[i];\n\t\t}\n\t\treturn this.next(moves);\n\t},\n\n\t/** The method `moves()` returns the available moves for each player. Yet this is not the same\n\tas the `moves` objects that can be used with `next()` to obtain a next game state. Furthermore,\n\tif there are more than one active player per turn, the possible decisions can be build with all\n\tcombinations for all active players.\n\t\n\tThe method `possibleMoves(moves=this.moves())` calculates all possible `moves` objects based on \n\tthe result of `moves()`. For example, if `moves()` returns `{A:[1,2], B:[3,4]}`, then \n\t`possibleMoves()` would return `[{A:1, B:3}, {A:1, B:4}, {A:2, B:3}, {A:2, B:4}]`.\n\t*/\n\tpossibleMoves: function possibleMoves(moves) {\n\t\tmoves = arguments.length < 1 ? this.moves() : moves;\n\t\tif (!moves || typeof moves !== 'object') {\n\t\t\treturn [];\n\t\t}\n\t\tvar activePlayers = Object.keys(moves);\n\t\tif (activePlayers.length === 1) { // Most common case.\n\t\t\tvar activePlayer = activePlayers[0];\n\t\t\treturn moves[activePlayer].map(function (move) {\n\t\t\t\treturn obj(activePlayer, move);\n\t\t\t});\n\t\t} else { // Simultaneous games.\n\t\t\treturn Iterable.product.apply(Iterable, \n\t\t\t\titerable(moves).mapApply(function (player, moves) {\n\t\t\t\t\treturn moves.map(function (move) {\n\t\t\t\t\t\treturn [player, move];\n\t\t\t\t\t});\n\t\t\t\t}).toArray()\n\t\t\t).map(function (playerMoves) {\n\t\t\t\treturn iterable(playerMoves).toObject();\n\t\t\t}).toArray();\n\t\t}\n\t},\n\t\n\t// ## Result functions #########################################################################\n\n\t/** The maximum and minimum results may be useful and even required by some game search \n\talgorithm. To expose these values, `resultBounds()` returns an array with first the minimum and\n\tthen the maximum. Most game have one type of victory (+1) and one type of defeat (-1). That's \n\twhy `resultBounds()` returns [-1,+1] by default. Yet some games can define different bounds by \n\toverriding it.\n\t*/\n\tresultBounds: function resultBounds() {\n\t\treturn [-1,+1];\n\t},\n\t\n\t/** The `normalizedResult(result=this.result())` is the `result()` expressed so the minimum \n\tdefeat is equal to -1 and the maximum victory is equal to +1.\n\t*/\n\tnormalizedResult: function normalizedResult(result) {\n\t\tresult = result || this.result();\n\t\tif (result) {\n\t\t\tvar bounds = this.resultBounds();\n\t\t\tresult = base.copy(result);\n\t\t\tfor (var player in result) {\n\t\t\t\tresult[player] = (result[player] - bounds[0]) / (bounds[1] - bounds[0]) * 2 - 1;\n\t\t\t}\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t},\n\t\n\t/** Most games have victory and defeat results that cancel each other. It is said that all the\n\tvictors wins the defeated player loses. Those games are called _zerosum games_. The method \n\t`zerosumResult(score, players=activePlayers)` builds a game result object for a zerosum game.\n\tThe given score is split between the given players (the active players by default), and (-score)\n\tis split between their opponents.\n\t*/\n\tzerosumResult: function zerosumResult(score, players) {\n\t\tplayers = !players ? this.activePlayers : (!Array.isArray(players) ? [players] : players);\n\t\tscore = (+score) / (players.length || 1);\n\t\tvar result = ({}), player,\n\t\t\topponentScore = -score / (this.players.length - players.length || 1);\n\t\tfor (var i = 0; i < this.players.length; i++) {\n\t\t\tplayer = this.players[i];\n\t\t\tresult[player] = players.indexOf(player) < 0 ? opponentScore : score;\n\t\t}\n\t\treturn result;\n\t},\n\n\t/** There are two shortcuts for `zerosumResult()`. First `victory(players=activePlayers, score=1)`\n\treturns the zero-sum game result with the given players (or the active players by default) as\n\twinners, and their opponents as losers.\n\t*/\n\tvictory: function victory(players, score) {\n\t\treturn this.zerosumResult(score || 1, players);\n\t},\n\n\t/** Second `defeat(players=activePlayers, score=-1)` returns the zero-sum game result with the\n\tgiven players (or the active players by default) as losers, and their opponents as winners.\n\t*/\n\tdefeat: function defeat(players, score) {\n\t\treturn this.zerosumResult(score || -1, players);\n\t},\n\n\t/** Finally `draw(players=this.players, score=0)` returns the game result of a tied game with \n\tthe given players (or the active players by default) all with the same score (zero by default).\n\tA tied game must always have the same result for all players.\n\t*/\n\tdraw: function draw(players, score) {\n\t\tscore = +(score || 0);\n\t\tplayers = players || this.players;\n\t\tvar result = ({});\n\t\tfor (var player in players) {\n\t\t\tresult[players[player]] = score;\n\t\t}\n\t\treturn result;\n\t},\n\n\t// ## Conversions & presentations ##############################################################\n\n\t/** Some algorithms require an `identifier()` for each game state, in order to store them in \n\tcaches or hashes. This method calculates a string that uniquely identifies this game state,\n\tbased on the game's serialization.\n\t*/\n\tidentifier: unimplemented(\"Game\", \"identifier\"),\n\n\t/** Based on the game's serialization, `clone()` creates a copy of this game state.\n\t*/\n\tclone: function clone() {\n\t\treturn Sermat.sermat(this);\n\t},\n\n\t/** The default string representation of a game is equal to the result of `toJSON`.\n\t*/\n\ttoString: function toString() {\n\t\treturn Sermat.ser(this);\n\t},\n\t\t\n\t/** ## Cached games ############################################################################\n\n\tA `cached(game)` has modified `moves()` and `result()` methods that cache the calls of the base\n\tgame. The `next()` method is not cached because it may lead to memory leaks or overload.\n\t*/\n\t'static cached': function cached(game) {\n\t\tvar baseMoves = game.prototype.moves,\n\t\t\tbaseResult = game.prototype.result;\n\t\treturn declare(game, {\n\t\t\t/** The first time `moves()` is called, it is delegated to the base game's `moves()`,\n\t\t\tand keeps the value for future calls.\n\t\t\t*/\n\t\t\tmoves: function moves() {\n\t\t\t\tvar result = baseMoves.call(this);\n\t\t\t\tthis.moves = function cachedMoves() { // Replace moves() method with cached version.\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\t\n\t\t\t/** The first time `result()` is called, it is delegated to the base game's `result()`,\n\t\t\tand keeps the value for future calls.\n\t\t\t*/\n\t\t\tresult: function result() {\n\t\t\t\tvar r = game.result.call(this);\n\t\t\t\tthis.result = function cachedResult() { // Replace result() method with cached version.\n\t\t\t\t\treturn r;\n\t\t\t\t};\n\t\t\t\treturn r;\n\t\t\t}\n\t\t});\n\t}, // static cached\n\n\t\n\t/** ## Serialized simultaneous games. ##########################################################\n\t\n\t`serialized(game)` builds a serialized version of a simultaneous game, i.e. one in which two or\n\tmore players may be active in the same turn. It converts a simultaneous game to an alternated\n\tturn based game. This may be useful for using algorithms like MiniMax to build AIs for\n\tsimultaneous games.\n\t*/\n\t'static serialized': function serialized(game) {\n\t\tvar super_moves = game.prototype.moves,\n\t\t\tsuper_next = game.prototype.next;\n\t\treturn declare(game, {\n\t\t\t/** The `moves()` of a serialized game returns the moves of the player deemed as the\n\t\t\tactive player, if there are any moves.\n\t\t\t*/\n\t\t\tmoves: function moves() {\n\t\t\t\tvar fixedMoves = this.__fixedMoves__ || (this.__fixedMoves__ = {}),\n\t\t\t\t\tallMoves = super_moves.call(this),\n\t\t\t\t\tactivePlayer;\n\t\t\t\tfor (var i = 0; i < this.activePlayers.length; i++) {\n\t\t\t\t\tif (fixedMoves.hasOwnProperty(this.activePlayers[i])) {\n\t\t\t\t\t\tactivePlayer = this.activePlayers[i];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn activePlayer && allMoves ? obj(activePlayer, allMoves[activePlayer]) : null;\n\t\t\t},\n\t\t\n\t\t\t/** The `next(moves)` of a serialized game advances the actual game if with the given\n\t\t\tmove all active players in the real game state have moved. Else the next player that has\n\t\t\tto move becomes active.\n\t\t\t*/\n\t\t\tnext: function next(moves) {\n\t\t\t\tvar nextFixedMoves = copy({}, this.fixedMoves || {}, moves),\n\t\t\t\t\tallMoved = iterable(this.players).all(function (p) {\n\t\t\t\t\t\t\treturn nextFixedMoves.hasOwnProperty(p);\n\t\t\t\t\t\t}),\n\t\t\t\t\tresult;\n\t\t\t\tif (allMoved) {\n\t\t\t\t\tresult = super_next.call(this, nextFixedMoves);\n\t\t\t\t\tresult.fixedMoves = {};\n\t\t\t\t} else {\n\t\t\t\t\tresult = this.clone();\n\t\t\t\t\tresult.fixedMoves = nextFixedMoves;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t} // static serialized\n\t\n}); // declare Game.\n","/** # Player\n\nPlayer is the base type for all playing agents. Basically, playing a game means choosing a move from \nall available ones, each time the game enables the player to do so.\n*/\nvar Player = exports.Player = declare({\n\t/** The default constructor takes only its `name` from the given `params`. This is an abstract \n\tclass that is meant to be extended.\n\t*/\n\tconstructor: (function () {\n\t\tvar __PlayerCount__ = 0; // Used by the Player's default naming.\n\t\treturn function Player(params) {\n\t\t\tinitialize(this, params)\n\t\t\t\t.string('name', { defaultValue: 'Player' + (__PlayerCount__++), coerce: true });\n\t\t};\n\t})(),\n\n\t/** A player is asked to choose a move by calling `Player.decision(game, role)`. The result is \n\tthe selected move if it can be obtained synchronously, else a future is returned.\n\t*/\n\tdecision: function decision(game, role) {\n\t\treturn this.movesFor(game, role)[0]; // Indeed not a very thoughtful base implementation. \n\t},\n\n\t/** To help implement the decision, `Player.movesFor(game, player)` gets the moves in the game \n\tfor the player. It also checks if there are any moves, and if it not so an error is risen.\n\t*/\n\tmovesFor: function movesFor(game, role) {\n\t\tvar moves = game.moves();\n\t\traiseIf(!moves || !moves[role] || moves[role].length < 1, \n\t\t\t\"Player \", role, \" has no moves for game \", game, \".\");\n\t\treturn moves[role];\n\t},\n\t\n\t/** Before starting a [match](Match.js.html), all players are asked to join by calling \n\t`Player.participate(match, role)`. This allows the player to prepare properly. If this implies \n\tbuilding another instance of the player object, it must be returned in order to participate in \n\tthe match.\n\t*/\n\tparticipate: function participate(match, role) {\n\t\treturn this;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Player',\n\t\tserializer: function serialize_Player(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name']);\n\t\t}\n\t},\n\t\n\t/** The string representation of the player is derived straight from its serialization.\n\t*/\n\ttoString: function toString() {\n\t\treturn Sermat.ser(this);\n\t}\n}); // declare Player.\n","/** # Match\n\nA match is a controller for a game, managing player decisions, handling the flow of the turns \nbetween the players by following the game's logic.\n*/\nvar Match = exports.Match = declare({\n\t/** `Match` objects are build with the [game's](Game.html) starting state and the players that \n\tparticipate. The players argument must be either an array of [`Player`](Player.html) objects or \n\tan object with a member for each of the game's players with a Player object as value.\n\t*/\n\tconstructor: function Match(game, players) {\n\t\tthis.game = game;\n\t\tthis.players = Array.isArray(players) ? iterable(game.players).zip(players).toObject() : players;\n\t\t/** The match records the sequence of game state in `Match.history`.\n\t\t*/\n\t\tthis.history = [game];\n\t\tthis.events = new Events({ \n\t\t\tevents: ['begin', 'move', 'next', 'end', 'quit']\n\t\t});\n\t\tfor (var p in this.players) { // Participate the players.\n\t\t\tthis.players[p] = this.players[p].participate(this, p) || this.players[p];\n\t\t}\n\t},\n\n\t/** Each step in the match's history is called a ply. `Match.ply()` indicates the current ply \n\tnumber.\n\t*/\n\tply: function ply() {\n\t\treturn this.history.length - 1;\n\t},\n\t\n\t/** Each ply has a game state. `Match.state(ply=last)` retrieves the game state for the given \n\tply, or the last one by default.\n\t*/\n\tstate: function state(ply) {\n\t\tply = isNaN(ply) ? this.ply() : +ply < 0 ? this.ply() + (+ply) : +ply;\n\t\treturn this.history[ply | 0];\n\t},\n\n\t/** If the last game state is finished, then the whole match is finished. If so, \n\t`Match.result()` returns the match result, which is the result of the last game state.\n\t*/\n\tresult: function result() {\n\t\treturn this.state().result();\n\t},\n\n\t/** If the last game state is not finished, then the match continues. To move the play on, \n\t`Match.decisions(game=state())` asks the active players in the game to choose their moves. \n\tReturns a future that is resolved when all players have decided.\n\t*/\n\tdecisions: function decisions(game) {\n\t\tgame = game || this.state();\n\t\tvar match = this,\n\t\t\tplayers = this.players,\n\t\t\tactivePlayers = game.activePlayers;\n\t\treturn Future.all(activePlayers.map(function (p) {\n\t\t\treturn players[p].decision(game.view(p), p);\n\t\t})).then(function (decisions) {\n\t\t\tvar moves = iterable(activePlayers).zip(decisions).toObject();\n\t\t\tmatch.onMove(game, moves);\n\t\t\treturn moves;\n\t\t});\n\t},\n\n\t/** `Match.run(plys=Infinity)` runs the match the given number of plys, or until the game \n\tfinishes. The result is a future that gets resolved when the game ends.\n\t*/\n\trun: function run(plys) {\n\t\tplys = isNaN(plys) ? Infinity : +plys;\n\t\tif (plys < 1) { // If the run must stop...\n\t\t\treturn Future.when(this);\n\t\t}\n\t\tvar ply = this.ply(), game = this.state(), results, next;\n\t\tif (ply < 1) {\n\t\t\tthis.onBegin(game);\n\t\t}\n\t\tgame = this.__advanceContingents__(game); // Remove all non-determinism.\n\t\tresults = game.result();\n\t\tif (results) { // If the match has finished ...\n\t\t\tthis.onEnd(game, results);\n\t\t\treturn Future.when(this);\n\t\t} else { // Else the run must continue ...\n\t\t\tvar match = this;\n\t\t\treturn this.decisions(game).then(function (moves) {\n\t\t\t\tif (match.__advance__(game, moves)) {\n\t\t\t\t\treturn match.run(plys - 1);\n\t\t\t\t} else {\n\t\t\t\t\treturn match;\n\t\t\t\t}\t\t\t\t\n\t\t\t});\n\t\t}\n\t},\n\t\n\t__advanceContingents__: function __advanceContingents__(game, moves) {\n\t\tfor (var next; game.isContingent; game = next) {\n\t\t\tnext = game.randomNext();\n\t\t\tthis.history.push(next);\n\t\t\tthis.onNext(game, next);\n\t\t}\n\t\treturn game;\n\t},\n\t\n\t__advance__: function __advance__(game, moves) {\n\t\tvar match = this,\n\t\t\tquitters = game.activePlayers.filter(function (p) {\n\t\t\t\treturn moves[p].__command__ === 'quit';\n\t\t\t});\n\t\tif (quitters.length > 0) {\n\t\t\tmatch.onQuit(game, quitters[0]);\n\t\t\treturn false;\n\t\t}\n\t\tvar next = game.next(moves); // Match must go on.\n\t\tthis.history.push(next);\n\t\tthis.onNext(game, next);\n\t\treturn true;\n\t},\n\t\n\t/** ## Commands ################################################################################\n\t\n\tCommands are pseudo-moves, which can be returned by the players instead of valid moves for the \n\tgame being played. Their intent is to control the match itself.\n\t\n\tThe available commands are:\n\t*/\n\t\n\t/** + `quit`: A quit command means the player that issued it is leaving the match. The match is \n\tthen aborted.\n\t*/\n\t\"static COMMAND_QUIT\": { __command__: 'quit' },\n\t\n\t/** ## Events ##################################################################################\n\t\n\tMatches provide game events that players and spectators can be registered to. `Match.events` is \n\tthe event handler. Emitted events are:\n\t*/\n\t\n\t/** + The `begin` event fired by `Match.onBegin(game)` when the match begins. The callbacks \n\tshould have the signature `function (game, match)`.\n\t*/\n\tonBegin: function onBegin(game) {\n\t\tthis.events.emit('begin', game, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match begins with ', iterable(this.players).map(function (attr) {\n\t\t\t\treturn attr[1] +' as '+ attr[0];\n\t\t\t}).join(', '), '; for ', game, '.');\n\t\t}\n\t},\n\t\n\t/** + The `move` event fired by `Match.onMove(game, moves)` every time the active players make \n\tmoves. The callbacks should have the signature `function (game, moves, match)`.\n\t*/\n\tonMove: function onMove(game, moves) {\n\t\tthis.events.emit('move', game, moves, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Players move: ', JSON.stringify(moves), ' in ', game);\n\t\t}\n\t},\n\t\n\t/** + The `next` event fired by `Match.onNext(game, next)` signals when the match advances to \n\tthe next game state. This may be due to moves or aleatory instantiation. The callbacks should \n\thave the signature `function (gameBefore, gameAfter, match)`.\n\t*/\n\tonNext: function onNext(game, next) {\n\t\tthis.events.emit('next', game, next, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match advances from ', game, ' to ', next);\n\t\t}\n\t},\n\t\n\t/** + The `end` event triggered by `Match.onEnd(game, results)` notifies when the match ends. \n\tThe callbacks should have the signature `function (game, result, match)`.\n\t*/\n\tonEnd: function onEnd(game, results) {\n\t\tthis.events.emit('end', game, results, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match for ', game, 'ends with ', JSON.stringify(results));\n\t\t}\n\t},\n\t\n\t/** + The `quit` event triggered by `Match.onQuit(game, player)` is emitted when the match is \n\taborted due to the given player leaving it. The callbacks should have the signature \n\t`function (game, quitter, match)`.\n\t*/\n\tonQuit: function onQuit(game, player) {\n\t\tthis.events.emit('quit', game, player, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Match for ', game, ' aborted because player '+ player +' quitted.');\n\t\t}\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\ttoString: function toString() {\n\t\treturn 'Match('+ this.game +', '+ JSON.stringify(this.players) +')';\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Match',\n\t\tserializer: function serialize_Match(obj) {\n\t\t\treturn [obj.game, obj.players, obj.history];\n\t\t},\n\t\tmaterializer: function materialize_Match(obj, args) {\n\t\t\tif (args) {\n\t\t\t\tvar match = new Match(args[0], args[1]);\n\t\t\t\tmatch.history = args[2];\n\t\t\t\treturn match;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n}); // declare Match.\n","/** # Contingent\r\n\r\nContingent states are game states that depend on other factors that the players choices. They are\r\nused to represent randomness in non-deterministic games. The random variables (called `haps`) can\r\nbe dice, card decks, roulettes, etc.\r\n*/\r\nvar Contingent = exports.Contingent = declare({\r\n\t/** Flag to distinguish contingent states from normal game states.\r\n\t*/\r\n\tisContingent: true,\r\n\t\r\n\t/** The default implementation takes a set of `haps`, a game `state` and a set of `moves`. See\r\n\tthe `next` method for further details.\r\n\t*/\r\n\tconstructor: function Contingent(haps, state, moves) {\r\n\t\tif (haps) {\r\n\t\t\tthis.__haps__ = haps;\r\n\t\t}\r\n\t\tif (state) {\r\n\t\t\tthis.__state__ = state;\r\n\t\t}\r\n\t\tif (moves) {\r\n\t\t\tthis.__moves__ = moves;\r\n\t\t}\r\n\t},\r\n\t\r\n\t/** A contingent state's `haps` are the equivalent of `moves` in normal game states. The method \r\n\treturns an object with the random variables on which this node depends, e.g.: \r\n\t`{ die: aleatories.dice.D6 }`.\r\n\t*/\r\n\thaps: function haps() {\r\n\t\treturn this.__haps__;\r\n\t},\r\n\t\r\n\t/** Contingent game states' `next` states depend on the `haps` provided, e.g. `{die1: 4, die2: 2}`.\r\n\tIf values for the `haps` are not provided, they are resolved randonmly (using `randomHaps()`).\r\n\t\r\n\tBy default this method can have two possible behaviours. If the contingent state was created \r\n\twith `moves`, the previous `state`'s `next` method is called with these `moves` and the `haps`.\r\n\tElse, it is assumed that the game state constructor will deal with the haps. So it is called\r\n\twith the original arguments of the state and the `haps`.\r\n\t*/\r\n\tnext: function next(haps) {\r\n\t\tvar state = this.__state__;\r\n\t\tif (this.__moves__) {\r\n\t\t\treturn state.next(this.__moves__, haps || this.randomHaps());\r\n\t\t} else {\r\n\t\t\tvar sermatRecord = Sermat.record(state.constructor),\r\n\t\t\t\targs = sermatRecord.serializer(state)[0];\r\n\t\t\treturn sermatRecord.materializer(null, [copy(haps, args)]);\r\n\t\t}\r\n\t},\r\n\t\r\n\t/** Method `randomHaps` calculates a random set of haps.\r\n\t*/\r\n\trandomHaps: function randomHaps(random) {\r\n\t\treturn iterable(this.haps()).mapApply(function (n, h) {\r\n\t\t\treturn [n, h.value(random)];\r\n\t\t}).toObject();\r\n\t},\r\n\t\r\n\t/** A `randomNext` picks one of the next states at random.\r\n\t*/\r\n\trandomNext: function randomNext(random) {\r\n\t\treturn this.next(this.randomHaps(random));\r\n\t},\r\n\t\r\n\t/** The method `possibleHaps` is analogous to `Game.possibleMoves`. It calculates all possible \r\n\tcombinations of haps.\r\n\t*/\r\n\tpossibleHaps: function possibleHaps() {\r\n\t\treturn Iterable.product.apply(Iterable,\r\n\t\t\titerable(this.haps()).mapApply(function (n, hap) {\r\n\t\t\t\treturn hap.distribution().mapApply(function (v, p) {\r\n\t\t\t\t\treturn [n, v, p];\r\n\t\t\t\t});\r\n\t\t\t}).toArray()\r\n\t\t).map(function (haps) {\r\n\t\t\tvar prob = 1;\r\n\t\t\treturn [iterable(haps).mapApply(function (n, v, p) {\r\n\t\t\t\tprob *= p;\r\n\t\t\t\treturn [n, v];\r\n\t\t\t}).toObject(), prob];\r\n\t\t}).toArray();\r\n\t},\r\n\t\r\n\t// ## Utilities ################################################################################\r\n\t\r\n\t'static __SERMAT__': {\r\n\t\tidentifier: 'Contingent',\r\n\t\tserializer: function serialize_Contingent(obj) {\r\n\t\t\treturn [obj.__haps__ || null, obj.__state__ || null, obj.__moves__ || null];\r\n\t\t}\r\n\t}\r\n});","/** # Tournament\n\nA tournament is a set of matches played between many players. The whole contest \nranks the participants according to the result of the matches. This is an \nabstract base class for many different types of contests.\n*/\nvar Tournament = exports.Tournament = declare({\n\tconstructor: function Tournament(game, players) {\n\t\t/** The tournament always has one [`game`](Game.html) state from which \n\t\tall matches start.\n\t\t*/\n\t\tthis.game = game;\n\t\t/** All the [`players`](Player.html) involved in the tournament must be\n\t\tprovided to the constructor in an array.\n\t\t*/\n\t\tthis.players = Array.isArray(players) ? players : iterables.iterable(players).toArray();\n\t\tthis.statistics = new Statistics();\n\t\tthis.events = new Events({ \n\t\t\tevents: ['begin', 'beforeMatch', 'afterMatch', 'end']\n\t\t});\n\t},\n\n\t/** The next match to be played is determined by `__advance__`, which \n\treturns a match instance, or null if the tournament has finished. It is not \n\timplemented in this base class. \n\t*/\n\t__advance__: unimplemented(\"Tournament\", \"__advance__\"),\n\t\n\t/** `Tournament.run()` plays all the tournament's matches. Since running a \n\tmatch is asynchronous, running a tournament is too. Hence the result is \n\talways a future, which will be resolved when all matches have been played.\n\t*/\n\trun: function run() {\n\t\tthis.onBegin();\n\t\tvar tournament = this;\n\t\treturn Future.doWhile(function () {\n\t\t\treturn Future.then(tournament.__advance__(), function (match) {\n\t\t\t\tif (match) {\n\t\t\t\t\ttournament.beforeMatch(match);\n\t\t\t\t\treturn tournament.__runMatch__(match).then(function (match) {\n\t\t\t\t\t\ttournament.account(match);\n\t\t\t\t\t\ttournament.afterMatch(match);\n\t\t\t\t\t\treturn match;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t});\n\t\t}).then(this.onEnd.bind(this));\n\t},\n\t\n\t/** The method `__runMatch__` runs a match. It is present so it can be \n\toverridden, to implement some specific behaviour of the contest.\n\t*/\n\t__runMatch__: function __runMatch__(match) {\n\t\treturn match.run();\n\t},\n\t\n\t/** Tournaments gather information from the played matches using their\n\t`statistics` property (instance of `creatartis-base.Statistics`). The method \n\t`Tournament.account(match)` is called to accounts the results of each \n\tfinished match for the players' score.\n\t\n\tThe match results are gathered in the `results` key. The keys `victories`,\n\t`defeats` and `draws` count each result type. The length of each game is\n\trecorded under `length`. The move count at each ply is aggregated under\n\t`width`. All these numbers are open by game, role, player.\n\t*/\n\taccount: function account(match) {\n\t\tvar game = this.game,\n\t\t\tresults = match.result(), \n\t\t\tisDraw = false,\n\t\t\tstats = this.statistics;\n\t\traiseIf(!results, \"Match doesn't have results. Has it finished?\");\n\t\titerable(match.players).forEach(function (p) { // Player statistics.\n\t\t\tvar role = p[0],\n\t\t\t\tplayer = p[1],\n\t\t\t\tplayerResult = results[p[0]];\n\t\t\tstats.add({key:'results', game:game.name, role:role, player:player.name}, \n\t\t\t\tplayerResult);\n\t\t\tstats.add({key:(playerResult > 0 ? 'victories' : playerResult < 0 ? 'defeats' : 'draws'),\n\t\t\t\tgame:game.name, role:role, player:player.name}, playerResult);\n\t\t\tstats.add({key:'length', game:game.name, role:role, player:player.name}, \n\t\t\t\tmatch.ply()); //FIXME This may not be accurate if the game has random variables.\n\t\t\tmatch.history.forEach(function (entry) {\n\t\t\t\tif (typeof entry.moves === 'function') {\n\t\t\t\t\tvar moves = entry.moves();\t\n\t\t\t\t\tif (moves && moves.hasOwnProperty(role) && moves[role].length > 0) {\n\t\t\t\t\t\tstats.add({key:'width', game:game.name, role:role, player:player.name}, \n\t\t\t\t\t\t\tmoves[role].length);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** ## Events #############################################################\n\t\n\tTournaments provide events to enable further analysis and control over it. \n\t`Tournament.events` is the event handler. The emitted events are:\n\t*/\n\t\n\t/** + The `begin` event fired by `Tournament.onBegin()` when the whole \n\tcontest begins. The callbacks should have the signature \n\t`function (tournament)`.\n\t*/\t\n\tonBegin: function onBegin() {\n\t\tthis.events.emit('begin', this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Tournament begins for game ', game.name, '.');\n\t\t}\n\t},\n\t\n\t/** + The `beforeMatch` event triggered by `Tournament.beforeMatch(match)` \n\tjust before starting a match. The callbacks should have the signature \n\t`function (match, tournament)`.\n\t*/\n\tbeforeMatch: function beforeMatch(match) {\n\t\tthis.events.emit('beforeMatch', match, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.debug('Beginning match with ', JSON.stringify(match.players), '.');\n\t\t}\n\t},\n\t\n\t/** + The `afterMatch` event triggered by `Tournament.afterMatch(match)` \n\tjust after a match ends. The callbacks should have the signature \n\t`function (match, tournament)`.\n\t*/\n\tafterMatch: function afterMatch(match) {\n\t\tthis.events.emit('afterMatch', match, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.debug('Finishing match with ', JSON.stringify(match.players), '.');\n\t\t}\n\t},\n\t\n\t/** + The `end` event triggered by `Tournament.onEnd()` when the whole \n\tcontest is completed. The callbacks should have the signature \n\t`function (statistics, tournament)`.\n\t*/\n\tonEnd: function onEnd() {\n\t\tthis.events.emit('end', this.statistics, this);\n\t\tif (this.logger) {\n\t\t\tthis.logger.info('Tournament ends for game ', game.name, ':\\n', this.statistics, '\\n');\n\t\t}\n\t}\n}); // declare Tournament\n","/** # Checkerboard\n\nBase class for checkerboards representations based on several different data structures.\n*/\nvar Checkerboard = utils.Checkerboard = declare({\n\t/** The base constructor only sets the board dimensions: `height` and `width`.\n\t*/\n\tconstructor: function Checkerboard(height, width) {\n\t\tif (!isNaN(height)) {\n\t\t\tthis.height = height|0;\n\t\t}\n\t\tif (!isNaN(width)) {\n\t\t\tthis.width = width|0;\n\t\t}\n\t},\n\t\n\t/** The value for empty squares is `emptySquare`. This will be used in functions walking and \n\ttraversing the board. \n\t*/\n\temptySquare: null,\n\t\n\t// ## Board information ########################################################################\n\t\n\t/** All coordinates are represented by `[row, column]` arrays. To check if a coordinate is \n\tinside the board, use `isValidCoord(coord)`.\n\t*/\n\tisValidCoord: function isValidCoord(coord) {\n\t\treturn Array.isArray(coord) && !isNaN(coord[0]) && !isNaN(coord[1])\t&& \n\t\t\tcoord[0] >= 0 && coord[0] < this.height && \n\t\t\tcoord[1] >= 0 && coord[1] < this.width;\n\t},\n\t\n\t/** Method `coordinates()` returns the sequence of the board's valid positions; first by row \n\tthen by column.\n\t*/\n\tcoordinates: function coordinates() {\n\t\treturn Iterable.range(this.height).product(Iterable.range(this.width));\n\t},\n\t\n\t/** Method `square(coord, outside)` should get the contents at a given coordinate. If the \n\tcoordinate is off the board, `outside` must be returned. This method is abstract so it must be \n\toverriden in subclasses.\n\t*/\n\tsquare: unimplemented('utils.Checkerboard', 'square'),\n\t\n\t/** A square is assumed to be empty when its value is equal to `emptySquare`.\n\t*/\n\tisEmptySquare: function isEmptySquare(coord) {\n\t\treturn this.square(coord) === this.emptySquare;\n\t},\n\t\n\t// ### Lines ###################################################################################\n\t\n\t/** Many games must deal with line configurations of pieces. The following methods help with \n\tthis kind of logic. Each line is a sequence of coordinates in the board.\n\t\n\t+ `horizontals()`: All the horizontal lines (rows).\n\t*/\n\thorizontals: function horizontals() {\n\t\tvar width = this.width;\n\t\treturn Iterable.range(this.height).map(function (row) {\n\t\t\treturn Iterable.range(width).map(function (column) {\n\t\t\t\treturn [row, column];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** \n\t+ `verticals()`: All the vertical lines (columns).\n\t*/\n\tverticals: function verticals() {\n\t\tvar height = this.height;\n\t\treturn Iterable.range(this.width).map(function (column) {\n\t\t\treturn Iterable.range(height).map(function (row) {\n\t\t\t\treturn [row, column];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** \n\t+ `orthogonals()`: All the horizontal (rows) and vertical lines (columns) in the board.\n\t*/\n\torthogonals: function orthogonals() {\n\t\treturn this.horizontals().chain(this.verticals());\n\t},\n\t\n\t/**\n\t+ `positiveDiagonals()`: All the positive diagonals lines (those where row = k + column).\n\t*/\n\tpositiveDiagonals: function positiveDiagonals() {\n\t\tvar width = this.width, \n\t\t\theight = this.height, \n\t\t\tcount = height + width - 1;\n\t\treturn Iterable.range(count).map(function (i) {\n\t\t\tvar row = Math.max(0, height - i - 1),\n\t\t\t\tcolumn = Math.max(0, i - height + 1);\n\t\t\treturn Iterable.range(Math.min(i + 1, count - i)).map(function (j) {\n\t\t\t\treturn [row + j, column + j];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** \n\t+ `negativeDiagonals()`: All the negative diagonals lines (those where row = k - column).\n\t*/\n\tnegativeDiagonals: function negativeDiagonals() {\n\t\tvar width = this.width, \n\t\t\theight = this.height, \n\t\t\tcount = height + width - 1;\n\t\treturn Iterable.range(count).map(function (i) {\n\t\t\tvar row = Math.min(i, height - 1),\n\t\t\t\tcolumn = Math.max(0, i - height + 1);\n\t\t\treturn Iterable.range(Math.min(i + 1, count - i)).map(function (j) {\n\t\t\t\treturn [row - j, column + j];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/**\n\t+ `diagonals()`: All the diagonal lines in the board.\n\t*/\n\tdiagonals: function diagonals() {\n\t\treturn this.positiveDiagonals().chain(this.negativeDiagonals());\n\t},\n\t\n\t/**\n\t+ `lines()`: All the horizontal, vertical and diagonal lines in the board.\n\t*/\n\tlines: function lines() {\n\t\treturn this.orthogonals().chain(this.diagonals());\n\t},\n\t\n\t/** The previous methods return the whole lines. Some times the game logic demands checking \n\tlines of a certain length. These are sublines, and can be calculated by \n\t`sublines(lines, length)`. It obviously filters lines which are shorter than length.\n\t*/\n\tsublines: function sublines(lines, length) {\n\t\treturn iterable(lines).map(function (line) {\n\t\t\treturn Array.isArray(line) ? line : iterable(line).toArray();\n\t\t}, function (line) {\n\t\t\treturn line.length >= length;\n\t\t}).map(function (line) {\n\t\t\treturn Iterable.range(0, line.length - length + 1).map(function (i) {\n\t\t\t\treturn line.slice(i, i + length);\n\t\t\t});\n\t\t}).flatten();\n\t},\n\t\n\t// ### Walks ###################################################################################\n\t\n\t/** A walk is a sequence of coordinates in the board that start at a given point and advances in\n\ta certain direction. The `walk(coord, delta)` method returns an iterable with coordinates from \n\t`coord` and on, adding `delta`'s row and column until going off the board.\n\t*/\n\twalk: function walk(coord, delta) {\n\t\tvar board = this;\n\t\treturn new Iterable(function __iter__() {\n\t\t\tvar current = coord.slice();\n\t\t\treturn function __walkIterator__() {\n\t\t\t\tif (board.isValidCoord(current)) {\n\t\t\t\t\tvar result = current.slice();\n\t\t\t\t\tcurrent[0] += delta[0];\n\t\t\t\t\tcurrent[1] += delta[1];\n\t\t\t\t\treturn result;\n\t\t\t\t} else {\n\t\t\t\t\tthrow Iterable.STOP_ITERATION;\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t},\n\t\n\t/** Convenient method `walks(coord, deltas)` can be used to get many walks from the same origin.\n\t*/\n\twalks: function walks(coord, deltas) {\n\t\tvar board = this;\n\t\treturn deltas.map(function (delta) {\n\t\t\treturn board.walk(coord, delta);\n\t\t});\n\t},\n\t\n\t/** Frequently used deltas for walks are available at `DIRECTIONS`.\n\t*/\n\t\"static DIRECTIONS\": {\n\t\tHORIZONTAL: [[0,-1], [0,+1]],\n\t\tVERTICAL: [[-1,0], [+1,0]], \n\t\tORTHOGONAL: [[0,-1], [0,+1], [-1,0], [+1,0]],\n\t\tDIAGONAL: [[-1,-1], [-1,+1], [+1,-1], [+1,+1]],\n\t\tEVERY: [[0,-1], [0,+1], [-1,0], [+1,0], [-1,-1], [-1,+1], [+1,-1], [+1,+1]]\n\t},\n\t\n\t// ## Board modification #######################################################################\n\t\n\t/** Game states must not be modifiable, else game search algorithms may fail or be extremely \n\tcomplicated. Then, all board altering method in `Checkerboard` must return a new board instance \n\tand leave this instance unspoiled.\n\t\n\tMost board modification functions have two versions: one which actually modifies the board state\n\tand another which returns a modified copy. This is meant to optimize chains of board \n\talterations. To get a copy of this board, the `clone` method can be used.\n\t*/\n\tclone: unimplemented('utils.Checkerboard', 'clone'),\n\t\n\t/** The first function to change the board is `place(coord, value)`. It places the value at the \n\tgiven coordinate, replacing whatever was there.\n\t\n\tThe `__place__` version modifies this board, and is not implemented in the base class. It should\n\treturn this instance, to enable chaining.\n\t*/\n\t__place__: unimplemented('utils.Checkerboard', 'place'),\n\t\n\tplace: function place(coord, value) {\n\t\treturn this.clone().__place__(coord, value);\n\t},\n\n\t/** Another usual operation is `move(coordFrom, coordTo, valueLeft)`. It moves the contents at \n\t`coordFrom` to `coordTo`. Whatever is at `coordTo` gets replaced, and `valueLeft` is placed at\n\t`coordFrom`. If `valueLeft` is undefined, `emptySquare` is used.\n\t*/\n\t__move__: function __move__(coordFrom, coordTo, valueLeft) {\n\t\treturn this.__place__(coordTo, this.square(coordFrom))\n\t\t\t.__place__(coordFrom, typeof valueLeft === 'undefined' ? this.emptySquare : valueLeft);\n\t},\n\t\n\tmove: function move(coordFrom, coordTo, valueLeft) {\n\t\treturn this.clone().__move__(coordFrom, coordTo, valueLeft);\n\t},\n\t\n\t/** The next board operation is `swap(coordFrom, coordTo)`, which moves the contents at \n\t`coordFrom` to `coordTo`, and viceversa.\n\t*/\n\t__swap__: function __swap__(coordFrom, coordTo) {\n\t\tvar valueTo = this.square(coordTo);\n\t\treturn this.__place__(coordTo, this.square(coordFrom))\n\t\t\t.__place__(coordFrom, valueTo);\n\t},\n\t\n\tswap: function swap(coordFrom, coordTo) {\n\t\treturn this.clone().__swap__(coordFrom, coordTo);\n\t},\n\t\n\t// ## Whole board operations ###################################################################\n\t\n\t/** The `transform` builds a new board mapping coordinates of this board with the given\n\tfunction.\n\t*/\n\ttransform: function transform(coordinateMapping) {\n\t\tvar result = this.clone(),\n\t\t\tboard = this;\n\t\tthis.coordinates().forEach(function (position) {\n\t\t\tvar newPosition = coordinateMapping.apply(board, [board, position].concat(position));\n\t\t\tresult.__place__(newPosition, board.square(position));\n\t\t});\n\t\treturn result;\n\t},\n\t\n\t/** Symmetries transform the whole board at once. The `horizontalSymmetry` of the board flips it \n\twith a vertical axis at its center, while the `verticalSymmetry` flips it with an horizontal \n\taxis.\n\t*/\n\thorizontalSymmetry: function horizontalSymmetry() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [row, board.width - column - 1];\n\t\t});\n\t},\n\t\n\tverticalSymmetry: function verticalSymmetry() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [board.height - row - 1, column];\n\t\t});\n\t},\n\t\n\t/** Rotations also transform the whole board at once. The `clockwiseRotation` of the board \n\trotates in the direction that the hands of a clock, while the `counterClockwiseRotation` rotates\n\tit in the opposite direction.\n\t*/\n\tclockwiseRotation: function clockwiseRotation() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [column, board.height - row - 1];\n\t\t});\n\t},\n\t\n\tcounterClockwiseRotation: function counterClockwiseRotation() {\n\t\treturn this.transform(function (board, position, row, column) {\n\t\t\treturn [board.width - column - 1, row];\n\t\t});\n\t},\n\t\n\t// ## Board presentation. ######################################################################\n\t\n\t/** Board games' user interfaces may be implemented using HTML & CSS. This is the case of \n\tLudorum's playtesters.\n\t*/\n\trenderAsHTMLTable: function (document, container, callback) {\n\t\tvar board = this, // for closures.\n\t\t\ttable = document.createElement('table');\n\t\tcontainer.appendChild(table);\n\t\tboard.horizontals().reverse().forEach(function (line) {\n\t\t\tvar tr = document.createElement('tr');\n\t\t\ttable.appendChild(tr);\n\t\t\tline.forEach(function (coord) {\n\t\t\t\tvar square = board.square(coord),\n\t\t\t\t\ttd = document.createElement('td'),\n\t\t\t\t\tdata = {\n\t\t\t\t\t\tid: \"ludorum-square-\"+ coord.join('-'),\n\t\t\t\t\t\tclassName: \"ludorum-square\",\n\t\t\t\t\t\tsquare: square,\n\t\t\t\t\t\tcoord: coord,\n\t\t\t\t\t\tinnerHTML: base.Text.escapeXML(square)\n\t\t\t\t\t};\n\t\t\t\tif (callback) {\n\t\t\t\t\tdata = callback(data) || data;\n\t\t\t\t}\n\t\t\t\ttd['ludorum-data'] = data;\n\t\t\t\ttd.id = data.id;\n\t\t\t\ttd.className = data.className;\n\t\t\t\ttd.innerHTML = data.innerHTML;\n\t\t\t\tif (data.onclick) {\n\t\t\t\t\ttd.onclick = data.onclick;\n\t\t\t\t}\n\t\t\t\ttr.appendChild(td);\n\t\t\t});\n\t\t});\n\t\treturn table;\n\t},\n\t\n\t// ## Heuristics ###############################################################################\n\t\n\t/** A `weightedSum` is an simple way of defining an heuristic. Every position in the board is \n\tassigned a weight, and every possible value is assigned a coefficients (usually player is 1, \n\topponent is -1, else is 0).\n\t\n\tWeights have to be in the same order that `coordinates()` enumerates the board's positions. This\n\tfunction assumes the weights are normalized and sufficient to cover the whole board.\n\t*/\n\tweightedSum: function weightedSum(weights, coefficients) {\n\t\tvar board = this;\n\t\treturn this.coordinates().zip(weights).mapApply(function (coord, weight) {\n\t\t\treturn coefficients[board.square(coord)] * weight || 0;\n\t\t}).sum();\n\t}\n}); //// declare utils.Checkerboard.\n","/** # CheckerboardFromString\n\n[`Checkerboard`](Checkerboard.html) implementation represented by a simple string (one character per \nsquare).\n*/\nvar CheckerboardFromString = utils.CheckerboardFromString = declare(Checkerboard, {\n\t/** The constructor takes `height`, `width`, the whole board content in a `string`, and \n\toptionally the empty square character.\n\t*/\n\tconstructor: function CheckerboardFromString(height, width, string, emptySquare) {\n\t\tCheckerboard.call(this, height, width);\n\t\tif (emptySquare && emptySquare !== this.emptySquare) {\n\t\t\tthis.emptySquare = (emptySquare +'').charAt(0);\n\t\t}\n\t\tif (string && string.length !== height * width) {\n\t\t\tthrow new Error('Given string '+ JSON.stringify(string) +' does not match board dimensions.');\n\t\t}\n\t\tthis.string = string || this.emptySquare.repeat(height * width);\n\t},\n\t\n\t/** The `emptySquare` in `CheckerboardFromString` is `'.'` by default.\n\t*/\n\temptySquare: '.',\t\n\t\n\t/** The default string conversion of `CheckerboardFromString` prints the board one line by row, \n\tlast row on top.\n\t*/\n\ttoString: function toString() {\n\t\tvar string = this.string, height = this.height, width = this.width;\n\t\treturn Iterable.range(height).map(function (i) {\n\t\t\treturn string.substr((height - i - 1) * width, width);\n\t\t}).join('\\n');\n\t},\n\t\n\t// ## Board information ########################################################################\n\t\n\t/** The `square(coord, outside)` return the character at `(row * width + column)` if the \n\tcoordinate is inside the board. Else returns `outside`.\n\t*/\n\tsquare: function square(coord, outside) {\n\t\tvar row = coord[0], \n\t\t\tcolumn = coord[1],\n\t\t\twidth = this.width;\n\t\tif (row >= 0 && row < this.height && column >= 0 && column < width) {\n\t\t\treturn this.string.charAt(row * width + column);\n\t\t} else {\n\t\t\treturn outside;\n\t\t}\n\t},\n\t\n\t// ### Lines ###################################################################################\n\t\n\t/** Since square contents in `CheckerboardFromString` are just characters, lines can be thought \n\tas strings. The method `asString(line)` takes an iterable of coordinates and returns a string of \n\tthe characters found at each point in the sequence.\n\t*/\n\tasString: function asString(line) {\n\t\tvar board = this;\n\t\treturn line.map(function (coord) {\n\t\t\treturn board.square(coord);\n\t\t}).join('');\n\t},\n\t\n\t/** The method `asStrings(lines)` can be used to easily map `asString(line)` to a sequence of \n\tlines, like the one calculated by `lines()`.\n\t*/\n\tasStrings: function asStrings(lines) {\n\t\tvar board = this;\n\t\treturn lines.map(function (line) {\n\t\t\treturn board.asString(line);\n\t\t});\n\t},\n\t\n\t/** Many games based on board configurations (like connection games) have patterns that can be \n\texpressed with regular expressions. The method `asRegExp(line, insideLine, outsideLine)` takes a \n\tline (iterable of coordinates) and returns a string with a regular expression. This may be used \n\tto tests the whole board string for the line.\n\t\n\t_Warning!_ Both `insideLine` and `outsideLine` must be simple regular expressions (e.g. a \n\tcharacter or atom). If more complex expressions are required they must be provided between \n\tparenthesis.\n\t*/\n\tasRegExp: function asRegExp(line, insideLine, outsideLine) {\n\t\toutsideLine = outsideLine || '.';\n\t\tvar width = this.width,\n\t\t\tsquares = Iterable.repeat(false, width * this.height).toArray();\n\t\tline.forEach(function (coord) {\n\t\t\tsquares[coord[0] * width + coord[1]] = true;\n\t\t});\n\t\tvar result = '', count = 0, current;\n\t\tfor (var i = 0; i < squares.length; count = 0) {\n\t\t\tcurrent = squares[i];\n\t\t\tdo {\n\t\t\t\t++count;\n\t\t\t} while (++i < squares.length && squares[i] === current);\n\t\t\tif (count < 2) {\n\t\t\t\tresult += current ? insideLine : outsideLine;\n\t\t\t} else {\n\t\t\t\tresult += (current ? insideLine : outsideLine) +'{'+ count +'}';\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\t\n\t/** The method `asRegExps(lines)` can be used to easily map `asRegExp(line)` to a sequence of \n\tlines. All regular expressions are joined as a union (`|`). Use with caution, because the whole \n\tregular expression can get very big even with small boards.\n\t*/\n\tasRegExps: function asRegExps(lines, insideLine, outsideLine) {\n\t\tvar board = this;\n\t\treturn lines.map(function (line) {\n\t\t\treturn board.asRegExp(line, insideLine, outsideLine);\n\t\t}).join('|');\n\t},\n\t\n\t// ## Board modification #######################################################################\n\t\n\t/** Cloning a CheckerboardFromString simply calls the constructor again with the proper \n\targuments to replicate this instance.\n\t*/\n\tclone: function clone() {\n\t\treturn new this.constructor(this.height, this.width, this.string, \n\t\t\tthis.hasOwnProperty('emptySquare') ? this.emptySquare : undefined);\n\t},\n\t\n\t/** A `place(coord, value)` means only changing one character in the underlying string. The \n\t`value` must be a character, and `coord` a point inside the board.\n\t*/\n\t__place__: function __place__(coord, value) {\n\t\traiseIf(!this.isValidCoord(coord), \"Invalid coordinate \", coord, \".\");\n\t\tvalue = (value + this.emptySquare).charAt(0);\n\t\tvar i = coord[0] * this.width + coord[1];\n\t\tthis.string = this.string.substr(0, i) + value + this.string.substr(i + 1);\n\t\treturn this;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'CheckerboardFromString',\n\t\tserializer: function serialize_CheckerboardFromString(obj) {\n\t\t\tvar r = [obj.height, obj.width, obj.string];\n\t\t\tif (obj.hasOwnProperty('emptySquare')) {\n\t\t\t\tr.push(obj.emptySquare);\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\t}\n}); // declare utils.CheckerboardFromString","/** # Checkerboard from pieces\n\n[`Checkerboard`](Checkerboard.html) implementation represented by a list of pieces (objects) with a\nlocation in the board.\n*/\nvar CheckerboardFromPieces = utils.CheckerboardFromPieces = declare(Checkerboard, {\n\t/** The constructor takes `height`, `width`, a list of piece objects and optionally the empty \n\tsquare object. The piece objects must have a property `position`. Only one piece is allowed at\n\teach square.\n\t*/\n\tconstructor: function CheckerboardFromPieces(height, width, pieces, emptySquare) {\n\t\tCheckerboard.call(this, height, width);\n\t\tvar board = this;\n\t\tif (emptySquare !== this.emptySquare) {\n\t\t\tthis.emptySquare = emptySquare;\n\t\t}\n\t\tif (Array.isArray(pieces)) {\n\t\t\tthis.pieces = {}; \n\t\t\titerable(pieces || []).forEach(function (piece) {\n\t\t\t\traiseIf(!Array.isArray(piece.position), \"Piece has not a position (\", piece, \")!\");\n\t\t\t\tboard.pieces[piece.position +''] = piece;\n\t\t\t});\n\t\t} else if (typeof pieces === 'object') {\n\t\t\tthis.pieces = base.copy({}, pieces);\n\t\t} else {\n\t\t\traise(\"Invalid pieces definition: \", pieces, \"!\");\n\t\t}\n\t},\n\t\n\t/** The `emptySquare` in `CheckerboardFromPieces` is `null` by default.\n\t*/\n\temptySquare: null,\t\n\t\n\t/** The default string conversion of `CheckerboardFromPieces` prints the piece list.\n\t*/\n\ttoString: function toString() {\n\t\treturn '['+ iterable(this.pieces).select(1).join(', ') +']';\n\t},\n\t\n\t// ## Board information ########################################################################\n\t\n\t/** The `square(coord, outside)` return the piece object at the given `coord` if there is one \n\tand the coordinate is inside the board. Else returns `outside`.\n\t*/\n\tsquare: function square(coord, outside) {\n\t\treturn this.pieces[coord] || outside;\n\t},\n\t\n\t// ## Board modification #######################################################################\n\t\n\t/** Cloning a `CheckerboardFromPieces` simply calls the constructor again with the proper \n\targuments to replicate this instance. The `pieces` object is copied _shallowly_ by the \n\tconstructor.\n\t*/\n\tclone: function clone() {\n\t\treturn new this.constructor(this.height, this.width, this.pieces, this.emptySquare);\n\t},\n\t\n\t/** A `place(coord, value)` means removing any existing piece at the given `coord` and adding \n\tthe `value` piece if given.\n\t*/\n\t__place__: function __place__(coord, value) {\n\t\traiseIf(!this.isValidCoord(coord), \"Invalid coordinate \", coord, \"!\");\n\t\tvar id = coord +'';\n\t\tdelete this.pieces[id];\n\t\tif (value) {\n\t\t\tthis.pieces[id] = value;\n\t\t}\n\t\treturn this;\n\t}\n}); // declare utils.CheckerboardFromPieces\n","/** # Scanner\n\nComponent for scanning a game's tree.\n*/\nexports.utils.Scanner = declare({\n\t/** A Scanner builds a sample of a game tree, in order to get statistics \n\tfrom some of all possible matches. The given `config` must have:\n\t*/\n\tconstructor: function Scanner(config) {\n\t\tinitialize(this, config)\n\t\t// + `game`: Game to scan.\n\t\t\t.object(\"game\", { ignore: true })\n\t\t// + `maxWidth=1000`: Maximum amount of game states held at each step.\n\t\t\t.integer(\"maxWidth\", { defaultValue: 1000, coerce: true })\n\t\t// + `maxLength=50`: Maximum length of simulated matches.\n\t\t\t.integer(\"maxLength\", { defaultValue: 50, coerce: true })\n\t\t// + `random=randomness.DEFAULT`: Pseudorandom number generator to use in the simulations.\n\t\t\t.object(\"random\", { defaultValue: Randomness.DEFAULT })\n\t\t// + `statistics=`: Component to gather relevant statistics.\n\t\t\t.object(\"statistics\", { defaultValue: new Statistics() });\n\t},\n\t\n\t/** A scan of a game's tree reproduces and samples the set of all possible \n\tmatches from the given game states. The simulation halts at `maxLength` \n\tplies, and never holds more than `maxWidth` game states. Since this process\n\tis asynchronous, this method returns a future.\n\t\n\tThe `players` argument may provide a player for some or all of the games' \n\troles. If available, they will be used to decide which move is applied to \n\teach game state. If missing, all next game states will be added. Ergo no \n\tplayers means a simulation off all possible matches.\t\t\n\t*/\n\tscan: function scan(players) {\n\t\tvar scanner = this,\n\t\t\twindow = arguments.length < 2 ? (this.game ? [this.game] : []) : Array.prototype.slice.call(arguments, 1),\n\t\t\tply = 0; \n\t\treturn Future.whileDo(function () {\n\t\t\treturn window.length > 0 && ply < scanner.maxLength;\n\t\t}, function () {\n\t\t\treturn Future.all(window.map(function (game) {\n\t\t\t\treturn scanner.__advance__(players, game, ply);\n\t\t\t})).then(function (level) {\n\t\t\t\twindow = iterable(level).flatten().sample(scanner.maxWidth, scanner.random).toArray();\n\t\t\t\treturn ++ply;\n\t\t\t});\n\t\t}).then(function () {\n\t\t\tscanner.statistics.add({ key:'aborted' }, window.length);\n\t\t\treturn scanner.statistics;\n\t\t});\n\t},\n\t\n\t/** Performs scans for many different player setups.\n\t*/\n\tscans: function scans() {\n\t\treturn Future.sequence(Array.prototype.slice.call(arguments), this.scan.bind(this));\n\t},\n\t\n\t/** The `__advance__` method advances the given game by one ply. This may \n\tmean for non final game states either instantiate random variables, ask the \n\tavailable player for a decision, or take all next game states. Final game \n\tstates are removed. \n\t\n\tAll game states are accounted in the scanner's statistics. The result is an \n\titerable with the game states to add to the next scan window.\n\t*/\n\t__advance__: function __advance__(players, game, ply) {\n\t\tif (game instanceof Aleatory) {\n\t\t\treturn iterable(game.distribution()).mapApply(function (value, prob) {\n\t\t\t\treturn game.next(value);\n\t\t\t});\n\t\t} else if (this.account(players, game, ply)) {\n\t\t\treturn Iterable.EMPTY;\n\t\t} else {\n\t\t\tvar scanner = this,\n\t\t\t\tmoves = game.moves(),\n\t\t\t\tstats = this.statistics;\n\t\t\treturn Future.all(game.activePlayers.map(function (role) {\n\t\t\t\tif (players && players[role]) {\n\t\t\t\t\tvar p = players[role],\n\t\t\t\t\t\tdecisionTime = stats.stat({key:'decision.time', game: game.name, role: role, player: p.name});\n\t\t\t\t\tdecisionTime.startTime();\n\t\t\t\t\treturn Future.when(p.decision(game, role)).then(function (move) {\n\t\t\t\t\t\tdecisionTime.addTime();\n\t\t\t\t\t\treturn [[role, move]];\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn moves[role].map(function (move) {\n\t\t\t\t\t\treturn [role, move];\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})).then(function (decisions) {\n\t\t\t\treturn Iterable.product.apply(Iterable, decisions).map(function (moves) {\n\t\t\t\t\treturn game.next(iterable(moves).toObject());\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t},\n\t\t\t\n\t/** The `account` method gathers statistics about the game. These include:\n\t\t\n\t+ `game.result`: Final game state results. Also available for victory and defeat.\n\t+ `game.length`: Match length in plies. Also available for victory and defeat.\n\t+ `game.width`: Number of available moves.\n\t+ `draw.length`: Drawn match length in plies.\n\t\n\tReturns whether the given game state is final or not.\n\t*/\n\taccount: function account(players, game, ply) {\n\t\tvar result = game.result(),\n\t\t\tstats = this.statistics;\n\t\tif (result) {\n\t\t\titerable(game.players).forEach(function (role) {\n\t\t\t\tvar r = result[role],\n\t\t\t\t\tp = (players && players[role]) ? players[role].name : '',\n\t\t\t\t\tkeys = ['game:'+ game.name, 'role:'+ role, 'player:'+ p];\n\t\t\t\tstats.add({key:'game.result', game:game.name, role:role, player:p}, r, game);\n\t\t\t\tstats.add({key:'game.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\tif (r < 0) {\n\t\t\t\t\tstats.add({key:'defeat.result', game:game.name, role:role, player:p}, r, game);\n\t\t\t\t\tstats.add({key:'defeat.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\t} else if (r > 0) {\n\t\t\t\t\tstats.add({key:'victory.result', game:game.name, role:role, player:p}, r, game);\n\t\t\t\t\tstats.add({key:'victory.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\t} else {\n\t\t\t\t\tstats.add({key:'draw.length', game:game.name, role:role, player:p}, ply, game);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn true;\n\t\t} else {\n\t\t\tvar moves = game.moves();\n\t\t\titerable(game.activePlayers).forEach(function (role) {\n\t\t\t\tstats.add({key:'game.width', game:game.name, role:role}, moves[role].length);\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\t}\n}); // Scanner.\n","/** # Cache\n\nA game cache contains a part of a game tree, avoiding redundancies. It can be\nused to implement a [transposition table](http://en.wikipedia.org/wiki/Transposition_table) \nor similar data structures.\n*/\nutils.Cache = declare({\n\t/** The `Cache` constructor may take a game to define as `root`.\n\t*/\n\tconstructor: function Cache(game) {\n\t\tthis.clear();\n\t\tif (game) {\n\t\t\tthis.root(game);\n\t\t}\n\t},\n\t\n\t/** The `stateIdentifier(state)` of every game state is used as the key in \n\tthe cache's entries. By default is calculated with the `Game.identifier()`\n\tmethod.\n\t*/\n\tstateIdentifier: function stateIdentifier(state) {\n\t\treturn state.identifier();\n\t},\n\t\n\t/** The `moveIdentifier(move)` is used as the key in each entry's \n\tdescendants. By default it uses the move JSON _stringification_.\n\t*/\n\tmoveIdentifier: function moveIdentifier(move) {\n\t\treturn JSON.stringify(move);\n\t},\n\t\n\t/** The `has(state|id)` returns if the given state or state identifier has \n\tan entry in this cache.\n\t*/\n\thas: function has(state) {\n\t\tvar stateId = typeof state === 'string' ? state : this.stateIdentifier(state);\n\t\treturn this.__entries__.hasOwnProperty(stateId);\n\t},\n\t\n\t/** If the given state or state identifier has en entry in this cache, \n\t`get(state)` returns that entry. Else it returns `undefined`.\n\t*/\n\tget: function get(state) {\n\t\tvar stateId = typeof state === 'string' ? state : this.stateIdentifier(state);\n\t\treturn this.__entries__[stateId];\n\t},\n\t\n\t/** `size()` returns the amount of entries in this cache.\n\t*/\n\tsize: function size() {\n\t\treturn Object.keys(this.__entries__).length;\n\t},\n\t\n\t/** If the given state has no entry in this cache, `entry(state, id)` builds\n\ta new entry, adds it to this cache and returns it. If the state is already\n\tcached, its entry is returned.\n\tEvery entry has the game `state`, its `id`, the states that may come before\n\t(the `precursors`) and the states that may follow (the `descendants`).\n\t*/\n\tentry: function entry(state, id) {\n\t\tid = id || this.stateIdentifier(state);\n\t\tif (this.has(id)) {\n\t\t\treturn this.get(id);\n\t\t} else {\n\t\t\tvar _entry = { id: id, state: state, precursors: [], descendants: {} };\n\t\t\tthis.__entries__[id] = _entry;\n\t\t\treturn _entry;\n\t\t}\n\t},\n\t\n\t/** An entry's `descendant(entry, moves)` is the entry of the game state \n\tfollowing the given entry's game state with the given moves. The method not\n\tonly returns the entry is this state, it creates and caches that entry if \n\tnot present.\n\t*/\n\tdescendant: function descendant(entry, moves) {\n\t\tvar movesId = this.moveIdentifier(moves),\n\t\t\tdescendants = entry.descendants;\n\t\tif (descendants.hasOwnProperty(movesId)) { // Already expanded.\n\t\t\treturn descendants[movesId][1];\n\t\t} else {\n\t\t\tvar nextState = entry.state.next(moves),\n\t\t\t\tnextStateId = this.stateIdentifier(nextState),\n\t\t\t\tnextEntry = this.get(nextStateId) || // Reuse entry in cache if it exists.\n\t\t\t\t\tthis.entry(nextState, nextStateId); // Else add new entry.\n\t\t\tdescendants[movesId] = [moves, nextEntry];\n\t\t\tnextEntry.precursors.push([moves, entry]);\n\t\t\treturn nextEntry;\n\t\t}\n\t},\n\t\n\t/** An entry `descendants(entry)` is an array of all the entry's \n\tdescendants, for all the possible moves for the entry's state.\n\t*/\n\tdescendants: function descendants(entry) {\n\t\tvar descendant = this.descendant.bind(this, entry);\n\t\tif (arguments.length > 1) {\n\t\t\treturn Array.prototype.slice.call(arguments, 1).map(descendant);\n\t\t} else { // if (arguments.length == 0)\n\t\t\treturn entry.state.possibleMoves().map(descendant);\n\t\t}\n\t},\n\t\n\t/** A clear cache has no entries and of course no root.\n\t*/\n\tclear: function clear() {\n\t\tthis.__entries__ = {};\n\t\tthis.__root__ = null;\n\t},\n\t\n\t/** If `root()` is called without arguments, it returns the current root.\n\tIf a state is given, that state is assigned as the new root, and the whole\n\tcache is pruned.\n\t*/\n\troot: function root(state) {\n\t\tif (arguments.length > 0) { // Called with argument means setter.\n\t\t\tvar stateId = this.stateIdentifier(state);\n\t\t\tthis.__root__ = this.get(stateId) || this.entry(state, stateId);\n\t\t\tthis.prune(stateId);\n\t\t}\n\t\treturn this.__root__;\n\t},\n\t\n\t/** `prune(id=root.id)` deletes all nodes except the one with the given id \n\tand its descendants.\n\t*/\n\tprune: function prune(id) {\n\t\tvar pending = [id || this.__root__.id], \n\t\t\tpruned = {},\n\t\t\tentry;\n\t\twhile (id = pending.shift()) {\n\t\t\tif (!pruned.hasOwnProperty(id)) {\n\t\t\t\tentry = this.get(id);\n\t\t\t\tpruned[id] = entry;\n\t\t\t\tpending.push.apply(pending, iterable(entry.descendants).mapApply(function (id, pair) {\n\t\t\t\t\treturn pair[1][id];\n\t\t\t\t}).toArray());\n\t\t\t}\n\t\t}\n\t\treturn this.__entries__ = pruned;\n\t}\t\n}); // declare Cache\n","/** # Game tree\r\n\r\nA data structure to help building game trees, i.e. trees in which each node is a game state, the\r\nfinal states are leaves and each child node belongs to one of the next states of its parent.\r\n*/\r\nvar GameTree = declare({\r\n\t/** Each instance represents a node in the game tree. The `parent` must be null or undefined at\r\n\tthe root. The given `transition` is either the moves or the aleatory values used to move from \r\n\tthe parent's state to this node's state. They also must be null or undefined at the root.\r\n\t*/\r\n\tconstructor: function GameTree(parent, state, transition) {\r\n\t\tthis.parent = parent;\r\n\t\tthis.state = state;\r\n\t\tthis.transition = transition;\r\n\t\tthis.children = {};\r\n\t},\r\n\t\r\n\t/** This node's `children` are stored in an object, hence getting the count is a little tricky.\r\n\t*/\r\n\tchildrenCount: function childrenCount() {\r\n\t\treturn Object.keys(this.children).length;\r\n\t},\r\n\t\r\n\t/** In the `children` object nodes are stored with a serialization of their transitions as keys.\r\n\tBy default the JSON _\"strinigification\"_ is used.\r\n\t*/\r\n\t__childSerialization__: function __childSerialization__(moves) {\r\n\t\treturn JSON.stringify(moves);\r\n\t},\r\n\t\r\n\t/** A node expansion takes the `moves` to calculate the next state and creates the child node\r\n\twith it. If the node already exists, it is returned and none is created.\r\n\t*/\r\n\texpand: function expand(transition) {\r\n\t\tvar key = this.__childSerialization__(transition),\r\n\t\t\tchild = this.children[key], nextState;\r\n\t\tif (!child) {\r\n\t\t\ttry {\r\n\t\t\t\tnextState = this.state.next(transition); \r\n\t\t\t} catch (err) {\r\n\t\t\t\traise(\"Node expansion for \", this.state, \" with \", JSON.stringify(transition),\r\n\t\t\t\t\t\" failed with: \", err);\r\n\t\t\t}\r\n\t\t\tchild = new this.constructor(this, nextState, transition);\r\n\t\t\tthis.children[key] = child;\r\n\t\t}\r\n\t\treturn child;\r\n\t},\r\n\t\r\n\t/** Returns the possible moves is the state is an instance of Game, or the possible values if\r\n\tthe state is an instance of Aleatory.\r\n\t*/\r\n\tpossibleTransitions: function possibleTransitions() {\r\n\t\tvar state = this.state;\r\n\t\tif (state.isContingent) {\r\n\t\t\treturn state.possibleHaps();\r\n\t\t} else {\r\n\t\t\treturn state.possibleMoves();\r\n\t\t}\r\n\t},\r\n\t\r\n\t/** A full expansion creates all child nodes for this node.\r\n\t*/\r\n\texpandAll: function expandAll() {\r\n\t\tvar node = this;\r\n\t\treturn this.possibleTransitions().map(function (transition) {\r\n\t\t\treturn node.expand(// An array as transition means it belongs to a contingent state\r\n\t\t\t\tArray.isArray(transition) ? transition[0] : transition);\r\n\t\t});\r\n\t}\r\n}); // declare GameTree","/** # RandomPlayer\n\nAutomatic players that moves fully randomly.\n*/\t\nplayers.RandomPlayer = declare(Player, {\n\t/** The constructor takes the player's `name` and a `random` number generator\n\t(`base.Randomness.DEFAULT` by default).\n\t*/\n\tconstructor: function RandomPlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT });\n\t},\n\n\t/** The `decision(game, player)` is made completely at random.\n\t*/\n\tdecision: function(game, player) {\n\t\treturn this.random.choice(this.movesFor(game, player));\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'RandomPlayer',\n\t\tserializer: function serialize_RandomPlayer(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name', 'random']);\n\t\t}\n\t},\n}); // declare RandomPlayer.\n","/** # TracePlayer\n\nAutomatic player that is scripted previously.\n*/\nplayers.TracePlayer = declare(Player, {\n\t/** The constructor takes the player's `name` and the `trace` as an sequence of moves to make.\n\t*/\n\tconstructor: function TracePlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tthis.trace = iterable(params.trace);\n\t\tthis.__iter__ = this.trace.__iter__();\n\t\tthis.__decision__ = this.__iter__();\n\t},\n\n\t/** The `decision(game, player)` returns the next move in the trace, or the last one if the \n\ttrace has ended.\n\t*/\n\tdecision: function(game, player) {\n\t\ttry {\n\t\t\tthis.__decision__ = this.__iter__();\n\t\t} catch (err) {\n\t\t\tIterable.prototype.catchStop(err);\n\t\t}\n\t\treturn this.__decision__;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Player',\n\t\tserializer: function serialize_Player(obj) {\n\t\t\treturn [{name: obj.name, trace: obj.trace.toArray()}];\n\t\t}\n\t}\n}); // declare TracePlayer.\n","/** # HeuristicPlayer\n\nThis is the base type of automatic players based on heuristic evaluations of game states or moves.\n*/\n\nvar HeuristicPlayer = players.HeuristicPlayer = declare(Player, {\n\t/** The constructor takes the player's `name` and a `random` number generator \n\t(`base.Randomness.DEFAULT` by default). Many heuristic can be based on randomness, but this is \n\talso necessary to chose between moves with the same evaluation without any bias.\n\t*/\n\tconstructor: function HeuristicPlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.object('random', { defaultValue: Randomness.DEFAULT })\n\t\t\t.func('heuristic', { ignore: true });\n\t},\n\n\t/** An `HeuristicPlayer` choses the best moves at any given game state. For this purpose it \n\tevaluates every move with `moveEvaluation(move, game, player)`. By default this function \n\tevaluates the states resulting from making each move, which is the most common thing to do.\n\t*/\n\tmoveEvaluation: function moveEvaluation(move, game, player) {\n\t\tvar heuristicPlayer = this;\n\t\tif (Object.keys(move).length < 2) { // One active player.\n\t\t\treturn this.stateEvaluation(game.next(move), player);\n\t\t} else { // Many active players.\n\t\t\tvar sum = 0, count = 0;\n\t\t\tmove = copy(obj(player, [move[player]]), move);\n\t\t\tgame.possibleMoves(move).forEach(function (ms) {\n\t\t\t\tsum += heuristicPlayer.stateEvaluation(game.next(ms), player);\n\t\t\t\t++count;\n\t\t\t});\n\t\t\treturn count > 0 ? sum / count : 0; // Average all evaluations.\n\t\t}\n\t},\n\n\t/** The `stateEvaluation(game, player)` calculates a number as the assessment of the given game \n\tstate for the given player. The base implementation returns the result for the player is the \n\tgame has results, else it returns the heuristic value for the state.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\tvar gameResult = game.result();\n\t\treturn gameResult ? gameResult[player] : this.heuristic(game, player);\n\t},\n\n\t/** The `heuristic(game, player)` is an evaluation used at states that are not finished games. \n\tThe default implementation returns a random number in [-0.5, 0.5). This is only useful in \n\ttesting. Any serious use should redefine this.\n\t*/\n\theuristic: function heuristic(game, player) {\n\t\treturn this.random.random(-0.5, 0.5);\n\t},\n\t\n\t/** Heuristic players work by evaluating the moves of the `player` in the given `game` state. If\n\tthe game state is contingent, then all possible scenarios are evaluated and aggregated. The \n\tresult of `evaluatedMoves` is a sequence of pairs `[move, evaluation]`, or a future for such \n\tsequence if the evaluation function is asynchronous.\n\t*/\n\tevaluatedMoves: function evaluatedMoves(game, player) {\n\t\tvar heuristicPlayer = this,\n\t\t\tisAsync = false;\n\t\tif (!game.isContingent) {\n\t\t\t/** Every move is evaluated using `moveEvaluation`. This may be asynchronous and hence\n\t\t\tresult in a `Future`.\n\t\t\t*/\n\t\t\tvar result = this.possibleMoves(game, player).map(function (move) {\n\t\t\t\tvar e = heuristicPlayer.moveEvaluation(move, game, player);\n\t\t\t\tisAsync = isAsync || Future.__isFuture__(e);\n\t\t\t\treturn Future.then(e, function (e) {\n\t\t\t\t\treturn [move, e];\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn isAsync ? Future.all(result) : result;\n\t\t} else {\n\t\t\t/** Contingent game states don't have moves. Hence all posible haps are explored, and\n\t\t\twhen a non-contingent game state is reached the moves are evaluated.\n\t\t\t*/\n\t\t\tvar posible = iterable(game.possibleHaps()).mapApply(function (haps, prob) {\n\t\t\t\tvar es = heuristicPlayer.evaluatedMoves(game.next(haps), player);\n\t\t\t\tisAsync = isAsync || Future.__isFuture__(es);\n\t\t\t\treturn Future.then(es, function (es) {\n\t\t\t\t\treturn es.map(function (e) {\n\t\t\t\t\t\te[1] *= prob; // Multiply the evaluation by the probability of the haps.\n\t\t\t\t\t\treturn e;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t\t/** After all posible scenarios have been evaluated, group the evaluations by move and\n\t\t\tsum the evaluations weighted by probability.\n\t\t\t*/\n\t\t\treturn Future.then(isAsync ? Future.all(posible) : posible, function (posible) {\n\t\t\t\treturn iterable(posible).groupBy(function (p) {\n\t\t\t\t\treturn p[0]; // Group evaluations by move.\n\t\t\t\t}).mapApply(function (move, evals) {\n\t\t\t\t\treturn [move, iterable(evals).select(1).sum()];\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}, // evaluatedMoves()\n\t\n\t/** The `possibleMoves` for a `player` in a given `game` is a set of objects, with one move for\n\tthe player, and all the options for the opponents.\n\t*/\n\tpossibleMoves: function possibleMoves(game, player) {\n\t\tvar moves = game.moves();\n\t\traiseIf(!moves || !moves[player] || !Array.isArray(moves[player]) || moves[player].length < 1,\n\t\t\t\"Player \"+ player +\" has no moves in \"+ game +\" (moves= \"+ moves +\")!\");\n\t\treturn iterable(moves[player]).map(function (move) {\n\t\t\treturn copy(obj(player, move), moves);\n\t\t});\n\t},\n\t\n\t/** The `bestMoves(evaluatedMoves)` are all the best evaluated in the given sequence of tuples \n\t[move, evaluation].\n\t*/\n\tbestMoves: function bestMoves(evaluatedMoves) {\n\t\treturn Future.then(evaluatedMoves, function (evaluatedMoves) {\n\t\t\treturn iterable(evaluatedMoves).greater(function (pair) {\n\t\t\t\treturn pair[1];\n\t\t\t}).map(function (pair) {\n\t\t\t\treturn pair[0];\n\t\t\t});\n\t\t});\n\t},\n\t\n\t/** The `decision(game, player)` selects randomly from the best evaluated moves.\n\t*/\n\tdecision: function decision(game, player) {\n\t\tvar random = this.random;\n\t\treturn Future.then(this.bestMoves(this.evaluatedMoves(game, player)), function (bestMoves) {\n\t\t\tbestMoves = iterable(bestMoves).toArray();\n\t\t\traiseIf(!bestMoves || !bestMoves.length, \n\t\t\t\t\"No moves where selected at \", game, \" for player \", player, \"!\");\n\t\t\treturn random.choice(bestMoves)[player];\n\t\t});\n\t},\n\t\n\t// ## Utilities to build heuristics ############################################################\n\t\n\t/** A `composite` heuristic function returns the weighted sum of other functions. The arguments \n\tmust be a sequence of heuristic functions and a weight. All weights must be between 0 and 1 and\n\tadd up to 1.\n\t*/\n\t'static composite': function composite() {\n\t\tvar components = Array.prototype.slice.call(arguments), weightSum = 0;\n\t\traiseIf(components.length < 1,\n\t\t\t\"HeuristicPlayer.composite() cannot take an odd number of arguments!\");\n\t\tfor (var i = 0; i < components.length; i += 2) {\n\t\t\traiseIf(typeof components[i] !== 'function', \n\t\t\t\t\"HeuristicPlayer.composite() argument \", i, \" (\", components[i], \") is not a function!\");\n\t\t\tcomponents[i+1] = +components[i+1];\n\t\t\traiseIf(isNaN(components[i+1]) || components[i+1] < 0 || components[i+1] > 1, \n\t\t\t\t\"HeuristicPlayer.composite() argument \", i+1, \" (\", components[i+1], \") is not a valid weight!\");\n\t\t}\n\t\treturn function compositeHeuristic(game, player) {\n\t\t\tvar sum = 0;\n\t\t\tfor (var i = 0; i+1 < components.length; i += 2) {\n\t\t\t\tsum += components[i](game, player) * components[i+1];\n\t\t\t}\n\t\t\treturn sum;\n\t\t};\n\t}\n}); // declare HeuristicPlayer.","/** # MaxNPlayer\n\nAutomatic players based on the MaxN algorithm, a MiniMax variant for games of more than two players.\n*/\nvar MaxNPlayer = players.MaxNPlayer = declare(HeuristicPlayer, {\n\t/** Besides the parameters of every [`HeuristicPlayer`](HeuristicPlayer.js.html), an `horizon` \n\tfor the search may be specified (3 plies by default).\n\t*/\n\tconstructor: function MaxNPlayer(params) {\n\t\tHeuristicPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.integer('horizon', { defaultValue: 3, coerce: true });\n\t},\n\n\t/** This player evaluates each state using the `maxn` method, taking the evaluation for the \n\tgiven `player`.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\treturn this.maxN(game, player, 0)[player];\n\t},\n\n\t/** `heuristics(game)` returns an heuristic value for each players in the game, as an object.\n\t*/\n\theuristics: function heuristic(game) {\n\t\tvar result = {}, maxN = this;\n\t\tgame.players.forEach(function (role) {\n\t\t\tresult[role] = maxN.heuristic(game, role);\n\t\t});\n\t\treturn result;\n\t},\n\n\t/** `quiescence(game, player, depth)` is a stability test for the given `game` state and the \n\tgiven `player`. If the game is quiescent, this function must return evaluations. Else it must \n\treturn null. \n\t\n\tFinal game states are always quiescent, and their evaluations are the game's result for each \n\tplayer. This default implementation also returns heuristic evaluations for every game state at \n\ta deeper depth than the player's horizon, calculated via the `heuristics()` method. \n\t*/\n\tquiescence: function quiescence(game, player, depth) {\n\t\tvar results = game.result();\n\t\tif (results) {\n\t\t\treturn results;\n\t\t} else if (depth >= this.horizon) {\n\t\t\treturn this.heuristics(game);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t},\n\t\n\t/** The core `maxN(game, player, depth)` algorithm return the evaluations for each player of the \n\tgiven game, assuming each player tries to maximize its own evaluation regardless of the others'.\n\t*/\n\tmaxN: function maxN(game, player, depth) {\n\t\tvar values = this.quiescence(game, player, depth);\n\t\tif (!values) { // game is not quiescent.\n\t\t\tvar activePlayer = game.activePlayer(),\n\t\t\t\tmoves = this.movesFor(game, activePlayer),\n\t\t\t\totherValues, next;\n\t\t\tvalues = {};\n\t\t\tif (moves.length < 1) {\n\t\t\t\tthrow new Error('No moves for unfinished game '+ game +'.');\n\t\t\t}\n\t\t\tfor (var i = 0; i < moves.length; ++i) {\n\t\t\t\tnext = game.next(obj(activePlayer, moves[i]));\n\t\t\t\totherValues = this.maxN(next, player, depth + 1);\n\t\t\t\tif (otherValues[activePlayer] > (values[activePlayer] || -Infinity)) {\n\t\t\t\t\tvalues = otherValues;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn values;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'MaxNPlayer',\n\t\tserializer: function serialize_MaxNPlayer(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name', 'horizon']);\n\t\t}\n\t}\n}); // declare MaxNPlayer.","/** # MiniMaxPlayer\n\nAutomatic players based on pure MiniMax.\n*/\nvar MiniMaxPlayer = players.MiniMaxPlayer = declare(HeuristicPlayer, {\n\t/** The constructor takes the player's `name` and the MiniMax search's \n\t`horizon` (`4` by default).\n\t*/\n\tconstructor: function MiniMaxPlayer(params) {\n\t\tHeuristicPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.integer('horizon', { defaultValue: 4, coerce: true });\n\t},\n\n\t/** Every state's evaluation is the minimax value for the given game and \n\tplayer.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\treturn this.minimax(game, player, 0);\n\t},\n\n\t/** The `quiescence(game, player, depth)` method is a stability test for the \n\tgiven game state. If the game is quiescent, this function must return an \n\tevaluation. Else it must return NaN or an equivalent value. \n\t\n\tFinal game states are always quiescent, and their evaluation is the game's\n\tresult for the given player. This default implementation also return an \n\theuristic evaluation for every game state at a deeper depth than the \n\tplayer's horizon.\n\t*/\n\tquiescence: function quiescence(game, player, depth) {\n\t\tvar results = game.result();\n\t\tif (results) {\n\t\t\treturn results[player];\n\t\t} else if (depth >= this.horizon) {\n\t\t\treturn this.heuristic(game, player);\n\t\t} else {\n\t\t\treturn NaN;\n\t\t}\n\t},\n\t\n\t/** The `minimax(game, player, depth)` method calculates the Minimax \n\tevaluation of the given game for the given player. If the game is not \n\tfinished and the depth is greater than the horizon, `heuristic` is used.\n\t*/\n\tminimax: function minimax(game, player, depth) {\n\t\tvar value = this.quiescence(game, player, depth);\n\t\tif (isNaN(value)) { // game is not quiescent.\n\t\t\tvar activePlayer = game.activePlayer(),\n\t\t\t\tmoves = this.movesFor(game, activePlayer), \n\t\t\t\tcomparison, next;\n\t\t\tif (moves.length < 1) {\n\t\t\t\tthrow new Error('No moves for unfinished game '+ game +'.');\n\t\t\t}\n\t\t\tif (activePlayer == player) {\n\t\t\t\tvalue = -Infinity;\n\t\t\t\tcomparison = Math.max;\n\t\t\t} else {\n\t\t\t\tvalue = +Infinity;\n\t\t\t\tcomparison = Math.min;\n\t\t\t}\n\t\t\tfor (var i = 0; i < moves.length; ++i) {\n\t\t\t\tnext = game.next(obj(activePlayer, moves[i]));\n\t\t\t\tvalue = comparison(value, this.minimax(next, player, depth + 1));\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'MiniMaxPlayer',\n\t\tserializer: function serialize_MiniMaxPlayer(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name', 'horizon']);\n\t\t}\n\t}\n}); // declare MiniMaxPlayer.","/** # AlphaBetaPlayer\n\nAutomatic players based on MiniMax with alfa-beta pruning.\n*/\nplayers.AlphaBetaPlayer = declare(MiniMaxPlayer, {\n\t/** The constructor does not add anything to the parent\n\t[`MiniMaxPlayer`](MiniMaxPlayer.js.html) constructor.\n\t*/\n\tconstructor: function AlphaBetaPlayer(params) {\n\t\tMiniMaxPlayer.call(this, params);\n\t},\n\n\t/** Every state's evaluation is the minimax value for the given game and \n\tplayer. The alfa an beta arguments are initialized with `-Infinity` and\n\t`Infinity`.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\treturn this.minimax(game, player, 0, -Infinity, Infinity);\n\t},\n\n\t/** The `minimax(game, player, depth, alfa, beta)` method calculates the \n\tMinimax evaluation of the given game for the given player. If the game is \n\tnot finished and the depth is greater than the horizon, the heuristic is\n\tused.\n\t*/\n\tminimax: function minimax(game, player, depth, alpha, beta) {\n\t\tvar value = this.quiescence(game, player, depth);\n\t\tif (!isNaN(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tvar activePlayer = game.activePlayer(),\n\t\t\tisActive = activePlayer == player,\n\t\t\tmoves = this.movesFor(game, activePlayer), next;\n\t\tif (moves.length < 1) {\n\t\t\tthrow new Error('No moves for unfinished game '+ game +'.');\n\t\t}\n\t\tfor (var i = 0; i < moves.length; i++) {\n\t\t\tnext = game.next(obj(activePlayer, moves[i]));\n\t\t\tvalue = this.minimax(next, player, depth + 1, alpha, beta);\n\t\t\tif (isActive) {\n\t\t\t\tif (alpha < value) { // MAX\n\t\t\t\t\talpha = value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (beta > value) { // MIN\n\t\t\t\t\tbeta = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (beta <= alpha) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn isActive ? alpha : beta;\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'AlphaBetaPlayer',\n\t\tserializer: function serialize_AlphaBetaPlayer(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name', 'horizon']);\n\t\t}\n\t}\n}); // declare AlphaBetaPlayer.\n","/** # MonteCarloPlayer\n\nAutomatic player based on flat Monte Carlo tree search.\n*/\nvar MonteCarloPlayer = players.MonteCarloPlayer = declare(HeuristicPlayer, {\n\t/** The constructor builds a player that chooses its moves using the \n\t[flat Monte Carlo game tree search method](http://en.wikipedia.org/wiki/Monte-Carlo_tree_search). \n\tThe parameters may include:\n\t\n\t+ `simulationCount=30`: Maximum amount of simulations performed for each available move at each \n\t\tdecision.\n\t+ `timeCap=1000ms`: Time limit for the player to decide.\n\t+ `horizon=500`: Maximum amount of moves performed in simulations.\n\t+ `agent`: Player instance used in the simulations. If undefined moves are chosen at random. \n\t\tAgents with asynchronous decisions are not supported.\n\t*/\n\tconstructor: function MonteCarloPlayer(params) {\n\t\tHeuristicPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t.number('simulationCount', { defaultValue: 30, coerce: true })\n\t\t\t.number('timeCap', { defaultValue: 1000, coerce: true })\n\t\t\t.number('horizon', { defaultValue: 500, coerce: true });\n\t\tif (params) switch (typeof params.agent) {\n\t\t\tcase 'function': this.agent = new HeuristicPlayer({ heuristic: params.agent }); break;\n\t\t\tcase 'object': this.agent = params.agent; break;\n\t\t\tdefault: this.agent = null;\n\t\t}\n\t},\n\t\n\t/** `evaluatedMoves(game, player)` returns a sequence with the evaluated moves.\n\t*/\n\tevaluatedMoves: function evaluatedMoves(game, player) {\n\t\traiseIf(game.isContingent, \"MonteCarloPlayer cannot evaluate root contingent states!\"); //FIXME\n\t\tvar monteCarloPlayer = this,\n\t\t\tendTime = Date.now() + this.timeCap,\n\t\t\tgameNext = game.next.bind(game),\n\t\t\toptions = this.possibleMoves(game, player).map(function (move) {\n\t\t\t\treturn { \n\t\t\t\t\tmove: move, \n\t\t\t\t\tnexts: (Object.keys(move).length < 2 ? \n\t\t\t\t\t\t[game.next(move)] :\n\t\t\t\t\t\tgame.possibleMoves(copy(obj(player, [move[player]]), move)).map(gameNext)\n\t\t\t\t\t),\n\t\t\t\t\tsum: 0, \n\t\t\t\t\tcount: 0 \n\t\t\t\t};\n\t\t\t}).toArray(); // Else the following updates won't work.\n\t\tfor (var i = 0; i < this.simulationCount && Date.now() < endTime; ++i) {\n\t\t\toptions.forEach(function (option) {\n\t\t\t\toption.nexts = option.nexts.filter(function (next) {\n\t\t\t\t\tvar sim = monteCarloPlayer.simulation(next, player);\n\t\t\t\t\toption.sum += sim.result[player];\n\t\t\t\t\t++option.count;\n\t\t\t\t\treturn sim.plies > 0;\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\treturn options.map(function (option) {\n\t\t\traiseIf(isNaN(option.sum), \"State evaluation is NaN for move \", option.move, \"!\");\n\t\t\treturn [option.move, option.count > 0 ? option.sum / option.count : 0];\n\t\t});\n\t},\n\t\n\t/** This player's `stateEvaluation(game, player)` runs `simulationCount` simulations and returns \n\tthe average result. It is provided for compatibility, since `evaluatedMoves` does not call it.\n\t*/\n\tstateEvaluation: function stateEvaluation(game, player) {\n\t\tvar resultSum = 0, \n\t\t\tsimulationCount = this.simulationCount,\n\t\t\tsim;\n\t\tfor (var i = 0; i < simulationCount; ++i) {\n\t\t\tsim = this.simulation(game, player);\n\t\t\tresultSum += sim.result[player];\n\t\t\tif (sim.plies < 1) { // game is final.\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn simulationCount > 0 ? resultSum / simulationCount : 0;\n\t},\n\t\n\t/** A `simulation(game, player)` plays a random match from the given `game` state and returns an \n\tobject with the final state (`game`), its result (`result`) and the number of plies simulated \n\t(`plies`).\n\t*/\n\tsimulation: function simulation(game, player) {\n\t\tvar mc = this,\n\t\t\tplies, move, moves;\n\t\tfor (plies = 0; true; ++plies) {\n\t\t\tif (game.isContingent) {\n\t\t\t\tgame = game.randomNext(this.random);\n\t\t\t} else {\n\t\t\t\tmoves = game.moves();\n\t\t\t\tif (!moves) { // If game state is final ...\n\t\t\t\t\treturn { game: game, result: game.result(), plies: plies };\n\t\t\t\t} else if (plies > this.horizon) { // If past horizon ...\n\t\t\t\t\treturn { game: game, result: obj(player, this.heuristic(game, player)), plies: plies };\n\t\t\t\t} else { // ... else advance.\n\t\t\t\t\tmove = {};\n\t\t\t\t\tgame.activePlayers.forEach(function (activePlayer) {\n\t\t\t\t\t\tmove[activePlayer] = mc.agent ? mc.agent.decision(game, activePlayer) \n\t\t\t\t\t\t\t: mc.random.choice(moves[activePlayer]);\n\t\t\t\t\t});\n\t\t\t\t\tgame = game.next(move);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\traise(\"Simulation ended unexpectedly for player \", player, \" in game \", game, \"!\");\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'MonteCarloPlayer',\n\t\tserializer: function serialize_MonteCarloPlayer(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name', 'simulationCount', 'timeCap', 'agent']);\n\t\t}\n\t}\n}); // declare MonteCarloPlayer\n","/** # UCTPlayer\n\nAutomatic player based on Upper Confidence Bound Monte Carlo tree search.\n*/\nplayers.UCTPlayer = declare(MonteCarloPlayer, {\n\t/** The constructor parameters may include:\n\t\n\t+ `simulationCount=30`: Maximum amount of simulations performed at each decision.\n\t+ `timeCap=1000ms`: Time limit for the player to decide.\n\t*/\n\tconstructor: function UCBPlayer(params) {\n\t\tMonteCarloPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t/** + `explorationConstant=sqrt(2)`: The exploration factor used in the UCT selection.\n\t\t*/\n\t\t\t.number('explorationConstant', { defaultValue: Math.sqrt(2), coerce: true })\n\t\t;\n\t},\n\t\n\t/** Evaluate all child nodes of the given `gameTree` according to the [Upper Confidence Bound\n\tformula by L. Kocsis and Cs. Szepesvári](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.102.1296). \n\tReturns one of the greatest evaluated, chosen at random.\n\t*/\n\tselectNode: function selectNode(gameTree, totalSimulationCount, explorationConstant) {\n\t\texplorationConstant = isNaN(explorationConstant) ? this.explorationConstant : +explorationConstant;\n\t\treturn this.random.choice(iterable(gameTree.children).select(1).greater(function (n) {\n\t\t\treturn n.uct.rewards / n.uct.visits + \n\t\t\t\texplorationConstant * Math.sqrt(Math.log(totalSimulationCount) / n.uct.visits);\n\t\t}));\n\t},\n\t\n\t/** `evaluatedMoves(game, player)` return a sequence with the evaluated moves.\n\t*/\n\tevaluatedMoves: function evaluatedMoves(game, player) {\n\t\tvar root = new GameTree(null, game),\n\t\t\tendTime = Date.now() + this.timeCap,\n\t\t\tnode, simulationResult;\n\t\troot.uct = {\n\t\t\tpending: this.random.shuffle(root.possibleTransitions()), visits: 0, rewards: 0\n\t\t};\n\t\tfor (var i = 0; i < this.simulationCount && Date.now() < endTime; ++i) {\n\t\t\tnode = root;\n\t\t\twhile (node.uct.pending.length < 1 && node.childrenCount() > 0) { // Selection\n\t\t\t\tnode = this.selectNode(node, i+1, this.explorationConstant);\n\t\t\t}\n\t\t\tif (node.uct.pending.length > 0) { // Expansion\n\t\t\t\tnode = node.expand(node.uct.pending.pop());\n\t\t\t\tnode.uct = {\n\t\t\t\t\tpending: this.random.shuffle(node.possibleTransitions()), visits: 0, rewards: 0\n\t\t\t\t};\n\t\t\t}\n\t\t\tsimulationResult = this.simulation(node.state, player); // Simulation\n\t\t\tfor (; node; node = node.parent) { // Backpropagation\n\t\t\t\t++node.uct.visits;\n\t\t\t\tnode.uct.rewards += (game.normalizedResult(simulationResult.result)[player] + 1) / 2;\n\t\t\t}\n\t\t}\n\t\treturn iterable(root.children).select(1).map(function (n) {\n\t\t\treturn [n.transition, n.uct.visits];\n\t\t});\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'UCTPlayer',\n\t\tserializer: function serialize_UCTPlayer(obj) {\n\t\t\treturn this.serializeAsProperties(obj, ['name', 'simulationCount', 'timeCap', 'explorationConstant']);\n\t\t}\n\t}\n}); // declare UCTPlayer\n","/** # UserInterfacePlayer\n\nImplementation of player user interfaces and proxies.\n*/\nvar UserInterfacePlayer = players.UserInterfacePlayer = declare(Player, {\n\t/** `UserInterfacePlayer` is a generic type for all players that are proxies \n\tof user interfaces.\n\t*/\n\tconstructor: function UserInterfacePlayer(params) {\n\t\tPlayer.call(this, params);\n\t},\n\n\t/** The `participate` method assigns this players role to the given role.\n\t*/\n\tparticipate: function participate(match, role) {\n\t\tthis.role = role;\n\t\treturn this;\n\t},\n\t\n\t/** The `decision(game, player)` of this players returns a future that will \n\tbe resolved when the `perform()` method is called.\n\t*/\n\tdecision: function decision(game, player) {\n\t\tif (this.__future__ && this.__future__.isPending()) {\n\t\t\tthis.__future__.resolve(new Match.CommandQuit());\n\t\t}\n\t\tthis.__future__ = new Future();\n\t\treturn this.__future__;\n\t},\n\t\n\t/** User interfaces have to be configured to call `perform(action)` upon \n\teach significant user action.players. It resolves the future returned by the\n\t`decision()` method.\n\t*/\n\tperform: function perform(action) {\n\t\tvar future = this.__future__;\n\t\tif (future) {\n\t\t\tthis.__future__ = null;\n\t\t\tfuture.resolve(action);\n\t\t}\n\t\treturn !!future;\n\t}\n}); // declare UserInterfacePlayer.\n\n// ## User interfaces ##########################################################\n\nvar UserInterface = players.UserInterface = declare({\n\t/** `UserInterface` is the base abstract type for user interfaces that \n\tdisplay a game and allow one or more players to play. The `config` argument \n\tmay include the `match` being played.\n\t*/\n\tconstructor: function UserInterface(config) {\n\t\tthis.onBegin = this.onBegin.bind(this);\n\t\tthis.onNext = this.onNext.bind(this);\n\t\tthis.onEnd = this.onEnd.bind(this);\n\t\tif (config.match) {\n\t\t\tthis.show(config.match);\n\t\t}\n\t},\n\t\n\t/** `show(match)` discards the current state and sets up to display the \n\tgiven `match`.\n\t*/\n\tshow: function show(match) {\n\t\tif (this.match) {\n\t\t\tmatch.events.off('begin', this.onBegin);\n\t\t\tmatch.events.off('next', this.onNext);\n\t\t\tmatch.events.off('end', this.onEnd);\n\t\t}\n\t\tthis.match = match;\n\t\tmatch.events.on('begin', this.onBegin);\n\t\tmatch.events.on('next', this.onNext);\n\t\tmatch.events.on('end', this.onEnd);\n\t},\n\t\n\t/** When the player is participated of a match, callbacks are registered to \n\tthe following match's events.\n\t\n\t+ `onBegin(game)` handles the `'begin'` event of the match.\n\t*/\n\tonBegin: function onBegin(game) {\n\t\tthis.display(game);\n\t},\n\t\n\t/** + `onNext(game, next)` handles the `'move'` event of the match.\n\t*/\n\tonNext: function onNext(game, next) {\n\t\tthis.display(next);\n\t},\n\t\n\t/** + `onEnd(game, results)` handles the `'end'` event of the match.\n\t*/\n\tonEnd: function onEnd(game, results) {\n\t\tthis.results = results;\n\t\tthis.display(game);\n\t},\n\t\n\t/** `display(game)` renders the game in this user interface. Not \n\timplemented, so please override.\n\t*/\n\tdisplay: unimplemented(\"UserInterface\", \"display\"),\n\t\n\t/** `perform(action, actionRole=undefined)` makes the given player perform \n\tthe action if the player has a `perform()` method and is included in this \n\tUI's players.\n\t*/\n\tperform: function perform(action, actionRole) {\n\t\titerable(this.match.players).forEach(function (pair) {\n\t\t\tvar role = pair[0], player = pair[1];\n\t\t\tif (player instanceof UserInterfacePlayer && (!actionRole || player.role === actionRole)) {\n\t\t\t\tplayer.perform(action);\n\t\t\t}\n\t\t});\n\t}\n}); // declare UserInterface.\n\n// ### HTML based user interfaces ##############################################\n\nUserInterface.BasicHTMLInterface = declare(UserInterface, {\n\t/** `BasicHTMLInterface(config)` builds a simple HTML based UI, that renders \n\tthe game on the DOM using its `display()` method. The `config` argument may\n\tinclude:\n\t\n\t+ `document=window.document`: the DOM root.\n\t+ `container`: the DOM node to render the game in, or its name.\n\t*/\n\tconstructor: function BasicHTMLInterface(config) {\n\t\tUserInterface.call(this, config);\n\t\tthis.document = config.document || base.global.document;\n\t\tthis.container = config.container;\n\t\tif (typeof this.container === 'string') {\n\t\t\tthis.container = this.document.getElementById(this.container);\n\t\t}\n\t},\n\n\t/** On `display(game)` the `container` is emptied and the game is rendered\n\tusing its `display(ui)` method.\n\t*/\n\tdisplay: function display(game) {\n\t\tvar container = this.container, child;\n\t\twhile (child = container.firstChild) { // It seems the DOM API does not provide a method for this. :-(\n\t\t\tcontainer.removeChild(child);\n\t\t}\n\t\tgame.display(this);\n\t},\n\t\n\t/** `build()` helps DOM creation. The `nodes` argument specifies DOM \n\telements, each with an array of the shape: `[tag, attributes, elements]`.\n\t*/\n\tbuild: function build(parent, nodes) {\n\t\tvar ui = this;\n\t\tnodes.forEach(function (node) {\n\t\t\tvar element;\n\t\t\tif (Array.isArray(node)) {\n\t\t\t\telement = ui.document.createElement(node[0]);\n\t\t\t\tif (node.length > 2 && node[1]) { // There are attributes.\n\t\t\t\t\tvar attrs = node[1];\n\t\t\t\t\tfor (var attrName in attrs) if (attr.hasOwnProperty(attrName)) {\n\t\t\t\t\t\telement.setAttribute(attrName, attrs[attrName]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (node.length > 1 && node[node.length-1]) { // There are child elements.\n\t\t\t\t\tui.build(element, node[node.length-1]);\n\t\t\t\t}\n\t\t\t} else if (typeof node === 'string') {\n\t\t\t\telement = ui.document.createTextNode(node);\n\t\t\t}\n\t\t\tif (element && parent) {\n\t\t\t\tparent.appendChild(element);\n\t\t\t}\n\t\t});\n\t\treturn parent;\n\t}\n}); // declare HTMLInterface.\n","/** # WebWorkerPlayer\n\nA proxy for another player executing inside a webworker.\n*/\nvar WebWorkerPlayer = players.WebWorkerPlayer = declare(Player, {\n\t/** The constructor builds a player that is a proxy for another player executing in a webworker. \n\tThe parameters must include:\n\t*/\n\tconstructor: function WebWorkerPlayer(params) {\n\t\tPlayer.call(this, params);\n\t\tinitialize(this, params)\n\t\t\t/** + `worker`: The `Worker` instance where the actual player is executing.\n\t\t\t*/\n\t\t\t.object('worker');\n\t\tthis.worker.onmessage = base.Parallel.prototype.__onmessage__.bind(this);\n\t},\n\t\n\t/** The static `createWorker(playerBuilder)` method creates (asynchronously) and initializes a \n\tweb worker. The modules `creatartis-base` and `ludorum` are loaded in the webworker's root \n\tnamespace (`self`). If a `workerSetup` function is given, it is also run. After that, the \n\t`playerBuilder` function is called and its results stored in the variable `self.PLAYER`.\n\t*/\n\t'static createWorker': function createWorker(playerBuilder, workerSetup) {\n\t\traiseIf('string function'.indexOf(typeof playerBuilder) < 0, \"Invalid player builder: \"+ playerBuilder +\"!\");\n\t\tvar parallel = new base.Parallel();\n\t\treturn parallel.loadModule(exports, true).then(function () {\n\t\t\treturn parallel.run(\n\t\t\t\t(typeof workerSetup === 'function' ? '('+ workerSetup +')(),\\n' : '')+\n\t\t\t\t'self.PLAYER = ('+ playerBuilder +').call(self),\\n'+\n\t\t\t\t'\"OK\"'\n\t\t\t);\n\t\t}).then(function () {\n\t\t\treturn parallel.worker;\n\t\t});\n\t},\n\t\n\t/** The static `create(params)` method creates (asynchronously) and initializes a \n\t`WebWorkerPlayer`, with a web worker ready to play. The `params` must include the \n\t`playerBuilder` function to execute on the web worker's environment.\n\t*/\n\t'static create': function create(params) {\n\t\tvar WebWorkerPlayer = this;\n\t\treturn WebWorkerPlayer.createWorker(params.playerBuilder, params.workerSetup).then(function (worker) {\n\t\t\treturn new WebWorkerPlayer({name: name, worker: worker}); \n\t\t});\n\t},\n\t\n\t/** This player's `decision(game, player)` is delegated to this player's webworker, returning a \n\tfuture that will be resolved when the parallel execution is over.\n\t\n\tWarning! If this method is called while another decision is pending, the player will assume the \n\tprevious match was aborted, issuing a quit command.\n\t*/\n\tdecision: function decision(game, player) {\n\t\tif (this.__future__ && this.__future__.isPending()) {\n\t\t\tthis.__future__.resolve(Match.commandQuit);\n\t\t}\n\t\tthis.__future__ = new Future();\n\t\tthis.worker.postMessage('PLAYER.decision(Sermat.mat('+ JSON.stringify(Sermat.ser(game)) +'), '+ JSON.stringify(player) +')');\n\t\treturn this.__future__;\n\t}\n}); // declare WebWorkerPlayer","/** # Aleatory\n\nAleatories are different means of non determinism that games can use, like: dice, card decks, \nroulettes, etc. They are used by `Aleatoric` game states.\n*/\nvar Aleatory = exports.aleatories.Aleatory = declare({\n\t/** The base class implements an integer uniform random variable between a minimum and maximum\n\tvalue (inclusively).\n\t+ \n\t*/\n\tconstructor: function Aleatory(min, max) {\n\t\tswitch (arguments.length) {\n\t\t\tcase 1: this.range = [1, min]; break;\n\t\t\tcase 2: this.range = [min, max]; break;\n\t\t}\n\t},\n\t\n\t/** The `Aleatory.value()` can be used to obtain a valid random value for the random variable.\n\t*/\n\tvalue: function value(random) {\n\t\treturn (random || Randomness.DEFAULT).randomInt(this.range[0], this.range[1] + 1);\n\t},\n\t\t\n\t/** In order to properly search a game tree with aleatory nodes, the random variables' \n\tdistribution has to be known. `Aleatory.distribution()` computes the histogram for the random \n\tvariables on which this aleatory depends, as a sequence of pairs `[value, probability]`.\n\t\n\tBy default it returns a flat histogram, assuming the random variable is uniform.\n\t*/\n\tdistribution: function () {\n\t\tvar min = this.range[0], \n\t\t\tmax = this.range[1],\n\t\t\tprobability = 1 / (max - min + 1);\n\t\treturn Iterable.range(min, max + 1).map(function (value) {\n\t\t\treturn [value, probability];\n\t\t});\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Aleatory',\n\t\tserializer: function serialize_Aleatory(obj) {\n\t\t\treturn [this.range];\n\t\t}\n\t}\n}); // declare Aleatory.\n","/** # UniformAleatory\r\n\r\nAn uniform aleatory is one that ranges over a set of values, all of which have the same probability\r\nof occurrence.\r\n*/\r\nvar UniformAleatory = exports.aleatories.UniformAleatory = declare(Aleatory, {\r\n\t/** An uniform aleatory is defined by a sequence of `values`. The sequence cannot be empty, but\r\n\tone value is supported as weird as it may be.\r\n\t*/\r\n\tconstructor: function UniformAleatory(values) {\r\n\t\tthis.__values__ = iterable(values).toArray();\r\n\t\traiseIf(this.__values__.length < 1, \"No values for aleatory!\");\r\n\t},\r\n\r\n\t/** The `value` is one of the `values` used to build this aleatory, picked at random.\r\n\t*/\r\n\tvalue: function value(random) {\r\n\t\treturn (random || Randomness.DEFAULT).choice(this.__values__);\r\n\t},\r\n\t\r\n\t/** The `distribution` of an uniform aleatory is a sequence of pairs `[value, probability]`.\r\n\t*/\r\n\tdistribution: function distribution() {\r\n\t\tvar prob = 1 / this.__values__.length;\r\n\t\treturn this.__values__.map(function (v) {\r\n\t\t\treturn [v, prob];\r\n\t\t});\r\n\t},\r\n\t\r\n\t// ## Utilities ################################################################################\r\n\t\r\n\t/** Serialization and materialization using Sermat.\r\n\t*/\r\n\t'static __SERMAT__': {\r\n\t\tidentifier: 'UniformAleatory',\r\n\t\tserializer: function serialize_UniformAleatory(obj) {\r\n\t\t\treturn [this.__values__];\r\n\t\t}\r\n\t}\r\n});","/** # Dice aleatories\n\nImplementations of common dice and related functions.\n*/\nvar dice = aleatories.dice = {\n\t/** Common dice variants.\n\t*/\n\tD4: new Aleatory(1, 4),\n\tD6: new Aleatory(1, 6),\n\tD8: new Aleatory(1, 8),\n\tD10: new Aleatory(1, 10),\n\tD12: new Aleatory(1, 12),\n\tD20: new Aleatory(1, 20),\n\tD100: new Aleatory(1, 100),\n\t\n\t/** The `sumProbability` that rolling `n` dice of `s` sides yields a sum equal to `p`. Check the \n\tarticle at [Mathworld](http://mathworld.wolfram.com/Dice.html).\n\t*/\n\tsumProbability: function sumProbability(p, n, s) {\n\t\tn = n|0;\n\t\ts = s|0;\n\t\tp = p|0;\n\t\tif (isNaN(n) || isNaN(s) || isNaN(p) || n < 1 || s < 2) {\n\t\t\treturn NaN;\n\t\t} else if (p < n || p > n * s) {\n\t\t\treturn 0;\n\t\t} else {\n\t\t\tvar factorial = base.math.factorial,\n\t\t\t\tfact_n = factorial(n),\n\t\t\t\tfact_n_1 = fact_n / n; // factorial(n - 1)\n\t\t\treturn Math.pow(s, -n) *\n\t\t\t\tIterable.range(0, Math.floor((p - n) / s) + 1).map(function (k) {\n\t\t\t\t\tvar comb1 = fact_n / factorial(k) / factorial(n - k),\n\t\t\t\t\t\tx = p - s * k - 1,\n\t\t\t\t\t\tcomb2 = factorial(x) / fact_n_1 / factorial(x - n + 1);\n\t\t\t\t\treturn (k % 2 ? -1 : 1) * comb1 * comb2;\n\t\t\t\t}).sum();\n\t\t}\n\t}\n}; //// declare Dice.","/** Simple reference games with a predefined outcome, mostly for testing \n\tpurposes.\n*/\ngames.Predefined = declare(Game, {\n\t/** new games.Predefined(activePlayer, results, height=5, width=5):\n\t\tA pseudogame used for testing purposes. It will give width amount of \n\t\tmoves for each player until height moves pass. Then the match is \n\t\tfinished with the given results, or a tie as default.\n\t*/\n\tconstructor: function Predefined(activePlayer, results, height, width) {\n\t\tif (results) {\n\t\t\tthis.__results__ = results;\n\t\t\tthis.players = Object.keys(results);\n\t\t}\n\t\tGame.call(this, activePlayer);\n\t\tthis.height = isNaN(height) ? 5 : +height;\n\t\tthis.width = isNaN(width) ? 5 : +width;\n\t},\n\n\tname: 'Predefined',\n\t\n\t/** games.Predefined.players:\n\t\tDefault players for Predefined: A and B.\n\t*/\n\tplayers: ['A', 'B'],\n\n\t/** games.Predefined.__results__:\n\t\tDefault results for Predefined: a tie between A and B.\n\t*/\n\t__results__: {'A': 0, 'B': 0},\n\n\t/** games.Predefined.moves():\n\t\tMoves for a Predefined are numbers from 1 to this.width. \n\t*/\n\tmoves: function moves() {\n\t\tif (this.height > 0) {\n\t\t\treturn obj(this.activePlayer(), \n\t\t\t\tIterable.range(1, this.width + 1).toArray()\n\t\t\t);\n\t\t}\n\t},\n\n\t/** games.Predefined.result():\n\t\tReturned the predefined results if height is zero or less.\n\t*/\n\tresult: function result() {\n\t\treturn this.height > 0 ? null : this.__results__;\n\t},\n\n\t/** games.Predefined.next(moves):\n\t\tMoves are completely irrelevant. They only advance in the match.\n\t*/\n\tnext: function next() {\n\t\treturn new this.constructor(this.opponent(), this.__results__, this.height - 1, this.width);\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Predefined',\n\t\tserializer: function serialize_Predefined(obj) {\n\t\t\treturn [obj.activePlayer(), obj.__results__, obj.height, obj.width];\n\t\t}\n\t}\n}); // declare Predefined.\n","/** # Choose2Win\n\nChoose2Win is a simple silly game. Each turn one of the players can decide to win, to lose or to \npass the turn. It is meant to be used only for testing Ludorum, since a game can hardly become less \ninteresting than this.\n*/\ngames.Choose2Win = declare(Game, {\n\t/** The constructor takes a number of turns for the game to last (`Infinity` by default), the \n\tactive player and the winner if the game has ended. \n\t*/\n\tconstructor: function Choose2Win(turns, activePlayer, winner) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.__turns__ = isNaN(turns) ? Infinity : +turns;\n\t\tthis.__winner__ = winner;\t\t\n\t},\n\n\tname: 'Choose2Win',\n\t\n\t/** Players of this dummy game are labeled This and That.\n\t*/\n\tplayers: ['This', 'That'],\n\n\t/** Every turn the active player's moves are: `'win'`, `'lose'` and `'pass'`.\n\t*/\n\tmoves: function moves() {\n\t\tif (!this.__winner__ && this.__turns__ > 0) {\n\t\t\treturn obj(this.activePlayer(), ['win', 'lose', 'pass']);\n\t\t}\n\t},\n\n\t/** Victory is for whom chooses to win first. Defeat is for whom chooses to lose first. A draw \n\tonly results when the limit of turns (if any) is met.\n\t*/\n\tresult: function result() {\n\t\treturn this.__winner__ ? this.victory(this.__winner__) :\n\t\t\tthis.__turns__ < 1 ? this.draw() : null;\n\t},\n\n\t/** If a player moves to win or lose, a final game state is returned. Else the game goes on.\n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\topponent = this.opponent(activePlayer);\n\t\traiseIf(!moves.hasOwnProperty(activePlayer), 'No move for active player ', activePlayer, ' at ', this, '!');\n\t\tswitch (moves[activePlayer]) {\n\t\t\tcase 'win': return new this.constructor(this.__turns__ - 1, opponent, activePlayer);\n\t\t\tcase 'lose': return new this.constructor(this.__turns__ - 1, opponent, opponent);\n\t\t\tcase 'pass': return new this.constructor(this.__turns__ - 1, opponent);\n\t\t\tdefault: raise('Invalid move ', moves[activePlayer], ' for player ', activePlayer, ' at ', this, '!');\n\t\t}\n\t},\n\t\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Choose2Win',\n\t\tserializer: function serialize_Choose2Win(obj) {\n\t\t\tvar r = [obj.__turns__, obj.activePlayer()];\n\t\t\tif (obj.__winner__) {\n\t\t\t\tr.push(obj.__winner__);\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\t}\n}); // declare Choose2Win.","/** # ConnectionGame\n\nBase class for a subset of the family of [connection games](http://en.wikipedia.org/wiki/Connection_game), \nwhich includes [TicTacToe](http://en.wikipedia.org/wiki/Tic-tac-toe), \n[ConnectFour](http://en.wikipedia.org/wiki/Connect_Four) and [Gomoku](http://en.wikipedia.org/wiki/Gomoku).\nIt implements a rectangular board, the placing of the pieces and the checks for lines.\n*/\ngames.ConnectionGame = declare(Game, {\n\t/** Boards by default have 9 rows ...\n\t*/\n\theight: 9,\n\t\n\t/** ... and 9 columns.\n\t*/\n\twidth: 9,\n\t\n\t/** A player has to make a line of 5 pieces to win, by default.\n\t*/\n\tlineLength: 5,\n\n\t/** The constructor takes the active player and the board given as a string. For the game's \n\t`board` this last string argument is used to build a [`CheckerboardFromString`](../utils/CheckerboardFromString.js.html).\n\t*/\n\tconstructor: function ConnectionGame(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = (board instanceof CheckerboardFromString) ? board :\n\t\t\tnew CheckerboardFromString(this.height, this.width, \n\t\t\t\t(board || '.'.repeat(this.height * this.width)) +''\n\t\t\t);\n\t},\n\n\tname: 'ConnectionGame',\n\t\n\t/** This base implementations names its players First and Second.\n\t*/\n\tplayers: ['First', 'Second'],\n\t\n\t/** Lines in the board are cached to accelerate the result calculation. */\n\t__lines__: (function () {\n\t\tvar CACHE = {};\n\t\tfunction __lines__(height, width, lineLength) {\n\t\t\tvar key = height +'x'+ width +'/'+ lineLength;\n\t\t\tif (!CACHE.hasOwnProperty(key)) {\n\t\t\t\tvar board = new CheckerboardFromString(height, width, '.'.repeat(height * width));\n\t\t\t\tCACHE[key] = board.lines().map(function (line) {\n\t\t\t\t\treturn line.toArray();\n\t\t\t\t}, function (line) {\n\t\t\t\t\treturn line.length >= lineLength;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\treturn CACHE[key];\n\t\t}\n\t\t__lines__.CACHE = CACHE;\n\t\treturn __lines__;\n\t})(),\n\t\n\t/** A connection game ends when either player gets the required amount of pieces aligned (either\n\thorizontally, vertically or diagonally), hence winning the game. The match ends in a tie if the \n\tboard gets full.\n\t*/\n\tresult: function result() {\n\t\tif (this.hasOwnProperty('__result__')) {\n\t\t\treturn this.__result__;\n\t\t}\n\t\tvar lineLength = this.lineLength,\n\t\t\tlines = this.board.asStrings(this.__lines__(this.height, this.width, lineLength)).join(' ');\n\t\tfor (var i = 0; i < this.players.length; ++i) {\n\t\t\tif (lines.indexOf(i.toString(36).repeat(lineLength)) >= 0) {\n\t\t\t\treturn this.__result__ = this.victory([this.players[i]]);\n\t\t\t}\n\t\t}\n\t\tif (lines.indexOf('.') < 0) { // No empty squares means a tie.\n\t\t\treturn this.__result__ = this.draw();\n\t\t}\n\t\treturn this.__result__ = null; // The game continues.\n\t},\n\t\n\t/** The active player can place a piece in any empty square in the board. The moves are indices\n\tin the board's string representation.\n\t*/\n\tmoves: function moves() {\n\t\tif (this.hasOwnProperty('__moves__')) {\n\t\t\treturn this.__moves__;\n\t\t} else if (this.result()) {\n\t\t\treturn this.__moves__ = null;\n\t\t} else {\n\t\t\treturn this.__moves__ = obj(this.activePlayer(), \n\t\t\t\titerable(this.board.string).filter(function (c) {\n\t\t\t\t\treturn c === '.';\n\t\t\t\t}, function (c, i) {\n\t\t\t\t\treturn i;\n\t\t\t\t}).toArray()\n\t\t\t);\n\t\t}\n\t},\n\n\t/** To get from one game state to the next, an active player's piece in the square indicated by \n\tits move.\n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tplayerIndex = this.players.indexOf(activePlayer),\n\t\t\tsquareIndex = +moves[activePlayer],\n\t\t\trow = (squareIndex / this.width) >> 0,\n\t\t\tcolumn = squareIndex % this.width;\n\t\treturn new this.constructor((playerIndex + 1) % this.players.length, \n\t\t\tthis.board.place([row, column], playerIndex.toString(36))\n\t\t);\n\t},\n\t\n\t// ## User intefaces ###########################################################################\n\t\n\t/** The `display(ui)` method is called by a `UserInterface` to render the game state. The only \n\tsupported user interface type is `BasicHTMLInterface`. The look can be configured using CSS \n\tclasses.\n\t*/\n\tdisplay: function display(ui) {\n\t\traiseIf(!ui || !(ui instanceof UserInterface.BasicHTMLInterface), \"Unsupported UI!\");\n\t\tvar moves = this.moves(),\n\t\t\tactivePlayer = this.activePlayer(),\n\t\t\tboard = this.board;\n\t\tmoves = moves && moves[activePlayer];\n\t\tvar table = this.board.renderAsHTMLTable(ui.document, ui.container, function (data) {\n\t\t\t\tdata.className = data.square === '.' ? 'ludorum-empty' : 'ludorum-player'+ data.square;\n\t\t\t\tdata.innerHTML = data.square === '.' ? \" \" : \"●\";\n\t\t\t\tvar i = data.coord[0] * board.height + data.coord[1];\n\t\t\t\tif (moves && moves.indexOf(i) >= 0) {\n\t\t\t\t\tdata.move = i;\n\t\t\t\t\tdata.activePlayer = activePlayer;\n\t\t\t\t\tdata.onclick = ui.perform.bind(ui, data.move, activePlayer);\n\t\t\t\t}\n\t\t\t});\n\t\treturn ui;\n\t},\n\n\t// ## Utilities ################################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'ConnectionGame',\n\t\tserializer: function serialize_ConnectionGame(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t}\n}); // declare ConnectionGame.","/** # Odds & Evens\n\n[Odds and evens](http://en.wikipedia.org/wiki/Odds_and_evens) is a classic child game, implemented \nas a simple example of a simultaneous game, i.e. a game in which more than one player can move at \nany given turn.\n*/\ngames.OddsAndEvens = declare(Game, {\n\t/** The constructor takes:\n\t\n\t\t+ `turns=1`: The number of turns remaining in the game.\n\t\t+ `points=`: The scores for every player.\n\t*/\n\tconstructor: function OddsAndEvens(turns, points) {\n\t\tGame.call(this, this.players); // Both players are active.\n\t\tthis.turns = isNaN(turns) ? 1 : +turns;\n\t\tthis.points = points || { Evens: 0, Odds: 0 };\n\t},\n\n\tname: 'OddsAndEvens',\n\t\n\t/** Players for odds and evens are called like that: Evens and Odds.\n\t*/\n\tplayers: ['Evens', 'Odds'],\n\n\t/** Each turn both players draw either a 1 or a 2.\n\t*/\n\tmoves: function moves() {\n\t\treturn this.turns < 1 ? null : { Evens: [1, 2], Odds: [1, 2] };\n\t},\n\n\t/** The winner is the player with more points.\n\t*/\n\tresult: function result() {\n\t\tvar pointDifference = this.points.Evens - this.points.Odds;\n\t\treturn this.turns > 0 ? null : {\n\t\t\tEvens: +pointDifference,\n\t\t\tOdds: -pointDifference\n\t\t};\n\t},\n\n\t/** The player matching the parity of the moves sum earns a point.\n\t*/\n\tnext: function next(moves) {\n\t\traiseIf(typeof moves.Evens !== 'number' || typeof moves.Odds !== 'number',\n\t\t\t'Invalid moves '+ (JSON.stringify(moves) || moves) +'!');\n\t\tvar parity = (moves.Evens + moves.Odds) % 2 === 0;\n\t\treturn new this.constructor(this.turns - 1, {\n\t\t\tEvens: this.points.Evens + (parity ? 1 : 0),\n\t\t\tOdds: this.points.Odds + (parity ? 0 : 1)\n\t\t});\n\t},\n\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'OddsAndEvens',\n\t\tserializer: function serialize_OddsAndEvens(obj) {\n\t\t\treturn [obj.turns, obj.points];\n\t\t}\n\t}\n}); // declare OddsAndEvens.\n","/** # TicTacToe.\n\nImplementation of the traditional [Tic-Tac-Toe game](http://en.wikipedia.org/wiki/Tictactoe).\n*/\ngames.TicTacToe = declare(Game, {\n\tname: 'TicTacToe',\n\n\t/** The constructor takes the `activePlayer` (`\"Xs\"` by default) and the `board` as a string \n\t(empty board as default).\n\t*/\n\tconstructor: function TicTacToe(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = board || '_________';\n\t},\n\t\n\t/** This game's players are `\"Xs\"` and `\"Os\"`.\n\t*/\n\tplayers: ['Xs', 'Os'],\n\t\n\t/** A match ends with a victory for any player that has three marks in line, or a draw if the \n\tboard is full.\n\t*/\n\tresult: (function () {\n\t\treturn function result() {\t\t\t\n\t\t\tif (this.board.match(this.WIN_X)) { // Xs wins.\n\t\t\t\treturn this.victory([\"Xs\"]);\n\t\t\t} else if (this.board.match(this.WIN_O)) { // Os wins.\n\t\t\t\treturn this.victory([\"Os\"]);\n\t\t\t} else if (this.board.indexOf('_') < 0) { // No empty squares means a tie.\n\t\t\t\treturn this.draw();\n\t\t\t} else {\n\t\t\t\treturn null; // The game continues.\n\t\t\t}\n\t\t};\n\t})(),\n\t\n\t/** The active player's `moves()` are the indexes of empty squares in the board.\n\t*/\n\tmoves: function moves() {\n\t\tif (!this.result()) {\n\t\t\tvar result = {};\n\t\t\tresult[this.activePlayer()] = iterable(this.board).filter(function (chr, i) {\n\t\t\t\treturn chr === '_'; // Keep only empty squares.\n\t\t\t}, function (chr, i) {\n\t\t\t\treturn i; // Grab the index.\n\t\t\t}).toArray();\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\t\t\n\t},\n\t\n\t/** The `next(moves)` game state puts the mark of the active player in the square indicated by \n\tthe move. \n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(), \n\t\t\tmove = +moves[activePlayer];\n\t\tif (isNaN(move) || this.board.charAt(move) !== '_') {\n\t\t\tthrow new Error('Invalid move '+ JSON.stringify(moves) +' for board '+ this.board +\n\t\t\t\t' (moves= '+ JSON.stringify(moves) +').');\n\t\t}\n\t\tvar newBoard = this.board.substring(0, move) + activePlayer.charAt(0) + this.board.substring(move + 1);\n\t\treturn new this.constructor(this.opponent(activePlayer), newBoard);\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'TicTacToe',\n\t\tserializer: function serialize_TicTacToe(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t},\n\t\n\t// ## User intefaces ###########################################################################\n\t\n\t/** `printBoard()` creates a text (ASCII) version of the board.\n\t*/\n\tprintBoard: function printBoard() {\n\t\tvar board = this.board;\n\t\treturn [\n\t\t\tboard.substr(0,3).split('').join('|'), '-+-+-',\n\t\t\tboard.substr(3,3).split('').join('|'), '-+-+-',\n\t\t\tboard.substr(6,3).split('').join('|')\n\t\t].join('\\n');\n\t},\n\t\n\t/** The `display(ui)` method is called by a `UserInterface` to render the game state. The only \n\tsupported user interface type is `BasicHTMLInterface`. The look can be configured using CSS \n\tclasses.\n\t*/\n\tdisplay: function display(ui) {\n\t\traiseIf(!ui || !(ui instanceof UserInterface.BasicHTMLInterface), \"Unsupported UI!\");\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tmoves = this.moves(),\n\t\t\tboard = this.board,\n\t\t\tclassNames = { 'X': \"ludorum-square-Xs\", 'O': \"ludorum-square-Os\", '_': \"ludorum-square-empty\" },\n\t\t\tsquareHTML = { 'X': \"X\", 'O': \"O\", '_': \" \" };\n\t\tmoves = moves && moves[activePlayer] && moves[activePlayer].length > 0;\n\t\t(new CheckerboardFromString(3, 3, this.board, '_'))\n\t\t\t.renderAsHTMLTable(ui.document, ui.container, function (data) {\n\t\t\t\tdata.className = classNames[data.square];\n\t\t\t\tdata.innerHTML = squareHTML[data.square];\n\t\t\t\tif (moves && data.square === '_') {\n\t\t\t\t\tdata.move = data.coord[0] * 3 + data.coord[1];\n\t\t\t\t\tdata.activePlayer = activePlayer;\n\t\t\t\t\tdata.onclick = ui.perform.bind(ui, data.move, activePlayer);\n\t\t\t\t}\n\t\t\t});\n\t\treturn ui;\n\t},\n\t\n\t// ## Heuristics and AI ########################################################################\n\t\n\t/** `TicTacToe.heuristics` is a bundle of helper functions to build heuristic evaluation \n\tfunctions for this game.\n\t*/\n\t\"static heuristics\": {\n\t\t/** `heuristicFromWeights(weights)` builds an heuristic evaluation function from weights for\n\t\teach square in the board. The result of the function is the weighted sum, empty squares \n\t\tbeing ignored, opponent squares considered negative.\n\t\t*/\n\t\theuristicFromWeights: function heuristicFromWeights(weights) {\n\t\t\tvar weightSum = iterable(weights).map(Math.abs).sum();\n\t\t\tfunction __heuristic__(game, player) {\n\t\t\t\tvar playerChar = player.charAt(0);\n\t\t\t\treturn iterable(game.board).map(function (square, i) {\n\t\t\t\t\treturn (square === '_' ? 0 : weights[i] * (square === playerChar ? 1 : -1));\n\t\t\t\t}).sum() / weightSum;\n\t\t\t}\n\t\t\t__heuristic__.weights = weights;\n\t\t\treturn __heuristic__;\n\t\t}\n\t},\n\t\n\t// ## TicTacToe type initialization ############################################################\n\t\n\t'': function () { \n\t\t/** The regular expressions `WIN_X` and `WIN_O` used in the victory test are calculated \n\t\there.\n\t\t*/\n\t\tvar board3x3 = new CheckerboardFromString(3, 3, '_'.repeat(9)),\n\t\t\tlines = board3x3.sublines(board3x3.lines(), 3);\n\t\tthis.prototype.WIN_X = new RegExp(board3x3.asRegExps(lines, 'X', '.'));\n\t\tthis.prototype.WIN_O = new RegExp(board3x3.asRegExps(lines, 'O', '.'));\n\t\t\n\t\t/** The `defaultHeuristic `for TicTacToe is based on weights for each square. Center is \n\t\tworth 5, corners 2 and the other squares 1.\n\t\t*/\n\t\tthis.heuristics.defaultHeuristic = this.heuristics\n\t\t\t.heuristicFromWeights([2,1,2,1,5,1,2,1,2]);\n\t}\t\n}); // declare TicTacToe","/** Implementation of the [Toads & Frogs](http://en.wikipedia.org/wiki/Toads_and_Frogs_%28game%29) \n\tgame.\n*/\ngames.ToadsAndFrogs = declare(Game, {\n\t/** new games.ToadsAndFrogs(activePlayer=\"Toads\", board='TTT__FFF'):\n\t\tConstructor of Toads & Frogs games. The first player is always Toads.\n\t*/\n\tconstructor: function ToadsAndFrogs(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = board || ToadsAndFrogs.board();\n\t},\n\t\n\t/** static games.ToadsAndFrogs.board(chips=3, separation=2):\n\t\tMakes a board for Toads & Frogs. This is a single row with the given \n\t\tnumber of chips for each player (toads to the left and frogs to the\n\t\tright) separated by the given number of empty spaces.\n\t*/\n\t\"static board\": function board(chips, separation) {\n\t\tchips = isNaN(chips) ? 3 : +chips;\n\t\tseparation = isNaN(separation) ? 2 : +separation;\n\t\treturn 'T'.repeat(chips) + '_'.repeat(separation) + 'F'.repeat(chips);\n\t},\n\t\n\tname: 'ToadsAndFrogs',\n\t\n\t/** games.ToadsAndFrogs.players:\n\t\tThere are two roles in this game: \"Toads\" and \"Frogs\".\n\t*/\n\tplayers: ['Toads', 'Frogs'],\n\t\n\t/** games.ToadsAndFrogs.result():\n\t\tThe match finishes when one player cannot move, hence losing the game.\n\t*/\n\tresult: function result() {\n\t\treturn this.moves() ? null : this.defeat();\n\t},\n\t\n\t/** games.ToadsAndFrogs.moves():\n\t*/\n\tmoves: function moves() {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tresult = {}, \n\t\t\tms = result[activePlayer] = [];\n\t\tthis.board.replace(activePlayer == this.players[0] ? /TF?_/g : /_T?F/g, function (m, i) {\n\t\t\tms.push(i);\n\t\t\treturn m;\n\t\t});\n\t\treturn ms.length > 0 ? result : null;\n\t},\n\t\n\t/** games.ToadsAndFrogs.next(moves):\n\t*/\n\tnext: function next(moves) {\n\t\tvar activePlayer = this.activePlayer(), \n\t\t\tmove = moves[activePlayer], \n\t\t\tchip = activePlayer.charAt(0),\n\t\t\tboard = this.board;\n\t\tif (board.substr(move, 2) == 'T_') {\n\t\t\tboard = board.substring(0, move) + '_T' + board.substring(move + 2);\n\t\t} else if (board.substr(move, 2) == '_F') {\n\t\t\tboard = board.substring(0, move) + 'F_' + board.substring(move + 2);\n\t\t} else if (board.substr(move, 3) == 'TF_') {\n\t\t\tboard = board.substring(0, move) + '_FT' + board.substring(move + 3);\n\t\t} else if (board.substr(move, 3) == '_TF') {\n\t\t\tboard = board.substring(0, move) + 'FT_' + board.substring(move + 3);\n\t\t} else {\n\t\t\tthrow new Error('Invalid move ', move, ' for board <', board, '>.');\n\t\t}\n\t\treturn new this.constructor(this.opponent(), board);\n\t},\n\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'ToadsAndFrogs',\n\t\tserializer: function serialize_ToadsAndFrogs(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t}\t\n}); // declare ToadsAndFrogs\n","/** # Pig.\n\n[Pig](http://en.wikipedia.org/wiki/Pig_%28dice_game%29) is a simple dice betting game, used as an \nexample of a game with random variables.\n*/\ngames.Pig = declare(Game, {\n\t/** The constructor takes:\n\t\n\t\t+ `activePlayer='One'`: The active player.\n\t\t+ `goal=100`: The amount of points a player has to reach to win the game.\n\t\t+ `scores`: The scores so far in the match.\n\t\t+ `rolls`: The rolls the active player has made in his turn.\n\t*/\n\tconstructor: function Pig(activePlayer, goal, scores, rolls) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.goal = isNaN(goal) ? 100 : +goal;\n\t\tthis.__scores__ = scores || iterable(this.players).zip([0, 0]).toObject();\n\t\tthis.__rolls__ = rolls || [];\n\t},\n\t\n\tname: 'Pig',\n\t\n\t/** Players for Pig are named `One`, `Two`.\n\t*/\n\tplayers: ['One', 'Two'],\n\n\t/** The active player can either hold and pass the turn, or roll.\n\t*/\n\tmoves: function moves() {\n\t\tif (!this.result()) {\n\t\t\tvar activePlayer = this.activePlayer(),\n\t\t\t\tcurrentScore = this.__scores__[activePlayer] + iterable(this.__rolls__).sum();\n\t\t\treturn obj(activePlayer, this.__rolls__.length < 1 ? ['roll'] :\n\t\t\t\tcurrentScore >= this.goal ? ['hold'] : ['roll', 'hold']);\n\t\t}\n\t},\n\n\t/** A Pig match finishes when one player reaches or passes the goal score. The result for each \n\tplayer is the difference between its score and its opponent's score.\n\t*/\n\tresult: function result() {\n\t\tvar score0 = this.__scores__[this.players[0]],\n\t\t\tscore1 = this.__scores__[this.players[1]];\n\t\tif (score0 >= this.goal || score1 >= this.goal) {\n\t\t\tvar r = {};\n\t\t\tr[this.players[0]] = Math.min(this.goal, score0) - Math.min(this.goal, score1);\n\t\t\tr[this.players[1]] = -r[this.players[0]];\n\t\t\treturn r;\n\t\t}\n\t},\n\n\t/** If the active player holds, it earns the sum of the rolls made so in its turn. If the move \n\tis roll, a die is rolled. A roll of 1 stops the this turn and the active player earns no \n\tpoints. A roll of 2 or up, makes the turn continue.\n\t\n\tFor this game mechanic, an [contingent game state](../Contingent.js.html) is used. If the move \n\tis `roll`, an instance of this class is build and returned using the [dice shotcuts](\n\t../aleatories/dice.js.html) as random variables. This aleatoric game state will call the `next` \n\tmethod again with the same moves and the values of the random variables, and then the match will\n\tcontinue.\n\t*/\n\tnext: function next(moves, haps) {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tmove = moves && moves[activePlayer];\n\t\traiseIf(!move, 'No move for active player ', activePlayer, ' at ', this, '!');\n\t\tif (move === 'hold') {\n\t\t\tvar scores = copy(this.__scores__);\n\t\t\tscores[activePlayer] += iterable(this.__rolls__).sum();\n\t\t\treturn new this.constructor(this.opponent(), this.goal, scores, []);\n\t\t} else if (move === 'roll') {\n\t\t\tvar roll = (haps && haps.die)|0;\n\t\t\tif (!roll) { // Dice has not been rolled.\n\t\t\t\treturn new Contingent({ die: aleatories.dice.D6 }, this, moves);\n\t\t\t} else { // Dice has been rolled.\n\t\t\t\treturn (roll > 1) ? \n\t\t\t\t\tnew this.constructor(activePlayer, this.goal, this.__scores__, this.__rolls__.concat(roll)) :\n\t\t\t\t\tnew this.constructor(this.opponent(), this.goal, this.__scores__, []);\n\t\t\t}\n\t\t} else {\n\t\t\traise(\"Invalid moves \", JSON.stringify(moves), \" at \", this, \"!\");\n\t\t}\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\n\t/** The `resultBounds` for a Pig game are estimated with the goals.\n\t*/\n\tresultBounds: function resultBounds() {\n\t\treturn [-this.goal, +this.goal];\n\t},\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Pig',\n\t\tserializer: function serialize_Pig(obj) {\n\t\t\treturn [obj.activePlayer(), obj.goal, obj.__scores__, obj.__rolls__];\n\t\t}\n\t}\n}); // Pig.\n","/** # Mutropas\n\nMutropas is a game invented for Ludorum as a simple example of a game of hidden (a.k.a. incomplete)\ninformation. It is also a simultaneous game.\n*/\ngames.Mutropas = declare(Game, {\n\tname: 'Mutropas',\n\t\n\t/** The players' roles are `\"Left\"` and `\"Right\"`.\n\t*/\n\tplayers: ['Left', 'Right'],\n\n\t/** The constructor takes an `args` object with:\n\t\n\t+ `pieces`: an object with the available pieces for each player. By default pieces get randomly\n\tdealt.\n\t\n\t+ `scores`: an object with current score for each player (0 by default for all players).\n\t\n\t+ `random`: the pseudorandom number generator to use (`base.Randomness.DEFAULT` by default).\n\t*/\n\tconstructor: function Mutropas(args) {\n\t\tGame.call(this, this.players);\n\t\targs = args || {};\n\t\tthis.playedPieces = args.playedPieces || [];\n\t\tthis.pieces = args.pieces || this.dealPieces();\n\t\tthis.__scores__ = args.scores || obj(this.players[0], 0, this.players[1], 0);\n\t},\n\t\n\t\n\t/** All the pieces to be used in a match of Mutropas are stored in `allPieces`, which by default\n\thas the numbers from 0 to 8.\n\t*/\n\tallPieces: Iterable.range(9).toArray(),\t\n\t\n\t/** The method `dealPieces` is used to split the pieces randomly between all players. Half the\n\tpieces go to each player, and one is left out.\n\t*/\n\tdealPieces: function dealPieces(random) {\n\t\trandom = random || Randomness.DEFAULT;\n\t\tvar piecesPerPlayer = (this.allPieces.length / 2)|0,\n\t\t\tsplit1 = random.split(piecesPerPlayer, this.allPieces),\n\t\t\tsplit2 = random.split(piecesPerPlayer, split1[1]);\n\t\treturn obj(this.players[0], split1[0], this.players[1], split2[0]);\n\t},\n\t\n\t/** Mutropas is a simultaneous game. Hence every turn all players can move. The moves are the\n\tpieces of each player that have not been played.\n\t*/\n\tmoves: function moves() {\n\t\treturn this.result() ? null : copy({}, this.pieces);\n\t},\n\t\n\t/** If all pieces are put in a circle, each piece beats half the pieces next to it, and it is \n\tbeaten by half the pieces before it. For example if `allPieces` where `[0,1,2,3,4]`:\n\t\n\t+ piece `1` would beat pieces `2` and `3`, and lose against `4` and `0`,\n\t+ piece `2` would beat pieces `3` and `4`, and lose against `0` and `1`,\n\t+ piece `4` would beat pieces `0` and `1`, and lose against `2` and `3`,\n\t\n\tThe `moveResult` returns 1 if `piece1` beats `piece2` or -1 if otherwise.\n\t*/\n\tmoveResult: function moveResult(piece1, piece2) {\n\t\tvar upperBound = iterable(this.allPieces).max(0) + 1;\n\t\tif (piece1 < piece2) {\n\t\t\treturn piece2 - piece1 <= (upperBound / 2) ? 1 : -1;\n\t\t} else if (piece1 > piece2) {\n\t\t\treturn piece1 - piece2 >= (upperBound / 2) + 1 ? 1 : -1;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t},\n\t\n\t/** Each turn all players play a piece, and the player who plays the greatest piece wins a \n\tpoint.\n\t*/\n\tnext: function next(moves) {\n\t\tvar player0 = this.players[0], player1 = this.players[1],\n\t\t\tmove0 = moves[player0], move1 = moves[player1],\n\t\t\tpieces = this.pieces;\n\t\traiseIf(pieces[player0].indexOf(move0) < 0, \"Invalid move \", JSON.stringify(move0),\n\t\t\t\" for player \", player0, \"! (moves= \", JSON.stringify(moves), \")\");\n\t\traiseIf(pieces[player1].indexOf(move1) < 0, \"Invalid move \", JSON.stringify(move1),\n\t\t\t\" for player \", player1, \"! (moves= \", JSON.stringify(moves), \")\");\n\t\tvar moveResult = this.moveResult(move0, move1);\n\t\treturn new this.constructor({\n\t\t\trandom: this.random,\n\t\t\tplayedPieces: this.playedPieces.concat([move0, move1]),\n\t\t\tpieces: obj(\n\t\t\t\tplayer0, pieces[player0].filter(function (p) { \n\t\t\t\t\treturn p !== move0; \n\t\t\t\t}), \n\t\t\t\tplayer1, pieces[player1].filter(function (p) { \n\t\t\t\t\treturn p !== move1;\n\t\t\t\t})\n\t\t\t),\n\t\t\tscores: obj(\n\t\t\t\tplayer0, this.__scores__[player0] + moveResult,\n\t\t\t\tplayer1, this.__scores__[player1] - moveResult\n\t\t\t)\n\t\t});\n\t},\n\t\n\t/** The game's `score` is simply the sum of the move results for each player.\n\t*/\n\tscores: function scores() {\n\t\treturn copy({}, this.__scores__);\n\t},\n\t\n\t/** A game of Mutropas ends when the players have no more pieces to play. The result is the \n\tdifference in scores.\n\t*/\n\tresult: function result() {\n\t\tvar players = this.players;\n\t\tif (this.playedPieces.length >= this.allPieces.length - 1) {\n\t\t\tvar scores = this.scores();\n\t\t\treturn this.zerosumResult(scores[players[0]] - scores[players[1]], players[0]);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t},\n\t\n\t// ## Game views ###############################################################################\n\t\n\t/** The method `__possiblePieces__` calculates the pieces the `player` may have.\n\t*/\n\t__possiblePieces__: function __possiblePieces__(player) {\n\t\tvar playedPieces = this.playedPieces,\n\t\t\topponentPieces = this.pieces[this.opponent(player)],\n\t\t\tpossiblePieces = iterable(this.allPieces).filter(function (p) {\n\t\t\t\treturn playedPieces.indexOf(p) < 0 && // p has not been played yet ...\n\t\t\t\t\topponentPieces.indexOf(p) < 0; // ... and the opponent does not have it.\n\t\t\t});\n\t\treturn possiblePieces.combinations(possiblePieces.count() - 1);\n\t},\n\t\n\t/** In this view of the game the hidden information is modelled as random variables. The \n\taleatory that is returned ranges over all possible piece sets that the opponent of the given\n\t`player` may have. After each possibility the assumption is maintained for the rest of the\n\tgame.\n\t\n\tThis allows to model the uncertainty that each player has about its opponent's pieces. By doing\n\tso an artificial player that searches the game space cannot infer the pieces the opponent has,\n\tand hence it cannot cheat.\n\t*/\t\n\tview: function view(player) {\n\t\tvar opponent = this.opponent(player);\n\t\treturn new Contingent({ pieces: new UniformAleatory(this.__possiblePieces__(opponent)) }, this);\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Mutropas',\n\t\tserializer: function serialize_Mutropas(obj) {\n\t\t\treturn [{\n\t\t\t\tpieces: obj.pieces, \n\t\t\t\tplayedPieces: obj.playedPieces,\n\t\t\t\tscores: obj.__scores__\n\t\t\t}];\n\t\t}\n\t}\n}); // declare Mutropas","/** # Bahab\n\nBahab is a chess-like board game originally designed for Ludorum.\n*/\ngames.Bahab = declare(Game, {\n\tname: 'Bahab',\n\t\n\t/** Players are `Uppercase` and `Lowercase`.\n\t*/\n\tplayers: ['Uppercase', 'Lowercase'],\n\t\n\t/** The constructor takes the `activePlayer` (Uppercase by default) and the `board` as a string \n\t(`initialBoard` by default).\n\t*/\n\tconstructor: function Bahab(activePlayer, board) {\n\t\tGame.call(this, activePlayer);\n\t\tthis.board = board instanceof CheckerboardFromString ? board\n\t\t\t: new CheckerboardFromString(5, 5, board || this.initialBoard);\n\t},\n\t\n\t/** The `initialBoard` has two ranks of pieces for each player. All B pieces except one A piece \n\tat the center of the first rank.\n\t*/\n\tinitialBoard: ['BBABB', 'BBBBB', '.....', 'bbbbb', 'bbabb'].join(''),\n\n\t/** `__PLAYER_ENDGAME_RE__` regular expressions are used to optimize result calculations. They \n\tmatch if the player has no A piece or if its opponent has an A piece in its rank.\n\t*/\n\t__PLAYER_ENDGAME_RE__: {\n\t\tUppercase: /^[.Bab]+$|^.{0,4}[a]/, \n\t\tLowercase: /^[.bAB]+$|[A].{0,4}$/ \n\t},\n\t\n\t/** A player wins when it moves its A piece to the opponent's first rank, and loses when its A \n\tpiece is captured by the opponent.\n\t*/\n\tresult: function result() {\n\t\tvar board = this.board.string, player;\n\t\tfor (var i = 0; i < 2; ++i) {\n\t\t\tplayer = this.players[i];\n\t\t\tif (board.match(this.__PLAYER_ENDGAME_RE__[player])) {\n\t\t\t\treturn this.defeat(player); \n\t\t\t}\n\t\t}\n\t\treturn this.moves() ? null : this.defeat(this.activePlayer());\n\t},\n\t\n\t/** `__PLAYER_PIECES_RE__` regular expressions are used to optimize move calculations.\n\t*/\n\t__PLAYER_PIECES_RE__: {\n\t\tUppercase: /[AB]/g,\n\t\tLowercase: /[ab]/g\n\t},\n\t\n\t/** All pieces move one square forward. Piece A can move straight backwards or diagonally \n\tforward, and B pieces move only diagonally forward. Pieces can move to any square that is empty \n\tor occupied by an opponent's piece of the same type. If the piece moves to an occupied square, \n\tit captures the piece in it.\n\t*/\n\tmoves: function moves() {\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tpieceRegExp = this.__PLAYER_PIECES_RE__[activePlayer],\n\t\t\tboard = this.board,\n\t\t\t_moves = [];\n\t\tboard.string.replace(pieceRegExp, function (piece, i) {\n\t\t\tvar coord = [(i / 5)|0, i % 5], pieceMoves;\n\t\t\tswitch (piece) {\n\t\t\t\tcase 'A': pieceMoves = [[+1,-1], [-1, 0], [+1,+1]]; break;\n\t\t\t\tcase 'B': pieceMoves = [[+1,-1], [+1,+1]]; break;\n\t\t\t\tcase 'a': pieceMoves = [[-1,-1], [+1, 0], [-1,+1]]; break;\n\t\t\t\tcase 'b': pieceMoves = [[-1,-1], [-1,+1]]; break;\n\t\t\t}\n\t\t\titerable(pieceMoves).forEachApply(function (dx, dy) {\n\t\t\t\tvar coordTo = [coord[0] + dx, coord[1] + dy],\n\t\t\t\t\tsquareTo = board.square(coordTo);\n\t\t\t\tif (board.isValidCoord(coordTo) && !squareTo.match(pieceRegExp) &&\n\t\t\t\t\t\t(squareTo == '.' || piece.toLowerCase() == squareTo.toLowerCase())) {\n\t\t\t\t\t_moves.push([coord, coordTo]); // Valid coordinate and not occupied by a friendly piece.\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn piece;\n\t\t});\n\t\treturn _moves.length > 0 ? obj(activePlayer, _moves) : null;\n\t},\n\t\n\t/** Valid move for this game are pairs of coordinates (`[row, column]`), the first one being \n\twhere the moving piece starts, and the second one being where the moving piece ends.\t\n\t*/\n\tnext: function next(moves) {\n\t\tif (!moves) {\n\t\t\tthrow new Error(\"Invalid moves \"+ moves +\"!\");\n\t\t}\n\t\tvar activePlayer = this.activePlayer(),\n\t\t\tmove = moves[activePlayer];\n\t\tif (!Array.isArray(moves[activePlayer])) {\n\t\t\tthrow new Error(\"Invalid moves \"+ JSON.stringify(moves) +\"!\");\n\t\t}\n\t\treturn new this.constructor(this.opponent(), this.board.move(move[0], move[1]));\n\t},\n\t\n\t// ## User intefaces ###########################################################################\n\t\n\t/** The `display(ui)` method is called by a `UserInterface` to render the game state. The only \n\tsupported user interface type is `BasicHTMLInterface`. The look can be configured using CSS \n\tclasses.\n\t*/\n\tdisplay: function display(ui) {\n\t\traiseIf(!ui || !(ui instanceof UserInterface.BasicHTMLInterface), \"Unsupported UI!\");\n\t\treturn this.__displayHTML__(ui);\n\t},\n\t\n\t/** The game board is rendered in HTML as a table. The look can be customized with CSS classes.\n\t*/\n\t__displayHTML__: function __displayHTML__(ui) {\n\t\tvar game = this,\n\t\t\tmoves = this.moves(),\n\t\t\tactivePlayer = this.activePlayer(),\n\t\t\tboard = this.board,\n\t\t\tclassNames = {\n\t\t\t\t'A': \"ludorum-square-Uppercase-A\", 'B': \"ludorum-square-Uppercase-B\",\n\t\t\t\t'a': \"ludorum-square-Lowercase-A\", 'b': \"ludorum-square-Lowercase-B\",\n\t\t\t\t'.': \"ludorum-square-empty\"\n\t\t\t},\n\t\t\tmovesByFrom = moves ? iterable(moves[activePlayer]).groupAll(function (m) {\n\t\t\t\treturn JSON.stringify(m[0]);\n\t\t\t}) : {},\n\t\t\tselectedMoves = ui.selectedPiece && \n\t\t\t\tmovesByFrom[JSON.stringify(ui.selectedPiece)].map(function (m) {\n\t\t\t\t\treturn JSON.stringify(m[1]);\n\t\t\t\t});\n\t\tboard.renderAsHTMLTable(ui.document, ui.container, function (data) {\n\t\t\tdata.className = classNames[data.square];\n\t\t\tdata.innerHTML = data.square == '.' ? ' ' : data.square;\n\t\t\tif (ui.selectedPiece) {\n\t\t\t\tif (selectedMoves && selectedMoves.indexOf(JSON.stringify(data.coord)) >= 0) {\n\t\t\t\t\tdata.className = \"ludorum-square-\"+ activePlayer +\"-move\";\n\t\t\t\t\tdata.onclick = function () {\n\t\t\t\t\t\tvar selectedPiece = ui.selectedPiece;\n\t\t\t\t\t\tui.selectedPiece = (void 0);\n\t\t\t\t\t\tui.perform([selectedPiece, data.coord], activePlayer);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (movesByFrom.hasOwnProperty(JSON.stringify(data.coord))) {\n\t\t\t\tdata.onclick = function () {\n\t\t\t\t\tui.selectedPiece = data.coord;\n\t\t\t\t\tui.display(game); // Redraw the game state.\t\t\t\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t\treturn ui;\n\t},\n\t\n\t// ## Utility methods ##########################################################################\n\t\n\t/** Serialization and materialization using Sermat.\n\t*/\n\t'static __SERMAT__': {\n\t\tidentifier: 'Bahab',\n\t\tserializer: function serialize_Bahab(obj) {\n\t\t\treturn [obj.activePlayer(), obj.board];\n\t\t}\n\t}\n}); // declare Bahab.","/** # RoundRobin\n\n[Round-robins](http://en.wikipedia.org/wiki/Round-robin_tournament) are \ntournaments where all players play against each other a certain number of times.\n*/\ntournaments.RoundRobin = declare(Tournament, {\n\t/** The constructor takes the `game` to be played, the `players` and the \n\tamount of matches each player should play (`matchCount`).\n\t*/\n\tconstructor: function RoundRobin(game, players, matchCount) {\n\t\tTournament.call(this, game, players);\n\t\tthis.matchCount = isNaN(matchCount) ? game.players.length : +matchCount;\n\t\tthis.__advance__ = this.__matches__().chain(Iterable.repeat(null)).__iter__();\n\t},\n\n\t/** Round-robin matches make every player plays `matchCount` matches for \n\teach role in the game against all the other opponents.\n\t*/\n\t__matches__: function __matches__() {\n\t\tvar tournament = this,\n\t\t\tgame = this.game,\n\t\t\tms = iterable(this.players);\n\t\tms = ms.product.apply(ms, Iterable.repeat(this.players, game.players.length - 1).toArray());\n\t\treturn ms.filter(function (tuple) { // Check for repeated.\n\t\t\tfor (var i = 1; i < tuple.length; i++) {\n\t\t\t\tfor (var j = 0; j < i; j++) {\n\t\t\t\t\tif (tuple[i] === tuple[j]) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}).product(Iterable.range(this.matchCount)).map(function (tuple) {\n\t\t\treturn new Match(game, tuple[0]);\n\t\t});\n\t}\n}); //// declare RoundRobin.\n","/** # Measurement\n\nMeasurement tournaments pit the player being measured against others in order\nto assess that player's performance at a game. They are used to evaluate how \nwell the players play by confronting them with the opponents, rotating their \nroles in the matches.\n*/\ntournaments.Measurement = declare(Tournament, {\n\t/** The constructor takes the `game` used in the contest, the `players`\n\tbeing evaluated, the `opponents` used to evaluate them, and the amount of\n\tmatches each player will play (`matchCount`).\n\t*/\n\tconstructor: function Measurement(game, players, opponents, matchCount) {\n\t\tTournament.call(this, game, Array.isArray(players) ? players : [players]);\n\t\tthis.opponents = Array.isArray(opponents) ? opponents : [opponents];\n\t\traiseIf(this.opponents.length < game.players.length - 1, \"Not enough opponents.\");\n\t\tthis.matchCount = isNaN(matchCount) ? game.players.length : +matchCount;\n\t\tthis.__advance__ = this.__matches__().chain(Iterable.repeat(null)).__iter__();\n\t},\n\n\t/** A measurement tournament makes every player play `matchCount` matches \n\tfor each role in the game against all possible combinations of opponents.\n\t*/\n\t__matches__: function __matches__() {\n\t\tvar game = this.game,\n\t\t\tplayerCount = game.players.length,\n\t\t\topponentCombinations = iterable(this.opponents);\n\t\tif (playerCount > 2) {\n\t\t\topponentCombinations = opponentCombinations.product.apply(opponentCombinations, \n\t\t\t\tIterable.repeat(this.opponents, playerCount - 2).toArray());\n\t\t} else {\n\t\t\topponentCombinations = opponentCombinations.map(function (p) {\n\t\t\t\treturn [p];\n\t\t\t});\n\t\t}\n\t\treturn iterable(this.players).product( \n\t\t\tIterable.range(playerCount),\n\t\t\topponentCombinations,\n\t\t\tIterable.range(this.matchCount)).map(function (tuple){\n\t\t\t\tvar players = tuple[2].slice(0);\n\t\t\t\tplayers.splice(tuple[1], 0, tuple[0]);\n\t\t\t\treturn new Match(game, players);\n\t\t\t});\n\t}\n}); //// declare Measurement.\n","/** # Elimination\n\nPlayoffs or sudden death kind of contests, also known as \n[elimination tournaments](http://en.wikipedia.org/wiki/Single-elimination_tournament).\nIn this tournaments players get randomly matched in successive brackets, each \nmatch's winner passing to the next round until the final match. Games are \nassumed to have only one winner per match.\n*/\ntournaments.Elimination = declare(Tournament, {\n\t/** The constructor takes the `game` to be played, the `players` and the \n\tamount of matches that make each playoff (`matchCount`, 1 by default).\n\t*/\n\tconstructor: function Elimination(game, players, matchCount) {\n\t\tTournament.call(this, game, players);\n\t\tthis.matchCount = isNaN(matchCount) ? 1 : +matchCount >> 0;\n\t},\n\n\t/** Each bracket is defined by partitioning the `players` in groups of the\n\tsize required by the game (usually two). If there are not enough players,\n\tsome players get reassigned. The bracket includes `matchCount` matches \n\tbetween these participants, rotating roles if possible.\n\t*/\n\t__bracket__: function __bracket__(players) {\n\t\tvar game = this.game,\n\t\t\tmatchCount = this.matchCount,\n\t\t\troleCount = this.game.players.length;\n\t\tplayers = players || this.players;\n\t\tif (players.length < roleCount) {\n\t\t\treturn [];\n\t\t} else {\n\t\t\treturn Iterable.range(0, players.length, roleCount).map(function (i) {\n\t\t\t\tvar participants = Iterable.range(i, i + roleCount).map(function (j) {\n\t\t\t\t\treturn players[j % players.length]; // Fill by repeating players if necessary.\n\t\t\t\t}).toArray();\n\t\t\t\treturn Iterable.range(matchCount).map(function (i) {\n\t\t\t\t\tparticipants.unshift(participants.pop()); // Rotate partipants roles.\n\t\t\t\t\treturn new Match(game, participants);\n\t\t\t\t}).toArray();\n\t\t\t}).toArray();\n\t\t}\n\t},\n\t\n\t/** A playoff is resolved by aggregating the results of all its matches. The\n\twinner of the playoff is the one with the greater result sum.\n\t*/\n\t__playoff__: function __playoff__(matches) {\n\t\tvar playoffResult = {},\n\t\t\tplayers = {};\n\t\tmatches.forEach(function (match) {\n\t\t\tvar matchResult = match.result();\n\t\t\tif (!matchResult) {\n\t\t\t\tthrow new Error('Unfinished match in playoff!');\n\t\t\t}\n\t\t\titerable(match.players).forEach(function (tuple) {\n\t\t\t\tvar role = tuple[0],\n\t\t\t\t\tplayerName = tuple[1].name;\n\t\t\t\tplayoffResult[playerName] = (+playoffResult[playerName] || 0) + matchResult[role];\n\t\t\t\tplayers[playerName] = tuple[1];\n\t\t\t});\n\t\t});\n\t\tvar winnerName = iterable(playoffResult).greater(function (pair) {\n\t\t\treturn pair[1];\n\t\t})[0][0];\n\t\treturn players[winnerName];\n\t},\n\t\n\t/** The elimination tournament runs until there is less players in the next\n\tbracket than the amount required to play the game. Since this amount is \n\tusually two, the contest ends with one player at the top.\n\t*/\n\t__advance__: function __advance__() {\n\t\tif (!this.__matches__ || this.__matches__.length < 1) {\n\t\t\tif (!this.__currentBracket__) { // First bracket.\n\t\t\t\tthis.__currentBracket__ = this.__bracket__(this.players);\n\t\t\t} else if (this.__currentBracket__.length < 1) { // Tournament is finished.\n\t\t\t\treturn null;\n\t\t\t} else { // Second and on brackets.\n\t\t\t\tvar players = this.__currentBracket__.map(this.__playoff__);\n\t\t\t\tthis.__currentBracket__ = this.__bracket__(players);\n\t\t\t}\n\t\t\tthis.__matches__ = iterable(this.__currentBracket__).flatten().toArray();\n\t\t}\t\n\t\treturn this.__matches__.shift();\n\t}\n}); //// declare Elimination.\n","// See __prologue__.js\n\t[Match,\n\t\tgames.Bahab, games.Choose2Win, games.ConnectionGame, games.Mutropas, games.OddsAndEvens,\n\t\t\tgames.Pig, games.Predefined, games.TicTacToe, games.ToadsAndFrogs,\n\t\taleatories.Aleatory, aleatories.UniformAleatory,\n\t\tutils.CheckerboardFromString\n\t].forEach(function (type) {\n\t\ttype.__SERMAT__.identifier = exports.__package__ +'.'+ type.__SERMAT__.identifier;\n\t\texports.__SERMAT__.include.push(type);\n\t});\n\tSermat.include(exports); // Ludorum uses Sermat internally.\n\n\treturn exports;\n});"]} \ No newline at end of file