Reformatted the function checking for possible turns.

This commit is contained in:
Philipp committed 2023-02-12 16:53:08 +01:00
1 parent 839093e3f1
commit 108ea026b1
1 file changed
+58 -100
+58 -100
View File
@@ -95,6 +95,7 @@
"metadata": {},
"outputs": [],
"source": [
"\n",
"%load_ext blackcellmagic"
]
},
@@ -131,6 +132,7 @@
"metadata": {},
"outputs": [],
"source": [
"import itertools\n",
"import numpy as np\n",
"import abc\n",
"from typing import Final\n",
@@ -315,7 +317,7 @@
},
{
"cell_type": "code",
"execution_count": 24,
"execution_count": 8,
"metadata": {},
"outputs": [
{
@@ -437,14 +439,22 @@
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"8.78 ms ± 868 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
"82.7 ms ± 585 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
]
},
{
"data": {
"text/plain": "array([[[False, False, False, False, False, False, False, False],\n [False, False, False, False, False, False, False, False],\n [False, False, False, True, False, False, False, False],\n [False, False, True, False, False, False, False, False],\n [False, False, False, False, False, True, False, False],\n [False, False, False, False, True, False, False, False],\n [False, False, False, False, False, False, False, False],\n [False, False, False, False, False, False, False, False]]])"
},
"execution_count": 11,
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
@@ -457,10 +467,10 @@
" board: The board that should be checked for a playable action.\n",
" rec_direction: The direction that should be checked.\n",
" rec_position: The position that should be checked.\n",
" step_one:\n",
" step_one: Defines if the call of this function is the firs or not. Should be kept to the default value for proper functionality.\n",
"\n",
" Returns:\n",
"\n",
" True if a turn is possible for possition and direction on the board defined.\n",
" \"\"\"\n",
" rec_position = rec_position + rec_direction\n",
" if np.any((rec_position >= BOARD_SIZE) | (rec_position < 0)):\n",
@@ -475,18 +485,21 @@
"\n",
"\n",
"def get_possible_turns(boards: np.ndarray) -> np.ndarray:\n",
" try:\n",
" _poss_turns = boards == 0\n",
" _poss_turns &= binary_dilation(boards == -1, SURROUNDING)\n",
" except RuntimeError as err:\n",
" print(boards)\n",
" print(boards == -1)\n",
" print(\"err\")\n",
" raise err\n",
" for game in range(boards.shape[0]):\n",
" for idx in range(BOARD_SIZE):\n",
" for idy in range(BOARD_SIZE):\n",
" \"\"\"Check where turns are possible on a board.\n",
"\n",
" Args:\n",
" boards: A stack of boards to check.\n",
"\n",
" Returns:\n",
" A stack of game boards containing boolean values showing where turns are possible for the player.\n",
" \"\"\"\n",
" _poss_turns = boards == 0 # checks where fields are empty.\n",
" _poss_turns &= binary_dilation(\n",
" boards == -1, SURROUNDING\n",
" ) # checks where fields are next to an enemy filed an empty\n",
" for game, idx, idy in itertools.product(\n",
" range(boards.shape[0]), range(BOARD_SIZE), range(BOARD_SIZE)\n",
" ):\n",
" position = idx, idy\n",
" if _poss_turns[game, idx, idy]:\n",
" _poss_turns[game, idx, idy] = any(\n",
@@ -496,28 +509,19 @@
" return _poss_turns\n",
"\n",
"\n",
"# %timeit get_possible_turns(get_new_games(10))\n",
"# %timeit get_possible_turns(get_new_games(100))\n",
"get_possible_turns(get_new_games(3))[:1]"
"%timeit get_possible_turns(get_new_games(10)) # checks turn possibility evaluation time for 10 initial games\n",
"%timeit get_possible_turns(get_new_games(100)) # check turn possibility evaluation time for 100 initial games\n",
"get_possible_turns(get_new_games(3))[:1] # shows a singe game"
]
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "(array([2, 2, 2]), array([2, 2, 2]))"
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"def board_evaluation_final(array: np.ndarray):\n",
" score1, score2 = np.sum(array == 1, axis=(1, 2)), np.sum(array == -1, axis=(1, 2))\n",
"def board_evaluation_final(boards: np.ndarray) -> tuple[np.ndarray, np.ndarray]:\n",
" score1, score2 = np.sum(boards == 1, axis=(1, 2)), np.sum(boards == -1, axis=(1, 2))\n",
" player_1_won = score1 > score2\n",
" player_2_won = score1 < score2\n",
" score1_final = 64 - score2[player_1_won]\n",
@@ -527,18 +531,22 @@
" return score1, score2\n",
"\n",
"\n",
"def board_evaluation(array: np.ndarray):\n",
" score1, score2 = np.sum(array == 1, axis=(1, 2)), np.sum(array == -1, axis=(1, 2))\n",
"def board_evaluation(boards: np.ndarray) -> tuple[np.ndarray, np.ndarray]:\n",
" score1, score2 = np.sum(boards == 1, axis=(1, 2)), np.sum(boards == -1, axis=(1, 2))\n",
" return score1, score2\n",
"\n",
"\n",
"def board_score(boards: np.ndarray) -> tuple[np.ndarray]:\n",
" return np.sign(np.sum(boards, axis=(1, 2)))\n",
"\n",
"\n",
"board_evaluation(get_new_games(3))\n",
"board_evaluation_final(get_new_games(3))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -561,7 +569,7 @@
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -605,18 +613,9 @@
},
{
"cell_type": "code",
"execution_count": 15,
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "array([[ 0, 0, 0, 0, 0, 0, 0, 0],\n [ 0, 0, 0, 0, 0, 0, 0, 0],\n [ 0, 0, 0, 1, 0, 0, 0, 0],\n [ 0, 0, 0, 1, 1, 0, 0, 0],\n [ 0, 0, 0, 1, -1, 0, 0, 0],\n [ 0, 0, 0, 0, 0, 0, 0, 0],\n [ 0, 0, 0, 0, 0, 0, 0, 0],\n [ 0, 0, 0, 0, 0, 0, 0, 0]])"
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"class InvalidTurn(ValueError):\n",
" pass\n",
@@ -664,7 +663,7 @@
},
{
"cell_type": "code",
"execution_count": 16,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -698,7 +697,7 @@
},
{
"cell_type": "code",
"execution_count": 17,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -721,25 +720,9 @@
},
{
"cell_type": "code",
"execution_count": 18,
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"110 ms ± 7.6 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
]
},
{
"data": {
"text/plain": "array([[[0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n ...,\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0]],\n\n [[0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n ...,\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0]],\n\n [[0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n ...,\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0]],\n\n ...,\n\n [[0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n ...,\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0]],\n\n [[0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n ...,\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0]],\n\n [[0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n ...,\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0],\n [0, 0, 0, ..., 0, 0, 0]]])"
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"def single_turn(\n",
" current_boards: np, policy: GamePolicy\n",
@@ -761,25 +744,9 @@
},
{
"cell_type": "code",
"execution_count": 19,
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"9.34 s ± 430 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
]
},
{
"data": {
"text/plain": "(array([[[[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n ...,\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]]],\n \n \n [[[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n ...,\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]]],\n \n \n [[[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.]],\n \n ...,\n \n [[ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n ...,\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0., 0.],\n [ 0., 0., 0., ..., 0., 0.,Line truncated
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"SIMULATE_TURNS = 70\n",
"\n",
@@ -813,14 +780,14 @@
},
{
"cell_type": "code",
"execution_count": 19,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 20,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -1071,25 +1038,16 @@
},
{
"cell_type": "code",
"execution_count": 21,
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "<Figure size 1200x300 with 3 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA30AAAEiCAYAAABNzbuyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA//UlEQVR4nO3df3BVd53/8de5IU1JuQkpJa1pUmwDklhIWlN1sx34WtO6hkKrA+4uU2tB191VbNXIVtkZV92uRYcf0+2q7K6L0PoDdNA6ykBVopY4phZoS+MacBO3NCltU9k0CQRimnu+f1wSwo+Qe8/98Xnfe5+PmcyQJud+Xn7OOS/zuT/O8Xzf9wUAAAAAyEoh1wEAAAAAAKnDog8AAAAAshiLPgAAAADIYiz6AAAAACCLsegDAAAAgCzGog8AAAAAshiLPgAAAADIYiz6AAAAACCLTUn3gJFIREePHlU4HJbneekeHoBBvu9rYGBAZWVlCoXcPRdFPwG4EAsdRT8BuJBY+ynti76jR4+qoqIi3cMCyABdXV0qLy93Nj79BOBiXHYU/QTgYibrp7Qv+sLh8Jlvpheme3jptUG345OBDNYyuB5/XIaz+sEB5/0kmdofzjK4Hp8MZJggg8uOop/IYGZ8MpjMMFk/pX3RN/aWhOmF8v7tA+keXv5935R6T0gll8l7+O60j08GMljL4Hp8SfLvfVR6bdD5W5Zc95NkZH9wTJKBDGdnMNBR9BMZrIxPBmMZYuwnLuQCAAAAAFmMRR8AAAAAZDEWfQAAAACQxdL+mT4AAAAA6VdRWKIVlfWaHS5VOL9AA8ND6hjo0dbOVnUN9rqOhxRi0QcAAABksYWlc9RU3aDF5fMV8X1JUsgLKeJHJEmfq7ldO7vbtKF9j1p6OlxGRYqw6AMAAACy1Keqb9W6uqUajowo5IUUGneRx5CXN/bvxqvn6Y6KWq0+sEMb25sdJEUq8Zk+AAAAIAs1VTdoXd1SSVJ+KO+ivzv68/V1y9RU3ZDybEgvFn0AAABAlllYOkfr65YF2nZ93TItKJ2d5ERwKe5F3969e7VkyRKVlZXJ8zz98Ic/TEEsAIgf/QTAKvoJ6dZU3aDhyEigbYcjI7zal2XiXvSdOHFCtbW1+upXv5qKPAAQGP0EwCr6CelUUViixeXzJ31L50TyQ3laUl6j8sKSJCeDK3FfyKWxsVGNjY2pyAIACaGfAFhFPyGdVlTWK+L7Z120JV4R39fKyno90LYrecHgTMqv3jk0NKShoaGx7/v7+1M9JADEhH4CYBX9hETMDpcm/Bi+pMrwzMTDwISUX8hl7dq1Ki4uHvuqqKhI9ZAAEBP6CYBV9BMSEc4vUMhL7M/8PC+kovxLk5QIrqV80bdmzRr19fWNfXV1daV6SACICf0EwCr6CYkYGB4au/F6UCN+RP3Dp5KUCK6l/O2dBQUFKigoSPUwABA3+gmAVfQTEtEx0JPwY3iSOgdeTTwMTOA+fQAAAEAW2drZqpCXwFVcJIU8T1s6W5OUCK7F/Urf8ePH1dHRMfb9//7v/+rZZ5/V5ZdfrmuuuSap4QAgHvQTAKvoJ6RT12Cvdna3qfHqeYFu2zAcGdGuF9vUPdibgnRwIe5F3/79+3XLLbeMfd/U1CRJuueee7R169akBQOAeNFPAKyin5BuG9r36I6K2kDb5nkhbWxvTnIiuBT3ou8d73iHfN9PRRYASAj9BMAq+gnp1tLTodUHdmh93bK4t73/6e+rpadj8l9ExuAzfQAAAEAW2tjerNUHdkiKvmXzYkZ/vvrADl7ly0Ipv3onAAAAADc2tjdr37Ejaqpu0JLyGkVOv+Ic8kIa8SPyFL1oy64X27SxvZlX+LIUiz4AAAAgi7X0dKilp0PlhSVaWVmvyvBMFeVfqv7hU+oceFVbOlu5aEuWY9EHAAAA5IDuwV490LbLdQw4wGf6AAAAACCLsegDAAAAgCzGog8AAAAAshiLPgAAAADIYp6f5juF9vf3q7i4OPpNyWXpHDrqtUHJ9yXPk6YXpn98MpDBWgbX40tS7wlJUl9fn4qKitxkkIF+kmzsD9cZXI9PBjKcy0BH0U9kMDM+GWxliLGf3C76AGAcU4s+ADiHmUUfAJxjsn5ye8sGXukjAxncZ3A9vjT2LJUpPJOe28ckGcgwnrWOop9yO4Pr8clgK0OM/eRu0Te9UN7Dd6d9WP++b0Ynx9H4ZCCDtQyux5ck/95Ho8VpRQ4fDxYyuB6fDGQ4L4Oljsr1fUEG5+OTwViGGPuJC7kAAAAAQBZj0QcAAAAAWYxFHwAAAABkMbcXckHcKgpLtKKyXrPDpQrnF2hgeEgdAz3a2tmqrsHetGTw/zggtRyWXumTTg5LU/OlK4ulBXPlXRFOSwbXmAPgfPSTDcwBcD4L/WQhgwXMgxss+jLEwtI5aqpu0OLy+YqcvstGyAsp4kckSZ+ruV07u9u0oX2PWno6UpLBbz8q7T4oPXskepUiSYr4Uuj0vx/bL/+GWdKiWnlVZSnJ4BpzAJyPfrKBOQDOZ6GfLGSwgHlwi0VfBvhU9a1aV7dUw5ERhbzQ2P9/S1LIyxv7d+PV83RHRa1WH9ihje3NSRvf931p10Fp+5PRPx58RS9POyoy7t8HX5CeOSJ/eb3UWCPP8857vEzEHAAXRj+5xxwAF+a6n6xksIB5cI/P9BnXVN2gdXVLJUn5obyL/u7oz9fXLVNTdUPyQux+LvrHhHT2Hw8XMvrzba3R7bIFcwCch34ygjkAzmOhnyxksIB5sIFFn2ELS+dofd2yQNuur1umBaWzE87gtx+N/nEQxLZW+YeOJpzBNeYAOB/9ZANzAJzPQj9ZyGAB82BHXIu+tWvX6q1vfavC4bBKS0v1nve8R4cPH05VtpzXVN2g4chIoG2HIyPJeYZk90Gd9Rp8PEJedPtMxxxkBPopvegnI5iDjEFHpY+FfrKQwQLmwY64Fn1PPPGEVq1apSeffFI/+9nPNDw8rHe96106ceJEqvLlrIrCEi0unz/py+ATyQ/laUl5jcoLSwJn8P84EL0gwGRvF5pIxI9+duTY8cAZXGMOMgf9lD70kw3MQWaho9LDQj9ZyGAB82BLXIu+xx9/XCtWrND111+v2tpabd26VS+88IIOHDiQqnw5a0Vl/diVjYKK+L5WVtYHf4CWw2euABeU50l7DyX2GC4xBxmDfkof+skI5iCj0FHpYaGfLGSwgHmwJaGrd/b19UmSLr/88gl/Z2hoSENDQ2Pf9/f3JzJkzpgdLk34MXxJleGZwR/glb6EM0QfJ4P3OXOQsein1KGfjGAOMtpkHUU/BWOhnyxksIB5sCXwhVwikYg+8YlP6Oabb9a8efMm/L21a9equLh47KuioiLokDklnF+gkJfYdXbyvJCK8i8N/gAnh4O/bWhUxJdO/imxx3CJOchI9FNq0U9GMAcZK5aOop+CsdBPFjJYwDzYEnhPrFq1Sr/97W+1ffv2i/7emjVr1NfXN/bV1dUVdMicMjA8NHazyqBG/Ij6h08Ff4Cp+cEvEDAq5ElTL0nsMVxiDjIS/ZRa9JMRzEHGiqWj6KdgLPSThQwWMA+2BHp758c+9jHt3LlTe/fuVXl5+UV/t6CgQAUFBYHC5bKOgZ6EH8OT1DnwavAHuLI44QzRxylKzuO4wBxkHPop9egnI5iDjBRrR9FPwVjoJwsZLGAebInrlT7f9/Wxj31Mjz32mH7+85/r2muvTVWunLe1s1WhBD+gH/I8bekMeP8mSVowV0rwA7jyfWlhVWKP4RJzkDHop/Shn4xgDjIKHZUeFvrJQgYLmAdb4lr0rVq1St/61rf0ne98R+FwWC+//LJefvllnTx5MlX5clbXYK92drcldG+TH3c/p+7B3sAZvCvC0g2zErsH1I2z5M2YFjiDa8xB5qCf0od+soE5yCx0VHpY6CcLGSxgHmyJa9G3adMm9fX16R3veIfe8IY3jH1997vfTVW+nLahfU/ge5vkeSFtbG9OPMSi2sTuAdVYm3gG15iDjEA/pRf9ZARzkDHoqPSx0E8WMljAPNgR99s7L/S1YsWKFMXLbS09HVp9YEegbe9/+vtq6elIOINXVSYtD3h/lOX10e0zHHOQGein9KKfbGAOMgcdlT4W+slCBguYBzsSu44qUm5je/PYyTLZy+OjP199YEdynxlprDnzR8VkbyMa/fny+uh22YI5AM5DPxnBHADnsdBPFjJYwDzYkNDN2ZEeG9ubte/YETVVN2hJeY0ipz+4H/JCGvEj8hT9oOuuF9u0sb056c+KeJ4nLaqVf91MafdB6Zkj0ugHcyP+mT8ifF+64RqpsTbrnj1mDoALo5/cYw6AC3PdT1YyWMA8uMeiL0O09HSopadD5YUlWllZr8rwTBXlX6r+4VPqHHhVWzpbU/5BV6+qTKoqk3/suLT3kPRKf/SmvlMviV7ye2FV1l8QgDkAzkc/2cAcAOez0E8WMljAPLjFoi/DdA/26oG2XU4zeDOmSe+9yWkG15gD4Hz0kw3MAXA+C/1kIYMFzIMbfKYPAAAAALIYiz4AAAAAyGIs+gAAAAAgi7HoAwAAAIAs5vn+6Wumpkl/f7+Ki4uj35Rcls6ho14bjF622vOk6YXpH58MZLCWwfX4ktR7QpLU19enoqIiNxlkoJ8kG/vDdQbX45OBDOcy0FH0ExnMjE8GWxli7Ce3iz4AGMfUog8AzmFm0QcA55isn9zesoFX+shABvcZXI8vjT1LZQrPpOf2MUkGMoxnraPop9zO4Hp8MtjKEGM/uVv0TS+U9/DdaR/Wv++b0clxND4ZyGAtg+vxJcm/99FocVqRw8eDhQyuxycDGc7LYKmjcn1fkMH5+GQwliHGfuJCLgAAAACQxVj0AQAAAEAWY9EHAAAAAFnM7YVckJEqCku0orJes8OlCucXaGB4SB0DPdra2aquwd6Uj+//cUBqOSy90iedHJam5ktXFksLine truncated
},
"metadata": {},
"output_type": "display_data"
}
],
"outputs": [],
"source": [
"plot_othello_boards(create_test_game()[-3:])"
]
},
{
"cell_type": "code",
"execution_count": 22,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -1110,7 +1068,7 @@
},
{
"cell_type": "code",
"execution_count": 22,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []