97 lines
15 KiB
Markdown
97 lines
15 KiB
Markdown
# pytudes
|
|
|
|
"An *étude* (a French word meaning *study*) is an instrumental musical composition, usually short, of considerable difficulty, and designed to provide practice material for perfecting a particular musical skill." — [Wikipedia](https://en.wikipedia.org/wiki/%C3%89tude)
|
|
|
|
This project contains **pytudes**—Python programs for perfecting programming skills.
|
|
|
|
Some are in Jupyter (IPython) notebooks, some in `.py` files. You can view the files here (or if Github fails to load a notebook page, as it sometimes does, click the **NB** link to view on [nbviewer](http://nbviewer.jupyter.org/)); or clone the project, or run the notebooks online by clicking this button: [](https://mybinder.org/v2/gh/norvig/pytudes/master)
|
|
|
|
# Index of Jupyter (IPython) Notebooks
|
|
|
|
|
|
|
|
|Programming Examples|
|
|
|---|
|
|
|[Advent of Code 2017](https:/github.com/norvig/pytudes/blob/master/ipynb/Advent%202017.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Advent%202017.ipynb)**<br>*Puzzle site with a coding puzzle each day for Advent 2017.*|
|
|
|[Advent of Code 2016](https:/github.com/norvig/pytudes/blob/master/ipynb/Advent%20of%20Code.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/dvent%20of%20Code.ipynb)**<br>*Puzzle site with a coding puzzle each day for Advent 2016*.|
|
|
|[Project Euler Utilities](https:/github.com/norvig/pytudes/blob/master/ipynb/Project%20Euler%20Utils.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Project%20Euler%20Utils.ipynb)**<br>*My utility functions for the Project Euler problems, including `Primes` and `Factors`.*|
|
|
|[Translating English Sentences into Propositional Logic Statements](https:/github.com/norvig/pytudes/blob/master/ipynb/PropositionalLogic.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/PropositionalLogic.ipynb)**<br>*Automatically converting informal English sentences into formal Propositional Logic.*|
|
|
|[Beal's Conjecture Revisited](https:/github.com/norvig/pytudes/blob/master/ipynb/Beal.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Beal.ipynb)**<br>*A search for counterexamples to Beal's Conjecture*|
|
|
|[WWW: Who Will Win (NBA Title)?](https:/github.com/norvig/pytudes/blob/master/ipynb/WWW.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/WWW.ipynb)**<br>*Computing the probability of winning the NBA title, for my home town Warriors, or any other team.*|
|
|
|[Pickleball Tournament](https:/github.com/norvig/pytudes/blob/master/ipynb/Pickleball.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Pickleball.ipynb)**<br>*Scheduling a doubles tournament fairly and efficiently.*|
|
|
|[Conway's Game of Life](https:/github.com/norvig/pytudes/blob/master/ipynb/Life.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Life.ipynb)**<br>*The cellular automata zero-player game.*|
|
|
|[A Chaos Game with Triangles](https:/github.com/norvig/pytudes/blob/master/ipynb/Sierpinski.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Sierpinski.ipynb)**<br>*A surprising appearance of the Sierpinski triangle in a random walk between vertexes.*|
|
|
|[Generating Mazes](https:/github.com/norvig/pytudes/blob/master/ipynb/Maze.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Maze.ipynb)**<br>*Make a maze by generating a random tree superimposed on a grid.*|
|
|
|[Can't Stop](https:/github.com/norvig/pytudes/blob/master/ipynb/Cant-Stop.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Cant-Stop.ipynb)**<br>*Optimal play in a dice board game.*|
|
|
|[Bike Speed Versus Grade](https:/github.com/norvig/pytudes/blob/master/ipynb/Bike%20Speed%20versus%20Grade.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Bike%20Speed%20versus%20Grade.ipynb)**<br>*How fast can I bike as the route gets steeper?*|
|
|
|[Properly Ordered Card Hands](https:/github.com/norvig/pytudes/blob/master/ipynb/Orderable%20Cards.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Orderable%20Cards.ipynb)**<br>*Can you get your hand of cards into a nice order with just one move?*|
|
|
|
|
|Logic and Number Puzzles|
|
|
|---|
|
|
|[When is Cheryl's Birthday?](https:/github.com/norvig/pytudes/blob/master/ipynb/Cheryl.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Cheryl.ipynb)**<br>*Solving the "Cheryl's Birthday" logic puzzle.*|
|
|
|[When Cheryl Met Eve: A Birthday Story](https:/github.com/norvig/pytudes/blob/master/ipynb/Cheryl-and-Eve.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Cheryl-and-Eve.ipynb)**<br>*Inventing new puzzles in the Style of Cheryl's Birthday.*|
|
|
|[The Devil and the Coin Flip Game](https:/github.com/norvig/pytudes/blob/master/ipynb/Coin%20Flip.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Coin%20Flip.ipynb)**<br>*How to beat the Devil at his own game.*|
|
|
|[The Puzzle of the Misanthropic Neighbors](https:/github.com/norvig/pytudes/blob/master/ipynb/Mean%20Misanthrope%20Density.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Mean%20Misanthrope%20Density.ipynb)**<br>*How crowded will this neighborhood be, if nobody wants to live next door to anyone else?*|
|
|
|[Four 4s, Five 5s, and Countdown to 2016](https:/github.com/norvig/pytudes/blob/master/ipynb/Countdown.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Countdown.ipynb)**<br>*Solving the equation 10 _ 9 _ 8 _ 7 _ 6 _ 5 _ 4 _ 3 _ 2 _ 1 = 2016. From an Alex Bellos puzzle.*|
|
|
|[Sicherman Dice](https:/github.com/norvig/pytudes/blob/master/ipynb/Sicherman%20Dice.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Sicherman%20Dice.ipynb)**<br>*Find a pair of dice that is like a regular pair of dice, only different.*|
|
|
|[Sol Golomb's Rectangle Puzzle](https:/github.com/norvig/pytudes/blob/master/ipynb/Golomb-Puzzle.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Golomb-Puzzle.ipynb)**<br>*A Puzzle involving placing rectangles of different sizes inside a square. Bonus: cryptarithmetic.*|
|
|
|[The Riddler: Battle Royale](https:/github.com/norvig/pytudes/blob/master/ipynb/Riddler%20Battle%20Royale.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Riddler%20Battle%20Royale.ipynb)**<br>*A puzzle involving allocating your troops and going up against an opponent.*|
|
|
|
|
|Word Games|
|
|
|---|
|
|
|[xkcd 1970: Name Dominoes](https:/github.com/norvig/pytudes/blob/master/ipynb/xkcd-Name-Dominoes.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/xkcd-Name-Dominoes.ipynb)**<br>*Lay out dominoes legally; the dominoes have people names, not numbers.*|
|
|
|[Ghost](https:/github.com/norvig/pytudes/blob/master/ipynb/Ghost.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Ghost.ipynb)**<br>*The word game Ghost (add letters, try to avoid making a word).*|
|
|
|[World's Longest Palindrome](https:/github.com/norvig/pytudes/blob/master/ipynb/pal3.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/pal3.ipynb)**<br>*Searching for a long Panama-style palindrome, this time letter-by-letter.*|
|
|
|[Refactoring a Crossword Game Program](https:/github.com/norvig/pytudes/blob/master/ipynb/Scrabble.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Scrabble.ipynb)**<br>*Refactoring the Scrabble / Word with Friends game from Udacity 212.*|
|
|
|[xkcd 1313: Regex Golf](https:/github.com/norvig/pytudes/blob/master/ipynb/xkcd1313.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/xkcd1313.ipynb)**<br>*Find the smallest regular expression; inspired by Randall Monroe.*|
|
|
|[xkcd 1313: Regex Golf (Part 2: Infinite Problems)](https:/github.com/norvig/pytudes/blob/master/ipynb/xkcd1313-part2.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/xkcd1313-part2.ipynb)**<br>*Regex Golf: better, faster, funner. With Stefan Pochmann.*|
|
|
|[Let's Code About Bike Locks](https:/github.com/norvig/pytudes/blob/master/ipynb/Fred%20Buns.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Fred%20Buns.ipynb)**<br>*A tale of a bicycle combination lock that uses letters instead of digits. Inspired by Bike Snob NYC.*|
|
|
|[Gesture Typing](https:/github.com/norvig/pytudes/blob/master/ipynb/Gesture%20Typing.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Gesture%20Typing.ipynb)**<br>*What word has the longest path on a gesture-typing smartphone keyboard?*|
|
|
|[How to Do Things with Words, or Statistical Natural Language Processing in Python](https:/github.com/norvig/pytudes/blob/master/ipynb/How%20to%20Do%20Things%20with%20Words.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/How%20to%20Do%20Things%20with%20Words.ipynb)**<br>*Spelling Correction, Secret Codes, Word Segmentation, and more: grab your bag of words.*|
|
|
|
|
|Math Concepts|
|
|
|---|
|
|
|[A Concrete Introduction to Probability](https:/github.com/norvig/pytudes/blob/master/ipynb/Probability.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Probability.ipynb)**<br>*Code and examples of the basic principles of Probability Theory.*|
|
|
|[Probability, Paradox, and the Reasonable Person Principle](https:/github.com/norvig/pytudes/blob/master/ipynb/ProbabilityParadox.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/ProbabilityParadox.ipynb)**<br>*Some classic paradoxes in Probability Theory, and how to think about disagreements.*|
|
|
|[Symbolic Algebra, Simplification, and Differentiation](https:/github.com/norvig/pytudes/blob/master/ipynb/Differentiation.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Differentiation.ipynb)**<br>*A computer algebra system that manipulates expressions, including symbolic differentiation.*|
|
|
|[Economics Simulation](https:/github.com/norvig/pytudes/blob/master/ipynb/Economics.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Economics.ipynb)**<br>*A simulation of a simple economic game.*|
|
|
|[How to Count Things](https:/github.com/norvig/pytudes/blob/master/ipynb/How%20To%20Count%20Things.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/How%20To%20Count%20Things.ipynb)**<br>*Combinatorial math: how to count how many things there are, when there are a lot of them.*|
|
|
|[Euler's Sum of Powers Conjecture](https:/github.com/norvig/pytudes/blob/master/ipynb/Euler's%20Conjecture.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Euler's%20Conjecture.ipynb)**<br>*Solving a 200-year-old puzzle by finding integers that satisfy a<sup>5</sup> + b<sup>5</sup> + c<sup>5</sup> + d<sup>5</sup> = e<sup>5</sup>.*|
|
|
|
|
|Computer Science Algorithms and Concepts|
|
|
|---|
|
|
|[BASIC Interpreter](https:/github.com/norvig/pytudes/blob/master/ipynb/BASIC.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/BASIC.ipynb)**<br>*How to write an interpreter for the BASIC programming language.*|
|
|
|[Bad Grade, Good Experience](https:/github.com/norvig/pytudes/blob/master/ipynb/Snobol.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Snobol.ipynb)**<br>*As a student, did you ever get a bad grade on a programming assignment? (Snobol, Concordance)*|
|
|
|[The Convex Hull Problem](https:/github.com/norvig/pytudes/blob/master/ipynb/Convex%20Hull.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Convex%20Hull.ipynb)**<br>*A classic Computer Science Algorithm.*|
|
|
|[The Traveling Salesperson Problem](https:/github.com/norvig/pytudes/blob/master/ipynb/TSP.ipynb) **[NB]( http:/nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/TSP.ipynb)**<br>*Another of the classics.*|
|
|
|
|
# Index of Python Files
|
|
|
|
| **File** | **Description** | **Documentation**|
|
|
|:--------|:-------------------|----|
|
|
|[SET.py](https://github.com/norvig/pytudes/blob/master/py/SET.py)|Analyze the card game [SET](http://www.setgame.com/set).|[SET.html](http://norvig.com/SET.html)|
|
|
|[beal.py](https://github.com/norvig/pytudes/blob/master/py/beal.py)|Search for counterexamples to Beal's Conjecture|[beal.html](http://norvig.com/beal.html)
|
|
|[docex.py](https://github.com/norvig/pytudes/blob/master/py/docex.py)|A framework for running unit tests, similar to `doctest`.|
|
|
|[ibol.py](https://github.com/norvig/pytudes/blob/master/py/ibol.py)|An Exercise in Species Barcoding|[ibol.html](http://norvig.com/ibol.html)
|
|
|[lettercount.py](https://github.com/norvig/pytudes/blob/master/py/lettercount.py)|Convert Google Ngram Counts to Letter Counts|[mayzner.html](http://norvig.com/mayzner.html)
|
|
|[lis.py](https://github.com/norvig/pytudes/blob/master/py/lis.py)|Lisp Interpreter written in Python|[lispy.html](http://norvig.com/lispy.html)
|
|
|[lispy.py](https://github.com/norvig/pytudes/blob/master/py/lispy.py)|Even Better Lisp Interpreter written in Python|[lispy2.html](http://norvig.com/lispy2.html)
|
|
|[lispytest.py](https://github.com/norvig/pytudes/blob/master/py/lispytest.py)|Tests for Lisp Interpreters|
|
|
|[pal.py](https://github.com/norvig/pytudes/blob/master/py/pal.py)|Find long palindromes|[palindrome.html](http://norvig.com/palindrome.html)
|
|
|[pal2.py](https://github.com/norvig/pytudes/blob/master/py/pal2.py)|Find longer palindromes|[palindrome.html](http://norvig.com/palindrome.html)
|
|
|[pal3.py](https://github.com/norvig/pytudes/blob/master/py/pal3.py)|Find even longer palindromes|[palindrome.html](http://norvig.com/palindrome.html)
|
|
|[py2html.py](https://github.com/norvig/pytudes/blob/master/py/py2html.py)|Pretty-printer to format Python files as html|
|
|
|[spell.py](https://github.com/norvig/pytudes/blob/master/py/spell.py)|Spelling corrector|[spell-correct.html](http://norvig.com/spell-correct.html)
|
|
|[sudoku.py](https://github.com/norvig/pytudes/blob/master/py/sudoku.py)|Program to solve sudoku puzzles|[sudoku.html](http://norvig.com/sudoku.html)
|
|
|[testaccum.py](https://github.com/norvig/pytudes/blob/master/py/testaccum.py)|Tests for my failed Python `accumulation display` proposal|[pyacc.html](http://norvig.com/pyacc.html)
|
|
|[yaptu.py](https://github.com/norvig/pytudes/blob/master/py/yaptu.py)|Yet Another Python Templating Utility|
|
|
|
|
# Etudes for Programmers
|
|
|
|
I got the idea for the "etudes" part of the name from
|
|
this [1978 book](https://books.google.com/books/about/Etudes_for_programmers.html?id=u89WAAAAMAAJ)
|
|
by [Charles Wetherell](http://demin.ws/blog/english/2012/08/25/interview-with-charles-wetherell/)
|
|
that was very influential to me when I was first learning to program.
|
|
|
|

|