{ "cells": [ { "cell_type": "markdown", "id": "2b318d6c-cf70-44a2-bc2f-a83bff10465c", "metadata": {}, "source": [ "##### Algorithms and Data Structures (Winter - Spring 2022)\n", "\n", "* [Table of Contents](ADS_TOC.ipynb)\n", "* [Colab view](https://colab.research.google.com/github/4dsolutions/elite_school/blob/master/ADS_project_1.ipynb)\n", "* [nbviewer view](https://nbviewer.org/github/4dsolutions/elite_school/blob/master/ADS_project_1.ipynb)" ] }, { "cell_type": "markdown", "id": "c84dd0dd-8244-4cc8-aa81-0c0faf2d3fc7", "metadata": {}, "source": [ "# Final Project Ideas\n", "\n", "![XKCD: Control Group](https://imgs.xkcd.com/comics/control_group.png)\n", "\n", "A newly popular game app, and quite a simple one, is [Wordle](https://www.xda-developers.com/how-to-play-wordle/). As a game, it traces to Jotto and Mastermind.\n", "\n", "\"I'm thinking of a five-letter word. Make a guess, that itself has to be a recognized five-letter word and I will tell you:\n", "\n", "* C: if your letter is correctly placed\n", "* P: if your letter is in the answer, but is incorrectly placed\n", "* N: if your letter is nowhere in the answer\n", "\n", "You have five guesses at most. Ready?\"\n", "\n", "That's the final version of the game. \n", "\n", "However, we're going to start, not with five-letter words, but with five-digit numbers. The rules remain the same, except you have infinite guesses.\n", "\n", "
\n",
    "What is your guess? > 89811\n",
    "answer   : 88976\n",
    "guess    : 89811\n",
    "clue     : CPPNN\n",
    "\n",
    "What is your guess? > 76889\n",
    "answer   : 88976\n",
    "guess    : 76889\n",
    "clue     : PPPPP\n",
    "\n",
    "What is your guess? > 88976\n",
    "answer   : 88976\n",
    "guess    : 88976\n",
    "clue     : CCCCC\n",
    "You win!\n",
    "
" ] }, { "cell_type": "markdown", "id": "6eaa0dc1-a5bd-4985-be85-f9944e88344e", "metadata": {}, "source": [ "In the actual game, you would not see the answer. Your job is to guess the answer based on clues, using the following key:\n", "\n", "* C = Correct position\n", "* P = Correct letter, wrong position\n", "* N = Incorrect letter\n", "\n", "However straightforward these rules might seem, some subtle points are worth making.\n", "\n", "Once a digit in the guess gets a C or P, the corresponding digit in the answer is has been \"matched\" and cannot be matched again. \n", "\n", "For example, if the answer is \"08180\" and the guess is \"88822\", then the clue string is \"PCNNN\". \n", "\n", "The 3rd 8 didn't count, and registered an N (meaning \"not in the answer\"), because the only two 8s in the answer had already been matched to 8s in the guess. \n", "\n", "There is no 3rd 8 to talk about, so that 8 gets an N.\n", "\n", "
\n",
    "What is your guess? > 88822\n",
    "answer   : 08180\n",
    "guess    : 88822\n",
    "clue     : PCNNN\n",
    "\n",
    "What is your guess? > 08080\n",
    "answer   : 08180\n",
    "guess    : 08080\n",
    "clue     : CCNCC\n",
    "\n",
    "What is your guess? > 08180\n",
    "answer   : 08180\n",
    "guess    : 08180\n",
    "clue     : CCCCC\n",
    "You win!\n",
    "
" ] }, { "cell_type": "markdown", "id": "23a7897f-c8fc-4eef-bcbb-ca52225b7c9b", "metadata": {}, "source": [ "How might we convert this game into something to test in a contest? \n", "\n", "The point is not to see who plays the best, but to see who has an algorithm that correctly evaluates a guess relative to an answer, and provides the right clues.\n", "\n", "An input file could provide two columns: answer, guess. The corresponding output file repeats the answer and guess for clarity, then adds a 3rd column: the clue. \n", "\n", "This input file would be a test file, against which to test your algorithm. \n", "\n", "If your output file matches the one given, exactly, then you're ready to evaluate the actual final contest file. \n", "\n", "The judges will keep the final output file secret and compare your results to theirs." ] }, { "cell_type": "markdown", "id": "a922ca41-b4a8-4129-8037-bdde8ecbb992", "metadata": {}, "source": [ "Input (mmind_input.txt):\n", "\n", "
\n",
    "88976 91829\n",
    "88976 91416\n",
    "88976 84372\n",
    "88976 70392\n",
    "88976 83324\n",
    "88976 53681\n",
    "88976 79288\n",
    "88976 30714\n",
    "88976 35122\n",
    "88976 46093\n",
    "
\n", "\n", "Output (mmind_output.txt):\n", "\n", "
\n",
    "88976 91829 PNPNN\n",
    "88976 91416 PNNNC\n",
    "88976 84372 CNNCN\n",
    "88976 70392 PNNPN\n",
    "88976 83324 CNNNN\n",
    "88976 53681 NNPPN\n",
    "88976 79288 PPNPP\n",
    "88976 30714 NNPNN\n",
    "88976 35122 NNNNN\n",
    "88976 46093 NPNPN\n",
    "
" ] }, { "cell_type": "markdown", "id": "9a6a35ad-5cd8-47f4-83a0-002a29941396", "metadata": {}, "source": [ "Let's get to work!\n", "\n", "Here's some code to get you started. \n", "\n", "```python\n", "\n", "def words_play(answer = \"BLING\", show_answer = True):\n", " \n", " while True:\n", " \n", " guess = input(\"What is your guess? > \")\n", " if guess.upper().strip() == \"Q\":\n", " print(\"Come again!\")\n", " break\n", " \n", " if not guess.isalpha() or len(guess) != 5:\n", " print(\"Five letters please\")\n", " continue\n", " \n", " clue = evaluate(answer, guess)\n", " \n", " if show_answer:\n", " print(\"answer :\", answer)\n", " print(\"guess :\", guess)\n", " print(\"clue :\", clue)\n", " \n", " if clue == \"CCCCC\":\n", " print(\"You win!\")\n", " break\n", " \n", " \n", "```\n", "\n", "This code will set up a game loop for a human player. However the ```evaluate``` function has been left up to you. You may use this loop as a framework for testing your function.\n", "\n", "\n", "\"wordle_at_work\"\n", "\n", "\n", "When addressing the contest challenge, you should use the very same ```evaluate``` function to create your ```final_output.txt``` from ```contest_input.txt```." ] }, { "cell_type": "markdown", "id": "60683ce8-ebda-43df-9843-a3805f26b3ea", "metadata": {}, "source": [ "## Getting Fancy\n", "\n", "Guessing five digit strings is maybe not as fun as guessing words. \n", "\n", "Now that you have the logic for generating clues, switching from 0-9 to a-z should be trivial. Almost no code should need to change.\n", "\n", "But where do we get a list of all five-letter words? That depends on the language of course. In the case of English, [here's a source on Github](https://github.com/charlesreid1/five-letter-words/).\n", "\n", "Do you want to code a GUI (Graphical User Interface). Consider Tkinter (for controlling Tk) or [wxPython](https://wxpython.org/pages/screenshots/) (for controlling wxWidgets). Here's a short tutorial on building a Tkinter application." ] }, { "cell_type": "code", "execution_count": 1, "id": "39141497-073f-45be-9415-57c7559a825a", "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAUDBA0QDQ0ODQ0KDQ0NDQ0NDQ0NDQ0NDQ4NDQ0NDQ0NDQ0NDRANDQ0ODQ0NDRUODhERExMTDQ0WGBYSGBASExIBBQUFCAcIDwkJDxcPDw8VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFf/AABEIAWgB4AMBIgACEQEDEQH/xAAdAAABBAMBAQAAAAAAAAAAAAAAAgMGBwQFCAEJ/8QAYRAAAgEDAQMGBgwHDQQHBgcAAQIDAAQRIQUSMQYHE0FRYQgicYGRoRQXMlJTcpKxwdHS0xUWI0JUYvAJGDM0Q3N0gpOis9ThJDWjsiU2Y4O0wvFVZHWVw8QmRGWElKTi/8QAGwEBAAIDAQEAAAAAAAAAAAAAAAECAwQFBgf/xAA8EQACAQICBwUHAgUFAQEBAAAAAQIDEQQhBRIUFTFRUhNBYYGRBiIycaHB0bHwM0JTguEjJDRDcsLxRP/aAAwDAQACEQMRAD8A4yooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAoqy5eZe8BI6Wy0/Xl+5pHtN3nwln8uX7mt/dmK6GY+2hzK3oqx/acvPhLP5cv3NOe0veYyJbMjrw8uR5R0PrpuzFdDI7aHMrSirG9p68+Es/ly/c0e09efCWfy5fuajdmJ6GO2hzK5oqxfafu/hLT5cv3Nee1Bd/CWny5fuabsxPQx28OZXdFWIOaC8+EtPly/c17LzP3YJHSWen68v3NN2YnoY7enzK6oqwvaju/hLT5cv3NHtR3fwlp8uX7mm7cT0Mjt6fMr2irB9qS7+EtPlyfdUe1Ld/CWny5PuqbtxPQxtFPmV9RVge1Nd/CWny5Puq89qe7+EtflyfdU3biehjaKfMgFFT8c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\n", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo(\"itRLRfuL_PQ\")" ] }, { "cell_type": "code", "execution_count": 2, "id": "6635cbac-03b5-43bf-87b1-76f2d86832cb", "metadata": {}, "outputs": [ { "data": { "image/jpeg": "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\n", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "YouTubeVideo(\"9M1oDT_JLJk\")" ] }, { "cell_type": "markdown", "id": "3a6b979f-5e67-4086-9741-4a71469c8155", "metadata": {}, "source": [ "## Making the Computer Follow Clues\n", "\n", "Another challenge is to develop an algorithm for having the computer efficiently converge to a correct answer (the hidden word), not be cheating, but by deducing as much from each feedback string (clue) as any human could.\n", "\n", "The solution offerered in five_land.py may not be the best, but at least it works reliably." ] }, { "cell_type": "code", "execution_count": 3, "id": "69fff7ce-be7a-4428-9f70-2264f472482a", "metadata": {}, "outputs": [], "source": [ "from five_land import wordle" ] }, { "cell_type": "code", "execution_count": 4, "id": "6c8b21bf-3291-4718-a8dd-28148e57658a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5757\n", "covey hayey NNNCC\n", "covey muley NNNCC\n", "covey dopey NCNCC\n", "covey covey CCCCC\n", "That's it!\n" ] } ], "source": [ "wordle()" ] }, { "cell_type": "code", "execution_count": 5, "id": "e5da7418-1d64-456e-a1ac-f52f7aefc6dd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5757\n", "chert wharf NCNCN\n", "chert chord CCNCN\n", "chert chirp CCNCN\n", "chert churn CCNCN\n", "chert chert CCCCC\n", "That's it!\n" ] } ], "source": [ "wordle()" ] }, { "cell_type": "markdown", "id": "b6c89bbe-2741-46ac-9dce-8941860f6746", "metadata": {}, "source": [ "But where did we get a roster of 5-letter words to begin with. And what else might we learn about such a file, in terms of Graph Theory for example. Those are topics for [Research](ADS_research_1.ipynb). Some of that research is echoed below.\n", "\n", "We learned we could get a list of 5-letter words from what's called The Stanford GraphBase." ] }, { "cell_type": "code", "execution_count": 6, "id": "18699e0c-6b1e-4b8b-aefe-428238cc20b8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "200\n", "n\n", "speed\n", "women\n", "metal\n", "south\n", "grass\n", "scale\n", "cells\n", "lower\n", "sleep\n", "wrong\n", "pages\n", "ships\n", "needs\n", "rocks\n", "eight\n", "major\n", "leve\n" ] } ], "source": [ "import requests, random\n", "response = requests.get(\"https://www-cs-faculty.stanford.edu/~knuth/sgb-words.txt\")\n", "print(response.status_code)\n", "# words\n", "print((response.text[1000:1102]))" ] }, { "cell_type": "code", "execution_count": 7, "id": "e497cce9-6a31-4de7-b015-c3db74d03693", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "words = response.text.split(\"\\n\")\n", "\"ships\" in words" ] }, { "cell_type": "code", "execution_count": 8, "id": "d73fcb5f-1fab-4e44-a7de-ffd0918cb401", "metadata": {}, "outputs": [], "source": [ "if \"\" in words:\n", " words.remove(\"\") # a specious spacer i.e. an unwanted blank line" ] }, { "cell_type": "markdown", "id": "fb477ed5-e4d3-4e1b-b381-34a0c81f4c94", "metadata": {}, "source": [ "This number 5757 turns out to be famous, and raised suspicions of the specious spacer above." ] }, { "cell_type": "code", "execution_count": 9, "id": "c6de43c7-f488-44b3-9118-13d946fb7e2a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5757" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(words)" ] }, { "cell_type": "code", "execution_count": 10, "id": "d995cfd4-618c-4c97-94ff-0023fd502218", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "list" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(words)" ] }, { "cell_type": "markdown", "id": "6d235496-2fc7-4cf6-a115-29908248e204", "metadata": {}, "source": [ "Turning the list of 5757 words into a set, a native Python type, gives many benefits for free such as automatic dupe supression. Sets do not contain duplicate elements. Since we wish to \"go fishing\" for \"unique fish\" e.g. words one letter change away from each other, we need a way to not keep including the same words multiple times, as our \"fishing algorithms\" find them over and over." ] }, { "cell_type": "code", "execution_count": 11, "id": "cc38acc8-4fea-409d-91d9-b6fff08acf26", "metadata": {}, "outputs": [], "source": [ "word_set = set(words)" ] }, { "cell_type": "code", "execution_count": 12, "id": "fea9f86f-80fe-476f-bf45-71878fef6f61", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 14 µs, sys: 6 µs, total: 20 µs\n", "Wall time: 42 µs\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time \"ships\" in words" ] }, { "cell_type": "code", "execution_count": 13, "id": "3f1b5032-2095-4698-b749-a3d2cbb24222", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 4 µs, sys: 1e+03 ns, total: 5 µs\n", "Wall time: 9.06 µs\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time \"ships\" in word_set" ] }, { "cell_type": "code", "execution_count": 14, "id": "c259f75e-ce57-4488-a10e-91d7be7a8fb7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-rw-r--r-- 1 mac 34542 Mar 4 18:54 wordkeep.txt\n" ] } ], "source": [ "! ls -o wordkeep.txt" ] }, { "cell_type": "code", "execution_count": 15, "id": "6596d5f9-2419-43a7-856c-100747f4fdee", "metadata": {}, "outputs": [], "source": [ "with open(\"wordkeep.txt\", \"w\") as fileobj:\n", " fileobj.write(response.text)" ] }, { "cell_type": "markdown", "id": "d3887b24-625e-42f9-abb4-ee396aa69037", "metadata": {}, "source": [ "`words` is still a list at this point, as we used `word_set` for the set type version. Below, we go ahead and make `words` the set. However `random.choice` does not work with set arguments. " ] }, { "cell_type": "code", "execution_count": 16, "id": "7b20d793-dd66-41a9-b9c5-85ef4d17a13d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'excel'" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "answer = random.choice(words) # words is not yet a set\n", "answer" ] }, { "cell_type": "code", "execution_count": 17, "id": "4c76f428-c999-47c2-b687-27dd4e7ccb26", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# a cell like this is useful of you are developing and interacting\n", "# with the same module. Unless you force a recompile, you may wind\n", "# up interacting with old source code.\n", "\n", "import wordle\n", "import imp; imp.reload(wordle)" ] }, { "cell_type": "code", "execution_count": 18, "id": "00b7625c-76c4-4243-893f-8b5fc3dc8d20", "metadata": {}, "outputs": [ { "name": "stdin", "output_type": "stream", "text": [ "What is your guess? > CHARM\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "guess : CHARM\n", "clue : PNNNN\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "What is your guess? > WITCH\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "guess : WITCH\n", "clue : NNNPN\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "What is your guess? > ORCRE\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "That's not a real word, sorry.\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "What is your guess? > CLUES\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "guess : CLUES\n", "clue : PPNCN\n" ] }, { "name": "stdin", "output_type": "stream", "text": [ "What is your guess? > EXCEL\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "guess : EXCEL\n", "clue : CCCCC\n", "You win!\n", "See you soon!\n", "\n" ] } ], "source": [ "wordle.words_play(answer, show_answer=False)" ] }, { "cell_type": "code", "execution_count": 19, "id": "fb2abdf7-b668-425e-ac17-1075a5fd6225", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'excel'" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "answer" ] }, { "cell_type": "code", "execution_count": 20, "id": "5cfa3088-6049-4f3d-a2fc-c9850bb59c26", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "which\n", "there\n", "their\n", "about\n", "would\n", "these\n", "other\n", "words\n", "could\n", "write\n", "first\n", "water\n", "after\n", "where\n", "right\n", "think\n", "three\n", "years\n", "place\n", "sound\n", "great\n", "again\n" ] } ], "source": [ "c = 0\n", "for word in words:\n", " print(word)\n", " if c > 20:\n", " break\n", " c += 1" ] }, { "cell_type": "code", "execution_count": 22, "id": "34581db2-dd24-4a16-a165-c327acf47157", "metadata": {}, "outputs": [], "source": [ "from five_land import roll_alpha, fish_pond" ] }, { "cell_type": "code", "execution_count": 23, "id": "fe4fe74c-0899-403b-8b26-51a060664abe", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'bingo', 'dingo', 'jings', 'lingo'}" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = roll_alpha('jingo')\n", "p" ] }, { "cell_type": "code", "execution_count": 24, "id": "96845285-01ac-4d40-869a-7cdca0b1a57e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "list" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(words)" ] }, { "cell_type": "code", "execution_count": 25, "id": "28d95e1f-328e-484d-9c6f-a198a7b7083b", "metadata": {}, "outputs": [], "source": [ "words = set(words)" ] }, { "cell_type": "code", "execution_count": 26, "id": "c1f99492-8465-4d0a-9b75-646f3e665f2a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'bingo', 'dingo', 'jings', 'lingo'}" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p" ] }, { "cell_type": "code", "execution_count": 27, "id": "10ceb0b6-5226-4b0c-bf13-47c12e83c115", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "19 62\n", "62 194\n", "194 545\n", "545 1216\n", "1216 2045\n", "2045 2640\n", "2640 3133\n", "3133 3624\n", "3624 4020\n", "4020 4263\n", "4263 4390\n", "4390 4451\n", "4451 4476\n", "4476 4484\n", "4484 4487\n", "4487 4489\n", "4489 4490\n", "4490 4492\n", "4492 4493\n", "4493 4493\n" ] } ], "source": [ "new_p = fish_pond(p)\n", "while len(new_p) > len(p):\n", " p = new_p\n", " new_p = fish_pond(p)\n", " print(len(p), len(new_p))" ] }, { "cell_type": "code", "execution_count": 28, "id": "cc13ae59-38de-4a5f-8f48-81fe614b49b9", "metadata": {}, "outputs": [], "source": [ "never_reached = words - p" ] }, { "cell_type": "code", "execution_count": 29, "id": "a27a1d29-3313-45f0-8688-447f52b09404", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"yogic\" in never_reached" ] }, { "cell_type": "code", "execution_count": 30, "id": "0aa2e8ad-d9cb-4882-97c3-ac8247052525", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1264" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(never_reached)" ] }, { "cell_type": "code", "execution_count": 31, "id": "8f25951c-8c8d-453c-86cb-66bc2d014a4e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"nuked\" in never_reached" ] }, { "cell_type": "code", "execution_count": 32, "id": "de9ddf0f-ab36-45d1-b7bb-e507f529c238", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"naked\" in never_reached" ] }, { "cell_type": "code", "execution_count": 33, "id": "3be535b8-24b2-463c-9e29-1013fd11ce42", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1264, 4493)" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(never_reached), len(p)" ] }, { "cell_type": "code", "execution_count": 34, "id": "b00db6ef-a5a0-469d-b692-1d08031c62a3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"spasm\" in never_reached" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.12" } }, "nbformat": 4, "nbformat_minor": 5 }