diff --git a/py/pytudes.py b/py/pytudes.py index 3c4c054..22cfa4f 100644 --- a/py/pytudes.py +++ b/py/pytudes.py @@ -13,22 +13,38 @@ notebooks = { ("Conway's Game of Life", 2017, 'Life.ipynb', 'The cellular automata zero-player game'), ('Generating and Solving Mazes', 2020, 'Maze.ipynb', 'Make a maze by generating a random tree superimposed on a grid and solve it'), ("Mel's Konane Board", 2021, 'Konane.ipynb', 'Solving the game of Konane (Hawaiian checkers).'), -("Selecting Names from a Menu", 2022, 'Menu.ipynb', 'Efficiently Selecting Names from a Menu, by typing characters and arrows'), +("One Letter Off", 2023, 'OneLetterOff.ipynb', "Word game; use of a large language model to generate clues."), ('Photo Focal Lengths', 2020, 'PhotoFocalLengths.ipynb', 'Generate charts of what focal lengths were used on a photo trip'), ('Pickleball Tournament', 2018, 'Pickleball.ipynb', 'Scheduling a doubles tournament fairly and efficiently'), ('Project Euler Utilities', 2017, 'Project%20Euler%20Utils.ipynb', 'My utility functions for the Project Euler problems, including `Primes` and `Factors`'), +("Selecting Names from a Menu", 2022, 'Menu.ipynb', 'Efficiently Selecting Names from a Menu, by typing characters and arrows'), ('Tracking Trump: Electoral Votes', 2020, 'Electoral%20Votes.ipynb', 'How many electoral votes would Trump get if he wins the state where he has positive net approval?')], 'Advent of Code': [ +('Advent of Code 2023', 2023, 'Advent-2023.ipynb', 'Puzzle site with a coding puzzle each day for Advent 2022'), ('Advent of Code 2022', 2022, 'Advent-2022.ipynb', 'Puzzle site with a coding puzzle each day for Advent 2022'), ('Advent of Code 2021', 2021, 'Advent-2021.ipynb', 'Puzzle site with a coding puzzle each day for Advent 2021'), ('Advent of Code 2020', 2020, 'Advent-2020.ipynb', 'Puzzle site with a coding puzzle each day for Advent 2020'), ('Advent of Code 2018', 2018, 'Advent-2018.ipynb', 'Puzzle site with a coding puzzle each day for Advent 2018'), -('Advent of Code 2017', 2017, 'Advent%202017.ipynb', 'Puzzle site with a coding puzzle each day for Advent 2017'), -('Advent of Code 2016', 2016, 'Advent%20of%20Code.ipynb', 'Puzzle site with a coding puzzle each day for Advent 2016'), +('Advent of Code 2017', 2017, 'Advent-2017.ipynb', 'Puzzle site with a coding puzzle each day for Advent 2017'), +('Advent of Code 2016', 2016, 'Advent-2016.ipynb', 'Puzzle site with a coding puzzle each day for Advent 2016'), ('Advent of Code Utilities', 2022, 'AdventUtils.ipynb', 'Utility functions for Advent of Code puzzles')], +'Probability and Uncertainty': [ +("Overtime in American Football", 2024, 'Overtime.ipynb', "In American Football, which team has the advantage in overtime?"), +("Effectiveness of Language Models", 2019, 'Goldberg.ipynb', "A re-implementation in Python 3 of Yoav Goldberg's unreasonably effective character-level n-gram language model."), +('A Concrete Introduction to Probability', 2018, 'Probability.ipynb', 'Code and examples of the basic principles of Probability Theory'), +('Probability, Paradox, and the Reasonable Person Principle', 2016, 'ProbabilityParadox.ipynb', + 'Some classic paradoxes in Probability Theory, and how to think about disagreements'), +('Estimating Probabilities with Simulations', 2020, 'ProbabilitySimulation.ipynb', 'When the sample space is too complex, simulations can estimate probabilities'), +('The Devil and the Coin Flip Game', 2019, 'Coin%20Flip.ipynb', 'How to beat the Devil at his own game'), +('Dice Baseball', 2020, 'Dice%20Baseball.ipynb', 'Simulating baseball games'), +('Economics Simulation', 2018, 'Economics.ipynb', 'A simulation of a simple economic game'), +('Poker Hand Ranking', 2012, "poker.ipynb", 'How do we decide which poker hand wins? Several variants of poker are considered'), +('The Unfinished Game .... of Risk', 2020, "risk.ipynb", "Determining who is likely to win an interminably long game of Risk"), +('WWW: Who Will Win (NBA Title)?', 2019, 'WWW.ipynb', 'Computing the probability of winning the NBA title, for my home town Warriors, or any other team')], + 'Logic and Number Puzzles': [ ('Cryptarithmetic', 2014, 'Cryptarithmetic.ipynb', 'Substitute digits for letters and make NUM + BER = PLAY'), ("Euler's Sum of Powers Conjecture", 2018, "Euler's%20Conjecture.ipynb", @@ -64,20 +80,6 @@ notebooks = { ("World's Shortest Portmantout Word", 2020, 'Portmantout.ipynb', 'Find a word that squishes together a bunch of words'), ('xkcd 1970: Name Dominoes', 2018, 'xkcd-Name-Dominoes.ipynb', 'Lay out dominoes legally; the dominoes have people names, not numbers')], -'Probability and Uncertainty': [ -("Goldberg's Character-level Language Model", 2022, 'Goldberg.ipynb', - "A re-implementation in Python 3 of Yoav Goldberg's unreasonably effective character-level n-gram language model."), -('A Concrete Introduction to Probability', 2018, 'Probability.ipynb', 'Code and examples of the basic principles of Probability Theory'), -('Probability, Paradox, and the Reasonable Person Principle', 2016, 'ProbabilityParadox.ipynb', - 'Some classic paradoxes in Probability Theory, and how to think about disagreements'), -('Estimating Probabilities with Simulations', 2020, 'ProbabilitySimulation.ipynb', 'When the sample space is too complex, simulations can estimate probabilities'), -('The Devil and the Coin Flip Game', 2019, 'Coin%20Flip.ipynb', 'How to beat the Devil at his own game'), -('Dice Baseball', 2020, 'Dice%20Baseball.ipynb', 'Simulating baseball games'), -('Economics Simulation', 2018, 'Economics.ipynb', 'A simulation of a simple economic game'), -('Poker Hand Ranking', 2012, "poker.ipynb", 'How do we decide which poker hand wins? Several variants of poker are considered'), -('The Unfinished Game .... of Risk', 2020, "risk.ipynb", "Determining who is likely to win an interminably long game of Risk"), -('WWW: Who Will Win (NBA Title)?', 2019, 'WWW.ipynb', 'Computing the probability of winning the NBA title, for my home town Warriors, or any other team')], - 'The Riddler (from 538)': [ ('Anigrams: Word Chains', 2022, 'Anigrams.ipynb', 'Finding the longest chain of anagrams that each add one letter'), ('Battle Royale', 2017, 'Riddler%20Battle%20Royale.ipynb', 'A puzzle involving allocating your troops and going up against an opponent'), @@ -138,8 +140,9 @@ def find_recent(notebooks) -> None: recent = next(key for key in notebooks if key.startswith('Recent')) for category in notebooks: for line in notebooks[category]: - if line[1] in {2022, 2023, 2024}: + if line[1] >= 2022: notebooks[recent].append(line) + notebooks[recent].sort(key=lambda line: (-line[1], line[0])) def format_category(category) -> str: """Make a table of multiple jupyter/ipython notebooks, under a header."""