ASPP 2024 material
This commit is contained in:
		
						commit
						1f6bc07c51
					
				
					 90 changed files with 91689 additions and 0 deletions
				
			
		
							
								
								
									
										210
									
								
								exercises/anagrams/.ipynb_checkpoints/anagrams-checkpoint.ipynb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										210
									
								
								exercises/anagrams/.ipynb_checkpoints/anagrams-checkpoint.ipynb
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,210 @@ | |||
| { | ||||
|  "cells": [ | ||||
|   { | ||||
|    "cell_type": "markdown", | ||||
|    "id": "245d99ab", | ||||
|    "metadata": {}, | ||||
|    "source": [ | ||||
|     "# Exercise: Find the anagrams for all words in a list" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "markdown", | ||||
|    "id": "d1e46c4a", | ||||
|    "metadata": {}, | ||||
|    "source": [ | ||||
|     "* You are given an English dictionary containing M words (“the dictionary”), and a separate list of N words (“the input”, saved in the file `words_to_search.txt`)\n", | ||||
|     "* For each word in the input, find all the anagrams in the dictionary (e.g., for input 'acme' the anagrams are `['acme', 'came', 'mace']`)\n", | ||||
|     "\n", | ||||
|     "How to proceed?\n", | ||||
|     "1. Write an algorithm to find all anagrams for one input word first\n", | ||||
|     "2. What is the Big-O class of this algorithm when executed the full N-words input?\n", | ||||
|     "3. Is there a way to pre-process the dictionary to improve the Big-O performance?" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "markdown", | ||||
|    "id": "b9b9cecd", | ||||
|    "metadata": {}, | ||||
|    "source": [ | ||||
|     "# 1. Load the system dictionary and the input words" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": 7, | ||||
|    "id": "24070a26", | ||||
|    "metadata": {}, | ||||
|    "outputs": [], | ||||
|    "source": [ | ||||
|     "# Load the system dictionary\n", | ||||
|     "with open('/usr/share/dict/words', 'r') as f:\n", | ||||
|     "    dict_words = [w.strip() for w in f.readlines()]" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": 8, | ||||
|    "id": "4002fcdd", | ||||
|    "metadata": { | ||||
|     "scrolled": true | ||||
|    }, | ||||
|    "outputs": [ | ||||
|     { | ||||
|      "data": { | ||||
|       "text/plain": [ | ||||
|        "['A',\n", | ||||
|        " 'a',\n", | ||||
|        " 'aa',\n", | ||||
|        " 'aal',\n", | ||||
|        " 'aalii',\n", | ||||
|        " '...',\n", | ||||
|        " 'zythem',\n", | ||||
|        " 'Zythia',\n", | ||||
|        " 'zythum',\n", | ||||
|        " 'Zyzomys',\n", | ||||
|        " 'Zyzzogeton']" | ||||
|       ] | ||||
|      }, | ||||
|      "execution_count": 8, | ||||
|      "metadata": {}, | ||||
|      "output_type": "execute_result" | ||||
|     } | ||||
|    ], | ||||
|    "source": [ | ||||
|     "# Print the start and end of the dictionary\n", | ||||
|     "dict_words[:5] + ['...'] + dict_words[-5:]" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": 13, | ||||
|    "id": "823537ef", | ||||
|    "metadata": {}, | ||||
|    "outputs": [], | ||||
|    "source": [ | ||||
|     "# Load the input words\n", | ||||
|     "with open('words_to_search.txt', 'r') as f:\n", | ||||
|     "    words = [w.strip() for w in f.readlines()]" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": 14, | ||||
|    "id": "4ccec6a3", | ||||
|    "metadata": {}, | ||||
|    "outputs": [ | ||||
|     { | ||||
|      "data": { | ||||
|       "text/plain": [ | ||||
|        "['acer',\n", | ||||
|        " 'acers',\n", | ||||
|        " 'aces',\n", | ||||
|        " 'aches',\n", | ||||
|        " 'acme',\n", | ||||
|        " '...',\n", | ||||
|        " 'yap',\n", | ||||
|        " 'yaw',\n", | ||||
|        " 'yea',\n", | ||||
|        " 'zendo',\n", | ||||
|        " 'zoned']" | ||||
|       ] | ||||
|      }, | ||||
|      "execution_count": 14, | ||||
|      "metadata": {}, | ||||
|      "output_type": "execute_result" | ||||
|     } | ||||
|    ], | ||||
|    "source": [ | ||||
|     "# Print the start and end of the input list\n", | ||||
|     "words[:5] + ['...'] + words[-5:]" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "markdown", | ||||
|    "id": "14d91685", | ||||
|    "metadata": {}, | ||||
|    "source": [ | ||||
|     "# 2. Look for the anagrams of one input word, e.g. \"organ\"\n", | ||||
|     "\n", | ||||
|     "* There are several anagrams, including \"groan\" and \"argon\".\n", | ||||
|     "\n", | ||||
|     "* What is the Big-O performance oh your algorithm? In terms of M, the number of words in the dictionary, and K, the number of letters in a word" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": 15, | ||||
|    "id": "badf44c1", | ||||
|    "metadata": {}, | ||||
|    "outputs": [], | ||||
|    "source": [ | ||||
|     "word = 'organ'" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": null, | ||||
|    "id": "ef938d95", | ||||
|    "metadata": {}, | ||||
|    "outputs": [], | ||||
|    "source": [] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "markdown", | ||||
|    "id": "7cd1196c", | ||||
|    "metadata": {}, | ||||
|    "source": [ | ||||
|     "The performance of this implementation is ... ." | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "markdown", | ||||
|    "id": "115c3219", | ||||
|    "metadata": {}, | ||||
|    "source": [ | ||||
|     "# 3. Look for the anagrams of the words in the input list\n", | ||||
|     "\n", | ||||
|     "* How does the Big-O performance of your one-word implementation scale to an input list of M words?\n", | ||||
|     "* Is there a way to pre-process the dictionary words in a data structure that is better suited for this task?" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": null, | ||||
|    "id": "03ce3e28", | ||||
|    "metadata": {}, | ||||
|    "outputs": [], | ||||
|    "source": [] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": null, | ||||
|    "id": "a2fc5ec4", | ||||
|    "metadata": {}, | ||||
|    "outputs": [], | ||||
|    "source": [] | ||||
|   } | ||||
|  ], | ||||
|  "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.11.3" | ||||
|   } | ||||
|  }, | ||||
|  "nbformat": 4, | ||||
|  "nbformat_minor": 5 | ||||
| } | ||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										210
									
								
								exercises/anagrams/anagrams.ipynb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										210
									
								
								exercises/anagrams/anagrams.ipynb
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,210 @@ | |||
| { | ||||
|  "cells": [ | ||||
|   { | ||||
|    "cell_type": "markdown", | ||||
|    "id": "245d99ab", | ||||
|    "metadata": {}, | ||||
|    "source": [ | ||||
|     "# Exercise: Find the anagrams for all words in a list" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "markdown", | ||||
|    "id": "d1e46c4a", | ||||
|    "metadata": {}, | ||||
|    "source": [ | ||||
|     "* You are given an English dictionary containing M words (“the dictionary”), and a separate list of N words (“the input”, saved in the file `words_to_search.txt`)\n", | ||||
|     "* For each word in the input, find all the anagrams in the dictionary (e.g., for input 'acme' the anagrams are `['acme', 'came', 'mace']`)\n", | ||||
|     "\n", | ||||
|     "How to proceed?\n", | ||||
|     "1. Write an algorithm to find all anagrams for one input word first\n", | ||||
|     "2. What is the Big-O class of this algorithm when executed the full N-words input?\n", | ||||
|     "3. Is there a way to pre-process the dictionary to improve the Big-O performance?" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "markdown", | ||||
|    "id": "b9b9cecd", | ||||
|    "metadata": {}, | ||||
|    "source": [ | ||||
|     "# 1. Load the system dictionary and the input words" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": 7, | ||||
|    "id": "24070a26", | ||||
|    "metadata": {}, | ||||
|    "outputs": [], | ||||
|    "source": [ | ||||
|     "# Load the system dictionary\n", | ||||
|     "with open('/usr/share/dict/words', 'r') as f:\n", | ||||
|     "    dict_words = [w.strip() for w in f.readlines()]" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": 8, | ||||
|    "id": "4002fcdd", | ||||
|    "metadata": { | ||||
|     "scrolled": true | ||||
|    }, | ||||
|    "outputs": [ | ||||
|     { | ||||
|      "data": { | ||||
|       "text/plain": [ | ||||
|        "['A',\n", | ||||
|        " 'a',\n", | ||||
|        " 'aa',\n", | ||||
|        " 'aal',\n", | ||||
|        " 'aalii',\n", | ||||
|        " '...',\n", | ||||
|        " 'zythem',\n", | ||||
|        " 'Zythia',\n", | ||||
|        " 'zythum',\n", | ||||
|        " 'Zyzomys',\n", | ||||
|        " 'Zyzzogeton']" | ||||
|       ] | ||||
|      }, | ||||
|      "execution_count": 8, | ||||
|      "metadata": {}, | ||||
|      "output_type": "execute_result" | ||||
|     } | ||||
|    ], | ||||
|    "source": [ | ||||
|     "# Print the start and end of the dictionary\n", | ||||
|     "dict_words[:5] + ['...'] + dict_words[-5:]" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": 13, | ||||
|    "id": "823537ef", | ||||
|    "metadata": {}, | ||||
|    "outputs": [], | ||||
|    "source": [ | ||||
|     "# Load the input words\n", | ||||
|     "with open('words_to_search.txt', 'r') as f:\n", | ||||
|     "    words = [w.strip() for w in f.readlines()]" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": 14, | ||||
|    "id": "4ccec6a3", | ||||
|    "metadata": {}, | ||||
|    "outputs": [ | ||||
|     { | ||||
|      "data": { | ||||
|       "text/plain": [ | ||||
|        "['acer',\n", | ||||
|        " 'acers',\n", | ||||
|        " 'aces',\n", | ||||
|        " 'aches',\n", | ||||
|        " 'acme',\n", | ||||
|        " '...',\n", | ||||
|        " 'yap',\n", | ||||
|        " 'yaw',\n", | ||||
|        " 'yea',\n", | ||||
|        " 'zendo',\n", | ||||
|        " 'zoned']" | ||||
|       ] | ||||
|      }, | ||||
|      "execution_count": 14, | ||||
|      "metadata": {}, | ||||
|      "output_type": "execute_result" | ||||
|     } | ||||
|    ], | ||||
|    "source": [ | ||||
|     "# Print the start and end of the input list\n", | ||||
|     "words[:5] + ['...'] + words[-5:]" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "markdown", | ||||
|    "id": "14d91685", | ||||
|    "metadata": {}, | ||||
|    "source": [ | ||||
|     "# 2. Look for the anagrams of one input word, e.g. \"organ\"\n", | ||||
|     "\n", | ||||
|     "* There are several anagrams, including \"groan\" and \"argon\".\n", | ||||
|     "\n", | ||||
|     "* What is the Big-O performance oh your algorithm? In terms of M, the number of words in the dictionary, and K, the number of letters in a word" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": 15, | ||||
|    "id": "badf44c1", | ||||
|    "metadata": {}, | ||||
|    "outputs": [], | ||||
|    "source": [ | ||||
|     "word = 'organ'" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": null, | ||||
|    "id": "ef938d95", | ||||
|    "metadata": {}, | ||||
|    "outputs": [], | ||||
|    "source": [] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "markdown", | ||||
|    "id": "7cd1196c", | ||||
|    "metadata": {}, | ||||
|    "source": [ | ||||
|     "The performance of this implementation is ... ." | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "markdown", | ||||
|    "id": "115c3219", | ||||
|    "metadata": {}, | ||||
|    "source": [ | ||||
|     "# 3. Look for the anagrams of the words in the input list\n", | ||||
|     "\n", | ||||
|     "* How does the Big-O performance of your one-word implementation scale to an input list of M words?\n", | ||||
|     "* Is there a way to pre-process the dictionary words in a data structure that is better suited for this task?" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": null, | ||||
|    "id": "03ce3e28", | ||||
|    "metadata": {}, | ||||
|    "outputs": [], | ||||
|    "source": [] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": null, | ||||
|    "id": "a2fc5ec4", | ||||
|    "metadata": {}, | ||||
|    "outputs": [], | ||||
|    "source": [] | ||||
|   } | ||||
|  ], | ||||
|  "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.11.3" | ||||
|   } | ||||
|  }, | ||||
|  "nbformat": 4, | ||||
|  "nbformat_minor": 5 | ||||
| } | ||||
							
								
								
									
										1451
									
								
								exercises/anagrams/anagrams_solution.ipynb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1451
									
								
								exercises/anagrams/anagrams_solution.ipynb
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										1410
									
								
								exercises/anagrams/words_to_search.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1410
									
								
								exercises/anagrams/words_to_search.txt
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue