Skip to content

Instantly share code, notes, and snippets.

@trent2
Last active March 13, 2020 18:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save trent2/f4f76547076e821afefb78744508a74c to your computer and use it in GitHub Desktop.
Save trent2/f4f76547076e821afefb78744508a74c to your computer and use it in GitHub Desktop.
Solution to "The Riddler" playing Guess Who
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"#/usr/bin/python\n",
"from math import ceil\n",
"from sys import argv\n",
"# \"me\" plays first\n",
"# \"opp\" plays second\n",
"#\n",
"# M[k,l] is the probabilty for me to win when I have k and my opponent has l cards\n",
"# and it is my turn to play\n",
"\n",
"#\n",
"# Then 1-M[k,l] is the probability for my opponent to win when I have k cards and he has l cards\n",
"# and it is my turn. Since both players play with the same (optimal) strategy we can swap all roles:\n",
"# Hence this can also be interpreted as the probability for me to win when I have l and he has k cards\n",
"# and it is his turn.\n",
"def computeProps(n):\n",
" M = {}\n",
"\n",
" for k in range(1,n+1):\n",
" M[1,k] = 1 # my turn, only one card to chose, so I'll win\n",
" M[k,1] = 1/k # my turn, opponent will win next move, so guess\n",
"\n",
" for k in range(2,n+1):\n",
" for l in range(k,n+1):\n",
" M[k,l] = max([1/k] + [i/k*(1-M[l,i]) + (k-i)/k*(1-M[l,k-i]) for i in range(1,ceil(k/2)+1)])\n",
" M[l,k] = max([1/l] + [i/l*(1-M[k,i]) + (l-i)/l*(1-M[k,l-i]) for i in range(1,ceil(l/2)+1)])\n",
"\n",
" return M"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Probabilities to the solution to the riddler problem: 0.5625 0.5555555555555556 0.5612244897959184\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 936x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"# number of games\n",
"n = 500\n",
"M = computeProps(n)\n",
"print(\"Probabilities to the solution to the riddler problem: \", M[4,4], M[24,24], M[14,14])\n",
"\n",
"x = np.arange(n)\n",
"y = np.array([M[k,k] for k in range(1,n+1)])\n",
"fig, ax = plt.subplots()\n",
"ax.plot(x,y)\n",
"ax.set_ylim(0.53, 0.57)\n",
"ax.set(xlabel=\"# of cards\", ylabel=\"prob. for first player to win\", title=\"Guess Who\")\n",
"ax.grid()\n",
"fig.set_figwidth(13)\n",
"fig.set_figheight(5)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
numpy==1.16.*
matplotlib==3.*
seaborn==0.8.1
python-3.6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment