////////// Exercice 1 ////////// import { stateToString, otherPlayer } from '#src/utils/tictactoe.js'; import { node, val, children, treeDisp } from '#src/utils/tree.imperative.api.js'; let aState = [ 'x', ' ', 'o', 'x', 'o', ' ', 'x', ' ', ' ' ]; console.log(`A state :\n${stateToString(aState)}`); stateEmptySlots([ 'x', ' ', 'o', 'x', 'o', ' ', 'x', ' ', ' ' ]); // -> [ 1, 5, 7, 8 ] stateNexts(['x', 'o', 'x', ' ', ' ', ' ', 'x', 'o', 'x'], 'x'); // -> [ [ 'x', 'o', 'x', 'x', ' ', ' ', 'x', 'o', 'x' ], // [ 'x', 'o', 'x', ' ', 'x', ' ', 'x', 'o', 'x' ], // [ 'x', 'o', 'x', ' ', ' ', 'x', 'x', 'o', 'x' ] ] ////////// Exercice 2 ////////// import { leaf, node, nodeThaw, treeThawAtDepth } from '#src/utils/tree.frozen.api.js'; // A normal tree let normalTree = node("root", [ leaf("unique son") ]); console.logA(normalTree); // A tree whose children have been frozen let frozenTree = node("root", () => [ leaf("1st son"), leaf("2nd son") ]); console.logA(frozenTree); ////////// Exercice 3 ////////// import { evaluated, freeze, isFrozen, thaw, value } from '#src/utils/lazy.js'; const aFrozenValue = freeze(() => 7); // Create a frozen value isFrozen(aFrozenValue); // -> true (it is indeed frozen) thaw(aFrozenValue); // Thaw it (this is a side-effect) isFrozen(aFrozenValue); // -> false (it has been thawed) value(aFrozenValue); // -> 7 const anEvaluatedValue = evaluated(5); // Create an evaluated value isFrozen(anEvaluatedValue); // -> false (it has never been frozen) import { leaf, node, treeThawAtDepth } from '#src/utils/tree.lazy.api.js'; // A tree whose children are completely evaluated (note the `evaluated`) let normalTree = node("root", evaluated([ leaf("1st son"), leaf("2nd son") ])); console.logA(normalTree); // A tree whose children are frozen values (note the `frozen`) let frozenTree = node("root", freeze(() => [leaf("1st son"), leaf("2nd son") ])); console.logA(frozenTree); // Thaw the tree at depth 1 treeThawAtDepth(frozenTree, 1); console.logA(frozenTree); ////////// Exercice 4 ////////// import { stateWinner, stateIsFinal, initialState, stateToString, stateNexts, otherPlayer } from '#src/utils/tictactoe.js' import { evaluated, freeze, isFrozen, thaw, value } from '#src/utils/lazy.js'; import { node, nodeThaw, treeDisp, treeThawAtDepth } from '#src/utils/tree.lazy.api.js'; import { generateRandomInt } from '#src/utils/random.js';