{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Riddler Classic\n", "\n", "https://fivethirtyeight.com/features/how-many-phones-do-you-need-to-win-hq-trivia/\n", "\n", "> From Kate Seely, a gaming problem to which she would very much like to know the answer:\n", "> I have a matching game app for my 4-year-old daughter. There are 10 different pairs of cards, each pair depicting the same animal. That makes 20 cards total, all arrayed face down. The goal is to match all the pairs. When you flip two cards up, if they match, they stay up, decreasing the number of unmatched cards and rewarding you with the corresponding animal sound. If they don’t match, they both flip back down. (Essentially like [Concentration.](https://en.wikipedia.org/wiki/Concentration_(game))) However, my 1-year-old son also likes to play the game, exclusively for its animal sounds. He has no ability to match cards intentionally — it’s all random.\n", "If he flips a pair of cards every second and it takes another second for them to either flip back over or to make the “matching” sound, how long should my daughter expect to have to wait before he finishes the game and it’s her turn again?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solution\n", "\n", "Consider a more general case of $n$ pairs (hence a total of $2n$ cards). The probability of getting a \"hit\", i.e. a flip with matching pairs starting with $n$ pairs is given by:\n", "\n", "\\begin{align*}\n", "p_n &= \\frac{{n \\choose 1}}{2n \\choose 2} \\\\\n", "&= \\frac{1}{2n-1}\n", "\\end{align*}\n", "\n", "The number of tries till a first \"hit\" follows a geometric disribution. (Think of a coin toss experiment where the we are studying the distribution of number of heads till the first tail appears $P(X=k) = p^k(1-p)$. Then the mean is given by $EX = \\frac{1}{p}$.\n", "\n", "Thus, it will take $2n-1$ picks to get a \"hit\" on average starting with $2n$ cards. Similarly, it will take $2n-3$ picks starting with $2n-2$ cards and so on.\n", "\n", "Hence number of picks when the player is playing randomly:\n", "$$\n", "(2n-1) + (2n-3) + \\dots + 3 + 1 = n^2\n", "$$\n", "\n", "We verify this solution with simulation below where we simulate picks for $n=[10, 20, 30, 40, 50]$" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "%pylab inline\n", "import seaborn as sns\n", "from collections import defaultdict\n", "\n", "sns.set_context('paper', font_scale=2)\n", "sns.set_style('whitegrid')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10\n", "20\n", "30\n", "40\n", "50\n" ] } ], "source": [ "np.random.seed(42)\n", "iterations = 1000\n", "N = np.arange(10, 51, 10)\n", "n_tries_arr = defaultdict(list)\n", "for n in N:\n", " print (n)\n", " for iteration in range(0, iterations):\n", " sample_universe = list(range(1, n+1)) + list(range(1, n+1))\n", " n_tries = 0\n", " while sample_universe:\n", " samples = np.random.choice(sample_universe, size=2, replace=False)\n", " sample1, sample2 = samples\n", " if sample1 == sample2:\n", " sample_universe = list(filter(lambda a: a != sample1, sample_universe))\n", " n_tries += 1\n", " n_tries_arr[n].append(n_tries) " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(8,8))\n", "ax.plot([np.mean(n_tries_arr[x]) for x in N], np.array(N)**2 )\n", "ax.set_xlabel('$N^2$')\n", "ax.set_ylabel('Expected Runtime')\n", "fig.tight_layout()" ] } ], "metadata": { "kernelspec": { "display_name": "Python [default]", "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.5.4" } }, "nbformat": 4, "nbformat_minor": 2 }