diff --git a/README.md b/README.md index 8970458..1f5625e 100644 --- a/README.md +++ b/README.md @@ -8,43 +8,59 @@ Some are in Jupyter (IPython) notebooks, some in `.py` files. You can view the f # Index of Jupyter (IPython) Notebooks -|Logic and Number Puzzles| +|Programming Examples| |---| |[Advent of Code 2017](https://github.com/norvig/pytudes/blob/master/ipynb/Advent%202017.ipynb)
*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)
*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)
*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)
*Automatically converting informal English sentences into formal Propositional Logic.*| -|[The Puzzle of the Misanthropic Neighbors](https://github.com/norvig/pytudes/blob/master/ipynb/Mean%20Misanthrope%20Density.ipynb)
*How crowded will this neighborhood be, if nobody wants to live next door to anyone else?*| -|[Countdown to 2016](https://github.com/norvig/pytudes/blob/master/ipynb/Countdown.ipynb)
*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)
*Find a pair of dice that is like a regular pair of dice, only different.*| |[Beal's Conjecture Revisited](https://github.com/norvig/pytudes/blob/master/ipynb/Beal.ipynb)
*A search for counterexamples to Beal's Conjecture*| +|[WWW: Who WIll Win (NBA Title)?](https://github.com/norvig/pytudes/blob/master/ipynb/WWW.ipynb)
*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)
*Scheduling a doubles tournament fairly and efficiently.*| +|[Conway's Game of Life](https://github.com/norvig/pytudes/blob/master/ipynb/Life.ipynb)
*The cellular automata zero-player game.*| +|[A Chaos Game with Triangles](https://github.com/norvig/pytudes/blob/master/ipynb/Sierpinski.ipynb)
*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)
*Make a maze by generating a random tree superimposed on a grid.*| + + +|Logic and Number Puzzles| +|---| |[When is Cheryl's Birthday?](https://github.com/norvig/pytudes/blob/master/ipynb/Cheryl.ipynb)
*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)
*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)
*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)
*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)
*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)
*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)
*A Puzzle involving placing rectangles of different sizes inside a square. Bonus: cryptarithmetic.*| -|[WWW: Will Warriors Win?](https://github.com/norvig/pytudes/blob/master/ipynb/WWW.ipynb)
*Golden State Warriors probability of winning the 2016 NBA title.*| +|[The Riddler: Battle Royale](https://github.com/norvig/pytudes/blob/master/ipynb/Riddler%20Battle%20Royale.ipynb)
*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)
*Lay out dominoes legally; the dominoes have people names, not numbers.*| |[Ghost](https://github.com/norvig/pytudes/blob/master/ipynb/Ghost.ipynb)
*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)
*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)
*Refactoring the Scrabble / Word with Friends game from Udacity 212.*| |[xkcd 1313: Regex Golf](https://github.com/norvig/pytudes/blob/master/ipynb/xkcd1313.ipynb)
*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)
*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)
*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)
*What word has the longest path on a gesture-typing smartphone keyboard? Inspired by Nicolas Schank and Shumin Zhai.*| +|[Gesture Typing](https://github.com/norvig/pytudes/blob/master/ipynb/Gesture%20Typing.ipynb)
*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)
*Spelling Correction, Secret Codes, Word Segmentation, and more: grab your bag of words.*| -|Computer Science Algorithms, Concepts, and Problems| +|Math Concepts| |---| -|[A Chaos Game with Triangles](https://github.com/norvig/pytudes/blob/master/ipynb/Sierpinski.ipynb)
*A surprising appearance of the Sierpinski triangle in a random walk between vertexes.*| -|[BASIC Interpreter](https://github.com/norvig/pytudes/blob/master/ipynb/BASIC.ipynb)
*How to write an interpreter for the BASIC programming language.*| -|[Bad Grade, Good Experience](https://github.com/norvig/pytudes/blob/master/ipynb/Snobol.ipynb)
*As a student, did you ever get a bad grade on a programming assignment? (Snobol, Concordance)*| -|[Conway's Game of Life](https://github.com/norvig/pytudes/blob/master/ipynb/Life.ipynb)
*The cellular automata zero-player game.*| |[A Concrete Introduction to Probability](https://github.com/norvig/pytudes/blob/master/ipynb/Probability.ipynb)
*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)
*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)
*A computer algebra system that manipulates expressions, including symbolic differentiation.*| +|[Economics Simulation](https://github.com/norvig/pytudes/blob/master/ipynb/Economics.ipynb)
*A simulation of a simple economic game.*| +|[How to Count Things](https://github.com/norvig/pytudes/blob/master/ipynb/How%20To%20Count%20Things.ipynb)
*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)
*Solving a 200-year-old puzzle by finding integers that satisfy a5 + b5 + c5 + d5 = e5.*| + +|Computer Science Algorithms and Concepts| +|---| +|[BASIC Interpreter](https://github.com/norvig/pytudes/blob/master/ipynb/BASIC.ipynb)
*How to write an interpreter for the BASIC programming language.*| +|[Bad Grade, Good Experience](https://github.com/norvig/pytudes/blob/master/ipynb/Snobol.ipynb)
*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)
*A classic Computer Science Algorithm.*| |[The Traveling Salesperson Problem](https://github.com/norvig/pytudes/blob/master/ipynb/TSP.ipynb)
*Another of the classics.*| -|[Economics Simulation](https://github.com/norvig/pytudes/blob/master/ipynb/Economics.ipynb)
*A simulation of a simple economic game.*| -|[Project Euler Utilities](https://github.com/norvig/pytudes/blob/master/ipynb/Project%20Euler%20Utils.ipynb)
*My utility functions for the Project Euler problems, including `Primes` and `Factors`.*| + # Index of Python Files @@ -69,7 +85,9 @@ Some are in Jupyter (IPython) notebooks, some in `.py` files. You can view the f # Etudes for Programmers -I got the idea for the "etudes" part of the name from this [1978 book by Charles Wetherell](https://books.google.com/books/about/Etudes_for_programmers.html?id=u89WAAAAMAAJ) +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. ![](https://images-na.ssl-images-amazon.com/images/I/51ZnZH29dvL._SX394_BO1,204,203,200_.jpg) diff --git a/data/latlong.htm b/data/latlong.htm new file mode 100644 index 0000000..be1bbc2 --- /dev/null +++ b/data/latlong.htm @@ -0,0 +1,1475 @@ + + +Latitude-Longitude of US Cities (www.realestate3d.com) + +

Latitude-Longitude of US Cities (www.realestate3d.com)

+
+ +Notes: + + +
+

United States

+ + + + +
+
+ID     LAT    LON     Location
+
+Alabama
+
+
+[ANB]  33.58   85.85  Anniston,AL
+[AUO]  32.67   85.44  Auburn,AL
+[BHM]  33.57   86.75  Birmingham,AL
+[CKL]  32.90   87.25  Centreville,AL
+[DHN]  31.32   85.45  Dothan,AL
+[OZR]  31.28   85.72  Fort Rucker,AL
+[GAD]  33.97   86.09  Gadsden,AL
+[HSV]  34.65   86.77  Huntsville,AL
+[MXF]  32.38   86.37  Maxwell AFB,AL
+[MOB]  30.68   88.25  Mobile,AL
+[BFM]  30.63   88.07  Mobile Aeros,AL
+[MGM]  32.30   86.40  Montgomery,AL
+[MSL]  34.75   87.62  Muscle Shoal,AL
+[SEM]  32.34   86.99  Selma,AL
+[TOI]  31.87   86.02  Troy,AL
+[TCL]  33.23   87.62  Tuscaloosa,AL
+
+Alaska
+
+
+[ADK]  51.88  176.65  Adak,AK
+[Z60]  67.10  157.85  Ambler,AK
+[ANC]  61.17  150.02  Anchorage,AK
+[MRI]  61.22  149.85  Anchorage,AK
+[AGN]  57.83  134.97  Angoon,AK
+[ANI]  61.58  159.53  Aniak,AK
+[ANN]  55.03  131.57  Annette Isl,AK
+[ATU]  53.50  173.30  Attu,AK
+[BRW]  71.30  156.78  Barrow,AK
+[BTI]  70.13  143.63  Barter Islan,AK
+[BET]  60.78  161.80  Bethel Arpt,AK
+[BTT]  66.92  151.52  Bettles,AK
+[BIG]  64.00  145.73  Big Delta,AK
+[5BI]  60.82  152.30  Big River Lk,AK
+[Z68]  63.38  148.95  Cantwell,AK
+[CDE]  56.00  134.22  Cape Decis,AK
+[5HN]  60.38  147.08  Cape Hinchi,AK
+[CSP]  58.33  137.05  Cape Spence,AK
+[5CE]  60.33  145.00  Cape St Eli,AK
+[WCR]  67.50  148.48  Chandalar Lk,AK
+[Z00]  62.88  149.83  Chulitna,AK
+[CRC]  65.83  144.07  Circle City,AK
+[CDB]  55.20  162.72  Cold Bay,AK
+[CDV]  60.50  145.50  Cordova,AK
+[CGA]  55.80  133.25  Craig,AK
+[SCC]  70.20  148.47  Deadhorse,AK
+[DLG]  59.05  158.52  Dillingham,AK
+[5SZ]  62.73  143.92  Duffys Tavern,AK
+[DUT]  53.88  166.53  Dutch Harbor,AK
+[EAA]  64.77  141.15  Eagle Arpt,AK
+[ERO]  59.62  135.37  Eldred Rock,AK
+[ELV]  58.20  136.35  Elfin Cove,AK
+[FAI]  64.82  147.87  Fairbanks,AK
+[FWL]  62.85  154.47  Farewell,AK
+[FIV]  57.45  134.03  Five Finger,AK
+[FVM]  65.93  149.83  Five Mile,AK
+[FYU]  66.57  145.27  Fort Yukon,AK
+[FNR]  58.25  134.90  Funter Bay,AK
+[GBH]  68.48  149.48  Galbraith Lk,AK
+[GAM]  63.77  171.73  Gambell,AK
+[GKN]  62.15  145.45  Gulkana Arpt,AK
+[GST]  58.42  135.73  Gustavus,AK
+[Z26]  59.23  135.43  Haines Hrbor,AK
+[5HR]  61.98  152.08  Hayes River,AK
+[5EA]  63.83  149.00  Healy River,AK
+[HOM]  59.63  151.50  Homer,AK
+[Z49]  58.10  135.45  Hoonah Seapl,AK
+[ILI]  59.75  154.92  Iliamna Arpt,AK
+[JNU]  58.37  134.58  Juneau,AK
+[KAE]  56.97  133.95  Kake Seaplan,AK
+[ENA]  60.57  151.25  Kenai,AK
+[KTN]  55.35  131.70  Ketchikan,AK
+[AKN]  58.68  156.65  King Salmon,AK
+[ADQ]  57.75  152.50  Kodiak,AK
+[OTZ]  66.87  162.63  Kotzebue,AK
+[5WO]  61.63  149.03  Lazy Mtn,AK
+[LNI]  70.92  153.23  Lonely (dew),AK
+[MLY]  65.00  150.65  Manley Ht Sp,AK
+[MXY]  61.43  142.92  Mccarthy,AK
+[MCG]  62.97  155.62  Mcgrath,AK
+[MYU]  60.37  166.27  Mekoryuk,AK
+[MDO]  59.43  146.33  Middleton Is,AK
+[MHM]  63.90  152.27  Minchumina,AK
+[ENN]  64.55  149.08  Nenana,AK
+[KSM]  62.07  163.30  New Andreafs,AK
+[IKO]  53.58  169.42  Nikolski,AK
+[OME]  64.50  165.43  Nome,AK
+[ORT]  62.97  141.93  Northway,AK
+[OLI]  70.50  149.88  Oliktok Dew,AK
+[PAQ]  61.60  149.08  Palmer,AK
+[5PX]  63.03  145.50  Paxson,AK
+[PSG]  56.82  132.97  Petersburg,AK
+[PIZ]  69.82  162.92  Point Lay,AK
+[Z76]  56.25  134.65  Port Alexndr,AK
+[KPC]  65.25  166.87  Port Clarnce,AK
+[PTH]  56.95  158.62  Port Heiden,AK
+[PPC]  66.82  150.65  Prospect Crk,AK
+[PUO]  70.25  148.33  Prudhoe Bay,AK
+[Z30]  60.20  154.30  Pt Alsworth,AK
+[PTI]  62.17  153.25  Puntilla,AK
+[SDP]  55.33  160.50  Sand Point,AK
+[5WD]  60.18  149.75  Seward,AK
+[SYA]  53.20  174.13  Shemy,AK
+[SHH]  66.27  166.03  Shishmaref,AK
+[SIT]  57.07  135.35  Sitka,AK
+[SKJ]  56.88  154.20  Sitkinak,AK
+[SGY]  59.75  135.53  Skagway,AK
+[SKW]  61.97  151.20  Skwentna,AK
+[5SO]  62.03  146.67  Snowshoe Lk,AK
+[SNP]  57.15  170.22  St Paul Is,AK
+[5GN]  61.90  147.30  Tahneta Pass,AK
+[TKA]  62.30  150.10  Talkeetna,AK
+[TAL]  65.17  152.10  Tanana,AK
+[UMT]  69.37  152.13  Umiat,AK
+[UNK]  63.88  160.80  Unalakleet,AK
+[VWS]  61.13  146.35  Valdez,AK
+[VDZ]  61.13  146.25  Valdez 2,AK
+[AIN]  70.62  159.85  Wainwright,AK
+[WAA]  66.03  168.08  Wales,AK
+[5WT]  60.78  148.72  Whittier,AK
+[Z22]  61.75  150.05  Willow Arpt,AK
+[WRG]  56.48  132.37  Wrangell,AK
+[YAK]  59.52  139.67  Yakutat,AK
+
+Arizona
+
+
+[DMA]  32.17  110.88  Davis-M AFB,AZ
+[DVT]  33.68  112.08  Deer Valley,AZ
+[DUG]  31.45  109.60  Douglas,AZ
+[FFZ]  33.47  111.73  Falcon Fld,AZ
+[FLG]  35.13  111.67  Flagstaff,AZ
+[FHU]  31.60  110.35  Fort Huachuc,AZ
+[GBN]  33.55  113.17  Gila Bend,AZ
+[GYR]  33.42  112.38  Goodyear,AZ
+[GCN]  35.95  112.15  Grand Canyon,AZ
+[IGM]  35.27  113.95  Kingman,AZ
+[LUF]  33.53  112.38  Luke,AZ
+[PGA]  36.93  111.45  Page,AZ
+[0E4]  34.23  111.33  Payson,AZ
+[PHX]  33.43  112.02  Phoenix,AZ
+[PRC]  34.65  112.43  Prescott,AZ
+[E74]  32.82  109.68  Safford Awrs,AZ
+[SDL]  33.62  111.92  Scottsdale,AZ
+[E03]  34.27  110.00  Show Low,AZ
+[SOW]  34.27  110.00  Show Low,AZ
+[TUS]  32.12  110.93  Tucson,AZ
+[CHD]  33.30  111.67  Williams AFB,AZ
+[INW]  35.02  110.73  Winslow,AZ
+[YUM]  33.10  115.00  Yuma,AZ
+[NYL]  32.65  114.62  Yuma Mcas,AZ
+[1Y7]  32.85  114.40  Yuma Prv Gd,AZ
+
+Arkansas
+
+
+[BYH]  35.97   89.95  Blytheville,AR
+[CDH]  33.52   92.40  Camden,AR
+[ELD]  33.22   92.80  El Dorado,AR
+[FYV]  36.00   94.17  Fayetteville,AR
+[FSM]  35.33   94.37  Ft Smith,AR
+[HRO]  36.27   93.15  Harrison,AR
+[HOT]  34.48   93.10  Hot Springs,AR
+[JBR]  35.83   90.65  Jonesboro,AR
+[LIT]  35.22   92.38  Little Rock,AR
+[LRF]  34.92   92.15  Little Rock,AR
+[LZK]  34.83   92.25  Little Rock,AR
+[PBF]  34.17   91.93  Pine Bluff,AR
+[ASG]  36.18   94.13  Springdale,AR
+[TXK]  33.45   94.00  Texarkana,AR
+[ARG]  36.13   90.93  Walnut Ridge,AR
+
+California
+
+[NGZ]  37.78  122.32  Alameda NAS,CA
+[S11]  41.48  120.53  Alturas,CA
+[ACV]  40.98  124.10  Arcata,CA
+[BFL]  35.43  119.05  Bakersfield,CA
+[BAB]  39.13  121.45  Beale AFB,CA
+[BUO]  33.93  116.95  Beaumont,CA
+[BYS]  35.28  116.62  Bicycle Lk,CA
+[L35]  34.27  116.68  Big Bear Apt,CA
+[BIH]  37.60  118.60  Bishop,CA
+[BLU]  39.28  120.70  Blue Canyon,CA
+[BLH]  33.62  114.72  Blythe,CA
+[BUR]  34.20  118.37  Burbank,CA
+[NFG]  33.30  117.35  Camp Pendlet,CA
+[CZZ]  32.62  116.47  Campo,CA
+[CRQ]  33.13  117.28  Carlsbad,CA
+[MER]  37.38  120.57  Castle AFB,CA
+[CIC]  39.78  121.85  Chico,CA
+[NID]  35.68  117.68  China Lake,CA
+[CNO]  33.97  117.63  Chino,CA
+[CCR]  37.98  122.05  Concord,CA
+[CEC]  41.78  124.23  Crescent Cty,CA
+[DAG]  34.87  116.78  Daggett,CA
+[EDW]  34.90  117.88  Edwards AFB,CA
+[NJK]  32.82  115.68  El Centro,CA
+[EMT]  34.08  118.03  El Monte,CA
+[NZJ]  33.67  117.73  El Toro,CA
+[EKA]  41.33  124.28  Eureka,CA
+[HGT]  36.00  121.32  Fort Hunter,CA
+[OAR]  36.68  121.77  Fort Ord,CA
+[FAT]  36.77  119.72  Fresno,CA
+[FUL]  33.87  117.97  Fullerton,CA
+[VCV]  34.58  117.38  George AFB,CA
+[HHR]  33.92  118.33  Hawthorne,CA
+[HWD]  37.65  122.12  Hayward,CA
+[IPL]  32.83  115.57  Imperial,CA
+[NRS]  32.57  117.12  Imperial Bch,CA
+[POC]  34.10  117.78  La Verne,CA
+[TVL]  38.90  120.00  Lake Tahoe,CA
+[WJF]  34.73  118.22  Lancaster,CA
+[NLC]  36.33  119.95  Lemoore NAS,CA
+[LVK]  37.70  121.82  Livermore,CA
+[LGB]  33.82  118.15  Long Beach,CA
+[SLI]  33.78  118.05  Los Alamitos,CA
+[LAX]  33.93  118.40  Los Angeles,CA
+[MMH]  37.63  118.92  Mammoth Lks,CA
+[RIV]  33.88  117.27  March AFB,CA
+[MYV]  39.10  121.57  Marysville,CA
+[MHR]  38.57  121.30  Mather AFB,CA
+[MCC]  38.67  121.40  Mcclellan,CA
+[MCE]  37.28  120.52  Merced,CA
+[NKX]  32.87  117.15  Miramar NAS,CA
+[MOD]  37.63  120.95  Modesto,CA
+[NUQ]  37.42  122.05  Moffet NAS,CA
+[MHV]  35.05  118.15  Mojave,CA
+[1O5]  41.73  122.53  Montague,CA
+[MRY]  36.58  121.85  Monterey,CA
+[MHS]  41.32  122.32  Mount Shasta,CA
+[MWS]  34.23  118.07  Mount Wilson,CA
+[APC]  38.22  122.28  Napa,CA
+[EED]  34.77  114.62  Needles,CA
+[NZY]  32.70  117.20  North Is,CA
+[SBD]  34.10  117.23  Norton AFB,CA
+[OAK]  37.73  122.22  Oakland,CA
+[ONT]  34.05  117.62  Ontario Intl,CA
+[OXR]  34.20  119.20  Oxnard,CA
+[PSP]  33.83  116.50  Palm Springs,CA
+[PMD]  35.05  118.13  Palmdale,CA
+[PAO]  37.47  122.12  Palo Alto,CA
+[PRB]  35.67  120.63  Paso Robles,CA
+[53Q]  37.83  122.83  Pillaro Pt,CA
+[NTD]  34.12  119.12  Point Mugu,CA
+[PAA]  39.58  124.22  Pt Arena,CA
+[PGU]  34.95  121.12  Pt Arguello,CA
+[87Q]  35.67  121.28  Pt Piedras,CA
+[PPD]  36.12  121.47  Pt Piedras,CA
+[RBL]  40.15  122.25  Red Bluff,CA
+[RDD]  40.50  122.30  Redding,CA
+[RAL]  33.95  117.45  Riverside,CA
+[SAC]  38.52  121.50  Sacramento,CA
+[SMF]  38.70  121.60  Sacramento,CA
+[SNS]  36.67  121.60  Salinas,CA
+[SQL]  37.52  122.25  San Carlos,CA
+[L10]  33.42  117.62  San Clemente,CA
+[NUC]  33.02  118.58  San Clemente,CA
+[MYF]  32.82  117.13  San Diego,CA
+[SAN]  32.73  117.17  San Diego,CA
+[SDM]  32.57  116.98  San Diego,CA
+[SDM]  32.57  116.98  San Diego,CA
+[SEE]  32.82  116.97  San Diego,CA
+[51Q]  37.75  122.68  San Francisco,CA
+[SFO]  37.62  122.38  San Francisco,CA
+[SJC]  37.37  121.92  San Jose,CA
+[RHV]  37.33  121.82  San Jose/Rei,CA
+[SBP]  35.23  120.65  San Luis Obi,CA
+[L98]  33.38  117.58  San Mateo,CA
+[N5G]  34.03  120.40  San Miguel,CA
+[NSI]  33.25  119.45  San Nic Isl,CA
+[SDB]  34.75  118.73  Sandburg,CA
+[SNA]  33.67  117.88  Santa Ana,CA
+[SBA]  34.43  119.83  Santa Barb,CA
+[SMX]  34.90  120.45  Santa Maria,CA
+[SMO]  34.02  118.45  Santa Monica,CA
+[STS]  38.52  122.82  Santa Rosa,CA
+[O87]  40.03  124.07  Shelter Cove,CA
+[SIY]  41.78  122.47  Siskiyou,CA
+[SCK]  37.90  121.25  Stockton,CA
+[4SU]  35.33  117.10  Superior Val,CA
+[SVE]  40.63  120.95  Susanville,CA
+[TRM]  33.63  116.17  Thermal,CA
+[TOA]  33.80  118.33  Torrance,CA
+[SUU]  38.27  121.93  Travis AFB,CA
+[TRK]  39.32  120.13  Truckee-Tahoe,CA
+[NTK]  33.70  117.83  Tustin Mcas,CA
+[NXP]  34.28  116.15  Twenty9 Palm,CA
+[UKI]  39.13  123.20  Ukiah,CA
+[VNY]  34.22  118.48  Van Nuys,CA
+[VBG]  35.20  120.95  Vandenberg,CA
+[VBG]  35.20  120.95  Vandenberg,CA
+[VIS]  36.32  119.40  Visalia,CA
+
+Colorado
+
+[AFF]  39.52  105.35  Air Force A,CO
+[AKO]  40.17  103.22  Akron,CO
+[ALS]  37.45  105.87  Alamosa,CO
+[ASE]  39.22  106.87  Aspen,CO
+[BJC]  39.90  105.12  Brmfield/Jef,CO
+[BKF]  39.72  104.75  Buckley,CO
+[COS]  38.82  104.72  Colo Sprgs,CO
+[CEZ]  37.30  108.63  Cortez,CO
+[CAG]  40.50  107.53  Craig-Moffat,CO
+[DEN]  39.75  104.87  Denver,CO
+[DRO]  37.15  107.75  Durango,CO
+[EGE]  39.65  106.92  Eagle,CO
+[APA]  39.57  104.83  Englewood,CO
+[FCS]  38.68  104.77  Fort Carson,CO
+[FSR]  39.57  105.50  Fraser,CO
+[FNL]  40.45  105.02  Ft Col/Lovel,CO
+[FCL]  40.58  105.08  Ft Collins,CO
+[GJT]  39.12  108.53  Grand Jct,CO
+[GXY]  40.43  104.63  Greeley-Wld,CO
+[2V9]  38.55  106.93  Gunnison,CO
+[GUC]  38.55  106.92  Gunnison,CO
+[LHX]  38.05  103.52  La Junta,CO
+[4LJ]  38.12  102.60  Lamar,CO
+[LXV]  39.25  106.30  Leadville,CO
+[LIC]  39.18  103.70  Limon,CO
+[6V8]  38.50  107.88  Montrose,CO
+[MTJ]  38.50  107.88  Montrose,CO
+[PUB]  38.28  104.52  Pueblo,CO
+[1V1]  39.53  107.80  Rifle,CO
+[S29]  38.53  106.05  Salida,CO
+[SBS]  40.48  106.82  Steamboat Sp,CO
+[TAD]  37.25  104.33  Trinidad,CO
+[C96]  40.00  105.87  Winter Park,CO
+
+Connecticut
+
+[BDR]  41.17   73.13  Bridgeport,CT
+[DXR]  41.37   73.48  Danbury,CT
+[GON]  41.33   72.05  Groton,CT
+[HFD]  41.73   72.65  Hartford,CT
+[30N]  41.22   72.67  New Haven,CT
+[HVN]  41.27   72.88  New Haven,CT
+[N11]  41.27   72.90  New Haven,CT
+[18N]  41.30   72.08  New London,CT
+[BDL]  41.93   72.68  Windsor Loc,CT
+
+Delaware
+
+[DOV]  39.13   75.47  Dover,DE
+[ILG]  39.67   75.60  Wilmington,DE
+
+District of Columbia
+
+
+[IAD]  38.95   77.46  Washington/Dulles,DC
+[DCA]  38.85   77.04  Washington/Natl,DC
+
+Florida
+
+[AQQ]  29.73   85.03  Apalachicola,FL
+[90J]  29.12   81.57  Astor NAS,FL
+[AGR]  28.08   81.55  Avon Park G,FL
+[XMR]  28.47   80.55  Cape Canaveral,FL
+[NZC]  30.22   81.88  Cecil,FL
+[CEW]  30.78   86.52  Crestview,FL
+[CTY]  29.62   83.10  Cross City,FL
+[DAB]  29.18   81.05  Daytona Bch,FL
+[EGI]  30.65   86.52  Duke Fld,FL
+[VPS]  30.48   86.53  Eglin AFB,FL
+[X91]  27.60   82.77  Egmont Key,FL
+[FXE]  26.13   80.13  Fort Lauderd,FL
+[FMY]  26.58   81.87  Fort Myers,FL
+[FLL]  26.07   80.15  Ft Lauderdale,FL
+[RSW]  26.65   81.87  Ft Myers,FL
+[GNV]  29.68   82.27  Gainesville,FL
+[HST]  25.48   80.38  Homestead,FL
+[HRT]  30.43   86.68  Hurlburt Fld,FL
+[CRG]  30.33   81.52  Jacksonville,FL
+[JAX]  30.50   81.70  Jacksonville,FL
+[NIP]  30.23   81.68  Jacksonville,FL
+[EYW]  24.55   81.75  Key West,FL
+[NQX]  24.57   81.68  Key West NAS,FL
+[LAL]  28.03   81.95  Lakeland,FL
+[MCF]  27.85   82.52  Macdill AFB,FL
+[MAI]  30.84   85.18  Marianna,FL
+[NRB]  30.40   81.42  Mayport NAS,FL
+[MLB]  28.10   80.63  Melbourne,FL
+[MIA]  25.82   80.28  Miami Intl,FL
+[OPF]  25.92   80.28  Miami/Opa,FL
+[TMB]  25.65   80.43  Miami/Tamiami,FL
+[APF]  26.13   81.80  Naples,FL
+[X68]  28.62   80.68  Nasa Shuttle,FL
+[MCO]  28.43   81.32  Orlando,FL
+[ORL]  28.55   81.33  Orlando,FL
+[PFN]  30.20   85.68  Panama City,FL
+[COF]  28.23   80.60  Patrick AFB,FL
+[NPA]  30.35   87.32  Pensacola,FL
+[PNS]  30.47   87.20  Pensacola,FL
+[TBW]  27.97   82.60  Ruskin,FL
+[PIE]  27.92   82.68  Saint Peters,FL
+[SFB]  28.78   81.25  Sanford,FL
+[SRQ]  27.40   82.55  Sarasota,FL
+[TLH]  30.38   84.37  Tallahassee,FL
+[TPA]  27.97   82.53  Tampa Intl,FL
+[TIX]  28.52   80.80  Titusville,FL
+[PAM]  30.07   85.58  Tyndall AFB,FL
+[VRB]  27.65   80.42  Vero Beach,FL
+[PBI]  26.68   80.12  W Palm Beach,FL
+[NSE]  30.72   87.02  Whiting Fld,FL
+
+Georgia
+
+[ABY]  31.53   84.18  Albany,GA
+[AMG]  31.53   82.52  Alma,GA
+[AHN]  33.95   83.32  Athens,GA
+[ATL]  33.65   84.42  Atlanta,GA
+[ATL]  33.65   84.42  Atlanta,GA
+[PDK]  33.88   84.30  Atlanta/Dklb,GA
+[FTY]  33.78   84.52  Atlanta/Fltn,GA
+[AGS]  33.37   81.97  Augusta/Bush,GA
+[SSI]  31.15   81.38  Brunswick,GA
+[CSG]  32.52   84.93  Columbus,GA
+[MGE]  33.92   84.52  Dobbins AFB,GA
+[MGF]  34.53   84.87  Dobbins AFB,GA
+[LSF]  32.33   85.00  Fort Benning,GA
+[LHW]  31.88   81.57  Ft Stewart,GA
+[SVN]  32.02   81.15  Hunter Aaf,GA
+[LGC]  33.01   85.07  La Grange,GA
+[MCN]  32.70   83.65  Macon/Lewis,GA
+[VAD]  30.97   83.20  Moody AFB,GA
+[WRB]  32.63   83.60  Robins AFB,GA
+[RMG]  34.35   85.17  Rome/Russell,GA
+[SAV]  32.13   81.20  Savannah Mun,GA
+[VLD]  30.78   83.28  Valdosta,GA
+[AYS]  31.25   82.40  Waycross,GA
+
+Hawaii
+
+[HNA]  21.53  158.12  Barbers Pt,HI
+[HNA]  21.53  158.12  Barbers Pt,HI
+[BKH]  22.05  160.30  Barking San,HI
+[1Z6]  24.45  166.47  Fr Frigate,HI
+[ITO]  19.72  155.07  Hilo,HI
+[HNL]  21.35  157.93  Honolulu Int,HI
+[OGG]  20.90  156.43  Kahului Maui,HI
+[HNG]  21.75  158.28  Kaneohe Mca,HI
+[HNG]  21.75  158.28  Kaneohe Mca,HI
+[KOA]  19.75  156.05  Ke-Ahole/Kon,HI
+[0Z5]  22.38  159.67  Kilauea Pt,HI
+[LNY]  20.80  156.95  Lanai-Lanai,HI
+[LIH]  21.98  159.35  Lihue-Kauai,HI
+[JHM]  20.97  156.83  Maui,HI
+[MKK]  21.15  157.10  Molokai,HI
+[1Z2]  20.42  156.47  Upolo Pt Ln,HI
+[MUE]  20.00  156.12  Waimea-Koha,HI
+
+Idaho
+
+[BOI]  43.57  116.22  Boise,ID
+[BYI]  42.53  113.77  Burley,ID
+[U15]  44.52  114.22  Challis,ID
+[COE]  47.77  116.82  Coeur d'Alene,ID
+[P69]  45.82  115.43  Elk City,ID
+[GNG]  43.00  115.17  Gooding,ID
+[S80]  45.92  116.13  Grangeville,ID
+[IDA]  43.52  112.07  Idaho Falls,ID
+[LWS]  46.38  117.02  Lewiston,ID
+[MLD]  42.17  112.32  Malad City,ID
+[77M]  42.30  113.37  Malta,ID
+[MYL]  44.88  116.10  Mccall,ID
+[MUO]  43.05  115.87  Mountn Home,ID
+[S06]  47.47  115.80  Mullan,ID
+[PIH]  42.92  112.60  Pocatello,ID
+[27U]  45.18  113.90  Salmon,ID
+[SMN]  45.17  114.47  Salmon,ID
+[U78]  42.65  111.58  Soda Springs,ID
+[SUN]  43.50  114.30  Sun Valley,ID
+[TWF]  42.48  114.48  Twin Falls,ID
+
+Illinois
+
+[ALN]  38.88   90.05  Alton,IL
+[ARR]  41.77   88.32  Aurora,IL
+[CPS]  38.57   90.15  Bistate Park,IL
+[BMI]  40.48   88.93  Bloomington,IL
+[BDF]  41.16   89.60  Bradford,IL
+[CTR]  37.07   89.22  Cairo,IL
+[MDH]  37.78   89.25  Carbondale,IL
+[ENL]  38.51   89.09  Centralia,IL
+[CMI]  40.03   88.28  Champaign/Urbana,IL
+[CHI]  41.90   87.65  Chicago,IL
+[CGX]  41.87   87.62  Chicago/Meigs,IL
+[MDW]  41.78   87.75  Chicago/Midway,IL
+[ORD]  41.98   87.90  Chicago/O'hare,IL
+[DNV]  40.20   87.60  Danville,IL
+[DKB]  41.93   88.72  DeKalb,IL
+[DEC]  39.83   88.87  Decatur,IL
+[DPA]  41.92   88.25  Du Page,IL
+[GBG]  40.93   90.43  Galesburg,IL
+[NBU]  42.08   87.82  Glenview NAS,IL
+[IKK]  41.07   87.85  Kankakee,IL
+[MQB]  40.52   90.66  Macomb,IL
+[MWA]  37.75   89.00  Marion,IL
+[MMO]  41.37   88.68  Marseilles,IL
+[MTO]  39.48   88.28  Mattoon,IL
+[MLI]  41.45   90.52  Moline/Quad,IL
+[MVN]  38.32   88.86  Mount Vernon,IL
+[PIA]  40.67   89.68  Peoria,IL
+[UIN]  39.93   91.20  Quincy,IL
+[RFD]  42.20   89.10  Rockford,IL
+[SLO]  38.63   88.96  Salem,IL
+[BLV]  38.55   89.85  Scott AFB,IL
+[SPI]  39.85   89.67  Springfield,IL
+[SQI]  41.74   89.67  Sterling,IL
+[TAZ]  39.53   89.33  Taylorville,IL
+[VLA]  38.99   89.17  Vandalia,IL
+
+Indiana
+
+
+[BAK]  39.38   86.50  Bakalar Af,IN
+[BMG]  39.13   86.62  Bloomington,IN
+[EKM]  41.72   86.00  Elkhart,IN
+[EVV]  38.05   87.53  Evansville,IN
+[FWA]  41.00   85.20  Fort Wayne,IN
+[GYY]  41.62   87.42  Gary,IN
+[GUS]  40.65   86.15  Grissom AFB,IN
+[IND]  39.73   86.27  Indianapolis,IN
+[MIE]  40.23   85.38  Muncie,IN
+[SBN]  41.70   86.32  South Bend,IN
+[HUF]  39.45   87.30  Terre Haute,IN
+[LAF]  40.42   86.93  W Lafayette,IN
+
+Iowa
+
+[BRL]  40.78   91.12  Burlington,IA
+[CID]  41.88   91.70  Cedar Rapids,IA
+[DSM]  41.53   93.65  Des Moines,IA
+[DBQ]  42.40   90.70  Dubuque,IA
+[EST]  43.40   94.75  Estherville,IA
+[FOD]  42.55   94.18  Fort Dodge,IA
+[3OI]  40.62   93.93  Lamoni,IA
+[MCW]  43.15   93.33  Mason City,IA
+[OTM]  41.10   92.45  Ottumwa,IA
+[SUX]  42.40   96.38  Sioux City,IA
+[3SE]  43.17   95.15  Spencer,IA
+[ALO]  42.55   92.40  Waterloo Mun,IA
+
+Kansas
+
+[CNU]  37.67   95.48  Chanute,KS
+[3KM]  37.75   97.22  Col. J Jabar,KS
+[CNK]  39.55   97.65  Concordia,KS
+[DDC]  37.77   99.97  Dodge City,KS
+[1K5]  37.00  101.88  Elkhart,KS
+[EMP]  38.33   96.20  Emporia,KS
+[FLV]  39.37   94.92  Ft Leavnwrth,KS
+[FRI]  39.05   96.77  Ft Riley,KS
+[GCK]  37.93  100.72  Garden City,KS
+[GLD]  39.37  101.70  Goodland,KS
+[HYS]  38.85   99.27  Hays,KS
+[HLC]  39.38   99.83  Hill City,KS
+[HUT]  38.07   97.87  Hutchinson,KS
+[IXD]  38.82   94.88  Johnson Cnty,KS
+[LBL]  37.05  100.97  Liberal,KS
+[MHK]  39.15   96.67  Manhatten,KS
+[IAB]  37.62   97.27  Mcconnell Af,KS
+[P28]  37.30   98.58  Medicine Ldg,KS
+[OJC]  38.85   94.90  Olathe,KS
+[RSL]  38.87   98.82  Russell,KS
+[SLN]  38.80   97.65  Salina,KS
+[TOP]  39.07   95.62  Topeka,KS
+[FOE]  38.95   95.67  Topeka/Forbe,KS
+[ICT]  37.65   97.43  Wichita,KS
+
+Kentucky
+
+[BWG]  36.97   86.43  Bowling Gren,KY
+[HOP]  36.67   87.50  Ft Campbell,KY
+[FTK]  37.90   85.97  Ft Knox,KY
+[JKL]  37.60   83.32  Jackson,KY
+[LEX]  38.05   85.00  Lexington,KY
+[LOZ]  37.08   84.07  London,KY
+[LOU]  38.23   85.67  Louisville,KY
+[SDF]  38.18   85.73  Louisville,KY
+[OWB]  37.75   87.17  Owensboro,KY
+[PAH]  37.07   88.77  Paducah,KY
+[5I3]  37.48   82.52  Pikeville,KY
+
+Louisiana
+
+[ESF]  31.38   92.30  Alexandria,LA
+[BAD]  32.50   93.67  Barksdale,LA
+[BTR]  30.53   91.15  Baton Rouge,LA
+[BVE]  29.55   89.67  Boothville,LA
+[7R5]  29.78   93.30  Cameron Heli,LA
+[01R]  31.22   92.95  Claiborne R,LA
+[AEX]  31.33   92.55  England AFB,LA
+[41I]  28.47   91.78  Eugene Is.,LA
+[POE]  31.05   93.20  Fort Polk,LA
+[AXO]  29.18   90.07  Grand Isle,LA
+[5R0]  28.22   93.75  High Is,LA
+[01T]  28.13   94.40  High Island,LA
+[HUM]  29.57   90.65  Houma,LA
+[7R4]  29.73   92.12  Intercoastal,LA
+[LFT]  30.20   92.00  Lafayette,LA
+[LCH]  30.12   93.22  Lake Charles,LA
+[7R3]  29.70   91.10  Lk Palourde,LA
+[1G7]  28.78   89.05  Missippi Can,LA
+[MLU]  32.52   92.05  Monroe,LA
+[PTN]  29.70   91.20  Morgan City,LA
+[ARA]  30.03   91.88  New Iberia,LA
+[MSY]  29.98   90.25  New Orleans,LA
+[NBG]  29.83   90.02  New Orleans,LA
+[NEW]  30.03   90.03  New Orleans,LA
+[7R8]  28.30   91.98  S Marsh Isl,LA
+[DTN]  32.52   93.75  Shreveport,LA
+[SHV]  32.47   93.82  Shreveport,LA
+[SIL]  30.35   89.82  Slidel,LA
+
+Maine
+
+[AUG]  44.32   69.80  Augusta,ME
+[BGR]  44.80   68.82  Bangor,ME
+[BHB]  44.45   68.37  Bar Harbor,ME
+[NHZ]  43.88   69.93  Brunswick,ME
+[CAR]  46.87   68.02  Caribou Mun,ME
+[3B1]  45.45   69.55  Greenville,ME
+[6B2]  45.78   69.63  Greenville,ME
+[HUL]  46.13   67.78  Houlton,ME
+[LIZ]  46.95   67.88  Loring AFB,ME
+[PWM]  43.65   70.32  Portland,ME
+[PQI]  46.68   68.05  Presque Isle,ME
+[RKD]  44.07   69.12  Rockland,ME
+[RUM]  44.88   70.88  Rumford,ME
+
+Maryland
+
+[ADW]  38.82   76.87  Andrews AFB,MD
+[BAL]  39.18   76.67  Baltimore,MD
+[BWI]  39.18   76.67  Baltimore,MD
+[MTN]  39.33   76.42  Baltimore,MD
+[FME]  39.08   76.77  Fort Meade,MD
+[HGR]  39.70   77.72  Hagerstown,MD
+[N80]  38.55   75.13  Ocean City,MD
+[NHK]  38.28   76.40  Patuxent,MD
+[APG]  39.47   76.17  Phillips,MD
+[SBY]  38.33   75.50  Salisbury,MD
+
+Massachusetts
+
+[BED]  42.47   71.28  Bedford,MA
+[BVY]  42.58   70.92  Beverly,MA
+[BOS]  42.37   71.03  Boston,MA
+[30B]  41.78   70.50  Cape Cod Can,MA
+[CHH]  41.67   69.97  Chatham,MA
+[AYE]  42.57   71.60  Fort Devens,MA
+[HYA]  41.67   70.28  Hyannis,MA
+[LWM]  42.72   71.12  Lawrence,MA
+[MVY]  41.40   70.62  Marthas Vine,MA
+[ACK]  41.25   70.07  Nantucket,MA
+[EWB]  41.68   70.97  New Bedford,MA
+[OWD]  42.18   71.18  Norwood,MA
+[FMH]  41.65   70.52  Otis ANGB,MA
+[PSF]  42.26   73.18  Pittsfield,MA
+[NZW]  42.15   70.93  S Weymouth,MA
+[BAF]  42.17   72.72  Westfield,MA
+[CEF]  42.20   72.53  Westover,MA
+[ORH]  42.27   71.87  Worcester,MA
+
+Michigan
+
+[APN]  45.07   83.57  Alpena,MI
+[ARB]  42.22   83.75  Ann Arbor,MI
+[BTL]  42.30   85.23  Battle Creek,MI
+[BEH]  42.13   86.43  Benton Harbor,MI
+[CIU]  46.25   84.47  Chippewa,MI
+[C10]  43.07   85.95  Coopersville,MI
+[P59]  47.47   87.85  Copper Harb,MI
+[DET]  42.42   83.02  Detroit,MI
+[DTW]  42.23   83.33  Detroit,MI
+[ESC]  45.73   87.08  Escanaba,MI
+[FNT]  42.97   83.75  Flint/Bishop,MI
+[GRR]  42.88   85.52  Grand Rapids,MI
+[CMX]  47.17   88.50  Hancock,MI
+[P58]  43.83   82.53  Harbor Beach,MI
+[HTL]  44.37   84.68  Houghton Lake,MI
+[IMT]  45.82   88.12  Iron Mtn,MI
+[IWD]  46.53   90.13  Ironwood,MI
+[JXN]  42.27   84.47  Jackson,MI
+[AZO]  42.23   85.55  Kalamazoo,MI
+[LAN]  42.77   84.60  Lansing,MI
+[MBL]  44.27   86.25  Manistee,MI
+[MQT]  46.88   87.95  Marquette,MI
+[MNM]  45.12   87.63  Menominee,MI
+[MKG]  43.17   86.25  Muskegon,MI
+[PLN]  45.57   84.80  Pellston,MI
+[PTK]  42.67   83.42  Pontiac,MI
+[MBS]  43.53   84.08  Saginaw,MI
+[SSM]  46.47   84.37  Sault Ste M,MI
+[SAW]  46.35   87.40  Sawyer AFB,MI
+[MTC]  42.62   82.83  Selfridge,MI
+[P75]  45.92   85.92  Seul Choix,MI
+[TVC]  44.73   85.58  Traverse Cty,MI
+[OSC]  44.45   83.40  Wurtsmith,MI
+[YIP]  42.23   83.53  Ypsilanti,MI
+
+Minnesota
+
+[AEL]  43.68   93.37  Albert Lea,MN
+[AXN]  45.87   95.38  Alexandria,MN
+[BJI]  47.50   94.93  Bemidji Muni,MN
+[BRD]  46.40   94.13  Brainerd-Crw,MN
+[DTL]  46.82   95.88  Detroit Laks,MN
+[DLH]  46.83   92.18  Duluth,MN
+[ELO]  47.90   91.82  Ely,MN
+[FRM]  43.65   94.42  Fairmont,MN
+[FFM]  46.30   96.07  Fergus Falls,MN
+[GPZ]  47.22   93.52  Grand Rapids,MN
+[HIB]  47.38   92.85  Hibbing,MN
+[INL]  48.57   93.38  Intl Falls,MN
+[Y69]  45.13   94.52  Litchfield,MN
+[MKT]  44.22   93.92  Mankato,MN
+[MML]  44.45   95.82  Marshall Arpt,MN
+[FCM]  44.83   93.47  Minneapolis,MN
+[MIC]  45.07   93.38  Minneapolis,MN
+[MSP]  44.88   93.22  Minneapolis,MN
+[PKD]  46.90   95.07  Park Rapids,MN
+[P39]  46.60   94.32  Pequot Lake,MN
+[RWF]  44.55   95.08  Redwood Falls,MN
+[RST]  43.92   92.50  Rochester,MN
+[STP]  44.93   93.05  Saint Paul,MN
+[STC]  45.55   94.07  St Cloud,MN
+[TVF]  48.07   96.18  Thief River,MN
+[P61]  47.58   90.83  Tofte,MN
+[D45]  48.93   95.35  Warroad,MN
+[OTG]  43.65   95.58  Worthington,MN
+
+Mississippi
+
+[CBM]  33.65   88.45  Columbus AFB,MS
+[GTR]  33.45   88.58  Golden Trian,MS
+[GLH]  33.48   90.98  Greenville,MS
+[GWO]  33.50   90.08  Greenwood,MS
+[GPT]  30.40   89.07  Gulfport,MS
+[PIB]  31.47   89.33  Hattiesburg,MS
+[JAN]  32.32   90.08  Jackson,MS
+[BIX]  30.42   88.92  Keesler AFB,MS
+[LUL]  31.67   89.17  Laurel,MS
+[MCB]  31.18   90.47  Mccomb,MS
+[NMM]  32.55   88.57  Meridian NAS,MS
+[MEI]  32.33   88.75  Meridian/Key,MS
+[HEZ]  31.62   91.25  Natchez,MS
+[UOX]  34.39   89.54  Oxford,MS
+[TUP]  34.27   88.77  Tupelo,MS
+
+Missouri
+
+[COU]  38.82   92.22  Columbia,MO
+[CGI]  37.23   89.58  Cp Girardeau,MO
+[TBN]  37.75   92.13  Ft Leonard,MO
+[JEF]  38.60   92.17  Jefferson City,MO
+[JLN]  37.17   94.50  Joplin,MO
+[MCI]  39.32   94.72  Kansas City,MO
+[MKC]  39.12   94.60  Kansas City,MO
+[IRK]  40.10   92.55  Kirksville,MO
+[UMN]  37.33   94.35  Monett,MO
+[MKO]  35.66   95.36  Muskogee,MO
+[P02]  36.77   90.47  Poplar Bluff,MO
+[GVW]  38.85   94.55  Richards-Geb,MO
+[P35]  40.25   93.72  Spickard,MO
+[SGF]  37.23   93.38  Springfield,MO
+[STJ]  40.28   95.53  St Joseph,MO
+[STL]  38.75   90.37  St Louis,MO
+[SUS]  38.65   90.63  StLouis/Spirit,MO
+[VIH]  38.13   91.77  Vichy/Rolla,MO
+[H63]  37.22   92.42  West Plains,MO
+[UNO]  36.88   91.90  West Plains,MO
+[SZL]  38.73   93.55  Whiteman AFB,MO
+
+Montana
+
+[BIL]  45.80  108.53  Billings,MT
+[BZN]  45.78  111.15  Bozeman,MT
+[4BQ]  45.67  105.67  Broadus,MT
+[BTM]  45.95  112.50  Butte,MT
+[CTB]  48.60  112.37  Cut Bank,MT
+[DLN]  45.25  112.55  Dillon,MT
+[3DU]  46.67  113.15  Drummond,MT
+[GGW]  48.22  106.62  Glasgow,MT
+[GDV]  47.13  104.80  Glendive,MT
+[GTF]  47.48  111.37  Great Falls,MT
+[3HT]  46.43  109.83  Harlowton,MT
+[HVR]  48.55  109.77  Havre,MT
+[HLN]  46.60  112.00  Helena,MT
+[JDN]  47.33  106.93  Jordan,MT
+[FCA]  48.30  114.27  Kalispell,MT
+[LWT]  47.05  109.45  Lewiston,MT
+[LVM]  45.70  110.43  Livingston,MT
+[GFA]  47.50  111.18  Malmstrom,MT
+[MLS]  46.43  105.87  Miles City,MT
+[MSO]  46.92  114.08  Missoula,MT
+[MQM]  44.57  112.32  Monida,MT
+[SDY]  47.72  104.18  Sidney,MT
+[3TH]  47.60  115.37  Thompson Fal,MT
+[WEY]  44.65  111.10  W Yellowston,MT
+[WYS]  44.68  111.12  W Yellowston,MT
+[OLF]  48.10  105.58  Wolf Point,MT
+
+Nebraska
+
+[ANW]  42.58   99.98  Ainsworth,NE
+[AIA]  42.05  102.80  Alliance,NE
+[BIE]  40.32   96.75  Beatrice,NE
+[BBW]  41.43   99.65  Broken Bow,NE
+[BUB]  41.78   99.15  Burwell,NE
+[CDR]  42.83  103.08  Chadron,NE
+[OLU]  41.45   97.35  Columbus,NE
+[CZD]  40.87  100.00  Cozad,NE
+[FNB]  40.07   95.58  Falls City,NE
+[GRI]  40.97   98.32  Grand Island,NE
+[HSI]  40.60   98.43  Hastings,NE
+[6V1]  40.33  101.39  Imperial,NE
+[IML]  40.53  101.63  Imperial,NE
+[EAR]  40.73   99.00  Kearney,NE
+[LNK]  40.85   96.75  Lincoln Muni,NE
+[MCK]  40.22  100.58  Mccook,NE
+[MHN]  42.05  101.05  Mullen,NE
+[OFK]  41.98   97.43  Norfolk,NE
+[OVN]  41.37   96.02  North Omaha,NE
+[LBF]  41.13  100.68  North Platte,NE
+[ONL]  42.47   98.68  O'neill,NE
+[OFF]  41.12   95.92  Offutt AFB,NE
+[OMA]  41.30   95.90  Omaha/Eppley,NE
+[ODX]  41.62   98.95  Ord/Sharp,NE
+[BFF]  41.87  103.60  Scottsbluff,NE
+[SNY]  41.10  102.98  Sidney Muni,NE
+[VTN]  42.87  100.55  Valentine,NE
+
+Nevada
+
+[AUI]  39.83  117.13  Austin,NV
+[U31]  39.50  117.08  Austin,NV
+[BAM]  40.62  116.87  Battle Mtn,NV
+[P38]  37.62  114.52  Caliente,NV
+[EKO]  40.83  115.78  Elko,NV
+[ELY]  39.28  114.85  Ely/Yelland,NV
+[P68]  39.50  115.97  Eureka,NV
+[NFL]  39.42  118.70  Fallon NAS,NV
+[HTH]  38.55  118.63  Hawthorne,NV
+[L63]  36.53  115.57  Ind Sprng Rn,NV
+[L76]  36.57  115.67  Ind Sprng Rn,NV
+[LAS]  36.08  115.17  Las Vegas,NV
+[LOL]  40.10  118.92  Lovelock,NV
+[DRA]  36.62  116.02  Mercury,NV
+[LSV]  36.23  115.03  Nellis AFB,NV
+[OWY]  42.58  116.17  Owyhee,NV
+[RNO]  39.50  119.78  Reno,NV
+[TPH]  38.07  117.08  Tonopah,NV
+[AWH]  41.33  116.25  Wildhorse,NV
+[WMC]  40.90  117.80  Winnemucca,NV
+[UCC]  37.58  116.08  Yucca Flat,NV
+
+New Hampshire
+
+[BML]  44.58   71.18  Berlin,NH
+[CON]  43.20   71.50  Concord,NH
+[AFN]  42.80   72.00  Jaffrey,NH
+[EEN]  42.90   72.27  Keene,NH
+[LCI]  43.57   71.43  Laconia,NH
+[LEB]  43.63   72.30  Lebanon,NH
+[MHT]  42.93   71.43  Manchester,NH
+[MWN]  44.27   71.30  Mt Washingtn,NH
+[ASH]  42.78   71.52  Nashua,NH
+[PSM]  43.08   70.82  Pease AFB,NH
+[8B8]  44.00   71.38  Wolfeboro,NH
+
+New Jersey
+
+[ACY]  39.45   74.57  Atlantic Cty,NJ
+[N78]  40.28   74.28  Barnegat Ls,NJ
+[CDW]  40.87   74.28  Fairfield,NJ
+[NEL]  40.03   74.35  Lakehurst,NJ
+[WRI]  40.02   74.60  Mcguire AFB,NJ
+[MIV]  39.37   75.07  Millville,NJ
+[MMU]  40.80   74.42  Morristown,NJ
+[EWR]  40.70   74.17  Newark Intl,NJ
+[TEB]  40.85   74.05  Teterboro,NJ
+[TTN]  40.28   74.82  Trenton,NJ
+
+New Mexico
+
+[ABQ]  35.05  106.60  Albuquerque,NM
+[CVS]  34.38  103.32  Cannon,NM
+[CNM]  32.33  104.27  Carlsbad,NM
+[CAO]  36.45  103.15  Clayton Arpt,NM
+[4CR]  34.10  105.68  Corona,NM
+[4SL]  36.02  106.95  Cuba Awrs,NM
+[DMN]  32.25  107.70  Deming,NM
+[FMN]  36.75  108.23  Farmington,NM
+[GUP]  35.52  108.78  Gallup/Clark,NM
+[GNT]  35.17  107.90  Grants,NM
+[HOB]  32.68  103.20  Hobbs,NM
+[HMN]  32.85  106.10  Holloman AFB,NM
+[LRU]  32.30  106.77  Las Cruces,NM
+[LVS]  35.65  105.15  Las Vegas,NM
+[LAM]  35.88  106.28  Los Alamos,NM
+[4MY]  34.98  106.05  Moriarity,NM
+[E28]  32.90  106.40  Northrup Str,NM
+[RTN]  36.74  104.50  Raton,NM
+[ROW]  33.30  104.53  Roswell,NM
+[SAF]  35.62  106.08  Santa Fe,NM
+[SVC]  32.63  108.17  Silver City,NM
+[ONM]  34.07  106.90  Socorro,NM
+[E23]  36.42  105.57  Taos,NM
+[TCS]  33.23  107.27  Truth Or Con,NM
+[TCC]  35.18  103.60  Tucumcari,NM
+[2C2]  32.63  106.40  White Sands,NM
+
+New York
+
+[ALB]  42.75   73.80  Albany,NY
+[N28]  40.75   74.37  Ambrose,NY
+[BGM]  42.22   75.98  Binghamton,NY
+[BUF]  42.93   78.73  Buffalo,NY
+[DSV]  42.97   78.20  Dansville,NY
+[ELM]  42.17   76.90  Elmira,NY
+[FRG]  40.73   73.43  Farmingdale,NY
+[GTB]  44.05   75.73  Fort Drum,NY
+[GFL]  43.35   73.62  Glens Falls,NY
+[RME]  43.23   75.40  Griffiss AFB,NY
+[ISP]  40.78   73.10  Islip,NY
+[ITH]  42.48   76.47  Ithaca,NY
+[JHW]  42.15   79.25  Jamestown,NY
+[MSS]  44.93   74.85  Massena,NY
+[MSV]  41.70   74.80  Monticello,NY
+[NYC]  40.77   73.98  New York,NY
+[JFK]  40.65   73.78  New York/JFK,NY
+[LGA]  40.77   73.90  New York/LGA,NY
+[SWF]  41.50   74.10  Newburgh,NY
+[IAG]  43.10   78.95  Niagara Fall,NY
+[OGS]  44.68   75.40  Ogdensburg,NY
+[N66]  42.87   75.12  Oneonta,NY
+[PBG]  44.65   73.47  Plattsburgh,NY
+[POU]  41.63   73.88  Poughkeepsie,NY
+[ROC]  43.12   77.67  Rochester,NY
+[ROC]  43.12   77.67  Rochester,NY
+[SLK]  44.38   74.20  Saranac Lk,NY
+[SCH]  42.85   73.93  Schenectady,NY
+[SYR]  43.12   76.12  Syracuse,NY
+[UCA]  43.15   75.38  Utica,NY
+[ART]  44.00   76.02  Watertown,NY
+[FOK]  40.85   72.63  Westhampton,NY
+[HPN]  41.07   73.72  White Plains,NY
+
+North Carolina
+
+[AVL]  35.43   82.55  Asheville,NC
+[HAT]  35.27   75.55  Cape Hattera,NC
+[CLT]  35.22   80.93  Charlotte,NC
+[NKT]  34.90   76.88  Cherry Point,NC
+[2DP]  36.13   76.50  Dare Co Gr,NC
+[44W]  35.25   75.50  Diamond Sho,NC
+[ECG]  36.27   76.18  Elizabeth,NC
+[FAY]  35.00   78.88  Fayetteville,NC
+[FBG]  35.13   78.93  Fort Bragg,NC
+[GSO]  36.08   79.95  Greensboro,NC
+[HKY]  35.75   81.38  Hickory,NC
+[HSS]  35.90   82.82  Hot Springs,NC
+[OAJ]  34.82   77.62  Jacksonville,NC
+[ISO]  35.32   77.63  Kinston,NC
+[HFF]  35.03   79.50  Mackall Aaf,NC
+[MQI]  35.92   75.68  Manteo Arpt,NC
+[EWN]  35.08   77.05  New Bern,NC
+[NCA]  34.70   77.43  New River,NC
+[POB]  35.17   79.02  Pope AFB,NC
+[RDU]  35.87   78.78  Raleigh-Durh,NC
+[RWI]  35.85   77.88  Rocky Mt,NC
+[GSB]  35.33   77.97  Seymour-John,NC
+[SOP]  35.24   79.39  Southern Pin,NC
+[ILM]  34.27   77.92  Wilmington,NC
+[INT]  36.13   80.23  Winston-Salem,NC
+
+North Dakota
+
+[BIS]  46.77  100.75  Bismarck,ND
+[DVL]  48.12   98.90  Devil's Lake,ND
+[P11]  48.10   98.87  Devil's Lake,ND
+[DIK]  46.78  102.80  Dickenson,ND
+[FAR]  46.90   96.80  Fargo,ND
+[GFK]  47.95   97.18  Grand Forks,ND
+[RDR]  47.97   97.40  Grand Forks,ND
+[JMS]  46.92   98.68  Jamestown,ND
+[P67]  46.10   97.15  Lidgerwood,ND
+[MIB]  48.42  101.35  Minot AFB,ND
+[MOT]  48.27  101.28  Minot Intl,ND
+[P24]  47.75  101.83  Roseglen,ND
+[ISN]  48.18  103.63  Williston,ND
+
+Ohio
+
+[UNI]  39.21   82.23  Athens/Albany,OH
+[CAK]  40.92   81.43  Canton,OH
+[CVG]  39.05   84.67  Cincinnati,OH
+[LUK]  39.10   84.43  Cincinnati,OH
+[BKL]  41.52   81.68  Cleveland,OH
+[CGF]  41.57   81.48  Cleveland,OH
+[CLE]  41.42   81.87  Cleveland,OH
+[CMH]  40.00   82.88  Columbus,OH
+[OSU]  40.08   83.07  Columbus Osu,OH
+[DAY]  39.90   84.20  Dayton,OH
+[FDY]  41.02   83.67  Findlay,OH
+[MFD]  40.82   82.52  Mansfield,OH
+[LCK]  39.82   82.93  Rickenbacker,OH
+[TOL]  41.60   83.80  Toledo,OH
+[LNN]  41.63   81.40  Willoughby,OH
+[FFO]  39.83   84.05  Wright-Pat AFB,OH
+[YNG]  41.27   80.67  Youngstown,OH
+[ZZV]  39.95   81.90  Zanesville,OH
+
+Oklahoma
+
+[LTS]  34.67   99.27  Altus AFB,OK
+[ADM]  34.30   97.02  Ardmore,OK
+[BVO]  36.75   96.00  Bartlesville,OK
+[CSM]  35.35   99.20  Clinton,OK
+[WDG]  36.38   97.80  Enid,OK
+[FSI]  34.65   98.40  Fort Sill,OK
+[GAG]  36.30   99.77  Gage,OK
+[HBR]  35.00   99.05  Hobart,OK
+[LAW]  34.57   98.42  Lawton,OK
+[MLC]  34.88   95.78  Mcalester,OK
+[OUN]  35.23   97.47  Norman,OK
+[OKC]  35.40   97.60  Oklahoma Cty,OK
+[PWA]  35.53   97.65  Oklahoma Cty,OK
+[PGO]  34.68   94.62  Page,OK
+[PNC]  36.73   97.10  Ponca City,OK
+[SWO]  36.16   97.09  Stillwater,OK
+[TIK]  35.42   97.38  Tinker AFB,OK
+[TUL]  36.20   95.90  Tulsa,OK
+[END]  36.33   97.92  Vance AFB,OK
+
+Oregon
+
+[AST]  46.15  123.88  Astoria,OR
+[3S2]  45.25  122.75  Aurora,OR
+[BKE]  44.83  117.82  Baker,OR
+[4BK]  42.08  124.47  Brookings,OR
+[BNO]  43.60  118.95  Burns Arpt,OR
+[92S]  43.38  124.95  Cape Blanco,OR
+[CZK]  45.68  121.88  Cascade,OR
+[CVO]  44.50  123.28  Corvallis,OR
+[EUG]  44.12  123.22  Eugene,OR
+[HIO]  45.53  122.95  Hillsboro,OR
+[LMT]  42.15  121.73  Klamath Fall,OR
+[LGD]  45.28  118.00  La Grande,OR
+[4LW]  42.18  120.35  Lake View,OR
+[MEH]  45.50  118.40  Meacham,OR
+[MFR]  42.37  122.87  Medford,OR
+[ONP]  44.63  124.05  Newport,OR
+[OTH]  43.42  124.25  North Bend,OR
+[ONO]  44.02  117.02  Ontario,OR
+[PDT]  45.68  118.85  Pendleton,OR
+[PDX]  45.60  122.60  Portland,OR
+[RDM]  44.27  121.15  Redmond,OR
+[RBG]  43.23  123.37  Roseburg,OR
+[SLE]  44.92  123.00  Salem,OR
+[SXT]  42.62  123.37  Sexton,OR
+[DLS]  45.62  121.15  The Dalles,OR
+[TTD]  45.55  122.40  Troutdale,OR
+
+Pennsylvania
+
+[ABE]  40.65   75.43  Allentown,PA
+[AOO]  40.30   78.32  Altoona,PA
+[BVI]  40.75   80.33  Beaver Falls,PA
+[BSI]  40.27   79.09  Blairsville,PA
+[BFD]  41.80   78.63  Bradford,PA
+[DUJ]  41.18   78.90  Dubois,PA
+[ERI]  42.08   80.18  Erie,PA
+[FKL]  41.38   79.87  Franklin,PA
+[CXY]  40.22   76.85  Harrisburg,PA
+[HAR]  40.37   77.42  Harrisburg,PA
+[JST]  40.32   78.83  Johnstown,PA
+[LNS]  40.13   76.30  Lancaster,PA
+[LBE]  40.28   79.40  Latrobe,PA
+[MDT]  40.20   76.77  Middletown,PA
+[MUI]  40.43   76.57  Muir,PA
+[PNE]  40.08   75.02  Nth Philadel,PA
+[PHL]  39.88   75.25  Philadelphia,PA
+[PSB]  41.47   78.13  Philipsburg,PA
+[AGC]  40.35   79.93  Pittsburgh,PA
+[PIT]  40.50   80.22  Pittsburgh,PA
+[RDG]  40.38   75.97  Reading,PA
+[43M]  39.73   77.43  Site R,PA
+[UNV]  40.85   77.83  State Colleg,PA
+[AVP]  41.33   75.73  Wilkes-Barre,PA
+[IPT]  41.25   76.92  Williamsport,PA
+[NXX]  40.20   75.15  Willow Grove,PA
+
+Rhode Island
+
+[BID]  41.17   71.58  Block Island,RI
+[OQU]  41.60   71.42  Nth Kingston,RI
+[PVD]  41.73   71.43  Providence,RI
+[NCO]  41.36   71.25  Quonset Pt NAS,RI
+
+South Carolina
+
+[AND]  34.50   82.72  Anderson,SC
+[NBC]  32.48   80.72  Beaufort Mca,SC
+[CHS]  32.90   80.03  Charleston,SC
+[CAE]  33.95   81.12  Columbia,SC
+[FLO]  34.18   79.72  Florence,SC
+[GMU]  34.85   82.35  Greenville,SC
+[GSP]  34.90   82.22  Greenville,SC
+[MMT]  33.92   80.80  Mcentire,SC
+[MYR]  33.68   78.93  Myrtle Beach,SC
+[CRE]  33.82   78.72  Nth Myrtle B,SC
+[SSC]  33.97   80.47  Shaw AFB,SC
+[SPA]  34.92   81.96  Spartanburg,SC
+
+South Dakota
+
+[ABR]  45.45   98.43  Aberdeen,SD
+[BKX]  44.30   96.80  Brookings,SD
+[9V9]  43.80   99.32  Chamberlain,SD
+[CHB]  43.75   99.32  Chamberlain,SD
+[0V1]  43.77  103.60  Custer,SD
+[RCA]  44.15  103.10  Ellsworth Af,SD
+[HON]  44.38   98.22  Huron,SD
+[Y22]  45.93  102.17  Lemmon,SD
+[MHE]  43.77   98.03  Mitchell,SD
+[Y26]  45.53  100.43  Mobridge,SD
+[P05]  44.05  101.60  Philip,SD
+[PHP]  44.05  101.60  Philip,SD
+[PIR]  44.38  100.28  Pierre,SD
+[RAP]  44.05  103.07  Rapid City,SD
+[REJ]  45.16  103.32  Redig,SD
+[FSD]  43.58   96.73  Sioux Falls,SD
+[ATY]  44.92   97.15  Watertown,SD
+[YKN]  42.92   97.38  Yankton,SD
+
+Tennessee
+
+[TRI]  36.48   82.40  Bristol,TN
+[CHA]  35.03   85.20  Chattanooga,TN
+[CKV]  36.62   87.42  Clarksville,TN
+[CSV]  35.95   85.08  Crossville,TN
+[DYR]  36.02   89.40  Dyersburg,TN
+[MKL]  35.60   88.92  Jackson,TN
+[TYS]  35.82   83.98  Knoxville,TN
+[MEM]  35.05   90.00  Memphis Intl,TN
+[NQA]  35.35   89.87  Memphis NAS,TN
+[MGL]  35.15   85.51  Monteagle,TN
+[BNA]  36.12   86.68  Nashville,TN
+[MQY]  36.00   86.50  Smyrna,TN
+
+Texas
+
+[ABI]  32.42   99.68  Abilene,TX
+[ALI]  27.73   98.03  Alice,TX
+[AMA]  35.23  101.70  Amarillo,TX
+[AUS]  30.30   97.70  Austin,TX
+[BSM]  30.20   97.68  Bergstrom Af,TX
+[BGS]  32.39  101.48  Big Sky,TX
+[HCA]  32.30  101.45  Big Spring,TX
+[BRO]  25.90   97.43  Brownsville,TX
+[BWD]  31.79   98.96  Brownwood,TX
+[FWH]  32.78   97.43  Carswell AFB,TX
+[NIR]  28.37   97.67  Chase NAS,TX
+[CDS]  34.43  100.28  Childress,TX
+[CLL]  30.58   96.37  College Stn,TX
+[CRP]  27.77   97.50  Corpus Chrst,TX
+[NGP]  27.70   97.28  Corpus Chrst,TX
+[COT]  28.45   99.22  Cotulla,TX
+[DWH]  30.07   95.55  D.w. Hooks,TX
+[DHT]  36.02  102.55  Dalhart,TX
+[NBE]  32.73   96.97  Dallas NAS,TX
+[ADS]  32.97   96.83  Dallas/Addis,TX
+[DFW]  32.90   97.03  Dallas/FW,TX
+[DAL]  32.85   96.85  Dallas/Love,TX
+[RBD]  32.68   96.87  Dallas/Redbr,TX
+[DRT]  29.37  100.92  Del Rio,TX
+[DYS]  32.43   99.85  Dyess AFB,TX
+[ELP]  31.80  106.40  El Paso,TX
+[EFD]  29.62   95.17  Ellington Af,TX
+[FTW]  32.82   97.35  Fort Worth,TX
+[HLR]  31.15   97.72  Ft Hood Aaf,TX
+[GLS]  29.27   94.87  Galveston,TX
+[GRK]  31.07   97.83  Gray AFB,TX
+[GVT]  33.07   96.07  Greenville,TX
+[GDP]  31.83  104.80  Guadalupe Ps,TX
+[HRL]  26.23   97.67  Harlingen,TX
+[HDO]  29.35   99.17  Hondo,TX
+[IAH]  29.97   95.35  Houston,TX
+[HOU]  29.65   95.28  Houston/Hobby,TX
+[JCT]  30.50   99.77  Junction,TX
+[SKF]  29.38   98.58  Kelly AFB,TX
+[ERV]  29.98   99.08  Kerrville,TX
+[ILE]  31.08   97.68  Killeen,TX
+[NQI]  27.50   97.82  Kingsville,TX
+[LRD]  27.53   99.47  Laredo Intl,TX
+[DLF]  29.37  100.78  Laughlin AFB,TX
+[GGG]  32.38   94.72  Longview,TX
+[LBB]  33.65  101.82  Lubbock,TX
+[LFK]  31.23   94.75  Lufkin,TX
+[MRF]  30.37  104.02  Marfa,TX
+[MFE]  26.18   98.23  Mcallen,TX
+[MAF]  31.95  102.18  Midland,TX
+[MWL]  32.78   98.07  Mineral Wlls,TX
+[PSX]  28.72   96.25  Palacios,TX
+[PRX]  33.63   95.45  Paris/Cox,TX
+[PVW]  34.17  101.71  Plainview,TX
+[BPT]  30.58   94.02  Port Arthur,TX
+[RND]  29.53   98.28  Randolph AFB,TX
+[REE]  33.60  102.05  Reese AFB,TX
+[RKP]  28.08   97.03  Rockport,TX
+[SJT]  31.37  100.50  San Angelo,TX
+[SAT]  29.53   98.47  San Antonio,TX
+[SSF]  29.33   98.47  San Antonio,TX
+[P07]  30.17  102.42  Sanderson,TX
+[F39]  33.72   96.67  Sherman-Deni,TX
+[T46]  28.03   95.87  South Brazos,TX
+[SEP]  32.22   98.18  Stephenville,TX
+[TPL]  31.15   97.42  Temple,TX
+[TYR]  32.37   95.40  Tyler/Pounds,TX
+[VCT]  28.85   96.92  Victoria,TX
+[ACT]  31.62   97.22  Waco-Madison,TX
+[SPS]  33.98   98.50  Wichita Flls,TX
+[INK]  31.78  103.20  Wink,TX
+
+Utah
+
+[4BL]  38.03  109.78  Blanding,UT
+[U17]  37.50  110.70  Bullfrog Mar,UT
+[CDC]  37.70  113.10  Cedar City,UT
+[U24]  39.33  112.58  Delta,UT
+[DPG]  40.20  112.93  Dugway Prvgr,UT
+[U16]  41.05  113.07  Eagle Range,UT
+[U28]  39.00  110.15  Green River,UT
+[4HV]  38.37  110.72  Hanksville,UT
+[HIF]  41.12  111.97  Hill AFB,UT
+[LGU]  41.78  111.85  Logan,UT
+[MLF]  38.72  113.03  Milford,UT
+[CNY]  38.77  109.75  Moab,UT
+[OGD]  41.18  112.02  Ogden,UT
+[PUC]  39.62  110.75  Price/Carbon,UT
+[PVU]  40.22  111.72  Provo,UT
+[U67]  40.50  110.63  Roosevelt,UT
+[SGU]  37.08  113.60  Saint George,UT
+[SLC]  40.78  111.97  Salt Lake Ct,UT
+[T62]  40.17  112.20  Tooele,UT
+[VEL]  40.45  109.52  Vernal,UT
+[ENV]  41.22  114.05  Wendover,UT
+
+Vermont
+
+[BTV]  44.47   73.15  Burlington,VT
+[MPV]  44.20   72.57  Montpelier,VT
+[EFK]  45.55   72.33  Newport,VT
+[RUT]  43.53   73.95  Rutland,VT
+[9B2]  44.42   72.02  St Johnsbury,VT
+[MNW]  42.88   72.88  Wilmington,VT
+
+Virginia
+
+[CHO]  38.13   78.45  Charlottesvi,VA
+[W39]  37.50   76.20  Chesapeake,VA
+[DAN]  36.57   79.33  Danville,VA
+[DAA]  38.72   77.18  Fort Belvoir,VA
+[FAF]  37.13   76.62  Fort Eustis,VA
+[HSP]  37.95   79.82  Hot Springs,VA
+[LFI]  37.08   76.37  Langley AFB,VA
+[LYH]  37.33   79.20  Lynchburg,VA
+[PHF]  37.13   76.50  Newport News,VA
+[NGU]  36.93   76.28  Norfolk NAS,VA
+[ORF]  36.90   76.20  Norfolk Rgnl,VA
+[NTU]  36.82   76.03  Oceana NAS,VA
+[NYG]  38.50   77.30  Quantico Mca,VA
+[RIC]  37.50   77.33  Richmond,VA
+[ROA]  37.32   79.97  Roanoke Muni,VA
+[SHD]  38.27   78.85  Staunton,VA
+[VQN]  36.95   78.98  Volens,VA
+[WAL]  37.85   75.48  Wallops Sta,VA
+
+Washington
+
+[BLI]  48.80  122.53  Bellingham,WA
+[PWT]  47.48  122.77  Bremerton,WA
+[75S]  48.50  122.33  Burlington,WA
+[63S]  48.88  118.47  Colville,WA
+[EPH]  47.32  119.52  Ephrata,WA
+[PAE]  47.92  122.28  Everet/Paine,WA
+[SKA]  47.62  117.65  Fairchild,WA
+[GRF]  47.08  122.58  Fort Lewis,WA
+[HMS]  46.57  119.60  Hanford,WA
+[HQM]  46.97  123.97  Hoquiam,WA
+[TCM]  47.15  122.48  Mcchord AFB,WA
+[MWH]  47.20  119.32  Moses Lake,WA
+[76S]  48.25  122.68  Oak Harbor,WA
+[OLM]  46.97  122.90  Olympia,WA
+[4OM]  48.42  119.53  Omak,WA
+[PSC]  46.27  119.12  Pasco,WA
+[CLM]  48.12  123.50  Port Angeles,WA
+[NOW]  48.22  123.67  Port Angeles,WA
+[PUW]  46.75  117.12  Pullman,WA
+[UIL]  47.95  124.55  Quillayute,WA
+[RNT]  47.50  122.22  Renton,WA
+[SEA]  47.45  122.30  Seattle,WA
+[BFI]  47.53  122.30  Seattle/Boeing,WA
+[SHN]  47.25  123.15  Shelton,WA
+[GEG]  47.63  117.53  Spokane,WA
+[SFF]  47.67  117.33  Spokane,WA
+[SMP]  47.28  121.33  Stampede Pas,WA
+[TIW]  47.27  122.58  Tacoma,WA
+[TDO]  46.48  122.80  Toledo,WA
+[ALW]  46.10  118.28  Walla Walla,WA
+[EAT]  47.40  120.20  Wenatchee,WA
+[NUW]  48.35  122.65  Whidbey Is,WA
+[YKM]  46.57  120.53  Yakima,WA
+
+West Virginia
+
+[BKW]  37.78   81.12  Beckley,WV
+[BLF]  37.30   81.22  Bluefield,WV
+[CRW]  38.37   81.60  Charleston,WV
+[CKB]  39.28   80.23  Clarksburg,WV
+[EKN]  38.88   79.85  Elkins,WV
+[HTS]  38.37   82.55  Huntington,WV
+[LWB]  37.87   80.40  Lewisburg,WV
+[MRB]  39.40   77.98  Martinsburg,WV
+[MGW]  39.65   79.92  Morgantown,WV
+[PKB]  39.35   81.43  Parkersburg,WV
+[HLG]  40.18   80.65  Wheeling,WV
+[SSU]  37.46   80.20  White Sulph,WV
+
+Wisconsin
+
+[ATW]  44.25   88.52  Appleton,WI
+[EAU]  44.87   91.48  Eau Claire,WI
+[GRB]  44.48   88.13  Green Bay,WI
+[JVL]  42.62   89.03  Janesville,WI
+[LSE]  43.87   91.25  La Crosse,WI
+[LNR]  43.20   90.18  Lone Rock,WI
+[MSN]  43.13   89.33  Madison,WI
+[MTW]  44.13   87.67  Manitowac,WI
+[MKE]  42.95   87.90  Milwaukee,WI
+[MWC]  43.12   88.05  Milwaukee,WI
+[CWA]  44.78   89.67  Mosinee,WI
+[EEW]  44.22   88.53  Neenah,WI
+[OSH]  44.00   88.57  Oshkosh,WI
+[RHI]  45.63   89.45  Rhinelander,WI
+[RIE]  45.48   91.72  Rice Lake,WI
+[VOK]  43.93   90.27  Volk Fld,WI
+[AUW]  44.92   89.62  Wausau,WI
+
+Wyoming
+
+[BPI]  42.57  110.10  Big Piney,WY
+[CPR]  42.92  106.47  Casper,WY
+[CYS]  41.15  104.82  Cheyenne,WY
+[COD]  44.52  109.02  Cody,WY
+[4DG]  42.75  105.38  Douglas,WY
+[EVW]  41.33  111.00  Evanston,WY
+[GCC]  44.35  105.53  Gillette,WY
+[JAC]  43.60  110.73  Jackson,WY
+[LND]  42.82  108.73  Lander,WY
+[LAR]  41.32  105.68  Laramie,WY
+[4MC]  44.35  104.81  Moorcroft,WY
+[RWL]  41.80  107.20  Rawlins,WY
+[RIW]  43.05  108.45  Riverton,WY
+[RKS]  41.60  109.07  Rock Springs,WY
+[SHR]  44.77  106.97  Sheridan,WY
+[WRL]  43.97  107.97  Worland,WY
+[P60]  44.55  110.42  Yellowstone,WY
+
+
+ +
+

+ +Find out more about RealEstate3D.com, + email + info@realestate3d.com.
+Copyright © 1996-1997 Orogo Technologies
+ +

+ + + + diff --git a/data/ngrams/README.md b/data/ngrams/README.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/data/ngrams/README.md @@ -0,0 +1 @@ + diff --git a/ipynb/BASIC.ipynb b/ipynb/BASIC.ipynb index 71f7b70..b711164 100644 --- a/ipynb/BASIC.ipynb +++ b/ipynb/BASIC.ipynb @@ -8,20 +8,20 @@ "\n", "# BASIC Interpreter\n", "\n", - "[Years ago](http://norvig.com/lispy.html), I showed how to write an Interpreter for a dialect of Lisp. Some readers appreciated it, and some asked about an interpreter for a language that isn't just a bunch of parentheses. In 2014 I saw a [celebration](http://time.com/69316/basic/) of the 50th anniversary of the 1964 [Dartmouth BASIC](http://web.archive.org/web/20120716185629/http://www.bitsavers.org/pdf/dartmouth/BASIC_Oct64.pdf) interpreter, and thought that I could show how to implement such an interpreter. I never quite finished in 2014, but in 2017 I rediscovered my unfinished file and completed it. For those of you unfamiliar with BASIC, here is a sample program:" + "[Years ago](http://norvig.com/lispy.html), I showed how to write an Interpreter for a dialect of Lisp. Some readers appreciated it, and some asked about an interpreter for a language that isn't just a bunch of parentheses. In 2014 I saw a [celebration](http://time.com/69316/basic/) of the 50th anniversary of the 1964 [Dartmouth BASIC](http://web.archive.org/web/20120716185629/http://www.bitsavers.org/pdf/dartmouth/BASIC_Oct64.pdf) interpreter, and thought that I could show how to implement such an interpreter. I never quite finished in 2014, but now it is 2017, I rediscovered this unfinished file, and completed it. For those of you unfamiliar with BASIC, here is a sample program:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ "program = '''\n", "10 REM POWER TABLE\n", - "11 DATA 8, 4\n", + "11 DATA 8, 4\n", "15 READ N0, P0\n", "20 PRINT \"N\",\n", "25 FOR P = 2 to P0\n", @@ -47,8 +47,9 @@ "source": [ "Of course I don't have to build everything from scratch in assembly language, and I don't have to worry about every byte of storage, like [Kemeny](http://www.dartmouth.edu/basicfifty/basic.html), [Gates](http://www.pagetable.com/?p=774), and [Woz](http://www.retrothing.com/2008/07/restoring-wozs.html) did, so my job is much easier. The interpreter consists of three phases: \n", "* **Tokenization**: breaking a text into a list of tokens, for example: `\"10 READ N\"` becomes `['10', 'READ', 'N']`.\n", - "* **Parsing**: building an executable representation from the tokens, so this statement becomes: `Stmt(num=10, typ='READ', args=['N'])`.\n", - "* **Execution**: follow the flow of the program and do what each statement says; in this case an assignment: `variables['N'] = data.popleft()`.\n", + "* **Parsing**: building a representation from the tokens: `Stmt(num=10, typ='READ', args=['N'])`.\n", + "* **Execution**: follow the flow of the program and do what each statement says; in this case the `READ` statement\n", + "has the effect of an assignment: `variables['N'] = data.popleft()`.\n", "\n", "\n", "\n", @@ -61,19 +62,19 @@ "cell_type": "code", "execution_count": 2, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ "import re \n", "\n", - "tokenize = re.compile(\n", - " r'''\\d* \\.? \\d+ (?: E -? \\d+)? | # number \n", - " SIN|COS|TAN|ATN|EXP|ABS|LOG|SQR|RND|INT|FN[A-Z]| # functions (including user-defined FNA-FNZ)\n", - " LET|READ|DATA|PRINT|GOTO|IF|FOR|NEXT|END|STOP | # keywords\n", - " DEF|GOSUB|RETURN|DIM|REM|TO|THEN|STEP | # more keywords\n", - " [A-Z]\\d? | # variable names (letter optionally followed by a digit)\n", - " \" .*? \" | # labels (strings in double quotes)\n", + "tokenize = re.compile(r'''\n", + " \\d* \\.? \\d+ (?: E -? \\d+)? | # number \n", + " SIN|COS|TAN|ATN|EXP|ABS|LOG|SQR|RND|INT|FN[A-Z]| # functions\n", + " LET|READ|DATA|PRINT|GOTO|IF|FOR|NEXT|END | # keywords\n", + " DEF|GOSUB|RETURN|DIM|REM|TO|THEN|STEP|STOP | # keywords\n", + " [A-Z]\\d? | # variable names (letter + optional digit)\n", + " \".*?\" | # labels (strings in double quotes)\n", " <>|>=|<= | # multi-character relational operators\n", " \\S # any non-space single character ''', \n", " re.VERBOSE).findall" @@ -90,9 +91,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -112,9 +111,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -133,9 +130,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "That looks good. Note that my tokens are just strings; it will be the parser's job, not the tokenizer's, to recognize that `'2'` is a number and `'X'` is the name of a variable. (In some interpreters, the tokenizer makes distinctions like these.)\n", "\n", @@ -151,9 +146,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -180,14 +173,14 @@ "* `peek()`: returns the next token in `tokens` (without changing `tokens`), or `None` if there are no more tokens.\n", "* `pop()`: removes and returns the next token. \n", "* `pop(`*string*`)`: removes and returns the next token if it is equal to the string; else return `None` and leave `tokens` unchanged.\n", - "* `pop(`*predicate*`)`: removes and returns the next token if *predicate*(*token*) is true; else return `None` and leave `tokens` unchanged." + "* `pop(`*predicate*`)`: remove and return the next token if *predicate*(*token*) is true; else return `None`, leave `tokens` alone." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -195,21 +188,23 @@ "\n", "def tokenizer(line):\n", " \"Return a list of the tokens on this line, handling spaces properly, and upper-casing.\"\n", - " return tokenize(remove_spaces(line).upper())\n", + " line = ''.join(tokenize(line)) # Remove whitespace\n", + " return tokenize(line.upper())\n", "\n", "def peek(): \n", " \"Return the first token in the global `tokens`, or None if we are at the end of the line.\"\n", " return (tokens[0] if tokens else None)\n", "\n", "def pop(constraint=None):\n", - " \"\"\"Remove and return the first token in `tokens`, or return None if first token fails a constraint.\n", - " `constraint` can be None, a literal string (e.g. pop('=')), or a predicate (e.g. pop(is_varname)).\"\"\"\n", - " if constraint is None or (peek() == constraint) or (callable(constraint) and constraint(peek())):\n", + " \"\"\"Remove and return the first token in `tokens`, or return None if token fails constraint.\n", + " constraint can be None, a literal (e.g. pop('=')), or a predicate (e.g. pop(is_varname)).\"\"\"\n", + " top = peek()\n", + " if constraint is None or (top == constraint) or (callable(constraint) and constraint(top)):\n", " return tokens.pop(0)\n", " \n", "def remove_spaces(line): \n", " \"Remove white space from line, except space inside double quotes.\"\n", - " return ''.join(tokenize(line))\n", + " return \n", "\n", "def lines(text): \n", " \"A list of the non-empty lines in a text.\"\n", @@ -228,9 +223,7 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -254,12 +247,10 @@ " assert (tokenizer('100IFX1+123.4+E1-12.3E4 <> 1.2E-34*-12E34+1+\"HI\" THEN99') ==\n", " ['100', 'IF', 'X1', '+', '123.4', '+', 'E1', '-', '12.3E4', '<>', \n", " '1.2E-34', '*', '-', '12E34', '+', '1', '+', '\"HI\"', 'THEN', '99'])\n", - " assert remove_spaces('10 GO TO 99') == '10GOTO99'\n", - " assert remove_spaces('100 PRINT \"HELLO WORLD\", SIN(X) ^ 2') == '100PRINT\"HELLO WORLD\",SIN(X)^2'\n", " assert lines('one line') == ['one line']\n", " assert lines(program) == [\n", " '10 REM POWER TABLE',\n", - " '11 DATA 8, 4',\n", + " '11 DATA 8, 4',\n", " '15 READ N0, P0',\n", " '20 PRINT \"N\",',\n", " '25 FOR P = 2 to P0',\n", @@ -313,6 +304,43 @@ "test_tokenizer()" ] }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['10 REM POWER TABLE',\n", + " '11 DATA 8, 4',\n", + " '15 READ N0, P0',\n", + " '20 PRINT \"N\",',\n", + " '25 FOR P = 2 to P0',\n", + " '30 PRINT \"N ^\" P,',\n", + " '35 NEXT P',\n", + " '40 PRINT \"SUM\"',\n", + " '45 LET S = 0',\n", + " '50 FOR N = 2 TO N0',\n", + " '55 PRINT N,',\n", + " '60 FOR P = 2 TO P0',\n", + " '65 LET S = S + N ^ P',\n", + " '70 PRINT N ^ P,',\n", + " '75 NEXT P',\n", + " '80 PRINT S',\n", + " '85 NEXT N',\n", + " '99 END']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lines(program)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -340,17 +368,15 @@ "- **`DIM`** ``\n", "- **`REM`** ``\n", " \n", - "The notation `` means any variable and `` means zero or more variables, separated by commas. `[STEP ]` means that the literal string `\"STEP\"`, followed by an expression, is optional. \n", + "The notation `` means any variable and `` means zero or more variables, separated by commas. `[`**`STEP`** `]` means that the literal string `\"STEP\"` followed by an expression is optional. \n", "\n", "Rather than use one of the many [language parsing frameworks](https://wiki.python.org/moin/LanguageParsing), I will show how to build a parser from scratch. First I'll translate the grammar above into Python. Not character-for-character (because it would take a lot of work to get Python to understand how to handle those characters), but almost word-for-word (because I can envision a straightforward way to get Python to handle the following format):" ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [], "source": [ "def Grammar(): \n", @@ -369,7 +395,8 @@ " 'GOSUB': [linenumber],\n", " 'RETURN': [],\n", " 'DIM': [list_of(variable)], \n", - " 'REM': [anycharacters]\n", + " 'REM': [anycharacters],\n", + " 'A': []\n", " }" ] }, @@ -408,7 +435,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": { "collapsed": true }, @@ -419,11 +446,11 @@ " num = linenumber()\n", " typ = pop(is_stmt_type) or fail('unknown statement type')\n", " args = []\n", - " for c in grammar[typ]: # For each constituent of rule, call if callable or match if literal string\n", - " if callable(c):\n", - " args.append(c())\n", + " for p in grammar[typ]: # For each part of rule, call if callable or match if literal string\n", + " if callable(p):\n", + " args.append(p())\n", " else:\n", - " pop(c) or fail('expected ' + repr(c))\n", + " pop(p) or fail('expected ' + repr(p))\n", " return Stmt(num, typ, args)" ] }, @@ -436,19 +463,17 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 11, + "metadata": {}, "outputs": [], "source": [ - "def linenumber(): return (int(pop()) if peek().isnumeric() else fail('missing line number'))\n", - "def number(): return (-1 if pop('-') else +1) * float(pop()) # Optional minus sign before number\n", + "def number(): return (-1 if pop('-') else +1) * float(pop()) # Optional minus sign\n", "def step(): return (expression() if pop('STEP') else 1) # 1 is the default step\n", + "def linenumber(): return (int(pop()) if peek().isnumeric() else fail('missing line number'))\n", "def relational(): return pop(is_relational) or fail('expected a relational operator')\n", "def varname(): return pop(is_varname) or fail('expected a variable name')\n", "def funcname(): return pop(is_funcname) or fail('expected a function name')\n", - "def anycharacters(): tokens.clear() # The tokens in a REM statement don't matter, so just clear them" + "def anycharacters(): tokens.clear() # Ignore tokens in a REM statement" ] }, { @@ -460,18 +485,20 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ - "def is_stmt_type(x): return isinstance(x, str) and x in grammar # LET, READ, ...\n", - "def is_funcname(x): return isinstance(x, str) and len(x) == 3 and x.isalpha() # SIN, COS, FNA, FNB, ...\n", - "def is_varname(x): return isinstance(x, str) and len(x) in (1, 2) and x[0].isalpha() # A, A1, A2, B, ...\n", - "def is_label(x): return isinstance(x, str) and x.startswith('\"') # \"HELLO WORLD\", ...\n", - "def is_relational(x): return isinstance(x, str) and x in ('<', '=', '>', '<=', '<>', '>=')\n", - "def is_number(x): return isinstance(x, str) and x and x[0] in '.0123456789' # '3', '.14', ..." + "def is_stmt_type(x): return is_str(x) and x in grammar # LET, READ, ...\n", + "def is_funcname(x): return is_str(x) and len(x) == 3 and x.isalpha() # SIN, COS, FNA, FNB, ...\n", + "def is_varname(x): return is_str(x) and len(x) in (1, 2) and x[0].isalpha() # A, A1, A2, B, ...\n", + "def is_label(x): return is_str(x) and x.startswith('\"') # \"HELLO WORLD\", ...\n", + "def is_relational(x): return is_str(x) and x in ('<', '=', '>', '<=', '<>', '>=')\n", + "def is_number(x): return is_str(x) and x and x[0] in '.0123456789' # '3', '.14', ...\n", + "\n", + "def is_str(x): return isinstance(x, str)" ] }, { @@ -483,9 +510,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -509,7 +536,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": { "collapsed": true }, @@ -536,13 +563,13 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ - "def parse(program): return sorted(map(parse_line, lines(program)))\n", + "def parse(program): return sorted(parse_line(line) for line in lines(program))\n", "\n", "def parse_line(line): global tokens; tokens = tokenizer(line); return statement()" ] @@ -556,7 +583,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": { "collapsed": true }, @@ -572,8 +599,8 @@ " return stmt\n", " except SyntaxError as err:\n", " print(\"Error in line '{}' at '{}': {}\".format(line, ' '.join(tokens), err))\n", - " return Stmt(0, 'REM', []) # Have to return something: a dummy statement\n", - " \n", + " return Stmt(0, 'REM', []) # Return dummy statement\n", + " \n", "def fail(message): raise SyntaxError(message)" ] }, @@ -588,7 +615,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": { "collapsed": true }, @@ -596,14 +623,14 @@ "source": [ "from collections import namedtuple, defaultdict, deque\n", "\n", - "Stmt = namedtuple('Stmt', 'num, typ, args') # Statement: '20 GOTO 99' => Stmt(20, 'GOTO', 99)\n", - "Subscript = namedtuple('Subscript', 'var, indexes') # Subscripted reference: 'A(I)' => Subscript('A', ['I'])\n", - "Funcall = namedtuple('Funcall', 'f, x') # Function call: 'SQR(X)' => Funcall('SQR', 'X')\n", - "Opcall = namedtuple('Opcall', 'x, op, y') # Infix operation: 'X + 1' => Opcall('X', '+', 1)\n", - "ForState = namedtuple('ForState', 'continu, end, step') # Data used to control a FOR loop variable\n", + "Stmt = namedtuple('Stmt', 'num, typ, args') # '1 GOTO 9' => Stmt(1, 'GOTO', 9)\n", + "Subscript = namedtuple('Subscript', 'var, indexes') # 'A(I)' => Subscript('A', ['I'])\n", + "Funcall = namedtuple('Funcall', 'f, x') # 'SQR(X)' => Funcall('SQR', 'X')\n", + "Opcall = namedtuple('Opcall', 'x, op, y') # 'X + 1' => Opcall('X', '+', 1)\n", + "ForState = namedtuple('ForState', 'continu, end, step') # Data for FOR loop \n", "\n", "class Function(namedtuple('_', 'parm, body')):\n", - " \"User-defined callable function; 'DEF FNC(X) = X ^ 3' => functions['FNC'] = Function('X', Opcall('X', '^', 3))\"\n", + " \"User-defined function; 'DEF FNC(X) = X ^ 3' => Function('X', Opcall('X', '^', 3))\"\n", " def __call__(self, value): \n", " variables[self.parm] = value # Global assignment to the parameter\n", " return evalu(self.body)" @@ -630,7 +657,7 @@ "* Optionally, `\";\"` can be used instead of `\",\"`.\n", "* Optionally, the `\",\"` or `\";\"` can be omitted—we can have a label immediately followed by an expression.\n", "\n", - "The effect of a comma is to advance the output to the next column that is a multiple of 15 (and to a new line if this goes past column 75). The effect of a semicolon is similar, but works in multiples of 3, not 15. (Note that column numbering starts at 0, not 1.) Normally, at the end of a `PRINT` statement we advance to a new line, but this is not done if the statement ends in `\",\"` or `\";\"`. Here are some examples:\n", + "The effect of a comma is to advance the output to the next column that is a multiple of 15 (and to a new line if this goes past column 100). The effect of a semicolon is similar, but works in multiples of 3, not 15. (Note that column numbering starts at 0, not 1.) Normally, at the end of a `PRINT` statement we advance to a new line, but this is not done if the statement ends in `\",\"` or `\";\"`. Here are some examples:\n", "\n", "* `10 PRINT X, Y`\n", "
Prints the value of `X` in column 0 and `Y` in column 15. Advances to new line.\n", @@ -651,7 +678,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": { "collapsed": true }, @@ -692,9 +719,9 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -717,16 +744,18 @@ " return Funcall(pop(), primary())\n", " elif pop('-'): # '-X' => Funcall('NEG', 'X')\n", " return Funcall('NEG', primary())\n", - " elif pop('('): # '(X + 1)' => Opcall('X', '+', 1)\n", + " elif pop('('): # '(X)' => 'X'\n", " exp = expression()\n", " pop(')') or fail('expected \")\" to end expression')\n", " return exp\n", " else:\n", " return fail('unknown expression')\n", "\n", - "def precedence(op): return (3 if op == '^' else 2 if op in ('*', '/') else 1 if op in ('+', '-') else 0)\n", + "def precedence(op): \n", + " return (3 if op == '^' else 2 if op in ('*', '/', '%') else 1 if op in ('+', '-') else 0)\n", "\n", - "def associativity(op): return (0 if op == '^' else 1)" + "def associativity(op): \n", + " return (0 if op == '^' else 1)" ] }, { @@ -740,10 +769,8 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, + "execution_count": 20, + "metadata": {}, "outputs": [ { "data": { @@ -768,7 +795,7 @@ " Stmt(num=99, typ='END', args=[])]" ] }, - "execution_count": 19, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -788,10 +815,8 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 21, + "metadata": {}, "outputs": [ { "data": { @@ -799,17 +824,17 @@ "'ok'" ] }, - "execution_count": 20, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "def test_parse(text, result, category=expression):\n", - " \"Test that text can be parsed as a category to yield the semantic result, with no tokens left over.\"\n", + "def test_exp(text, repr):\n", + " \"Test that text can be parsed as an expression to yield repr, with no tokens left over.\"\n", " global tokens\n", " tokens = tokenizer(text)\n", - " return category() == result and not tokens\n", + " return (expression() == repr) and not tokens\n", " \n", "def test_parser():\n", " assert is_funcname('SIN') and is_funcname('FNZ') # Function names are three letters\n", @@ -818,16 +843,17 @@ " assert not is_varname('FNZ') and not is_varname('A10') and not is_varname('')\n", " assert is_relational('>') and is_relational('>=') and not is_relational('+')\n", " \n", - " assert test_parse('A + B * X + C', Opcall(Opcall('A', '+', Opcall('B', '*', 'X')), '+', 'C'))\n", - " assert test_parse('A + B + X + C', Opcall(Opcall(Opcall('A', '+', 'B'), '+', 'X'), '+', 'C'))\n", - " assert test_parse('SIN(X)^2', Opcall(Funcall('SIN', 'X'), '^', 2))\n", - " assert test_parse('10 ^ 2 ^ 3', Opcall(10, '^', Opcall(2, '^', 3))) # right associative\n", - " assert test_parse('10 - 2 - 3', Opcall(Opcall(10, '-', 2), '-', 3)) # left associative\n", - " assert test_parse('A(I)+M(I, J)', Opcall(Subscript(var='A', indexes=['I']), '+', \n", - " Subscript(var='M', indexes=['I', 'J'])))\n", - " assert test_parse('X * -1', Opcall('X', '*', Funcall('NEG', 1.0)))\n", - " assert test_parse('X--Y--Z', Opcall(Opcall('X', '-', Funcall('NEG', 'Y')), '-', Funcall('NEG', 'Z')))\n", - " assert test_parse('((((X))))', 'X')\n", + " assert test_exp('A + B * X + C', Opcall(Opcall('A', '+', Opcall('B', '*', 'X')), '+', 'C'))\n", + " assert test_exp('A + B + X + C', Opcall(Opcall(Opcall('A', '+', 'B'), '+', 'X'), '+', 'C'))\n", + " assert test_exp('SIN(X)^2', Opcall(Funcall('SIN', 'X'), '^', 2))\n", + " assert test_exp('10 ^ 2 ^ 3', Opcall(10, '^', Opcall(2, '^', 3))) # right associative\n", + " assert test_exp('10 - 2 - 3', Opcall(Opcall(10, '-', 2), '-', 3)) # left associative\n", + " assert test_exp('A(I)+M(I, J)', Opcall(Subscript(var='A', indexes=['I']), '+', \n", + " Subscript(var='M', indexes=['I', 'J'])))\n", + " assert test_exp('X * -1', Opcall('X', '*', Funcall('NEG', 1.0)))\n", + " assert test_exp('X--Y--Z', Opcall(Opcall('X', '-', Funcall('NEG', 'Y')), \n", + " '-', Funcall('NEG', 'Z')))\n", + " assert test_exp('((((X))))', 'X')\n", " return 'ok'\n", "\n", "test_parser()" @@ -844,7 +870,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "metadata": { "collapsed": true }, @@ -881,9 +907,9 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -944,9 +970,9 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -962,7 +988,7 @@ " 'SIN': math.sin, 'COS': math.cos, 'TAN': math.tan, 'ATN': math.atan, \n", " 'ABS': abs, 'EXP': math.exp, 'LOG': math.log, 'SQR': math.sqrt, 'INT': int,\n", " '>': op.gt, '<': op.lt, '=': op.eq, '>=': op.ge, '<=': op.le, '<>': op.ne, \n", - " '^': pow, '+': op.add, '-': op.sub, '*': op.mul, '/': op.truediv, \n", + " '^': pow, '+': op.add, '-': op.sub, '*': op.mul, '/': op.truediv, '%': op.mod,\n", " 'RND': lambda _: random.random(), 'NEG': op.neg}\n", " data = deque() # A queue of numbers that READ can read from\n", " for (_, typ, args) in stmts:\n", @@ -1040,9 +1066,9 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -1057,11 +1083,11 @@ " newline()\n", " \n", "def print_string(s): \n", - " \"Print a string, keeping track of column, and advancing to newline if at or beyond column 75.\"\n", + " \"Print a string, keeping track of column, and advancing to newline if at or beyond column 100.\"\n", " global column\n", " print(s, end='')\n", " column += len(s)\n", - " if column >= 75: newline()\n", + " if column >= 100: newline()\n", " \n", "def pad(width): \n", " \"Pad out to the column that is the next multiple of width.\"\n", @@ -1082,10 +1108,8 @@ }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, + "execution_count": 26, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1093,7 +1117,7 @@ "text": [ "\n", "10 REM POWER TABLE\n", - "11 DATA 8, 4\n", + "11 DATA 8, 4\n", "15 READ N0, P0\n", "20 PRINT \"N\",\n", "25 FOR P = 2 to P0\n", @@ -1120,9 +1144,8 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ @@ -1149,7 +1172,7 @@ " Stmt(num=99, typ='END', args=[])]" ] }, - "execution_count": 26, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -1160,10 +1183,8 @@ }, { "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, + "execution_count": 28, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1197,10 +1218,8 @@ }, { "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, + "execution_count": 29, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1237,10 +1256,8 @@ }, { "cell_type": "code", - "execution_count": 29, - "metadata": { - "collapsed": false - }, + "execution_count": 30, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1277,18 +1294,15 @@ }, { "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": false - }, + "execution_count": 31, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1 2 3 4 5 \n", - "6 7 8 9 10 \n", - "11 12 " + "1 2 3 4 5 6 7 \n", + "8 9 10 11 12 " ] } ], @@ -1306,10 +1320,8 @@ }, { "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, + "execution_count": 32, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1334,14 +1346,12 @@ "N = 5 I^N:\n", "1 32 243 1024 3125 \n", "\n", - "\n", "N = 6 I^N:\n", - "1 64 729 4096 15625 \n", - "46656 \n", + "1 64 729 4096 15625 46656 \n", "\n", "N = 7 I^N:\n", - "1 128 2187 16384 78125 \n", - "279936 823543 \n", + "1 128 2187 16384 78125 279936 823543 \n", + "\n", "\n" ] } @@ -1369,19 +1379,16 @@ }, { "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": false - }, + "execution_count": 33, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1e+06 941192 884736 830584 778688 729000 681472 636056 592704 \n", - "551368 512000 474552 438976 405224 373248 343000 314432 287496 \n", - "262144 238328 216000 195112 175616 157464 140608 125000 110592 \n", - "97336 85184 74088 64000 54872 46656 39304 32768 27000 21952 17576 13824 10648 \n", + "1e+06 941192 884736 830584 778688 729000 681472 636056 592704 551368 512000 474552 \n", + "438976 405224 373248 343000 314432 287496 262144 238328 216000 195112 175616 157464 \n", + "140608 125000 110592 97336 85184 74088 64000 54872 46656 39304 32768 27000 21952 17576 13824 10648 \n", "8000 5832 4096 2744 1728 1000 512 216 64 8 0 " ] } @@ -1401,10 +1408,8 @@ }, { "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, + "execution_count": 34, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1455,39 +1460,37 @@ }, { "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, + "execution_count": 35, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ "defaultdict(float,\n", " {'J': 5.0,\n", - " ('S', (1.0, 1.0)): 40.0,\n", - " ('S', (2.0, 4.0)): 21.0,\n", - " ('P', (1.0,)): 1.25,\n", - " ('S', (3.0, 2.0)): 47.0,\n", - " ('S', (2.0, 2.0)): 16.0,\n", - " ('S', (3.0, 3.0)): 29.0,\n", - " ('S', (3.0, 5.0)): 33.0,\n", - " ('S', (1.0, 5.0)): 42.0,\n", - " ('S', (3.0, 4.0)): 16.0,\n", - " 'I': 3.0,\n", - " ('P', (3.0,)): 2.5,\n", - " ('S', (1.0, 4.0)): 29.0,\n", - " ('S', (2.0, 3.0)): 3.0,\n", - " ('S', (1.0, 3.0)): 37.0,\n", - " ('S', (2.0, 1.0)): 10.0,\n", - " ('S', (1.0, 2.0)): 20.0,\n", - " ('S', (2.0, 5.0)): 8.0,\n", " ('S', (3.0, 1.0)): 35.0,\n", + " ('S', (3.0, 4.0)): 16.0,\n", + " ('S', (3.0, 5.0)): 33.0,\n", + " ('S', (1.0, 2.0)): 20.0,\n", + " ('S', (1.0, 3.0)): 37.0,\n", + " ('S', (2.0, 3.0)): 3.0,\n", + " ('S', (2.0, 2.0)): 16.0,\n", + " ('S', (1.0, 5.0)): 42.0,\n", + " ('P', (1.0,)): 1.25,\n", + " ('S', (3.0, 3.0)): 29.0,\n", + " ('S', (2.0, 4.0)): 21.0,\n", " 'S': 169.4,\n", - " ('P', (2.0,)): 4.3})" + " 'I': 3.0,\n", + " ('P', (2.0,)): 4.3,\n", + " ('S', (3.0, 2.0)): 47.0,\n", + " ('S', (1.0, 1.0)): 40.0,\n", + " ('S', (1.0, 4.0)): 29.0,\n", + " ('S', (2.0, 5.0)): 8.0,\n", + " ('P', (3.0,)): 2.5,\n", + " ('S', (2.0, 1.0)): 10.0})" ] }, - "execution_count": 34, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -1498,19 +1501,16 @@ }, { "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, + "execution_count": 36, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "6 3 2 6 9 0 0 3 3 6 9 2 7 9 1 2 1 4 4 1 2 7 3 7 8 \n", - "5 2 5 4 4 9 7 7 0 5 4 9 7 7 5 5 4 9 3 8 6 2 6 4 5 \n", - "8 7 6 0 3 4 1 4 2 2 8 1 1 9 2 4 0 1 0 2 1 3 4 0 2 \n", - "9 0 2 7 4 1 8 4 3 2 8 3 9 3 9 3 2 4 6 8 9 0 9 5 9 \n" + "1 2 4 9 5 0 5 3 7 7 3 8 6 4 4 6 7 4 5 4 8 8 7 9 4 1 0 3 5 2 3 4 5 3 \n", + "6 5 3 1 0 9 5 6 1 4 5 7 3 1 4 3 6 3 7 2 3 0 2 2 7 5 0 8 7 9 3 9 5 7 \n", + "5 0 1 9 6 3 7 5 0 0 5 7 3 5 9 3 2 6 1 2 1 9 1 7 0 9 0 6 9 6 7 2 " ] } ], @@ -1527,10 +1527,8 @@ }, { "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, + "execution_count": 37, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1564,10 +1562,8 @@ }, { "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, + "execution_count": 38, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1602,10 +1598,8 @@ }, { "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, + "execution_count": 39, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1632,10 +1626,8 @@ }, { "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, + "execution_count": 40, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1668,90 +1660,90 @@ }, { "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, + "execution_count": 41, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Error in line '10 X = 1' at 'X = 1': unknown statement type\n", - "Error in line '20 GO TO JAIL' at 'J A I L': missing line number\n", - "Error in line '30 FOR I = 1 ' at '': expected 'TO'\n", - "Error in line '40 IF X > 0 & X < 10 GOTO 999' at '& X < 10 GOTO 999': expected 'THEN'\n", - "Error in line '50 LET Z = (Z + 1' at '': expected \")\" to end expression\n", - "Error in line '60 PRINT \"OH CANADA\", EH?' at '?': unknown expression\n", - "Error in line '70 LET Z = +3' at '+ 3': unknown expression\n", - "Error in line '80 LET X = Y ** 2' at '* 2': unknown expression\n", - "Error in line '90 LET A(I = 1' at '= 1': expected \")\" to close subscript\n", - "Error in line '100 IF A = 0 THEN 900 + 99' at '+ 99': extra tokens at end of line\n", - "Error in line '110 NEXT A(I)' at '( I )': extra tokens at end of line\n", - "Error in line '120 DEF F(X) = X ^ 2 + 1' at 'F ( X ) = X ^ 2 + 1': expected a function name\n", - "Error in line '130 IF X != 0 THEN 999' at '! = 0 THEN 999': expected a relational operator\n", - "Error in line '140 DEF FNS(X + 2*P1) = SIN(X)' at '+ 2 * P1 ) = SIN ( X )': expected ')'\n", - "Error in line '150 DEF FNY(M, B) = M * X + B' at ', B ) = M * X + B': expected ')'\n", - "Error in line '160 LET 3 = X' at '3 = X': expected a variable name\n", - "Error in line '170 LET SIN = 7 * DEADLY' at 'SIN = 7 * D E A D L Y': expected a variable name\n", - "Error in line '180 LET X = A-1(I)' at '( I )': extra tokens at end of line\n", - "Error in line 'STOP' at 'STOP': missing line number\n", - "Error in line '200 STOP IT, ALREADY' at 'I T , A L READ Y': extra tokens at end of line\n", - "PROGRAM STILL EXECUTES: 2 + 2 = 4 \n" + "Error in line '1 X = 1' at 'X = 1': unknown statement type\n", + "Error in line '2 GO TO JAIL' at 'J A I L': missing line number\n", + "Error in line '3 FOR I = 1 ' at '': expected 'TO'\n", + "Error in line '4 IF X > 0 & X < 10 GOTO 999' at '& X < 10 GOTO 999': expected 'THEN'\n", + "Error in line '5 LET Z = (Z + 1' at '': expected \")\" to end expression\n", + "Error in line '6 PRINT \"OH CANADA\", EH?' at '?': unknown expression\n", + "Error in line '7 LET Z = +3' at '+ 3': unknown expression\n", + "Error in line '8 LET X = Y ** 2' at '* 2': unknown expression\n", + "Error in line '9 LET A(I = 1' at '= 1': expected \")\" to close subscript\n", + "Error in line '10 IF A = 0 THEN 900 + 99' at '+ 99': extra tokens at end of line\n", + "Error in line '11 NEXT A(I)' at '( I )': extra tokens at end of line\n", + "Error in line '12 DEF F(X) = X ^ 2 + 1' at 'F ( X ) = X ^ 2 + 1': expected a function name\n", + "Error in line '13 IF X != 0 THEN 999' at '! = 0 THEN 999': expected a relational operator\n", + "Error in line '14 DEF FNS(X + 2*P1) = SIN(X)' at '+ 2 * P1 ) = SIN ( X )': expected ')'\n", + "Error in line '15 DEF FNY(M, B) = M * X + B' at ', B ) = M * X + B': expected ')'\n", + "Error in line '16 LET 3 = X' at '3 = X': expected a variable name\n", + "Error in line '17 LET SIN = 7 * DEADLY' at 'SIN = 7 * D E A D L Y': expected a variable name\n", + "Error in line '18 LET X = A-1(I)' at '( I )': extra tokens at end of line\n", + "Error in line '19 FOR SCORE + 7' at 'C O R E + 7': expected '='\n", + "Error in line '20 STOP IN NAME(LOVE)' at 'I N N A M E ( L O V E )': extra tokens at end of line\n", + "Error in line '85 ENDURANCE.' at 'U R A N C E .': extra tokens at end of line\n", + "ADD 2 + 2 = 4 \n" ] } ], "source": [ "run('''\n", - "10 X = 1\n", - "20 GO TO JAIL\n", - "30 FOR I = 1 \n", - "40 IF X > 0 & X < 10 GOTO 999\n", - "50 LET Z = (Z + 1\n", - "60 PRINT \"OH CANADA\", EH?\n", - "70 LET Z = +3\n", - "80 LET X = Y ** 2\n", - "90 LET A(I = 1\n", - "100 IF A = 0 THEN 900 + 99\n", - "110 NEXT A(I)\n", - "120 DEF F(X) = X ^ 2 + 1\n", - "130 IF X != 0 THEN 999\n", - "140 DEF FNS(X + 2*P1) = SIN(X)\n", - "150 DEF FNY(M, B) = M * X + B\n", - "160 LET 3 = X\n", - "170 LET SIN = 7 * DEADLY\n", - "180 LET X = A-1(I)\n", - "STOP\n", - "200 STOP IT, ALREADY\n", - "998 PRINT \"PROGRAM STILL EXECUTES: 2 + 2 = \" 2 + 2\n", - "999 END\n", + "1 X = 1\n", + "2 GO TO JAIL\n", + "3 FOR I = 1 \n", + "4 IF X > 0 & X < 10 GOTO 999\n", + "5 LET Z = (Z + 1\n", + "6 PRINT \"OH CANADA\", EH?\n", + "7 LET Z = +3\n", + "8 LET X = Y ** 2\n", + "9 LET A(I = 1\n", + "10 IF A = 0 THEN 900 + 99\n", + "11 NEXT A(I)\n", + "12 DEF F(X) = X ^ 2 + 1\n", + "13 IF X != 0 THEN 999\n", + "14 DEF FNS(X + 2*P1) = SIN(X)\n", + "15 DEF FNY(M, B) = M * X + B\n", + "16 LET 3 = X\n", + "17 LET SIN = 7 * DEADLY\n", + "18 LET X = A-1(I)\n", + "19 FOR SCORE + 7\n", + "20 STOP IN NAME(LOVE)\n", + "80 REMARKABLY, THE INTERPRETER\n", + "81 REMEDIES THE ERRORS, AND THE PROPGRAM\n", + "82 REMAINS AN EXECUTABLE ENTITY, UN-\n", + "83 REMITTENTLY RUNNING, WITH NO\n", + "84 REMORSE OR REGRETS, AND WITH GREAT\n", + "85 ENDURANCE.\n", + "98 PRINT \"ADD 2 + 2 = \" 2 + 2\n", + "99 END\n", "''')" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ - "# Final Program\n", + "# Longer Program: Life\n", "\n", - "Now for a final, longer example, Conway's Game of [Life](https://en.wikipedia.org/wiki/Conway's_Game_of_Life),\n", - "which shows that BASIC is capable of handling a non-trivial problem—but I wouldn't want to rely on it for anything much bigger. This should give us some added confidence in the validity of the interpreter, but I would say the interpreter needs more work before I would trust it. I hope you found working through the interpreter informative, and maybe you have ideas for how to improve it, or to develop an interpreter for another language." + "Now for a final, slightly more complicated example: Conway's Game of [Life](https://en.wikipedia.org/wiki/Conway's_Game_of_Life). " ] }, { "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": false - }, + "execution_count": 42, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " GENERATION 0 \n", + "GEN 0 \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", @@ -1762,7 +1754,7 @@ ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", - " GENERATION 1 \n", + "GEN 1 \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", @@ -1773,7 +1765,7 @@ ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", - " GENERATION 2 \n", + "GEN 2 \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", @@ -1784,7 +1776,7 @@ ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", - " GENERATION 3 \n", + "GEN 3 \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", @@ -1795,7 +1787,7 @@ ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", - " GENERATION 4 \n", + "GEN 4 \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", @@ -1806,7 +1798,7 @@ ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", - " GENERATION 5 \n", + "GEN 5 \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . O O . . . . . \n", @@ -1817,7 +1809,7 @@ ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", - " GENERATION 6 \n", + "GEN 6 \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . O O O . . . . \n", @@ -1828,7 +1820,7 @@ ". . . . . . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", - " GENERATION 7 \n", + "GEN 7 \n", ". . . . . . . . . . \n", ". . . . O . . . . . \n", ". . . O . O . . . . \n", @@ -1839,7 +1831,7 @@ ". . . . O . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", - " GENERATION 8 \n", + "GEN 8 \n", ". . . . . . . . . . \n", ". . . . O . . . . . \n", ". . . O O O . . . . \n", @@ -1850,7 +1842,7 @@ ". . . . O . . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", - " GENERATION 9 \n", + "GEN 9 \n", ". . . . . . . . . . \n", ". . . O O O . . . . \n", ". . O . . . O . . . \n", @@ -1861,7 +1853,7 @@ ". . . O O O . . . . \n", ". . . . . . . . . . \n", ". . . . . . . . . . \n", - " GENERATION 10 \n", + "GEN 10 \n", ". . . . O . . . . . \n", ". . . O O O . . . . \n", ". . O O O O O . . . \n", @@ -1878,15 +1870,17 @@ "source": [ "run('''\n", "100 REM CONWAY'S GAME OF LIFE\n", - "102 REM G IS NUMBER OF GENERATIONS, M IS MATRIX SIZE (M X M)\n", - "104 REM A(X, Y) IS 1 IFF CELL AT (X, Y) IS LIVE\n", - "106 REM L(SELF_ALIVE, NEIGHBORS_ALIVE) IS 1 IFF CELL WITH THOSE COUNTS SHOULD LIVE ON\n", - "110 LET G = 10\n", - "120 LET M = 10\n", - "125 READ A(3,4), A(3,5), A(3,6), A(6,5), A(6,6), A(7,5), A(7,6)\n", - "130 DATA 1, 1, 1, 1, 1, 1, 1\n", - "140 READ L(0, 3), L(1, 3), L(1, 2)\n", - "145 DATA 1, 1, 1\n", + "\n", + "102 REM G IS NUMBER OF GENERATIONS, \n", + "104 REM M IS MATRIX SIZE (M X M)\n", + "106 REM L(SELF, NEIGHBORS_ALIVE) IS 1 IFF CELL WITH THOSE COUNTS LIVES\n", + "108 REM A(X, Y) IS 1 IFF CELL AT (X, Y) IS LIVE\n", + "110 REM B(X, Y) GETS THE NEXT GENERATION\n", + "\n", + "120 READ G, M, L(0,3), L(1,3), L(1,2)\n", + "121 DATA 10, 10, 1, 1, 1\n", + "130 READ A(3,4), A(3,5), A(3,6), A(6,5), A(6,6), A(7,5), A(7,6)\n", + "131 DATA 1, 1, 1, 1, 1, 1, 1\n", "\n", "150 REM MAIN LOOP: PRINT, THEN REPEAT G TIMES: UPDATE / COPY / PRINT\n", "155 LET I = 0\n", @@ -1898,7 +1892,7 @@ "210 NEXT I\n", "220 STOP\n", "\n", - "300 REM SUBROUTINE: UPDATE B = NEXT_GENERATION(A)\n", + "300 REM ========== UPDATE B = NEXT_GEN(A)\n", "310 FOR Y = 1 TO M\n", "320 FOR X = 1 TO M\n", "325 LET N = A(X-1,Y)+A(X+1,Y)+A(X,Y-1)+A(X,Y+1)+A(X-1,Y-1)+A(X+1,Y+1)+A(X-1,Y+1)+A(X+1,Y-1)\n", @@ -1907,7 +1901,7 @@ "350 NEXT Y\n", "360 RETURN\n", "\n", - "500 REM SUBROUTINE: COPY A = B\n", + "500 REM ========== COPY A = B\n", "510 FOR Y = 1 TO M\n", "520 FOR X = 1 TO M\n", "530 LET A(X, Y) = B(X, Y)\n", @@ -1915,14 +1909,14 @@ "550 NEXT Y\n", "560 RETURN\n", "\n", - "700 REM SUBROUTINE: PRINT A\n", - "705 PRINT \" GENERATION \" I\n", + "700 REM ========== PRINT A\n", + "705 PRINT \"GEN \" I\n", "710 FOR Y = 1 TO M\n", "720 FOR X = 1 TO M\n", - "730 IF A(X, Y) = 0 THEN 750\n", - "740 PRINT \"O\";\n", - "750 IF A(X, Y) = 1 THEN 770\n", - "760 PRINT \".\";\n", + "730 IF A(X, Y) = 1 THEN 760\n", + "740 PRINT \".\";\n", + "750 GOTO 770\n", + "760 PRINT \"O\";\n", "770 NEXT X\n", "780 PRINT\n", "790 NEXT Y\n", @@ -1931,6 +1925,147 @@ "999 END \n", "''')" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Actually, this was an assignment in my high school BASIC class. (We used a [slightly different](https://www.grc.com/pdp-8/docs/os8_basic_reference.pdf) version of BASIC.) Back then, output was on rolls of paper, and I thought it was wasteful to print only one generation per line. So I arranged to print multiple generations on the same line, storing them until it was time to print them out. But BASIC doesn't have three-dimensional arrays, so I needed to store several generations worth of data in one `A(X, Y)` value. Today, I know that that could be done by allocating one bit for each generation, but back then I don't think I knew about binary representation, so I stored one generation in each decimal digit. That means I no longer need two matrixes, `A` and `B`; instead, the current generation will always be the value in the one's place, the previous generation in the ten's place, and the one before that in the hundred's place. (Also, I admit I cheated: I added the mod operatoir, `%`, which did not appear in early versions of BASIC, just because it was useful for this program.)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "GEN 0 GEN 1 GEN 2 \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + ". . O . . . . . . . | . . . . . . . . . . | . . O . . . . . . . \n", + ". . O . . O O . . . | . O O O . O O . . . | . . O . O O O . . . \n", + ". . O . . O O . . . | . . . . . O O . . . | . . O . O O O . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + "GEN 3 GEN 4 GEN 5 \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . O O . . . . . \n", + ". . . O . O . . . . | . . O O O O . . . . | . . O . O O . . . . \n", + ". O O . O . O . . . | . . O . O . O . . . | . . O . . . O . . . \n", + ". . . . O . O . . . | . . . O O . O . . . | . . . O O . O . . . \n", + ". . . . . O . . . . | . . . . . O . . . . | . . . . O O . . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + "GEN 6 GEN 7 GEN 8 \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + ". . . . . . . . . . | . . . . O . . . . . | . . . . O . . . . . \n", + ". . . O O O . . . . | . . . O . O . . . . | . . . O O O . . . . \n", + ". . O . O O . . . . | . . O . . . O . . . | . . O O . O O . . . \n", + ". . O . . . O . . . | . . O . . . O . . . | . O O O . O O O . . \n", + ". . . O O . O . . . | . . O . . . O . . . | . . O O . O O . . . \n", + ". . . O O O . . . . | . . . O . O . . . . | . . . O O O . . . . \n", + ". . . . . . . . . . | . . . . O . . . . . | . . . . O . . . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n", + "GEN 9 GEN 10 GEN 11 \n", + ". . . . . . . . . . | . . . . O . . . . . | . . . O O O . . . . \n", + ". . . O O O . . . . | . . . O O O . . . . | . . O . . . O . . . \n", + ". . O . . . O . . . | . . O O O O O . . . | . O . . . . . O . . \n", + ". O . . . . . O . . | . O O . . . O O . . | O . . . O . . . O . \n", + ". O . . . . . O . . | O O O . . . O O O . | O . . O . O . . O . \n", + ". O . . . . . O . . | . O O . . . O O . . | O . . . O . . . O . \n", + ". . O . . . O . . . | . . O O O O O . . . | . O . . . . . O . . \n", + ". . . O O O . . . . | . . . O O O . . . . | . . O . . . O . . . \n", + ". . . . . . . . . . | . . . . O . . . . . | . . . O O O . . . . \n", + ". . . . . . . . . . | . . . . . . . . . . | . . . . . . . . . . \n" + ] + } + ], + "source": [ + "run('''\n", + "100 REM CONWAY'S GAME OF LIFE\n", + "\n", + "102 REM G IS NUMBER OF GENERATIONS, \n", + "104 REM M IS MATRIX SIZE (M X M)\n", + "106 REM L(SELF, NEIGHBORS_ALIVE) IS 1 IFF CELL WITH THOSE COUNTS LIVES\n", + "108 REM A(X, Y) STORES THE HISTORY OF THE CELL AT (X, Y); 1 MEANS LIVE,\n", + "110 REM BUT WE STORE SEVERAL GENERATIONS: A(X, Y) = 100 MEANS THE CELL\n", + "112 REM IS DEAD IN THE CURRENT AND PREVIOUS GENERATION (00), BUT LIVE IN THE\n", + "114 REM GENERATION BEFORE THAT (1). WE STORE MULTIPLE GENERATIONS SO THAT\n", + "116 REM WE CAN PRINT THEM OUT ON ONE LINE, SAVING SPACE/PAPER.\n", + "\n", + "120 READ G, M, L(0,3), L(1,3), L(1,2)\n", + "122 DATA 11, 10, 1, 1, 1\n", + "124 READ A(3,4), A(3,5), A(3,6), A(6,5), A(6,6), A(7,5), A(7,6)\n", + "126 DATA 1, 1, 1, 1, 1, 1, 1\n", + "\n", + "130 REM FNA(N) = THE PREVIOUS GENERATION'S VALUE\n", + "132 DEF FNA(N) = INT(N / 10) % 10\n", + "\n", + "134 REM FNC(N) = THE GENERATION IN COLUMN C; FNC(123) = C FOR EACH C IN 1..3\n", + "136 DEF FNC(N) = FNA(N / (10 ^ (2 - C)))\n", + "\n", + "150 REM MAIN LOOP: DO 3 UPDATES (2 FIRST TIME), THEN PRINT AND SHIFT\n", + "160 FOR I = 1 TO G\n", + "170 GOSUB 300\n", + "175 IF I % 3 <> 2 THEN 200\n", + "180 GOSUB 700\n", + "190 GOSUB 800\n", + "200 NEXT I\n", + "210 STOP\n", + "\n", + "300 REM ========== UPDATE A: SHIFT OLD GENS LEFT; ADD IN NEW GEN\n", + "310 FOR Y = 1 TO M\n", + "320 FOR X = 1 TO M \n", + "330 LET A(X, Y) = 10 * A(X, Y)\n", + "340 NEXT X\n", + "350 NEXT Y\n", + "360 FOR Y = 1 TO M\n", + "370 FOR X = 1 TO M \n", + "380 LET N1 = FNA(A(X+1,Y-1)) + FNA(A(X+1,Y)) + FNA(A(X+1,Y+1)) + FNA(A(X,Y-1))\n", + "390 LET N2 = FNA(A(X-1,Y-1)) + FNA(A(X-1,Y)) + FNA(A(X-1,Y+1)) + FNA(A(X,Y+1))\n", + "400 LET S = FNA(A(X, Y))\n", + "410 LET A(X, Y) = A(X, Y) + L(S, N1 + N2)\n", + "420 NEXT X\n", + "430 NEXT Y\n", + "440 RETURN\n", + "\n", + "700 REM ========== PRINT A (3 GENERATIONS ACROSS THE PAGE)\n", + "705 PRINT \"GEN \" I-2, \" \", \" GEN \" I-1, \" \", \" GEN \" I\n", + "710 FOR Y = 1 TO M\n", + "715 FOR C = 1 TO 3\n", + "720 FOR X = 1 TO M\n", + "730 IF FNC(A(X, Y)) = 1 THEN 760\n", + "740 PRINT \".\";\n", + "750 GOTO 770\n", + "760 PRINT \"O\";\n", + "770 NEXT X\n", + "772 IF C = 3 THEN 777\n", + "775 PRINT \"|\";\n", + "777 NEXT C\n", + "780 PRINT\n", + "790 NEXT Y\n", + "795 RETURN\n", + "\n", + "800 REM ========== FORGET ALL BUT THE MOST RECENT GENERATION IN A\n", + "810 FOR Y = 1 TO M\n", + "820 FOR X = 1 TO M\n", + "830 LET A(X, Y) = A(X, Y) % 10\n", + "840 NEXT X\n", + "850 NEXT Y\n", + "860 RETURN\n", + "\n", + "999 END \n", + "''')" + ] } ], "metadata": { @@ -1949,9 +2084,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.1" + "version": "3.5.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/ipynb/Beal.ipynb b/ipynb/Beal.ipynb index 71cad1f..9453899 100644 --- a/ipynb/Beal.ipynb +++ b/ipynb/Beal.ipynb @@ -11,7 +11,7 @@ } }, "source": [ - "

Peter Norvig 22 October 2015, revised 28 October 2015, 4 July 2017
\n", + "
Peter Norvig 2000; revised 2015—2018
\n", "\n", "# Beal's Conjecture Revisited\n", "\n", @@ -25,78 +25,52 @@ "made his conjecture in 1993:\n", "\n", "> If $A^x + B^y = C^z$, \n", - ">
where $A, B, C, x, y, z$ are positive integers and $x, y, z$ are all greater than $2$, \n", + ">
where $A, B, C, x, y, z$ are positive integers \n", + ">
and $x, y, z$ are all greater than $2$, \n", ">
then $A, B$ and $C$ must have a common prime factor.\n", "\n", - "[Andrew Wiles](https://en.wikipedia.org/wiki/Andrew_Wiles) proved Fermat's theorem in 1995, but Beal's conjecture remains unproved, and Beal has offered [$1,000,000](http://www.ams.org/profession/prizes-awards/ams-supported/beal-prize) for a proof or disproof. I don't have the mathematical skills of Wiles, so I could never find a proof, but I can write a program to search for counterexamples. I first wrote [that program in 2000](http://norvig.com/beal2000.html), and [my name got associated](https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=beal%20conjecture) with Beal's Conjecture, which means I get a lot of emails with purported proofs or counterexamples (many asking how they can collect their prize money). So far, all the emails have been wrong. This page catalogs some of the more common errors and updates my 2000 program." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ + "[Andrew Wiles](https://en.wikipedia.org/wiki/Andrew_Wiles) proved Fermat's theorem in 1995, but Beal's conjecture remains unproved, and Beal has offered [one million dollars](http://www.ams.org/profession/prizes-awards/ams-supported/beal-prize) for a proof or disproof. I don't have the mathematical skills of Wiles, so I could never find a proof, but I can write a program to search for counterexamples. I first wrote [that program in 2000](http://norvig.com/beal2000.html), and [my name got associated](https://www.google.com/webhp?#q=beal conjecture) with Beal's Conjecture, which means I get a lot of emails with purported proofs or counterexamples (many asking how they can collect their prize money). So far, all the emails have been wrong. This notebook catalogs some of the more common errors, updates my 2000 program, and introduces this tool for verifying counterexamples:\n", + " \n", + "\n", + "| [**Online Beal Counterexample Checker**](http://norvig.com/bealcheck.html) |\n", + "|:---:|\n", + "\n", + "\n", "# How to Not Win A Million Dollars\n", "\n", "\n", - "* A proof must show that there are no examples that satisfy the conditions. A common error is to show how a certain pattern generates an infinite collection of numbers that satisfy $A^x + B^y = C^z$ and then show that in all of these, $A, B, C$ have a common factor. But that's not good enough, unless you can also prove that no other pattern exists.\n", + "* A proof must show that there are **no** examples that satisfy the conditions. A common error is to show how a certain pattern generates an infinite number of $(A, x, B, y, C, z)$ examples, and that the conjecture holds for this entire infinite collection. But that's not good enough, unless you can also prove that the conjecture holds for every other possible pattern.\n", "\n", - "

\n", "\n", "* It is valid to use proof by contradiction: assume the conjecture is true, and show that that leads to a contradiction. It is not valid to use proof by circular reasoning: assume the conjecture is true, put in some irrelevant steps, and show that it follows that the conjecture is true.\n", "\n", "\n", - "

\n", + "* A valid counterexample needs to satisfy all four conditions—don't leave one out.\n", "\n", - "* A valid counterexample needs to satisfy all four conditions—don't leave one out:\n", "\n", - "> $A, B, C, x, y, z$ are positive integers
\n", - "$x, y, z > 2$
\n", - "$A^x + B^y = C^z$
\n", - "$A, B, C$ have no common prime factor.\n", + "* One correspondent claimed that $27^4 + 162 ^ 3 = 9 ^ 7$ was a solution, because the first three conditions hold, and the common factor is 9, which isn't a prime. But of course, if $A, B, C$ have 9 as a common factor, then they also have 3, and 3 is prime. \"No common prime factor\" means the same thing as \"no common factor greater than 1.\"\n", "\n", - "(If you think you might have a valid counterexample, before you share it with Andrew Beal or anyone else, you can check it with my [Online Beal Counterexample Checker](http://norvig.com/bealcheck.html).)\n", - "\n", - "

\n", - "\n", - "* One correspondent claimed that $27^4 + 162 ^ 3 = 9 ^ 7$ was a solution, because the first three conditions hold, and the common factor is 9, which isn't a prime. But of course, if $A, B, C$ have 9 as a common factor, then they also have 3, and 3 is prime. The phrase \"no common prime factor\" means the same thing as \"no common factor greater than 1.\"\n", - "\n", - "

\n", "\n", "* Another claimed that $2^3+2^3=2^4$ was a counterexample, because all the bases are 2, which is prime, and prime numbers have no prime factors. But that's not true; a prime number has itself as a factor.\n", "\n", - "

\n", "\n", - "* A creative person offered $1359072^4 - 940896^4 = 137998080^3$, which fails both because $3^3 2^5 11^2$ is a common factor, and because it has a subtraction rather than an addition (although, as Julius Jacobsen pointed out, that can be rectified by adding $940896^4$ to both sides).\n", + "* A creative person offered $ 1359072^4 - 940896^4 = 137998080^3$, which fails both because $ 3^3 2^5 11^2 $ is a common factor, and because it has a subtraction rather than an addition (although, as Julius Jacobsen pointed out, it could be rewritten as $ 137998080^3 + 940896^4 = 1359072^4 $).\n", "\n", - "

\n", "\n", - "* Mustafa Pehlivan came up with an example involving 76-million-digit numbers, which took some work to prove wrong (by using modulo arithmetic). \n", + "* Mustafa Pehlivan came up with an example involving 76-million-digit numbers, which took some work to prove wrong (using modulo arithmetic). \n", "\n", - "

\n", "\n", - "* Another Beal fan started by saying \"Let $C = 43$ and $z = 3$. Since $43 = 21 + 22$, we have $43^3 = (21^3 + 22^3).$\" But of course $(a + b)^3 \\ne (a^3 + b^3)$. This fallacy is called [the freshman's dream](https://en.wikipedia.org/wiki/Freshman%27s_dream) (although I remember having different dreams as a freshman).\n", + "* Another Beal fan started by saying \"Let $C = 43$ and $z = 3$. Since $43 = 21 + 22$, we have $43^3 = (21^3 + 22^3)$.\" But of course $(a + b)^3 \\ne (a^3 + b^3)$. This fallacy is called [the freshman's dream](https://en.wikipedia.org/wiki/Freshman%27s_dream) (although I remember having different dreams as a freshman).\n", "\n", - "

\n", "\n", - "* Multiple people proposed answers similar to this one:" + "* Multiple people proposed counterexamples similar to this one:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { - "button": false, - "collapsed": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": true }, "outputs": [], "source": [ @@ -108,6 +82,7 @@ "execution_count": 2, "metadata": { "button": false, + "collapsed": false, "new_sheet": false, "run_control": { "read_only": false @@ -126,11 +101,10 @@ } ], "source": [ - "A, B, C = 60000000000000000000, 70000000000000000000, 82376613842809255677\n", - "\n", + "A, B, C = 60000000000000000001, 70000000000000000003, 82376613842809255677\n", "x = y = z = 3.\n", "\n", - "A ** x + B ** y == C ** z and gcd(gcd(A, B), C) == 1" + "A ** x + B ** y == C ** z and gcd(A, B) == gcd(B, C) == 1" ] }, { @@ -143,9 +117,9 @@ } }, "source": [ - "**WOW! The result is `True`!** Is this a real counterexample to Beal? And also a disproof of Fermat?\n", + "**WOW! The result is `True`!** The two sides of the equation are equal, and the greatest common divisor is 1. Is this a real counterexample to Beal? And also a disproof of Fermat's Last Theorem?\n", "\n", - "Alas, it is not. Notice the decimal point in \"`3.`\", indicating a floating point number, with inexact, limited precision. Change the inexact \"`3.`\" to an exact \"`3`\" and the result changes to \"`False`\". Below we see that the two sides of the equation are the same for the first 18 digits, but differ starting with the 19th: " + "Alas, it is not. The decimal point in \"`x = y = z = 3`**`.`**\" indicates a floating point number, with inexact, limited precision. Change the inexact \"`3.`\" to an exact \"`3`\" and the two sides of the equation are no longer equal. Below we see they are the same for the first 19 digits, but differ starting with the 20th: " ] }, { @@ -153,6 +127,7 @@ "execution_count": 3, "metadata": { "button": false, + "collapsed": false, "new_sheet": false, "run_control": { "read_only": false @@ -162,7 +137,7 @@ { "data": { "text/plain": [ - "(559000000000000000000000000000000000000000000000000000000000,\n", + "(559000000000000000054900000000000000002070000000000000000028,\n", " 559000000000000000063037470301555182935702892172500189973733)" ] }, @@ -186,101 +161,128 @@ } }, "source": [ - "They say \"close\" only counts in horseshoes and hand grenades, and if you threw two horseshoes at a stake on the planet [Kapteyn-b](https://en.wikipedia.org/wiki/Kapteyn_b) (a possibly habitable and thus possibly horseshoe-playing exoplanet 12.8 light years from Earth) and the two paths differed in the 19th digit, the horseshoes would end up [less than an inch](https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=12.8%20light%20years%20*%201e-19%20in%20inches) apart. That's really, really close, but close doesn't count in number theory.\n", + "They say \"close\" only counts in horseshoes and hand grenades, and if you stood in your yard and threw a horseshoe at a stake on **[Kapteyn-b](https://en.wikipedia.org/wiki/Kapteyn_b)** (an exoplanet 12.8 light years from Earth that is deemed habitable and thus possibly horseshoe-playing) and the flight path differed from the perfect path in the 20th digit, then it would end up \n", + "[about a millimeter](https://www.google.com/search?q=12.8+light+years+%2F+10%5E20+in+inches&oq=12.8+light+years+%2F+10%5E19+in+inches) \n", + "from the target. That's really, really close, but close doesn't count in number theory.\n", + "\n", + "![Kapteyn-b and Homer Simpson](https://norvig.com/homer.png)\n", + "Left: [Kapteyn-b](https://www.space.com/26115-oldest-habitable-alien-planet-kapteyn-b.html).     Right: [Homer Simpson](https://www.youtube.com/watch?time_continue=1&v=ReOQ300AcSU).\n", "\n", "\n", "# *The Simpsons* and Fermat\n", "\n", "In two different [episodes of *The Simpsons*](http://www.npr.org/sections/krulwich/2014/05/08/310818693/did-homer-simpson-actually-solve-fermat-s-last-theorem-take-a-look), close counterexamples to Fermat's Last Theorem are shown: \n", - "$1782^{12} + 1841^{12} = 1922^{12}$ and $3987^{12} + 4365^{12} = 4472^{12}$. These were designed by *Simpsons* writer David X. Cohen to be correct up to the precision found in most handheld calculators. Cohen found the equations with a program that must have been something like this:" + "$3987^{12} + 4365^{12} = 4472^{12}$ and $1782^{12} + 1841^{12} = 1922^{12}$. These were designed by *Simpsons* writer David X. Cohen to be correct up to the precision of a typical handheld calculator; here we see the two sides of the second equation agree on the first ten digits, `6397665634`, and then differ:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { - "button": false, - "collapsed": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(63976656349698612616236230953154487896987106,\n", + " 63976656348486725806862358322168575784124416)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "from itertools import combinations\n", - "\n", - "def simpsons(bases, powers):\n", - " \"\"\"Find the integers (A, B, C, n) that come closest to solving \n", - " Fermat's equation, A ** n + B ** n == C ** n. \n", - " Let A, B range over all pairs of bases and n over all powers.\"\"\"\n", - " equations = ((A, B, iroot(A ** n + B ** n, n), n)\n", - " for A, B in combinations(bases, 2)\n", - " for n in powers)\n", - " return min(equations, key=relative_error)\n", - "\n", - "def iroot(i, n): \n", - " \"The integer closest to the nth root of i.\"\n", - " return int(round(i ** (1./n)))\n", - "\n", - "def relative_error(equation):\n", - " \"Error between LHS and RHS of equation, relative to RHS.\" \n", - " (A, B, C, n) = equation\n", - " LHS = A ** n + B ** n\n", - " RHS = C ** n\n", - " return abs(LHS - RHS) / RHS" + "3987 ** 12 + 4365 ** 12, 4472 ** 12" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Cohen must have found the equations with a program something like this (here `bases` is a sequence of integers to consider for the values of `A` and `B`; the variables `An` and `Bn` hold the `A**n` and `B**n` values; `lhs` is their sum (the left-hand-side of the equation); and the function `Cn` computes the `C**n` that is closest to that sum):" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "(1782, 1841, 1922, 12)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "simpsons(range(1000, 2000), [11, 12, 13])" + "from itertools import combinations\n", + "\n", + "def simpsons(bases, n):\n", + " \"\"\"Print the (A**n + B**n = C**n) equation that minimizes the relative error,\n", + " for a given n and A, B values from the sequence of integers `bases`.\"\"\"\n", + " def Cn(lhs): return iroot(sum(lhs), n) ** n\n", + " def err(lhs): return abs(sum(lhs) - Cn(lhs)) / sum(lhs)\n", + " def show(Xn): return '{} ** {}'.format(iroot(Xn, n), n)\n", + " powers = [b ** n for b in bases]\n", + " (An, Bn) = lhs = min(combinations(powers, 2), key=err)\n", + " print('{} + {} == {} (with error {:.0g})'\n", + " .format(show(An), show(Bn), show(Cn(lhs)), err(lhs)))\n", + "\n", + "def iroot(x, n): \"integer nth root\"; return int(round(x ** (1 / n)))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, "outputs": [ { - "data": { - "text/plain": [ - "(3987, 4365, 4472, 12)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "1782 ** 12 + 1841 ** 12 == 1922 ** 12 (with error 3e-10)\n", + "3987 ** 12 + 4365 ** 12 == 4472 ** 12 (with error 2e-11)\n" + ] } ], "source": [ - "simpsons(range(3000, 5000), [12])" + "simpsons(range(1000, 2000), 12)\n", + "simpsons(range(2000, 5000), 12)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are the same two equations that David X. Cohen found. \n", + "\n", + "Can we find other near-misses? I'll try each single-digit exponent. I want A, B, C to be 4 digits each, so I'll limit A and B to 9500 (not 9999), to try to keep C from overflowing to 5 digits. (This takes around 10 minutes to run.)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5856 ** 3 + 9036 ** 3 == 9791 ** 3 (with error 1e-12)\n", + "2396 ** 4 + 4551 ** 4 == 4636 ** 4 (with error 4e-11)\n", + "3993 ** 5 + 7767 ** 5 == 7822 ** 5 (with error 2e-11)\n", + "6107 ** 6 + 8919 ** 6 == 9066 ** 6 (with error 8e-13)\n", + "5592 ** 7 + 9079 ** 7 == 9122 ** 7 (with error 2e-11)\n", + "4749 ** 8 + 8952 ** 8 == 8959 ** 8 (with error 3e-11)\n", + "5433 ** 9 + 6725 ** 9 == 6828 ** 9 (with error 4e-11)\n" + ] + } + ], + "source": [ + "for n in range(3, 10):\n", + " simpsons(range(1000, 9500), n)" ] }, { @@ -293,21 +295,24 @@ } }, "source": [ - "# Back to Beal\n", + "The equation for *n*=6 has the smallest error yet (in the 12th decimal place).\n", + "\n", + "# Back to `beal`\n", "\n", "In October 2015 I looked back at my original [program from 2000](http://norvig.com/beal2000.html).\n", - "I ported it from Python 1.5 to 3.5 (by putting parens around the argument to `print` and adding `long = int`). The program runs 250 times faster today than it did in 2000, a tribute to both computer hardware engineers and the developers of the Python interpreter.\n", + "I ported it from Python 1.5 to 3.5 (`print` is now a function, `long` is `int`). It runs 250 times faster today, a tribute to both computer hardware engineers and the developers of the Python interpreter.\n", "\n", - "I found that I was a bit confused about the definition of [the problem in 2000](https://web.archive.org/web/19991127081319/http://bealconjecture.com/). I thought then that, *by definition*, $A$ and $B$ could not have a common factor, but actually, the definition of the conjecture only rules out examples where all three of $A, B, C$ share a common factor. Mark Tiefenbruck (and later Edward P. Berlin and Shen Lixing) wrote to point out that my thought was actually correct, not by definition, but by derivation: if $A$ and $B$ have a commmon prime factor $p$, then the sum of $A^x + B^y$ must also have that factor $p$, and since $A^x + B^y = C^z$, then $C^z$ and hence $C$ must have the factor $p$. So I was wrong twice, and in this case two wrongs did make a right.\n", + "I found that I had [misstated the problem](https://web.archive.org/web/19991127081319/http://bealconjecture.com/) in 2000. I thought that, *by definition*, $A$ and $B$ could not have a common factor, but actually, \n", + "the conjecture only rules out examples where all three of $A, B, C$ share a common factor. But, as [Mark Tiefenbruck](mailto:mark @tiefenbruck.org) (as well as Edward P. Berlin and Shen Lixing) pointed out, my statement is correct, not by definition, but *by derivation:* if $A$ and $B$ have a common prime factor $p$, then the sum of $A^x + B^y$ must also have that factor $p$, and hence $C^z$, and $C$, must have the factor $p$.\n", "\n", - "Mark Tiefenbruck also suggested an optimization: only consider exponents that are odd primes, or 4. The idea is that a number like 512 can be expressed as either $2^9$ or $8^3$, and my program doesn't need to consider both. In general, any time we have a composite exponent, such as $b^{qp}$, where $p$ is prime, we should ignore $b^{(qp)}$, and instead consider only $(b^q)^p$. There's one complication to this scheme: 2 is a prime, but 2 is not a valid exponent for a Beal counterexample. So we will allow 4 as an exponent, as well as all odd primes up to `max_x`.\n", + "Mark Tiefenbruck also suggested another optimization: only consider exponents that are odd primes, or 4. The idea is that a number like 512 can be expressed as either $2^9$ or $8^3$, and my program doesn't need to consider both. In general, any time we have a composite exponent, such as $b^{qp}$, where $p$ is prime, we should ignore $A=b, x=qp$, and instead consider only $A=b^q, x=p$. There's one complication to this scheme: 2 is a prime, but 2 is not a valid exponent for a Beal counterexample. So we will allow 4 as an exponent, as well as all odd primes up to `max_x`.\n", "\n", - "Here is the complete, updated, refactored, optimized program:" + "Here is the complete, updated program:" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "button": false, "collapsed": true, @@ -373,9 +378,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "button": false, + "collapsed": false, "new_sheet": false, "run_control": { "read_only": false @@ -386,8 +392,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 256 ms, sys: 1.44 ms, total: 257 ms\n", - "Wall time: 256 ms\n" + "CPU times: user 353 ms, sys: 4.84 ms, total: 358 ms\n", + "Wall time: 376 ms\n" ] } ], @@ -405,14 +411,15 @@ } }, "source": [ - "The execution time goes up roughly with the square of `max_A`, so the following should take about 100 times longer:" + "The execution time goes up roughly with the square of `max_A`, so the following should take about 25 times longer:" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": { "button": false, + "collapsed": false, "new_sheet": false, "run_control": { "read_only": false @@ -423,13 +430,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 29.1 s, sys: 25.2 ms, total: 29.2 s\n", - "Wall time: 29.2 s\n" + "CPU times: user 8.97 s, sys: 56.6 ms, total: 9.03 s\n", + "Wall time: 9.12 s\n" ] } ], "source": [ - "%time beal(1000, 100)" + "%time beal(500, 100)" ] }, { @@ -454,9 +461,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": { "button": false, + "collapsed": false, "new_sheet": false, "run_control": { "read_only": false @@ -474,7 +482,7 @@ " 6: [216, 1296, 7776, 279936]}" ] }, - "execution_count": 10, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -499,9 +507,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": { "button": false, + "collapsed": false, "new_sheet": false, "run_control": { "read_only": false @@ -534,7 +543,7 @@ " 279936: 6}" ] }, - "execution_count": 11, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -546,8 +555,10 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": {}, + "execution_count": 13, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -555,7 +566,7 @@ "3" ] }, - "execution_count": 12, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -584,9 +595,10 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": { "button": false, + "collapsed": false, "new_sheet": false, "run_control": { "read_only": false @@ -632,9 +644,10 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": { "button": false, + "collapsed": false, "new_sheet": false, "run_control": { "read_only": false @@ -647,7 +660,7 @@ "{True}" ] }, - "execution_count": 14, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -676,12 +689,12 @@ } }, "source": [ - "I get nervous having an incorrect version of `gcd` around; let's change it back, quick!" + "I get nervous having an incorrect version of `gcd` around: change it back, quick!" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": { "button": false, "collapsed": true, @@ -712,9 +725,10 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": { "button": false, + "collapsed": false, "new_sheet": false, "run_control": { "read_only": false @@ -727,7 +741,7 @@ "'tests pass'" ] }, - "execution_count": 16, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -832,7 +846,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": { "button": false, "collapsed": true, @@ -897,8 +911,10 @@ }, { "cell_type": "code", - "execution_count": 18, - "metadata": {}, + "execution_count": 19, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -911,7 +927,7 @@ " 6: [(216, 3), (296, 4), (776, 5), (936, 7)]}" ] }, - "execution_count": 18, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -937,9 +953,10 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "metadata": { "button": false, + "collapsed": false, "new_sheet": false, "run_control": { "read_only": false @@ -971,7 +988,7 @@ " 936: [(6, 7)]})" ] }, - "execution_count": 19, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -995,9 +1012,10 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "metadata": { "button": false, + "collapsed": false, "new_sheet": false, "run_control": { "read_only": false @@ -1008,8 +1026,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 35.5 s, sys: 44.1 ms, total: 35.5 s\n", - "Wall time: 35.5 s\n" + "CPU times: user 56 s, sys: 436 ms, total: 56.4 s\n", + "Wall time: 59.2 s\n" ] } ], @@ -1035,15 +1053,6 @@ "\n", "This was fun, but I can't recommend anyone spend a serious amount of computer time looking for counterexamples to the Beal Conjecture—the money you would have to spend in computer time would be more than the expected value of your prize winnings. I suggest you work on a proof rather than a counterexample, or work on some other interesting problem instead!" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { @@ -1062,7 +1071,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.6.0" } }, "nbformat": 4, diff --git a/ipynb/Bike Speed versus Grade.ipynb b/ipynb/Bike Speed versus Grade.ipynb index 5791e61..bdb51ba 100644 --- a/ipynb/Bike Speed versus Grade.ipynb +++ b/ipynb/Bike Speed versus Grade.ipynb @@ -18,20 +18,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nLiKSQv8frjJL86AyaU0AAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", @@ -47,8 +36,26 @@ "for (dist, climb, time) in csv.reader(open('dist-climb-time.csv')):\n", " if miles(dist) > 30:\n", " X.append(feet(climb) / miles(dist))\n", - " Y.append(miles(dist) / hours(time))\n", - "\n", + " Y.append(miles(dist) / hours(time))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ "plt.plot(X, Y, 'o');" ] }, @@ -63,14 +70,14 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzgAAAIcCAYAAAA6xgsWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtgU1W6NvAnTe2FClpa2lLaBhQKXgbGcdTx8zoKM+KI\nRxG0hUodaFGwIlULKJQClTsKQgHl4ghSQfGgM+qo53gbUUaPjgg4jlBEE1oKpRcupk1D03x/lISm\n2Ul30p19y/P7S9Mka+29krDfvdb7LsOJEyecICIiIiIi0oEIpTtAREREREQkFQY4RERERESkGwxw\niIiIiIhINxjgEBERERGRbjDAISIiIiIi3WCAQ0REREREusEAh4iIiIiIdEPxAGfXrl3Izs7GpZde\nivj4eGzdutXj71arFUVFRbjsssvQu3dvXHXVVVizZo1CvSUiIiIiIjWLVLoDVqsVl112GbKzszFp\n0iSvvz/11FP49NNPsW7dOmRkZGDXrl2YMmUKEhMTce+99yrQYyIiIiIiUivFZ3CGDRuGWbNm4c47\n74TBYPD6+1dffYX77rsP1113HdLT03Hffffht7/9Lb7++msFektERERERGqmeIDTmd/97nd47733\nUFVVBQD48ssv8d1332HYsGEK94yIiIiIiNRG8SVqnVm8eDGmTp2Kyy+/HJGRkTAYDFiyZAkDHCIi\nIiIi8qL6AOf555/HV199hVdffRVpaWnYtWsXZs2ahYyMDNxyyy1Kd4+IiIiIiFRE1QGOzWZDaWkp\nNm/ejD/84Q8AgEsvvRR79+7FqlWrGOAQEREREZEHVefgnDlzBmfOnEFEhGc3jUYjWltbFeoVERER\nERGpleIBjtVqxb59+7B37160traisrIS+/btQ2VlJbp3747rrrsOc+bMwWeffQaz2Yzy8nJs27YN\nI0aMULrrsNlsumtLzmOqqKiQrS09jpXcbelxvDhWXafXcyhXWxwrbbXF8dJGOwDHSmttSU3xAGf3\n7t248cYbcfPNN8Nms2HhwoW46aabsHDhQgDAX/7yF/zmN7/Bgw8+iGuvvRYrV67ErFmzkJeXp3DP\niYiIiIhIbRTPwbn++uvR0NDg8++9evVCWVmZjD0iIiIiIiKtUnwGh4iIiIiISCoMcIiIiIiISDcY\n4BARERERkW4wwCEiIiIiIt1ggENERERERLrBAIeIiIiIiHSDAQ4REREREekGAxwiIiIiItINBjhE\n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\ns+rVq5fsdhpkylJpuTp//rx27dqlMWPGaOPGjVq+fLkOHTqknj17Ov1DArlyn2v9bBX74IMPtGPH\nDjVs2LDEazeTL1O0qD344INq3ry5ZsyY4TgWExOjRx99VMnJyR5cGS6Xl5en4OBgvf322+rYsaMk\nKSoqSk899ZQSEhIkSQUFBQoPD9ekSZMUGxvryeVWSqdPn1b79u31yiuvKC0tTbfddpumTp0qiVwZ\nyYsvvqht27Y5PR/sSuTLOHr16qV69erp1VdfdRwbOnSocnJytGLFCknkywgaN26sjIwM9enTx3Hs\nWnk5c+aMwsLCNHfuXPXo0UOSdPjwYTVv3lzvvfeeHnjgAY9ci9m5ytWV9uzZo1atWmnr1q1q1qwZ\nufKgq+Xr4MGD6ty5s1avXq0ePXpo8ODBGjFihCTddL4q/A7Ov//9b3333Xdq37690/EOHTroq6++\n8syi4NLZs2dVVFSkOnXqSJIOHDigY8eOOX2T+vr6qnXr1uTOQ0aNGqVu3brp/vvvdzpOrozlo48+\nUkxMjOLi4hQeHq42bdpo4cKFjtfJl7Hce++92rRpk+ORBz/++KM2bdrk+Ice8mVM15OXnTt36uLF\ni07nNGrUSJGRkeTOw86cOSOLxeL4neO7774jVwZis9kUHx+vxMREhYeHl3j9ZvPlU6ar9YCTJ0/K\nZrPJarU6Ha9fv76++OILD60KrowdO1bR0dG65557JEnZ2dmyWCxObTXSpdwdPXrUE0us1JYuXaoD\nBw5o8eLFJV4jV8ZSnKdhw4YpISHB0ZphsVg0aNAg8mUwo0aN0rlz59SyZUt5e3vLZrPpmWee0cCB\nAyXx82VU15OX48ePy9vbW3Xr1i1xTnZ2ttvWCmf//ve/9dxzz6lz585q0KCBpEv5JFfGMXnyZAUE\nBGjAgAEuX7/ZfFX4AgcVw7PPPqvt27frk08+kcVi8fRycIWffvpJKSkp+vTTT+XlVeE3dk2vqKhI\nMTExjhbc5s2ba9++fVq0aJEGDRrk4dXhSu+9955WrFihJUuWKDIyUrt27VJSUpJCQkLUr18/Ty8P\nMJXinYGzZ8/qnXfe8fRy4MKmTZu0fPlybd68udxiVPjfZOrVqydvb+8S1dzx48dL7OrAM8aNG6f3\n339fa9euVXBwsOO41WqV3W7X8ePHnc4nd+63fft2nTp1Si1btlRAQIACAgK0ZcsWLVq0SPXr11fd\nunXJlYEEBgYqIiLC6VhERIRjYhA/W8YyYcIEjRw5Uo8++qiaNWumxx9/XMOHD3fcN0q+jOl68mK1\nWmWz2XTq1KmrngP3sdlsiouL0+7du7VmzRpHe5pEroxky5YtOnbsmCIiIhy/c/zyyy+aMGGCY8DR\nzearwhc4VapUUYsWLfT55587Hd+wYYNatWrlmUXBISkpyVHchIaGOr12yy23KDAwUBs2bHAcKygo\n0LZt28idm3Xp0kVbt27V5s2bHf/dddddeuyxx7R582aFhYWRKwNp1aqV436OYnv37lWTJk0k8bNl\nNOfPny+xM+rl5eWY7kS+jOl68tKiRQv5+Pg4nXP48GHHDe5wn4sXL2rAgAHavXu31q1bp4CAAKfX\nyZVxxMfHa8uWLU6/czRo0EDDhw/XBx98IOnm82WKFrXhw4dryJAhuuuuu9SqVSstXrxYx44du2pf\nH9xj9OjRevfdd7Vs2TLVrl3bscvm5+cnPz8/SZcmCU2fPl1hYWEKDQ3VtGnTVLNmTcfEDLhH7dq1\nVbt2badjNWrUUJ06dRQZGSmJXBnJsGHD1LFjR7300kvq3r27MjMztWDBAr3wwguOc8iXcXTq1Ekz\nZ85UcHCwoqKilJmZqVdffVVPPPGE4xzy5Rl5eXnav3+/7Ha7ioqKdOjQIe3atUv+/v5q3LjxNfNS\nu3ZtPfnkk5owYYICAgJUp04dPffcc2revLnatWvn4aszl9Jy1aBBA/Xv31+ZmZlavny57Ha743eO\n2rVry9fXl1y52bV+turVq+d0vo+Pj6xWq+Mfw282X6YYEy1JS5Ys0csvv6xjx46pWbNmmjJlChW5\nh/n7+7u83yYpKUlJSUmOP6enp+v1119Xbm6uYmJiNG3aNEVFRblzqXCha9euatasmWNMtESujGT9\n+vWaOHGi9u3bp8aNG2vw4MGKj493Ood8GUNeXp5SU1O1bt06nThxQoGBgerRo4fGjBmjqlWrOs4j\nX+63efNmde3atcTfVX369NGcOXMkXTsvxTe0r1y5UgUFBWrXrp2mTZvm8rke+P1Ky1VSUpKio6Nd\n/s4xZ84cx3hicuU+1/Ozdbno6GjFx8c7xkRLN5cv0xQ4AAAAAFDh78EBAAAAgGIUOAAAAABMgwIH\nAAAAgGlQ4AAAAAAwDQocAAAAAKZBgQMAAADANChwAAAAAJgGBQ4A4Ko2b94sf39/bdmypUzf9/z5\n84qMjNRbb73ldPyf//ynOnfurMaNG6tu3br6/vvvyzSup0yZMkX+/v5Ox/77v/9bXbt2/V3v16FD\nB73wwgtlsDIAMB8KHAAwoJMnT+rFF1/UfffdpyZNmigoKEgtWrTQkCFDtGnTJreuxdXTwW/W3Llz\nVaVKFfXu3dtxzG63a+DAgcrOzlZqaqrmz5+vJk2alHns/Px8paWlXbNou+2225SRkVEmMS0Wi7y8\nvEoc+70SEhK0cOFCHT9+/GaXBgCmQ4EDAAazc+dOtWrVSnPnzlV0dLReeOEFTZs2TT179tT333+v\nRx55RP/4xz88vczf7eLFi5o3b56efPJJ+fj4OI4fOXJE+/fv11NPPaXY2Fj17NlTf/jDH8o8fn5+\nvtLT07V58+arnpOZmamjR4+qU6dOZRJzzJgxOnLkSJm8lyR16dJFtWrV0sKFC8vsPQHALHyufQoA\nwF1Onz6tvn37ysfHR5s3b1ZoaKjT6+PHj9e6devk5+dX6vucP39eNWrUKM+l/m4ff/yxTp48qUcf\nfdTpeHZ2tiSpVq1a5Rrfbrdf85zPPvtMQUFBat68eZnE9PLyUtWqVcvkvaRLuz8PP/ywli9frmef\nfbbM3hcAzIAdHAAwkCVLlujo0aNKS0srUdwU69Kli1q1auX4c/H9Hbt379bgwYPVtGlTtW7dWpL0\nyy+/aPTo0WrZsqUaNmyokJAQ9erVS//6179KvO+vv/6qJ554Qo0aNVJ4eLieffZZFRYWuiwIduzY\noZ49eyo4OFgNGjRQ586dr7t17qOPPlJQUJAiIyMdx4YNG6YHHnhAFotFw4YNk7+/v9P9Kfv27dOA\nAQN06623KigoSG3bttUHH3xQ4r3PnDmjZ599VnfccYesVqtatGihjIwMFRUVSZIOHjyosLAwWSwW\npaWlyd/fX/7+/ho+fLjT+6xfv14PPfSQ48/NmzdXz549tXnzZj3wwANq0KCBWrdurY0bN0qS1q1b\np/vuu09BQUFq166dvvvuO6f3c3UPztXMnz9frVu3VlBQkMLDw/XXv/5Vp06dKnHeAw88oMOHD5eI\nBQCVHTs4AGAgn376qapXr64uXbpc99cU38sRFxenkJAQJScnq7CwUNKlQmTbtm165JFH1LhxYx09\nelSvv/66unTpoi+//FJWq1WSVFBQoIcffli//vqrhgwZosDAQP3973/Xxo0bS9wrsnnzZj322GO6\n8847lZSUpCpVquidd95R9+7dtXr1at13332lrnf79u1q0aKF07G4uDjdeuutSk1N1cCBA3Xvvfc6\n1rZnzx517NhRQUFBGjVqlPz8/LRu3ToNGDBACxYsUM+ePR3X0KVLFx06dEhxcXEKDg7Wt99+q7S0\nNB06dEgvv/yyAgICNGPGDCUkJKhr166OIqpp06aOtZw6dUrffvutRo0a5fQZ//zzz4qPj1dsbKx6\n9+6tWbNmqW/fvpoxY4YmTpyo+Ph4WSwWTZs2TQMHDtSOHTscn53FYrmue24SEhK0bNkyPfHEE3rq\nqad06NAhzZ8/Xzt27NCGDRucdoFatGghu92uL7/8ssTnCQCVGQUOABjInj17FBYWJm9vb6fj586d\ncxQtklStWrUSbWqRkZF6/fXXnY516tRJjzzyiNOxXr16qWXLlnrzzTf1zDPPSJJee+017d+/X6+9\n9prj/AEDBqhNmzYl1vj000+rdevWWrVqleNYXFyc2rRpo5SUFH3yySdXvT6bzaaff/5ZHTt2dDr+\nxz/+UT4+PkpNTdWf/vQnR9EiSWPHjlXDhg31+eefO37B/8tf/qLu3btr4sSJjnPnzJmjffv2aePG\njY7dr/79+ys4OFipqakaOXKkQkND9fDDDyshIUG33367U5xin332mapUqaL27ds7Hd+/f78+/vhj\ntWzZUpIUERGh7t27669//au2b9/uGIhQu3ZtJSQkaOPGjWrXrt1VP4srffXVV3r99dc1f/58Pf74\n447jDz74oDp16qQVK1aof//+juMNGjRQ1apVtWfPnuuOAQCVAS1qAGAgZ8+edXl/zd/+9jeFhoY6\n/hszZozT6xaLRQMHDizxddWqVXP87/z8fOXk5KhmzZoKCwtzam36n//5H1mtVqdiqFq1anryySed\n3m/Xrl3au3evevTooVOnTjn+O336tNq3b69vvvlGBQUFV72+nJwc2e121alT59ofhqTc3Fx98cUX\nevTRR3Xu3DmnmB06dNCvv/6qffv2SZJWr16tVq1ayd/f3+m8du3ayW63lzpU4HLr169X69atS9zD\nFBYW5ihuJCkmJkaS1KZNG6dpbzExMbLb7crKyrqueMXef/991apVSx06dHBaf1hYmKxWq8sWwDp1\n6ujkyZM3FAcAzI4dHAAwkJo1a+rcuXMljicmJjr+9f7y0cqXu7zNqtiFCxeUmpqqv//97zp69Kjj\nuMViUb169Rx//uWXX1x+fVhYmNOfi4uJESNGuFyDxWLRqVOn1LBhQ5evF7ueG/2lS7smdrtdaWlp\nmjJlist4x48fV2hoqPbt26cffvjB5b1Lxeddi81m0z/+8Q+NGzeuxGuNGzd2+nPt2rUlqcS1Fh/P\nzc29ZrzL7d+/X2fPnlV4eHiJ1662frvdXi5jvAGgIqPAAQADiYyM1Pfffy+bzebUphYVFaWoqChJ\nKtG+Vqx69eoljiUmJurtt9/WU089pXvuuUd/+MMfZLFYNG7cOMeN9zei+GtefPFF3XnnnS7PCQgI\nuOrX161bVxaL5bp/+S+ON2zYMKeb/i/XrFkzx7lt27bV008/7bKAuuWWW64Z78svv9SZM2f05z//\nucRrV/vcr3b8eou4YkVFRapXr56WLFni8mtd7XqdPn3aqVAFAFDgAIChdOrUSV9//bU++OADde/e\n/abf74MPPlCfPn2UmprqdDw3N9fpF+MmTZrohx9+KPH1P/30k9Ofi3d5/Pz8buj+kmJeXl4KDQ29\n7vat4qLEx8fnmvGaNm2qc+fOqW3btqWeV9qOx/r16xUaGupyN6u8NW3aVJ9//rn++Mc/XteI7yNH\njqiwsFARERFuWB0AVBzcgwMABjJw4EAFBgZq/Pjx2rt3702/n7e3d4mdmpUrV5Z46ORDDz2k7Oxs\np9HL+fn5evPNN53Oa9GihW699VbNmTPHZSvd9dwP0rJly+sebRwQEKA2bdpo6dKlLh+UeXm8bt26\naceOHVq/fn2J8y4f0lC80+VqF+mzzz5zuXvjDt26dZPNZtPUqVNLvFZUVFRivd99950sFovTfUEA\nAHZwAMBQ6tSpo2XLlqlXr15q06aNunfvrpiYGFWpUkWHDx/W2rVrdf78eaeb2kvTuXNnvfPOO6pZ\ns6Zuu+027dq1S6tWrSqxQxEbG6uFCxdqyJAh2rlzpxo0aKB3333XaUiBdGn345VXXlHPnj3VqlUr\n9e3bV40aNdKRI0e0ZcsWSdKaNWtKXdN//dd/6e2339aePXucnoVzNdOnT1enTp103333KTY2Vk2b\nNtXx48f1zTff6P/+7//07bffSpJGjhypTz75RH379lXv3r3VokUL5efn61//+pfWrl2rLVu2qEmT\nJvL19VWzZs20atUqhYaGqm7dugoJCZHVatXu3buVlpZ2XZ9tWWvdurUGDRqkWbNm6fvvv1eHDh1U\nrVo17du3T2vWrNH48ePVp08fx/n/+7//q4YNG+quu+7yyHoBwKgocADAYO6++259+eWXmjNnjj75\n5BOtWbNGNptNQUFBatmypdLT012Ob3YlPT1dVatW1erVq7Vs2TLdddddWrVqlZKTk51atapXr641\na9ZozJgxWrRokapXr67HH39cDz74oHr06OH0nq1bt9b69euVkZGhJUuW6OzZs7Jarbr77rudxhhf\nTceOHRUQEKD3339fY8eOdXrNVftYWFiYNmzYoPT0dL3zzjs6efKkAgICdMcdd+i5555znOfr66sP\nP/xQ06dP1+rVq/Xuu++qZs2aCg0NVWJiogIDAx3nzp49W0lJSUpOTtaFCxfUp08f3X333apVq5bj\nIalXrsvV2m7k+NXOu1xGRoZatGih1157TampqfL29lbjxo3Vo0cPp9Y7u92utWvXlphyBwCQLLm5\nuTd2FyQAADdpxowZWrx4sTIzM696k7679erVS9WqVdMbb7zh6aVc05o1azR06FDt3LnT8UBUAMAl\n3IMDAHC7IUOG6OLFi1q+fLmnl+Jw//33X3X8tdHMnDlTgwcPprgBABfYwQEAAABgGuzgAAAAADAN\nChwAAAAApkGBAwAAAMA0KHAAAAAAmAYFDgAAAADToMABAAAAYBoUOAAAAABMgwIHAAAAgGn8P3ea\nzHDl3n7pAAAAAElFTkSuQmCC\n", + "image/png": "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d++ewWKz3nVjvRs/NsB6N0VsgPVuitgA690UsQHWuyliA6x3U8Q2BJMnOMpdmAMCApCbm4vVq1ejd+/eWL16NQBg586d6NChA2bMmIFu3bph06ZNWLRoEaZOnWrikhMRERERUVVj8jk4PXr0QHp6us7X3dzcEBUVZcQSERERERFRdWXyHhwiIiIiIiJ9YYJDRERERERmgwkOERERERGZDSY4RERERERkNphFbSRrAAAgAElEQVTgEBERERGR2WCCQ0REREREZoMJDhERERERmQ0mOEREREREZDaY4BARERERkdlggkNERERERGaDCQ4REREREZkNJjhERERERGQ2mOAQEREREZHZYIJDRERERERmgwkOERERERGZDUtTF8BQJBKJ3mPm5OToPaax4hu67IBh6hxgvZeG9W7c2Eqsd+PGVmK9Gze2EuvduLGVWO/Gja3EejdubEdHR73HNNsExxCVZci4xohvyNjJycnVtuyGjs96N0181rtp4rPeTROf9W6a+Kx308RnvZsmvqHLrk8cokZERERERGaDCQ4REREREZkNJjhERERERGQ2mOAQEREREZHZYIJDRERERERmgwkOERERERGZDSY4RERERERkNpjgEBERERGR2WCCQ0REREREZoMJDhERERERmQ0mOEREREREZDaY4BARERERkdlggkNERERERGaDCQ4REREREZkNJjhERERERGQ2mOAQEREREZHZYIJDRERERERmgwkOERERERGZDUtTF8BQJBKJ3mPm5OToPaax4hu67IBh6hxgvZeG9W7c2Eqsd+PGVmK9Gze2EuvduLGVWO/Gja3EejdubEdHR73HNNsExxCVZci4xohvyNjJycnVtuyGjs96N0181rtp4rPeTROf9W6a+Kx308RnvZsmvqHLrk8cokZERERERGaDCQ4REREREZkNJjhERERERGQ2mOAQEREREZHZYIJDRERERERmgwkOERERERGZDSY4RERERERkNpjgEBERERGR2WCCQ0REREREZsPS1AUgqmnEYjHCt+3Fi5wCuNpZInTqJPj6+pq6WERERERmgT04REYkFosRvCIKcW0nIrHXTMS1nYjgFVEQi8WmLhoRERGRWWCCQ2RE4dv2QtZ/Nixs7AEAFjb2kPWfjfBte01cMiIiIiLzwASHyIhe5BSokhslCxt7vMgpMFGJiIiIiMwLExwiI3K1s4RMmq12TCbNhqsdp8MRERER6QMTHCIjCp06CRanNquSHJk0GxanNiN06iQTl4yIiIjIPPCxMZER+fr6InrxHPVV1BbP4SpqRERERHrCBIfIyHx9fRG14iNTF4OIiIjILJltgiORSPQeMycnR+8xjRXf0GUHDFPnAOu9NKx348ZWYr0bN7YS6924sZVY78aNrcR6N25sJda7cWM7OjrqPabZJjiGqCxDxjVGfEPGTk5OrrZlN3R81rtp4rPeTROf9W6a+Kx308RnvZsmPuvdNPENXXZ94iIDRERERERkNpjgEBERERGR2WCCQ0REREREZoMJDhERERERmQ0mOEREREREZDaY4BARERERkdlggkNERERERGaDCQ4REREREZkNJjhERERERGQ2mOAQEREREZHZYIJDRERERERmgwkOERERERGZDSY4RERERERkNkye4MTGxmL8+PFo1aoVnJ2dsX//fo1z7t+/j6CgIPj6+sLDwwMBAQG4d++eCUpLRERERERVmckTnKysLLRu3Rpr1qyBvb29xutisRgDBgxAo0aN8M033+DixYtYtGgRatWqZYLSEhERERFRVWZp6gIEBgYiMDAQADBr1iyN11euXIm+ffti+fLlqmO+vr5GKx8REREREVUfJu/BKYlCocDJkyfRokULjBo1Cn5+fujbty+OHj1q6qIREREREVEVVKUTnJSUFLx69QobN25Ev379cOzYMfztb3/DtGnTcPr0aVMXj4iIiIiIqhghIyNDYepCKHl5eSE8PBzjx48HACQmJqJly5YYPXo0Pv/8c9V506ZNg0QiwaFDh3TG4iIERERERERVW9OmTfUe0+RzcEri4uICS0tLNG/eXO14s2bNSh2mZojKkkgkcHR01HtcY8Q3dNnv3btnkDoHWO8lYb0bPzbAejdFbID1borYAOvdFLEB1rspYgOsd1PENoQqPUTNysoKHTp00OiNuX//Pry9vU1UKiIiIiIiqqpM3oOTlZWFhw8fQqFQQC6X4+nTp7h+/TqcnZ3h5eWFefPm4e2330a3bt3Qq1cvnDt3DkePHsW+fftMXXQiIiIiIqpiTN6Dc/XqVfTq1QsBAQHIzc3F6tWr0bt3b6xevRoA8NZbbyEiIgKRkZHw9/fHf/7zH2zduhVvvPGGiUtORERERERVjcl7cHr06IH09PQSzxk/frxq4QEiIiIiIiJdTN6DQ0REREREpC9McIiIiIiIyGwwwSEiIiIiIrPBBIeIiIiIiMwGExwiIiIiIjIbJl9FjYjUicVihG/bixc5BXC1s0To1Enw9fU1dbGIiIiIqgX24BBVIWKxGMErohDXdiISe81EXNuJCF4RBbFYbOqiEREREVULTHCIqpDwbXsh6z8bFjb2AAALG3vI+s9G+La9Ji4ZERERUfXABIeoCnmRU6BKbpQsbOzxIqfARCUiIiIiql6Y4BBVIa52lpBJs9WOyaTZcLXjdDkiIiKismCCQ1SFhE6dBItTm1VJjkyaDYtTmxE6dZKJS0ZERERUPfCxMJkMVwvT5Ovri+jFc9TrZfGcGl8vRERERGXFBIdMQrlamHJCfYI0G8ErohDNxjx8fX0RteIjUxeDiIiIqFriEDUyCa4WRkRERESGYLY9OBKJRO8xc3Jy9B7TWPENXXagfHWemJmrdbWwxMxcjTis95IZ4l4HWO+lYb0bN7YS6924sZVY78aNrcR6N25sJda7cWM7OjrqPabZJjiGqCxDxjVGfEPGTk5OLld8dwdbJEmz1ZIcmTQb7g62WuNU93o31Hyj8tZ7eVX3ejcU1rtpYrPeTROb9W6a2Kx308RmvZsmtr5xiBqZRE1aLUw53yiu7UQk9pqJuLYTEbwiCmKx2NRFIyIiIjI7THDIJJSrhbW7FgP3c5+h3bUYs11ggPONiIiIiIzHbIeoUdVXU1YLe5FToHW+0YucAhOViIiIiMh8sQeHyMBc7SxVQ/GUZNJsuNrx+QIRERGRvjHBoWpDLBZjzuIwjFuwDHMWh1WbOSw1ab4RERERkanxETJVC9V5Y1DlfCO1VdSqQbmJiIiIqiMmOFQtlDRRvzrM46kp842IiIiITI0JDlULhpyo/yQ+HlvXR+l9jxoiIiIiMj7OwaFqwVAT9cViMWZv2Mk9aoiIiIjMBHtwqFoInTpJbQ6OaqL+4jmVihu+bS8Ug+aabOibWCxWn5vz58IDxY+xR4kqQtv95eTkZOpiERERGRQTHKoWDDVR35R71GhbOGHCkggo8nJgMfLDareYAlUtuhbmiAwJRhtHR1MXj4iIyGA4RI2qvCfx8ZizOAwfRO4CAKyd+3dErfhILw1+U+5Ro23hBNHg+Xhh5ay1R4moPHQtzBG157CJS0ZERGRYTHCoSjP0HJnQqZMgnIg0yR41unqPBJFI41hpPUrVdY8gMhxd91eqVG6iEhERERkHExyq0kqaI6MPvr6+2PzeFLS7FgP3c5+h3bUYow0H09V7pJDLNY6V1KOkHIrEhRKoKF33l4sNf+0TEZF54//pqEozxhwZH29vRK34CAfWf6y3oW9lETp1EixObVbrPZJ/8wlc89PL1aNU0h5BVHNpu78sTm3GnKDRJi4ZERGRYXGRAarSXO0skSDNVjXe814k4MVPh/DyVRLmLA6r1iuMaV04YXkIAJRrMQVTLpRAVZeuhTm4ihoREZk7JjhUpYVOnYSgpZsgGzQXssx0pJyKhvuoEFjY2CPODFYY8/X11bocdXmWqC6eBAJ/DWvTtkxwda0rKj9t95dEIjFRaYiIiIyDQ9SoSis6Ryb7yBpVcgNoDsWqqRPtdQ1FGj+wL+fmEBERUY1jtj04hnhKmZOTo/eYxopv6LIDhnsy7ObqirAFc/CPj9fjhZahWImZubh+4wZmb9ipWpAgQZqNoKWbsPm9KfDx9i4xfnWvdycnJ0SGBCNqz06kSuVwsRFhTkgwovYc1jo3Z9WnO7Bu4T9Ljcv7vWSGut9Z7yVjvRs3thLr3bixlVjvxo2txHo3bmxHA+zNZrYJjiEqy5BxjRHfkLGTk5MNXnZ3B1skaRmK5e5gi60Hv9JcbW3QXGw9GFOm4V7Vvd7bODpi69rX1F6TyL7QOjdHIhOVuUy837Uzxv1uSNW17Kx308RmvZsmNuvdNLFZ76aJrW8cokbVhq6hWKFTJ3GivRam3MSUiIiIyFTY0qFqQ9eqUL6+viVOtC+JWCzGqk93QCITmd0k/NCpkxC8Iko1TE2VEC6eY+qiERERERkMExyqVnStOlaRxrxyg0zlexLMYFW2okpKCImIiIjMFRMcMgsVacyXtEFmeZZprsp0JYRERERE5ooJDpmN8jbmOW+HiIiIyPxwkQGqsTgJn4iIiMj8MMGhGqukVdmIiIiIqHrio2qqsZTzdtRWUeMkfCIiIqJqjQkO1Wi+vr5Yt/Cf1WrzKiIiIiLSjUPUiIiIiIjIbDDBISIiIiIis8EhakRGJhaL1ffrmTqJ836IiIiI9IQJDlV71SlhEIvFCF4RpdpgNEGajeAVUYjm4gZEREREesEhalStKROGuLYTkdhrJuLaTkTwiiiIxWJTF02r8G17VckNULixqKz/bIRv22vikhERERGZByY4VK1Vt4ThRU6BqqxKFjb2eJFTYKISEREREZkXDlGjaq26JQyudpZIkGarlVkmzYarnfF+FKvTkD4iIiKi8mKCQ9VaVUgYyiN06iS1OTgyaTYsTm1G6OI5qnMMmYDomgMU9vZI7P/uB7VrOjk56eWaRERERMbEIWpUrYVOnQSLU5shk2YDwF8Jw9RJJi6Zdr6+vohePAftrsXA/dxnaHctRm2BAUPPKdI2pC+n0whMD9+ucc0n8fF6uSYRERGRMVXNx9x6IJFI9B4zJydH7zGNFd/QZQcqX+dP4uMRtecwUqVyuNiIMCdoNHy8vUssu5OTEyJDghG1Z+df7wsJhpOTU5nLY+x6d3JyQtiCOWrHlGVd9ekOrXOKVn26A3OCRmvUj62NTbnqPTEzV2NIn+SX7+A2YZHGNSN2bcPGxaHl+rzlUdPvd134e6ZkrHfjxlZivRs3thLr3bixlVjvxo3t6Oio95hmm+AYorL0GVfbMCQnJyeDlRswXJ0AQHJycqXii8VizI2IVjXuk6TZmBuxGdGL55RaL20cHbF17WsVvjZg2LopT2yJTKR1TlFSVp7W+lkaNARNmzYtc3x3B1skFRvSJ5fla72mpEAwaL0AhXVjqCF5Vfl+L40x6r06xma9myY26900sVnvponNejdNbH3jEDUT0DUMqboOCRKLxVi5eTvGLViGOYvDKjScqrqthmYornaWquF2SjJpNp4/eay1fnYePVGu+NqG9Ime39N6TRcbw/96qG7LfBMREVHVxwTHBHQ15qP2HDZxycpP2UB96P9OpRqo1W01NEPRNaeofgMPrfWTkacoV3xtc4C2L1ug9Zpzgkbr50OVoDKJrVgsxpzFYZVKrImIiMj8mO0QtapIORTn7PV7yH+6HXV7joS1qyeAwoZdqlRu4hKWX0kN1KgVH5U5TnVbDc1QlAmI2pCtP/8dV6x+cp7dR+ajBxi3YFm5hnb5+vpqfDfRnh4a1zTGKmoVTWx1rQZXdMEGIiIiqplqVuvRhIo2yFw6Fy4PnPjlJrgFBsHa1dNoQ4L0TV89L2VZPrmm0JaAFK+fnGf3kfbtf+D+9nok6qGBr+2ahppkWVRFE1t9JdZERERkfqpfi7qa0tYgcx85D2nnvzTqkCB90zVnpLw9L6Utn1zTFa8fnIiE++SPq/2cpYou880hjURERKQLe3CMRFeDzCotHu2uxSB08Ry8zMzEnMVh1WqHeX32vGjrRaC/FK2fcQuWIdEMGvi6huSVdt9zSCMRERHpwtaAkehqkPVu2xRRKz6CWCzG7A07oRg0V+ucAkPubl8Zygbqkn9/BqmlXZkbqObCVN+Lrvvp9s2bmLM4rNRyVKX7qSKJLYc0EhERkS4comYkpQ3FCd+2V5XcAOpDjqr6Urq+vr5YNPsfOLD+Y0St+KhGJTem+l603U+JRyJgP+rDUstR1e+nsuCQRiIiItKFPThGUtpQnJLmFHBCddVU2e+lMr0oRXvOrj9Jwqva7nDrH6xala+kcpjL/cQhjURERKQNExwjKqlBVtKcgpo2obp4w3/G2GFoUwV3z63M96KPZY6VPWeLt+5DYq+ZZS5HTbufiIiIqGbhELUqInTqJAgnIrUOYdPXSmXVgbbhU7M37KySw6cq871UZoPLypajJt1PREREVPMwwTGS0nZd9/X1xeb3pmidU1DepXSr8w7v2hr+ikFzq+TyxxVd4hjQby9KectRmXITERERVXV8ZGsEZR2O5OPtrXUIW3mW0tV1rciQ4Co5zKu46jR8qqJLHAP6Xea4vOWoTLmJiIiIqjqT9+DExsZi/PjxaNWqFZydnbF//36d54aEhMDZ2RlRUVFGLGHl6WM4knL+Tmkrlem6VtSew5X/IEZQ3YZPlfV7KU7fvSjlLYeyZ1A5x0u5Wh8RERFRdWfyBCcrKwutW7fGmjVrYG9vr/O8r776CleuXIGHh4cRS6cfxuyV0HWtVKlc79cyBG0Nf+FEpNkNn9LXMscJz55XaDiiOSwVTURERKSNyR+LBwYGIjAwEAAwa9Ysrec8efIECxcuxLFjx/C3v/3NmMXTC2Puuq7rWi42Js9ly0Tb8KkZ702p0pudVlRllzkWi8VYuP1LWAwJKfdKbOayVDQRERFRcVW+1SuTyTBt2jSEhoaiadOmpi5OhRhzUreua80JGq33axlK8eFWPt7e7HHQInzbXlVyA5Rv6GN1mutEREREVB4m78EpzapVq+Dq6oq///3v5Xqf1dFdgK0dFLZ2gLVt4d+2dlDY/PW3wtYOsLEDrKwBQTBI+QHDTOrW1Zuh61pOTk56/ETGxx6Hvyi/+7PX78Glc8WSFGP2KhIREREZk5CRkaEwdSGUvLy8EB4ejvHjxwMAzp8/jxkzZuDChQuoW7cuAKBt27aYPn065syZU2Ks2sEBZb6uQhBBZm2DPEtrpOTmQ6KwQJ6FBRp4+8DauS5kNnaQ29hBZmsHmU2RP7Z2kNnYQ2ZXC3IDJ0lFJTx7rjY0SSbNhuzrCKz6x0h4ejQwShmM7b1/b8PLAe9pHHc8uQHr351qghKZRtHvPuXEdrgN+odGktL45y1YNPsfZY5TU+4hIiIiqnoMMUKrSj+u/fnnn5GUlIRmzZqpjslkMnz88cfYsmULbty4oZfrCAo5LKU5sJTmQNWnIgfwMKPMMRSWVlDUcoCiVh2gduHfiloOUNSuo/t4bUfA1k6VGEkkEjiWYSnnT3Yf0hiahCEhOPLfGK29GWKxGKs+3QGJTASb/CyILCyRI7LR6zyWe/fuGWwIoUQigY9LHcRp6XHwdqlT6euWtd6rQuyi333dniOR+OUmuI+cp0pSLE5txvIy9A42bdoU+xv6qvf0rXhX7X2GrBdDxzd02Q19v7PetWO9Gz82wHo3RWyA9W6K2ADr3RSxDaFKJzjTpk3D8OHD1Y6NHDkSo0aNQnBwsIlKpZ1QkA9BkgZI0sr1PoWVNRQOjlA4OMHSrhYsnF2hcHCCoo5T4d9/vqb8N+xrl2v+RNF9cWSZ6Ug5FQ33UbPKPSnd1EKnTlLb30c1j2lxyT155qbod2/t6gm3wCCknNgOq7R49G7btFxDHyu7yEFR5rYABBEREVVfJk9wsrKy8PDhQygUCsjlcjx9+hTXr1+Hs7MzvLy84OLiona+paUl6tWrhyZNmpQYN2/YZCA3B0JuDiBV/1uQ5hS+Js0BpLkQCvIN+RFLJOTnQUhLAdJSYFGG8xUWloiGBRL/+xipds5ItXVCqq0TUizt4aBIhejudSgc60LhVBewsVObu5JyYjvcR2mflF7Zhm7Cs+f4ZPchgzVwq+PmlEV7zvRVJ8Xnzli7esJt0D/Q7pr23jtjKOtGtkRERETGYPIE5+rVqxgyZAiEP4dprV69GqtXr8b48eOxefNmjfOFMs5zyRv5dtkLUZCPD5ashLjZW3AUKVA7Pxu187Nhn5OB5uJzGN3HH0JOFvIl6bAuyIeQ8wpCTjaQnQUhOxNC1ksI+cZJkgRZAVxQABfJI0DySPOEsLmq/1TY2iEsH0jKfopUG0eI5WJkPf4vku3qIsWuLpLs6uKFXd1Kr5z1c+xFTFv+bwiezSGysIJjl0CDNHD12eNgaIZq9FfFniwuAEFERERVickTnB49eiA9Pb3M58fFxem/EJZWmDXjbQSviEJC/9mwcPqr4Thu8ULk/9kgLXH8YZ4UwquXELIygayX+PfmbZD79UCdvFeok/8KjnmvUCfvFdySb+O1Bq4QXkkgZGYYNDEScnPgCcDzxa2/Dt7QXEL4lcgKdh+9DYWz659/3CBX/nddN8jr1gNqOWhdREEsFmN6+Ha4v/NvVYM78ctNqNt7lKqBWxOHLxmq0V+8J8umIKdMc24MiUtOExERUVVi8gSnqtA1BAoA5iwOw4ucAjhayLFw1tvaG5PWNlDUdYOirhsA4J5TA8R5dNWYFK82lEihKBwql5kBITMDOYnPUEuWr/p34R/Jn3/+/Hdujt4/e215PvD0YeEfHRS2dpDXrQ+FSz0oXOpD/uffXx37Hq2Hz0CqlTVkKGzYuo+ch5QT2/HCxbLGDl8yZKO/aE/WvXv3TF6Ppl5yWlsCXd2XRSciIqKKY4JTRPEhUJVpnJdpKJEgAHb2UNjZQ1HPA7munrApbYUKaS6El+kQJGkQMtIgSNIgkqRByEgtPFb0j0x/T9CF3BxYPHsMPHusdnwhAPxwGXIISLFzRqKdKxLtXXFf9gi1CxzxXWQEPP3HIsnKGgWoOcOXTN3oNyZTDpvT9TMaGRKMNtVotRciIiLSH/NrbelRZYYZGWxSvI0tFG4NoHArZa8ShQLIylQlQDnP4lFLmgUh/QVE6S8gpKdASH9RmBjJ5ZUrEwARFKifk4b6OWlol3YX/QUA6c8BAAt+ugo5BCTb1UVCrfpIqFUPL1+IYRl7GvJ6HoWfp45zmfcRqg5D3qriXBlDMeUCELp+RqP27MTWta8Z/PpERERU9TDBKYGuYUaxf9yHWCxWNeB0NbhNOileEIDadaCoXQcyz4bI8WwCa21PtOUyCJL0wmQnPQWi9Bd4+fgB7lz5HbXzclFfIUV9oQCi/LxKFUcEBdxzUuGek4qOL24WHtwapnpdYW0LuZs7FG4ekNcrTODkboXJj2BTS3VedRnypmz0q62iVsXKqE+mutd1/YymSiuftBMREVH1xAQHuhMUXcOMXtV2VzWqAVSLBrdOIgvV4gJACzwUixF8IBay/qv/6nk4GYW9H/wdPnZWEFKTIUpLKvw7NQnCiyTIU57D6pWkUsUQ8nJhkfAYSHis8Zo9ALmzK+T1vZD8NAUT/HogPvUmnjh4IKFWPUirwJA3XffQuoX/rFYbYxmLvpbQ1vUz6mIj0mdxiYiIqBqp8QlOST0C2oYZJX65CW6BQZA5OCN8W+GKZOa0RK7WIT8D5mDN/j8XR2jUHDIt7/vj1k00rVsHotRkCC+SIEpNhJCSCFHKM8ifx8MqM6NS5RL9ObSuD4A+tw6qjhcIIjy3d0NSfj6sYyIhd/eGwt2r8G9nN0Bk+IauWCzG+A9X44WVMwSRCAp5Lq58uBr71/yrSk52N/UQP332wukaCjgnpGptBExERETGU+MTnNLm2UQvnoNhM99HTj0/CIIIboFBsHb1BADViljGWiLXGA3Tiq7+pbC0gqK+Fx7myhC+/7siZVwAAJi+fBPq9fgbfPJeooHkKbxuncbQ5p6o9UoCUcqzCq8OZ6mQwzsrCd4A8P0X6mWysoa8vicU7t6Q1y9MeuTuXpB7+AK161Toetos2bgZKXJbuA+Z8VcifCQCSzZuxqblxk9yS7pPqsIQP30uoa1r/k9VTCyJiIjIOGp8glNag97X1xc9OrZFXNuJWlfEysrKKnxqXOw1O7lUr+U0VsO0Mqt/6SpjozpWyB4wF/E29ogHgAYdIGv0Bv57LQZRKzcWLojwSgJR8vPCZOfPnh8h5TlEyc8gpCZDUJR/ToWQnweLp4+Ap5obosodnSH3aAi5hy9q1a0PiyYtIPdsCIWDU5kXO1CKuyeG+5S1ag1291EhiNv5QbnLXFml3SdVYVNOfS+hrW3+j0RSuSGTREREVH3V+IHqrnaWkEmz1Y4Vb9CHTp0Ei1ObVeepVsSaOglyWQESj0SovZZ4JAJyPS7RDJT81FufSvqsFS1j3OPEkhu0ggA4OEHepCUeNPDDjF8fY8TNbEx95YJb89bi2YZDyFodjZyQVZCOm4m0TgG4ZeOMVJF1hT+nSJIOy1tXYX3mGJwOb4XdmndRa+4I1JozDHZhc2GzcwOsvj8CixuXIaSlFCZhumLZ1tL6+US29jreYTil3SdVYVPOsvzMEREREVVUjW9RlGU535JWxJJa1YJb//FIObEdCoW8cBhb/2BIbx7XazmN1TCtzJK/usooz9Xey1W8QVvSniaOr70GmYcvZACsgcIhaQBe5WZDlJQAUeJTCInxECU+hSjpKUSJ8RCyMsv9+YVXL2Fx9zos7l5XO66wqwW5h+9ffzwbFvb4uNRHu4buuK/l87VrWMpS3hVUdAiaTUEOlr87U/X9lHaf6Oqhe3T3NsYtWAZXO0uMH9gX+7/7AYmZuXB3sNX7UMiatIQ2ERERGV+NT3DK2qDXtSKWq50lEhyc4T5iruqYIZ5GV3bjyCfx8di6PqpM83e0Dfkpy/wfXWVs19QX4lObS23QVmhPE1t7yH2bQu7bVPO1V5LChEeZ+CTGQ3geX/h3QX5pVaZGyMmCxYObsHhwU+24wq4Wdrl54utvFuB+m7fwwKUp7tq64NXJz7F0eUi5rlEWxZNAWbEhaKXdJ1oXzti9DHXfmotEDz8kSLNxandy9fIAACAASURBVPUy1H1rGuw8/JBkgKGQNW0JbSIiIjKuGp/gAJXbw8NYT6O1XSclZgUyfV3U9uTRRiwWY/aGnVAMmluh+Ttlnf+jqy6W/1kXpSWRet/TpLYj5H6OkPu1Vj8uKyic35PwGKJnYsge34NNyjOInj+BkFe+uVNCThZqPbmLcQBwPVp1PM/ZDaJjnyPbzRMWTVtB7t0EinoegMiiYp/lT6XNoSntfiye0D+6ext135oLOw8/VTz3yR8j5cR22I2Ya7A5OlxCm4iIiAyFCU4l+fr6Iuztkfjnmn8hW2QDe7kUGz+cp/en0cqG6dJPtiL2TjwULl5wHToHDx2cS01WwrftVSU3QPknlpd1YnppvWGlXctoe5pYWELh7g2ZuzdkHXtCIpEUNrTlcgipSarER/X3MzGE3OzS4xZhnZ4CpKegDgCcKjymsLaB3LMR5N6NIfduArl3Y8i8GwO1y97IL8uiGKX1SBZN6MctWIbEP5ObovEURRZ1MPYcHSIiIqLKYIJTSWKxGB/t+BLWQath9+cT8492bEa0p4dBkpxatWqh3t9XqCcBpSQrlZ2/U573G6I3zGh7mohEULg1gMytAWTtu/11XKGAkJ4CUYIYomePC/9OeAxRwiMIOVllDi/kSWHx6DYsHt1WOy53doXcxw9y36aQ+TaDvGFTKFzqa13NrSxDFcvzHeiKJwgitX9rmy9lyr10iIiIiHQx2wTHEMvE5uRo7tWy6tMdWns3Vn26A+sW/hNP4uMRtecwUqVyuNiIMCdoNHy8vTXi6IpfXGJmrtZkIzEzV+dndrSQa23EOlrIy1RPZX1/ZevcyckJkSHBiNqz86/6CgmGm6srrt+4UeZ6LC9lvZf4XVnYAD7NCv/86cmTJzgQvRdO2ZloLWSjr2ddOGYkwzL5WbmWtVZuYoq4S6pjcnsH5Hk3Rr5XE+R7N0aeVxPIXN0xY+wwzN4QCdmfPXIyaTaEE5GY8d6UCtW/tniFc3KmAYDW+E/i4zWGPAYt3YSPJgzE7qPf4sajBIhs7NHa2w0fzAiu1P1eUYaMrWSopagNXXbWu3as95Kx3o0bW4n1btzYSqx348Y2xHB1s01wDDW2v3hciUykNeGQyETIyMjA3IhoVQKUJM3G3IjNJQ4nK63c7g62SNKSbLg72Op878JZbyNo6Sa1RqzFqc1YuHhOmepp4ay3tfasFH1/cnKyXuq8jaOjxoIC12/cKHc9lld5vyuxWIy5n+xWnX9cmo11pzYjenEYfBu4F/bwPH2Igvu3YJv8FBbxDyBklv0Xpig7E7Z34mB7J051TGFrD3ffpjjdpT6+uBiO/8lrIUUhYOnSig+JbOPoiNXTRhUOsRRsYK+QYs3bY/HjlR+RePu7wlXUisXfuj5Kc8jjoLmYs2oeUK8x3N9eBwsbe4il2Xgn/BPsWx5S6v1uiB4hQ87v0df9rouh5yZV17Kz3k0Tm/Vumtisd9PEZr2bJra+mW2CYywlDRkyxKaKFVnUwNfXF5vfm4KtB2PKvfSz8v0VXTpaH6L2HNZrPRZvTM8YOwxbD35VrmuU9t3KGzWHvFFzSNp2BxwdC4e5SdIgin8IUfwD5Ny+hqS4q2gs5MFKIStTuYXcbFjciYMLgOl/HpNbWkMRvRayhs0KV5Nr2Axyz4aApVWZ66L4EMvIbwsTOycnJ62/zHQNWcy3c4L3qBC1OsHg+aV+T8baxJaqFg5zJCIiQ2GCU0klJRwfRO7S+941FU02fLy9K7UKVmXm1lSGWCzGxVsPUddfsx6fpr+qULzijenZGyLhZI1yfVflntckCFA4uUDm5AJZm84IufgAcYM/g7WVNRpmPkOLjEdolnoXnZ79hmbIhSDNLdPnERXkAcWWr86HCPnejWHZsh3kjVtC1rgFFPU8tc7pCd+2FzmdRkBSZB8nxy4jEL5tL8IWqCfNygbp7Zs34dBFM6lXSHMqdL8b4kEAVW1MaomIyJCY4FRSSQlHZfeuKemaNaHhp2wE5Tp5ad0o9PmTx+WOqbUxPWgukvb8C9bl+K4q+90qEyQZgAeOPnjg6INvfXvD/VUBDqxbDCHpKSwe34NIfBci8T1YPL4LIbtsCZ0V5LCKvw/E31cdU9RygKxxC1XCI2/cEoo6zniSnIa0+0fgPnLeX3NwvtyEJ3XUk6GiDVL7RoOQeCQC7n/21sik2UjbtxKWzvXLtKGrrrooiiu3mTcmtUREZEhMcPRAV8LBHdsrR9kIcs1MR+KXmzQa4S0beJQ7pq7GdAOfhsgow2akSpX9bktMkEQiKBr4oKCBD9CtX+GLCgWEF4kQPb4LC/E9iB7fLfyTmVGm6wlZmbC8/htw/TfVMblrfbz/UoKb7YbhZqYYty0aIdfGHu4j5yFpz7/U3l+0QWphYw+3/sFI+norar9KRPfWfhgf+g+ERkZrJD7ybz5BaCkbnhrqQQBVXUxqiYjIkNiCMCBTz12p7pSNIAsbe7gFBiHlz2FUufF34T76Xfgk/FjumLoa017OtfHJ1Ell/q4q+t0qh3k9SU5D2r6VqDthUdkSJEH4awnrzr0LjykUeHzlN3y5aw/qe7ZAi4xHaJn+APVy08tUF6IXSRhgDQy4dRC4Bcgg4IGjD/5wboJH7nawTHgE1H4NsLDUaJBau3rCY9S7cD/3mSq5/3/27js8iqp74Ph3tqVQEnonIIQmVTpi6AqIKAgIgiIKIogIKqK8IiAqKogoRVHQnxQRFUSQplIEaYK0IL2FTmgJIWXL7Pz+iETDbsImbM/5PI/P+5qdvXvmumXO3HvPXVCmNG9Ons6er0aiCw2nToVSjM2mwMBNciMg75GkVgghhCfJr4mH5ZXpZJ7w34sgU9EylOzyAqo5hYvLZhK240eHC+DbLVqOi4sj6Xoil+aPp1jv0ZnKLN+sFJaT/1Y5Pf7WdQf5zx3l0ucvU61qFcoWyp+j5DcjUbpynYtnLmOKeTDjYrFY6lWqX/yb1keW0b5sYfTHD7q0UakejSqJcVRJjEv/w/vD0ELDUO+qzgDzNX45vZW/S9Tihikf4Hz/na8//sDl/sj0PLkRENRu/Wz26tCafV+6PmIqhBBC5ITLCc7u3bvZunUrhw4d4sqVKyiKQpEiRahSpQqNGzemXr16nowzaP33hz9Cb2fU4Kflwu4fzu7sX5o/nqZRRXjrpSEOyUt2i5b/+3jhOte4uGwmypUzNKtajpde7ueVPr913UFY6cqYnv2Qsnvn31GixLmjXJgzjpJPjknfE0kXyqW9W3lm9DjSoqLAbke5cBr98QPojh9M/99Tx1DU208HUtJSMezfycPAw39Oxo7C8YJl2R1ZidizcfQZ8hxomtMCBjkhNwKCl7PP5r4vp/PO011ZsDJ3lR2FEEKI7GSb4Fy6dIkvvviCBQsWcPbsWTRNw2QyERkZiaZpJCYmYrFYUBSF0qVL06tXLwYMGEDx4sW9FX9A82UloUAo0Xrzzv67M74kUdWlx/nxm07jvN2i5VvXkJTuNhzVnEK+vfPdtmHo7bhr3YGzRKnwgwOwzH2dilWqOV4s6nRopaOwlY6C5u3T/2Yxozt9DP3xg6TG7iD1792Ust1+lEeHRuXrp6l8/TTdAD4eiVYgArVyTdTou1Er18ResSqYQnJ0TiJ4ZfXZXLAyZ4m9EEII4aosE5yxY8fyxRdfUKBAATp37kyrVq2oW7cupUqVynTc+fPn2b17N2vXrmXu3LnMmDGDZ599ljFjxng8+EDnq0pC/lqiNauk64NRL912c6nbJQ/+sKg5xJrMuR8+QtHpUBQdhe/rir5AoRyvO3B2LmGlK1OySjW+neTi584Ugr1SDeyVamBo15UCwI3kJPQnDqE7fgD9sQMoR/9Gf+P2m5MqSYkYdm3CsGsTAJregL1CdEbSY69cE61Q0Rydowge/vDZE0IIkbdkeWW1YcMGPvvsMzp16oSSzfSTUqVKUapUKTp06MAHH3zAsmXLmDJlikeCDTa++uH3xxKt/0261KRr7Fz/Hb8OfiN9CtnTj1PrNgnO7RYt+3pRc1xcHEcTrJR4aPC/leB+mEIxXRoj3nv99g38h8fOJV8B1JoNUGs2wAokJiQQab6B/sjf6I/uQ3fkb3RnT6BoWrbNKKoN/bH0JInV3wPpFdvUKnVQq9ZGrVYHrUTZO4tVBAxff/aEEELkPVn+wqxduzbHjSmKQufOnencufMdBZVX+OqH3x/vqN5MutSka1z6dW5GSeij/2zEOWFANxasXJvllLrbVeLydaWuibPmoev0YqaksmS3YVTe8nmOR828di6KglaiLLYSZbE1fyD9byk30pOXI/vQHd2H/th+lLTU2zalu3wR3eVfMG7+BQB7RGF0d1VHX7MBatU62MtUAJ3OvfELv+Drz54QQoi8R26h+ZA7f/hzsqbGXYnVf18zxJbKW8MHuXSx7izWm0nXpRWzM5IbSE8EUhs/yrMTZ2eUVHY2pe52lbiyezx23z5mTprm0fVIWSWVqbqcr1X577mcvnKdckUKem+Bdnh+1FoNUWs1TP93u4ruzAl0/4zy6I/sQ3fp/G2b0SVeJXzXJrg5rS1fQdSqtVCrpo/y2MtXBr18PQUDqZInhBDC23J8BZGUlMTp06dJSEhAczJV5d5773VLYHnBrT/8EXo7o3Lxw5/TNTW5Taz+m5iE2c0cOn8VfdfXMtpwZR1PVrFWLGhENaegaXaHRCBx20qK/ZPcQNZT6m5XicvZ43FxcTz/4VdoHV/w6Hokd4/W3TyXI0eOEB0d7a4wc06nx16+MvbylbG1eRgAJeEKuqN/oz+yD/3Rv9GdPIxis2bbjJJ8HcPOTRh2/pPwhIajRtf8N+GpWBWMJo+fjvAMqZInhBDCm1y+urp69SojRoxg6dKlqKrq8LimaSiKwtWrV90aYLD77w9/YmLibRfTO5PTNTW5uaN6a2KimlO49MMUiiVdy6hM5so6nqxitf8xA/3q6Wh2Q3rC9Z9EwK5aPTalbuKseRnJzX/jcfd6JE9M04mLi+Pt6bMxG8J8Ugkvq1FDLbIIaoMY1AYx6QdazOnlqQ/tQX9oL/qj+1DMadm2raSlYIj9E0PsnwCY0XE8JIIiTVtQoHEMauW7pVKbEEIIIZxyOcEZOnQoq1atYuDAgTRt2pTIyEhPxiVyIDdranJ6R9VZYlKy27D0KWVdXnDpNbOL1WzMx9ejn+LNydPZdutGnOcOOyQ97lqr5K31SO6epuPrSng5en1TCPZqdbBXq4MVwGZDF3cY655tnFi9nEq2ZArYsl/HE4Kd6uZrsH4JrF+CZjSiRtdCrV4PtcY92CtUBYNMaRNCCCFEDhKcdevWMXjwYN566y1PxiNywRvFCrJKBDTNnqPXzC7WqKgovv74A4eRgYdGDmbCQs/seu7NQg/unKbj60p4d/T6BgP2SjW4UbQMb2w+Rfx9A6mUeIp7Lu/nnssHqHf5AIXN17NtQrFaMezfiWH/Tlg0O31KW9XaqDXuQa1eDwpKWWohhBAir3L5Ki4sLIzy5ct7MhaRS+6a/pRdoYKsEgHNbs/4/668piux3poIJCYm8nWVaI8sUh7Rvw9PjP0E9Z9paoFS4cnXlfDc9fpFwwycOH+cjdtWskGzoygmIhqNpHPcckonXaFyoWLcc3k/JVKzn/qqpKVg2LMVw56tAITkK4BW4x5s1e9BrVEPrWQ5UJSA2OBWCCGEEHfG5QSnR48e/Pzzz/Tv39+T8YhccMf0p9tNOXKWmNh//pimhYyYN3yaXkXNhdfMbayeWqQcFRXF9Jf7MXPh/ICq8OTrvUXc9fq9OrRm9YTPKfnkmH/3B5ozjpavP8uClWv5snZv9KYwSqdcot7l/dxzYS/3nt9BUTX7NTz65CTY/juG7b8DYC9UlOvlq/D9vvNcbDmES5Hl/GaD22ARFxfHuzO+JFHVSfIohBDCp5SEhASnu/b99ddfmf7dbDbz2muvUbRoUfr06UPZsmXR6/UOz6tfv75nIs2hxMTb78CeU6mpqYSFhbm93VvbP3X6NNPmfs8Vs50iITqGPNGd8uXKuaXtrLz67mT2N+jncMFaY8dXfDDqJYBs44qPj6d48eJ3FGNuY/fn9j3V9qnTpzNVf1PNKSgrpjL95X53/F65KbvY3fH6qampjPno0yzfd0Oe6O78NV56iorhJkIO703/58he9Ek5+7yfyleSHcVrsrVQFRLP7ObNN0bm6Pnyfs/MG+9HkH73Rdsg/e6LtkH63Rdtg/S7L9rOTYGt28nydmvbtm1RFCXT326WhV6/fr3D8f5WRc0TneXJdm9KSEjghSlfZ4yUXDSn8MKU6dneZXZ12k12sSeqOqdTjhJVXcbzakVEMPP9mk6fHx8f79G+8XS/Z9W+O6Y0eSL2WhERzB07lDc/+vTfKmpjh7r9jnlWsd98/Ux9k4vXz+59V6tmzexfo1JV7B26k6pp6M6eRL9/J/oDO9Ef3I2Skpzt65ZPvkD5ExfoeuI37IA25TXUmg2w1WyIvVKN2xYsCNb3e27NnDTNsRphxxeYuXC+W0devdnvnpjOGKjvGXm/+6Zt6XfftC397pu23S3LX/Hp06d7Mw7xj5wu3nZXNS1fT3nyR76uVHY7UVFRvPH8Mz7bB8cd0wZv975z6TUUBXvZitjLVsR6/6NgV0nZt4uI04fR79+F/vBeFIs5y6frAI4fQH/8AKalc9MLFtSoh61mI9SaDdBKlLmjc8wLfL0mzN38/bMvhBAie1levT7++OPejEP843KqDTXpGpdWzEbT7CiKjsL3dc3yQsFd1bQ8sU9LoPN1pbJgc+sd8YGPPeyZ951OjzUqGmvtBlgffBysFnTHDnBjyzrO/v4bNUnFqDnu5XWTkpaSadNRe7HSqLUaYqvZIL1CW3j+3McWpILtBol89oUQIrDl6tcnMTGR06dPA1CuXLmAGrLydyHWZC6t/pqS3Yb9u+j6hylEl3S+i7u77py6e5+WYBBsd6V9ydkd8ec/nMrcsUM9/74zmrBXq0N4tTqYWnfh+c+/pmTSZZraE2kVbif04ulsn667dA7d2p8wrv0JTafDXvluSpS6C53uAewVq4LOcS1iXhNsN0jksy+EEIEtRwnOtm3bGDt2LNu2bcv098aNGzNmzBiaNGni1uDyIp3eQMlugx021NRt+dzp8e68c+qpSmWBKtjuSvuS0zviHV/IuCPurfddVFQUk995M+PfbUBywhX0+3ag37cd/b4d6JISsny+YrejPxxL6cOx8PtPaPkKYKtRH7VmA9TajdAKe2Zhqr+7eYMkUxW1AL5BIp99IYQIbC5/W69Zs4aePXuSP39+nnnmGSpXrgzA0aNH+eGHH+jcuTPffPMNbdu29ViweUGqLsTpncNUXYjT44Ptzqk/kb51H3++I65FFsHW/AFszR8Aux3d6WMZyY7+cCyKzZrlc5XkJIzb12Pcvh4AtVwl1NqNsdVtkl6sQJ93LoijoqL4YNRLQTGiL599IYQIbC7/+o4ZM4aKFSuyevVqChUqlOmx119/nfvvv59x48ZJgnOHcnrnUKaWeY70rfsEzB1xnQ57VDT2qOj09TvmVPQH96Dftx1D7HZ0509l+3T96WPoTx/DtPyb9NGdmg1R6zTBVqsRFIz00kmIOyWffSGECGwuX10cPXqU0aNHOyQ3AIULF6Zv37688847bg0uL8rNnUOZWuY50rfu4ex9rayYyoixQ30dWvZCwlDrNEGt0wQLoFy5iH7fDlK3rCXy1GGU5KQsn6okJ2HcthbjtrVoioL9rmrYaqe3ZY+KBp3Oe+chckw++0IIEbhcTnAqVKhAcnLWe0skJyfL3S03kDuHIhg5e18PfLlfwL2vtSIlsLV4kJOlqxBd6S50Jw6nj+7s/RPdsf0omt3p8xRNQ3/sAPpjB+DHr7BHFE6fylanMerdDaQymxBCCOFGLic4I0eO5OWXX6ZNmzbUr18/02Pbt2/niy++4MMPP3R7gHmRP9059MRmd/4kLi4u88LoIDs/f3Lr+zoxMdGH0biBTo+9UnXslapjffhJuJGIIXY7+j1bMez9EyX5etZPTbyKbuNKjBtXoun1qNG10qey1WkC+WQqmxBCCHEnXE5w/vjjD0qWLEm7du2oV68elSpVAuDYsWPs2rWL6tWrs3HjRjZu3JjxHEVRmDRpkvujFl4R7JvdBfv5CS/LH4GtaVtsTdtitqvojh/EsHsL+r3b0McdyfJpiqpiOLgbw8HdhCz8jJDCxbHfcy/qPfeiVq0DBqMXT0IIIYQIfC4nOF9++WXG/9+5cyc7d+7M9Pj+/fvZv39/pr9JghPYgn2zu9udnztGr06dPs3MSdOCdgRMZEGnx175biyV74Zu/VGuXUa/dxuGvdvQ79uBkpaS5VMNV+Phtx/htx/RwvNhq9UYtd692Go3gnwFvHgSQgghRGByOcG5du2aJ+MQfsifS/u6Q3bn547Rnbi4OJ7/8Cu0ji/ICFEepxUqiq3Fg9haPAg2K/rDselT2fZszbYym5KS/G+hAr0etWod1HuaY6vXDK1oSS+egRBCCBE4/KxGq/AnAVPaN5eyOz93jF5NnDUvI7nJbRsis6BYE2Ywota4B7XGPVh6DUaJP4dhz9b0qWwHdqFYLU6fpqgqhv07MezfSci8T1DLV0of2anXDHuFqqAoXj4RIYQQwj/l6krVarWSmJiIpmkOjxUrVuyOgxL+Idg3u8vu/EZO/b87Hr0K9hEwb/PGmilfJFBa8dJY23XF2q4rmNMwb99AwUO70e/ajC4pIcvn6U8dQ3/qGKaf5mAvVBS1bjNs99yLWr0eGE0ejVkIIYTwZy4nOGazmcmTJzN//nzOnz/vNLkBuHr1qtuCE74V7CWrb55fpipq/5yfO0avgn0EzNs8vSbML4pOhISSVqsxIc3vB7uK7tgBDLs2Ydi5KdupbLprl9GtW4px3VK00DDUWo2w1bs3vSpb/oLeiV0IIYTwEy5faQ0bNoxvv/2WRo0a0blzZwoWlB/NvMCfSlZ7QlRUFB+MeomIiIhMf3fH6NWI/n14YuwnqP9MUwu2ETBv8/SImN8V1dDpsUfXxBJdE0uPgSgXTmPYuQnDrs3ojuzLes+dtFQM23/HsP13NJ0OtVpdbA1iUOvfhxZZxMsnkS4ophYKIYQIGC4nOMuWLaNXr17MmDHDk/EI4RfcMXoVFRXF9Jf7MXPh/KAcAfM2T4+I+fuUQq1kOawde2Lt2BOuJ2DYuxXDzk3oY7ejWNKcPkex2zPW7WhzP8Ze6W7Umo1QmrdDK1bKK3H7xciYEEKIPMXlK4Pw8HAaNGjgyViE8CvuGL0qX65cUI+AeZOn14QF1JTCgpHYmrfH1rw9WMzo9+/EsGsz+l2b0CU6nyasaBr6o/uIOLoPlnyJGhWNrUEMtgYxaKU9l2j43ciYEEKIoOfyL3e3bt1YuXIlTz/9tCfjcRtP7JKemprq9ja91b6nYwfP7Uwv/Z69vNLvkZGRTB3Wl2lzv+KK2U6REB1DhvUlMjIyow9OnT7NtLnfcynFSrFwI0Oe6E75cuVcan/gYw/z/IdTM00pVFZMZeDL/Zz2sV/1e8Ua6f888jTG00cJjf2TsNhtGLNZt6OPO4I+7gghi2ZjLVGW1LrNSKvdFGvZirmuyOYs9gtJaU5Hxi4kpeWqD/2q3z3Y/s33csZ7PZv3snzP+KZ96XfftC/97pv2Pdn2rcsE3MHlBGfcuHEMHTqUbt260adPH0qXLo1er3c4rn79+m4NMLc80VmebNcb7Xuy7fj4+ICN3dPtS7+7r/1aERHMfL+m08fi4uJ4YcrXGaMFl8wpvDBlustToWpFRDB37NDM0xLHDnX6XL/u90INoXZDzDyP5cJpDDs2YNixEf2Jg1k+xXjxDMbV31Fw9XfYi5XCVv8+bA1bYL+rOuh0dxR7yQKhXHQyMlayQGiOz9Ov+92N7d/6Xr7owntZvmd80770u2/al373Tfuejt2dXE5wUlJSSE1NZe3ataxdu9bhcU3TUBRFqqgJIdzOlUXq7pgKFWxFNbSS5bB26o21U2+UKxcx/LURtq7FdPwAShaVMHWXzmNa9R2mVd9hjyyKrX5z1AYxqFVrgz7n0/WCvdy8J8i0PiGEuDMu/1oNGTKEFStW8Oijj1K/fn2poiaE8ApXF6nntkhAXqnwpRUpgfX+biQ2bkckKvqdf6SP7BzYiaKqTp+jS7iMac0SWLMErUAEtvox2Bq3Qq1WB3SOI/jOBHu5eU/w94IXQgjh71xOcNatW8ezzz7LhAkTPBmPEEJk4urd7NwUCcirFb60iMLYWnXG1qoz3LiOYfcWDDs2oN/3J4rV6vQ5SlIixvXLMK5fRqLOhNrgPkLbdMZepeZtk51gGhnzRkIcUAUvhBDCD7k8ubpgwYLcddddnoxFeEhcXByvvjuZnq+MY8jod4iLi/N1SEK4zNW72SP690G/ejqqOQXg36lQ/ftk2XZ2yVOekb8gtuYPkDbsHZKn/UTa4DFYG7dCCw3L8ikRdguF/1xD+IQXCR/eA9O8qeiO7AO78715gsXNhHhP7d5ciBnEntq96Tt+mtu/U3PzXhZCCPEvl28HPfnkk3z//ff069cPgyG47iIF8xSVvHqHWgQPV+9m/3cq1IWkNEoWCL3tVCiZCnSL0HBsjVtha9wKs8WM/u+/MOz4HcumNeTTnPeJLuEKpl8Xpf9TqCj2xq2xNWqZXqAgl9XY/JW31sbItD4hhLgzLmcqlStXZvny5dx333307NmTMmXKOK2i1qVLF7cG6GnBngDIYlUR6HKySP3mVKjExESXqr34w1SgW2+wDHzsYWr5Q6UaUwhqvWao9ZrR52AaUVWa0u7MZlqe205+m/NyoYZrl+FmgYKiJbE1apWe7FSoEhTJjjcT4mCa1ieEEN7m8q/4gAEDMv7/2LFjnWCaoAAAIABJREFUnR6jKErAJTjBngDIHWoR6Dx5N9vXFb6c3WB5/sOpzM2iPLWvRIab2FC4GptK3YNRtdL04h7anNpI63N/EqZlUaDg8gVMKxZgWrEAc+HiKM3aYWvcCnu5SgGb7PhDQiyEEOL2XP5WXrZsmSfj8JlgTwDkB1kEA0/dzfb1VCCnN1g6vuB3N1j+mwgSEs66IjXYsGMdFd/4jIoJ5zH8uQ7Dri0oljSnzw+5Gg8/z8f083zspcpha9Qaa9M2aKXKe/lM7oyvE2IhhBCucfkqt3nz5p6Mw2eCPQGQH2Qhsufu5Ckna/oC5QZLVolg+agoVKJRG8RgNqdi2byW4wu/pqb5GqF259XYdOdPY/rpa0w/fY1aoQq2pu2wNWmNFlnEy2eVc75OiHMqmNeXCiFEdoLjKv4OBHsCcPMH+d0ZX5Ko6vz+B1mIQJbTNX2BdIPltolgSBip9zRn7PIdXG/3FPed/4t2ZzbT7OJuTHbnCZv+5GH0Jw9j+vZT1Op105OdBvdBeH4PncWdC5S1McG+vlQIIbKT5a/oc889x0svvUSVKlVy1ODhw4eZPHkyn3322R0H5w2BdkcuN6Kiovhg1EsuLboWQuReTtf0jejfh16vTeCisRCKTodmt1PYfIURH/j/BXRWioYZOGvXWF2+OavLNyefNYWYU5t49OCP1LEmoKiOyY6i2THs34lh/07sX0/mL2MhfjEW50RECYYPeDKovo+9JdjXlwohRHayTHCuXbtG06ZNadq0KV27dqVly5ZZ7oNz/Phx1q1bx48//sjWrVtp166dxwL2hEC5IyeE8G+5mXKmmMIo0WlgxgiyuvQjT4fpUbeOil+3w8q/d9Nz9IckFy2MYfvvGLauQX9wN4qmOTxfZ7PS0BZPw9R4rqceZ82YPYT37U+xFvf74GwCV6BMfxRCCE/IMsFZuHAh27Zt45NPPmHkyJGoqkqBAgWIiooiMjISTdNISEjg1KlTJCUlYTAYaN++PStXrqRhw4YuB7B582amTp3Knj17OH/+PDNmzKBXr14A2Gw2xo8fz2+//cbJkycpUKAA9913H2PGjKFs2bJ3fvZCCOFGOZ1yNnHWPHSdXsx0l53OwwP6LvvtRsVtLTtha9kJ5Wo8hm3rMGz5DX3cEadtFbSm0IUU+L/3sP80i9JV70Fn6o69fOWArcTmLYE0/VEIIdwt22+6xo0bM3/+fC5fvsyqVavYvn07hw8fJj4+HoDChQvTtWtXGjduTLt27ShSJOeLRJOTk7n77rvp1asXgwYNyvRYSkoKsbGxvPrqq9SsWZPr168zatQounfvzqZNm9DpdDl+PSGE8JScrum707vs/rqI3JVRca1wcawdHsPa4TGUc3EYt/zGlZ+/p5TdeSU23bXLlNj6C2z9BXvpKKxN22Jr2hatWCm/7QdfCvb1pUIIkR2XbuUULVqUPn360KdPH7cH0K5du4wpbYMHD870WMGCBVm8eHGmv02ZMoUmTZpw6NAhqlev7vZ4hBDCmf9eRIfYUnlr+CCHi+icrum7k7vswbSIXCsdheXRZ3h913ns5Zvw4IUdtDuzmcLm606P152LI2TRbEIWzSa5fDRLzlo41vZVUvMXC+h+cKe8sL5UCCGyEnBj1devX0dRFCIjI30dihAij7g1mVCzuYjOyZo+Z3fZlRVTGTF26G2fG4yLyEcMeIK+46cR+8DzTK79JA3O7uDB7V/zgPEGeovZ6XPynTrC/4BXfh3G76Ub8nNUCza3ey6g+8FdZH2pECKvCqgEx2q18sYbb9ChQwdKlSrl63CEEHmEp5IJZ3fZB77cz6W77MG4iPzW/kgOMxA1bjKpJYtj2LUZ828/UfD43yiq6vDcELuV+89s5v4zm7lkKsBGfSS608exl3NeHEcIIUTwCpgER1VVBgwYQFJSEgsXLvR1OH5D5p4LkTO5+cx4Mpm49S57YmKiS8/z9iJyb33XZDXqYGvShuNFyhNdshiG7b9j3PIb+sOxTtsoZkmiK0nwxtOoUdHYmj+ArUkbtIKF3B6vEEII/6MkJCQ41un0kbJlyzJx4sSMKmo3qarK008/zcGDB1m+fDlFixa9bVtHjjivyhNMzp47z6jZi9E/NOzfErPLpvDuM10pU1pGuIS4VW4/M29Pn83xe59zSCbu2vQZbzz/jDdCd+DNz7+/fteYrl1i52cf0zLETrmUS9keq+n0XK9Ukyu1m3I9ujaaweilKIUQQmQnOjra7W36fYJjs9no168fhw4dYvny5RQrVsxn8SUmJnp0s8yctj9k9Dvsqd3b4aKrzt75DndAPR37kSNHPPIGBf/rd39pG6Tfc9p2Tj4z/+VsDY5+9XSPLGTPSb/kZlQlN/3uar/54v3e85VxXLjvOepeOUinuN9pe2YL+W2p2baj5SuArXFrrM0fwH5XdVCUoHy/u4u7v2f++76N0NsZNfhpj808kH53Tt7vWZN+937bnuDzKWrJyckcP34cTdOw2+2cOXOG2NhYChUqRKlSpXjyySfZs2cPCxYsQNO0jBLVBQsWJDQ01MfR+1YwzsEXwpNy+5m5dW1IiC2Vt/ygIpW3FpH783dN0TADZy2p7C5and1FqzOxTj9iTm3i8QPfU9N8DUWzOzxHSU7CuPYnjGt/wl6qHNZ7H0BfqwkE0I93oAqm6n9CCP/l841kdu3aRUxMDC1btiQtLY0JEybQokULJkyYwNmzZ1m5ciXnz5+nZcuWVKtWLeOfH3/80deh+1zRMAOqOSXT32QjNyGydiefmZvJxLeTxvDG88/kqYsxf/6uGdG/D/rV0zPiS1FVft33F7pRk0n56DvMjz2HWqZCls/XnT9NyA+zKDF2AKEfvIJh21rIomKbuHPZFewQQgh3yfLX6aGHHspxY4qisHTp0hw9p3nz5ly7di3Lx7N7LK+TjdyEyBn5zOSOP/dbdvu9aIC1Y0+sHR5Dd/Iwhk2rMW75DeWG4/46iqZh+HsHhr93oOUriLVZW2wxHbGXr+z9kwpi/jwaKIQIHlkmOHa7HUVRMv3t7NmznDx5koiIiIy7l3FxcSQmJlKxYkXKlCnj2WhFJrKRmxA5I5+Z3PH3frvtVD1FwV6xKpaKVbH0HIR+7zaMf6xGv3sLiup4Ya0kX8f062JMvy5GrVAFa8yD2Jq0hnwFPHgWeYO3q/8JIfKmLL9Rli9fnunft2zZwuOPP860adPo2bMner0eSK9w9s033/Dmm28yY8YMz0YrHMhGbkLkjHxmcido+s1gRL2nOeo9zeFGIsatazH8sQr9iUNOD9efPIz+5GG0BdOxNYjB1uJB1Kp1QOfzGd4ByZ9HA4UQwcPlWyajR4+mT58+9O7dO9Pf9Xo9TzzxBIcOHeJ///sfa9ascXuQQgjhS7dWK+vW9j6PVdnxV/6459Ydx5Q/AmvbLljbdiH5wB4K7dyAcfOvzqewWS0Yt/yGcctv2IuVxhrTAVvz9miFfVfZMxDdOhoYobczyo9GA4UQwcHlBOfvv/+mR48eWT5evnx5Zs+e7ZaghBDCXzir+rRz9hQWVIjKMxdl/lj5yt0x2UpXwFK9DpYeA9Hv2oxxw3L0+3agaI47KegunSNk0WxMi79CrdUQa0xH1HrNQPbWccl/RwMDrfSsECIwuDzGXrJkSX788UdsNsf5yjabjcWLF1OyZEm3BieEEJB+MTtk9Dv0fGUcQ0a/Q1xcnNde21nVJ/1Dw/JU1Sd/rHzlsZiMJtRGLUl7ZSIpH36LuUs/7EWd/7Ypmh3D3m2ETRtD+LDumBbMQHfmxJ29vsiWL78LhBCBw+URnBdffJHhw4fTtm1b+vbty1133QXAsWPH+Prrr4mNjeXDDz/0WKBCiLzJ16MHUvXJ9T44dfo0MydN88o0Nm/8d9GKlMD6SF+snZ9Af2AXhg0rMPy1AcVqdThWl5SAadV3mFZ9h1qpOtaWD2Fr3ApCwtwWT17n6+8CIUTgcDnBeeqpp9DpdLz99tu89NJLGRXWNE2jaNGifPTRR/Tt29djgQoh8qbs7tR7Y9G7VH1yrQ/i4uJ4/sOv0Dq+4JWLT6/+d9HpUO+uj3p3fcw3rmPc8huGDSvQnzrq9HD9sQPojx1A+2Y61mbtsLV8CCKKuj+uPMbX3wVCiMCRozIwTz75JPv372f16tXMmjWLWbNm8csvv3DgwAFJboQQHuHrEZRbN5JUzSmoy6Ywon8fr7y+P3DWB/rV0zP1wcRZ8zKSG/D8NDZXYvKI/AWxtutK6vhZpIz7HEubR9DC8zk9VElNxrRmCeGjn6HY5FcxbFwJ5jTPxhfEfP1dIIQIHDm+1WUwGGjUqBGNGjXyRDxCCJGJr0dQnO0B0+2ZrnlqSowr++B4++LTH/bmsVeogqVCFSw9B2H4a2P6FLb9O50eazp5CGa9nz6qc+/92Fo+hL1sRa/FGgx8/V0ghAgcOfpWuHr1KjNmzGDjxo1cvnyZTz/9lEaNGnH16lW++OILHnnkEapWreqpWIUQeZA/7Jtx6x4wR44c8dpr54QnSznfbh8cX1x8+s3ePKYQbE3bYmvaFiX+HMb1P2PYuBLd9WsOhyopN/7dRDS6JtZWnbE1bAGmEB8EHlj84btACBEYXP7liYuLo0OHDly9epUaNWpw4sQJUlNTAShcuDCLFy/m8uXLTJw40WPBCiHyHn+4Ux8IfL0Ae0T/Pjwx9hPUf6ap5dWLT614aSw9nsXStR/6nZswrlua5aiO/sg+9Ef2oc2fivXe+7G26oxWWt7XWZHvAiGEq1xOcMaMGYOmaWzdupUCBQpQuXLlTI937NiR5cuXuz1AIYTwmzv1fszXC7CjoqKY/nI/Zi6c77aLz4DeYNVgRG3UErVRS5QLZ7D/soj8f65FSUp0OFRJTsL0yyJMvyxCrVIba6uHsDWIkVEdJ+S7QAjhCpcTnPXr1zN06FAqVKjA1atXHR6Piori3Llzbg1OCCGEa/xhAXb5cuXcdvEZTBusaiXLcv3hp1B6DcKw8w8M65ZhOLDL6bH6w3vRH96bPqrTvD3Wlp3QSpX3csRCCBHYXK6iZjabiYyMzPLxxMREdLocFWUTQgjhJkXDDBkVxW4K5AXYQbnBqtGErXFr0l77iOT352Jp3wMtf0Gnhyo3rmNa9R35XnuS0PdfQr9jI6hSLUwIIVzhckZSvXp1Nm3alOXjy5cvp3bt2m4JSgghRM74rGyyh/jDiJQnaSXLYek1mOSPviftuTdQq9XJ8ljD/p2ETR1N+CuPY1w6FyXRcRaFEEKIf7l8a2/QoEEMHDiQ6tWr06VLFwDsdjuHDx/mgw8+YMeOHcyfP99jgeZUYqLjPOc7dbOogqd4sn1Pxw6e6XOQfr8d6Xfvtn2Tv/V7ZGQkU4f1Zdrcr7hitlMkRMeQYX2JjIzMFGug9HuE3u60KluE3h583+81GkKNhhguniHfptWE/7kOXUqSw2G6q/GELJqNacnXpNZtRvJ9HbFUrEZqmuf31vG397s/tJ8Xv2f8oX3pd9+078m2IyIi3N6mywlO9+7dOXPmDO+++y7vvvsuAI8++igAOp2OcePG0aFDB7cHmFue6CxPtuuN9j3Zdnx8fMDG7un2pd99035e7PdaERHMfL+mx9p3hbvaHjX4aYeSwOqyKYwaPzx4v98jIqDK3aT0fh7D9t8xrluK/sg+h8MU1Ub4XxsI/2sDavnKXG/2AMbWD0FIqEfi9tf3uz+0nxe/Z/yhfel337Tv6djdKUeTs4cPH0737t1ZunQpx48fx263U7FiRR566CEqVKjgoRCFEELkNXl6g1VTCLZ778d27/3o4o5gXPMThi2/oVgcR2r0p45S6NRRtKVfpxclaPMIWsmyPgg6eHlyfykhhGfkePVp2bJlGTx4sCdiEUIIITIEygarnmSPisb89CuYHxuI8Y9VGNcsQXfxrMNxSsoNTL/8gOmXH7DVbIi1zSOodZuATu+DqINHdvtLZVd4SQjhWzkue7Z+/XrGjx/P0KFDOXz4MAA3btxg06ZNJCQkuD1AIYQQIs/LVwDrA91JeW8uqa98gK3evWiK859ww77thH38P8JHPI7x5/lwXX6bcyu7/aWEEP7L5RGc1NRU+vTpw7p16zL+9uijj1KlShVMJhN9+/ZlwIABjBw50iOBCiGEEHmeTodaqxFqrUYol85jXLcM/fpl6JOdFCW4fJGQ77/A9OP/YWvUCmvbLtgrVfdB0IEr2Kv5CRGsXB7BGT9+PH/88Qeff/45sbGxaJqW8ZjJZOKRRx5h1apVHglSCCGEEJlpxUph6fEsF976krQBr6NmkbwoNivGzb8Q/tYgwt4ahGHLGrDJBborgm1/KSHyCpcTnCVLltC/f3+6detGWFiYw+PR0dGcPHnSnbEJIYTIw+Li4hgy+h16vjKOIaPf4ey5874OyT8ZTdiaP0Dqm5+SMnYm1vs6oBlNTg/VHztA6GfjCX+5J8alc2X62m0E2/5SQuQVLt+CuHLlClWrVs3ycUVRSPNCLX4hhBDBz9ni7p2zp7CgQpRUsMqGvWJVzP1HYu75HMYNKzGuXYru0jmH43QJl9P31Fk6B1vTdljbPYq9fCUfROzfnFXzGzF6CFFRUR7bK0UIcedcTnDKli3LoUOHsnx869at3HXXXW4JSgghRN7mbHE3Dw1j4qx5mSqriSzkj8DasSfW9j3Qx/6J8ddFGGK3OxymWK0YN6zAuGEFtmp1sd7/KGq9ZlJ97T9ureYnhPB/Odroc9q0aXTq1CljJEdRFABmz57NkiVLeOuttzwTpRBCiDxFFne7iU6HWqcJap0mKOfiMP26GMMfq53uqWM4uBvDwd3Yi5XC2rYL1piOEJ7fB0ELIcSdcTnBeemll/jrr7/o1KkTlStXRlEUXnvtNa5evcrFixdp37697I8jhBDCLYqGGThrTsmU5Mji7jujlY7C3Hc45m79Mf6+HOOaH9FdvuhwnO7SeUIWzMC0+EuszdsTUqU+REf7IGIhhMgdl38pTCYT33//Pd9//z1LlixBURRsNht16tShS5cuPPbYYxkjOkIIcadk9/C8bUT/PpnW4KjmFNRlUxgxfrivQwt8+QqkT197oBv6XZsx/bII/aE9Docp5jRMa5ZQY80SbJsap09fq9kQ5LdeCOHncnwrrHv37nTv3t0TsQghBJD97uGS5ASXrBJZZ4u7uz3TNaD/+/td0q43oDaIIbVBDLq4Ixh/WYRh6xoUm9XhUMPebRj2bsNeqjyWdo9ia34/hDhWVBVCCH+Qq7H+ffv2cerUKQDKly9PzZo13RqUECJvy273cFnsGzxul8jeurj7yJEjPoz2zpw6fZoXpnztt0m7PSoa84DXsDw2EMO6ZRjXLEGXeNXhON35U4TO+Qht0SysrTpjbdcVLbKIDyIWQoisubwPDqTvhVOrVi1iYmLo3bs3vXv3JiYmhpo1a7J48WJPxSiEyGNkgXnekF0iG4hu3bcnLi4u47Fpc78PiHPVChbC+vCTpExeSNrA/6FWrOb0OCU5CdPP8wl/6TFCvngP3enjXo5UCCGy5vIIzrfffsugQYOIjo5m3LhxVK5cGYCjR48yZ84c+vfvj8VioWfPnh4LVgiRN8gC83/53bQmNwqmRPZ2o1FnE1MC61wNRmzN2mFr2paz61dz14FtGLb/jmK3ZzpMUW0Y/1iF8Y9V2Go2xNq+B2rNBrJORwjhUy5fLUyaNIn69evz888/ExoamumxAQMG0LFjRyZNmiQJjhDijjlbYK5fPZ0Ro4f4OjSvyu6iGQj4xCeYEtmsRqMeHvQqdaKjOHT4KCXbBOC5KgopZSthbtUey9V4jGt+wrhuKUpyksOhhn3bMezbjlr2Lqztu2Nr0gaMJh8ELYTI61yeonbmzBm6d+/ukNwAhIaG8thjj3H27Fm3BieEyJtuLjCvs3c+JTd8Sp298/1mrYI3ZXXRPPbjmfQdP409tXtzIWYQe2r3pu/4aZmmRAWCEf37oF89HdWcAvBvItu/j48jy7msRqNSi1dmyzU9hXuM4MLiTzKd69Vv3g6oc9UKF8fSfQDJH32H+YkXsRcv7fQ4/ZnjhM56n/BXemFcNh9uXPdypEKIvM7lW0fVqlXj/PnzWT5+7ty5jA1AhRDiTsnu4VlfNO85eZ58vcYEfBEGZ5XSRgRoIpvVaJSi6EAHYaUrU6zdE1xaMRtNs6MoOqoUjwjIcyUkLH0j0Nad0e/cjGnlQvRH9zkcpku4QsgPX2BaOhdrTAes93dDK1HGBwELIfIalxOct956i759+2bse/NfixYtYs6cOcyZM8ftAeZWYmKi29tMTU11e5veat/TsYNn+hyk329H+t27bd/kjX6P0NudXjSrqclOE58LSWm3jcvf+j0yMpJ3Xsk89TC7c/DX9/vAxx7m+Q+nonZ8IWNa5YXFn1Cs3RNc3bgY1ZyCqWgZSnZ5AUj/71hqx1duOR+fvt+ja0N0bYwnDlFg3RJC92xF0W5Zp2NJw/TbjxjXLCGtdhNutHoYy13VAfmeuR1/fb/7sn3pd9+078m2IyIi3N6mywnO1KlTKVKkCM888wyvvfYaFStWBODEiRNcunSJSpUq8cknn/DJJ59kPEdRFL777ju3B+0KT3SWJ9v1RvuebDs+Pj5gY/d0+9Lvvmk/GPp91OCnna5FqlulAsedJD4lC4S6FJf0u3N30natiAjmjh3KxFnz2Pz3UW7kL0mxdk9gKlqGwvd15cIPUyjZbVim/46jRg9x2/n4vN/rNkKt24iUS+cxrv4B44blKOa0TIcomkbYni2E7dmCWqkGlg49uFq5tnzPZMGf3+++bl/63Tftezp2d3I5wTl48CCKolC2bFkgfUoaQEhICGXLlsVsNnPo0KFMz1GkiooQQuRaVlO4ACnC4IduTqvMKA5RoBAA+gKFKEIKlbd8TqouJKCn4t2OVqwUlj4vYOnyFMb1yzD+shhdwmWH4/TH9hM2bSwlipRA7fAY1piOEOK4xlcIIXLD5QQnNjbWk3EIIYRwIqu1SMGydiUYOUtMB44eSq28tCl2vgJYH3wc6wPdMWxbh3HVQvSnjjkcZrhyEcO8TzD99DWWdo9ibfMI5C/og4CFEMHEz+tTCiGEcEaKMPi3W//7eGpOv98zGLHdez+2Zu3Q79+JceVCDLF/OhymJCUSsvhLTMu/wdqiE9b2PdCKFPdBwEKIYJDrBGfjxo189913XLhwgSpVqvDcc89Rrlw5d8YmhBBC5Fowb5IacBQF9e76qHfXR3fmBMbV32PY/CuKzZr5MHMapl9+wLjmR2xN2mLt2BN72Yq5ftlTp08zc9I0eQ8Ikcdkuw/Oe++9R6lSpbh8OfP82fnz5/Pwww8zb948fvvtN2bMmEHr1q05deqUR4MVQgghXBEXF8fjb07JtFfQ429OCbi9goKRvWxFzM+8SsqH35LU9lG0sHwOxyiqinHTasL/14/Qj0ahO5zzafJxcXE8/+FXAb9flBAi57JNcDZu3Ejr1q0pWrRoxt/MZjOvv/46BQsW5KeffuLMmTN8+eWX3Lhxg8mTJ3s8YCGEEOJ2xn48E12nFzPtFaTr9CJjP57p48jETVpkEa53fpLkyQsx9xiIPbKI0+MMuzcT/s4LhL09BP2uzWC3Oz3uVhNnzUP7p2w3ZN4vSggR3LJNcI4fP07dunUz/e33338nKSmJoUOHEhMTQ758+ejSpQs9evRg/fr1noxVCCGEcMmekxey3CRV+Jnw/Fgf7EXKpAWk9XsFe0nn0931R/YRNmUUYW88jeGP1WCzZdtsVhvlXk7N/nlCiMCX7Rqca9euUbJkyUx/27hxI4qi8MADD2T6e926dVm4cKH7IxRCCOETgbyGxZ6WnF4++5a9guxpKT6MSmTLaMLWshO2mA7od27CtHwB+uMHHA7Tnz2J/osJ2BfNxtq+O9YWD0JouMNxRcMMTjfKLRom9ZWECHbZfspLlCjB+fOZ73Zt2bKF8PBwqlWrlunvOp0Ok8nk/giFEEJ4XcZeLv/stXPWnELf8dP4Opty1Lcu6O7VoTULVq71SYJUJzqKzbdsrnnhhyk0iw6MBC1P0+lRG8SQWv8+9Ad3Y1z+DYbY7Y6HXY0n5JvpmH6ag7VtFyxtu0LByIzHR/TvwxNjP0H9Z5qa7BclRN6R7RS1+vXrs2DBAhISEgDYt28fu3btokWLFuj1+kzHHjp0iDJlynguUiGEEF4zcda8jOQGbr9+4dYF3dvLtOKpCZ/7bIH3Wy89TzFdGheXzeT84o+5uGwmxXRpvPXS8155feEGioJavR5pr0wk5a0vsDZpg6Y4XrYoyUmYfppDvpcfwzRvKsrVeCC9VPf0l/tRZ+98Sm74lDp752eboAshgke2IzgjR46kRYsW1K9fn6pVqxIbG4uiKAwbNizTcZqm8fPPP9O6dWuPBiuEEMI7crp+4dYF3YnbVlLyyTFOEyRv7N8TFRXFgvdev2WK3XM5urgN5Cl6wcYeFY150Ggs3fpjXLkQ44YVKFZLpmMUixnTr4swrv0JW/MHsDz4OOXLlZP9ooTIg7JNcKpWrcrSpUuZNGkSJ0+epHHjxgwdOpSGDRtmOm7jxo3kz5+fzp07ezRYIYQQ3pHT9Qu3JkSaZvf5Au872Qw1N1P0hOdpxUpheXIYlkeewvTbYoy//YiSnJTpGEW1Yfx9OYYNK1HuaQ5d+93RXjpCiMBz25V2jRo14rvvvsv2mJiYGDZv3uy2oIQQQvhWrw6tWTfxbQo//oZL6xduTYgURed0kX+gLPDOboqejAj4gYKRWLo+jaVjT4zrl2NctRDdtcx79imanfC/NsBfG7DVvw/LQ32wV6zqo4CFEN6U7RocIYQQeU9cXBz/+3Ix+R94mksrZnPuh8lc+vxl3nm6a5ajFyP690FZMRXVnF6lLKJxBy7MGZfx7xkJUv8+XjuPOyFK/8LDAAAgAElEQVQlhgNEaDjW9t1JmfhNeonpYqWdHmb4ayPhYwcSOmkEukN7vRykEMLbAuNWmhBCCK+5OXoRFhJOWJcXgPQEZcHK+dzbrKnT59xc0D1z4fx/q6i9/iwLVv777yMCaHqXlBgOMDdLTN/XHsO2dRiXzUd/7qTDYYbY7Rhit6NWrYPloT6oNRuAong/XiGER8k3tRBCiExyO3rhbEF3VgmRvxvRv0+mNThSYjhA6A3YmrXD1qQN+p2b0C/5P0ynjzkedmgPYYf2oFasmp7o1LsXdDKpRYhgIQmOEEKITGT0In1E6uvRQzJXUQugEag8T6dDbXAfVyvXovCpQ5iWzUN/ONbhMP2JQ4R9Mhq1bEWsnfpga9wSdHrH9rzoZvW+U1euU75IQaneJ0Qu5J1fKyGEEC6R0Yt0d1KFTfgJRUGt3ZjU2o3RHdyDadk8DPscNw3VnzmB/rPx2H/8EsuDj2O7934wGL0e7q3V+/ZI9T4hckVJSEjQfB2EJyQmJrq9zdTUVMLCwtzerjfa93Ts8fHxFC9e3CNtS79nTfrd+21D3uj3U6dPM23u91wx2ykSomPIE90pX66cW9rOrbzQ7/7WNgRfvxvjjlDgl+8Ji92W5fNshYpyo203kpu0BaPzRMcTsb/67mT2N+jnMHpaY8dXfDDqJbe9jrzfsxZs7/dAaDsiIsLtbQbtCI4nOsuT7XqjfU+2HR8fH7Cxe7p96XfftC/9fmft14qIYOb7NT3Sdm7lhX73x7aDrt9rN0Ct3YCU08cx/jwfw7Z1KJo90yGGa5eJ/P4zCq5ZhPXBx7HGdARTyO3bvkOJqs7p+rdEVef215L3u3NB934PkLbdTVbUCSGEECLPsZe7C/Og0aS8NwdrTEc0vePaG93VS4TM/ZjwV3tj/HUxWMwejalomCGjtPpNeW39mxDuIAmOEEIIIfIsrWRZzM+8SsrEb7C07YLmZEqa7tplQuZ9QvgIzyY6I/r3Qb96esDuHyWEv5AERwghhBB5nlakBJYnXiRl4gIs9z+KZjQ5HKNLuJnoPE6+9cvcnujcrN5XZ+98IlZ9SJ2986XAgBC5IGOeQgghhBD/0AoVxdL7BawPPo5x+QKM65aiWC2ZjtElXCFy8SzsaxZjfbAX1ladna7RyY2b1fuOHDlCdHS0W9oUIq+RERwhhBBCiFtokUWw9B5CyqQFWNr3QHOSwOgSrxLyzXTCX+mJcdV3YE7zQaRCiFvJCI4QQgi/cXOTw4zNNWWTQ+FjWmQRLL0GY+3YE+OKbzGu/QnllqlpusRrhCyYgXH5Aqwde2Jt3RlCPFcOWAiRPUlwhBBC+IVbNzk8K5scBr1Tp08zc9K0gEhotYjC6YnOg70wrlyI4bcf0d2a6Fy/Rsi3n/6b6LR5WBIdIXxApqgJIYTwCxNnzctIbiB9/w/1geeZOGuejyMTnhAXF8fzH37Fntq9uRAziD21e9N3/DTi4uJ8HVq2tIKFsDz2HBfHfIGlYy+0kFCHY3RJCYQs/Ix8L/fEuHwBmFN9EKkQeZckOEIIIfzC5VSb000OL6fafBSR8KSJs+ahdXwhYBNae4EILI8NJHnSt1gedJ7oKEmJhHw3k/BXHse4+nuP76MjhEgnCY4QQgi/IJsc5i1Bk9AWjMTSYyDJH36LpVNvtFDHKWm669fSixG82hvDmp/AZvVBoELkHZLgCCGE8AuyyWHeEnQJbYFILN0HpCc6D/VBCw13OER37TKhcz4ifGQfDBtWgBpgyZwQAUISHCGEEH7hv5scltzwqWxyGORG9O+DsmJq8CW0+SOwdOv/74iOyckancsXCZ39AeGvP4Vh869gV30QqBDBy+e3STZv3szUqVPZs2cP58+fZ8aMGfTq1SvTMRMmTGDOnDkkJCRQv359Jk2aRLVq1XwUsRBCCE+5ucmhCH5RUVFMf7kfMxfO/7eKWjAltPkLYuk+AOsD3dI3DF2zxHHD0ItnCJ35Duqy+Vi6PoVaPwZ0eePes5SEF57k8wQnOTmZu+++m169ejFo0CCHx6dMmcKnn37KjBkzqFy5Mu+//z5dunRhx44d5MuXzwcRCyGEEMIdypcrF/QJrVawUHp56fY9MC6bh3H9zyi3TE3TnztJ2LSxqOUrYenyNGq9Zj6K1jukJLzwNJ/fJmjXrh1vvPEGnTt3RlEUh8c/++wzhg8fTqdOnahWrRqffvopN27c4IcffvBBtEIIIYQQOacVKorlyWGkTJyPtUUnNCcjNfpTxwj7+H+EjRtEgWP7QNN8EKnnSUl44Wk+T3Cyc/LkSS5evEirVq0y/hYaGkqzZs3Ytm2bDyMTQgghhMg5rUgJzE+/Qsp7c7He+wCa4iTROXGQygs+JuydF9Af2OWDKD0raCroCb/l1wlOfHw8iqJQrFixTH8vVqwY8fHxPopKCCGEEOLOaCXKYH72dVLe/Qpr41ZOj9Ef2UfYe8MJff8ldEf2eTlCzwm6CnrC7ygJCQl+M/5ZtmxZJk6cmFFk4M8//6R9+/bExsZSpkyZjOOGDBnChQsXsp2mduTIEY/HK4QQQgjhDqHxZyj1+1IiD2U9YpNYqSbnW3UhtWR5L0bmfmfPnWfU7MXoHxqWPj3NnIK6bArvPtOVMqVL+Tq8oHX23Hm++nEF1ywahUwK/bp09Iv+jo6Odnubfp0qFy9eHE3TuHTpUqYE59KlSxQvXjzb53qisxITE4mIiHB7u95o39OxHzlyxCN9DtLv2ZF+937bIP3ui7ZB+t0XbYP0u9fajo6Ge1uRcuIQph+/wrBnq8MhEcf2EXFsH9bGrbE8+jRaibK5eilf93t0dDQLKkRlrqI2frhLBQbk/Z679uPi4hg7d1nG2qdr5hTGzp3ucmEHT8fubn6d4FSoUIESJUqwbt066tatC0BaWhpbtmzh7bff9nF0QgghhBDuZa9YlbSX3uPsulVU+vMXDPt3Ohxj3LYWw47fscV0xPJwX7RCRX0Q6Z2RkvDelV1hh2D87+DzBCc5OZnjx4+jaRp2u50zZ84QGxtLoUKFKFu2LIMGDWLy5MlUrlyZSpUqMWnSJPLnz8+jjz7q69CFEEIIITwipWwl0lpNRndwNyGLZqM/HJvpcUVVMa5bhuGP1VjbPYrlwV6Qv6CPohX+Lq8VdvB5kYFdu3YRExNDy5YtSUtLY8KECbRo0YIJEyYA8OKLLzJ48GBeffVV2rRpQ3x8PIsXL5Y9cIQQQggR9OzV6pI66hNSX3oPtXwlh8cVqwXTigXkG9EL47J5YE71QZTC3+W1wg4+P6vmzZtz7dq1bI8ZOXIkI0eO9FJEQgghhBB+RFFQ6zQhtVYjDNvWYVo8G138ucyHpCQT8sMsjL8uwtr5SawtO4HB6KOAhb8Z0b9Pps1VVXMK+tXTGTF6iK9D8wifJzhCCCGEEMIFOh22pm2wNWyBYeMKTEu+RpdwJfMhidcImfsxxlXfYenSD1vTNqDT+yhg4S+ioqL4evSQzIUdXCwwEIgkwRFCCCGECCQGA7ZWnbE1ux/jbz9iWv4NSnJSpkN0l84T+vm7qCsWYOk2ALVuU1AUHwUs/EFeKuzg8zU4QgghhBAiF0JCsT7Yi+SJ32B5qA+aKdThEP2ZE4RNGUXY20PQHdztgyCF8D5JcIQQQgghAlm+Ali69Sdl4nwsbR5B0ztO0NEf/ZvwCcMInfQqxtPHfRCkEN4jCY4QQgghRBDQIotgeXIYKe/NwdqsHZqTKWmG2D8pPnE4ITPeQrmlUIEQwUISHCGEEEKIIKIVL4154P9IHT8bW91mTo8xbltL+GtPYpo/FZISvByhEJ4lCY4QQgghRBCyl7uLtOHvkvLGNNSqdRweV1Qbpl8WkW9Eb4zL5oM5zQdRCuF+kuAIIYQQQgQxe3RNUl+fQurL76OWr+zwuJKaTMgPXxA+sg+GDSvArvogSiHcRxIcIYQQQohgpyiotRuTOu5zrj4xHHvREg6H6K5dJnT2B4S98Qz63VtA03wQqBB3ThIcIYQQQoi8QqcjtWFLUibMwdxzEFq+Ag6H6M+eJOyj1wl7bxi6Ywd8EKQQd0YSHCGEEEKIvMYUgrXDY+l76HTsiWY0OhyiP7iH8LcGETJ9HMrFsz4IUojckQRHCCGEECKvylcAy2PPkfL+PKz3PuC0tLTxz3WEv/4kpnmfwHWpuCb8nyQ4QgghhBB5nFakBOZnXyf1rS+w1Wro8Liiqph+XUy+EY9jXDoXzKk+iFII10iCI4QQQgghALCXr0zaKxNJfXUSalS0w+NKWgohi2YT/mofDOt/BtXmgyiFyJ7B1wF4SmJiotvbTE317N0KT7bv6djBM30O0u+3I/3u3bZvkn73bts3Sb97t+2bpN+92/ZNPu33stEw/APCdm6k4M/zMFyNz/SwLuEKoV9NwrriWxIf6Ye5Rn34Z3qb9Ltz8n53LiIiwu1tBm2C44nO8mS73mjfk23Hx8cHbOyebl/63TftS7/7pn3pd9+0L/3um/bzRL+36UxaTHuMa37CtHQuSvL1TA8bL56h6Mzx2Grcg6XXYOz/7LPjF7Hngt/0ux+27+nY3UmmqAkhhBBCiKwZTVjbdyd54nwsD/ZCM5ocDjHs30nYmwMImf0BusSrPghSiH9JgiOEEEIIIW4vXwEsPQamV1xr3t6h4pqiaRg3rKDE+EEYf5oD5jQfBSryOklwhBBCCCGEy7QixTEPeI3UcZ9jq3GPw+M6Sxohi78kfGQfDH+sBrvdB1GKvEwSHCGEEEIIkWP2qGjSXv2Q1OETsJcq7/C47tplQr+YQNjY59Ad3O2DCEVeJQmOEEIIIYTIHUVBrduUlLe/xPzEi2gFHBei6+MOEz5hGKEfv4Fy4YwPghR5jSQ4QgghhBDizhgMWNt2Ifn9eSS16YJmMDoesvMPwkf1xTR/Kty47qQRIdxDEhwhhBBCCOEe+Qpw/eGnSHlvDtZGrRweVlQV0y+LyDficYyrvgeb1QdBimAnCY4QQgghhHArrVgpzM+PIeWNaaiVqjs8rqTcIGTBdMJHPYV+xwbQNB9EKYKVJDhCCCGEEMIj7NE1SR09g7RBo7EXLeHwuO7iWcKmvknYuy+iO37QBxGKYCQJjhBCCCGE8BxFwdakDSkT5mDu8SxaWD6HQ/SH9xI+7jlCvpiAcu2yD4IUwUQSHCGEEEII4XmmEKwPPk7KB/Owtn4YTed4GWr8YzXhI/tgXDYfLGYfBCmCgSQ4QgghhBDCa7SChfj/9u48LMp6///4a9hBA1FkccEM3EqTtJOIuZ4K7Gi5ZGbmxgkVLY+WiutXTVFMU1vUzCWt1BZzr0xPx47ikplL2jEzTc0V08QFEGHm90c/5nIaVMyZuWF8Pq7L64r7c8/7fvOCK3hzL3Ol2wBljZunvLqxduumKznyXTL7/9+fs5H7c3DLGHAAAADgcpaKdyvnpTRlD5qs/Ip32617nDkp/zdHym/iS/I4etD1DaLEYsABAACAYfJrP6jssXOU07W/LKUC7da99u2U//8lyXf+FHnw/jkoAgYcAAAAGMvTS3l/b6PLr36g3Efb2d2fY7KY5b1+pcLG9pb32iVSXp5BjaIkYMABAABA8VA6ULnP9fvj/pzaf7Nb9si+LN+FbylgRKI8v//GgAZREjDgAAAAoFixVLxbOQNfVfaA8TKHVbRb9zh5VP6vpchvyhCZTh41oEMUZww4AAAAKH5MJuXHxClr/Hxd6dhbFr8Au128dm9VwPAe8lk8Q7p80YAmURx5Gd2As2RmZjq8ZnZ2tsNruqq+s3uXnJO5RO43Q+6urV2A3F1buwC5u7Z2AXJ3be0C5H6NRi3lUaehAlYsUOD29TJd8+hoU36+fNZ8LM+Na3Sh1XPKaviI5OH5lw9F7q6tHRQU5PCabjvgOCMsZ9Z1RX1n1s7IyCixvTu7PrkbU5/cjalP7sbUJ3dj6pO7i+sHBSmzy7/k3eoZ+S58U54/7bFZ9rx8QcEfzVDgli91pfOLMteMueVDkLsxtR2NS9QAAABQYpjvrq7sYW8op88omcuF2a17Hj2ogAn95TtjjEznMgzoEEZjwAEAAEDJYjIpr0FzZaW9pyvtEmXx8bXbxfub9QpI6Srv1Qulq7kGNAmjMOAAAACgZPLx1dUnuyor7X1dbfiI3bIpN0e+n8xWwPBEee7msdJ3CgYcAAAAlGiWcqG60nuEska8pfwq1e3WPU4fk/+UFPlNGy5TxgkDOoQrMeAAAADALZir1Vb26JnK6f6SLKUC7da9dm5SwLBu8lk6T7qSY0CHcAUGHAAAALgPD0/lNX9Cl199X1ebPyGLyWSzbLp6VT4r3lPA0G7y3L5BuuaR03APDDgAAABwP6WDdKX7S8oePUv50bXtlj3Onpb/m/8nv0kDZTpxxIAG4SwMOAAAAHBb5rurK3vEm8rpOUzmoGC7da8fvlPAiET5fDhTHlec/waucD4GHAAAALg3k0l5jR5T1sQPlJvwtCyenrbL+fny+eIj3TtzpLw2reWytRKOAQcAAAB3Bv9Syu3UR1lj5yrv3np2y96XMuX3znj5j+8njyMHDGgQjsCAAwAAgDuKpeLdyhn8mrJfGC1z2VC7dc+f9sh/VC/5vDdNunTBgA5xOxhwAAAAcOcxmZT/t2bKSlug3Ce6yOLlbbtsMcvnq+UqNaSLvDZ8IZnNBjWKW8WAAwAAgDuXr79y2/9TWePnK7NaXbtl08VM+c2d+Mdla0cPGtAgbhUDDgAAAO54lrCKOtTxBWW/lCZzWEW7dc8De+U/Kkk+i6ZL2VkGdIiiYsABAAAA/r/8urHKSn1XV556XhYfX5s1k9ksny8/UcCQrvL6Zj1PWyumGHAAAACAa3n76Grr55Q1fr7yYuLslj3O/ya/GWPkN2mQTKd+NaBB3AgDDgAAAFAIS/kI5QwYr+x/pcocEma37vXDdgUMT5TPp3Ol3CsGdIjCMOAAAAAAN5Bfr5Gyxi9QbuvnZPH0slkz5V2Vz8r3FTCsuzx3bTaoQ1zL6+a7lEyZmZkOr5mdne3wmq6q7+zeJedkLpH7zZC7a2sXIHfX1i5A7q6tXYDcXVu7ALm7tnaBG+b+aAd53d9QQZ/Mkt9P39sseZw5Kf+pw5R9fwNltnte+X96fx1yL1xQUJDDa7rtgOOMsJxZ1xX1nVk7IyOjxPbu7Prkbkx9cjemPrkbU5/cjalP7sbUNzz3oCDlDXtdOd/8Rz6Lpssj85zNsv/338jvx13KfbKrriY8LV3z/jrk7hpcogYAAADcCpNJebF/V1bae8p9rL0sJttfqU25V+T7yWwFjPinPPftNKjJOxcDDgAAAPBXBJRWbucXlT1mlvKj77Nb9jh5VP5pA+T79ji7Mz1wHgYcAAAA4DaYq1RT9vA3lZM4SJZSgXbr3lv+rbDUvvJet1Qy5xvQ4Z2FAQcAAAC4XR4eymv6D12e+J6uNv2H/XJOlnw/eEP+r/SVx5EDBjR452DAAQAAABzlrjK6kjhIWSOnKz8y2m7Z85cf5T+6l3wWz5Bysgxo0P0x4AAAAAAOZo6+T9mj39aVzi/K4hdgs2Yym+Wz5mMFDO0uz528d46jMeAAAAAAzuDppauPtVfWhAXKjomzW/Y4lyH/acPk9+b/yXTujAENuicGHAAAAMCJLGXL61xiirIHjJe5XJjdutf2DQoY2o2HEDgIAw4AAADgAvkxccqaMF+5LTvK4vGn986xPoSgjzwO/2RQh+6BAQcAAABwFV9/5T6TrOzRs5R/Ty27Zc9f9st/dG/5LJrOQwj+IgYcAAAAwMXMVaope+RbyunaXxb/UjZrJotZPl9+8sdDCHakG9RhycWAAwAAABjBw1N5f2+jrAkLdPVvzeyXz2XI//UR8nt9hExnM1zfXwnFgAMAAAAYyBIcoisvjFb2S2kyhxTyEIId6QoY1k3ea5fwEIIiKPYDjtls1rhx41S3bl2Fh4erbt26GjdunMxms9GtAQAAAA6TXzdWWePnK/fxToU8hCBbvgvfkv+YZHn8st+gDksGL6MbuJmpU6dq3rx5evvtt1WrVi398MMPSk5Olp+fnwYOHGh0ewAAAIDj+Port2Mv5TV8RL7zJ8vz4D6bZc/DP8l/TLKuPtZeue16SH96E1GUgDM427ZtU0JCgh577DFVrlxZCQkJSkhI0Pbt241uDQAAAHAKc2SUskdMV063AbIEXOchBMN7yHP3NwZ1WHwV+wGnYcOG2rhxow4cOCBJ+vHHH7Vx40bFx8cb3BkAAADgRB4eymvxpLImvKerDZrbL/92Wv5TUuQ7c6w8Lp43oMHiqdhfota/f39dunRJDRo0kKenp/Lz8/Xyyy+rR48eRrcGAAAAOJ2lTDld6TNKeY0S5PveFHn8dtpm3XvrVwr7fptyn+2jvIcTJJPJoE6LB9P58+ctRjdxI59++qlGjRqlcePGqUaNGtqzZ49SUlI0duxYPffcc9d9XcEZHwAAAMBdeOReUcR/V6j8tn/LZLH/Nf7i3bV09PHnlFs21IDubl21atUcXrPYDzi1a9dWv3791LNnT+u2yZMna/Hixfruu+9c2ktmZqaCgoJKZH1n937gwAGnfINK5H4j5O762hK5G1FbIncjakvkbkRtidyNqC2VrNw9fvlRvvMmy/Poz3ZrFm8f5bbppqsJHSWv279gy9m5O1qxvwcnKytLHn96TJ6HhwePiQYAAMAdy1y1prJHva0rT/eSxdvHZs10NVc+n86Vx4kjBnVnrGJ/D05CQoKmTZumyMhI1axZU7t379aMGTP07LPPGt0aAAAAYBwvL139RyflPdhEnnNfld/+3dalq/EdZI6MMrA54xT7AWfSpElKTU3VwIED9dtvvyksLEzdu3fX4MGDjW4NAAAAMJwlrKLO9hmjcnu/ke+i6bIElFJu2zv3gVzFfsApVaqUxo8fr/HjxxvdCgAAAFA8mUzKezheefc3kMfvZyRfP6M7MkyxH3AAAAAAFFFgGZkDyxjdhaGK/UMGAAAAAKCoGHAAAAAAuA0GHAAAAABugwEHAAAAgNtgwAEAAADgNhhwAAAAALgNBhwAAAAAboMBBwAAAIDbYMABAAAA4DYYcAAAAAC4DQYcAAAAAG6DAQcAAACA22DAAQAAAOA2vIxuwFkyMzMdXjM7O9vhNV1V39m9S87JXCL3myF319YuQO6urV2A3F1buwC5u7Z2AXJ3be0C5O7a2kFBQQ6v6bYDjjPCcmZdV9R3Zu2MjIwS27uz65O7MfXJ3Zj65G5MfXI3pj65G1Of3I2p7+zeHYlL1AAAAAC4DQYcAAAAAG6DAQcAAACA22DAAQAAAOA2GHAAAAAAuA0GHAAAAABugwEHAAAAgNtgwAEAAADgNhhwAAAAALgNBhwAAAAAboMBBwAAAIDbYMABAAAA4DYYcAAAAAC4DQYcAAAAAG6DAQcAAACA22DAAQAAAOA2vIxuAAAAACiqI0eOaNKcD/Rbdp5C/L006PnnVKVKFaPbQjHCGRwAAACUCEd//VXdxr6l3fd31qkmydp9f2d1G/uWjhw5YnRrKEbc9gxOZmamw2tmZ2c7vKar6ju7d8k5mUvkfjPk7traBcjdtbULkLtraxcgd9fWLkDu9qbN/1D58X3l6RsgSfL0DVB+fF+NnzFPrw57ySHHIHfX1g4KCnJ4TbcdcJwRljPruqK+M2tnZGSU2N6dXZ/cjalP7sbUJ3dj6pO7MfXJ3fX1M/NM1uGmgKdvgDLzPRxyTHI3prajcYkaAAAASoRyvh7Kv5Jlsy3/SpZC/N32b/b4CxhwAAAAUCK80KWDPL+cbh1y8q9kyfPL6Rr0/HMGd4bihHEXAAAAJUJk5cpaMPIF26eojXyBp6jBBgMOAAAASowqVarorbHDjW4DxRiXqAEAAABwGww4AAAAANwGAw4AAAAAt8GAAwAAAMBtMOAAAAAAcBsMOAAAAADcBgMOAAAAALfBgAMAAADAbTDgAAAAAHAbDDgAAAAA3AYDDgAAAAC3wYADAAAAwG0w4AAAAABwGww4AAAAANyGl9ENOEtmZqbDa2ZnZzu8pqvqO7t3yTmZS+R+M+Tu2toFyN21tQuQu2trFyB319YuQO6urV2A3F1bOygoyOE13XbAcUZYzqzrivrOrJ2RkVFie3d2fXI3pj65G1Of3I2pT+7G1Cd3Y+qTuzH1nd27I3GJGgAAAAC3wYADAAAAwG0w4AAAAABwGww4AAAAANwGAw4AAAAAt8GAAwAAAMBtMOAAAAAAcBsMOAAAAADcBgMOAAAAALfBgAMAAADAbTDgAAAAAHAbDDgAAAAA3EaJGHBOnz6t5ORkRUdHKzw8XA0bNtTmzZuNbgsAAABAMeNldAM3k5mZqfj4eMXFxWnJkiUqW7asDh8+rPLlyxvdGgAAAIBiptgPOK+//roiIiI0Y8YM67bIyEgDOwIAAABQXBX7S9Q+//xz1a9fX4mJiapWrZoaN26s2bNnG90WAAAAgGKo2A84hw8f1ty5c1W1alUtXbpUycnJGjNmjObMmWN0awAAAACKGdP58+ctRjdxI6Ghoapfv76++OIL67axY8fqs88+09atWw3sDAAAAEBxU+zP4ISFhal69eo226pXr65jx44Z1BEAAACA4qrYDzixsbE6cOCAzbYDBw6ocuXKBnUEAAAAoLgq9gNOnz59tH37dr322mv65ZdftHz5cr3zzjtKSkoyujUAAAAAxUyxvwdHktatW6cxY8bo4MGDqlSpknr27MmAAwAAAMBOiRhwAAAAAKAoiv0lakU1Z84c1a1bV+Hh4WrWrJm2bNlidEtuZcqUKWrRooUiIyMVHR2tZ555Rvv27bPbb8KECapVq5YiIiLUqlUr/fjjjwZ0676mTJmi4OBgDR482GY7uTve6dOnlZycrOjoaIWHh6thw4bavHmzzT7k7lhms1njxo2z/r+8bt26Gr/G9psAABYBSURBVDdunMxms81+5H57Nm/erE6dOunee+9VcHCwFi9ebLfPzTLOzc3VoEGDFBUVpYoVK6pTp046ceKEqz6FEulGuefl5WnUqFFq1KiRKlasqJo1ayopKcnugUrkfuuK8v1eoH///goODtZbb71ls53cb11Rcv/555/VpUsXValSRRUqVFCzZs1s7ru/ndzdYsBZunSphg4dqoEDB2rjxo166KGH1KFDBx0/ftzo1tzG5s2blZSUpLVr12rVqlXy8vJSmzZtdP78ees+06ZN08yZMzVp0iStX79e5cuXV9u2bXX58mUDO3cf3377rRYsWKDatWvbbCd3x8vMzFR8fLxMJpOWLFmibdu2aeLEiSpfvrx1H3J3vKlTp2revHmaNGmSvv32W02cOFFz587VlClT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k8mkPn36KDg42Ob+lIMHD6p79+665557FB4eriZNmmjFihV2tS9cuKBhw4apdu3aCg0NVUxMjCZNmiSz2SxJOnr0qKKjo2UymZSWlqbg4GAFBwerb9++NnXWrVunRx991PpxnTp11KFDB6Wnp6t58+aKiIhQXFycNmzYIElavXq1GjVqpPDwcDVt2lS7du2yqVfYPTjXM2vWLMXFxSk8PFzVqlXTiy++qHPnztnt17x5cx0/ftzuWABwp+MMDgAUI19++aX8/f3VqlWrIr+m4F6OxMREValSRSNHjlRubq6kPwaRLVu26Mknn1SlSpV06tQpzZ8/X61atdLWrVsVGhoqScrJydETTzyhEydOqHfv3goLC9Mnn3yiDRs22N0rkp6erqeeekr333+/UlJS5O3trY8++kjt2rXT8uXL1ahRoxv2u23bNsXExNhsS0xM1D333KPU1FT16NFDDRs2tPa2f/9+xcfHKzw8XP3791epUqW0evVqde/eXe+88446dOhg/RxatWqlY8eOKTExUZGRkfruu++UlpamY8eO6fXXX1dISIimTp2qAQMGqHXr1tYhqmrVqtZezp07p++++079+/e3yfiXX35RUlKSunXrpmeeeUZvvPGGOnfurKlTp2rMmDFKSkqSyWTS5MmT1aNHD+3YscOanclkKtI9NwMGDNDChQv17LPPqlevXjp27JhmzZqlHTt2aP369TZngWJiYmSxWLR161a7PAHgTsaAAwDFyP79+xUdHS1PT0+b7ZcuXbIOLZLk6+trd5lajRo1NH/+fJttCQkJevLJJ222dezYUQ0aNND777+vl19+WZL07rvv6tChQ3r33Xet+3fv3l2NGze26/Gll15SXFycli5dat2WmJioxo0ba+zYsVqzZs11P7/8/Hz98ssvio+Pt9n+4IMPysvLS6mpqfrb3/5mHVokaciQIapQoYK+/vpr6y/4//znP9WuXTuNGTPGuu/06dN18OBBbdiwwXr2q2vXroqMjFRqaqr69eunqKgoPfHEExowYIDuu+8+m+MUWLt2rby9vdWsWTOb7YcOHdIXX3yhBg0aSJKqV6+udu3a6cUXX9S2bdusD0QIDAzUgAEDtGHDBjVt2vS6WfzZN998o/nz52vWrFl6+umnrdsfeeQRJSQk6MMPP1TXrl2t2yMiIuTj46P9+/cX+RgAcCfgEjUAKEYuXrxY6P01//rXvxQVFWX9N3jwYJt1k8mkHj162L3O19fX+t/Z2dn6/fffVbp0aUVHR9tc2vTvf/9boaGhNsOQr6+vunTpYlNvz549OnDggNq3b69z585Z/2VmZqpZs2bavn27cnJyrvv5/f7777JYLCpTpszNw5B0/vx5/fe//1WbNm106dIlm2O2aNFCJ06c0MGDByVJy5cvV2xsrIKDg232a9q0qSwWyw0fKnCtdevWKS4uzu4epujoaOtwI0n169eXJDVu3NjmaW/169eXxWLRkSNHinS8AsuWLdNdd92lFi1a2PQfHR2t0NDQQi8BLFOmjM6ePXtLxwEAd8cZHAAoRkqXLq1Lly7ZbR80aJD1r/fXPlr5WtdeZlXgypUrSk1N1SeffKJTp05Zt5tMJpUrV8768a+//lro66Ojo20+LhgmXnjhhUJ7MJlMOnfunCpUqFDoeoGi3Ogv/XHWxGKxKC0tTRMmTCj0eGfOnFFUVJQOHjyoH374odB7lwr2u5n8/Hx99dVXGjp0qN1apUqVbD4ODAyUJLvPtWD7+fPnb3q8ax06dEgXL15UtWrV7Nau17/FYnHKY7wBoCRjwAGAYqRGjRrau3ev8vPzbS5Tq1mzpmrWrClJdpevFfD397fbNmjQIC1atEi9evXSQw89pKCgIJlMJg0dOtR64/2tKHjNK6+8ovvvv7/QfUJCQq77+rJly8pkMhX5l/+C4/Xp08fmpv9r1apVy7pvkyZN9NJLLxU6QN199903Pd7WrVt14cIFPfbYY3Zr18v9etuLOsQVMJvNKleunObNm1foaws765WZmWkzqAIAGHAAoFhJSEjQt99+qxUrVqhdu3a3XW/FihXq1KmTUlNTbbafP3/e5hfjypUr64cffrB7/c8//2zzccFZnlKlSt3S/SUFPDw8FBUVVeTLtwqGEi8vr5ser2rVqrp06ZKaNGlyw/1udMZj3bp1ioqKKvRslrNVrVpVX3/9tR588MEiPeL75MmTys3NVfXq1V3QHQCUHNyDAwDFSI8ePRQWFqbhw4frwIEDt13P09PT7kzNkiVL7N508tFHH1VGRobNo5ezs7P1/vvv2+wXExOje+65R9OnTy/0Urqi3A/SoEGDIj/aOCQkRI0bN9aCBQsKfaPMa4/Xtm1b7dixQ+vWrbPb79qHNBSc6SrsLNLatWsLPXvjCm3btlV+fr5effVVuzWz2WzX765du2QymWzuCwIAcAYHAIqVMmXKaOHCherYsaMaN26sdu3aqX79+vL29tbx48e1atUqZWVl2dzUfiMtW7bURx99pNKlS+vee+/Vnj17tHTpUrszFN26ddPs2bPVu3dv7dy5UxEREfr4449tHlIg/XH2480331SHDh0UGxurzp07q2LFijp58qQ2bdokSVq5cuUNe3r88ce1aNEi7d+/3+a9cK5nypQpSkhIUKNGjdStWzdVrVpVZ86c0fbt2/XTTz/pu+++kyT169dPa9asUefOnfXMM88oJiZG2dnZ+t///qdVq1Zp06ZNqly5svz8/FSrVi0tXbpUUVFRKlu2rKpUqaLQ0FDt27dPaWlpRcrW0eLi4vT888/rjTfe0N69e9WiRQv5+vrq4MGDWrlypYYPH65OnTpZ9//Pf/6jChUq6IEHHjCkXwAorhhwAKCYqVevnrZu3arp06drzZo1WrlypfLz8xUeHq4GDRpo4sSJhT6+uTATJ06Uj4+Pli9froULF+qBBx7Q0qVLNXLkSJtLtfz9/bVy5UoNHjxYc+bMkb+/v55++mk98sgjat++vU3NuLg4rVu3TpMmTdK8efN08eJFhYaGql69ejaPMb6e+Ph4hYSEaNmyZRoyZIjNWmGXj0VHR2v9+vWaOHGiPvroI509e1YhISGqXbu2RowYYd3Pz89Pn332maZMmaLly5fr448/VunSpRUVFaVBgwYpLCzMuu9bb72llJQUjRw5UleuXFGnTp1Ur1493XXXXdY3Sf1zX4X1divbr7fftSZNmqSYmBi9++67Sk1NlaenpypVqqT27dvbXHpnsVi0atUqu6fcAQAk0/nz52/tLkgAAG7T1KlTNXfuXO3evfu6N+m7WseOHeXr66v33nvP6FZuauXKlUpOTtbOnTutb4gKAPgD9+AAAFyud+/eysvL0+LFi41uxerhhx++7uOvi5tp06apZ8+eDDcAUAjO4AAAAABwG5zBAQAAAOA2GHAAAAAAuA0GHAAAAABugwEHAAAAgNtgwAEAAADgNhhwAAAAALgNBhwAAAAAboMBBwAAAIDb+H9S2I4DOcuhIgAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -90,12 +97,13 @@ " plt.style.use('fivethirtyeight')\n", " plt.plot(X, Y, 'o')\n", " X1 = list(range(int(max(X))))\n", - " plt.plot(X1, [F(x) for x in X1], 'o')\n", + " plt.plot(X1, [F(x) for x in X1], '-')\n", " plt.ylabel('Speed (mph)')\n", " plt.xlabel('Grade (feet/mile)')\n", " plt.minorticks_on()\n", " plt.grid(True, which='major')\n", - " plt.grid(True, which='minor', alpha=0.2)\n", + " plt.grid(True, which='minor', alpha=0.4)\n", + " plt.title('Average speed vs Grade on {} rides'.format(len(X)))\n", " \n", "show(X, Y) " ] @@ -104,17 +112,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "So, I average about 14 mph when the road is fairly flat, with a lot of variability from 12 to 16 mph, depending more on my level of effort than on the grade of the road. But from 60 ft/mile and up, speed falls off quickly at 1 mph for every 20 ft/mile, and by 140 ft/mile, I'm down around 8 mph. Note that 140 ft/mile is only 2.7% grade, but if you figure a typical route is 1/3 up, 1/3 down, and 1/3 flatish, then that's 8% grade on the up part.\n", + "So, I average about 14 mph when the road is fairly flat, with a lot of variability from 12 to 16 mph, depending more on my level of effort than on the grade of the road. But from 60 ft/mile and up, speed falls off quickly at 1 mph for every 20 ft/mile, and by 120 ft/mile, I'm down around 10 mph, and 8.5mph at 140 ft/mile. Note that 140 ft/mile is only 2.7% grade, but if you figure a typical route is 1/3 up, 1/3 down, and 1/3 flat-ish, then that's 8% grade on the up part.\n", "\n", "I can use the polynomial `F` to estimate the duration of a route:" ] }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": true - }, + "execution_count": 4, + "metadata": {}, "outputs": [], "source": [ "def duration(dist, climb, F=F):\n", @@ -131,16 +137,16 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "6.7314081227852185" + "6.2641828504384378" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } diff --git a/ipynb/Cheryl.ipynb b/ipynb/Cheryl.ipynb index f4af940..3c9cfbb 100644 --- a/ipynb/Cheryl.ipynb +++ b/ipynb/Cheryl.ipynb @@ -17,7 +17,7 @@ "\n", "Peter Norvig, April 2015\n", "\n", - "This logic puzzle has been [making the rounds](https://www.google.com/webhp?#q=cheryl%27s+birthday):\n", + "This logic puzzle has been [making the rounds](https://www.google.com/webhp?#q=cheryl%27s+birthday) (and [not always favorably](https://www.newyorker.com/cartoons/daily-cartoon/daily-cartoon-thursday-april-16th-cheryl-singapore-math)):\n", "\n", "\n", "1. Albert and Bernard just became friends with Cheryl, and they want to know when her birthday is. Cheryl gave them a list of 10 possible dates:\n", diff --git a/ipynb/Coin Flip.ipynb b/ipynb/Coin Flip.ipynb index ff1c312..000af0e 100644 --- a/ipynb/Coin Flip.ipynb +++ b/ipynb/Coin Flip.ipynb @@ -6,66 +6,114 @@ "source": [ "# The Devil and the Coin Flip Game\n", "\n", - ">You're playing a game with the devil, with your soul at stake. You're sitting at a circular table which has 4 coins, arranged in a diamond, at the 12, 3, 6, and 9 o'clock positions. You are blindfolded, and can never see the coins or the table.\n", + "If the Devil ever challenges me to a [fiddle contest](https://en.wikipedia.org/wiki/The_Devil_Went_Down_to_Georgia), I'm going down. But here is a contest where I'd have a better chance:\n", "\n", - ">Your goal is to get all 4 coins showing heads, by telling the devil the position(s) of some coins to flip. We call this a \"move\" on your part. The devil must faithfully perform the requested flips, but may first sneakily rotate the table any number of quarter-turns, so that the coins are in different positions. You keep making moves, and the devil keeps rotating and flipping, until all 4 coins show heads.\n", + "> *You're playing a game with the Devil, with your soul at stake. You're sitting at a circular table which has 4 coins, arranged in a diamond, at the 12, 3, 6, and 9 o'clock positions. You are blindfolded, and can never see the coins or the table.*\n", "\n", - "> Example: You tell the devil tthe 12 o'clock and 6 o'clock positions. The devil could leave the table unrotated (or could rotate it a half-turn), and then flip the two coins that you specified. Or the devil could rotate the table a quarter turn in either direction, and then flip the coins that are now in the 12 o'clock and 6 o'clock positions (which were formerly at 3 o'clock and 9 o'clock). You won't know which of these actions the devil took.\n", + "> *Your goal is to get all 4 coins showing heads, by telling the devil the position(s) of some coins to flip. We call this a \"move\" on your part. The Devil must faithfully perform the requested flips, but may first sneakily rotate the table any number of quarter-turns, so that the coins are in different positions. You keep making moves, and the Devil keeps rotating and flipping, until all 4 coins show heads.*\n", "\n", - "> What is a shortest sequence of moves that is *guaranteed* to win, no matter what the initial state of the coins, and no matter what rotations the devil applies?\n", + "> *Example: You tell the Devil to flip the 12 o'clock and 6 o'clock positions. The devil might rotate the table a quarter turn clockwiae, and then flip the coins that have moved into the 12 o'clock and 6 o'clock positions (which were formerly at 3 o'clock and 9 o'clock). Or the Devil could have made any other rotation before flipping.*\n", + "\n", + "> *What is a shortest sequence of moves that is **guaranteed** to win, no matter what the initial state of the coins, and no matter what rotations the Devil applies?*\n", "\n", "# Analysis\n", "\n", - "The player, being blindfolded, does not know the true state of the coins. So the player should represent what is known: the *set of possible states* of the coins. We call this a *belief state*. At the start of the game, each of the four coins could be either heads or tails, so that's 24 = 16 possibilities in the belief state. \n", - "\n", - "A move updates the belief state as follows: for every coin sequence in the current belief state, rotate it in every possible way, and then flip the coins specified by the position(s) in the move. Collect all these results together to form the new belief state. Solving the game means coming up with a sequence of moves that ends in a belief state consisting of just `{'HHHH'}`. It must be a shortest possible sequence, so a breadth-first search seems right. The search space will be tiny, so compute time will be trivial; the only issue is specifying the domain correctly. To increase the chance of getting it correct, I won't try to do anything fancy, such as noticing that some coin sequences are rotational variants of other sequences.\n", + "- We're looking for a \"shortest sequence of moves\" that reaches a goal. That's a [shortest path search problem](https://en.wikipedia.org/wiki/Shortest_path_problem). I've done that before.\n", + "- Since the Devil gets to make moves too, you might think that this is a [minimax](https://en.wikipedia.org/wiki/Minimax) problem: that we should choose the move that leads to the shortest path, given that the Devil has the option of making moves that lead to the longest path.\n", + "- But minimax only works when you know what moves the opponent is making: he did *that*, so I'll do *this*. In this problem the player is blinfolded; that makes it a [partially observable problem](https://en.wikipedia.org/wiki/Partially_observable_system) (in this case, not observable at all, but we still say \"partially\").\n", + "- In such problems, we don't know for sure the true state of the world before or after any move. So we should represent what *is* known: *the set of states that we believe to be possible*. We call this a *belief state*. At the start of the game, each of the four coins could be either heads or tails, so that's 24 = 16 possibilities in the initial belief state:\n", + " {HHHH, HHHT, HHTH, HHTT, HTHH, HTHT, HTTH, HTTT, \n", + " THHH, THHT, THTH, THTT, TTHH, TTHT, TTTH, TTTT}\n", + "- So we have a single-agent shortest path search in the space of belief states (not the space of physical states of the coins). We search for a path from the inital belief state to the goal belief state, which is `{HHHH}`.\n", + "- A move updates the belief state as follows: for every four-coin sequence in the current belief state, rotate it in every possible way, and then flip the coins specified by the position(s) in the move. Collect all these results together to form the new belief state. The search space is small (just 216 possible belief states), so run time will be fast. \n", + "- I'll Keep It Simple, and not worry about rotational symmetry (although we'll come back to that later).\n", "\n", "\n", - "# Implementation Choices\n", + "# Basic Data Structures and Functions\n", "\n", - "Here are the main concepts, and my implementation choices:\n", + "What data structures will I be dealing with?\n", "\n", - "- `Coins`: A *coin sequence* is represented as a `str` of four characters, such as `'HTTT'`. \n", - "- `Belief`: A *belief state* is represented as a `frozenset` of `Coins` (frozen so that it can be hashed in a `set`).\n", - "- `Move`: A *move* is a set of positions to flip. A position will be an integer index into the coin sequence, so a move is a set of these such as `{0, 2}`, which we can interpret as \"flip the 12 o'clock and 6 o'clock positions.\" \n", - "- `all_coins`: Set of all possible coin sequences: `{'HHHH', 'HHHT', ...}`.\n", - "- `rotations`: The function `rotations(coins)` returns the set of all 4 rotations of the coin sequence.\n", - "- `update`: The function `update(belief, move)` returns an updated belief state, representing all the possible coin sequences that could result from any devil rotation followed by the specified flip(s). (But don't flip `'HHHH'`, because the game would have already ended.)\n", - "- `flip`: The function `flip(coins, move)` flips the specified positions within the coin sequence." + "- `Coins`: a *coin sequence* (four coins, in order, on the table) is represented as a `str` of four characters, such as `'HTTT'`. \n", + "- `Belief`: a *belief state* is a `frozenset` of `Coins` (frozen so it can be hashed), like `{'HHHT', 'TTTH'}`.\n", + "- `Position`: an integer index into the coin sequence; position `0` selects the `H` in `'HTTT'`\n", + "and corresponds to the 12 o'clock position; position 1 corresponds to 3 o'clock, and so on.\n", + "- `Move`: a set of positions to flip, such as `{0, 2}`. \n", + "- `Strategy`: an ordered list of moves. A\n", + "blindfolded player has no feedback, there thus no decision points in the strategy. " ] }, { "cell_type": "code", "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from collections import deque\n", + "from itertools import product, combinations, chain\n", + "import random\n", + "\n", + "Coins = ''.join # A coin sequence; a str: 'HHHT'.\n", + "Belief = frozenset # A set of possible coin sequences: {'HHHT', 'TTTH'}.\n", + "Position = int # An index into a coin sequence.\n", + "Move = set # A set of positions to flip: {0, 2}\n", + "Strategy = list # A list of Moves: [{0, 1, 2, 3}, {0, 2}, ...]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What basic functions do I need to manipulate these data structures?\n", + "\n", + "- `all_moves()`: returns a list of every possible move a player can make.\n", + "- `all_coins()`: returns a belief state consisting of the set of all 16 possible coin sequences: `{'HHHH', 'HHHT', ...}`.\n", + "- `rotations(coins)`: returns a belief set of all 4 rotations of the coin sequence.\n", + "- `flip(coins, move)`: flips the specified positions within the coin sequence.\n", + " (But leave `'HHHH'` alone, because it ends the game.)\n", + "- `update(belief, move)`: returns an updated belief state: all the coin sequences that could result from any rotation followed by the specified flips.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ - "from collections import deque, Counter\n", - "from itertools import product, combinations\n", - "import random\n", + "def all_moves() -> [Move]: \n", + " \"List of all possible moves.\"\n", + " return [set(m) for m in powerset(range(4))]\n", "\n", - "Coins = ''.join # A coin sequence, such as 'HHHT'.\n", - "Belief = frozenset # A belief state is a set of possible coin sequences.\n", - "all_coins = Belief(map(Coins, product('HT', repeat=4)))\n", + "def all_coins() -> Belief:\n", + " \"The belief set consisting of all possible coin sequences.\"\n", + " return Belief(map(Coins, product('HT', repeat=4)))\n", "\n", - "def rotations(coins) -> [Coins]: \n", - " \"A list of all possible rotations of a coin sequence.\"\n", - " return [coins[r:] + coins[:r] for r in range(4)]\n", - "\n", - "def update(belief, move) -> Belief:\n", - " \"Update belief: consider all possible rotations, then flip.\"\n", - " return Belief((c if c == 'HHHH' else flip(c, move))\n", - " for coins in belief\n", - " for c in rotations(coins))\n", + "def rotations(coins) -> {Coins}: \n", + " \"A set of all possible rotations of a coin sequence.\"\n", + " return {coins[r:] + coins[:r] for r in range(4)}\n", "\n", "def flip(coins, move) -> Coins:\n", - " \"Flip the coins in the positions specified by the move.\"\n", + " \"Flip the coins in the positions specified by the move (but leave 'HHHH' alone).\"\n", + " if 'T' not in coins: return coins # Don't flip 'HHHH'\n", " coins = list(coins) # Need a mutable sequence\n", " for i in move:\n", " coins[i] = ('H' if coins[i] == 'T' else 'T')\n", - " return Coins(coins)" + " return Coins(coins)\n", + "\n", + "def update(belief, move) -> Belief:\n", + " \"Update belief: consider all possible rotations, then flip.\"\n", + " return Belief(flip(c, move)\n", + " for coins in belief\n", + " for c in rotations(coins))\n", + "\n", + "flatten = chain.from_iterable\n", + "\n", + "def powerset(iterable): \n", + " \"powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)\"\n", + " # https://docs.python.org/3/library/itertools.html#itertools-recipes\n", + " s = list(iterable)\n", + " return flatten(combinations(s, r) for r in range(len(s) + 1))" ] }, { @@ -75,39 +123,30 @@ "Let's try out these functions:" ] }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'THTT'" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "flip('HHHT', {0, 2})" - ] - }, { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['HHHT', 'HHTH', 'HTHH', 'THHH']" + "[set(),\n", + " {0},\n", + " {1},\n", + " {2},\n", + " {3},\n", + " {0, 1},\n", + " {0, 2},\n", + " {0, 3},\n", + " {1, 2},\n", + " {1, 3},\n", + " {2, 3},\n", + " {0, 1, 2},\n", + " {0, 1, 3},\n", + " {0, 2, 3},\n", + " {1, 2, 3},\n", + " {0, 1, 2, 3}]" ] }, "execution_count": 3, @@ -116,15 +155,13 @@ } ], "source": [ - "rotations('HHHT')" + "all_moves()" ] }, { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -153,22 +190,60 @@ } ], "source": [ - "all_coins" + "all_coins()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'HHHT', 'HHTH', 'HTHH', 'THHH'}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rotations('HHHT')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'THTT'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "flip('HHHT', {0, 2})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We see there are 16 coin sequences in the `all_coins` belief state. Now if we update this belief state by flipping all 4 positions, we should get a new belief state where we have eliminated the possibility of 4 tails, leaving 15 possible coin sequences:" + "There are 16 coin sequences in the `all_coins` belief state. If we update this belief state by flipping all 4 positions, we should get a new belief state where we have eliminated the possibility of 4 tails, leaving 15 possible coin sequences:" ] }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "data": { @@ -190,126 +265,89 @@ " 'TTTH'})" ] }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "update(all_coins, {0, 1, 2, 3})" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Everything looks good so far. One more thing: we need to find all subsets of the 4 positions; these are the possible moves:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def powerset(sequence): \n", - " \"All subsets of a sequence.\"\n", - " return [set(c) \n", - " for r in range(len(sequence) + 1)\n", - " for c in combinations(sequence, r)]" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[set(),\n", - " {0},\n", - " {1},\n", - " {2},\n", - " {3},\n", - " {0, 1},\n", - " {0, 2},\n", - " {0, 3},\n", - " {1, 2},\n", - " {1, 3},\n", - " {2, 3},\n", - " {0, 1, 2},\n", - " {0, 1, 3},\n", - " {0, 2, 3},\n", - " {1, 2, 3},\n", - " {0, 1, 2, 3}]" - ] - }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "powerset(range(4))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Search for a Solution\n", - "\n", - "The function `search` does a breadth-first search starting\n", - "from a `belief` state consisting of `all_coins`, and applying a sequences of moves, trying to\n", - "find a sequence that leads to the goal belief state in which the only possibility is 4 heads: `{'HHHH'}`.\n", - "As is typical for search algorithms, we build a search tree, keeping a queue of tree `nodes` to consider, where each \n", - "node consists of a path (a sequence of moves) and a resulting belief state. We also keep track, in `explored`, of\n", - "the states we have already explored, so that we don't have to revisit them." + "update(all_coins(), {0, 1, 2, 3})" ] }, { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "def search():\n", - " \"Breadth-first search from all_coins to all heads.\"\n", - " explored = set()\n", - " queue = deque([Node([], all_coins)])\n", - " while queue:\n", - " (path, belief) = queue.popleft()\n", - " if belief == {'HHHH'}:\n", - " return path\n", - " for move in powerset(range(4)):\n", - " belief2 = update(belief, move)\n", - " if belief2 not in explored:\n", - " explored.add(belief2)\n", - " queue.append(Node(path + [move], belief2))\n", - " \n", - "def Node(path, belief) -> tuple: return (path, belief)" + "list(powerset([1,2,3]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# A Solution" + "Everything looks good so far. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Search for a Winning Strategy\n", + "\n", + "The generic function `search` does a breadth-first search starting\n", + "from a `start` state, looking for a `goal` state, considering possible `actions` at each turn,\n", + "and computing the `result` of each action (`result` is a function such that `result(state, action)` returns the new state that results from executing the action in the current state). `search` works by keeping a `queue` of unexplored possibilities, where each entry in the queue is a pair consisting of a *strategy* (sequence of moves) and a *state* that that strategy leads to. We also keep track of a set of `explored` states, so that we don't repeat ourselves. I've defined this function (or one just like it) multiple times before, for use in different search problems." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { - "collapsed": false + "collapsed": true }, + "outputs": [], + "source": [ + "def search(start, goal, actions, result) -> Strategy:\n", + " \"Breadth-first search from start state to goal; return strategy to get to goal.\"\n", + " explored = set()\n", + " queue = deque([(Strategy(), start)])\n", + " while queue:\n", + " (strategy, state) = queue.popleft()\n", + " if state == goal:\n", + " return strategy\n", + " for action in actions:\n", + " state2 = result(state, action)\n", + " if state2 not in explored:\n", + " queue.append((strategy + [action], state2))\n", + " explored.add(state2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that `search` doesn't know anything about belief states—it is designed to work on plain-old physical states of the world. But amazingly, we can still use it to search over belief states: it just works, as long as we properly specify the start state, the goal state, and the means of moving between states.\n", + "\n", + "The `coin_search` function calls `search` to solve our specific problem:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, "outputs": [ { "data": { @@ -331,77 +369,48 @@ " {0, 1, 2, 3}]" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "search()" + "def coin_search() -> Strategy: \n", + " \"Use `search` to solve the Coin Flip problem.\"\n", + " return search(start=all_coins(), goal={'HHHH'}, actions=all_moves(), result=update)\n", + "\n", + "coin_search()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "That's a 15-move sequence that is guaranteed to lead to a win. You can stop reading here if all you want is the answer to the puzzle. Or you can continue on ...\n", + "That's a 15-move strategy that is guaranteed to lead to a win. **Stop here** if all you want is the answer to the puzzle. \n", "\n", - "# Verifying the Solution\n", + "----\n", "\n", - "Can I verify that the solution is correct? Exploring with paper and pencil, it does appear to work. A colleague did the puzzle and got the same answer. And here's further validation: The function `random_devil` takes an initial coin sequence and a sequence of moves, and plays those moves with a devil that chooses rotations randomly, returning the number of moves it takes until the player wins:" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def random_devil(coins, moves) -> int or None:\n", - " \"\"\"A random devil responds to moves starting from coins; \n", - " return the number of moves until win, or None.\"\"\"\n", - " if coins == 'HHHH': return 0\n", - " for (i, move) in enumerate(moves, 1):\n", - " coins = flip(random.choice(list(rotations(coins))), move)\n", - " if coins == 'HHHH': \n", - " return i" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I will let the `random_devil` play 1000 times from each possible starting coin sequence:" + "Or you can continue on ...\n", + "\n", + "# Verifying the Winning Strategy\n", + "\n", + "I don't have a proof, but I have some evidence that this strategy works:\n", + "- Exploring with paper and pencil, it looks good. \n", + "- A colleague did the puzzle and got the same answer. \n", + "- It passes the `winning` test below.\n", + "\n", + "The call `winning(strategy, k)` plays the strategy *k* times against a Devil that chooses starting positions and rotations at random. Note this is dealing with concrete, individual states of the world, like `HTHH`, not belief states. If `winning` returns `False`, then the strategy is *definitely* flawed. If it returns `True`, then the strategy is *probably* good—it won *k* times in a row—but that does not prove it will win every time (and either way `winning` makes no claims about being a *shortest* strategy)." ] }, { "cell_type": "code", "execution_count": 11, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Counter({0: 1000,\n", - " 1: 1000,\n", - " 2: 986,\n", - " 3: 1014,\n", - " 4: 1052,\n", - " 5: 1004,\n", - " 6: 976,\n", - " 7: 968,\n", - " 8: 964,\n", - " 9: 1014,\n", - " 10: 985,\n", - " 11: 1003,\n", - " 12: 1056,\n", - " 13: 983,\n", - " 14: 1021,\n", - " 15: 974})" + "True" ] }, "execution_count": 11, @@ -410,78 +419,72 @@ } ], "source": [ - "moves = search()\n", + "def winning(strategy, k=100000) -> bool:\n", + " \"Is this a winning strategy? A probabilistic algorithm.\"\n", + " return all(play(strategy) == 'HHHH'\n", + " for _ in range(k))\n", "\n", - "Counter(random_devil(coins, moves) \n", - " for coins in all_coins\n", - " for _ in range(1000))" + "def play(strategy, starting_coins=list(all_coins())) -> Coins:\n", + " \"Play strategy for one game against a random Devil; return final state of coins.\"\n", + " coins = random.choice(starting_coins)\n", + " for move in strategy:\n", + " if 'T' not in coins: return coins\n", + " coins = random.choice(list(rotations(coins)))\n", + " coins = flip(coins, move)\n", + " return coins\n", + "\n", + "winning(strategy=coin_search())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This says that the player won all 16,000 times. (If the player had ever lost, there would have been an entry for `None` in the Counter.)\n", - "The remarkable thing, which I can't explain, is that there are very nearly exactly 1,000 results for each of the move counts from 0 to 15. Can you explain that?\n", "\n", - "# Canonical Coin Sequences and Moves\n", "\n", - "Consider the four coin sequences `{'HHHT', 'HHTH', 'HTHH', 'THHH'}`. In a sense, these are all the same: they all denote the same sequence of coins with the table rotated to different degrees. Since the devil is free to rotate the table any amount at any time, we could be justified in treating all four of these as equivalent, and collapsing them into one representative member (we could arbitrarily choose the one that comes first in alphabetical order, `'HHHT'`). I will write a definition for `Belief` that returns a `frozenset`, just like before, but makes it a set of canonical coin sequences.\n", + "# Canonical Coin Sequences\n", "\n", - "Similarly, the four moves `[{3}, {2}, {1}, {0}]` are equivalent, in that they all say \"flip one of the coins, but since you're going to rotate the table first, it doesn't matter which one I specify.\" I will write a function `canonical_moves` that lists all the canonical rotationally invariant moves corresponding to a belief state." + "Consider these coin sequences: `{'HHHT', 'HHTH', 'HTHH', 'THHH'}`. In a sense, these are all the same: they all denote the same sequence of coins with the table rotated to different degrees. Since the devil is free to rotate the table any amount at any time, we could be justified in treating all four of these as equivalent, and collapsing them into one representative member. I will redefine `Coins` so that is stil takes an iterable of `'H'` or `'T'` characters and joins them into a `str`, but I will make it consider all possible rotations of the string and (arbitraily) choose the one that comes first in alphabetical order (which would be `'HHHT'` for the four coin sequences mentioned here)." ] }, { "cell_type": "code", "execution_count": 12, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "def Belief(coin_collection): \n", - " \"A set of all the coin sequences in this collection, canonicalized.\"\n", - " return frozenset(min(rotations(c)) for c in coin_collection)\n", - "\n", - "def canonical_moves(coin_collection):\n", - " \"All rotationally invariant moves for a sequence of N coins.\"\n", - " return [set(i for (i, coin) in enumerate(coins) if coin == 'H' and 'H')\n", - " for coins in sorted(coin_collection) if 'H' in coins]" + "def Coins(coins) -> str: \n", + " \"The canonical representation (after rotation) of the 'H'/'T' sequence.\"\n", + " return min(rotations(''.join(coins)))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { - "collapsed": false + "collapsed": true }, - "outputs": [ - { - "data": { - "text/plain": [ - "frozenset({'HHHH', 'HHHT', 'HHTT', 'HTHT', 'HTTT', 'TTTT'})" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "Belief(all_coins)" + "assert Coins('HHHT') == Coins('HHTH') == Coins('HTHH') == Coins('THHH') == 'HHHT'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With `Coins` redefined, the result of `all_coins()` is different:" ] }, { "cell_type": "code", "execution_count": 14, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[{0, 1, 2, 3}, {0, 1, 2}, {0, 1}, {0, 2}, {0}]" + "frozenset({'HHHH', 'HHHT', 'HHTT', 'HTHT', 'HTTT', 'TTTT'})" ] }, "execution_count": 14, @@ -490,149 +493,22 @@ } ], "source": [ - "canonical_moves(_)" + "all_coins()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The starting belief set is down from 16 sequences to 6. Call these 4 heads, 3 heads, 2 adjacent heads, 2 opposite heads, 1 head, and no heads, respectively. Similarly, there are only 5 distinct moves, which we can call flip 4, flip 3, flip 2 adjacent, flip 2 opposite, and flip 1.\n", + "The starting belief set is down from 16 to 6, namely 4 heads, 3 heads, 2 adjacent heads, 2 opposite heads, 1 head, and no heads, respectively. \n", "\n", - "I have to confess to a form of cheating here: I threw in the `sorted` in `canonical_moves` even though it was not necessary. By including it, I made sure that `{0, 1, 2, 3}` is the first of the possible moves, which makes `search` faster, because half the time `{0, 1, 2, 3}` is the right move to make.\n", - "\n", - "# Visualizing the Solution\n", - "\n", - "How does the solution work? One answer is \"it takes care of all possibilities.\" But it would be nice to gain more insight. I'll print a table showing the belief state after each move, using the newly-defined canonicalized `Belief` form, and lining them up neatly in columns." + "Let's make sure we didn't break anything:" ] }, { "cell_type": "code", "execution_count": 15, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def show(moves, belief=all_coins):\n", - " \"For each move, print the move number, move, and belief state.\"\n", - " show_line(0, 'start', belief)\n", - " for (i, move) in enumerate(moves, 1):\n", - " belief = update(belief, move)\n", - " show_line(i, move, belief)\n", - "\n", - "def show_line(i, move, belief, order=sorted(Belief(all_coins))):\n", - " \"Print the move number, move, and belief state.\"\n", - " ordered_belief = [(coins if coins in belief else ' ')\n", - " for coins in order]\n", - " print('{:2} | {:5} | {} | {}'\n", - " .format(i, join(move), join(ordered_belief, ' '), i))\n", - " \n", - "def join(items, sep='') -> str: return sep.join(map(str, items))" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0 | start | HHHH HHHT HHTT HTHT HTTT TTTT | 0\n", - " 1 | 0123 | HHHH HHHT HHTT HTHT HTTT | 1\n", - " 2 | 02 | HHHH HHHT HHTT HTTT TTTT | 2\n", - " 3 | 0123 | HHHH HHHT HHTT HTTT | 3\n", - " 4 | 01 | HHHH HHHT HTHT HTTT TTTT | 4\n", - " 5 | 0123 | HHHH HHHT HTHT HTTT | 5\n", - " 6 | 02 | HHHH HHHT HTTT TTTT | 6\n", - " 7 | 0123 | HHHH HHHT HTTT | 7\n", - " 8 | 0 | HHHH HHTT HTHT TTTT | 8\n", - " 9 | 0123 | HHHH HHTT HTHT | 9\n", - "10 | 02 | HHHH HHTT TTTT | 10\n", - "11 | 0123 | HHHH HHTT | 11\n", - "12 | 01 | HHHH HTHT TTTT | 12\n", - "13 | 0123 | HHHH HTHT | 13\n", - "14 | 02 | HHHH TTTT | 14\n", - "15 | 0123 | HHHH | 15\n" - ] - } - ], - "source": [ - "show(search())" - ] - }, - { - "cell_type": "markdown", "metadata": {}, - "source": [ - "We can see that every odd-numbered move flips all four coins to eliminate the possibility of `TTTT`, flipping it to `HHHH`. We can also see that moves 2, 4, and 6 flip two coins and have the effect of eventually eliminating the two \"two heads\" sequences from the belief state, and then move 8 flips a single coin, thus eliminating the \"three heads\" and \"one heads\" sequences, and bringing back the \"two heads\" possibilities. Repeating moves 2, 4, and 6 in moves 10, 12, and 14 then re-eliminates the \"two heads\", and move 15 gets the belief state down to `{'HHHH'}`.\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Different Numbers of Coins\n", - "\n", - "What if there are 3 coins on the table arranged in a triangle? Or 6 coins in a hexagon? To answer that, I'll generalize the two functions that have a \"4\" in them, `search`, and `rotations`. I'll also generalize `update`, which had `'HHHH'` in it. And I'll introduce the function `canonical_coins` to return a belief state of all canonical coin sequences of length `N`." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def search(N=4):\n", - " \"Breadth-first search from all_coins to all heads.\"\n", - " start = canonical_coins(N)\n", - " all_moves = canonical_moves(start)\n", - " goal = {'H' * N}\n", - " explored = set()\n", - " queue = deque([Node([], start)])\n", - " while queue:\n", - " (path, belief) = queue.popleft()\n", - " if belief == goal:\n", - " return path\n", - " for move in all_moves:\n", - " belief2 = update(belief, move)\n", - " if belief2 not in explored:\n", - " explored.add(belief2)\n", - " queue.append(Node(path + [move], belief2))\n", - "\n", - "def rotations(coins) -> [Coins]: \n", - " \"A list of all possible rotations of a coin sequence.\"\n", - " return [coins[r:] + coins[:r] for r in range(len(coins))]\n", - " \n", - "def update(belief, move) -> Belief:\n", - " \"Update belief: consider all possible rotations, then flip.\"\n", - " return Belief((flip(c, move) if 'T' in c else c)\n", - " for coins in belief\n", - " for c in rotations(coins))\n", - "\n", - "def canonical_coins(N) -> Belief: return Belief(map(Coins, product('HT', repeat=N)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "First verify that we didn't break `search`:" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, "outputs": [ { "data": { @@ -644,7 +520,7 @@ " {0, 1, 2, 3},\n", " {0, 2},\n", " {0, 1, 2, 3},\n", - " {0, 1, 2},\n", + " {0},\n", " {0, 1, 2, 3},\n", " {0, 2},\n", " {0, 1, 2, 3},\n", @@ -654,155 +530,148 @@ " {0, 1, 2, 3}]" ] }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coin_search()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Winning Strategies for *N* Coins\n", + "\n", + "What if there are 3 coins on the table arranged in a triangle? Or 6 coins in a hexagon? To answer that, I'll generalize all the functions that have a \"4\" in them: `all_moves, all_coins`, `rotations` and `coin_search`.\n", + "\n", + "Computing `all_coins(N)` is easy; just take the product, and canonicalize each one with the new definition of `Coins`. For `all_moves(N)` I want canonicalized moves: the moves `{0}` and `{1}` should be considered the same, since they both say \"flip one coin.\" To get that, look at the canonicalized set of `all_coins(N)`, and for each one pull out the set of positions that have an `H` in them and flip those positions. (The positions with a `T` should be symmetric, so we don't need them as well.)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def all_moves(N=4) -> [Move]:\n", + " \"All canonical moves for a sequence of N coins.\"\n", + " return [set(i for i in range(N) if coins[i] == 'H')\n", + " for coins in sorted(all_coins(N))]\n", + "\n", + "def all_coins(N=4) -> Belief:\n", + " \"Return the belief set consisting of all possible coin sequences.\"\n", + " return Belief(map(Coins, product('HT', repeat=N)))\n", + "\n", + "def rotations(coins) -> {Coins}: \n", + " \"A list of all possible rotations of a coin sequence.\"\n", + " return {coins[r:] + coins[:r] for r in range(len(coins))}\n", + "\n", + "def coin_search(N=4) -> Strategy: \n", + " \"Use the generic `search` function to solve the Coin Flip problem.\"\n", + " return search(start=all_coins(N), goal={'H' * N}, actions=all_moves(N), result=update)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's test the new definitions and make sure we haven't broken `update` and `coin_search`:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "assert all_moves(3) == [{0, 1, 2}, {0, 1}, {0}, set()]\n", + "assert all_moves(4) == [{0, 1, 2, 3}, {0, 1, 2}, {0, 1}, {0, 2}, {0}, set()]\n", + "\n", + "assert all_coins(4) == {'HHHH', 'HHHT', 'HHTT', 'HTHT', 'HTTT', 'TTTT'}\n", + "assert all_coins(5) == {'HHHHH','HHHHT', 'HHHTT','HHTHT','HHTTT', 'HTHTT', 'HTTTT', 'TTTTT'}\n", + "\n", + "assert rotations('HHHHHT') == {'HHHHHT', 'HHHHTH', 'HHHTHH', 'HHTHHH', 'HTHHHH', 'THHHHH'}\n", + "assert update({'TTTTTTT'}, {3}) == {'HTTTTTT'}\n", + "assert (update(rotations('HHHHHT'), {0}) == update({'HHTHHH'}, {1}) == update({'THHHHH'}, {2})\n", + " == {'HHHHHH', 'HHHHTT', 'HHHTHT', 'HHTHHT'})\n", + "\n", + "assert coin_search(4) == [\n", + " {0, 1, 2, 3},\n", + " {0, 2},\n", + " {0, 1, 2, 3},\n", + " {0, 1},\n", + " {0, 1, 2, 3},\n", + " {0, 2},\n", + " {0, 1, 2, 3},\n", + " {0, 1, 2},\n", + " {0, 1, 2, 3},\n", + " {0, 2},\n", + " {0, 1, 2, 3},\n", + " {0, 1},\n", + " {0, 1, 2, 3},\n", + " {0, 2},\n", + " {0, 1, 2, 3}]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How many distinct canonical coin sequences are there for up to a dozen coins?" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: 2,\n", + " 2: 3,\n", + " 3: 4,\n", + " 4: 6,\n", + " 5: 8,\n", + " 6: 14,\n", + " 7: 20,\n", + " 8: 36,\n", + " 9: 60,\n", + " 10: 108,\n", + " 11: 188,\n", + " 12: 352}" + ] + }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "search(4)" + "{N: len(all_coins(N))\n", + " for N in range(1, 13)}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now test the new definitions:" + "On the one hand this is encouraging; there are only 352 canonical coin sequences of length 10, far less than the 4,096 non-canonical squences. On the other hand, it is discouraging; since we are searching over belief states, that would be 2352 belief states, which is nore than a googol. However, we should be able to easily handle up to N=7, because 220 is only a million.\n", + "\n", + "# Winning Strategies for 1 to 7 Coins" ] }, { "cell_type": "code", "execution_count": 19, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "['HHHHHT', 'HHHHTH', 'HHHTHH', 'HHTHHH', 'HTHHHH', 'THHHHH']" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rotations('HHHHHT')" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "frozenset({'HHHH', 'HHHT', 'HHTT', 'HTHT', 'HTTT', 'TTTT'})" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "canonical_coins(4)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "frozenset({'HHHHH',\n", - " 'HHHHT',\n", - " 'HHHTT',\n", - " 'HHTHT',\n", - " 'HHTTT',\n", - " 'HTHTT',\n", - " 'HTTTT',\n", - " 'TTTTT'})" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "canonical_coins(5)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[{0, 1, 2, 3, 4}, {0, 1, 2, 3}, {0, 1, 2}, {0, 1, 3}, {0, 1}, {0, 2}, {0}]" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "canonical_moves(_)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{1: 2, 2: 3, 3: 4, 4: 6, 5: 8, 6: 14, 7: 20, 8: 36, 9: 60, 10: 108}" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "{N: len(canonical_coins(N))\n", - " for N in range(1, 11)}" - ] - }, - { - "cell_type": "markdown", "metadata": {}, - "source": [ - "On the one hand this is encouraging; there are only 108 canonical coin sequences of length 10, far less than the 1024 non-canonical squences. On the other hand, it is discouraging; since we are searching over the belief states, that would be 2108 ≌ 1032 belief states, which is infeasible. However, we should be able to easily handle up to N=7, because 220 is only a million.\n", - "\n", - "# Solutions for 1 to 7 Coins" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, "outputs": [ { "data": { @@ -830,47 +699,212 @@ " 7: None}" ] }, - "execution_count": 24, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "{N: search(N) for N in range(1, 8)}" + "{N: coin_search(N) for N in range(1, 8)}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Too bad; there are no solutions for N = 3, 5, 6, or 7. \n", + "Too bad; there are no winning strategies for N = 3, 5, 6, or 7. \n", "\n", - "There are solutions for N = 1, 2, 4; of lengths 1, 3, 15. That suggests the conjecture: for every *N* that is a power of 2, there will be a solution of length 2*N* - 1. \n", + "There *are* winning strategies for N = 1, 2, 4; they have lengths 1, 3, 15, respectively. Hmm. That suggests ...\n", "\n", - "# Solution for 8 Coins\n", + "# A Conjecture\n", "\n", - "Even though there are 236 = 68 billion belief states fo N = 8, I hope we can find a solution early in the search process. Let's try:" + "> For every *N* that is a power of 2, there will be a shortest winning strategy of length 2*N* - 1.\n", + "\n", + "> For every *N* that is not a power of 2, there will be no winning strategy. \n", + "\n", + "# Winning Strategy for 8 Coins\n", + "\n", + "For N = 8, there are 236 = 69 billion belief states and if the conjecture is true there will be a shortest winning strategy with 255 steps. All the computations up to now have been instantaneous, but this one should take a few minutes. Let's see:" ] }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, + "execution_count": 20, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 1min 47s, sys: 731 ms, total: 1min 48s\n", - "Wall time: 1min 50s\n" + "CPU times: user 1min 18s, sys: 118 ms, total: 1min 18s\n", + "Wall time: 1min 18s\n" + ] + } + ], + "source": [ + "%time strategy = coin_search(8)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "255" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(strategy)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Eureka!** That's evidence in favor of the conjecture. But not proof. And it leaves many questions unanswered:\n", + "- Can you show there are no winning strategies for *N* = 9, 10, 11, ...?\n", + "- Can you prove there are no winning strategies for any *N* that is not a power of 2?\n", + "- Can you find a winning strategy of length 65,535 for *N* = 16 and verify that it works?\n", + "- Can you generate a winning strategy for any power of 2 (without proving it is shortest)?\n", + "- Can you prove there are no shorter winning strategies for *N* = 16?\n", + "- Can you prove the conjecture in general?\n", + "- Can you *understand* and *explain* how the strategy works, rather than just listing the moves?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Visualizing Strategies\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def show(moves, N=4):\n", + " \"For each move, print the move number, move, and belief state.\"\n", + " belief = all_coins(N)\n", + " order = sorted(belief)\n", + " for (i, move) in enumerate(moves, 1):\n", + " belief = update(belief, move)\n", + " print('{:3} | {:8} | {}'.format(\n", + " i, movestr(move, N), beliefstr(belief, order)))\n", + "\n", + "def beliefstr(belief, order) -> str: \n", + " return join(((coins if coins in belief else ' ' * len(coins))\n", + " for coins in order), ' ')\n", + "\n", + "def movestr(move, N) -> str: \n", + " return join((i if i in move else ' ') \n", + " for i in range(N))\n", + " \n", + "def join(items, sep='') -> str: \n", + " return sep.join(map(str, items))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following tables shows how moves change the belief state:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 1 | 01 | HH HT \n", + " 2 | 0 | HH TT\n", + " 3 | 01 | HH \n" + ] + } + ], + "source": [ + "show(coin_search(2), 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 1 | 0123 | HHHH HHHT HHTT HTHT HTTT \n", + " 2 | 0 2 | HHHH HHHT HHTT HTTT TTTT\n", + " 3 | 0123 | HHHH HHHT HHTT HTTT \n", + " 4 | 01 | HHHH HHHT HTHT HTTT TTTT\n", + " 5 | 0123 | HHHH HHHT HTHT HTTT \n", + " 6 | 0 2 | HHHH HHHT HTTT TTTT\n", + " 7 | 0123 | HHHH HHHT HTTT \n", + " 8 | 012 | HHHH HHTT HTHT TTTT\n", + " 9 | 0123 | HHHH HHTT HTHT \n", + " 10 | 0 2 | HHHH HHTT TTTT\n", + " 11 | 0123 | HHHH HHTT \n", + " 12 | 01 | HHHH HTHT TTTT\n", + " 13 | 0123 | HHHH HTHT \n", + " 14 | 0 2 | HHHH TTTT\n", + " 15 | 0123 | HHHH \n" + ] + } + ], + "source": [ + "show(coin_search(4))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that every odd-numbered move flips all four coins to eliminate the possibility of `TTTT`, flipping it to `HHHH`. We can also see that moves 2, 4, and 6 flip two coins and have the effect of eventually eliminating the two \"two heads\" sequences from the belief state, and then move 8 eliminates the \"three heads\" and \"one heads\" sequences, while bringing back the \"two heads\" possibilities. Repeating moves 2, 4, and 6 in moves 10, 12, and 14 then re-eliminates the \"two heads\", and move 15 gets the belief state down to `{'HHHH'}`.\n", + "\n", + "You could call `show(strategy, 8)`, but the results look bad unless you have a very wide (345 characters) screen to view it on. So instead I'll add a `verbose` parameter to `play` and play out some games with a trace of each move:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 1: HHTH rot: HHHT flip: 0123 => HTTT\n", + " 2: HTTT rot: TTTH flip: 0 2 => HHHT\n", + " 3: HHHT rot: HTHH flip: 0123 => HTTT\n", + " 4: HTTT rot: HTTT flip: 01 => HTTT\n", + " 5: HTTT rot: TTHT flip: 0123 => HHHT\n", + " 6: HHHT rot: THHH flip: 0 2 => HHHT\n", + " 7: HHHT rot: THHH flip: 0123 => HTTT\n", + " 8: HTTT rot: TTTH flip: 012 => HHHH\n" ] }, { "data": { "text/plain": [ - "255" + "'HHHH'" ] }, "execution_count": 25, @@ -879,282 +913,292 @@ } ], "source": [ - "%time solution8 = search(8)\n", - "len(solution8)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Eureka! That's evidence in favor of my conjecture, and it took less time than I thought it would. It is still not proof, and I'll need a more efficient/clever approach to test even for N=16. Can you come up with that approach? Can you prove the conjecture for all powers of 2? Here's the solution for N = 8 to help you discover a pattern:" + "def play(coins, strategy, verbose=False):\n", + " \"Play strategy against a random Devil; return final state of coins.\"\n", + " N = len(coins)\n", + " for i, move in enumerate(strategy, 1):\n", + " if 'T' not in coins: return coins\n", + " coins0 = coins\n", + " coins1 = random.choice(list(rotations(coins)))\n", + " coins = flip(coins1, move)\n", + " if verbose: \n", + " print('{:4d}: {} rot: {} flip: {} => {}'.format(\n", + " i, coins0, coins1, movestr(move, N), coins))\n", + " return coins\n", + "\n", + "play('HHTH', coin_search(4), True)" ] }, { "cell_type": "code", "execution_count": 26, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 1: HTTHTTHT rot: TTHTHTTH flip: 01234567 => HHTHHTHT\n", + " 2: HHTHHTHT rot: HHTHTHHT flip: 0 2 4 6 => HHHHHTTT\n", + " 3: HHHHHTTT rot: TTHHHHHT flip: 01234567 => HHHTTTTT\n", + " 4: HHHTTTTT rot: HTTTTTHH flip: 01 45 => HHHHTHTT\n", + " 5: HHHHTHTT rot: HTHTTHHH flip: 01234567 => HHTTTTHT\n", + " 6: HHTTTTHT rot: TTTHTHHT flip: 0 2 4 6 => HHHHTTHT\n", + " 7: HHHHTTHT rot: TTHTHHHH flip: 01234567 => HHTHTTTT\n", + " 8: HHTHTTTT rot: THHTHTTT flip: 012 456 => HHTHTTTT\n", + " 9: HHTHTTTT rot: THHTHTTT flip: 01234567 => HHHHTTHT\n", + " 10: HHHHTTHT rot: TTHTHHHH flip: 0 2 4 6 => HHTTTTHT\n", + " 11: HHTTTTHT rot: HTHHTTTT flip: 01234567 => HHHHTHTT\n", + " 12: HHHHTHTT rot: HTTHHHHT flip: 01 45 => HTHTTHTT\n", + " 13: HTHTTHTT rot: THTTHTTH flip: 01234567 => HHTHHTHT\n", + " 14: HHTHHTHT rot: THHTHTHH flip: 0 2 4 6 => HHHTTTTT\n", + " 15: HHHTTTTT rot: TTTTTHHH flip: 01234567 => HHHHHTTT\n", + " 16: HHHHHTTT rot: HHHTTTHH flip: 0123 => HHTTTHTT\n", + " 17: HHTTTHTT rot: HHTTTHTT flip: 01234567 => HHHTHHTT\n", + " 18: HHHTHHTT rot: HHHTHHTT flip: 0 2 4 6 => HHTTHTTT\n", + " 19: HHTTHTTT rot: TTHTTTHH flip: 01234567 => HHHTTHHT\n", + " 20: HHHTTHHT rot: HHHTTHHT flip: 01 45 => HTHTHTTT\n", + " 21: HTHTHTTT rot: TTHTHTHT flip: 01234567 => HHHTHTHT\n", + " 22: HHHTHTHT rot: HHHTHTHT flip: 0 2 4 6 => HTTTTTTT\n", + " 23: HTTTTTTT rot: TTTTTTTH flip: 01234567 => HHHHHHHT\n", + " 24: HHHHHHHT rot: HHHHHHHT flip: 012 456 => HTTTTTTT\n", + " 25: HTTTTTTT rot: TTTTTHTT flip: 01234567 => HHHHHHHT\n", + " 26: HHHHHHHT rot: HHHHHHHT flip: 0 2 4 6 => HTHTHTTT\n", + " 27: HTHTHTTT rot: THTTTHTH flip: 01234567 => HHHTHTHT\n", + " 28: HHHTHTHT rot: HHHTHTHT flip: 01 45 => HHTTTHTT\n", + " 29: HHTTTHTT rot: TTHHTTTH flip: 01234567 => HHHTHHTT\n", + " 30: HHHTHHTT rot: TTHHHTHH flip: 0 2 4 6 => HHTTHTTT\n", + " 31: HHTTHTTT rot: HTTHTTTH flip: 01234567 => HHHTTHHT\n", + " 32: HHHTTHHT rot: TTHHTHHH flip: 01234 6 => HHHTTHHT\n", + " 33: HHHTTHHT rot: THHHTTHH flip: 01234567 => HHTTHTTT\n", + " 34: HHTTHTTT rot: TTTHHTTH flip: 0 2 4 6 => HHHTHHTT\n", + " 35: HHHTHHTT rot: HTTHHHTH flip: 01234567 => HHTTTHTT\n", + " 36: HHTTTHTT rot: TTHHTTTH flip: 01 45 => HHHHHHHT\n", + " 37: HHHHHHHT rot: HTHHHHHH flip: 01234567 => HTTTTTTT\n", + " 38: HTTTTTTT rot: HTTTTTTT flip: 0 2 4 6 => HTHTHTTT\n", + " 39: HTHTHTTT rot: THTHTTTH flip: 01234567 => HHHTHTHT\n", + " 40: HHHTHTHT rot: HHHTHTHT flip: 012 456 => HTTTTTTT\n", + " 41: HTTTTTTT rot: TTTTTTTH flip: 01234567 => HHHHHHHT\n", + " 42: HHHHHHHT rot: HHTHHHHH flip: 0 2 4 6 => HHHTHTHT\n", + " 43: HHHTHTHT rot: HTHHHTHT flip: 01234567 => HTHTHTTT\n", + " 44: HTHTHTTT rot: HTHTHTTT flip: 01 45 => HHTTHTTT\n", + " 45: HHTTHTTT rot: TTHTTTHH flip: 01234567 => HHHTTHHT\n", + " 46: HHHTTHHT rot: HTTHHTHH flip: 0 2 4 6 => HHTTTHTT\n", + " 47: HHTTTHTT rot: THTTHHTT flip: 01234567 => HHHTHHTT\n", + " 48: HHHTHHTT rot: HHTHHTTH flip: 0123 => HTHTTHTT\n", + " 49: HTHTTHTT rot: TTHTTHTH flip: 01234567 => HHTHHTHT\n", + " 50: HHTHHTHT rot: THTHHTHH flip: 0 2 4 6 => HHHHHTTT\n", + " 51: HHHHHTTT rot: HTTTHHHH flip: 01234567 => HHHTTTTT\n", + " 52: HHHTTTTT rot: TTHHHTTT flip: 01 45 => HHHHTHTT\n", + " 53: HHHHTHTT rot: HHHHTHTT flip: 01234567 => HHTTTTHT\n", + " 54: HHTTTTHT rot: TTTTHTHH flip: 0 2 4 6 => HHTHTTTT\n", + " 55: HHTHTTTT rot: THTTTTHH flip: 01234567 => HHHHTTHT\n", + " 56: HHHHTTHT rot: HHTTHTHH flip: 012 456 => HTHTTHTT\n", + " 57: HTHTTHTT rot: THTTHTTH flip: 01234567 => HHTHHTHT\n", + " 58: HHTHHTHT rot: HHTHTHHT flip: 0 2 4 6 => HHHHHTTT\n", + " 59: HHHHHTTT rot: HHTTTHHH flip: 01234567 => HHHTTTTT\n", + " 60: HHHTTTTT rot: TTTTHHHT flip: 01 45 => HHTTTTHT\n", + " 61: HHTTTTHT rot: HTTTTHTH flip: 01234567 => HHHHTHTT\n", + " 62: HHHHTHTT rot: THHHHTHT flip: 0 2 4 6 => HHTHTTTT\n", + " 63: HHTHTTTT rot: THTTTTHH flip: 01234567 => HHHHTTHT\n", + " 64: HHHHTTHT rot: HHHTTHTH flip: 012345 => HHTTHTTT\n", + " 65: HHTTHTTT rot: HTTHTTTH flip: 01234567 => HHHTTHHT\n", + " 66: HHHTTHHT rot: TTHHTHHH flip: 0 2 4 6 => HHHTHHTT\n", + " 67: HHHTHHTT rot: HHTHHTTH flip: 01234567 => HHTTTHTT\n", + " 68: HHTTTHTT rot: THTTHHTT flip: 01 45 => HTTTTTTT\n", + " 69: HTTTTTTT rot: TTTTTTHT flip: 01234567 => HHHHHHHT\n", + " 70: HHHHHHHT rot: HHHTHHHH flip: 0 2 4 6 => HTHTHTTT\n", + " 71: HTHTHTTT rot: TTHTHTHT flip: 01234567 => HHHTHTHT\n", + " 72: HHHTHTHT rot: HTHHHTHT flip: 012 456 => HTHTHTTT\n", + " 73: HTHTHTTT rot: TTHTHTHT flip: 01234567 => HHHTHTHT\n", + " 74: HHHTHTHT rot: HTHTHTHH flip: 0 2 4 6 => HTTTTTTT\n", + " 75: HTTTTTTT rot: TTTTHTTT flip: 01234567 => HHHHHHHT\n", + " 76: HHHHHHHT rot: HHTHHHHH flip: 01 45 => HHTTTHTT\n", + " 77: HHTTTHTT rot: HTTTHTTH flip: 01234567 => HHHTHHTT\n", + " 78: HHHTHHTT rot: HHTTHHHT flip: 0 2 4 6 => HHTTHTTT\n", + " 79: HHTTHTTT rot: HHTTHTTT flip: 01234567 => HHHTTHHT\n", + " 80: HHHTTHHT rot: HTHHHTTH flip: 0123 => HTHTTHTT\n", + " 81: HTHTTHTT rot: THTTHTTH flip: 01234567 => HHTHHTHT\n", + " 82: HHTHHTHT rot: HHTHHTHT flip: 0 2 4 6 => HHHTTTTT\n", + " 83: HHHTTTTT rot: TTHHHTTT flip: 01234567 => HHHHHTTT\n", + " 84: HHHHHTTT rot: TTHHHHHT flip: 01 45 => HHHHTTHT\n", + " 85: HHHHTTHT rot: HTTHTHHH flip: 01234567 => HHTHTTTT\n", + " 86: HHTHTTTT rot: HTTTTHHT flip: 0 2 4 6 => HHTTTTHT\n", + " 87: HHTTTTHT rot: TTTTHTHH flip: 01234567 => HHHHTHTT\n", + " 88: HHHHTHTT rot: THHHHTHT flip: 012 456 => HTHTTHTT\n", + " 89: HTHTTHTT rot: THTTHTTH flip: 01234567 => HHTHHTHT\n", + " 90: HHTHHTHT rot: THTHHTHH flip: 0 2 4 6 => HHHHHTTT\n", + " 91: HHHHHTTT rot: TTTHHHHH flip: 01234567 => HHHTTTTT\n", + " 92: HHHTTTTT rot: HHHTTTTT flip: 01 45 => HHTTTTHT\n", + " 93: HHTTTTHT rot: TTHTHHTT flip: 01234567 => HHHHTHTT\n", + " 94: HHHHTHTT rot: HHTHTTHH flip: 0 2 4 6 => HHHHTTHT\n", + " 95: HHHHTTHT rot: TTHTHHHH flip: 01234567 => HHTHTTTT\n", + " 96: HHTHTTTT rot: TTHHTHTT flip: 01234 6 => HHHTHHTT\n", + " 97: HHHTHHTT rot: TTHHHTHH flip: 01234567 => HHTTTHTT\n", + " 98: HHTTTHTT rot: TTHTTHHT flip: 0 2 4 6 => HHTTHTTT\n", + " 99: HHTTHTTT rot: THTTTHHT flip: 01234567 => HHHTTHHT\n", + " 100: HHHTTHHT rot: THHTHHHT flip: 01 45 => HTHTHTTT\n", + " 101: HTHTHTTT rot: THTHTTTH flip: 01234567 => HHHTHTHT\n", + " 102: HHHTHTHT rot: HTHTHTHH flip: 0 2 4 6 => HTTTTTTT\n", + " 103: HTTTTTTT rot: TTTTTHTT flip: 01234567 => HHHHHHHT\n", + " 104: HHHHHHHT rot: HHHHHHHT flip: 012 456 => HTTTTTTT\n", + " 105: HTTTTTTT rot: TTTHTTTT flip: 01234567 => HHHHHHHT\n", + " 106: HHHHHHHT rot: HHHHHHHT flip: 0 2 4 6 => HTHTHTTT\n", + " 107: HTHTHTTT rot: THTHTHTT flip: 01234567 => HHHTHTHT\n", + " 108: HHHTHTHT rot: HTHTHTHH flip: 01 45 => HHHTHHTT\n", + " 109: HHHTHHTT rot: TTHHHTHH flip: 01234567 => HHTTTHTT\n", + " 110: HHTTTHTT rot: HTTTHTTH flip: 0 2 4 6 => HHTTHTTT\n", + " 111: HHTTHTTT rot: TTTHHTTH flip: 01234567 => HHHTTHHT\n", + " 112: HHHTTHHT rot: HHHTTHHT flip: 0123 => HHTTTTHT\n", + " 113: HHTTTTHT rot: TTHTHHTT flip: 01234567 => HHHHTHTT\n", + " 114: HHHHTHTT rot: HHTHTTHH flip: 0 2 4 6 => HHHHTTHT\n", + " 115: HHHHTTHT rot: HHHHTTHT flip: 01234567 => HHTHTTTT\n", + " 116: HHTHTTTT rot: HTTTTHHT flip: 01 45 => HTHTTHTT\n", + " 117: HTHTTHTT rot: THTHTTHT flip: 01234567 => HHTHHTHT\n", + " 118: HHTHHTHT rot: HHTHHTHT flip: 0 2 4 6 => HHHTTTTT\n", + " 119: HHHTTTTT rot: HHTTTTTH flip: 01234567 => HHHHHTTT\n", + " 120: HHHHHTTT rot: TTTHHHHH flip: 012 456 => HHHHHTTT\n", + " 121: HHHHHTTT rot: HTTTHHHH flip: 01234567 => HHHTTTTT\n", + " 122: HHHTTTTT rot: HHHTTTTT flip: 0 2 4 6 => HTHTTHTT\n", + " 123: HTHTTHTT rot: THTTHTHT flip: 01234567 => HHTHHTHT\n", + " 124: HHTHHTHT rot: THHTHHTH flip: 01 45 => HHTHTTTT\n", + " 125: HHTHTTTT rot: HHTHTTTT flip: 01234567 => HHHHTTHT\n", + " 126: HHHHTTHT rot: THHHHTTH flip: 0 2 4 6 => HHHHTHTT\n", + " 127: HHHHTHTT rot: THHHHTHT flip: 01234567 => HHTTTTHT\n", + " 128: HHTTTTHT rot: HTTTTHTH flip: 0123456 => HHHHTHHT\n", + " 129: HHHHTHHT rot: THHTHHHH flip: 01234567 => HTTHTTTT\n", + " 130: HTTHTTTT rot: TTHTTTTH flip: 0 2 4 6 => HHHTTTHT\n", + " 131: HHHTTTHT rot: THHHTTTH flip: 01234567 => HHHTHTTT\n", + " 132: HHHTHTTT rot: THHHTHTT flip: 01 45 => HHHTTTHT\n", + " 133: HHHTTTHT rot: TTTHTHHH flip: 01234567 => HHHTHTTT\n", + " 134: HHHTHTTT rot: HTTTHHHT flip: 0 2 4 6 => HTTHTTTT\n", + " 135: HTTHTTTT rot: TTTTHTTH flip: 01234567 => HHHHTHHT\n", + " 136: HHHHTHHT rot: HHHTHHTH flip: 012 456 => HHTTTTTT\n", + " 137: HHTTTTTT rot: TTHHTTTT flip: 01234567 => HHHHHHTT\n", + " 138: HHHHHHTT rot: HHTTHHHH flip: 0 2 4 6 => HHTTHTHT\n", + " 139: HHTTHTHT rot: HTHTHHTT flip: 01234567 => HHTHTHTT\n", + " 140: HHTHTHTT rot: THTTHHTH flip: 01 45 => HHTTTTTT\n", + " 141: HHTTTTTT rot: TTTHHTTT flip: 01234567 => HHHHHHTT\n", + " 142: HHHHHHTT rot: TTHHHHHH flip: 0 2 4 6 => HHTTHTHT\n", + " 143: HHTTHTHT rot: TTHTHTHH flip: 01234567 => HHTHTHTT\n", + " 144: HHTHTHTT rot: HTTHHTHT flip: 0123 => HHTHTHTT\n", + " 145: HHTHTHTT rot: TTHHTHTH flip: 01234567 => HHTTHTHT\n", + " 146: HHTTHTHT rot: HHTTHTHT flip: 0 2 4 6 => HHTTTTTT\n", + " 147: HHTTTTTT rot: TTHHTTTT flip: 01234567 => HHHHHHTT\n", + " 148: HHHHHHTT rot: HHHHHHTT flip: 01 45 => HHTTTTTT\n", + " 149: HHTTTTTT rot: TTTTHHTT flip: 01234567 => HHHHHHTT\n", + " 150: HHHHHHTT rot: HHHHTTHH flip: 0 2 4 6 => HHTTHTHT\n", + " 151: HHTTHTHT rot: THTHHTTH flip: 01234567 => HHTHTHTT\n", + " 152: HHTHTHTT rot: HHTHTHTT flip: 012 456 => HHHTHTTT\n", + " 153: HHHTHTTT rot: THTTTHHH flip: 01234567 => HHHTTTHT\n", + " 154: HHHTTTHT rot: HHTTTHTH flip: 0 2 4 6 => HHHHTHHT\n", + " 155: HHHHTHHT rot: THHTHHHH flip: 01234567 => HTTHTTTT\n", + " 156: HTTHTTTT rot: TTHTTTTH flip: 01 45 => HHHHTHHT\n", + " 157: HHHHTHHT rot: HHTHHHHT flip: 01234567 => HTTHTTTT\n", + " 158: HTTHTTTT rot: TTTHTTHT flip: 0 2 4 6 => HHHTTTHT\n", + " 159: HHHTTTHT rot: HHHTTTHT flip: 01234567 => HHHTHTTT\n", + " 160: HHHTHTTT rot: TTHHHTHT flip: 01234 6 => HHTTTTTT\n", + " 161: HHTTTTTT rot: TTHHTTTT flip: 01234567 => HHHHHHTT\n", + " 162: HHHHHHTT rot: HHHHHTTH flip: 0 2 4 6 => HHTHTHTT\n", + " 163: HHTHTHTT rot: THTTHHTH flip: 01234567 => HHTTHTHT\n", + " 164: HHTTHTHT rot: TTHTHTHH flip: 01 45 => HHHHHHTT\n", + " 165: HHHHHHTT rot: HHTTHHHH flip: 01234567 => HHTTTTTT\n", + " 166: HHTTTTTT rot: HHTTTTTT flip: 0 2 4 6 => HHTHTHTT\n", + " 167: HHTHTHTT rot: THTHTTHH flip: 01234567 => HHTTHTHT\n", + " 168: HHTTHTHT rot: HTHHTTHT flip: 012 456 => HHHTTTHT\n", + " 169: HHHTTTHT rot: TTTHTHHH flip: 01234567 => HHHTHTTT\n", + " 170: HHHTHTTT rot: TTHHHTHT flip: 0 2 4 6 => HTTHTTTT\n", + " 171: HTTHTTTT rot: TTTTHTTH flip: 01234567 => HHHHTHHT\n", + " 172: HHHHTHHT rot: HTHHTHHH flip: 01 45 => HHHHTHHT\n", + " 173: HHHHTHHT rot: THHTHHHH flip: 01234567 => HTTHTTTT\n", + " 174: HTTHTTTT rot: TTHTTHTT flip: 0 2 4 6 => HHHTHTTT\n", + " 175: HHHTHTTT rot: THTTTHHH flip: 01234567 => HHHTTTHT\n", + " 176: HHHTTTHT rot: HHHTTTHT flip: 0123 => HTTHTTTT\n", + " 177: HTTHTTTT rot: TTHTTTTH flip: 01234567 => HHHHTHHT\n", + " 178: HHHHTHHT rot: HHTHHTHH flip: 0 2 4 6 => HHHTTTHT\n", + " 179: HHHTTTHT rot: HHHTTTHT flip: 01234567 => HHHTHTTT\n", + " 180: HHHTHTTT rot: TTTHHHTH flip: 01 45 => HHHTHTTT\n", + " 181: HHHTHTTT rot: HTTTHHHT flip: 01234567 => HHHTTTHT\n", + " 182: HHHTTTHT rot: HHTTTHTH flip: 0 2 4 6 => HHHHTHHT\n", + " 183: HHHHTHHT rot: THHHHTHH flip: 01234567 => HTTHTTTT\n", + " 184: HTTHTTTT rot: HTTTTHTT flip: 012 456 => HHTHTHTT\n", + " 185: HHTHTHTT rot: THHTHTHT flip: 01234567 => HHTTHTHT\n", + " 186: HHTTHTHT rot: HTTHTHTH flip: 0 2 4 6 => HHHHHHTT\n", + " 187: HHHHHHTT rot: TTHHHHHH flip: 01234567 => HHTTTTTT\n", + " 188: HHTTTTTT rot: TTTTTTHH flip: 01 45 => HHHHHHTT\n", + " 189: HHHHHHTT rot: HHHHHTTH flip: 01234567 => HHTTTTTT\n", + " 190: HHTTTTTT rot: HHTTTTTT flip: 0 2 4 6 => HHTHTHTT\n", + " 191: HHTHTHTT rot: HTHTTHHT flip: 01234567 => HHTTHTHT\n", + " 192: HHTTHTHT rot: HTHTHHTT flip: 012345 => HTHTTTTT\n", + " 193: HTHTTTTT rot: HTHTTTTT flip: 01234567 => HHHHHTHT\n", + " 194: HHHHHTHT rot: THHHHHTH flip: 0 2 4 6 => HHHHHTHT\n", + " 195: HHHHHTHT rot: HTHTHHHH flip: 01234567 => HTHTTTTT\n", + " 196: HTHTTTTT rot: TTTTHTHT flip: 01 45 => HHTHHTTT\n", + " 197: HHTHHTTT rot: HTHHTTTH flip: 01234567 => HHHTTHTT\n", + " 198: HHHTTHTT rot: HTTHHHTT flip: 0 2 4 6 => HHTHHTTT\n", + " 199: HHTHHTTT rot: THHTHHTT flip: 01234567 => HHHTTHTT\n", + " 200: HHHTTHTT rot: HTTHHHTT flip: 012 456 => HHHTTHTT\n", + " 201: HHHTTHTT rot: HHHTTHTT flip: 01234567 => HHTHHTTT\n", + " 202: HHTHHTTT rot: HTHHTTTH flip: 0 2 4 6 => HHTHHTTT\n", + " 203: HHTHHTTT rot: TTTHHTHH flip: 01234567 => HHHTTHTT\n", + " 204: HHHTTHTT rot: TTHTTHHH flip: 01 45 => HHHHHTHT\n", + " 205: HHHHHTHT rot: HHHHHTHT flip: 01234567 => HTHTTTTT\n", + " 206: HTHTTTTT rot: TTHTHTTT flip: 0 2 4 6 => HTHTTTTT\n", + " 207: HTHTTTTT rot: TTTHTHTT flip: 01234567 => HHHHHTHT\n", + " 208: HHHHHTHT rot: THHHHHTH flip: 0123 => HHTHHTTT\n", + " 209: HHTHHTTT rot: HTTTHHTH flip: 01234567 => HHHTTHTT\n", + " 210: HHHTTHTT rot: TTHHHTTH flip: 0 2 4 6 => HHHTTHTT\n", + " 211: HHHTTHTT rot: HTTHHHTT flip: 01234567 => HHTHHTTT\n", + " 212: HHTHHTTT rot: TTTHHTHH flip: 01 45 => HHHHHTHT\n", + " 213: HHHHHTHT rot: HHHHHTHT flip: 01234567 => HTHTTTTT\n", + " 214: HTHTTTTT rot: THTHTTTT flip: 0 2 4 6 => HHHHHTHT\n", + " 215: HHHHHTHT rot: THTHHHHH flip: 01234567 => HTHTTTTT\n", + " 216: HTHTTTTT rot: HTTTTTHT flip: 012 456 => HHTHHTTT\n", + " 217: HHTHHTTT rot: THHTTTHH flip: 01234567 => HHHTTHTT\n", + " 218: HHHTTHTT rot: THTTHHHT flip: 0 2 4 6 => HHHTTHTT\n", + " 219: HHHTTHTT rot: TTHTTHHH flip: 01234567 => HHTHHTTT\n", + " 220: HHTHHTTT rot: THHTHHTT flip: 01 45 => HTHTTTTT\n", + " 221: HTHTTTTT rot: TTHTHTTT flip: 01234567 => HHHHHTHT\n", + " 222: HHHHHTHT rot: HHHTHTHH flip: 0 2 4 6 => HTHTTTTT\n", + " 223: HTHTTTTT rot: TTTTHTHT flip: 01234567 => HHHHHTHT\n", + " 224: HHHHHTHT rot: THTHHHHH flip: 01234 6 => HHTHTTHT\n", + " 225: HHTHTTHT rot: HTHTTHTH flip: 01234567 => HHTHTTHT\n", + " 226: HHTHTTHT rot: HTTHTHHT flip: 0 2 4 6 => HHHHTTTT\n", + " 227: HHHHTTTT rot: HHTTTTHH flip: 01234567 => HHHHTTTT\n", + " 228: HHHHTTTT rot: TTHHHHTT flip: 01 45 => HHHHTTTT\n", + " 229: HHHHTTTT rot: TTHHHHTT flip: 01234567 => HHHHTTTT\n", + " 230: HHHHTTTT rot: TTHHHHTT flip: 0 2 4 6 => HHTHTTHT\n", + " 231: HHTHTTHT rot: HHTHTTHT flip: 01234567 => HHTHTTHT\n", + " 232: HHTHTTHT rot: HHTHTTHT flip: 012 456 => HHHHTTTT\n", + " 233: HHHHTTTT rot: TTHHHHTT flip: 01234567 => HHHHTTTT\n", + " 234: HHHHTTTT rot: TTHHHHTT flip: 0 2 4 6 => HHTHTTHT\n", + " 235: HHTHTTHT rot: TTHTHHTH flip: 01234567 => HHTHTTHT\n", + " 236: HHTHTTHT rot: THTHHTHT flip: 01 45 => HHTHTTHT\n", + " 237: HHTHTTHT rot: THTHHTHT flip: 01234567 => HHTHTTHT\n", + " 238: HHTHTTHT rot: TTHTHHTH flip: 0 2 4 6 => HHHHTTTT\n", + " 239: HHHHTTTT rot: TTTHHHHT flip: 01234567 => HHHHTTTT\n", + " 240: HHHHTTTT rot: TTTHHHHT flip: 0123 => HHHTHHHT\n", + " 241: HHHTHHHT rot: HHHTHHHT flip: 01234567 => HTTTHTTT\n", + " 242: HTTTHTTT rot: TTHTTTHT flip: 0 2 4 6 => HTTTHTTT\n", + " 243: HTTTHTTT rot: HTTTHTTT flip: 01234567 => HHHTHHHT\n", + " 244: HHHTHHHT rot: HHTHHHTH flip: 01 45 => HTTTHTTT\n", + " 245: HTTTHTTT rot: TTHTTTHT flip: 01234567 => HHHTHHHT\n", + " 246: HHHTHHHT rot: HHHTHHHT flip: 0 2 4 6 => HTTTHTTT\n", + " 247: HTTTHTTT rot: THTTTHTT flip: 01234567 => HHHTHHHT\n", + " 248: HHHTHHHT rot: HHTHHHTH flip: 012 456 => HHTTHHTT\n", + " 249: HHTTHHTT rot: HHTTHHTT flip: 01234567 => HHTTHHTT\n", + " 250: HHTTHHTT rot: HHTTHHTT flip: 0 2 4 6 => HHTTHHTT\n", + " 251: HHTTHHTT rot: HHTTHHTT flip: 01234567 => HHTTHHTT\n", + " 252: HHTTHHTT rot: THHTTHHT flip: 01 45 => HTHTHTHT\n", + " 253: HTHTHTHT rot: HTHTHTHT flip: 01234567 => HTHTHTHT\n", + " 254: HTHTHTHT rot: HTHTHTHT flip: 0 2 4 6 => TTTTTTTT\n", + " 255: TTTTTTTT rot: TTTTTTTT flip: 01234567 => HHHHHHHH\n" + ] + }, { "data": { "text/plain": [ - "[{0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 3},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 2, 4, 5, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 1, 4, 5},\n", - " {0, 1, 2, 3, 4, 5, 6, 7},\n", - " {0, 2, 4, 6},\n", - " {0, 1, 2, 3, 4, 5, 6, 7}]" + "'HHHHHHHH'" ] }, "execution_count": 26, @@ -1163,7 +1207,7 @@ } ], "source": [ - "solution8" + "play('HTTHTTHT', strategy, True)" ] } ], @@ -1183,7 +1227,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.0" + "version": "3.5.3" } }, "nbformat": 4, diff --git a/ipynb/Countdown.ipynb b/ipynb/Countdown.ipynb index bfb69cf..284a596 100644 --- a/ipynb/Countdown.ipynb +++ b/ipynb/Countdown.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "

Peter Norvig
5 January 2016
" + "Peter Norvig
5 January 2016
revised 18 May 2018
" ] }, { @@ -17,22 +17,22 @@ } }, "source": [ - "# Countdown to 2016\n", + "# Four 4s, Five 5s, and Countdown to 2016\n", "\n", - "In 2016 Alex Bellos [posed](http://www.theguardian.com/science/2016/jan/04/can-you-solve-it-complete-the-equation-10-9-8-7-6-5-4-3-2-1-2016) this New Year's puzzle:\n", + "On January 1, 2016 Alex Bellos [posed](http://www.theguardian.com/science/2016/jan/04/can-you-solve-it-complete-the-equation-10-9-8-7-6-5-4-3-2-1-2016) this New Year's puzzle:\n", "\n", "\n", - "> Fill in the blanks so that this equation makes arithmetical sense:\n", + ">Fill in the blanks so that this equation makes arithmetical sense:\n", "\n", - "> `10 _ 9 _ 8 _ 7 _ 6 _ 5 _ 4 _ 3 _ 2 _ 1 = 2016`\n", + "> 10 ␣ 9 ␣ 8 ␣ 7 ␣ 6 ␣ 5 ␣ 4 ␣ 3 ␣ 2 ␣ 1 = 2016\n", "\n", "> You are allowed to use *only* the four basic arithmetical operations: +, -, ×, ÷. But brackets (parentheses) can be used wherever needed. So, for example, the solution could begin\n", "\n", - "> `(10 - 9) / (8` ...\n", + "> `(10 + 9) * (8` ...\n", "\n", "> or\n", "\n", - "> `10 + (9 - 8)` ...\n", + "> `10 + (9 * 8)` ...\n", "\n", "Let's see if we can solve this puzzle, and some of the related ones from Alex's [first](http://www.theguardian.com/science/2016/jan/04/can-you-solve-it-complete-the-equation-10-9-8-7-6-5-4-3-2-1-2016) and [second](http://www.theguardian.com/science/2016/jan/04/did-you-solve-it-complete-the-equation-10-9-8-7-6-5-4-3-2-1-2016) post. We'll start with a simpler version of the puzzle." ] @@ -47,9 +47,9 @@ } }, "source": [ - "# Four Operators, No Brackets\n", + "# Four Operations, No Brackets\n", "\n", - "Suppose for the moment we are not allowed to use brackets. Then there are nine blanks, each of which can be filled by one of four operators, so the total number of possible expressions is:" + "Suppose for the moment we are not allowed to use brackets. Then there are nine blanks, each of which can be filled by one of four operators, so there are 94 = 262,144 possibilities, few enough that we can enumerate them all, using `itertools.product` to get sequences of operators, and then `str.format` to plug them into blanks, and then `eval` to evaluate the string:" ] }, { @@ -66,7 +66,7 @@ { "data": { "text/plain": [ - "262144" + "('+', '+', '+', '+', '+', '+', '+', '+', '+')" ] }, "execution_count": 1, @@ -75,37 +75,22 @@ } ], "source": [ - "4 ** 9" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "The function `itertools.product` can enumerate all the ways of filling 9 blanks with one of the four operators:" + "import itertools\n", + "from functools import lru_cache # Used later\n", + "\n", + "ops = next(itertools.product(('+', '-', '*', '/'), repeat=9))\n", + "ops" ] }, { "cell_type": "code", "execution_count": 2, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "262144" + "'10+9+8+7+6+5+4+3+2+1'" ] }, "execution_count": 2, @@ -114,41 +99,18 @@ } ], "source": [ - "import itertools\n", - "\n", - "operators = ('+', '-', '*', '/')\n", - " \n", - "len(set(itertools.product(operators, repeat=9)))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "So we can fill in the equation with each possible sequence of operations, and evaluate each string to see if it equals 2016. But we need to catch errors such as dividing by zero, so we'll define a wrapper function, `evaluate`, to do the `eval`:" + "'10{}9{}8{}7{}6{}5{}4{}3{}2{}1'.format(*ops)" ] }, { "cell_type": "code", "execution_count": 3, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "55" ] }, "execution_count": 3, @@ -156,6 +118,28 @@ "output_type": "execute_result" } ], + "source": [ + "eval(_)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We need to catch errors such as dividing by zero, so I'll define a wrapper function, `evaluate`, to do that, and I'll define `countdown_no_brackets` to put the pieces together:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [], "source": [ "def evaluate(exp):\n", " \"eval exp, or return None if there is an arithmetic error.\"\n", @@ -164,13 +148,31 @@ " except ArithmeticError:\n", " return None\n", "\n", - "def solve_no_brackets(operators, target=2016):\n", + "def countdown_no_brackets(target, operators=('+', '-', '*', '/')):\n", " \"All solutions to the countdown puzzle (with no brackets).\"\n", " exps = ('10{}9{}8{}7{}6{}5{}4{}3{}2{}1'.format(*ops)\n", " for ops in itertools.product(operators, repeat=9))\n", - " return [exp for exp in exps if evaluate(exp) == target]\n", - "\n", - "solve_no_brackets(operators)" + " return [exp for exp in exps if evaluate(exp) == target]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "countdown_no_brackets(2016)" ] }, { @@ -183,12 +185,12 @@ } }, "source": [ - "Too bad; we did all that work and didn't find a solution. What years *can* we find solutions for? Let's modify `solve_no_brackets` to take a collection of target years rather than a single one, and return a dict of the form `{year: 'expression'}` for each expression that evaluates to one of the target years:" + "Too bad; we did all that work and didn't find a solution. What years *can* we find solutions for? I'll modify `countdown_no_brackets` to take a collection of target years rather than a single one, and return a dict of the form `{year: 'expression'}` for each expression that evaluates to one of the target years. I'll also generalize it to allow any format string, not just the countdown string." ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": { "button": false, "new_sheet": false, @@ -211,19 +213,20 @@ " 2019: '10*9*8*7/6/5*4*3+2+1'}" ] }, - "execution_count": 4, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "def solve_no_brackets(operators, targets):\n", + "def countdown_no_brackets(targets, operators=('+', '-', '*', '/'), \n", + " fmt='10{}9{}8{}7{}6{}5{}4{}3{}2{}1'):\n", " \"All solutions to the countdown puzzle (with no brackets).\"\n", - " exps = ('10{}9{}8{}7{}6{}5{}4{}3{}2{}1'.format(*ops)\n", - " for ops in itertools.product(operators, repeat=9))\n", + " exps = (fmt.format(*ops)\n", + " for ops in itertools.product(operators, repeat=fmt.count('{}')))\n", " return {int(evaluate(exp)): exp for exp in exps if evaluate(exp) in targets}\n", "\n", - "solve_no_brackets(operators, range(1900, 2100))" + "countdown_no_brackets(range(1900, 2100))" ] }, { @@ -249,25 +252,27 @@ } }, "source": [ - "# Four Operators, With Brackets\n", + "# Four Operations, With Brackets\n", "\n", - "Now let's return to the original puzzle, with the brackets. How many ways are there of bracketing an expression with 9 binary operators? I happen to remember that this is given by the [Catalan numbers](https://en.wikipedia.org/wiki/Catalan_number), and we can [look it up](http://www.wolframalpha.com/input/?i=9th+catalan+number) to find that there are 4862 diffferent bracketing. If we enumerated and evaluated all of them, it would take about 4862 times longer than doing a single `solve_no_brackets`, which took about 6 seconds, so the estimated time would be about 8 hours. I'm impatient, so I'd like a faster approach. \n", + "What is the problem I want to solve? I want to know if I can create an expression whose value is 2016. But to get there I'll solve a more general problem: given a sequence of numbers, like `(10, 9, 8)`, what expressions can I make with them?\n", + "I'll define `expressions(numbers)` to return a dict of `{value: expression}` \n", + "for all expressions (strings) whose numeric value is `value`, and can be made from `numbers`, for example:\n", "\n", - "I'll use the idea of [dynamic programming](https://en.wikipedia.org/wiki/Dynamic_programming): break the problem down into simpler subparts, and compute an answer for each subpart, and store intermediate results in a table so we don't need to re-compute them when we need them again.\n", + " expressions((10,)) ⇒ {10: '10'}\n", + " expressions((9, 8)) ⇒ {1: '(9-8)', 1.125: '(9/8)', 17: '(9+8)', 72: '(9*8)'}\n", "\n", - "How do we break the problem into parts? In general, any expression must consist of an operator with two operands (which might in turn be complex subexpressions). For example, a complete countdown expression might be of the form\n", + "I'll use the idea of [dynamic programming](https://en.wikipedia.org/wiki/Dynamic_programming): break the problem down into simpler subparts, compute an answer for each subpart, and remember intermediate results so we don't need to re-compute them later. How do we break the problem into parts? `expressions((10, 9, 8))` should consist of all the ways of splitting `(10, 9, 8)` into two parts, finding all the expressions that can be made with each part, and combining pairs of expressions with any of the four operators:\n", "\n", - " (10 ... 8) + (7 ... 1)\n", - " \n", - "where `(10 ... 8)` means some expression that starts with 10 and ends with 8. Of course we need not use `'+'` as the operator, and we need not split after the 8; we could use any of the four operators and split anywhere. Let's start by defining `c10` as the tuple of integers forming the countdown from 10 to 1, and the function `splits` to split a tuple in all ways: " + " expressions((10, 9, 8)) ⇒ {11: '(10+(9-8))', 27: '(10+(9+8))', 720: '(10*(9*8))', ...}\n", + "\n", + "First the function `splits`:" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": { "button": false, - "collapsed": true, "new_sheet": false, "run_control": { "read_only": false @@ -277,15 +282,15 @@ "source": [ "c10 = (10, 9, 8, 7, 6, 5, 4, 3, 2, 1)\n", "\n", - "def splits(items):\n", - " \"Split sequence of items into two non-empty parts, in all ways.\"\n", - " return [(items[:i], items[i:]) \n", - " for i in range(1, len(items))]" + "def splits(sequence):\n", + " \"Split sequence into two non-empty parts, in all ways.\"\n", + " return [(sequence[:i], sequence[i:]) \n", + " for i in range(1, len(sequence))]" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": { "button": false, "new_sheet": false, @@ -308,7 +313,7 @@ " ((10, 9, 8, 7, 6, 5, 4, 3, 2), (1,))]" ] }, - "execution_count": 6, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -327,70 +332,34 @@ } }, "source": [ - "Now what I would like to do is build up a table that says, for every subsequence of the numbers, what are the expressions we can make with those numbers, and what do they evaluate to? We'll call the table `EXPS`. For example, with the subsequence `(10, 9, 8)`, we would have:\n", - "\n", - " EXPS[(10, 9, 8)] = {\n", - " 27: '((10+9)+8)',\n", - " 8: '((10-9)*8)', \n", - " -7: '(10-(9+8))', \n", - " ...}\n", - " \n", - "We'll do the same for every other subsequence, for example:\n", - "\n", - " EXPS[(7, 6, 5, 4, 3, 2, 1)] = {\n", - " 1: '((((7/((6/5)-4))+3)*2)*1)',\n", - " 2: '((((7/((6/5)-4))+3)*2)+1)',\n", - " 3.5: '((((7/((6/5)-4))+3)+2)+1)',\n", - " 4: '((7-((6/5)*((4/3)+2)))+1)',\n", - " ...}\n", - " \n", - "Once we have the tables for these two subsequences, we can put them together to get the table for the complete `countdown(10)` by considering all ways of taking a value from the first table, then one of the four operators, then a value from the second table. For example, taking the first entry from each table, and the operator `'+'`, we would have:\n", - "\n", - " EXPS[(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)] = { \n", - " 28: '(((10+9)+8)+((((7/((6/5)-4))+3)*2)*1))',\n", - " ...}\n", - "\n", - "\n", - "I can implement `EXPS` as a defaultdict of dicts, and define `expressions(numbers)` to fill in `EXPS` entries for `numbers` and all sub-sequences of `numbers`. Within `expressions`, note that `Lnums` and `Rnums` are sequences of numbers, such as `(10, 9, 8)` and `(7, 6)`. `L` and `R` are numeric values, such as `27` and `1`. And `Lexp` and `Rexp` are strings, such as `\"((10+9)+8)\"` and `\"(7-6)\"`. Rather than catching division-by-zero errors, we just avoid the division when the denominator is 0." + "Now the function `expressions`:" ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "button": false, - "collapsed": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, + "execution_count": 9, + "metadata": {}, "outputs": [], "source": [ - "from collections import defaultdict, Counter\n", - "\n", - "EXPS = defaultdict(dict) # e.g., EXPS[(10, 9, 8)][27] == '((10+9)+8)'\n", - "\n", - "def expressions(numbers):\n", - " \"Fill EXPS table for numbers, and all sub-sequences of numbers. Return EXPS[numbers]\"\n", - " if numbers in EXPS: # Already did the work\n", - " pass\n", - " elif len(numbers) == 1: # Only one way to make an expression out of a single number\n", - " expr(numbers, numbers[0], str(numbers[0]))\n", - " else: # Split in all ways; fill tables for left and right; combine tables in all ways\n", + "@lru_cache()\n", + "def expressions(numbers: tuple) -> dict:\n", + " \"Return {value: expr} for all expressions that can be made from numbers.\"\n", + " if len(numbers) == 1: \n", + " return {numbers[0]: str(numbers[0])}\n", + " else: \n", + " result = {}\n", " for (Lnums, Rnums) in splits(numbers):\n", - " for (L, R) in itertools.product(expressions(Lnums), expressions(Rnums)):\n", - " Lexp, Rexp = '(' + EXPS[Lnums][L], EXPS[Rnums][R] + ')'\n", - " expr(numbers, L * R, Lexp + '*' + Rexp)\n", - " expr(numbers, L - R, Lexp + '-' + Rexp)\n", - " expr(numbers, L + R, Lexp + '+' + Rexp)\n", + " for (L, R) in pairs(expressions(Lnums), expressions(Rnums)):\n", + " Lexp = '(' + expressions(Lnums)[L]\n", + " Rexp = expressions(Rnums)[R] + ')'\n", " if R != 0: \n", - " expr(numbers, L / R, Lexp + '/' + Rexp)\n", - " return EXPS[numbers]\n", - "\n", - "def expr(numbers, value, exp): \n", - " \"Record exp as an expression with the given value, covering the sequence of numbers.\"\n", - " EXPS[numbers][value] = exp" + " result[L / R] = Lexp + '/' + Rexp\n", + " result[L * R] = Lexp + '*' + Rexp\n", + " result[L - R] = Lexp + '-' + Rexp\n", + " result[L + R] = Lexp + '+' + Rexp\n", + " return result\n", + " \n", + "def pairs(left, right): return ((L, R) for L in left for R in right)" ] }, { @@ -403,12 +372,73 @@ } }, "source": [ + "For example, at one point in a call to `expressions((10, 9, 8))` we would have:\n", + "\n", + " Lnums, Rnums = (10), (9, 8)\n", + " L, R = 10, 1\n", + " Lexp, Rexp = '(10', '(9-8))'\n", + "\n", + "This would lead to us adding the following four entries to `result`:\n", + "\n", + " result[10] = '(10*(9-8))'\n", + " result[9] = '(10-(9-8))'\n", + " result[11] = '(10+(9-8))'\n", + " result[10] = '(10/(9-8))'\n", + " \n", + "The decorator `@lru_cache` takes care of storing the intermediate results. Rather than catching errors, we just avoid division by 0.\n", + "\n", "Let's give it a try:" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{10: '10'}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "expressions((10,))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: '(9-8)', 1.125: '(9/8)', 17: '(9+8)', 72: '(9*8)'}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "expressions((9, 8))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, "metadata": { "button": false, "new_sheet": false, @@ -432,7 +462,7 @@ " 8.88888888888889: '((10/9)*8)',\n", " 9: '((10-9)+8)',\n", " 9.11111111111111: '((10/9)+8)',\n", - " 10: '(10/(9-8))',\n", + " 10.0: '(10*(9-8))',\n", " 11: '((10+9)-8)',\n", " 11.125: '(10+(9/8))',\n", " 11.25: '((10*9)/8)',\n", @@ -444,7 +474,7 @@ " 720: '((10*9)*8)'}" ] }, - "execution_count": 8, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -453,32 +483,6 @@ "expressions((10, 9, 8))" ] }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'((10+9)+8)'" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "EXPS[(10, 9, 8)][27]" - ] - }, { "cell_type": "markdown", "metadata": { @@ -496,7 +500,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": { "button": false, "new_sheet": false, @@ -509,8 +513,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 29.5 s, sys: 698 ms, total: 30.2 s\n", - "Wall time: 30.2 s\n" + "CPU times: user 28.3 s, sys: 728 ms, total: 29 s\n", + "Wall time: 29.2 s\n" ] }, { @@ -519,7 +523,7 @@ "'(((((((10+((9*8)*7))-6)-5)*4)+3)+2)-1)'" ] }, - "execution_count": 10, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -538,14 +542,401 @@ } }, "source": [ - "We have an answer! And in a lot less than 8 hours, thanks to dynamic programming! \n", - "\n", - "Removing unnecessary brackets, this equation is equivalent to:" + "We have an answer! And in seconds, not hours, thanks to dynamic programming! Here are solutions for nearby years:" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{2010: '((((10*((9+((8+7)*6))+(5/4)))+3)*2)-1)',\n", + " 2011: '((((((10+9)*8)+7)*(6+(5*(4/3))))-2)-1)',\n", + " 2012: '((((((10+9)*8)+7)*(6+(5*(4/3))))-2)*1)',\n", + " 2013: '((((((10+9)*8)+7)*(6+(5*(4/3))))-2)+1)',\n", + " 2014: '((((10-(9*8))*(7-(6*((5+4)+3))))/2)-1)',\n", + " 2015: '((((((((10*9)+8)-7)*(6+5))+4)+3)*2)-1)',\n", + " 2016: '(((((((10+((9*8)*7))-6)-5)*4)+3)+2)-1)',\n", + " 2017: '(((((((10+((9*8)*7))-6)-5)*4)+3)+2)*1)',\n", + " 2018: '(((((((10+((9*8)*7))-6)-5)*4)+3)+2)+1)',\n", + " 2019: '(((((((((10*9)*8)*7)/6)/5)*4)*3)+2)+1)',\n", + " 2020: '((((10+((((9*8)*7)*(6-5))*4))-3)-2)-1)',\n", + " 2021: '((((10+((((9*8)*7)*(6-5))*4))-3)-2)*1)',\n", + " 2022: '((((10+((((9*8)*7)*(6-5))*4))-3)-2)+1)',\n", + " 2023: '(((((10*9)+8)*((7*6)-(5/(4+3))))/2)*1)',\n", + " 2024: '(((((10*9)+8)*((7*6)-(5/(4+3))))/2)+1)'}" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "{y: expressions(c10)[y] for y in range(2010, 2025)}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Four 4s\n", + "\n", + "Alex Bellos continues with a related puzzle:\n", + " \n", + "> The most famous “fill in the gaps in the equation” puzzle is known as the [four fours](https://en.wikipedia.org/wiki/Four_fours), because every equation is of the form\n", + "\n", + "> 4 ␣ 4 ␣ 4 ␣ 4 = X.\n", + "\n", + ">In the classic form of the puzzle you must find a solution for X = 0 to 9 using just addition, subtraction, multiplication and division.\n", + "\n", + "This puzzle is \"most famous\" because it goes back to a [1914 publication by W. Ball](https://archive.org/details/mathematicalrecr00ball). The \"0 to 9\" solution is easy:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{0: '(((4-4)-4)+4)',\n", + " 1: '(((4/4)-4)+4)',\n", + " 2: '((4/(4+4))*4)',\n", + " 3: '(((4+4)+4)/4)',\n", + " 4: '(((4-4)*4)+4)',\n", + " 5: '(((4*4)+4)/4)',\n", + " 6: '(((4+4)/4)+4)',\n", + " 7: '((4-(4/4))+4)',\n", + " 8: '(((4+4)+4)-4)',\n", + " 9: '(((4/4)+4)+4)'}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "{i: expressions((4, 4, 4, 4))[i] for i in range(10)}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# New Mathematical Operations\n", + "\n", + "Bellos then writes:\n", + " \n", + "> If you want to show off, you can introduce **new mathematical operations** such as powers, square roots, concatenation and decimals, ... or use the factorial symbol, `!`.\n", + "\n", + "Bellos is suggesting the following operations:\n", + "\n", + "- **Powers**: `(4 ^ 4)` is 4 to the fourth power, or 256.\n", + "- **Square roots:** `√4` is the square root of 4, or 2.\n", + "- **Concatenation:** `44` is forty-four.\n", + "- **Decimals:** `4.4` is four and four tenths.\n", + "- **Factorials** `4!` is 4 × 3 × 2 × 1, or 24.\n", + "\n", + "There are some complications to deal with:\n", + "\n", + "- **Irrationals**: `√2` is an irrational number; so we can't do exact rational arithmetic.\n", + "- **Imaginaries**: `√-1` is an imaginary number, but Python gives a `ValueError` for `sqrt(-1)`.\n", + "- **Overflow**: `(10. ^ (9. ^ 8.))`, as a `float`, gives an `OverflowError`.\n", + "- **Out of memory**: [`(10 ^ (9 ^ (8 * 7)))`](http://www.wolframalpha.com/input/?i=10+%5E+9+%5E+56), as an `int`, gives an `OutOfMemoryError` (even if your memory uses every atom on Earth).\n", + "- **Infinite expressions**: We could add an infinite number of square root and/or factorial signs to any expression: `√√√√√√(4!!!!!!!!)`...\n", + "- **Round-off error**: `(49*(1/49))` evaluates to `0.9999999999999999`, not `1`.\n", + "\n", + "We could try to manage this with *symbolic algebra*, perhaps using [SymPy](http://www.sympy.org/en/index.html), but that seems complicated, so instead I will:\n", + "- Arbitrarily limit expressions to two nested unary operations to avoid infinite expressions.\n", + "- Use floats for all computation (to avoid out of memory errors), and accept that there are some approximations. \n", + "\n", + "I'll define the function `do` to do an arithmetic computation, catch any errors, and try to correct round-off errors. The idea is that since my expressions start with integers, any result that is very close to an integer is probably actually that integer. So I'll correct `(49*(1/49))` to be `1.0`. Of course, an expression like `(1+(10^-99))` is also very close to `1.0`, but it should not be rounded off. Instead, I'll try to avoid such expressions by silently dropping any value that is outside the range of 10-10 to 1010 (except of course I will accept an exact 0)." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "from operator import add, sub, mul, truediv\n", + "from math import sqrt, factorial\n", + "from collections import defaultdict, Counter\n", + "\n", + "def do(op, *args): \n", + " \"Return op(*args), trying to correct for roundoff error, or `None` on Error or too big/small.\"\n", + " try:\n", + " val = op(*args)\n", + " return (val if val == 0 else\n", + " None if not (1e-10 < abs(val) < 1e10) else\n", + " round(val) if abs(val - round(val)) < 1e-12 else \n", + " val)\n", + " except (ArithmeticError, ValueError):\n", + " return None" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "assert do(truediv, 12, 4) == 3 and do(truediv, 12, 0) == None\n", + "assert do(mul, 49, do(truediv, 1, 49)) == 1\n", + "assert do(pow, 10, -99) == None" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I'll take this opportunity to refactor `expressions` to have these subfunctions:\n", + "- `digit_expressions(result, numbers)`: returns a dict like {0.44: '.44', 4.4: '4.4', 44.0: '44'}\n", + "- `add_unary_expressions(result)`: adds expressions like `√44` and `4!` and return `result`. \n", + "- `add_binary_expressions(result, numbers)`: adds expressions like `4+√44` and `4^4` and return `result`." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [], + "source": [ + "@lru_cache(1000)\n", + "def expressions(numbers):\n", + " \"Return {value: expr} for all expressions that can be made from numbers.\"\n", + " return add_unary_expressions(add_binary_expressions(digit_expressions(numbers), numbers))\n", + "\n", + "def digit_expressions(numbers) -> dict:\n", + " \"All ways of making numbers from these numbers, in order, and a decimal point.\"\n", + " D = ''.join(map(str, numbers))\n", + " exps = [(D[:i] + '.' + D[i:]).rstrip('.')\n", + " for i in range(len(D) + 1)\n", + " if not (D.startswith('0') and i > 1)]\n", + " return {float(exp): exp for exp in exps}\n", + " \n", + "def add_binary_expressions(result, numbers) -> dict:\n", + " \"Add binary expressions by splitting numbers and combining with an op.\"\n", + " for (Lnums, Rnums) in splits(numbers):\n", + " for (L, R) in pairs(expressions(Lnums), expressions(Rnums)):\n", + " Lexp = '(' + expressions(Lnums)[L]\n", + " Rexp = expressions(Rnums)[R] + ')'\n", + " assign(result, do(truediv, L, R), Lexp + '/' + Rexp)\n", + " assign(result, do(mul, L, R), Lexp + '*' + Rexp)\n", + " assign(result, do(add, L, R), Lexp + '+' + Rexp)\n", + " assign(result, do(sub, L, R), Lexp + '-' + Rexp)\n", + " if -10 <= R <= 10 and (L > 0 or int(R) == R):\n", + " assign(result, do(pow, L, R), Lexp + '^' + Rexp)\n", + " return result\n", + " \n", + "def add_unary_expressions(result, nesting_level=2) -> dict:\n", + " \"Add unary expressions: -v, √v and v!\"\n", + " for _ in range(nesting_level):\n", + " for v in tuple(result):\n", + " exp = result[v]\n", + " if -v not in result:\n", + " assign(result, -v, '-' + exp)\n", + " if 0 < v <= 100 and 120 * v == round(120 * v): \n", + " assign(result, sqrt(v), '√' + exp)\n", + " if 3 <= v <= 6 and v == int(v):\n", + " assign(result, factorial(v), exp + '!')\n", + " return result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function `assign` will silently drop expressions whose value is `None`, and if two expressions have the same value, `assign` keeps the one with the lower \"weight\"—a measure of the characters in the expression. This shows simpler expressions in favor of complex ones: for four 4s, the entry for `0` will be `44-44`, not something like `-√((-√4*--4)*(-√4--√4))`." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "def assign(result, value, exp): \n", + " \"Assign result[value] = exp, unless we already have a lighter exp, or value is too extreme.\"\n", + " if (value is not None \n", + " and (value not in result or weight(exp) < weight(result[value]))): \n", + " result[value] = exp\n", + " \n", + "PENALTIES = defaultdict(int, {'√':7, '!':5, '.':1, '^':3, '/':1, '-':1})\n", + " \n", + "def weight(exp) -> int: return len(exp) + sum(PENALTIES[c] for c in exp)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "I'll define a function to create a table of consecutive integers (starting at 0) that can be made by a sequence of numbers:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [], + "source": [ + "def show(numbers, clear=True):\n", + " \"Print a table of expressions for all consecutive integers i from 0 up to the first unmakeable integer.\"\n", + " if clear: expressions.cache_clear() # To free up memory\n", + " print('{:,} entries for {}\\n'.format(len(expressions(numbers)), numbers))\n", + " for i in itertools.count(0): # All integers from 0\n", + " if i not in expressions(numbers):\n", + " return i\n", + " print('{:4} = {}'.format(i, unbracket(expressions(numbers)[i])))\n", + " \n", + "def unbracket(exp):\n", + " \"Strip outer parens from exp, if they are there\"\n", + " return (exp[1:-1] if exp.startswith('(') and exp.endswith(')') else exp)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "705,959 entries for (4, 4, 4, 4)\n", + "\n", + " 0 = 44-44\n", + " 1 = 44/44\n", + " 2 = 4*(4/(4+4))\n", + " 3 = (4+(4+4))/4\n", + " 4 = 4+(4*(4-4))\n", + " 5 = (4+(4*4))/4\n", + " 6 = 4+((4+4)/4)\n", + " 7 = (44/4)-4\n", + " 8 = 4+(4+(4-4))\n", + " 9 = 4+(4+(4/4))\n", + " 10 = 44/4.4\n", + " 11 = (4/.4)+(4/4)\n", + " 12 = (4+44)/4\n", + " 13 = 4!-(44/4)\n", + " 14 = (4+(.4*4))/.4\n", + " 15 = 4+(44/4)\n", + " 16 = .4*(44-4)\n", + " 17 = (4*4)+(4/4)\n", + " 18 = .4+(.4*44)\n", + " 19 = (4+(4-.4))/.4\n", + " 20 = 4*(4+(4/4))\n", + " 21 = (4+4.4)/.4\n", + " 22 = √4*(44/4)\n", + " 23 = ((4!*4)-4)/4\n", + " 24 = 4+(4+(4*4))\n", + " 25 = (4+(4!*4))/4\n", + " 26 = (4/.4)+(4*4)\n", + " 27 = 4!+(4-(4/4))\n", + " 28 = 44-(4*4)\n", + " 29 = 4+(4/(.4*.4))\n", + " 30 = (4+(4+4))/.4\n", + " 31 = 4!+((4!+4)/4)\n", + " 32 = (4*4)+(4*4)\n", + " 33 = 4!+((4-.4)/.4)\n", + " 34 = 44-(4/.4)\n", + " 35 = 4!+(44/4)\n", + " 36 = 44-(4+4)\n", + " 37 = ((.4+4!)/.4)-4!\n", + " 38 = 44-(4!/4)\n", + " 39 = ((4*4)-.4)/.4\n", + " 40 = 44-√(4*4)\n", + " 41 = (.4+(4*4))/.4\n", + " 42 = √4+(44-4)\n", + " 43 = 44-(4/4)\n", + " 44 = 4+(44-4)\n", + " 45 = (4/4)+44\n", + " 46 = 4+(44-√4)\n", + " 47 = 4!+(4!-(4/4))\n", + " 48 = 4*(4+(4+4))\n", + " 49 = (√4/.4)+44\n", + " 50 = (4+(4*4))/.4\n", + " 51 = (.4+(4!-4))/.4\n", + " 52 = 4+(4+44)\n", + " 53 = 4!+(4!+(√4/.4))\n", + " 54 = (4/.4)+44\n", + " 55 = 44/(.4+.4)\n", + " 56 = 4*(4+(4/.4))\n", + " 57 = ((.4+4!)/.4)-4\n", + " 58 = ((4^4)-4!)/4\n", + " 59 = (4!/.4)-(4/4)\n", + " 60 = (4*4)+44\n", + " 61 = (4/4)+(4!/.4)\n", + " 62 = (4*(4*4))-√4\n", + " 63 = ((4^4)-4)/4\n", + " 64 = (4+4)*(4+4)\n", + " 65 = (4+(4^4))/4\n", + " 66 = √4+(4*(4*4))\n", + " 67 = √4+((√4+4!)/.4)\n", + " 68 = 4+(4*(4*4))\n", + " 69 = (4!+(4-.4))/.4\n", + " 70 = (4!+(4^4))/4\n", + " 71 = (4!+4.4)/.4\n", + " 72 = 4!+(4+44)\n", + "CPU times: user 11.2 s, sys: 60.4 ms, total: 11.3 s\n", + "Wall time: 11.3 s\n" + ] + }, + { + "data": { + "text/plain": [ + "73" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time show((4, 4, 4, 4))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "We can also solve the \"2016 with four fours\" puzzle:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, "metadata": { "button": false, "new_sheet": false, @@ -557,57 +948,486 @@ { "data": { "text/plain": [ - "2016" + "'(4!*(4!+(4!/.4)))'" ] }, - "execution_count": 11, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(10 + 9 * 8 * 7 - 6 - 5) * 4 + 3 + 2 - 1" + "expressions((4, 4, 4, 4))[2016]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "In a [separate video](https://www.youtube.com/embed/Noo4lN-vSvw), Alex Bellos shows how to form **every** integer from 0 to infinity using four 4s, if the square root and `log` functions are allowed. The solution comes from Paul Dirac (although [Dirac originally developed it](https://nebusresearch.wordpress.com/2014/04/18/how-dirac-made-every-number/) for the \"four 2s\" problem).\n", + "\n", + "Donald Knuth has [conjectured](https://www.tandfonline.com/doi/abs/10.1080/0025570X.1964.11975546) that with floor, square root and factorial, you can make any positive integer with just **one** 4.\n", + "\n", + "Below are some popular variants:\n", + "\n", + "# Four 2s" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "109,747 entries for (2, 2, 2, 2)\n", + "\n", + " 0 = 22-22\n", + " 1 = 22/22\n", + " 2 = 2+(2*(2-2))\n", + " 3 = (2+(2*2))/2\n", + " 4 = .2*(22-2)\n", + " 5 = 2+(2+(2/2))\n", + " 6 = 2*(2+(2/2))\n", + " 7 = 2+(2/(.2*2))\n", + " 8 = 2+(2+(2*2))\n", + " 9 = (22/2)-2\n", + " 10 = 22/2.2\n", + " 11 = (2/2)+(2/.2)\n", + " 12 = (2+22)/2\n", + " 13 = 2+(22/2)\n", + " 14 = 2+(2+(2/.2))\n", + " 15 = (2+(2/2))/.2\n", + " 16 = 2*(2*(2*2))\n", + " 17 = 22-(√.2^-2)\n", + " 18 = 22-(2*2)\n", + " 19 = (2+(2-.2))/.2\n", + " 20 = (2/.2)+(2/.2)\n", + " 21 = 22-(2/2)\n", + " 22 = 2+(22-2)\n", + " 23 = (2/2)+22\n", + " 24 = 2*(2+(2/.2))\n", + " 25 = 2/(.2*(.2*2))\n", + " 26 = 2+(2+22)\n", + " 27 = (√.2^-2)+22\n", + " 28 = 2+(2+(2*2)!)\n", + " 29 = 2+(2+(.2^-2))\n", + " 30 = (2+(2*2))/.2\n", + "CPU times: user 1.78 s, sys: 16.9 ms, total: 1.8 s\n", + "Wall time: 1.8 s\n" + ] + }, + { + "data": { + "text/plain": [ + "31" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time show((2, 2, 2, 2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Here are solutions for nearby years:" + "# Four 9s" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 24, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "539,849 entries for (9, 9, 9, 9)\n", + "\n", + " 0 = 99-99\n", + " 1 = 99/99\n", + " 2 = (99/9)-9\n", + " 3 = (9+(9+9))/9\n", + " 4 = 9-(9/(.9+.9))\n", + " 5 = √9+((9+9)/9)\n", + " 6 = ((9+(9+9))/9)!\n", + " 7 = 9-((9+9)/9)\n", + " 8 = ((9*9)-9)/9\n", + " 9 = 9+(9*(9-9))\n", + " 10 = 99/9.9\n", + " 11 = 9+((9+9)/9)\n", + " 12 = (9+99)/9\n", + " 13 = √9+(9+(9/9))\n", + " 14 = 9+(9/(.9+.9))\n", + " 15 = 9+((9+9)/√9)\n", + " 16 = 9+((9/.9)-√9)\n", + " 17 = 9+(9-(9/9))\n", + " 18 = 99-(9*9)\n", + " 19 = 9+(9+(9/9))\n", + " 20 = 9+(99/9)\n", + " 21 = (9+9.9)/.9\n", + " 22 = √9+(9+(9/.9))\n", + " 23 = √9+((9+9)/.9)\n", + " 24 = (99/√9)-9\n", + " 25 = √9!+(9+(9/.9))\n", + " 26 = (√9*9)-(9/9)\n", + " 27 = 9+(9+√(9*9))\n", + " 28 = 9+(9+(9/.9))\n", + " 29 = 9+((9+9)/.9)\n", + " 30 = (9+(9+9))/.9\n", + " 31 = (.9+(√9*9))/.9\n", + " 32 = (99-√9)/√9\n", + " 33 = √9*(99/9)\n", + " 34 = (√9+99)/√9\n", + " 35 = (√9!+99)/√9\n", + " 36 = 9+(9+(9+9))\n", + " 37 = (√9*9)+(9/.9)\n", + " 38 = √9!*(√9+(√9/.9))\n", + " 39 = 9+(√9*(9/.9))\n", + " 40 = (9+(√9*9))/.9\n", + " 41 = (.9+(√9!*√9!))/.9\n", + " 42 = 9+(99/√9)\n", + " 43 = √9+(√9!*(√9!/.9))\n", + " 44 = (√9!*9)-(9/.9)\n", + " 45 = 9*(9/(.9+.9))\n", + " 46 = (√9!*√9!)+(9/.9)\n", + " 47 = √9*(9+(√9!/.9))\n", + " 48 = √9!*(9-(9/9))\n", + " 49 = 9+(√9!*(√9!/.9))\n", + " 50 = ((√9!*9)-9)/.9\n", + " 51 = 9*(9-(√9/.9))\n", + " 52 = √9!*(9-(√9/9))\n", + " 53 = (√9!*9)-(9/9)\n", + " 54 = 9*((9+9)/√9)\n", + " 55 = 99/(.9+.9)\n", + " 56 = √9!*(9+(√9/9))\n", + " 57 = √9*(9+(9/.9))\n", + " 58 = √9!*(9+(√9!/9))\n", + " 59 = ((√9!*9)-.9)/.9\n", + " 60 = √9*((9+9)/.9)\n", + " 61 = (.9+(√9!*9))/.9\n", + "CPU times: user 7.42 s, sys: 40.3 ms, total: 7.46 s\n", + "Wall time: 7.47 s\n" + ] + }, { "data": { "text/plain": [ - "{2010: '((((10*((9+((8+7)*6))+(5/4)))+3)*2)-1)',\n", - " 2011: '((((((10+9)*8)+7)*(6+(5*(4/3))))-2)-1)',\n", - " 2012: '((((((10+9)*8)+7)*(6+(5*(4/3))))-2)/1)',\n", - " 2013: '((((((10+9)*8)+7)*(6+(5*(4/3))))-2)+1)',\n", - " 2014: '((((10-(9*8))*(7-(6*((5+4)+3))))/2)-1)',\n", - " 2015: '((((((((10*9)+8)-7)*(6+5))+4)+3)*2)-1)',\n", - " 2016: '(((((((10+((9*8)*7))-6)-5)*4)+3)+2)-1)',\n", - " 2017: '(((((((10+((9*8)*7))-6)-5)*4)+3)+2)/1)',\n", - " 2018: '(((((((10+((9*8)*7))-6)-5)*4)+3)+2)+1)',\n", - " 2019: '((((10+9)+((8+7)*(6+((5*4)*3))))*2)+1)',\n", - " 2020: '((((10+((((9*8)*7)/(6-5))*4))-3)-2)-1)',\n", - " 2021: '((((10+((((9*8)*7)/(6-5))*4))-3)-2)/1)',\n", - " 2022: '((((10+((((9*8)*7)/(6-5))*4))-3)-2)+1)',\n", - " 2023: '(((((10+(((9*(8+7))*6)*5))/4)-3)*2)-1)',\n", - " 2024: '(((((10+(((9*(8+7))*6)*5))/4)-3)*2)/1)'}" + "62" ] }, - "execution_count": 12, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "{y: expressions(c10)[y] for y in range(2010, 2025)}" + "%time show((9, 9, 9, 9))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Four 5s" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "202,937 entries for (5, 5, 5, 5)\n", + "\n", + " 0 = 55-55\n", + " 1 = 55/55\n", + " 2 = (5/5)+(5/5)\n", + " 3 = (5+(5+5))/5\n", + " 4 = ((5*5)-5)/5\n", + " 5 = 5+(5*(5-5))\n", + " 6 = (55/5)-5\n", + " 7 = 5+((5+5)/5)\n", + " 8 = 5.5+(.5*5)\n", + " 9 = 5+(5-(5/5))\n", + " 10 = 55/5.5\n", + " 11 = 5.5+5.5\n", + " 12 = (5+55)/5\n", + " 13 = .5+(.5*(5*5))\n", + " 14 = 5+((5-.5)/.5)\n", + " 15 = (5*5)-(5+5)\n", + " 16 = 5+(55/5)\n", + " 17 = 5+(5!/(5+5))\n", + " 18 = (5-.5)/(.5*.5)\n", + " 19 = (5+(5-.5))/.5\n", + " 20 = 5+(5+(5+5))\n", + " 21 = (5+5.5)/.5\n", + " 22 = 55/(.5*5)\n", + " 23 = .5+(5*(5-.5))\n", + " 24 = (5*5)-(5/5)\n", + " 25 = .5*(55-5)\n", + " 26 = (5/5)+(5*5)\n", + " 27 = (.5*55)-.5\n", + " 28 = .5+(.5*55)\n", + " 29 = (5!+(5*5))/5\n", + " 30 = 55-(5*5)\n", + " 31 = 55-(5!/5)\n", + " 32 = ((5+5)/5)^5\n", + " 33 = .5*(5!*.55)\n", + " 34 = 5+(5+(5!/5))\n", + " 35 = 5+(5+(5*5))\n", + " 36 = (5!+(.5*5!))/5\n", + " 37 = (.5^-5)+√(5*5)\n", + " 38 = ((5!/5)-5)/.5\n", + "CPU times: user 3.33 s, sys: 17.6 ms, total: 3.35 s\n", + "Wall time: 3.35 s\n" + ] + }, + { + "data": { + "text/plain": [ + "39" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time show((5, 5, 5, 5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Five 5s " + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7,624,387 entries for (5, 5, 5, 5, 5)\n", + "\n", + " 0 = 5*(55-55)\n", + " 1 = 5^(55-55)\n", + " 2 = 55/(.5*55)\n", + " 3 = .5*((55/5)-5)\n", + " 4 = 5-(55/55)\n", + " 5 = 5*(55/55)\n", + " 6 = 5+(55/55)\n", + " 7 = ((5+55)/5)-5\n", + " 8 = .5*(5+(55/5))\n", + " 9 = (55-(5+5))/5\n", + " 10 = (55/5)-(5/5)\n", + " 11 = 5*(55/(5*5))\n", + " 12 = (5/5)+(55/5)\n", + " 13 = (5+(5+55))/5\n", + " 14 = (5*5)-(55/5)\n", + " 15 = 5+(55/5.5)\n", + " 16 = 5+(5.5+5.5)\n", + " 17 = 5+((5+55)/5)\n", + " 18 = 5.5+(.5*(5*5))\n", + " 19 = (5*5)-(.5+5.5)\n", + " 20 = 55/(5*.55)\n", + " 21 = 5+(5+(55/5))\n", + " 22 = (55+55)/5\n", + " 23 = (5+(55/.5))/5\n", + " 24 = (5+55)/(.5*5)\n", + " 25 = 55-(5+(5*5))\n", + " 26 = 5*(5+(5/(5*5)))\n", + " 27 = 5+(55/(.5*5))\n", + " 28 = .5*(.5+55.5)\n", + " 29 = 5+((5*5)-(5/5))\n", + " 30 = 5*((55/5)-5)\n", + " 31 = .5+(5.5+(5*5))\n", + " 32 = (5+(55/5))/.5\n", + " 33 = .55*(5+55)\n", + " 34 = (5!+(55-5))/5\n", + " 35 = 5+(55-(5*5))\n", + " 36 = (5*5)+(55/5)\n", + " 37 = 5+(((5+5)/5)^5)\n", + " 38 = .5+(5*(5+(.5*5)))\n", + " 39 = ((5*5)-5.5)/.5\n", + " 40 = 55-(5+(5+5))\n", + " 41 = (5!*.55)-(5*5)\n", + " 42 = (5+5.5)/(.5*.5)\n", + " 43 = (.5^-5)+(55/5)\n", + " 44 = 55-(55/5)\n", + " 45 = (5*5!)-555\n", + " 46 = 55+((.5-5)/.5)\n", + " 47 = (5*(5+(5-.5)))-.5\n", + " 48 = .5+(5*(5+(5-.5)))\n", + " 49 = 55-(.5+5.5)\n", + " 50 = 55.5-5.5\n", + " 51 = .5+(55.5-5)\n", + " 52 = 55-(.5+(.5*5))\n", + " 53 = 55-((5+5)/5)\n", + " 54 = ((5*55)-5)/5\n", + " 55 = .5*(55+55)\n", + " 56 = (5+(5*55))/5\n", + " 57 = 55+((5+5)/5)\n", + " 58 = (.5*5)+55.5\n", + " 59 = 5+(55-(5/5))\n", + " 60 = 5*((5+55)/5)\n", + " 61 = 5.5+55.5\n", + " 62 = (.5*(5*(5*5)))-.5\n", + " 63 = .5+(.5*(5*(5*5)))\n", + " 64 = 55+((5-.5)/.5)\n", + " 65 = .5*(5+(5*(5*5)))\n", + " 66 = 55+(55/5)\n", + " 67 = 55+(5!/(5+5))\n", + " 68 = 5.5+(.5*(5+5!))\n", + " 69 = 5+(.5^(-.5-5.5))\n", + " 70 = 5+(5+(5+55))\n", + " 71 = 55+(.5/(.5^5))\n", + " 72 = (.5+5.5)!/(5+5)\n", + " 73 = (5*5)+(5!/(.5*5))\n", + " 74 = (5!/5)+(55-5)\n", + " 75 = 55+((5*5)-5)\n", + " 76 = 5+(5+(5!*.55))\n", + " 77 = 5+(5!*(.5+(.5/5)))\n", + " 78 = 55+((5!-5)/5)\n", + " 79 = (5!+(5*55))/5\n", + " 80 = 5*(5+(55/5))\n", + " 81 = 5+(.5*(5!+(.5^-5)))\n", + " 82 = (.5^-5)+(55-5)\n", + " 83 = (.5*5!)+((5!-5)/5)\n", + " 84 = 5+((5!/5)+55)\n", + " 85 = 5+(55+(5*5))\n", + " 86 = (55/.5)-(5!/5)\n", + " 87 = (555-5!)/5\n", + " 88 = 5*(.55/(.5^5))\n", + " 89 = (5*5)+((.5^-5)/.5)\n", + " 90 = (55-(5+5))/.5\n", + " 91 = (5*5)+(5!*.55)\n", + " 92 = 5+((.5^-5)+55)\n", + " 93 = .5+(5!-(.5*55))\n", + " 94 = 5!-((5/5)+(5*5))\n", + " 95 = (55/.55)-5\n", + " 96 = 5!+((5/5)-(5*5))\n", + " 97 = 5!+((.5^-5)-55)\n", + " 98 = 5!-(55/(.5*5))\n", + " 99 = (55-5.5)/.5\n", + " 100 = 5*(5+(5+(5+5)))\n", + " 101 = (55.5-5)/.5\n", + " 102 = (.5+(5*5))/(.5*.5)\n", + " 103 = 55+(5!/(.5*5))\n", + " 104 = ((55-.5)/.5)-5\n", + " 105 = 55+(55-5)\n", + " 106 = (555/5)-5\n", + " 107 = 5!-(.5+(.5*(5*5)))\n", + " 108 = (55-(5/5))/.5\n", + " 109 = (55/.5)-(5/5)\n", + " 110 = (555-5)/5\n", + " 111 = (5/5)+(55/.5)\n", + " 112 = (5+555)/5\n", + " 113 = .5+(5*(5*(5-.5)))\n", + " 114 = 5+((55-.5)/.5)\n", + " 115 = 5+(55+55)\n", + " 116 = 5+(555/5)\n", + " 117 = 5!-((5+(5+5))/5)\n", + " 118 = ((5*5!)-(5+5))/5\n", + " 119 = 5!-(55/55)\n", + " 120 = 5+(5+(55/.5))\n", + " 121 = (5+55.5)/.5\n", + " 122 = (5*((5*5)-.5))-.5\n", + " 123 = .5+(5*((5*5)-.5))\n", + " 124 = (5*(5*5))-(5/5)\n", + " 125 = .5*(5*(55-5))\n", + " 126 = (5/5)+(5*(5*5))\n", + " 127 = (5*(.5+(5*5)))-.5\n", + " 128 = .5+(5*(.5+(5*5)))\n", + " 129 = (5!-55.5)/.5\n", + " 130 = (5+(5+55))/.5\n", + " 131 = 5!+(5.5+5.5)\n", + " 132 = 5!+((5+55)/5)\n", + " 133 = (5+(5!*5.5))/5\n", + " 134 = (5!/5)+(55/.5)\n", + " 135 = .5*((5*55)-5)\n", + " 136 = 5+(5!+(55/5))\n", + " 137 = (.5*(5*55))-.5\n", + " 138 = .5+(.5*(5*55))\n", + " 139 = ((.5+5.5)!/5)-5\n", + " 140 = .5*(5+(5*55))\n", + " 141 = 5!+((5+5.5)/.5)\n", + " 142 = 5!+(55/(.5*5))\n", + " 143 = ((.5+5.5)!-5)/5\n", + " 144 = ((55/5)-5)!/5\n", + " 145 = (5*(5+(5*5)))-5\n", + " 146 = 5!+((5/5)+(5*5))\n", + " 147 = 5!+((.5*55)-.5)\n", + " 148 = .5+(5!+(.5*55))\n", + " 149 = (5!/5)+(5*(5*5))\n", + " 150 = 5*(55-(5*5))\n", + " 151 = 5!+(55-(5!/5))\n", + " 152 = 5!+(((5+5)/5)^5)\n", + " 153 = 5!+(.5*(5!*.55))\n", + " 154 = 5+(5+(5!+(5!/5)))\n", + " 155 = 5+(5*(5+(5*5)))\n", + " 156 = (5!+(5!*5.5))/5\n", + " 157 = (.5^-5)+(5*(5*5))\n", + " 158 = ((5!/5)+55)/.5\n", + " 159 = (5/(.5^5))-(5/5)\n", + " 160 = (55+(5*5))/.5\n", + " 161 = (5/5)+(5/(.5^5))\n", + " 162 = (5*(.5+(.5^-5)))-.5\n", + " 163 = .5+(5*(.5+(.5^-5)))\n", + " 164 = 5!+(.5*(5!-(.5^-5)))\n", + " 165 = 55+(55/.5)\n", + " 166 = 5!+((5!-5)/(.5*5))\n", + " 167 = 5!+(((5!/.5)-5)/5)\n", + " 168 = (5+(.5*.5))/(.5^5)\n", + " 169 = 5!+(((5*5)-.5)/.5)\n", + " 170 = 5+(5+(5/(.5^5)))\n", + " 171 = (5.5/(.5^5))-5\n", + "CPU times: user 2min 33s, sys: 747 ms, total: 2min 34s\n", + "Wall time: 2min 34s\n" + ] + }, + { + "data": { + "text/plain": [ + "172" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time show((5, 5, 5, 5, 5), False)" ] }, { @@ -624,30 +1444,24 @@ "\n", "Alex Bellos had another challenge: \n", "\n", - "> I was half hoping a computer scientist would let me know exactly how many solutions there are with only the four basic operations. Maybe someone will. \n", + "> I was half hoping a computer scientist would let me know exactly how many solutions [to the Countdown problem] there are with only the four basic operations. Maybe someone will. \n", "\n", "As it stands, my program can't answer that question, because I only keep one expression for each value. \n", "\n", - "Also, I'm not sure what it means to be a distinct solution. For example, are `((10+9)+8)` and `(10+(9+8))` different, or are they same, because they both are equivalent to `(10+9+8)`? Similarly, are `((3-2)-1)` and `(3-(2+1)` different, or the same because they both are equivalent to `(3 + -2 + -1)`? I think the notion of \"distinct solution\" is just inherently ambiguous, and each of these questions could reasonably be answered either way. My choice is to count each of these as distinct: every expression has exactly ten numbers, nine operators, and nine pairs of brackets, and if an expression differs in any character, it is different. But I won't argue with anyone who prefers a different definition of \"distinct solution.\"\n", + "Also, I'm not sure what it means to be a distinct solution. For example, are `((10+9)+8)` and `(10+(9+8))` different, or are they same, because they both are equivalent to `(10+9+8)`? Similarly, are `((3-2)-1)` and `(3-(2+1)` different, or the same because they both are equivalent to `(3 + -2 + -1)`? I think the notion of \"distinct solution\" is just inherently ambiguous. My choice is to count each of these as distinct: every expression has exactly ten numbers, nine operators, and nine pairs of brackets, and if an expression differs in any character, it is different. But I won't argue with anyone who prefers a different definition of \"distinct solution.\"\n", "\n", - "So how can I count expressions? One approach would be to go back to enumerating every equation (all 4862 × 49 = 1.2 bilion of them) and checking which ones equal 2016. That would take about 40 hours with my Python program, but I could get it under 40 minutes in a more efficient language.\n", + "So how can I count expressions? One approach would be to go back to enumerating every equation (all 4862 × 49 = 1.2 bilion of them) and checking which ones equal 2016. That would take about 40 hours with my Python program. Another approach is mimic `expressions`, but to make a table of counts, rather than expression strings. I want:\n", "\n", - "Another approach is to count subexpressions as the table is filled in. We won't enumerate all the expressions, just count them. I'll introduce a second table, `COUNTS`, such that\n", - "\n", - " COUNTS[(10, 9, 8)][27] == 2\n", + " counts[(10, 9, 8)][27] == 2\n", " \n", - "because there are 2 ways to make 27 with the numbers `(10, 9, 8)`, namely, `((10+9)+8)` and `(10+(9+8))`.\n", - "How do we compute the counts? By looking at every split and operator choice that can make the value, and summing up (over all of these) the product of the counts for the two sides. For example, there are 2 ways to make 27 with `(10 ... 8)`, and it turns out there are 3526 ways to make 1 with `(7 ... 1)`. So there are 2 × 3526 = 7052 ways to make 28 with this split by adding 27 and 1. \n", - "\n", - "I'll make `expr` maintain `COUNTS` as well as `EXPS`. And I'll define `clear` to clear out the cache of `COUNTS` and `EXPS`, so that we can fill the tables with our new, improved entries." + "because there are 2 ways to make 27 with the numbers `(10, 9, 8)`, namely, `((10+9)+8)` and `(10+(9+8))`. And in general, if there are `Lcount` ways to make `L` using `Lnums` and `Rcount` ways to make `R` using `Rnums` then there are `Lcount * Rcount` ways of making `L * R` using `Lnums` followed by `Rnums`. So we have:\n" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 27, "metadata": { "button": false, - "collapsed": true, "new_sheet": false, "run_control": { "read_only": false @@ -655,132 +1469,48 @@ }, "outputs": [], "source": [ - "COUNTS = defaultdict(Counter) # e.g., COUNTS[(10, 9, 8)][27] == 2\n", - "\n", - "def expressions(numbers):\n", - " \"Fill EXPS table for numbers, and all sub-sequences of numbers. Return EXPS[numbers]\"\n", - " if numbers in EXPS: # Already did the work\n", - " pass\n", - " elif len(numbers) == 1: # Only one way to make an expression out of a single number\n", - " expr(numbers, numbers[0], str(numbers[0]), 1)\n", - " else: # Split in all ways; fill tables for left and right; combine tables in all ways\n", + "@lru_cache()\n", + "def counts(numbers):\n", + " \"Return a dict of {value: count} for every value that can be made from numbers.\"\n", + " if len(numbers) == 1: # Only one way to make an expression out of a single number\n", + " return Counter(numbers)\n", + " else: \n", + " result = Counter()\n", " for (Lnums, Rnums) in splits(numbers):\n", - " for (L, R) in itertools.product(expressions(Lnums), expressions(Rnums)):\n", - " Lexp, Rexp = '(' + EXPS[Lnums][L], EXPS[Rnums][R] + ')'\n", - " count = COUNTS[Lnums][L] * COUNTS[Rnums][R]\n", - " expr(numbers, L * R, Lexp + '*' + Rexp, count)\n", - " expr(numbers, L - R, Lexp + '-' + Rexp, count)\n", - " expr(numbers, L + R, Lexp + '+' + Rexp, count)\n", - " if R != 0: \n", - " expr(numbers, L / R, Lexp + '/' + Rexp, count)\n", - " return EXPS[numbers]\n", - "\n", - "def expr(numbers, val, exp, count):\n", - " \"Fill EXPS[numbers][val] with exp, and increment COUNTS.\"\n", - " EXPS[numbers][val] = exp\n", - " COUNTS[numbers][val] += count\n", - " \n", - "def clear(): EXPS.clear(); COUNTS.clear()" + " for L in counts(Lnums):\n", + " for R in counts(Rnums):\n", + " count = counts(Lnums)[L] * counts(Rnums)[R]\n", + " result[L + R] += count\n", + " result[L - R] += count\n", + " result[L * R] += count\n", + " if R != 0:\n", + " result[L / R] += count\n", + " return result" ] }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, + "execution_count": 28, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{-62: '(10-(9*8))',\n", - " -7: '((10-9)-8)',\n", - " -6.888888888888889: '((10/9)-8)',\n", - " 0.125: '((10-9)/8)',\n", - " 0.1388888888888889: '((10/9)/8)',\n", - " 0.5882352941176471: '(10/(9+8))',\n", - " 2.375: '((10+9)/8)',\n", - " 8: '((10-9)*8)',\n", - " 8.875: '(10-(9/8))',\n", - " 8.88888888888889: '((10/9)*8)',\n", - " 9: '((10-9)+8)',\n", - " 9.11111111111111: '((10/9)+8)',\n", - " 10: '(10/(9-8))',\n", - " 11: '((10+9)-8)',\n", - " 11.125: '(10+(9/8))',\n", - " 11.25: '((10*9)/8)',\n", - " 27: '((10+9)+8)',\n", - " 82: '((10*9)-8)',\n", - " 98: '((10*9)+8)',\n", - " 152: '((10+9)*8)',\n", - " 170: '(10*(9+8))',\n", - " 720: '((10*9)*8)'}" + "Counter({0: 1, 1.0: 1, 4: 2})" ] }, - "execution_count": 14, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "clear()\n", - "expressions((10, 9, 8))" + "counts((2, 2)) # corresponds to {0: '2-2', 1.0: '2/2', 4: '2+2' or '2*2'}" ] }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Counter({-62: 1,\n", - " -7: 2,\n", - " -6.888888888888889: 1,\n", - " 0.125: 1,\n", - " 0.1388888888888889: 2,\n", - " 0.5882352941176471: 1,\n", - " 2.375: 1,\n", - " 8: 1,\n", - " 8.875: 1,\n", - " 8.88888888888889: 2,\n", - " 9: 2,\n", - " 9.11111111111111: 1,\n", - " 10: 2,\n", - " 11: 2,\n", - " 11.125: 1,\n", - " 11.25: 2,\n", - " 27: 2,\n", - " 82: 2,\n", - " 98: 1,\n", - " 152: 1,\n", - " 170: 1,\n", - " 720: 2})" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "COUNTS[(10, 9, 8)]" - ] - }, - { - "cell_type": "code", - "execution_count": 16, + "execution_count": 29, "metadata": { "button": false, "new_sheet": false, @@ -795,13 +1525,13 @@ "2" ] }, - "execution_count": 16, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "COUNTS[(10, 9, 8)][27]" + "counts((10, 9, 8))[27]" ] }, { @@ -814,63 +1544,12 @@ } }, "source": [ - "Looks good to me. Now let's repeat the computation, this time keeping track of `COUNTS`:" + "Looks good to me. Now let's see if we can answer the question." ] }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 1min 4s, sys: 1.15 s, total: 1min 5s\n", - "Wall time: 1min 6s\n" - ] - }, - { - "data": { - "text/plain": [ - "'(((((((10+((9*8)*7))-6)-5)*4)+3)+2)-1)'" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "clear()\n", - "\n", - "%time expressions(c10)[2016]" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "# The Answer (?)\n", - "\n", - "Now we can read off the answer:" - ] - }, - { - "cell_type": "code", - "execution_count": 18, + "execution_count": 30, "metadata": { "button": false, "new_sheet": false, @@ -885,13 +1564,13 @@ "30066" ] }, - "execution_count": 18, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "COUNTS[c10][2016]" + "counts(c10)[2016]" ] }, { @@ -906,18 +1585,14 @@ "source": [ "This says there are 30,066 distinct expressions for 2016. \n", "\n", - "**But I don't believe it.**\n", + "**But we're forgetting about round-off error.**\n", "\n", - "Why not? Because floating point division can have round-off errors. \n", - "\n", - "# Dealing with Round-off Errors\n", - "\n", - "Consider this:" + "Let's find all the values that are very near to `2016`:" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 31, "metadata": { "button": false, "new_sheet": false, @@ -929,94 +1604,28 @@ { "data": { "text/plain": [ - "2015.9999999999998" + "{2015.999999999997: 15,\n", + " 2015.999999999999: 10,\n", + " 2015.9999999999993: 14,\n", + " 2015.9999999999995: 1930,\n", + " 2015.9999999999998: 5868,\n", + " 2016.0: 30066,\n", + " 2016.0000000000002: 5792,\n", + " 2016.0000000000005: 510,\n", + " 2016.0000000000018: 264,\n", + " 2016.000000000002: 18,\n", + " 2016.0000000000023: 12}" ] }, - "execution_count": 19, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "2015 + 1/3 + 1/3 + 1/3" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "2015 + 1/3 + 1/3 + 1/3 == 2016" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "This means there might be perfectly good expressions that are counted under `2015.9999999999998` (or some similar number) when they should be counted for `2016`. Let's find all the values that are very near to `2016`:" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{2015.999999999997,\n", - " 2015.999999999999,\n", - " 2015.9999999999993,\n", - " 2015.9999999999995,\n", - " 2015.9999999999998,\n", - " 2016,\n", - " 2016.0000000000002,\n", - " 2016.0000000000005,\n", - " 2016.0000000000018,\n", - " 2016.000000000002,\n", - " 2016.0000000000023}" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "epsilon = 10 ** -8\n", - "\n", - "{y for y in expressions(c10)\n", - " if abs(y - 2016) < epsilon}" + "{y: counts(c10)[y] \n", + " for y in counts(c10)\n", + " if abs(y - 2016) < 1e-10}" ] }, { @@ -1030,57 +1639,12 @@ }, "source": [ "I suspect that all of these actually should be exactly 2016. \n", - "\n", - "To be absolutely sure, I could re-do the calculations using exact rational arithmetic, as provided by the `fractions.Fraction` data type. From experience I know that would be an order of magnitude slower, so instead I'll just add up all the counts in the `COUNTS` table that are within epsilon of 2016:" + "To be absolutely sure, I could re-do the calculations using exact rational arithmetic, as provided by the `fractions.Fraction` data type. From experience I know that would be an order of magnitude slower, so instead I'll just add up the counts:" ] }, { "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{2015.999999999997: 15,\n", - " 2015.999999999999: 10,\n", - " 2015.9999999999993: 14,\n", - " 2015.9999999999995: 1930,\n", - " 2015.9999999999998: 5868,\n", - " 2016: 30066,\n", - " 2016.0000000000002: 5792,\n", - " 2016.0000000000005: 510,\n", - " 2016.0000000000018: 264,\n", - " 2016.000000000002: 18,\n", - " 2016.0000000000023: 12}" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "{y: COUNTS[c10][y] for y in expressions(c10)\n", - " if abs(y - 2016) < epsilon}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "# The Answer (!)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -1089,7 +1653,7 @@ "44499" ] }, - "execution_count": 23, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1111,17 +1675,6 @@ "I have more confidence in this answer, 44,499, than in 30,066, but I wouldn't accept it as definitive until it was independently verified and passed an extensive test suite. And of course, if you have a different definition of \"distinct solution,\" you will get a different answer." ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "clear()" - ] - }, { "cell_type": "markdown", "metadata": { @@ -1132,1831 +1685,77 @@ } }, "source": [ - "# Exponentiation, and Four 4s\n", - "\n", - "Now let's turn to another of Alex's puzzles: making 2016 and other target values from a string of four or five `4`s, with exponentiation allowed. Exponentiation is tricky for five reasons:\n", - "\n", - "- **Division by zero**: `(0 ^ -1)` is the same as `(1 / 0)`, and gives a `ZeroDivisionError`.\n", - "- **Irrationals**: `(3 ^ (1 / 2))` is an irrational number; so we can't do exact rational arithmetic.\n", - "- **Imaginaries**: `(-1 ^ (1 / 2))` is an imaginary number, but Python gives a `ValueError`.\n", - "- **Overflow**: `(10. ^ (9. ^ 8.))`, as a `float`, gives a `OverflowError`.\n", - "- **Finite memory**: [`(10 ^ (9 ^ (8 * 7)))`](http://www.wolframalpha.com/input/?i=10+%5E+9+%5E+56), as an `int`, gives an `OutOfMemoryError` (even if your memory uses every atom on Earth).\n", - "\n", - "How do we deal with this? We can't do exact rational arithmetic. We could try to do exact *algebra*, perhaps using [SymPy](http://www.sympy.org/en/index.html), but that seems difficult\n", - "and computationally expensive, so instead I will abandon the goal of exact computation, and do everything in the domain of floats (reluctantly accepting that there will be some round-off errors). We'll coerce numbers to floats when we first put them in the table, and all subsequent operations will be with floats. I define a new function, `expr2`, to call `expr`, catching arithmetic errors. Since we are making some rather arbitrary decisions about what expressions are allowed (e.g. imaginary numbers are not), I'll give up on trying to maintain `COUNTS`." - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": { - "button": false, - "collapsed": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [], - "source": [ - "from operator import add, sub, mul, truediv\n", - "\n", - "def expressions(numbers):\n", - " \"Fill EXPS table for numbers, and all sub-sequences of numbers. Return EXPS[numbers]\"\n", - " if numbers in EXPS: # Already did the work\n", - " pass\n", - " elif len(numbers) == 1: # Only one way to make an expression out of a single number\n", - " expr(numbers, float(numbers[0]), str(numbers[0]))\n", - " else: # Split in all ways; fill tables for left and right; combine tables in all ways\n", - " for (Lnums, Rnums) in splits(numbers):\n", - " for (L, R) in itertools.product(expressions(Lnums), expressions(Rnums)):\n", - " Lexp, Rexp = '(' + EXPS[Lnums][L], EXPS[Rnums][R] + ')'\n", - " expr2(numbers, L, pow, R, Lexp + '^' + Rexp)\n", - " expr2(numbers, L, truediv, R, Lexp + '/' + Rexp)\n", - " expr2(numbers, L, mul, R, Lexp + '*' + Rexp)\n", - " expr2(numbers, L, add, R, Lexp + '+' + Rexp)\n", - " expr2(numbers, L, sub, R, Lexp + '-' + Rexp)\n", - " return EXPS[numbers]\n", - "\n", - "def expr2(numbers, L, op, R, exp): \n", - " \"Fill table entries for op(L, R), catching errors.\"\n", - " try:\n", - " expr(numbers, op(L, R), exp)\n", - " except (ArithmeticError, ValueError):\n", - " pass\n", - " \n", - "def expr(numbers, value, exp): EXPS[numbers][value] = exp" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Now we can solve the \"2016 with five fours\" puzzle:" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'(((4^4)-4)*(4+4))'" - ] - }, - "execution_count": 64, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "clear()\n", - "\n", - "expressions((4, 4, 4, 4, 4))[2016]" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "I'll define a function to create a table of makeable integers:" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "button": false, - "collapsed": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [], - "source": [ - "def makeable(numbers):\n", - " \"A table of {i: expression} for all integers i from 0 up to first unmakeable.\"\n", - " return {i: expressions(numbers)[i]\n", - " for i in range(unmakeable(numbers))}\n", - "\n", - "def unmakeable(numbers):\n", - " \"Smallest positive integer than can't be made by numbers.\"\n", - " return next(i for i in itertools.count(1) if i not in expressions(numbers))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "We'll use this to see if we can solve the \"0 to 9 with four fours\" puzzle:" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{0: '(((4+4)-4)-4)',\n", - " 1: '(((4+4)-4)/4)',\n", - " 2: '((4/(4+4))*4)',\n", - " 3: '(((4+4)+4)/4)',\n", - " 4: '(((4-4)*4)+4)',\n", - " 5: '(((4*4)+4)/4)',\n", - " 6: '(((4+4)/4)+4)',\n", - " 7: '((4-(4/4))+4)',\n", - " 8: '(((4+4)-4)+4)',\n", - " 9: '(((4/4)+4)+4)'}" - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "makeable((4, 4, 4, 4))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Yes: we can get 0 to 9 (but not 10).\n", - "\n", - "Now I'll see what integers we can make with five fives. Legend has it that you can get all the way up to 55:" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{0: '((((5-5)*5)-5)+5)',\n", - " 1: '(((5-(5*5))/5)+5)',\n", - " 2: '((((5+5)/5)-5)+5)',\n", - " 3: '((((5*5)-5)-5)/5)',\n", - " 4: '((((5-5)-5)/5)+5)',\n", - " 5: '((5/((5^5)^5))+5)',\n", - " 6: '((((5/5)+5)*5)/5)',\n", - " 7: '(((5/5)+(5/5))+5)',\n", - " 8: '((((5+5)+5)/5)+5)',\n", - " 9: '((((5+5)*5)-5)/5)',\n", - " 10: '((((5*5)-5)-5)-5)',\n", - " 11: '((((5+5)*5)+5)/5)',\n", - " 12: '((((5+5)/5)+5)+5)'}" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "clear()\n", - "\n", - "five5s = (5, 5, 5, 5, 5)\n", - "\n", - "makeable(five5s)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "We didn't get there. \n", - "\n", - "# More Operations\n", - "\n", - "With some research, I [see](http://www.infobarrel.com/Five_Fives_Problem_Recreational_Mathematics) that others who got up to 55 with five 5s used some or all of these three concepts:\n", - "\n", - "- **digit concatenation**: `55`\n", - "- **decimal point**: `.5`\n", - "- **unary operations**: `-5`, `5!`, and √ `5`\n", - "\n", - "\n", - "We'll refactor `expressions` to call the following three new subfunctions:\n", - "\n", - "- `digit_expressions`: For every subsequence of numbers, we'll smush the digits together, and then make a table entry for those resulting digits as an integer, and with a decimal point in each possible position.\n", - "- `binary_expressions`: The code that previously was the main body of `expressions`.\n", - "- `unary_expressions`: Apply the unary operators to every entry in the table. \n", - "\n", - "We'll still do all computation in the domain of floats." - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [], - "source": [ - "from math import sqrt, factorial\n", - "\n", - "def expressions(numbers):\n", - " \"Fill EXPS table for numbers, and all sub-sequences of numbers. Return EXPS[numbers]\"\n", - " if numbers not in EXPS: \n", - " digit_expressions(numbers)\n", - " binary_expressions(numbers)\n", - " unary_expressions(numbers)\n", - " return EXPS[numbers]\n", - "\n", - "def digit_expressions(numbers):\n", - " \"Fill EXPS with digits, with opyional minus sign and decimal point.\"\n", - " # digit_expressions(1, 2) => 12, .12, 1.2\n", - " exp = ''.join(str(n) for n in numbers)\n", - " for d in range(len(exp) + 1):\n", - " decimal = (exp[:d] + '.' + exp[d:]).rstrip('.')\n", - " if d < 2 or not decimal.startswith('0'): # '01' is illegal; '0', '0.1' ok\n", - " expr(numbers, float(decimal), decimal)\n", - " expr(numbers, -float(decimal), '-' + decimal)\n", - " \n", - "def binary_expressions(numbers):\n", - " \"Fill EXPS with all expressions formed by splitting numbers and combining with an op.\"\n", - " for (Lnums, Rnums) in splits(numbers):\n", - " for (L, R) in itertools.product(expressions(Lnums), expressions(Rnums)):\n", - " Lexp, Rexp = '(' + EXPS[Lnums][L], EXPS[Rnums][R] + ')'\n", - " expr2(numbers, L, truediv, R, Lexp + '/' + Rexp)\n", - " expr2(numbers, L, mul, R, Lexp + '*' + Rexp)\n", - " expr2(numbers, L, add, R, Lexp + '+' + Rexp)\n", - " expr2(numbers, L, sub, R, Lexp + '-' + Rexp)\n", - " if 1 <= R <= 10 and (L > 0 or int(R) == R):\n", - " expr2(numbers, L, pow, R, Lexp + '^' + Rexp)\n", - " \n", - "def unary_expressions(numbers):\n", - " \"Fill tables for -v, √v and v!\"\n", - " for v in tuple(EXPS[numbers]):\n", - " exp = EXPS[numbers][v]\n", - " expr(numbers, -v, '-(' + exp + ')')\n", - " if v > 0: \n", - " expr(numbers, sqrt(v), '√' + exp)\n", - " if 3 <= v <= 6 and v == int(v):\n", - " expr(numbers, factorial(v), exp + '!')" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Now that we have more variety in the types of expressions formed, I want to choose a \"good\" expression to represent each value. I'll modify `expr` so that when there are multiple expressions for a value, it chooses the one with the least \"weight,\" where I define the `weight` of a string as the sum of the weights of the characters, where the square root sign is the heaviest, and other characters are as listed." - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [], - "source": [ - "def expr(numbers, value, exp): \n", - " \"Fill EXPS[numbers][val] with exp, unless we already have a lighter exp.\"\n", - " if value not in EXPS[numbers] or weight(exp) <= weight(EXPS[numbers][value]):\n", - " EXPS[numbers][value] = exp\n", - " \n", - "WEIGHTS = {'√':3, '.':2, '^':1.3, '/':1.2, '-':1.1}\n", - " \n", - "def weight(exp, weights=WEIGHTS): \n", - " return sum(weights.get(c, 1) for c in exp)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "We'll try again:" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 6min 4s, sys: 2.81 s, total: 6min 7s\n", - "Wall time: 6min 7s\n" - ] - }, - { - "data": { - "text/plain": [ - "{0: '((55-55)*5)',\n", - " 1: '((55/55)^5)',\n", - " 2: '(55/(55*.5))',\n", - " 3: '√(5!-(555/5))',\n", - " 4: '(5-(55/55))',\n", - " 5: '((55-55)+5)',\n", - " 6: '((55/55)+5)',\n", - " 7: '(((55+5)/5)-5)',\n", - " 8: '(((5!-55)/5)-5)',\n", - " 9: '(5!-(555/5))',\n", - " 10: '(5!-(55+55))',\n", - " 11: '((.55*5!)-55)',\n", - " 12: '((5.5/55)*5!)',\n", - " 13: '(((55+5)+5)/5)',\n", - " 14: '((5*5)-(55/5))',\n", - " 15: '((55/5.5)+5)',\n", - " 16: '((55+(5*5))/5)',\n", - " 17: '(((55+5)/5)+5)',\n", - " 18: '(((5!-55)/5)+5)',\n", - " 19: '((5*5)-((5/5)+5))',\n", - " 20: '(55/(.55*5))',\n", - " 21: '(((55/5)+5)+5)',\n", - " 22: '((55+55)/5)',\n", - " 23: '(((55/.5)+5)/5)',\n", - " 24: '(5-(55/55))!',\n", - " 25: '(55-((5*5)+5))',\n", - " 26: '(55-((5!/5)+5))',\n", - " 27: '((55/(5*.5))+5)',\n", - " 28: '((55+(5/5))*.5)',\n", - " 29: '(((5*5)-(5/5))+5)',\n", - " 30: '(((55/5)-5)*5)',\n", - " 31: '(((55*5)-5!)/5)',\n", - " 32: '(((5-5!)/5)+55)',\n", - " 33: '((55+5)*.55)',\n", - " 34: '(((55+5!)-5)/5)',\n", - " 35: '((55-(5*5))+5)',\n", - " 36: '((55/5)+(5*5))',\n", - " 37: '(((5!-55)+5!)/5)',\n", - " 38: '(((.55*.5)*5!)+5)',\n", - " 39: '((((5!/5)+5)+5)+5)',\n", - " 40: '(55-((5+5)+5))',\n", - " 41: '(5!-(55+(5!/5)))',\n", - " 42: '((.55*5!)-(5!/5))',\n", - " 43: '(55-(5!/(5+5)))',\n", - " 44: '(55-(55/5))',\n", - " 45: '((5!*5)-555)',\n", - " 46: '(((55/.5)+5!)/5)',\n", - " 47: '(((5!-5)/5)+(5!/5))',\n", - " 48: '(5!/((5.5-5)*5))',\n", - " 49: '(55-((5/5)+5))',\n", - " 50: '(55.5-5.5)',\n", - " 51: '((55+(5/5))-5)',\n", - " 52: '(((5.5+5)*5)-.5)',\n", - " 53: '(55-((5+5)/5))',\n", - " 54: '(((55*5)-5)/5)',\n", - " 55: '((55+55)*.5)',\n", - " 56: '(((55*5)+5)/5)',\n", - " 57: '(((5+5)/5)+55)',\n", - " 58: '(55.5+(5*.5))',\n", - " 59: '((55-(5/5))+5)',\n", - " 60: '(√(55*55)+5)',\n", - " 61: '(55.5+5.5)',\n", - " 62: '((55-(5!/5))/.5)',\n", - " 63: '(((5!-5)*.5)+5.5)',\n", - " 64: '(5!-(55+(5/5)))',\n", - " 65: '((5-(55+5))+5!)',\n", - " 66: '((55/5)+55)',\n", - " 67: '((5!/(5+5))+55)',\n", - " 68: '(((5!+5)*.5)+5.5)',\n", - " 69: '((5!-5)*((.5/5)+.5))',\n", - " 70: '(((55+5)+5)+5)',\n", - " 71: '((55/5)+(5!*.5))',\n", - " 72: '(((5/5)+5)!/(5+5))',\n", - " 73: '(((5!+5!)/5)+(5*5))',\n", - " 74: '((55+(5!/5))-5)',\n", - " 75: '((55+(5*5))-5)',\n", - " 76: '(((.55*5!)+5)+5)',\n", - " 77: '((((5!+5!)+5!)/5)+5)',\n", - " 78: '(((5!-5)/5)+55)',\n", - " 79: '(((55*5)+5!)/5)',\n", - " 80: '(((55/5)+5)*5)',\n", - " 81: '(((5!/√(5-.5))+√.5)/√.5)',\n", - " 82: '(((5-(5!/5))/.5)+5!)',\n", - " 83: '(((5!-5)/5)+(5!*.5))',\n", - " 84: '((55+(5!/5))+5)',\n", - " 85: '((55+(5*5))+5)',\n", - " 86: '((55/.5)-(5!/5))',\n", - " 87: '((555-5!)/5)',\n", - " 88: '((.55/(.5^5))*5)',\n", - " 89: '(((5!/5)-55)+5!)',\n", - " 90: '(((5*5)-55)+5!)',\n", - " 91: '((.55*5!)+(5*5))',\n", - " 92: '(5!-((55*.5)+.5))',\n", - " 93: '((.5-(55*.5))+5!)',\n", - " 94: '(5!-((5/5)+(5*5)))',\n", - " 95: '(((55-5)/.5)-5)',\n", - " 96: '(((5/5)+5!)-(5*5))',\n", - " 97: '((((5!*5)+5)-5!)/5)',\n", - " 98: '(5!-(55/(5*.5)))',\n", - " 99: '((55-5.5)/.5)',\n", - " 100: '((55/.5)-(5+5))',\n", - " 101: '((55.5-5)/.5)',\n", - " 102: '((((5-5!)/5)+5)+5!)',\n", - " 103: '(((5!+5!)/5)+55)',\n", - " 104: '(5!-((55/5)+5))',\n", - " 105: '((55+55)-5)',\n", - " 106: '((555/5)-5)',\n", - " 107: '(((55-5!)/5)+5!)',\n", - " 108: '(5!-((55+5)/5))',\n", - " 109: '(((5!*5)-55)/5)',\n", - " 110: '((555-5)/5)',\n", - " 111: '(555/√(5*5))',\n", - " 112: '((555+5)/5)',\n", - " 113: '(5!-(((5+5)/5)+5))',\n", - " 114: '((5-(55/5))+5!)',\n", - " 115: '((55+55)+5)',\n", - " 116: '((555/5)+5)',\n", - " 117: '((((5+5)/5)-5)+5!)',\n", - " 118: '(5!-(5!/(55+5)))',\n", - " 119: '(5!-(55/55))',\n", - " 120: '((55-55)+5)!',\n", - " 121: '((55/55)+5!)',\n", - " 122: '((5!/(55+5))+5!)',\n", - " 123: '((((5+5)+5)/5)+5!)',\n", - " 124: '(((5*5)*5)-(5/5))',\n", - " 125: '(((55-5)*5)*.5)',\n", - " 126: '(((55/5)+5!)-5)',\n", - " 127: '(((5.5/5)*5!)-5)',\n", - " 128: '(((5*.5)+5.5)+5!)',\n", - " 129: '((5!-55.5)/.5)',\n", - " 130: '((55/5.5)+5!)',\n", - " 131: '(((5!*5)+55)/5)',\n", - " 132: '(((55+5)/5)+5!)',\n", - " 133: '(((5!-55)/5)+5!)',\n", - " 134: '((55/.5)+(5!/5))',\n", - " 135: '((555+5!)/5)',\n", - " 136: '(((55/5)+5!)+5)',\n", - " 137: '(((5.5/5)*5!)+5)',\n", - " 138: '(((55*5)*.5)+.5)',\n", - " 139: '((((5/5)+5)!/5)-5)',\n", - " 140: '(((55*5)+5)*.5)',\n", - " 141: '(((5.5+5)/.5)+5!)',\n", - " 142: '((55/(5*.5))+5!)',\n", - " 143: '((((5/5)+5)!-5)/5)',\n", - " 144: '(((55/5)-5)!/5)',\n", - " 145: '((((5*5)+5)*5)-5)',\n", - " 146: '(((5/5)+(5*5))+5!)',\n", - " 147: '(((55*.5)+5!)-.5)',\n", - " 148: '(((55*.5)+5!)+.5)',\n", - " 149: '(((5*5)*5)+(5!/5))',\n", - " 150: '((55-(5*5))*5)',\n", - " 151: '((55-(5!/5))+5!)',\n", - " 152: '((((5+5)/5)^5)+5!)',\n", - " 153: '(((.55*.5)*5!)+5!)',\n", - " 154: '((((5!/5)+5!)+5)+5)',\n", - " 155: '((55-(5!/5))*5)',\n", - " 156: '(((5.5*5!)+5!)/5)'}" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "clear()\n", - "\n", - "%time makeable(five5s)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Wow! We almost tripled the 55 goal! (Although the increased number of expressions means it took 6 minutes.)\n", - "\n", - "I have to say, I would never have come up with the solution for 81 on my own. It works because (√(5 - .5) \\* √.5) = √(4.5 \\* 0.5) = √(9/4) = 3/2." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "# Even More Operations \n", - "\n", - "At the risk of making the computation take even longer, I'm going to add two more unary operations:\n", - "\n", - "- **Floor**: ⌊*x*⌋ is the largest integer less than or equal to *x* (in other words, rounding down).\n", - "- **Ceiling**: ⌈*x*⌉ is the smallest integer greater than or equal to *x* (in other words, rounding up).\n", - "\n", - "These operations are useful because they produce integers, and our targets are the integers (from 0 up to whatever). \n", - "\n", - "In addition, I'll allow two consecutive applications of unary operators, thus allowing expressions such as\n", - "\n", - "- ⌊√5⌋ = 2\n", - "- ⌈5.5⌉! = 720\n", - "\n", - "But still not allowing three consecutive applications, such as\n", - "\n", - "- ⌈√5⌉! = 6\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": { - "button": false, - "collapsed": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [], - "source": [ - "from math import floor, ceil\n", - "\n", - "floor_ceil_allowed = True # Should we allow floor and ceil?\n", - "\n", - "def unary_expressions(numbers):\n", - " \"Fill tables for -v, √v and v!, ⌊x⌋, and ⌈x⌉\"\n", - " for i in range(2):\n", - " for v in tuple(EXPS[numbers]):\n", - " exp = EXPS[numbers][v]\n", - " expr(numbers, -v, '-(' + exp + ')')\n", - " if 0 < v <= 100 and 4*v == round(4*v):\n", - " # Be stingier in allowing √ operator\n", - " expr(numbers, sqrt(v), '√' + exp)\n", - " if 3 <= v <= 6 and v == int(v):\n", - " expr(numbers, factorial(v), exp + '!')\n", - " if floor_ceil_allowed and v != int(v):\n", - " uexp = unbracket(exp)\n", - " expr(numbers, floor(v), '⌊' + uexp + '⌋')\n", - " expr(numbers, ceil(v), '⌈' + uexp + '⌉')\n", - " \n", - "def unbracket(exp):\n", - " \"Remove outer brackets from exp if they are there.\"\n", - " if exp.startswith('(') and exp.endswith(')'):\n", - " return exp[1:-1]\n", - " else:\n", - " return exp" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Let's try (warning—it will take 20 or 30 minutes to run):" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 24min 17s, sys: 3.22 s, total: 24min 21s\n", - "Wall time: 24min 23s\n" - ] - }, - { - "data": { - "text/plain": [ - "{0: '⌊55/555⌋',\n", - " 1: '⌈55/555⌉',\n", - " 2: '⌊.5555*5⌋',\n", - " 3: '⌈.5555*5⌉',\n", - " 4: '⌊5-.5555⌋',\n", - " 5: '⌊5.5555⌋',\n", - " 6: '⌈5.5555⌉',\n", - " 7: '⌈5.55+.55⌉',\n", - " 8: '⌈5.555+√5⌉',\n", - " 9: '⌊55/5.55⌋',\n", - " 10: '⌊555/55⌋',\n", - " 11: '⌈555/55⌉',\n", - " 12: '⌈55.55/5⌉',\n", - " 13: '⌊(.555*5)*5⌋',\n", - " 14: '⌈(.555*5)*5⌉',\n", - " 15: '⌊(5.55+5)+5⌋',\n", - " 16: '⌈(5.55+5)+5⌉',\n", - " 17: '⌈(55.5/5)+5⌉',\n", - " 18: '⌊55/⌈5!/55⌉⌋',\n", - " 19: '⌈55/⌈5!/55⌉⌉',\n", - " 20: '(⌊555/5!⌋*5)',\n", - " 21: '⌊5!/5.555⌋',\n", - " 22: '⌈5!/5.555⌉',\n", - " 23: '⌈555/(5*5)⌉',\n", - " 24: '⌊5-.5555⌋!',\n", - " 25: '(⌊5.555⌋*5)',\n", - " 26: '⌈(55*55)/5!⌉',\n", - " 27: '⌊5.555*5⌋',\n", - " 28: '⌈5.555*5⌉',\n", - " 29: '(⌊555/5!⌋!+5)',\n", - " 30: '⌊.555*55⌋',\n", - " 31: '⌈.555*55⌉',\n", - " 32: '⌊(5.55*5)+5⌋',\n", - " 33: '⌈(5.55*5)+5⌉',\n", - " 34: '⌈5.55*⌈5.5⌉⌉',\n", - " 35: '⌊(55*.55)+5⌋',\n", - " 36: '⌈(55*.55)+5⌉',\n", - " 37: '⌊(55/√55)*5⌋',\n", - " 38: '⌈(55/√55)*5⌉',\n", - " 39: '⌊55.55*√.5⌋',\n", - " 40: '(55-((5+5)+5))',\n", - " 41: '⌊5.55*√55⌋',\n", - " 42: '⌈5.55*√55⌉',\n", - " 43: '⌈55-(√55+5)⌉',\n", - " 44: '(55-(55/5))',\n", - " 45: '((5!*5)-555)',\n", - " 46: '⌊5555/5!⌋',\n", - " 47: '⌈5555/5!⌉',\n", - " 48: '⌊55.5-√55⌋',\n", - " 49: '⌊55-5.55⌋',\n", - " 50: '⌈55-5.55⌉',\n", - " 51: '⌈55.55-5⌉',\n", - " 52: '⌊55-(5!/55)⌋',\n", - " 53: '⌈55-(5!/55)⌉',\n", - " 54: '⌊55-.555⌋',\n", - " 55: '⌊55.555⌋',\n", - " 56: '⌈55.555⌉',\n", - " 57: '⌈55.55+.5⌉',\n", - " 58: '⌈(5!/55)+55⌉',\n", - " 59: '⌊(55-.55)+5⌋',\n", - " 60: '⌊55.55+5⌋',\n", - " 61: '⌈55.55+5⌉',\n", - " 62: '⌊√55.5+55⌋',\n", - " 63: '⌈√55.5+55⌉',\n", - " 64: '⌊5!-55.55⌋',\n", - " 65: '⌈5!-55.55⌉',\n", - " 66: '⌊.5555*5!⌋',\n", - " 67: '⌈.5555*5!⌉',\n", - " 68: '⌈(√55+55)+5⌉',\n", - " 69: '⌊555/⌈√55⌉⌋',\n", - " 70: '⌈555/⌈√55⌉⌉',\n", - " 71: '⌊(.555*5!)+5⌋',\n", - " 72: '⌈(.555*5!)+5⌉',\n", - " 73: '⌊(5!/55)^5.5⌋',\n", - " 74: '⌊555/√55⌋',\n", - " 75: '⌈555/√55⌉',\n", - " 76: '⌊555/(5+√5)⌋',\n", - " 77: '⌈555/(5+√5)⌉',\n", - " 78: '⌈√⌊5!/55⌋*55⌉',\n", - " 79: '⌊555/⌊√55⌋⌋',\n", - " 80: '⌊55.5+(5*5)⌋',\n", - " 81: '⌈55.5+(5*5)⌉',\n", - " 82: '⌊(55*.5)+55⌋',\n", - " 83: '⌈(55*.5)+55⌉',\n", - " 84: '((55+(5!/5))+5)',\n", - " 85: '((55+(5*5))+5)',\n", - " 86: '⌊5!-(5^(5!/55))⌋',\n", - " 87: '((555-5!)/5)',\n", - " 88: '⌈√5^5.555⌉',\n", - " 89: '⌊5!-(55*.55)⌋',\n", - " 90: '⌊(55-5)/.55⌋',\n", - " 91: '⌈(55-5)/.55⌉',\n", - " 92: '⌊555/⌈5.5⌉⌋',\n", - " 93: '⌈555/⌈5.5⌉⌉',\n", - " 94: '⌊(55/.55)-5⌋',\n", - " 95: '⌈(55/.55)-5⌉',\n", - " 96: '⌊(55+5!)*.55⌋',\n", - " 97: '⌈(55+5!)*.55⌉',\n", - " 98: '⌊⌊55-.5⌋/.55⌋',\n", - " 99: '⌊55/.555⌋',\n", - " 100: '⌈55/.555⌉',\n", - " 101: '⌈555/5.5⌉',\n", - " 102: '⌈⌈55.5⌉/.55⌉',\n", - " 103: '⌈⌈55/.55⌉+√5⌉',\n", - " 104: '⌊(55/.55)+5⌋',\n", - " 105: '((55+55)-5)',\n", - " 106: '((555/5)-5)',\n", - " 107: '⌊(55+55)-√5⌋',\n", - " 108: '⌈(55+55)-√5⌉',\n", - " 109: '⌊(55+55)-.5⌋',\n", - " 110: '⌊55.5+55⌋',\n", - " 111: '⌈55.5+55⌉',\n", - " 112: '⌈555.5/5⌉',\n", - " 113: '⌈(55+55)+√5⌉',\n", - " 114: '⌊5!-5.555⌋',\n", - " 115: '((55+55)+5)',\n", - " 116: '((555/5)+5)',\n", - " 117: '⌊5!-(.555*5)⌋',\n", - " 118: '⌈5!-(.555*5)⌉',\n", - " 119: '⌊5!-.5555⌋',\n", - " 120: '⌊5.5555⌋!',\n", - " 121: '⌈.5555+5!⌉',\n", - " 122: '⌊(.555*5)+5!⌋',\n", - " 123: '⌊555/(5-.5)⌋',\n", - " 124: '⌊55.55*√5⌋',\n", - " 125: '⌊5.555+5!⌋',\n", - " 126: '⌈5.555+5!⌉',\n", - " 127: '⌊⌈5^5.5⌉/55⌋',\n", - " 128: '⌈⌈5^5.5⌉/55⌉',\n", - " 129: '⌊(5/.555)+5!⌋',\n", - " 130: '⌊(5.55+5)+5!⌋',\n", - " 131: '⌈(5.55+5)+5!⌉',\n", - " 132: '⌊(√55-5)*55⌋',\n", - " 133: '⌈(√55-5)*55⌉',\n", - " 134: '⌈(5.55/5)*5!⌉',\n", - " 135: '((555+5!)/5)',\n", - " 136: '(((55/5)+5!)+5)',\n", - " 137: '⌈⌈55.5+5⌉*√5⌉',\n", - " 138: '⌊(5.55*5)*5⌋',\n", - " 139: '⌈(5.55*5)*5⌉',\n", - " 140: '(⌈5.55*5⌉*5)',\n", - " 141: '⌊⌊55^√5⌋/55⌋',\n", - " 142: '⌈⌊55^√5⌋/55⌉',\n", - " 143: '⌈((55*5)*.5)+5⌉',\n", - " 144: '(⌈5.555⌉!/5)',\n", - " 145: '((⌊5.55⌋*5)+5!)',\n", - " 146: '⌊(5-√5.5)*55⌋',\n", - " 147: '⌊(5.55*5)+5!⌋',\n", - " 148: '⌈(5.55*5)+5!⌉',\n", - " 149: '⌈⌊55*.5⌋*5.5⌉',\n", - " 150: '(⌊55*.55⌋*5)',\n", - " 151: '⌊(55*.55)*5⌋',\n", - " 152: '⌈(55*.55)*5⌉',\n", - " 153: '⌊(.55+√5)*55⌋',\n", - " 154: '(⌈55*.5⌉*5.5)',\n", - " 155: '(⌈55*.55⌉*5)',\n", - " 156: '⌈(55+55)/√.5⌉',\n", - " 157: '⌊(555*.5)-5!⌋',\n", - " 158: '⌈(555*.5)-5!⌉',\n", - " 159: '⌈(55-5)*√(5+5)⌉',\n", - " 160: '(((55*5)-5!)+5)',\n", - " 161: '⌊(5*.5)^5.55⌋',\n", - " 162: '⌈(5*.5)^5.55⌉',\n", - " 163: '⌊(5!/.55)-55⌋',\n", - " 164: '⌊(.555*5)^5⌋',\n", - " 165: '(⌈5!/55⌉*55)',\n", - " 166: '⌊5.5^⌈5!/55⌉⌋',\n", - " 167: '⌈5.5^⌈5!/55⌉⌉',\n", - " 168: '⌈(55-√55)+5!⌉',\n", - " 169: '⌊(55-5.5)+5!⌋',\n", - " 170: '⌈(55-5.5)+5!⌉',\n", - " 171: '⌈(55.5+5!)-5⌉',\n", - " 172: '⌈5.555^⌈√5⌉⌉',\n", - " 173: '⌊√⌊5.5+5⌋*55⌋',\n", - " 174: '⌊(55-.55)+5!⌋',\n", - " 175: '⌊55.55+5!⌋',\n", - " 176: '⌈55.55+5!⌉',\n", - " 177: '⌊(55*√5)+55⌋',\n", - " 178: '⌈(55*√5)+55⌉',\n", - " 179: '⌈√(5.5+5)*55⌉',\n", - " 180: '⌊(55.5+5)+5!⌋',\n", - " 181: '⌈(55.5+5)+5!⌉',\n", - " 182: '⌊(55*5.5)-5!⌋',\n", - " 183: '⌈(55*5.5)-5!⌉',\n", - " 184: '⌊(5!-55.5)+5!⌋',\n", - " 185: '(555/⌈5*.5⌉)',\n", - " 186: '⌊(.555*5!)+5!⌋',\n", - " 187: '⌈(.555*5!)+5!⌉',\n", - " 188: '((⌈5*.5⌉^5)-55)',\n", - " 189: '⌊(55+5)*√(5+5)⌋',\n", - " 190: '(⌈√55.5*5⌉*5)',\n", - " 191: '⌈√⌊√55+5⌋*55⌉',\n", - " 192: '⌈⌈√55.5^5⌉/5!⌉',\n", - " 193: '⌊5!^(.55+.55)⌋',\n", - " 194: '⌊(555-5!)/√5⌋',\n", - " 195: '⌈(555-5!)/√5⌉',\n", - " 196: '⌊555/√⌈5+√5⌉⌋',\n", - " 197: '⌊((55*5)+5!)*.5⌋',\n", - " 198: '(⌊55/.55⌋/.5)',\n", - " 199: '⌊55/(.55*.5)⌋',\n", - " 200: '⌊555/(5-√5)⌋',\n", - " 201: '⌈555/(5-√5)⌉',\n", - " 202: '⌊555/(√5+.5)⌋',\n", - " 203: '⌊5!^(5.55/5)⌋',\n", - " 204: '⌈5!^(5.55/5)⌉',\n", - " 205: '(⌈√55*5.5⌉*5)',\n", - " 206: '⌈5.55*⌈5^√5⌉⌉',\n", - " 207: '⌊(5!-5)/.555⌋',\n", - " 208: '⌈(5!-5)/.555⌉',\n", - " 209: '(⌈√55*5⌉*5.5)',\n", - " 210: '((55*⌈5.5⌉)-5!)',\n", - " 211: '⌊(5!/.555)-5⌋',\n", - " 212: '⌈(5!/.555)-5⌉',\n", - " 213: '⌈(5!/.55)-5.5⌉',\n", - " 214: '⌊⌊5!-.5⌋/.555⌋',\n", - " 215: '((55*⌊5-.5⌋)-5)',\n", - " 216: '⌊5!/.5555⌋',\n", - " 217: '⌈5!/.5555⌉',\n", - " 218: '⌈(555-5!)*.5⌉',\n", - " 219: '(⌊55/.55⌋+5!)',\n", - " 220: '((55*5)-55)',\n", - " 221: '⌊(5!/.555)+5⌋',\n", - " 222: '(555/(5*.5))',\n", - " 223: '⌊⌈55*√5⌉/.55⌋',\n", - " 224: '⌈⌈55*√5⌉/.55⌉',\n", - " 225: '((55-(5+5))*5)',\n", - " 226: '⌈(5!+5)/.555⌉',\n", - " 227: '⌈555/√⌈5.5⌉⌉',\n", - " 228: '⌊(5.5+5!)/.55⌋',\n", - " 229: '⌊⌈5.5+5!⌉/.55⌋',\n", - " 230: '((55+55)+5!)',\n", - " 231: '((555/5)+5!)',\n", - " 232: '⌈(√55+5!)/.55⌉',\n", - " 233: '⌈⌈√55+5!⌉/.55⌉',\n", - " 234: '⌊(5!-5.55)+5!⌋',\n", - " 235: '(⌊55-√55⌋*5)',\n", - " 236: '⌊555/√5.5⌋',\n", - " 237: '⌈555/√5.5⌉',\n", - " 238: '⌈(55-√55)*5⌉',\n", - " 239: '⌊(5!-.555)+5!⌋',\n", - " 240: '(⌊5.555⌋!+5!)',\n", - " 241: '⌈(.555+5!)+5!⌉',\n", - " 242: '⌈(.555+5!)/.5⌉',\n", - " 243: '(⌈.555*5⌉^5)',\n", - " 244: '⌊(5-.55)*55⌋',\n", - " 245: '⌈(5-.55)*55⌉',\n", - " 246: '⌈(55+55)*√5⌉',\n", - " 247: '⌊(55-5.5)*5⌋',\n", - " 248: '⌈(55-5.5)*5⌉',\n", - " 249: '⌈555.5/√5⌉',\n", - " 250: '(⌈55-5.5⌉*5)',\n", - " 251: '⌈(555+5)/√5⌉',\n", - " 252: '⌊(55.5-5)*5⌋',\n", - " 253: '⌈(55.5-5)*5⌉',\n", - " 254: '⌈(555/√5)+5⌉',\n", - " 255: '(⌈55.5-5⌉*5)',\n", - " 256: '⌊((5!/55)*5!)-5⌋',\n", - " 257: '⌈((5!/55)*5!)-5⌉',\n", - " 258: '⌊⌈55.5/5⌉^√5⌋',\n", - " 259: '⌊(5!/55.5)*5!⌋',\n", - " 260: '⌈(5!/55.5)*5!⌉',\n", - " 261: '⌈(.55*5)^5.5⌉',\n", - " 262: '⌊((5.5+5)*5)*5⌋',\n", - " 263: '⌈((5.5+5)*5)*5⌉',\n", - " 264: '((55/(5*5))*5!)',\n", - " 265: '((55*5)-(5+5))',\n", - " 266: '⌊(55.5-√5)*5⌋',\n", - " 267: '⌊(55*5)-√55⌋',\n", - " 268: '⌈(55*5)-√55⌉',\n", - " 269: '⌊(55*5)-5.5⌋',\n", - " 270: '⌈(55*5)-5.5⌉',\n", - " 271: '⌈((55*5)+.5)-5⌉',\n", - " 272: '⌊(555*.5)-5⌋',\n", - " 273: '⌈(555*.5)-5⌉',\n", - " 274: '⌊(55*5)-.55⌋',\n", - " 275: '(⌊55.55⌋*5)',\n", - " 276: '⌈(55*5)+.55⌉',\n", - " 277: '⌊55.55*5⌋',\n", - " 278: '⌈55.55*5⌉',\n", - " 279: '⌈⌈555*.5⌉+.5⌉',\n", - " 280: '(⌈55.55⌉*5)',\n", - " 281: '⌈(55*5)+5.5⌉',\n", - " 282: '⌊(555*.5)+5⌋',\n", - " 283: '⌈(555*.5)+5⌉',\n", - " 284: '⌊((5^5)*5)/55⌋',\n", - " 285: '(((55*5)+5)+5)',\n", - " 286: '⌊555-(5!*√5)⌋',\n", - " 287: '⌊(√55*55)-5!⌋',\n", - " 288: '⌈(√55*55)-5!⌉',\n", - " 289: '⌊55^√⌊5!/55⌋⌋',\n", - " 290: '⌈55^√⌊5!/55⌋⌉',\n", - " 291: '⌊√⌈55*.5⌉*55⌋',\n", - " 292: '⌈√⌈55*.5⌉*55⌉',\n", - " 293: '⌊√⌈5.555⌉*5!⌋',\n", - " 294: '⌈√⌈5.555⌉*5!⌉',\n", - " 295: '(((55+5)*5)-5)',\n", - " 296: '⌈(55.5+5!)+5!⌉',\n", - " 297: '⌊(55*5.5)-5⌋',\n", - " 298: '⌈(55*5.5)-5⌉',\n", - " 299: '⌊(55-.5)*5.5⌋',\n", - " 300: '(⌊55.5+5⌋*5)',\n", - " 301: '⌊⌊55*5.5⌋-.5⌋',\n", - " 302: '⌊(55.5+5)*5⌋',\n", - " 303: '⌈(55.5+5)*5⌉',\n", - " 304: '⌈⌈55*5.5⌉+.5⌉',\n", - " 305: '⌊5.55*55⌋',\n", - " 306: '⌈5.55*55⌉',\n", - " 307: '⌊(55*5.5)+5⌋',\n", - " 308: '⌈(55*5.5)+5⌉',\n", - " 309: '⌊((5!-55)/5)^√5⌋',\n", - " 310: '(⌊√55+55⌋*5)',\n", - " 311: '⌈5.55*(√5^5)⌉',\n", - " 312: '⌊(√55+55)*5⌋',\n", - " 313: '⌈(√55+55)*5⌉',\n", - " 314: '⌊(55+√5)*5.5⌋',\n", - " 315: '(555-(5!+5!))',\n", - " 316: '⌊√⌊5.55+5⌋^5⌋',\n", - " 317: '⌈√⌊5.55+5⌋^5⌉',\n", - " 318: '⌊(55+5!)/.55⌋',\n", - " 319: '⌈(55+5!)/.55⌉',\n", - " 320: '(⌊5!-55.5⌋*5)',\n", - " 321: '⌈555/√⌈5*.5⌉⌉',\n", - " 322: '⌊(5!-55.5)*5⌋',\n", - " 323: '⌈(5!-55.5)*5⌉',\n", - " 324: '⌈55.5+(5!*√5)⌉',\n", - " 325: '(((55+5)+5)*5)',\n", - " 326: '⌈(5!/55)^√55⌉',\n", - " 327: '⌊(55+(5!*5))*.5⌋',\n", - " 328: '⌈(55+(5!*5))*.5⌉',\n", - " 329: '⌊(55*⌈5.5⌉)-.5⌋',\n", - " 330: '((55*5)+55)',\n", - " 331: '⌈(55+(5*√5))*5⌉',\n", - " 332: '⌊((5!*5)+5)*.55⌋',\n", - " 333: '⌊(.555*5)*5!⌋',\n", - " 334: '⌈(.555*5)*5!⌉',\n", - " 335: '(⌈.555*5!⌉*5)',\n", - " 336: '⌊(5!/.555)+5!⌋',\n", - " 337: '⌊(555+5!)*.5⌋',\n", - " 338: '⌈(555+5!)*.5⌉',\n", - " 339: '⌈(5-(5!/55))*5!⌉',\n", - " 340: '⌈√⌈√55*5⌉*55⌉',\n", - " 341: '⌊(5.5+√.5)*55⌋',\n", - " 342: '⌈(5.5+√.5)*55⌉',\n", - " 343: '⌊((5^5)*.55)/5⌋',\n", - " 344: '⌈((5^5)*.55)/5⌉',\n", - " 345: '(⌈5!/55⌉*(5!-5))',\n", - " 346: '⌊((55*5)-5!)*√5⌋',\n", - " 347: '⌊(5^5)/⌊5/.55⌋⌋',\n", - " 348: '⌈(5^5)/⌊5/.55⌋⌉',\n", - " 349: '⌊((5-.55)^5)/5⌋',\n", - " 350: '(((5-55)+5!)*5)',\n", - " 351: '⌊555/√(5*.5)⌋',\n", - " 352: '⌈555/√(5*.5)⌉',\n", - " 353: '⌈(√55-⌈.5⌉)*55⌉',\n", - " 354: '⌊(⌈5/55⌉+√5)^5⌋',\n", - " 355: '((⌈5!/55⌉*5!)-5)',\n", - " 356: '⌈(55/5)^√⌈5.5⌉⌉',\n", - " 357: '⌊(5!-55)*5.5⌋',\n", - " 358: '⌈(5!-55)*5.5⌉',\n", - " 359: '⌈⌈5!/55⌉*(5!-.5)⌉',\n", - " 360: '(⌈.555*5⌉*5!)',\n", - " 361: '⌊(55-5)*(5+√5)⌋',\n", - " 362: '⌈(55-5)*(5+√5)⌉',\n", - " 363: '⌊(5.5*.55)*5!⌋',\n", - " 364: '⌈(5.5*.55)*5!⌉',\n", - " 365: '((⌈5!/55⌉*5!)+5)',\n", - " 366: '⌈(⌈√5⌉^5.5)-55⌉',\n", - " 367: '⌊(55*(5-.5))+5!⌋',\n", - " 368: '⌊(555/√5)+5!⌋',\n", - " 369: '⌈(555/√5)+5!⌉',\n", - " 370: '⌊(55-5)*√55⌋',\n", - " 371: '⌈(55-5)*√55⌉',\n", - " 372: '⌈(√(5+5)^5)+55⌉',\n", - " 373: '⌈(5-√⌈5!/55⌉)^5⌉',\n", - " 374: '⌈√⌈5.5^√5⌉*55⌉',\n", - " 375: '(⌈5!/55⌉*(5!+5))',\n", - " 376: '⌊(5.55+5!)*⌈√5⌉⌋',\n", - " 377: '⌈(5.55+5!)*⌈√5⌉⌉',\n", - " 378: '(⌊55-.5⌋*⌊√55⌋)',\n", - " 379: '⌊√⌊5.55+5⌋*5!⌋',\n", - " 380: '⌊(√55-.5)*55⌋',\n", - " 381: '⌊55^(√55/5)⌋',\n", - " 382: '⌈55^(√55/5)⌉',\n", - " 383: '⌊((55-√5)*5)+5!⌋',\n", - " 384: '⌈((55-√5)*5)+5!⌉',\n", - " 385: '(⌊√55.5⌋*55)',\n", - " 386: '⌈⌊55-√5⌋*√55⌉',\n", - " 387: '⌊(555*√.5)-5⌋',\n", - " 388: '⌊√(55-5)*55⌋',\n", - " 389: '⌈√(55-5)*55⌉',\n", - " 390: '(((55*5)+5!)-5)',\n", - " 391: '⌊⌊55.5+5!⌋*√5⌋',\n", - " 392: '⌊555.5*√.5⌋',\n", - " 393: '⌈555.5*√.5⌉',\n", - " 394: '⌈⌈555.5⌉*√.5⌉',\n", - " 395: '((55+(5!/5))*5)',\n", - " 396: '⌊⌈5.55⌉!*.55⌋',\n", - " 397: '⌊(555*.5)+5!⌋',\n", - " 398: '⌈(555*.5)+5!⌉',\n", - " 399: '⌊.555*⌈5.5⌉!⌋',\n", - " 400: '((55+(5*5))*5)',\n", - " 401: '⌊55.5*(5+√5)⌋',\n", - " 402: '⌊(√55*55)-5⌋',\n", - " 403: '⌈(√55*55)-5⌉',\n", - " 404: '⌈(√5.5+5)*55⌉',\n", - " 405: '⌈(55-.5)*√55⌉',\n", - " 406: '⌊√(55-.5)*55⌋',\n", - " 407: '⌊(√55^5)/55⌋',\n", - " 408: '⌈(√55^5)/55⌉',\n", - " 409: '⌊√55.5*55⌋',\n", - " 410: '⌈√55.5*55⌉',\n", - " 411: '⌊55.5*√55⌋',\n", - " 412: '⌈55.5*√55⌉',\n", - " 413: '⌈(√55*55)+5⌉',\n", - " 414: '⌊(5!-(√55*5))*5⌋',\n", - " 415: '⌊⌈55.5⌉*√55⌋',\n", - " 416: '⌈⌈55.5⌉*√55⌉',\n", - " 417: '⌊(5^(.55*5))*5⌋',\n", - " 418: '⌈(5^(.55*5))*5⌉',\n", - " 419: '⌊(5^5)/√55.5⌋',\n", - " 420: '⌊⌈5!/55⌉^5.5⌋',\n", - " 421: '⌈⌈5!/55⌉^5.5⌉',\n", - " 422: '⌊(55*5.5)+5!⌋',\n", - " 423: '⌈(55*5.5)+5!⌉',\n", - " 424: '⌊(55+√5)*√55⌋',\n", - " 425: '⌊(5.5+√5)*55⌋',\n", - " 426: '⌊√(55+5)*55⌋',\n", - " 427: '⌈√(55+5)*55⌉',\n", - " 428: '⌈((5-√5)+5)*55⌉',\n", - " 429: '⌈⌈55*5.5⌉/√.5⌉',\n", - " 430: '(555-(5!+5))',\n", - " 431: '⌈⌈55+√5⌉*√55⌉',\n", - " 432: '⌊555-(5!+√5)⌋',\n", - " 433: '⌈555-(5!+√5)⌉',\n", - " 434: '⌊555-(5!+.5)⌋',\n", - " 435: '⌊555.5-5!⌋',\n", - " 436: '⌈555.5-5!⌉',\n", - " 437: '⌊(555+√5)-5!⌋',\n", - " 438: '⌈(555+√5)-5!⌉',\n", - " 439: '⌊(55*⌈√55⌉)-.5⌋',\n", - " 440: '((555-5!)+5)',\n", - " 441: '⌊(5^5)/√(55-5)⌋',\n", - " 442: '⌈(5^5)/√(55-5)⌉',\n", - " 443: '⌊√(5!-55)*55⌋',\n", - " 444: '⌊(55+5)*√55⌋',\n", - " 445: '⌈(55+5)*√55⌉',\n", - " 446: '⌊√(.55*5!)*55⌋',\n", - " 447: '⌊⌈√5⌉^5.555⌋',\n", - " 448: '⌈⌈√5⌉^5.555⌉',\n", - " 449: '⌈(√(5+5)+5)*55⌉',\n", - " 450: '((55*⌈5.5⌉)+5!)',\n", - " 451: '⌊(⌈5.55⌉-√5)*5!⌋',\n", - " 452: '⌊(⌈5.5⌉+√5)*55⌋',\n", - " 453: '⌈(⌈5.5⌉+√5)*55⌉',\n", - " 454: '⌊(⌈5!/√55⌉/5)^5⌋',\n", - " 455: '((5!-55)*⌊√55⌋)',\n", - " 456: '⌊⌊√5^5.5⌋*5.5⌋',\n", - " 457: '⌊(55+(5^√5))*5⌋',\n", - " 458: '⌈(55+(5^√5))*5⌉',\n", - " 459: '⌊555/(√.5+.5)⌋',\n", - " 460: '(⌊5!-(55*.5)⌋*5)',\n", - " 461: '⌈√⌊√5.5^5⌋*55⌉',\n", - " 462: '⌊(5!-(55*.5))*5⌋',\n", - " 463: '⌈(5!-(55*.5))*5⌉',\n", - " 464: '(⌈55+√5⌉*⌈√55⌉)',\n", - " 465: '(⌈5!-(55*.5)⌉*5)',\n", - " 466: '⌊5.55*⌊5!*√.5⌋⌋',\n", - " 467: '⌊(⌈√55⌉+.5)*55⌋',\n", - " 468: '((5-(5.5/5))*5!)',\n", - " 469: '⌊((√.5*5)+5)*55⌋',\n", - " 470: '⌊555-(5!*√.5)⌋',\n", - " 471: '⌈555-(5!*√.5)⌉',\n", - " 472: '⌈5.55*⌈5!*√.5⌉⌉',\n", - " 473: '⌈(5!*5)-(√55+5!)⌉',\n", - " 474: '⌊(5!*5)-(5.5+5!)⌋',\n", - " 475: '((⌊5-.55⌋*5!)-5)',\n", - " 476: '⌊5!/((.55^5)*5)⌋',\n", - " 477: '⌊(555+5!)*√.5⌋',\n", - " 478: '⌈(555+5!)*√.5⌉',\n", - " 479: '⌊(5!*5)-(.55+5!)⌋',\n", - " 480: '(⌊555/5!⌋*5!)',\n", - " 481: '⌈(.55-5!)+(5!*5)⌉',\n", - " 482: '⌊(5!-55)*√55⌋',\n", - " 483: '⌈(5!-55)*√55⌉',\n", - " 484: '⌈(5!*√5)/.555⌉',\n", - " 485: '((⌊5-.55⌋*5!)+5)',\n", - " 486: '⌈⌈5!/.555⌉*√5⌉',\n", - " 487: '⌊((5!*5)-5!)+√55⌋',\n", - " 488: '⌊⌊√55*5!⌋*.55⌋',\n", - " 489: '⌊(√55*.55)*5!⌋',\n", - " 490: '⌈(√55*.55)*5!⌉',\n", - " 491: '⌈5!*(5-(5/5.5))⌉',\n", - " 492: '⌊((55/5)+5)^√5⌋',\n", - " 493: '⌈((55/5)+5)^√5⌉',\n", - " 494: '⌊((55*√5)*5)-5!⌋',\n", - " 495: '(⌊55/.55⌋*5)',\n", - " 496: '⌊555/(√5*.5)⌋',\n", - " 497: '⌈555/(√5*.5)⌉',\n", - " 498: '(⌈555/√5⌉/.5)',\n", - " 499: '⌊(55/.55)*5⌋',\n", - " 500: '(555-55)',\n", - " 501: '⌊555-(5!/√5)⌋',\n", - " 502: '⌈555-(5!/√5)⌉',\n", - " 503: '⌊⌈5.5^5⌉/(5+5)⌋',\n", - " 504: '⌈⌈5.5^5⌉/(5+5)⌉',\n", - " 505: '((55*⌊√55⌋)+5!)',\n", - " 506: '((((5^5)+5)/5)-5!)',\n", - " 507: '⌊((5.5+5!)*5)-5!⌋',\n", - " 508: '⌈((5.5+5!)*5)-5!⌉',\n", - " 509: '⌊(√55^5.5)/5!⌋',\n", - " 510: '⌈(√55^5.5)/5!⌉',\n", - " 511: '⌊(5-.55)*(5!-5)⌋',\n", - " 512: '⌊(555*√.5)+5!⌋',\n", - " 513: '⌈(555*√.5)+5!⌉',\n", - " 514: '⌈(5!/55)^⌈√55⌉⌉',\n", - " 515: '(((55*5)+5!)+5!)',\n", - " 516: '⌈⌊√5⌋^(5/.555)⌉',\n", - " 517: '⌊⌈(5/.55)^5⌉/5!⌋',\n", - " 518: '⌊555-(5^√5)⌋',\n", - " 519: '⌈555-(5^√5)⌉',\n", - " 520: '(((5!-5)*5)-55)',\n", - " 521: '⌈(5^5)/⌈5.55⌉⌉',\n", - " 522: '⌊((5+5)-.5)*55⌋',\n", - " 523: '⌈((5+5)-.5)*55⌉',\n", - " 524: '⌈((5!+5!)/55)*5!⌉',\n", - " 525: '(((55/.5)-5)*5)',\n", - " 526: '⌈(⌈5!/55⌉+.5)^5⌉',\n", - " 527: '⌊(√55*55)+5!⌋',\n", - " 528: '⌈(√55*55)+5!⌉',\n", - " 529: '(((5-.55)*5!)-5)',\n", - " 530: '(555-(5*5))',\n", - " 531: '(555-(5!/5))',\n", - " 532: '⌊5^(5-(5.5/5))⌋',\n", - " 533: '⌊(5-.555)*5!⌋',\n", - " 534: '⌈(5-.555)*5!⌉',\n", - " 535: '((55+(5!*5))-5!)',\n", - " 536: '⌊√(5!-(5*5))*55⌋',\n", - " 537: '⌊(5-(√55/5))^5⌋',\n", - " 538: '⌈(5-(√55/5))^5⌉',\n", - " 539: '(((5-.55)*5!)+5)',\n", - " 540: '((5!*5)-(55+5))',\n", - " 541: '⌊((5^5)/√55)+5!⌋',\n", - " 542: '⌊((5!-.5)*5)-55⌋',\n", - " 543: '⌊555-(5*√5)⌋',\n", - " 544: '⌈555-(5*√5)⌉',\n", - " 545: '(555-(5+5))',\n", - " 546: '((5.55*5!)-5!)',\n", - " 547: '⌊555-√55⌋',\n", - " 548: '⌈555-√55⌉',\n", - " 549: '⌊555-5.5⌋',\n", - " 550: '⌊555.5-5⌋',\n", - " 551: '⌈555.5-5⌉',\n", - " 552: '⌊555-√5.5⌋',\n", - " 553: '⌈555-√5.5⌉',\n", - " 554: '⌊555-.55⌋',\n", - " 555: '⌊555.55⌋',\n", - " 556: '⌈555.55⌉',\n", - " 557: '⌊555+√5.5⌋',\n", - " 558: '⌈555+√5.5⌉',\n", - " 559: '⌊(555+5)-.5⌋',\n", - " 560: '⌊555.5+5⌋',\n", - " 561: '⌈555.5+5⌉',\n", - " 562: '⌊555+√55⌋',\n", - " 563: '⌈555+√55⌉',\n", - " 564: '⌈(5^5)/5.55⌉',\n", - " 565: '((555+5)+5)',\n", - " 566: '⌊555+(5*√5)⌋',\n", - " 567: '⌈555+(5*√5)⌉',\n", - " 568: '⌈((5^5)-5)/5.5⌉',\n", - " 569: '⌊((5^5)+5)/5.5⌋',\n", - " 570: '(⌊5!-5.55⌋*5)',\n", - " 571: '⌈(⌊5!-5.5⌋*5)+.5⌉',\n", - " 572: '⌊(5!-5.55)*5⌋',\n", - " 573: '⌈(5!-5.55)*5⌉',\n", - " 574: '⌈((5^5)/5.5)+5⌉',\n", - " 575: '(⌈5!-5.55⌉*5)',\n", - " 576: '((5!/5)^⌊5!/55⌋)',\n", - " 577: '⌊(5.5+5)*55⌋',\n", - " 578: '⌈(5.5+5)*55⌉',\n", - " 579: '(555+(5!/5))',\n", - " 580: '(555+(5*5))',\n", - " 581: '⌈((5!-5)*5)+5.5⌉',\n", - " 582: '⌊((5!-5)*5)+√55⌋',\n", - " 583: '⌈((5!-5)*5)+√55⌉',\n", - " 584: '⌈(5!-√(55/5))*5⌉',\n", - " 585: '(⌊5!-(5!/55)⌋*5)',\n", - " 586: '⌊(5!-(.55*5))*5⌋',\n", - " 587: '(555+(⌊√5⌋^5))',\n", - " 588: '⌈(5!*5)-(√55+5)⌉',\n", - " 589: '⌊5!*(5-(5/55))⌋',\n", - " 590: '⌈5!*(5-(5/55))⌉',\n", - " 591: '⌊555+(5^√5)⌋',\n", - " 592: '⌈555+(5^√5)⌉',\n", - " 593: '⌈(5!*5)-√55.5⌉',\n", - " 594: '⌊(5!*5)-5.55⌋',\n", - " 595: '⌈(5!*5)-5.55⌉',\n", - " 596: '⌈√(5+5)^5.55⌉',\n", - " 597: '⌊(5!-.555)*5⌋',\n", - " 598: '⌈(5!-.555)*5⌉',\n", - " 599: '⌊(5!*5)-.555⌋',\n", - " 600: '(⌊5.555⌋!*5)',\n", - " 601: '⌈.555+(5!*5)⌉',\n", - " 602: '⌊(.555+5!)*5⌋',\n", - " 603: '⌈(.555+5!)*5⌉',\n", - " 604: '(⌊55*5.5⌋/.5)',\n", - " 605: '((55*55)/5)',\n", - " 606: '⌈5.55+(5!*5)⌉',\n", - " 607: '⌊√55.5+(5!*5)⌋',\n", - " 608: '⌊555+(5!/√5)⌋',\n", - " 609: '⌈555+(5!/√5)⌉',\n", - " 610: '(555+55)',\n", - " 611: '⌈555+(√5^5)⌉',\n", - " 612: '⌊(√55+(5!*5))+5⌋',\n", - " 613: '⌊((.55*5)+5!)*5⌋',\n", - " 614: '(((5^5)-55)/5)',\n", - " 615: '(555+(5!*.5))',\n", - " 616: '(⌊5!-√55⌋*5.5)',\n", - " 617: '⌊((5^5)/5)-√55⌋',\n", - " 618: '⌈((5^5)/5)-√55⌉',\n", - " 619: '⌊⌊555*.5⌋*√5⌋',\n", - " 620: '⌊(55.5*√5)*5⌋',\n", - " 621: '⌈(55.5*√5)*5⌉',\n", - " 622: '⌈⌈555*.5⌉*√5⌉',\n", - " 623: '⌊((5^5)-5.5)/5⌋',\n", - " 624: '⌊((5^5)-.55)/5⌋',\n", - " 625: '(5^⌊555/5!⌋)',\n", - " 626: '⌈((5^5)/5)+.55⌉',\n", - " 627: '⌊(5.55+5!)*5⌋',\n", - " 628: '⌈(5.55+5!)*5⌉',\n", - " 629: '⌊(5!-5.5)*5.5⌋',\n", - " 630: '(⌈5.55+5!⌉*5)',\n", - " 631: '⌈((5^5)/5)+5.5⌉',\n", - " 632: '⌊⌈5!-5.5⌉*5.5⌋',\n", - " 633: '⌈⌈5!-5.5⌉*5.5⌉',\n", - " 634: '⌊√⌈5.55*5⌉*5!⌋',\n", - " 635: '⌈√⌈5.55*5⌉*5!⌉',\n", - " 636: '((55+(5^5))/5)',\n", - " 637: '⌊(√55.5+5!)*5⌋',\n", - " 638: '⌊5.55*(5!-5)⌋',\n", - " 639: '⌈5.55*(5!-5)⌉',\n", - " 640: '(⌊55*√5.5⌋*5)',\n", - " 641: '⌈(√(5!-55)+5!)*5⌉',\n", - " 642: '⌊((√55+5!)*5)+5⌋',\n", - " 643: '⌈((√55+5!)*5)+5⌉',\n", - " 644: '⌊(55*√5.5)*5⌋',\n", - " 645: '⌈(55*√5.5)*5⌉',\n", - " 646: '⌈((5/.55)+5!)*5⌉',\n", - " 647: '⌊(5!-√5.5)*5.5⌋',\n", - " 648: '((⌊55*.5⌋/5)*5!)',\n", - " 649: '⌊5.55*⌊5!-√5⌋⌋',\n", - " 650: '((55+(5!*5))-5)',\n", - " 651: '⌊(((5^5)*5)*5)/5!⌋',\n", - " 652: '⌊((5.5+5!)+5)*5⌋',\n", - " 653: '⌈((5.5+5!)+5)*5⌉',\n", - " 654: '⌊⌊5!-.55⌋*5.5⌋',\n", - " 655: '⌊55.5+(5!*5)⌋',\n", - " 656: '⌈55.5+(5!*5)⌉',\n", - " 657: '⌈(5!-.55)*5.5⌉',\n", - " 658: '⌈√⌊55*.55⌋*5!⌉',\n", - " 659: '⌊(5.5*5!)-.55⌋',\n", - " 660: '(⌊√55+5⌋*55)',\n", - " 661: '((5.55*5!)-5)',\n", - " 662: '⌊((√55+5)+5!)*5⌋',\n", - " 663: '⌊(.55+5!)*5.5⌋',\n", - " 664: '⌊⌈5.5⌉!-55.5⌋',\n", - " 665: '(⌈5.55⌉!-55)',\n", - " 666: '⌊5.555*5!⌋',\n", - " 667: '⌈5.555*5!⌉',\n", - " 668: '⌊5.55*(5!+.5)⌋',\n", - " 669: '⌈5.55*(5!+.5)⌉',\n", - " 670: '((555+5!)-5)',\n", - " 671: '((5.55*5!)+5)',\n", - " 672: '⌊(555-√5)+5!⌋',\n", - " 673: '⌈(555-√5)+5!⌉',\n", - " 674: '⌊(555+5!)-.5⌋',\n", - " 675: '⌊555.5+5!⌋',\n", - " 676: '⌈555.5+5!⌉',\n", - " 677: '⌊(555+√5)+5!⌋',\n", - " 678: '⌈(555+√5)+5!⌉',\n", - " 679: '⌈⌊5.5^5⌋/√55⌉',\n", - " 680: '((555+5!)+5)',\n", - " 681: '⌈((5/√55)+5)*5!⌉',\n", - " 682: '⌊(√55+5)*55⌋',\n", - " 683: '⌈(√55+5)*55⌉',\n", - " 684: '(⌊5!-5.5⌋*⌈5.5⌉)',\n", - " 685: '(⌊(55*5)*.5⌋*5)',\n", - " 686: '⌊555*(√5-⌈.5⌉)⌋',\n", - " 687: '⌊((55*5)*5)*.5⌋',\n", - " 688: '⌈((55*5)*5)*.5⌉',\n", - " 689: '⌈((5^5)/5.5)+5!⌉',\n", - " 690: '⌊(5.5+5!)*5.5⌋',\n", - " 691: '⌈(5.5+5!)*5.5⌉',\n", - " 692: '⌊((5!+5)*5.5)+5⌋',\n", - " 693: '⌊5.55*(5!+5)⌋',\n", - " 694: '⌈5.55*(5!+5)⌉',\n", - " 695: '(⌈5.55⌉!-(5*5))',\n", - " 696: '(⌈5.55⌉!-(5!/5))',\n", - " 697: '⌈((√55*.5)^5)-5⌉',\n", - " 698: '⌊⌈5^5.5⌉/(5+5)⌋',\n", - " 699: '⌈⌈5^5.5⌉/(5+5)⌉',\n", - " 700: '((⌈55*.5⌉*5)*5)',\n", - " 701: '⌈(√55+5!)*5.5⌉',\n", - " 702: '⌊(5^5)/(5-.55)⌋',\n", - " 703: '⌈(5^5)/(5-.55)⌉',\n", - " 704: '(⌈√55+5!⌉*5.5)',\n", - " 705: '⌈(5^(5.5/5))*5!⌉',\n", - " 706: '⌊⌈5.55⌉*(5!-√5)⌋',\n", - " 707: '⌈⌈5.55⌉*(5!-√5)⌉',\n", - " 708: '⌊⌈5.55⌉!-(5*√5)⌋',\n", - " 709: '(⌈5.5⌉!-(55/5))',\n", - " 710: '(⌈5.55⌉!-(5+5))',\n", - " 711: '⌈⌈5.5⌉!-(5/.55)⌉',\n", - " 712: '⌊⌈5.55⌉!-√55⌋',\n", - " 713: '⌈⌈5.55⌉!-√55⌉',\n", - " 714: '⌊⌈5.5⌉!-5.55⌋',\n", - " 715: '(⌈5.555⌉!-5)',\n", - " 716: '⌊(5!-.55)*⌈5.5⌉⌋',\n", - " 717: '⌊⌈5.555⌉!-√5⌋',\n", - " 718: '⌈⌈5.555⌉!-√5⌉',\n", - " 719: '⌊⌈5.5⌉!-.555⌋',\n", - " 720: '⌈5.5555⌉!',\n", - " 721: '⌈⌈5.55⌉!+.55⌉',\n", - " 722: '⌊⌈5.555⌉!+√5⌋',\n", - " 723: '⌈⌈5.555⌉!+√5⌉',\n", - " 724: '⌈5^((5/.55)-5)⌉',\n", - " 725: '(⌈5.555⌉!+5)',\n", - " 726: '⌈5.55+⌈5.5⌉!⌉',\n", - " 727: '⌊⌈5.55⌉!+√55⌋',\n", - " 728: '⌈⌈5.55⌉!+√55⌉',\n", - " 729: '(⌈5!/55⌉^⌈5.5⌉)',\n", - " 730: '((⌈5.55⌉!+5)+5)',\n", - " 731: '((55/5)+⌈5.5⌉!)',\n", - " 732: '(((5.5/5)+5)*5!)',\n", - " 733: '⌈(√55+⌈5.5⌉!)+5⌉',\n", - " 734: '⌊((55*√5)*5)+5!⌋',\n", - " 735: '(⌊(55*.5)+5!⌋*5)',\n", - " 736: '⌊√5.5^√(55+5)⌋',\n", - " 737: '⌊((55*.5)+5!)*5⌋',\n", - " 738: '⌈((55*.5)+5!)*5⌉',\n", - " 739: '⌈⌈(5!*5)*√5⌉*.55⌉',\n", - " 740: '(⌈(55*.5)+5!⌉*5)',\n", - " 741: '⌊(5!/5.5)+⌈5.5⌉!⌋',\n", - " 742: '⌈(5!/5.5)+⌈5.5⌉!⌉',\n", - " 743: '⌊⌈5!^√5⌉/(55+5)⌋',\n", - " 744: '(⌈5.55⌉!+(5!/5))',\n", - " 745: '(⌈5.55⌉!+(5*5))',\n", - " 746: '((((5^5)+5)/5)+5!)',\n", - " 747: '⌊((5.5+5!)*5)+5!⌋',\n", - " 748: '⌈((5.5+5!)*5)+5!⌉',\n", - " 749: '⌈(√55^(5*.5))*5⌉',\n", - " 750: '(⌈5.55⌉*(5!+5))',\n", - " 751: '⌊(5/.55)^⌈5*.5⌉⌋',\n", - " 752: '⌊((5!-5)*5.5)+5!⌋',\n", - " 753: '((5.5+5!)*⌈5.5⌉)',\n", - " 754: '⌊(√⌈55*.5⌉*5!)+5!⌋',\n", - " 755: '(((55+5!)*5)-5!)',\n", - " 756: '⌈(55/5)^(5-√5)⌉',\n", - " 757: '⌈(55*.5)^⌊5*.5⌋⌉',\n", - " 758: '⌈(√55*5)+⌈5.5⌉!⌉',\n", - " 759: '⌈√⌊√55*5.5⌋*5!⌉',\n", - " 760: '⌊((5-√5)*55)*5⌋',\n", - " 761: '⌈((5-√5)*55)*5⌉',\n", - " 762: '(⌊√55+5!⌋*⌈5.5⌉)',\n", - " 763: '⌈(5!^(.55+.5))*5⌉',\n", - " 764: '⌊(√55+5!)*⌈5.5⌉⌋',\n", - " 765: '(⌈(5-√5)*55⌉*5)',\n", - " 766: '⌊((5*5)-5.5)^√5⌋',\n", - " 767: '⌈((5*5)-5.5)^√5⌉',\n", - " 768: '⌊√⌈5.55⌉^√55⌋',\n", - " 769: '⌊55^√(.55*5)⌋',\n", - " 770: '((55+⌈5.5⌉!)-5)',\n", - " 771: '⌈(5.55*5)^⌊√5⌋⌉',\n", - " 772: '⌊((5*.5)^5.5)*5⌋',\n", - " 773: '⌊(√55.5*5!)-5!⌋',\n", - " 774: '⌈(√55.5*5!)-5!⌉',\n", - " 775: '(⌈5.55⌉!+55)',\n", - " 776: '⌈55.5+⌈5.5⌉!⌉',\n", - " 777: '⌊(555-5)/√.5⌋',\n", - " 778: '⌈(555-5)/√.5⌉',\n", - " 779: '⌊(555/√.5)-5⌋',\n", - " 780: '((55+⌈5.5⌉!)+5)',\n", - " 781: '⌊(5^5)/⌊5-.55⌋⌋',\n", - " 782: '⌈(5^5)/⌊5-.55⌋⌉',\n", - " 783: '⌊⌊555-.5⌋/√.5⌋',\n", - " 784: '⌊555*√⌊5*.5⌋⌋',\n", - " 785: '⌊555.5/√.5⌋',\n", - " 786: '((5.55*5!)+5!)',\n", - " 787: '⌈((.55*5)^5)*5⌉',\n", - " 788: '⌈(55+5!)*(5-.5)⌉',\n", - " 789: '⌊(555/√.5)+5⌋',\n", - " 790: '⌈(555/√.5)+5⌉',\n", - " 791: '⌊(555+5)/√.5⌋',\n", - " 792: '⌈(555+5)/√.5⌉',\n", - " 793: '⌈(5.5/5)*⌈5.5⌉!⌉',\n", - " 794: '(⌊(5+√5)*55⌋/.5)',\n", - " 795: '((555+5!)+5!)',\n", - " 796: '⌈55^(5/⌈5*.5⌉)⌉',\n", - " 797: '⌊((5*5)+5!)*5.5⌋',\n", - " 798: '(555+(⌈√5⌉^5))',\n", - " 799: '⌈⌈5!^√⌈5!/55⌉⌉/5⌉',\n", - " 800: '(((5+5)^5)/(5!+5))',\n", - " 801: '⌊(5!-5.5)*⌊√55⌋⌋',\n", - " 802: '⌈(5!-5.5)*⌊√55⌋⌉',\n", - " 803: '⌊(5!^√5)/55.5⌋',\n", - " 804: '⌈(5!^√5)/55.5⌉',\n", - " 805: '⌈√(55-(5+5))*5!⌉',\n", - " 806: '⌊(5-.5)^(5-.55)⌋',\n", - " 807: '⌊((5!+5)*5.5)+5!⌋',\n", - " 808: '⌈((5!+5)*5.5)+5!⌉',\n", - " 809: '⌊(√(55+5)*5!)-5!⌋',\n", - " 810: '⌊⌊(5!^√5)+5⌋/55⌋',\n", - " 811: '⌈⌊(5!^√5)+5⌋/55⌉',\n", - " 812: '⌈(5^√⌊5.5+5⌋)*5⌉',\n", - " 813: '⌊((5+√5)*5!)-55⌋',\n", - " 814: '(⌊√55*55⌋/.5)',\n", - " 815: '⌊(√55*55)/.5⌋',\n", - " 816: '⌈(√55*55)/.5⌉',\n", - " 817: '⌊5^((5/⌈5.5⌉)*5)⌋',\n", - " 818: '⌊(5!/.55)+(5!*5)⌋',\n", - " 819: '⌈(5!/.55)+(5!*5)⌉',\n", - " 820: '(((55*5)*⌈√5⌉)-5)',\n", - " 821: '⌊5!/(√.5^5.55)⌋',\n", - " 822: '⌊√⌊55-√55⌋*5!⌋',\n", - " 823: '⌊555+(5!*√5)⌋',\n", - " 824: '⌈555+(5!*√5)⌉',\n", - " 825: '(((5+5)+5)*55)',\n", - " 826: '⌊(5!*5)^(.55+.5)⌋',\n", - " 827: '⌊(5-.55)^(5-.5)⌋',\n", - " 828: '⌈(5-.55)^(5-.5)⌉',\n", - " 829: '⌈(((5+5)^5)/5!)-5⌉',\n", - " 830: '(⌊55.5*⌈√5⌉⌋*5)',\n", - " 831: '(⌊555*.5⌋*⌈√5⌉)',\n", - " 832: '⌊555*(⌈.5⌉+.5)⌋',\n", - " 833: '⌈555*(⌈.5⌉+.5)⌉',\n", - " 834: '⌊(√55*5!)-55⌋',\n", - " 835: '⌈(√55*5!)-55⌉',\n", - " 836: '⌊(5!-.55)*⌊√55⌋⌋',\n", - " 837: '⌈(5!-.55)*⌊√55⌋⌉',\n", - " 838: '⌊⌊5.5^5⌋/⌈5.5⌉⌋',\n", - " 839: '⌈⌊5.5^5⌋/⌈5.5⌉⌉',\n", - " 840: '(⌈5.555⌉!+5!)',\n", - " 841: '⌈(⌈5.5⌉!+.55)+5!⌉',\n", - " 842: '⌊(55*√5)+⌈5.5⌉!⌋',\n", - " 843: '⌊(√(55-5)*5!)-5⌋',\n", - " 844: '⌊√(55-5.5)*5!⌋',\n", - " 845: '((⌈5.55⌉!+5!)+5)',\n", - " 846: '⌈⌊5!-5.5⌋*√55⌉',\n", - " 847: '⌊(√55*(5!-5))-5⌋',\n", - " 848: '⌊√⌊55.5-5⌋*5!⌋',\n", - " 849: '⌈√⌊55.5-5⌋*5!⌉',\n", - " 850: '(((55+5!)-5)*5)',\n", - " 851: '⌈5!^((5/5.5)+.5)⌉',\n", - " 852: '⌊⌈5!-5.5⌉*√55⌋',\n", - " 853: '⌈⌈5!-5.5⌉*√55⌉',\n", - " 854: '⌈(√(55-5)*5!)+5⌉',\n", - " 855: '⌈(5.55^⌈√5⌉)*5⌉',\n", - " 856: '⌊√55.5*(5!-5)⌋',\n", - " 857: '⌈√55.5*(5!-5)⌉',\n", - " 858: '⌈(√55*(5!-5))+5⌉',\n", - " 859: '⌊55^(√5-.55)⌋',\n", - " 860: '⌈55^(√5-.55)⌉',\n", - " 861: '⌊((5!/55)+5)*5!⌋',\n", - " 862: '⌈((5!/55)+5)*5!⌉',\n", - " 863: '⌈5^(⌊5!/5.5⌋/5)⌉',\n", - " 864: '⌊(√55*5!)-(5*5)⌋',\n", - " 865: '(⌊55*√(5+5)⌋*5)',\n", - " 866: '⌈(√55*5!)-(5!/5)⌉',\n", - " 867: '⌊((√5-.5)^5)*55⌋',\n", - " 868: '⌊(√⌊5.55⌋+5)*5!⌋',\n", - " 869: '⌊(55*√(5+5))*5⌋',\n", - " 870: '((555-5!)/.5)',\n", - " 871: '⌊5!^√⌊.555*5⌋⌋',\n", - " 872: '⌊((55+5!)-.5)*5⌋',\n", - " 873: '⌈((55+5!)-.5)*5⌉',\n", - " 874: '⌊((55+5!)*5)-.5⌋',\n", - " 875: '(⌊55.5+5!⌋*5)',\n", - " 876: '⌈((55+5!)*5)+.5⌉',\n", - " 877: '⌊(55.5+5!)*5⌋',\n", - " 878: '⌈(55.5+5!)*5⌉',\n", - " 879: '⌊(√55*5!)-(5+5)⌋',\n", - " 880: '(⌈55.5+5!⌉*5)',\n", - " 881: '⌊√⌊55-.55⌋*5!⌋',\n", - " 882: '⌊⌊5!-.55⌋*√55⌋',\n", - " 883: '⌈⌊5!-.55⌋*√55⌉',\n", - " 884: '⌊(√55*5!)-5.5⌋',\n", - " 885: '⌊(5!-.55)*√55⌋',\n", - " 886: '⌈(5!-.55)*√55⌉',\n", - " 887: '⌈(⌈5.5^5⌉/5)-5!⌉',\n", - " 888: '⌊⌊√55*5!⌋-.55⌋',\n", - " 889: '⌊(55/√55)*5!⌋',\n", - " 890: '⌈(55/√55)*5!⌉',\n", - " 891: '⌈⌈√55*5!⌉+.55⌉',\n", - " 892: '⌈(5!^√5)/(55-5)⌉',\n", - " 893: '⌊√55.5*⌊5.5⌋!⌋',\n", - " 894: '⌊(.55+5!)*√55⌋',\n", - " 895: '⌊(√55*5!)+5.5⌋',\n", - " 896: '⌈(√55*5!)+5.5⌉',\n", - " 897: '⌊√⌈55.55⌉*5!⌋',\n", - " 898: '⌈√⌈55.55⌉*5!⌉',\n", - " 899: '⌈(√55.5*5!)+5⌉',\n", - " 900: '(((55+5)+5!)*5)',\n", - " 901: '⌊√55.5*⌈5!+.5⌉⌋',\n", - " 902: '⌊(5-(5.5/5))^5⌋',\n", - " 903: '⌈(5-(5.5/5))^5⌉',\n", - " 904: '⌊⌊55*√5⌋*√55⌋',\n", - " 905: '⌈⌊55*√5⌋*√55⌉',\n", - " 906: '(⌊55*5.5⌋*⌈√5⌉)',\n", - " 907: '⌊(55*5.5)*⌈√5⌉⌋',\n", - " 908: '⌈(55*5.5)*⌈√5⌉⌉',\n", - " 909: '(⌈55*5.5⌉*⌈√5⌉)',\n", - " 910: '⌊⌊√55*55⌋*√5⌋',\n", - " 911: '⌈⌊√55*55⌋*√5⌉',\n", - " 912: '⌊⌈55*√5⌉*√55⌋',\n", - " 913: '⌈⌈55*√5⌉*√55⌉',\n", - " 914: '⌊⌊5.5^5⌋/5.5⌋',\n", - " 915: '⌊5.5^⌊5-.55⌋⌋',\n", - " 916: '⌈5.5^⌊5-.55⌋⌉',\n", - " 917: '⌈√55.5*⌈5!+√5⌉⌉',\n", - " 918: '⌊(√5.5+5)*(5!+5)⌋',\n", - " 919: '⌊(55+5)^(5/⌈√5⌉)⌋',\n", - " 920: '⌊(5.5^⌊5-.5⌋)+5⌋',\n", - " 921: '⌊(5*.5)^√55.5⌋',\n", - " 922: '⌊(√55*(5!+5))-5⌋',\n", - " 923: '⌊((5+√5)*5!)+55⌋',\n", - " 924: '⌈((5+√5)*5!)+55⌉',\n", - " 925: '(((5!-55)+5!)*5)',\n", - " 926: '⌈⌊5^√(55*.5)⌋/5⌉',\n", - " 927: '⌊((√55*5)*5)*5⌋',\n", - " 928: '⌈((√55*5)*5)*5⌉',\n", - " 929: '⌊√⌊55.5+5⌋*5!⌋',\n", - " 930: '⌊(5.5+5!)*√55⌋',\n", - " 931: '⌈(5.5+5!)*√55⌉',\n", - " 932: '⌈√55.5*(5!+5)⌉',\n", - " 933: '⌊√(55.5+5)*5!⌋',\n", - " 934: '⌈√(55.5+5)*5!⌉',\n", - " 935: '(⌈5!/√55⌉*55)',\n", - " 936: '⌈√⌈55.5⌉*(5!+5)⌉',\n", - " 937: '⌊√⌈55.5+5⌉*5!⌋',\n", - " 938: '⌈√⌈55.5+5⌉*5!⌉',\n", - " 939: '⌊5.5/(.5^√55)⌋',\n", - " 940: '⌈5.5/(.5^√55)⌉',\n", - " 941: '⌊⌊√55+5!⌋*√55⌋',\n", - " 942: '⌊⌈5^5.5⌉/√55⌋',\n", - " 943: '⌈⌈5^5.5⌉/√55⌉',\n", - " 944: '⌊(√55*5!)+55⌋',\n", - " 945: '⌈(√55*5!)+55⌉',\n", - " 946: '⌈√((5.5+5)+5)^5⌉',\n", - " 947: '⌊((5+5)^√5)*5.5⌋',\n", - " 948: '⌊5.55^⌊5-.5⌋⌋',\n", - " 949: '⌈5.55^⌊5-.5⌋⌉',\n", - " 950: '((⌈√55*5⌉*5)*5)',\n", - " 951: '⌊⌈(5+5)^√5⌉*5.5⌋',\n", - " 952: '⌊√⌈√55+55⌉*5!⌋',\n", - " 953: '⌈√⌈√55+55⌉*5!⌉',\n", - " 954: '⌊(555+5!)/√.5⌋',\n", - " 955: '⌊(√55+.55)*5!⌋',\n", - " 956: '⌈(√55+.55)*5!⌉',\n", - " 957: '⌊(5^5)/(5.5-√5)⌋',\n", - " 958: '⌈(5^5)/(5.5-√5)⌉',\n", - " 959: '⌊(⌈√55⌉*5!)-.55⌋',\n", - " 960: '(⌈55/√55⌉*5!)',\n", - " 961: '⌊555*√⌈5*.5⌉⌋',\n", - " 962: '⌊(55+5!)*5.5⌋',\n", - " 963: '⌈(55+5!)*5.5⌉',\n", - " 964: '⌈555*(√5-.5)⌉',\n", - " 965: '⌊(5!/5.55)^√5⌋',\n", - " 966: '⌈(5!/5.55)^√5⌉',\n", - " 967: '⌊√((55+5)+5)*5!⌋',\n", - " 968: '⌊(5!^(5.5/5))*5⌋',\n", - " 969: '((⌊5-.5⌋^5)-55)',\n", - " 970: '(⌈5!^(5.5/5)⌉*5)',\n", - " 971: '⌈((5/.55)*5!)-5!⌉',\n", - " 972: '⌊(555-5!)*√5⌋',\n", - " 973: '⌈(555-5!)*√5⌉',\n", - " 974: '⌊√⌊.555*5!⌋*5!⌋',\n", - " 975: '⌈√⌊.555*5!⌋*5!⌉',\n", - " 976: '(⌊55*√5⌋*⌈√55⌉)',\n", - " 977: '⌈((5*.5)^5)*(5+5)⌉',\n", - " 978: '⌊⌈(5*√5)+5!⌉*√55⌋',\n", - " 979: '⌊(√⌊5.5+5⌋+5)*5!⌋',\n", - " 980: '(⌈(5*.5)^5⌉*(5+5))',\n", - " 981: '⌊((5-.5)/.55)*5!⌋',\n", - " 982: '⌊((5.5^5)-5!)/5⌋',\n", - " 983: '⌈((5.5^5)-5!)/5⌉',\n", - " 984: '⌈(55*⌈√55⌉)*√5⌉',\n", - " 985: '⌊⌈5!/.55⌉*(5-.5)⌋',\n", - " 986: '⌈⌈5!/.55⌉*(5-.5)⌉',\n", - " 987: '⌊√⌈5*√5⌉^5.55⌋',\n", - " 988: '⌊(⌈5.55⌉+√5)*5!⌋',\n", - " 989: '⌊5^(5!/⌈55*.5⌉)⌋',\n", - " 990: '((555/.5)-5!)',\n", - " 991: '⌊((5.5-√5)+5)*5!⌋',\n", - " 992: '⌈((5.5-√5)+5)*5!⌉',\n", - " 993: '⌊((5^5)/√(5+5))+5⌋',\n", - " 994: '⌊(√(.55*5)*5!)*5⌋',\n", - " 995: '(((55+5!)*5)+5!)',\n", - " 996: '⌊√⌈(5!+5)*.55⌉*5!⌋',\n", - " 997: '⌊(√(55/5)+5)*5!⌋',\n", - " 998: '⌈(√(55/5)+5)*5!⌉',\n", - " 999: '⌈⌈5^5.5⌉/⌊√55⌋⌉',\n", - " ...}" - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "clear()\n", - "\n", - "%time makeable(five5s)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "The output got truncated by Jupyter Notebook after 1000 entries. Let's see what the first unmakeable integer actually is:" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "23308" - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unmakeable(five5s)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "I think we've conquered the five 5s problem!\n", - "\n", "\n", "# Countdown to 2018\n", "\n", - "On January 1 2018, [Michael Littman](http://cs.brown.edu/~mlittman/) posted this:\n", + "One more thing: On January 1 2018, [Michael Littman](http://cs.brown.edu/~mlittman/) posted this:\n", "\n", - "> `2+0+1x8, 2+0-1+8, (2+0-1)x8, |2-0-1-8|, -2-0+1x8, -(2+0+1-8), sqrt(|2+0-18|), 2+0+1^8, 20-18, 2^(0x18), 2x0x1x8`... Happy New Year!\n", + "> 2+0+1×8, 2+0-1+8, (2+0-1)×8, |2-0-1-8|, -2-0+1×8, -(2+0+1-8), sqrt(|2+0-18|), 2+0+1^8, 20-18, 2^(0×18), 2×0×1×8... Happy New Year!\n", "\n", - "Can we replicate that countdown, using the four digits of the year, in order, with operators and parens to evaluate each of the numbers from 10 to 1? I'm assuming Michael is disallowing floor and ceil, but allowing our other operators." + "Can we replicate that countdown?" ] }, { "cell_type": "code", - "execution_count": 75, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'(20*.1)+8, (2.0-1)+8, (2.0-1)*8, (-2.0+1)+8, √(20*1.8), (-2.0-1)+8, √(-2.0+18), 2.0+(1^8), 20-18, (2.0-1)^8, (2*0)*18'" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "clear()\n", - "floor_ceil_allowed = False\n", - "\n", - "def littman_countdown(year):\n", - " \"Return a Littman countdown for the year.\"\n", - " return ', '.join(littman(year, i) for i in range(10, -1, -1))\n", - "\n", - "def littman(year, i):\n", - " \"Return a string that makes i with the digits of year.\"\n", - " digits = tuple(map(int, str(year)))\n", - " return unbracket(expressions(digits).get(i, '???'))\n", - "\n", - "littman_countdown(2018)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Similar results, with some alternatives for some numbers.\n", - "\n", - "Let's look at the decade:" - ] - }, - { - "cell_type": "code", - "execution_count": 76, + "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "20/(1+1), 20-11, (-.20+1)/.1, (2.0+1)!+1, √(20-11)!, (2.0+1)!-1, (2.0+1)+1, √(20-11), 2+(0*11), (2.0-1)*1, (2*0)*11 ... Happy New Year 2011!\n", - "-2.0+12, (2.0+1)^2, 20-12, 2.0+(1/.2), (2.0+1)*2, (2.0+1)+2, (20*1)*.2, (2.0-1)+2, 2+(0*12), (2.0+1)-2, (2*0)*12 ... Happy New Year 2012!\n", - "20/(-1+3), (2.0+1)*3, 2.0*(1+3), 20-13, (20*1)*.3, 20/(1+3), (2.0-1)+3, (2.0-1)*3, 2+(0*13), (2.0+1)/3, (2*0)*13 ... Happy New Year 2013!\n", - "2.0*(1+4), √((2.0+1)^4), (20*1)*.4, (2.0+1)+4, 20-14, (20*1)/4, 20/(1+4), (-20-1)+4!, 2+(0*14), .20*(1+4), (2*0)*14 ... Happy New Year 2014!\n", - "(20*1)*.5, √(201-5!), (2.0+1)+5, (20*.1)+5, (20*.15)!, 20-15, (20*1)/5, 20*.15, 2+(0*15), (.20*1)*5, (2*0)*15 ... Happy New Year 2015!\n", - "2.0*(-1+6), (2.0+1)+6, (20*.1)+6, (2.0-1)+6, √(20+16), 20/√16, 20-16, 2.0+(1^6), 2+(0*16), (2.0-1)^6, (2*0)*16 ... Happy New Year 2016!\n", - "(2.0+1)+7, (20*.1)+7, (2.0-1)+7, (2.0-1)*7, (20-17)!, (-2.0*1)+7, (-2.0-1)+7, 20-17, 2+(0*17), (2.0-1)^7, (2*0)*17 ... Happy New Year 2017!\n", - "(20*.1)+8, (2.0-1)+8, (2.0-1)*8, (-2.0+1)+8, √(20*1.8), (-2.0-1)+8, √(-2.0+18), 2.0+(1^8), 20-18, (2.0-1)^8, (2*0)*18 ... Happy New Year 2018!\n", - "20-(1+9), (2.0-1)*9, (-2.0+1)+9, (-2.0*1)+9, (-2.0-1)+9, 20/(1+√9), (2.0-1)+√9, 2.0+(1^9), 2+(0*19), 20-19, (2*0)*19 ... Happy New Year 2019!\n" + "2.0+(1*8), (2*0)+(1+8), (2*0)+(1*8), ((2*0)-1)+8, (2*(0-1))+8, -2+((0-1)+8), 20*(1-.8), 2.0+(1^8), 20-18, 2^(0*18), 2*(0*18) ... Happy New Year!\n" ] } ], "source": [ - "for y in range(2011, 2020):\n", - " print('{} ... Happy New Year {}!'.format(littman_countdown(y), y))" + "def littman_countdown(year):\n", + " \"Return a Littman countdown for the year, given as a tuple of numbers.\"\n", + " return ', '.join(unbracket(expressions(year)[i])\n", + " for i in reversed(range(11)))\n", + "\n", + "print(littman_countdown((2, 0, 1, 8)), '... Happy New Year!')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similar results, with some alternatives for some numbers. Let's get ready for next year:" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "20-(1+9), (2*0)+(1*9), ((2*0)-1)+9, (2*(0-1))+9, -2+((0-1)+9), 20/(1+√9), (2*0)+(1+√9), 2+(0.1+.9), 2+(0*19), 20-19, 2*(0*19) ... Happy New Year!\n" + ] + } + ], + "source": [ + "print(littman_countdown((2, 0, 1, 9)), '... Happy New Year!')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# What's Next?\n", + "\n", + "One exercise would be adding even more operators, such as:\n", + "\n", + "- **Floor and Ceiling**: `⌊5.5⌋ == 5, ⌈5.5⌉ == 6`\n", + "- **Nth root**: `3√8 == 2`\n", + "- **Percent**: `5% == 5/100`\n", + "- **Repeating decimal**: `.4_ == .44444444... = 4/9`\n", + "- **Transcendental functions**: `log, sin, cos, tan, arcsin, ...` \n", + "\n", + "What would you like to do?" ] } ], diff --git a/ipynb/Economics.ipynb b/ipynb/Economics.ipynb index 84ef6a5..287f651 100644 --- a/ipynb/Economics.ipynb +++ b/ipynb/Economics.ipynb @@ -48,7 +48,7 @@ "N = 5000 # Default size of the population\n", "MU = 100. # Default mean of the population\n", "\n", - "population = [random.gauss(mu=MU, sigma=MU/5) for actor in range(N)]" + "population = [random.gauss(mu=MU, sigma=MU/5) for _ in range(N)]" ] }, { @@ -69,7 +69,7 @@ "Switzerland 0.337\n", "United States 0.408\n", "Chile 0.521\n", - "South Africe 0.631\n", + "South Africa 0.631\n", "\n", "\n", "\n", @@ -182,7 +182,7 @@ "outputs": [], "source": [ "def random_split(A, B):\n", - " \"Take all the money uin the pot and divide it randomly between the two actors.\"\n", + " \"Take all the money in the pot and divide it randomly between the two actors.\"\n", " pot = A + B\n", " share = random.uniform(0, pot)\n", " return share, pot - share" @@ -326,7 +326,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# SImulation Visualization\n", + "# Simulation Visualization\n", "\n", "If we want to do larger simulations we'll need a better way to visualize the results.\n", "The function `show` does that:" diff --git a/ipynb/Euler's Conjecture.ipynb b/ipynb/Euler's Conjecture.ipynb new file mode 100644 index 0000000..e40c82f --- /dev/null +++ b/ipynb/Euler's Conjecture.ipynb @@ -0,0 +1,163 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Euler's Sum of Powers Conjecture\n", + "\n", + "In 1769, Leonhard Euler [conjectured that](https://en.wikipedia.org/wiki/Euler%27s_sum_of_powers_conjecture) for all integers *n* and *k* greater than 1, if the sum of *n* *k*th powers of positive integers is itself a *k*th power, then *n* is greater than or equal to *k*. For example, this would mean that no sum of a pair of cubes (a3 + b3) can be equal to another cube (c3), but a sum of three cubes can, as in 33 + 43 + 53 = 63. \n", + "\n", + "It took 200 years to disprove the conjecture: in 1966 L. J. Lander and T. R. Parkin published a refreshingly short [article](https://projecteuclid.org/download/pdf_1/euclid.bams/1183528522) giving a counterexample of four fifth-powers that summed to another fifth power. They found it via a program that did an exhaustive search. Can we duplicate their work and find integers greater than 1 such that \n", + "*a*5 + *b*5 + *c*5 + *d*5 = *e*5 ?\n", + "\n", + "## Algorithm\n", + "\n", + "An exhaustive *O*(*m*4) algorithm woud be to look at all values of *a, b, c, d* < *m* and check if *a*5 + *b*5 + *c*5 + *d*5 is a fifth power. But we can do better: a sum of four numbers is a sum of two pairs of numbers, so we\n", + "are looking for\n", + "\n", + "     *pair*1 + *pair*2 = *e*5    **where**   *pair*1 = *a*5 + *b*5 **and** *pair*2 = *c*5 + *d*5.\n", + "\n", + "We will define *pairs* be a dict of `{`*a*5 + *b*5`: (`*a*5`, ` *b*5`)}` entries for all *a* ≤ *b* < *m*; for example, for *a*=2 and *b*=10, the entry is `{100032: (32, 100000)}`.\n", + "Then we can ask for each *pair*1, and for each *e*, whether there is a *pair*2 in the `dict` that makes the equation work. There are *O*(*m*2) pairs and *O*(*m*) values of *e*, and `dict` lookup is *O*(1), so the whole algorithm is *O*(*m*3):" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import itertools\n", + "\n", + "def euler(m):\n", + " \"\"\"Yield tuples (a, b, c, d, e) such that a^5 + b^5 + c^5 + d^5 = e^5,\n", + " where all are integers, and 1 < a ≤ b ≤ c ≤ d < e < m.\"\"\"\n", + " powers = [e**5 for e in range(2, m)] \n", + " pairs = {sum(pair): pair \n", + " for pair in itertools.combinations_with_replacement(powers, 2)}\n", + " for pair1 in pairs:\n", + " for e5 in powers:\n", + " pair2 = e5 - pair1\n", + " if pair2 in pairs:\n", + " yield fifthroots(pairs[pair1] + pairs[pair2] + (e5,))\n", + " \n", + "def fifthroots(nums): \n", + " \"Sorted integer fifth roots of a collection of numbers.\" \n", + " return tuple(sorted(int(round(x ** (1/5))) for x in nums))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's look for a solution (arbitrarily choosing *m*=500):" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1.07 s, sys: 21.4 ms, total: 1.09 s\n", + "Wall time: 1.11 s\n" + ] + }, + { + "data": { + "text/plain": [ + "(27, 84, 110, 133, 144)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time next(euler(500))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That was easy, and it turns out this is the same answer that Lander and Parkin got: 275 + 845 + 1105 + 1335 = 1445.\n", + "\n", + "We can keep going, collecting all the solutions up to `*m*=1000`:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1min 53s, sys: 706 ms, total: 1min 54s\n", + "Wall time: 1min 57s\n" + ] + }, + { + "data": { + "text/plain": [ + "{(27, 84, 110, 133, 144),\n", + " (54, 168, 220, 266, 288),\n", + " (81, 252, 330, 399, 432),\n", + " (108, 336, 440, 532, 576),\n", + " (135, 420, 550, 665, 720),\n", + " (162, 504, 660, 798, 864)}" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time set(euler(1000))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All the answers are multiples of the first one (this is easiest to see in the middle column: 110, 220, 330, ...).\n", + "Since 1966 other mathematicians have found [other solutions](https://en.wikipedia.org/wiki/Euler%27s_sum_of_powers_conjecture), but all we need is one to disprove Euler's conjecture." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/ipynb/Fred Buns.ipynb b/ipynb/Fred Buns.ipynb index 72e4948..47ed555 100644 --- a/ipynb/Fred Buns.ipynb +++ b/ipynb/Fred Buns.ipynb @@ -18,13 +18,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The [June 15, 2015 post on Bike Snob NYC](http://bikesnobnyc.blogspot.com/2015/06/lets-get-this-show-on-road-once-we-all.html) leads with \"*Let's talk about bike locks.*\" Here's what I want to talk about: in my local bike shop, I saw a combination lock called *WordLock®*,\n", + "The [June 15, 2015 post](http://bikesnobnyc.blogspot.com/2015/06/lets-get-this-show-on-road-once-we-all.html) on *Bike Snob NYC* leads with \"*Let's talk about bike locks.*\" Here's what I want to talk about: in my local bike shop, I saw a combination lock called *WordLock®*,\n", "which replaces digits with letters. I classified this as a Fred lock,\n", - "\"[Fred](http://bikesnobnyc.blogspot.com/2014/06/a-fred-too-far.html)\" being the term for an amateurish cyclist with the wrong equipment.\n", + "\"[Fred](http://bikesnobnyc.blogspot.com/2014/06/a-fred-too-far.html)\" being the term for an amateurish cyclist with inappropriate equipment.\n", "I tried the combination \"FRED,\" and was amused with the result:\n", - "\n", "![](http://norvig.com/ipython/fredbuns.jpg)\n", - "\n", "FRED BUNS! Naturally I set all the other locks on the rack to FRED BUNS as well. But my curiosity was raised ... \n", "\n", "# Questions\n", @@ -36,14 +34,14 @@ "Could different letters make words in every horizontal line?\n", "5. Is it a coincidence that the phrase \"FRED BUNS\" appears, or was it planted there by mischievous WordLock® designers? \n", "\n", - "Vocabulary\n", - "===\n", + "# Vocabulary\n", + "\n", "\n", "Before we can answer the questions, we'll need to be clear about the vocabulary of the problem and how to represent concepts in code:\n", "\n", "* **Lock**: For our purposes a lock can be modeled as a `list` of 4 **tumblers**. \n", "* **Tumbler:** Each tumbler has 10 distinct letters. I will represent a tumbler as a `str` of 10 letters.\n", - "* **Combination**: Choosing a letter from each tumbler gives a combination, such as \"FRED\" or \"BUNS\". There are 104 = 10,000 combinations.\n", + "* **Combination**: Choosing a letter from each tumbler gives a combination, such as \"FRED\" or \"BUNS\". There are 410 = 10,000 combinations.\n", "* **Word**: Some combinations (such as \"BUNS\") are *words*; others (such as \"SOMN\") are not words. We'll need a collection of dictionary words.\n", "\n", "Now on to the code! First the imports I will need and the vocabulary concepts:" @@ -133,7 +131,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "I would prefer to deal with the string `'BUNS'` rather than the tuple `('B', 'U', 'N', 'S')`, so I will define a function, `combinations`, that takes a lock as input and returns a list of strings representing the combinations:" + "I would prefer to deal with the string `'BUNS'` rather than the tuple `('B', 'U', 'N', 'S')`, so I will define a function, `combinations`, that takes a lock as input and returns a set of strings representing the combinations:" ] }, { @@ -146,7 +144,7 @@ "source": [ "def combinations(lock):\n", " \"Return a list of all combinations that can be made by this lock.\"\n", - " return [Word(combo) for combo in itertools.product(*lock)]" + " return {Word(combo) for combo in itertools.product(*lock)}" ] }, { @@ -159,22 +157,22 @@ { "data": { "text/plain": [ - "['FRED',\n", - " 'FRES',\n", - " 'FRND',\n", - " 'FRNS',\n", - " 'FUED',\n", - " 'FUES',\n", - " 'FUND',\n", - " 'FUNS',\n", - " 'BRED',\n", + "{'BRED',\n", " 'BRES',\n", " 'BRND',\n", " 'BRNS',\n", " 'BUED',\n", " 'BUES',\n", " 'BUND',\n", - " 'BUNS']" + " 'BUNS',\n", + " 'FRED',\n", + " 'FRES',\n", + " 'FRND',\n", + " 'FRNS',\n", + " 'FUED',\n", + " 'FUES',\n", + " 'FUND',\n", + " 'FUNS'}" ] }, "execution_count": 5, @@ -286,7 +284,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "So that means that no lock could ever make more than 4,360 words. Let's define `words_from(lock)`:" + "So that means that no lock could ever make more than 4,360 words. Let's define `words_from(lock)` to be the intersection of the dictionary words and the words that can be made with a lock:" ] }, { @@ -299,7 +297,7 @@ "source": [ "def words_from(lock): \n", " \"A list of words that can be made by lock.\"\n", - " return [c for c in combinations(lock) if c in WORDS]" + " return WORDS & combinations(lock)" ] }, { @@ -312,7 +310,7 @@ { "data": { "text/plain": [ - "['FRED', 'FUND', 'FUNS', 'BRED', 'BUND', 'BUNS']" + "{'BRED', 'BUND', 'BUNS', 'FRED', 'FUND', 'FUNS'}" ] }, "execution_count": 11, @@ -328,8 +326,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "*Note*: An alternative is to represent a collection of words as a `set`; then `words_from` could do `return combinations(lock) & WORDS`. \n", - "\n", "I will also introduce the function `show` to print out a lock and its words:" ] }, @@ -442,7 +438,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Random Locks" + "# Baseline: Random Locks" ] }, { @@ -494,7 +490,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Wow, that's not very many words. Let's repeat 100 times and take the best one, with \"best\" determined by the function `word_count`:" + "Wow, that's not very many words. Let's repeat 100 times and take the best one, with \"best\" meaning the maximum `word_count`:" ] }, { @@ -542,7 +538,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Question 2: More Words (via Greedy Locks)" + "# Question 2: More Words (via Greedy Lock)" ] }, { @@ -563,8 +559,8 @@ "data": { "text/plain": [ "[('S', 373),\n", - " ('T', 268),\n", " ('P', 268),\n", + " ('T', 268),\n", " ('B', 267),\n", " ('D', 251),\n", " ('C', 248),\n", @@ -641,7 +637,7 @@ " # Then update words to only include the ones that can be made with this tumbler\n", " counter = Counter(word[i] for word in words)\n", " tumbler = Tumbler(L for (L, _) in counter.most_common(c))\n", - " words = [w for w in words if w[i] in tumbler]\n", + " words = {w for w in words if w[i] in tumbler}\n", " lock.append(tumbler)\n", " return lock" ] @@ -657,7 +653,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Lock: STPBDCLMAR OAIEURLHYN RNALEOTISM SETADNLKPY\n", + "Lock: SPTBDCLMAR OAIEURLHYN RNALEOTISM SETADNLKPY\n", "Count: 1177\n", "Words: AALS AEON AERY AHED AHIS AHOY AILA AILS AIMS AINS AIRN AIRS AIRT AIRY AITS ALAE ALAN ALAS ALEA ALEE ALEK ALES ALIA ALIT ALLS ALLY ALMA ALME ALMS ALOE ALTS ANAL ANAS ANAY ANES ANIL ANIS ANNA ANNE ANOA ANON ANSA ANTA ANTE ANTS ARAK AREA ARES ARIA ARID ARIE ARIL ARMS ARMY ARON ARSE ARTS ARTY AULD AUNT AURA AYAN AYES AYIN AYLA BAAL BAAS BAIL BAIT BALD BALE BALK BALL BALS BAMS BAND BANE BANK BANS BARD BARE BARK BARN BARS BASE BASK BASS BAST BATE BATS BATT BEAD BEAK BEAN BEAT BEEN BEEP BEES BEET BELL BELS BELT BEMA BEND BENE BENS BENT BERK BEST BETA BETS BIAS BILE BILK BILL BIMA BIND BINE BINS BINT BIOS BIRD BIRK BIRL BISE BISK BITE BITS BITT BLAE BLAT BLED BLET BLIN BLIP BLOT BOAS BOAT BOIL BOLA BOLD BOLE BOLL BOLT BOND BONE BONK BONY BOOK BOON BOOS BOOT BORA BORE BORK BORN BORT BOSK BOSS BOTA BOTS BOTT BRAD BRAE BRAN BRAS BRAT BRAY BREA BRED BREE BREN BRIA BRIE BRIN BRIS BRIT BROS BULK BULL BUMP BUMS BUNA BUND BUNK BUNN BUNS BUNT BUOY BURA BURD BURL BURN BURP BURS BURY BUSK BUSS BUST BUSY BUTE BUTS BUTT BYES BYRE BYRL BYTE CAEL CAID CAIN CALE CALK CALL CAME CAMP CAMS CANE CANS CANT CARA CARD CARE CARK CARL CARN CARP CARS CART CASA CASE CASK CAST CATE CATS CEES CEIL CELL CELS CELT CENT CERE CESS CETE CHAD CHAP CHAT CHAY CHIA CHID CHIN CHIP CHIS CHIT CHON CHOP CIAN CINE CION CIRE CIST CITE CITY CLAD CLAN CLAP CLAY CLIP CLOD CLON CLOP CLOT CLOY COAL COAT COED COEN COIL COIN COLA COLD COLE COLS COLT COLY COMA COME COMP CONE CONK CONN CONS CONY COOK COOL COON COOP COOS COOT CORA CORD CORE CORK CORN CORS CORY COSS COST COSY COTE COTS CRAP CRED CRIS CRIT CROP CUED CUES CULL CULT CUNT CURD CURE CURL CURN CURS CURT CUSK CUSP CUSS CUTE CUTS CYAN CYMA CYME CYST DAIS DALE DALS DAME DAMN DAMP DAMS DANA DANE DANK DANS DARE DARK DARN DART DATA DATE DEAD DEAL DEAN DEED DEEP DEES DEET DEIL DELE DELL DELS DELT DEME DEMY DENE DENS DENT DENY DEON DERE DESK DHAK DHAL DIAL DIED DIEL DIES DIET DILL DIME DIMS DINA DINE DINK DINS DINT DIOL DION DIRE DIRK DIRL DIRT DISK DISS DITA DITE DITS DOAT DOES DOIT DOLE DOLL DOLS DOLT DOME DOMS DONA DONE DONS DORE DORK DORP DORS DORY DOSE DOSS DOST DOTE DOTS DOTY DRAT DRAY DREE DREK DRIP DROP DUAD DUAL DUEL DUES DUET DUIT DULL DULY DUMA DUMP DUNE DUNK DUNS DUNT DUOS DURA DURE DURN DUSK DUST DUTY DYAD DYED DYES DYNE LAID LAIN LALL LAMA LAME LAMP LAMS LANA LAND LANE LANK LARA LARD LARK LARS LASE LASS LAST LATE LATS LEAD LEAK LEAL LEAN LEAP LEAS LEEK LEES LEET LEIA LEIS LELA LENA LEND LENS LENT LEON LESS LEST LETS LIAN LIED LIEN LIES LILA LILT LILY LIMA LIME LIMN LIMP LIMY LINA LINE LINK LINN LINS LINT LINY LION LIRA LIRE LISA LISP LIST LITE LITS LOAD LOAN LOID LOIN LOLA LOLL LONE LOOK LOON LOOP LOOS LOOT LORD LORE LORN LORY LOSE LOSS LOST LOTA LOTS LUES LUIS LULL LUMA LUMP LUMS LUNA LUNE LUNK LUNT LUNY LURE LURK LUST LUTE LYES LYLA LYLE LYRA LYRE LYSE MAES MAIA MAID MAIL MAIN MALE MALL MALT MAMA MANA MANE MANS MANY MARA MARE MARK MARL MARS MART MARY MASA MASK MASS MAST MATE MATS MATT MEAD MEAL MEAN MEAT MEED MEEK MEET MELD MELL MELS MELT MEME MEMS MEND MERE MERK MERL MESA MESS META METE MHOS MIEN MILA MILD MILE MILK MILL MILS MILT MIME MINA MIND MINE MINK MINT MIRA MIRE MIRK MIRS MIRY MISE MISS MIST MITE MITT MITY MOAN MOAS MOAT MOIL MOLA MOLD MOLE MOLL MOLS MOLT MOLY MOME MOMS MONA MONK MONS MONY MOOD MOOL MOON MOOS MOOT MORA MORE MORN MORS MORT MOSK MOSS MOST MOTE MOTS MOTT MULE MULL MUMP MUMS MUNS MUON MURA MURE MURK MUSA MUSE MUSK MUSS MUST MUTE MUTS MUTT MYLA MYNA MYRA PAID PAIK PAIL PAIN PALE PALL PALP PALS PALY PAMS PANE PANS PANT PARA PARD PARE PARK PARS PART PASE PASS PAST PATE PATS PATY PEAK PEAL PEAN PEAS PEAT PEED PEEK PEEL PEEN PEEP PEES PEIN PELE PELT PEND PENS PENT PEON PERE PERK PERP PERT PEST PETS PHAT PHIS PHON PHOT PIAL PIAN PIAS PIED PIES PILE PILL PILY PIMA PIMP PINA PINE PINK PINS PINT PINY PION PIRN PISS PITA PITS PITY PLAN PLAT PLAY PLEA PLED PLIE PLOD PLOP PLOT PLOY POET POIS POLE POLL POLS POLY POME POMP POMS POND PONE PONS PONY POOD POOL POON POOP POOS PORE PORK PORN PORT POSE POST POSY POTS PRAT PRAY PREE PREP PREY PROA PROD PROP PROS PULA PULE PULL PULP PULS PUMA PUMP PUNA PUNK PUNS PUNT PUNY PURE PURL PURS PUSS PUTS PUTT PYAS PYES PYIN PYRE RAIA RAID RAIL RAIN RAIS RALE RAMP RAMS RAND RANK RANT RARE RASE RASP RATE RATS READ REAL REAP REED REEK REEL REES REID REIN REIS RELY REMS REMY REND RENE RENT REST RETE RETS RHEA RHOS RIAL RIAN RIAS RIEL RILE RILL RIME RIMS RIMY RIND RINK RINS RIOT RISE RISK RITA RITE ROAD ROAN ROES ROIL ROLE ROLL ROME ROMP ROMS ROOD ROOK ROOT RORY ROSA ROSE ROSS ROSY ROTA ROTE ROTL ROTS RUED RUES RUIN RULE RULY RUMP RUMS RUNE RUNS RUNT RUSE RUSK RUST RUTS RYAN RYAS RYES RYND RYOT SAAD SAID SAIL SAIN SALE SALL SALP SALS SALT SAME SAMP SANA SAND SANE SANK SANS SARA SARD SARK SASS SATE SEAL SEAN SEAS SEAT SEED SEEK SEEL SEEN SEEP SEES SEIS SELL SELS SEME SEND SENE SENT SERA SERE SERS SETA SETS SETT SHAD SHAE SHAT SHAY SHEA SHED SHES SHIN SHIP SHIT SHOD SHOE SHOP SHOT SIAL SILD SILK SILL SILT SIMA SIMP SIMS SINE SINK SINS SIRE SIRS SITE SITS SLAP SLAT SLAY SLED SLID SLIP SLIT SLOE SLOP SLOT SNAP SNED SNIP SNIT SNOT SOAK SOAP SOIL SOLA SOLD SOLE SOLS SOMA SOME SOMS SONE SONS SOOK SOON SOOT SORA SORD SORE SORN SORT SOTS SRIS SUED SUES SUET SUIT SULK SUMP SUMS SUNK SUNN SUNS SURA SURD SURE SUSS SYED SYNE TAEL TAIL TAIN TALA TALE TALK TALL TAME TAMP TAMS TANK TANS TAOS TARA TARE TARN TARP TARS TART TASK TASS TATE TATS TEAK TEAL TEAS TEAT TEED TEEL TEEN TEES TELA TELE TELL TELS TEMP TEND TENS TENT TERN TESS TEST TETS THAE THAN THAT THEA THEE THEN THEY THIN THIS TIED TIES TILE TILL TILS TILT TIME TINA TINE TINS TINT TINY TIRE TIRL TITS TOAD TOEA TOED TOES TOIL TOIT TOLA TOLD TOLE TOLL TOME TOMS TONE TONS TONY TOOK TOOL TOON TOOT TORA TORE TORN TORS TORT TORY TOSS TOST TOTE TOTS TRAD TRAE TRAP TRAY TREE TREK TRES TRET TREY TRIP TROD TROP TROT TROY TUIS TULE TUMP TUNA TUNE TUNS TURD TURK TURN TUSK TUTS TYEE TYES TYIN TYNE TYRE\n" ] @@ -742,7 +738,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Lock: STPBDCLMWF OAIEURLHYP RNALEOTISC SETADNLKHY\n", + "Lock: SPTBDCLMWF OAIEURLHYP RNALEOTISC SETADNLKHY\n", "Count: 1240\n", "Words: BAAL BAAS BACH BACK BAIL BAIT BALD BALE BALK BALL BALS BAND BANE BANK BANS BARD BARE BARK BARN BARS BASE BASH BASK BASS BAST BATE BATH BATS BATT BEAD BEAK BEAN BEAT BECK BEEN BEES BEET BELL BELS BELT BEND BENE BENS BENT BERK BEST BETA BETH BETS BIAS BICE BILE BILK BILL BIND BINE BINS BINT BIOS BIRD BIRK BIRL BISE BISK BITE BITS BITT BLAE BLAH BLAT BLED BLET BLIN BLOT BOAS BOAT BOCK BOIL BOLA BOLD BOLE BOLL BOLT BOND BONE BONK BONY BOOK BOON BOOS BOOT BORA BORE BORK BORN BORT BOSH BOSK BOSS BOTA BOTH BOTS BOTT BRAD BRAE BRAN BRAS BRAT BRAY BREA BRED BREE BREN BRIA BRIE BRIN BRIS BRIT BROS BUCK BULK BULL BUNA BUND BUNK BUNN BUNS BUNT BUOY BURA BURD BURL BURN BURS BURY BUSH BUSK BUSS BUST BUSY BUTE BUTS BUTT BYES BYRE BYRL BYTE CACA CAEL CAID CAIN CALE CALK CALL CANE CANS CANT CARA CARD CARE CARK CARL CARN CARS CART CASA CASE CASH CASK CAST CATE CATS CECA CEES CEIL CELL CELS CELT CENT CERE CESS CETE CHAD CHAT CHAY CHIA CHID CHIN CHIS CHIT CHON CIAN CINE CION CIRE CIST CITE CITY CLAD CLAN CLAY CLOD CLON CLOT CLOY COAL COAT COCA COCK COED COEN COIL COIN COLA COLD COLE COLS COLT COLY CONE CONK CONN CONS CONY COOK COOL COON COOS COOT CORA CORD CORE CORK CORN CORS CORY COSH COSS COST COSY COTE COTS CRED CRIS CRIT CUED CUES CULL CULT CUNT CURD CURE CURL CURN CURS CURT CUSK CUSS CUTE CUTS CYAN CYST DACE DAIS DALE DALS DANA DANE DANK DANS DARE DARK DARN DART DASH DATA DATE DEAD DEAL DEAN DECK DEED DEES DEET DEIL DELE DELL DELS DELT DENE DENS DENT DENY DEON DERE DESK DHAK DHAL DIAL DICE DICK DIED DIEL DIES DIET DILL DINA DINE DINK DINS DINT DIOL DION DIRE DIRK DIRL DIRT DISH DISK DISS DITA DITE DITS DOAT DOCK DOCS DOES DOIT DOLE DOLL DOLS DOLT DONA DONE DONS DORE DORK DORS DORY DOSE DOSS DOST DOTE DOTH DOTS DOTY DRAT DRAY DREE DREK DUAD DUAL DUCE DUCK DUCT DUEL DUES DUET DUIT DULL DULY DUNE DUNK DUNS DUNT DUOS DURA DURE DURN DUSK DUST DUTY DYAD DYED DYES DYNE FACE FACT FAIL FAIN FALL FANE FANS FARD FARE FARL FART FASH FAST FATE FATS FEAL FEAT FECK FEED FEEL FEES FEET FELL FELT FEND FENS FEOD FERE FERN FESS FEST FETA FETE FETS FIAT FICE FILA FILE FILL FILS FIND FINE FINK FINN FINS FIRE FIRN FIRS FISH FIST FITS FLAK FLAN FLAT FLAY FLEA FLED FLEE FLEY FLIT FLOE FOAL FOES FOIL FOIN FOLD FOLK FOND FONS FONT FOOD FOOL FOOT FORA FORD FORE FORK FORT FOSS FRAE FRAT FRAY FRED FREE FRET FRIT FROE FUCK FUEL FULL FUND FUNK FUNS FURL FURS FURY FUSE FUSS FYCE LACE LACK LACS LACY LAID LAIN LALL LANA LAND LANE LANK LARA LARD LARK LARS LASE LASH LASS LAST LATE LATH LATS LEAD LEAH LEAK LEAL LEAN LEAS LECH LEEK LEES LEET LEIA LEIS LELA LENA LEND LENS LENT LEON LESS LEST LETS LIAN LICE LICH LICK LIED LIEN LIES LILA LILT LILY LINA LINE LINK LINN LINS LINT LINY LION LIRA LIRE LISA LIST LITE LITS LOAD LOAN LOCA LOCH LOCK LOID LOIN LOLA LOLL LONE LOOK LOON LOOS LOOT LORD LORE LORN LORY LOSE LOSS LOST LOTA LOTH LOTS LUCA LUCE LUCK LUCY LUES LUIS LULL LUNA LUNE LUNK LUNT LUNY LURE LURK LUSH LUST LUTE LYCH LYES LYLA LYLE LYRA LYRE LYSE MACE MACH MACK MACS MACY MAES MAIA MAID MAIL MAIN MALE MALL MALT MANA MANE MANS MANY MARA MARE MARK MARL MARS MART MARY MASA MASH MASK MASS MAST MATE MATH MATS MATT MEAD MEAL MEAN MEAT MEED MEEK MEET MELD MELL MELS MELT MEND MERE MERK MERL MESA MESH MESS META METE METH MHOS MIAH MICA MICE MICK MICS MIEN MILA MILD MILE MILK MILL MILS MILT MINA MIND MINE MINK MINT MIRA MIRE MIRK MIRS MIRY MISE MISS MIST MITE MITT MITY MOAN MOAS MOAT MOCK MOCS MOIL MOLA MOLD MOLE MOLL MOLS MOLT MOLY MONA MONK MONS MONY MOOD MOOL MOON MOOS MOOT MORA MORE MORN MORS MORT MOSH MOSK MOSS MOST MOTE MOTH MOTS MOTT MUCH MUCK MULE MULL MUNS MUON MURA MURE MURK MUSA MUSE MUSH MUSK MUSS MUST MUTE MUTS MUTT MYAH MYCS MYLA MYNA MYRA MYTH PACA PACE PACK PACS PACT PACY PAID PAIK PAIL PAIN PALE PALL PALS PALY PANE PANS PANT PARA PARD PARE PARK PARS PART PASE PASH PASS PAST PATE PATH PATS PATY PEAK PEAL PEAN PEAS PEAT PECH PECK PECS PEED PEEK PEEL PEEN PEES PEIN PELE PELT PEND PENS PENT PEON PERE PERK PERT PEST PETS PHAT PHIS PHON PHOT PIAL PIAN PIAS PICA PICE PICK PICS PIED PIES PILE PILL PILY PINA PINE PINK PINS PINT PINY PION PIRN PISH PISS PITA PITH PITS PITY PLAN PLAT PLAY PLEA PLED PLIE PLOD PLOT PLOY POCK POET POIS POLE POLL POLS POLY POND PONE PONS PONY POOD POOH POOL POON POOS PORE PORK PORN PORT POSE POSH POST POSY POTS PRAT PRAY PREE PREY PROA PROD PROS PUCE PUCK PULA PULE PULL PULS PUNA PUNK PUNS PUNT PUNY PURE PURL PURS PUSH PUSS PUTS PUTT PYAS PYES PYIN PYRE SAAD SACK SACS SAID SAIL SAIN SALE SALL SALS SALT SANA SAND SANE SANK SANS SARA SARD SARK SASH SASS SATE SEAL SEAN SEAS SEAT SECS SECT SEED SEEK SEEL SEEN SEES SEIS SELL SELS SEND SENE SENT SERA SERE SERS SETA SETH SETS SETT SHAD SHAE SHAH SHAT SHAY SHEA SHED SHES SHIN SHIT SHOD SHOE SHOT SIAL SICE SICK SICS SILD SILK SILL SILT SINE SINH SINK SINS SIRE SIRS SITE SITH SITS SLAT SLAY SLED SLID SLIT SLOE SLOT SOAK SOCA SOCK SOIL SOLA SOLD SOLE SOLS SONE SONS SOOK SOON SOOT SORA SORD SORE SORN SORT SOTH SOTS SPAE SPAN SPAS SPAT SPAY SPED SPIK SPIN SPIT SPOT SPRY SRIS SUCH SUCK SUED SUES SUET SUIT SULK SUNK SUNN SUNS SURA SURD SURE SUSS SYCE SYED SYNE TACE TACH TACK TACT TAEL TAIL TAIN TALA TALE TALK TALL TANK TANS TAOS TARA TARE TARN TARS TART TASK TASS TATE TATS TEAK TEAL TEAS TEAT TECH TEED TEEL TEEN TEES TELA TELE TELL TELS TEND TENS TENT TERN TESS TEST TETH TETS THAE THAN THAT THEA THEE THEN THEY THIN THIS TICK TICS TIED TIES TILE TILL TILS TILT TINA TINE TINS TINT TINY TIRE TIRL TITS TOAD TOEA TOED TOES TOIL TOIT TOLA TOLD TOLE TOLL TONE TONS TONY TOOK TOOL TOON TOOT TORA TORE TORN TORS TORT TORY TOSH TOSS TOST TOTE TOTS TRAD TRAE TRAY TREE TREK TRES TRET TREY TROD TROT TROY TUCK TUIS TULE TUNA TUNE TUNS TURD TURK TURN TUSH TUSK TUTS TYCE TYEE TYES TYIN TYNE TYRE WACK WAES WAIL WAIN WAIT WALE WALK WALL WALY WAND WANE WANK WANS WANT WANY WARD WARE WARK WARN WARS WART WARY WASH WAST WATS WATT WEAK WEAL WEAN WEED WEEK WEEL WEEN WEES WEET WELD WELL WELT WEND WENS WENT WERE WERT WEST WETS WHAT WHEE WHEN WHET WHEY WHID WHIN WHIT WHOA WICH WICK WILD WILE WILL WILT WILY WIND WINE WINK WINS WINY WIRE WIRY WISE WISH WISS WIST WITE WITH WITS WOAD WOES WOLD WONK WONS WONT WOOD WOOL WOOS WORD WORE WORK WORN WORT WOST WOTS WREN WRIT WUSS WYCH WYES WYLE WYND WYNN WYNS WYTE\n" ] @@ -756,7 +752,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "How about starting from a random lock? " + "We got up to 1240 words, an improvement of 5%, but can we go beyond that? I'll improve 50 random locks (this will take around 7 minutes):" ] }, { @@ -770,41 +766,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "Lock: TMSLBPFWCD AEHYLORIWU CNATELISRO LDSYANKETH\n", - "Count: 1240\n", - "Words: BAAL BAAS BACH BACK BAIL BAIT BALD BALE BALK BALL BALS BAND BANE BANK BANS BARD BARE BARK BARN BARS BASE BASH BASK BASS BAST BATE BATH BATS BATT BEAD BEAK BEAN BEAT BECK BEEN BEES BEET BELL BELS BELT BEND BENE BENS BENT BERK BEST BETA BETH BETS BIAS BICE BILE BILK BILL BIND BINE BINS BINT BIOS BIRD BIRK BIRL BISE BISK BITE BITS BITT BLAE BLAH BLAT BLED BLET BLIN BLOT BOAS BOAT BOCK BOIL BOLA BOLD BOLE BOLL BOLT BOND BONE BONK BONY BOOK BOON BOOS BOOT BORA BORE BORK BORN BORT BOSH BOSK BOSS BOTA BOTH BOTS BOTT BRAD BRAE BRAN BRAS BRAT BRAY BREA BRED BREE BREN BRIA BRIE BRIN BRIS BRIT BROS BUCK BULK BULL BUNA BUND BUNK BUNN BUNS BUNT BUOY BURA BURD BURL BURN BURS BURY BUSH BUSK BUSS BUST BUSY BUTE BUTS BUTT BYES BYRE BYRL BYTE CACA CAEL CAID CAIN CALE CALK CALL CANE CANS CANT CARA CARD CARE CARK CARL CARN CARS CART CASA CASE CASH CASK CAST CATE CATS CECA CEES CEIL CELL CELS CELT CENT CERE CESS CETE CHAD CHAT CHAY CHIA CHID CHIN CHIS CHIT CHON CIAN CINE CION CIRE CIST CITE CITY CLAD CLAN CLAY CLOD CLON CLOT CLOY COAL COAT COCA COCK COED COEN COIL COIN COLA COLD COLE COLS COLT COLY CONE CONK CONN CONS CONY COOK COOL COON COOS COOT CORA CORD CORE CORK CORN CORS CORY COSH COSS COST COSY COTE COTS CRED CRIS CRIT CUED CUES CULL CULT CUNT CURD CURE CURL CURN CURS CURT CUSK CUSS CUTE CUTS CYAN CYST DACE DAIS DALE DALS DANA DANE DANK DANS DARE DARK DARN DART DASH DATA DATE DEAD DEAL DEAN DECK DEED DEES DEET DEIL DELE DELL DELS DELT DENE DENS DENT DENY DEON DERE DESK DHAK DHAL DIAL DICE DICK DIED DIEL DIES DIET DILL DINA DINE DINK DINS DINT DIOL DION DIRE DIRK DIRL DIRT DISH DISK DISS DITA DITE DITS DOAT DOCK DOCS DOES DOIT DOLE DOLL DOLS DOLT DONA DONE DONS DORE DORK DORS DORY DOSE DOSS DOST DOTE DOTH DOTS DOTY DRAT DRAY DREE DREK DUAD DUAL DUCE DUCK DUCT DUEL DUES DUET DUIT DULL DULY DUNE DUNK DUNS DUNT DUOS DURA DURE DURN DUSK DUST DUTY DYAD DYED DYES DYNE FACE FACT FAIL FAIN FALL FANE FANS FARD FARE FARL FART FASH FAST FATE FATS FEAL FEAT FECK FEED FEEL FEES FEET FELL FELT FEND FENS FEOD FERE FERN FESS FEST FETA FETE FETS FIAT FICE FILA FILE FILL FILS FIND FINE FINK FINN FINS FIRE FIRN FIRS FISH FIST FITS FLAK FLAN FLAT FLAY FLEA FLED FLEE FLEY FLIT FLOE FOAL FOES FOIL FOIN FOLD FOLK FOND FONS FONT FOOD FOOL FOOT FORA FORD FORE FORK FORT FOSS FRAE FRAT FRAY FRED FREE FRET FRIT FROE FUCK FUEL FULL FUND FUNK FUNS FURL FURS FURY FUSE FUSS FYCE LACE LACK LACS LACY LAID LAIN LALL LANA LAND LANE LANK LARA LARD LARK LARS LASE LASH LASS LAST LATE LATH LATS LEAD LEAH LEAK LEAL LEAN LEAS LECH LEEK LEES LEET LEIA LEIS LELA LENA LEND LENS LENT LEON LESS LEST LETS LIAN LICE LICH LICK LIED LIEN LIES LILA LILT LILY LINA LINE LINK LINN LINS LINT LINY LION LIRA LIRE LISA LIST LITE LITS LOAD LOAN LOCA LOCH LOCK LOID LOIN LOLA LOLL LONE LOOK LOON LOOS LOOT LORD LORE LORN LORY LOSE LOSS LOST LOTA LOTH LOTS LUCA LUCE LUCK LUCY LUES LUIS LULL LUNA LUNE LUNK LUNT LUNY LURE LURK LUSH LUST LUTE LYCH LYES LYLA LYLE LYRA LYRE LYSE MACE MACH MACK MACS MACY MAES MAIA MAID MAIL MAIN MALE MALL MALT MANA MANE MANS MANY MARA MARE MARK MARL MARS MART MARY MASA MASH MASK MASS MAST MATE MATH MATS MATT MEAD MEAL MEAN MEAT MEED MEEK MEET MELD MELL MELS MELT MEND MERE MERK MERL MESA MESH MESS META METE METH MHOS MIAH MICA MICE MICK MICS MIEN MILA MILD MILE MILK MILL MILS MILT MINA MIND MINE MINK MINT MIRA MIRE MIRK MIRS MIRY MISE MISS MIST MITE MITT MITY MOAN MOAS MOAT MOCK MOCS MOIL MOLA MOLD MOLE MOLL MOLS MOLT MOLY MONA MONK MONS MONY MOOD MOOL MOON MOOS MOOT MORA MORE MORN MORS MORT MOSH MOSK MOSS MOST MOTE MOTH MOTS MOTT MUCH MUCK MULE MULL MUNS MUON MURA MURE MURK MUSA MUSE MUSH MUSK MUSS MUST MUTE MUTS MUTT MYAH MYCS MYLA MYNA MYRA MYTH PACA PACE PACK PACS PACT PACY PAID PAIK PAIL PAIN PALE PALL PALS PALY PANE PANS PANT PARA PARD PARE PARK PARS PART PASE PASH PASS PAST PATE PATH PATS PATY PEAK PEAL PEAN PEAS PEAT PECH PECK PECS PEED PEEK PEEL PEEN PEES PEIN PELE PELT PEND PENS PENT PEON PERE PERK PERT PEST PETS PHAT PHIS PHON PHOT PIAL PIAN PIAS PICA PICE PICK PICS PIED PIES PILE PILL PILY PINA PINE PINK PINS PINT PINY PION PIRN PISH PISS PITA PITH PITS PITY PLAN PLAT PLAY PLEA PLED PLIE PLOD PLOT PLOY POCK POET POIS POLE POLL POLS POLY POND PONE PONS PONY POOD POOH POOL POON POOS PORE PORK PORN PORT POSE POSH POST POSY POTS PRAT PRAY PREE PREY PROA PROD PROS PUCE PUCK PULA PULE PULL PULS PUNA PUNK PUNS PUNT PUNY PURE PURL PURS PUSH PUSS PUTS PUTT PYAS PYES PYIN PYRE SAAD SACK SACS SAID SAIL SAIN SALE SALL SALS SALT SANA SAND SANE SANK SANS SARA SARD SARK SASH SASS SATE SEAL SEAN SEAS SEAT SECS SECT SEED SEEK SEEL SEEN SEES SEIS SELL SELS SEND SENE SENT SERA SERE SERS SETA SETH SETS SETT SHAD SHAE SHAH SHAT SHAY SHEA SHED SHES SHIN SHIT SHOD SHOE SHOT SIAL SICE SICK SICS SILD SILK SILL SILT SINE SINH SINK SINS SIRE SIRS SITE SITH SITS SLAT SLAY SLED SLID SLIT SLOE SLOT SOAK SOCA SOCK SOIL SOLA SOLD SOLE SOLS SONE SONS SOOK SOON SOOT SORA SORD SORE SORN SORT SOTH SOTS SRIS SUCH SUCK SUED SUES SUET SUIT SULK SUNK SUNN SUNS SURA SURD SURE SUSS SWAN SWAT SWAY SWOT SYCE SYED SYNE TACE TACH TACK TACT TAEL TAIL TAIN TALA TALE TALK TALL TANK TANS TAOS TARA TARE TARN TARS TART TASK TASS TATE TATS TEAK TEAL TEAS TEAT TECH TEED TEEL TEEN TEES TELA TELE TELL TELS TEND TENS TENT TERN TESS TEST TETH TETS THAE THAN THAT THEA THEE THEN THEY THIN THIS TICK TICS TIED TIES TILE TILL TILS TILT TINA TINE TINS TINT TINY TIRE TIRL TITS TOAD TOEA TOED TOES TOIL TOIT TOLA TOLD TOLE TOLL TONE TONS TONY TOOK TOOL TOON TOOT TORA TORE TORN TORS TORT TORY TOSH TOSS TOST TOTE TOTS TRAD TRAE TRAY TREE TREK TRES TRET TREY TROD TROT TROY TUCK TUIS TULE TUNA TUNE TUNS TURD TURK TURN TUSH TUSK TUTS TWAE TWAS TWAT TWEE TWIN TWIT TWOS TYCE TYEE TYES TYIN TYNE TYRE WACK WAES WAIL WAIN WAIT WALE WALK WALL WALY WAND WANE WANK WANS WANT WANY WARD WARE WARK WARN WARS WART WARY WASH WAST WATS WATT WEAK WEAL WEAN WEED WEEK WEEL WEEN WEES WEET WELD WELL WELT WEND WENS WENT WERE WERT WEST WETS WHAT WHEE WHEN WHET WHEY WHID WHIN WHIT WHOA WICH WICK WILD WILE WILL WILT WILY WIND WINE WINK WINS WINY WIRE WIRY WISE WISH WISS WIST WITE WITH WITS WOAD WOES WOLD WONK WONS WONT WOOD WOOL WOOS WORD WORE WORK WORN WORT WOST WOTS WREN WRIT WUSS WYCH WYES WYLE WYND WYNN WYNS WYTE\n" + "CPU times: user 6min 50s, sys: 1.44 s, total: 6min 51s\n", + "Wall time: 6min 53s\n" ] } ], "source": [ - "show(improved_lock(random_lock()))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We got up to 1240 words, but can we go beyond? I'll improve 50 random locks, taking 6000 steps each rather than just 3000 (this will take around 15 minutes):" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 15min 48s, sys: 9.03 s, total: 15min 57s\n", - "Wall time: 19min 40s\n" - ] - } - ], - "source": [ - "%time improved_locks = [improved_lock(random_lock(seed=i), 6000) for i in range(50)]" + "%time improved_locks = [improved_lock(random_lock(seed=i)) for i in range(50)]" ] }, { @@ -816,7 +784,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -824,10 +792,10 @@ { "data": { "text/plain": [ - "Counter({1232: 3, 1235: 5, 1240: 42})" + "Counter({1232: 6, 1235: 5, 1237: 8, 1240: 31})" ] }, - "execution_count": 28, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -840,13 +808,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "So 42/50 locks got a score of 1240.\n", - "My first reaction to this was that if I discovered 42 different locks with score 1240, then probably there is at least one undiscovered lock with a score above 1240. But a discussion with [Matt Chisholm](https://blog.glyphobet.net/faq) changed my thinking. The key is to realize that some locks that look different are actually the same; they just have the letters in a different order. I define the function `alock` to put each tumbler into alphabetical order (and make the lock be a tuple rather than a list, so that it can be an entry in a `dict` or `set`):" + "So 31/50 locks got a score of 1240.\n", + "My first reaction to this was that if I discovered 31 different locks with score 1240, then probably there is at least one undiscovered lock with a score above 1240. But a discussion with [Matt Chisholm](https://blog.glyphobet.net/faq) changed my thinking. The key is to realize that some locks that look different are actually the same; they just have the letters in a different order. I define the function `alock` to put each tumbler into alphabetical order (and make the lock be a tuple rather than a list, so that it can be an entry in a `dict` or `set`):" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "metadata": { "collapsed": true }, @@ -866,7 +834,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 47, "metadata": { "collapsed": false }, @@ -877,10 +845,15 @@ "{('BCDFHLMPST', 'AEHILORUWY', 'ACELMNORST', 'ADEKLNPSTY'): 1232,\n", " ('BCDFLMPSTW', 'AEHILOPRUY', 'ACEILNORST', 'ADEHKLNSTY'): 1240,\n", " ('BCDFLMPSTW', 'AEHILORUWY', 'ACEILNORST', 'ADEHKLNSTY'): 1240,\n", - " ('BCDGLMPSTW', 'AEHILORUWY', 'AEILMNORST', 'ADEKLNPSTY'): 1235}" + " ('BCDGLMPSTW', 'AEHILORUWY', 'AEILMNORST', 'ADEKLNPSTY'): 1235,\n", + " ('BCDHLMPSTW', 'AEHILOPRUY', 'ACEILNPRST', 'ADEHKLNSTY'): 1232,\n", + " ('BCDHLMPSTW', 'AEHILORUWY', 'ACEILNORST', 'ADEHKLNSTY'): 1237,\n", + " ('BCDHLMPSTW', 'AEHILORUWY', 'ACEILNPRST', 'ADEHKLNSTY'): 1232,\n", + " ('BCDLMPRSTW', 'AEHILOPRUY', 'ACEILNPRST', 'ADEHKLNSTY'): 1232,\n", + " ('BCDLMPRSTW', 'AEHILORUWY', 'ACEILNORST', 'ADEHKLNSTY'): 1237}" ] }, - "execution_count": 30, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -898,12 +871,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "So out of the 50 `improved_locks` there are actually only 4 distinct ones. And only two have a score of 1240:" + "So out of the 50 `improved_locks` there are actually only 9 distinct ones. And only two have a score of 1240:" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 48, "metadata": { "collapsed": false }, @@ -915,14 +888,13 @@ " ('BCDFLMPSTW', 'AEHILORUWY', 'ACEILNORST', 'ADEHKLNSTY')}" ] }, - "execution_count": 31, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "peaks = {alock(lock) for lock in improved_locks if word_count(lock) == 1240}\n", - "peaks" + "{L for L in _ if word_count(L) == 1240}" ] }, { @@ -931,48 +903,14 @@ "source": [ "These two differ in just one letter (a `P` or a `W` in the second tumbler). \n", "\n", - "This discovery changes my whole thinking about the space of scores for locks. Previously I imagined a spiky \"porcupine-shaped\" landscape, with 42 different peaks hitting a height of 1240. But now I have a different picture of the landscape: a single peak containing the two locks (one with a `P` and one with a `W`), surrounded by rolling hills. To verify this picture, I'll look at all the neighbors of the two peak locks, and see which ones are at least 1240:" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{('BCDFLMPSTW', 'AEHILOPRUY', 'ACEILNORST', 'ADEHKLNSTY'): 1240,\n", - " ('BCDFLMPSTW', 'AEHILORUWY', 'ACEILNORST', 'ADEHKLNSTY'): 1240}" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "alphabetset = set(alphabet)\n", - "\n", - "def neighborhood(lock): \n", - " \"Yield all locks resulting from a change of one letter in one tumbler.\"\n", - " for i in range(len(lock)):\n", - " for new in alphabetset - set(lock[i]):\n", - " for old in lock[i]:\n", - " lock2 = Lock(lock)\n", - " lock2[i] = lock2[i].replace(old, new)\n", - " yield lock2\n", - " \n", - "unique_locks(lock for peak in peaks for lock in neighborhood(peak) if word_count(lock) >= 1240)" + "This discovery changes my whole thinking about the space of scores for locks. Previously I imagined a spiky \"porcupine-shaped\" landscape, with 31 different peaks hitting a height of 1240 (and probably other peaks that we haven't discovered yet). But now I have a different picture of the landscape: a single peak containing the two locks (one with a `P` and one with a `W`), surrounded by rolling hills." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Nothing new. This doesn't prove there is no lock with score over 1240, but it does mean we have looked hard to find one and failed.\n", + "\n", "\n", "# Question 3: Simultaneous Words" ] @@ -981,14 +919,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Can we make a lock that spells 10 words simultaneously? One possible approach would be to start with any lock and randomly change it (just as we did with `improved_lock`), but measure improvements by the number of words formed. My intuition is that this approach would work, eventually, but that progress would be very slow, because most random changes to a letter would not make a word.\n", + "Can we make a lock that spells 10 words simultaneously? One possible approach would be to start with any lock and randomly change it (just as we did with `improved_lock`), but measuring improvements by the number of horizontal words formed. My intuition is that this approach would work, eventually, but that progress would be slow, because most random changes to a letter would not make a word.\n", "\n", "An alternative approach is to think of the lock not as a list of 4 vertical tumblers (each with 10 letters), but rather as a list of 10 horizontal words (each with 4 letters). I'll call this the *word list* representation, and note that a lock and a word list are *[matrix transposes](http://en.wikipedia.org/wiki/Transpose)* of each other—they swap rows for columns. There is an [old trick](https://books.google.com/books?id=eH6jBQAAQBAJ&pg=PA574&lpg=PA574&dq=lisp+transpose+matrix&source=bl&ots=Yixwj8m3k4&sig=KoeuJnFhRnJsiD06_Cx56rUOetQ&hl=en&sa=X&ved=0CB4Q6AEwAGoVChMIyM-WiriLxgIVD6OICh2QcwBK#v=onepage&q=transpose%20matrix&f=false) to compute the transpose of a matrix `M` with the expression `zip(*M)`. But `zip` returns tuples; we want strings, so we can define `transpose` as:" ] }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 49, "metadata": { "collapsed": false }, @@ -1006,7 +944,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 50, "metadata": { "collapsed": false }, @@ -1026,7 +964,7 @@ " 'BIKE']" ] }, - "execution_count": 34, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -1058,7 +996,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 51, "metadata": { "collapsed": false }, @@ -1103,7 +1041,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 52, "metadata": { "collapsed": false }, @@ -1111,19 +1049,19 @@ { "data": { "text/plain": [ - "['KNUR',\n", - " 'FLAG',\n", - " 'APES',\n", - " 'EVIL',\n", - " 'COZY',\n", - " 'TICK',\n", - " 'PHON',\n", - " 'LATU',\n", - " 'DUPE',\n", - " 'REFT']" + "['RAID',\n", + " 'ANSH',\n", + " 'OYER',\n", + " 'UPON',\n", + " 'KUDU',\n", + " 'GLUM',\n", + " 'JIMP',\n", + " 'IFFY',\n", + " 'NEVE',\n", + " 'FOAL']" ] }, - "execution_count": 36, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -1136,12 +1074,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "That was easy! Can we go to 11?" + "That was easy! Can we [go to 11](https://www.youtube.com/watch?v=4xgx4k83zzc)?" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 53, "metadata": { "collapsed": false }, @@ -1149,20 +1087,20 @@ { "data": { "text/plain": [ - "['BRAS',\n", - " 'EMIR',\n", - " 'NIPA',\n", - " 'PESO',\n", - " 'ONYX',\n", - " 'WYNN',\n", - " 'CUKE',\n", - " 'MOLY',\n", - " 'FLOC',\n", - " 'THEM',\n", - " 'HARL']" + "['AMAH',\n", + " 'HARM',\n", + " 'UPDO',\n", + " 'LIVE',\n", + " 'GWEN',\n", + " 'FELT',\n", + " 'MUFF',\n", + " 'ROTI',\n", + " 'SCUP',\n", + " 'EDGY',\n", + " 'BROS']" ] }, - "execution_count": 37, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } @@ -1199,7 +1137,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 54, "metadata": { "collapsed": false }, @@ -1227,7 +1165,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 55, "metadata": { "collapsed": false }, @@ -1246,7 +1184,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 56, "metadata": { "collapsed": false }, @@ -1267,7 +1205,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 57, "metadata": { "collapsed": false }, @@ -1275,19 +1213,19 @@ { "data": { "text/plain": [ - "['UMAR',\n", - " 'DISH',\n", - " 'TEMP',\n", - " 'JUDE',\n", - " 'WORM',\n", - " 'STOW',\n", - " 'BHUT',\n", - " 'YAGI',\n", - " 'ACTA',\n", - " 'GYPS']" + "['TUBA',\n", + " 'PROF',\n", + " 'AXAL',\n", + " 'SCUD',\n", + " 'YAWN',\n", + " 'FLEY',\n", + " 'EGGS',\n", + " 'BILK',\n", + " 'CHIT',\n", + " 'LEHR']" ] }, - "execution_count": 41, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } @@ -1310,29 +1248,18 @@ "There is still one unanswered question: did the designers of WordLock® deliberately put \"FRED BUNS\" in, or was it a coincidence? Hacker News reader [emhart](https://news.ycombinator.com/user?id=emhart) (aka the competitive lockpicker Schyler Towne) astutely commented that he had found the [patent](https://www.google.com/patents/US6621405) assigned to WordLock; it describes an algorithm similar to my `greedy_lock`.\n", "After seeing that, I'm inclined to believe that \"FRED BUNS\" is the coincidental result of running the algorithm. On\n", "the other hand, there is a [followup patent](https://www.google.com/patents/US20080053167) that discusses a refinement\n", - "\"wherein the letters on the wheels are configured to spell a first word displayed on a first row of letters and a second word displayed on a second row of letters.\" So the possibility of a two-word phrase was somthing that Wordlock LLc. was aware of.\n", + "\"wherein the letters on the wheels are configured to spell a first word displayed on a first row of letters and a second word displayed on a second row of letters.\" So the possibility of a two-word phrase was something that Wordlock LLc. was aware of.\n", "\n", "We see below that the procedure described in the [patent](https://www.google.com/patents/US6621405) is not quite as good as `greedy_lock`, because the patent states that at each tumbler position \"*the entire word list is scanned*\" to produce the letter frequencies, whereas `greedy_lock` scans only the words that are consistent with the previous tumblers. Because of that difference, `greedy_lock` produces more words, 1177 to 1161:" ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 58, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "(1177, 1161)" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "def greedy_lock_patented(t=4, c=10, words=WORDS):\n", " \"Make a lock with t tumblers, each consisting of the c letters that cover the most words at that position.\"\n", @@ -1342,11 +1269,53 @@ " # Then update words to only include the ones that can be made with this tumbler\n", " counter = Counter(word[i] for word in words)\n", " tumbler = Tumbler(L for (L, _) in counter.most_common(c))\n", - " # words = [w for w in words if w[i] in tumbler] # <<<< The patent does not update the word list\n", + " # words = {w for w in words if w[i] in tumbler} # <<<< The patent does not update the word list\n", " lock.append(tumbler)\n", - " return lock\n", - "\n", - "word_count(greedy_lock()), word_count(greedy_lock_patented())" + " return lock" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1177" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "word_count(greedy_lock())" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1161" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "word_count(greedy_lock_patented())" ] }, { @@ -1366,7 +1335,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 61, "metadata": { "collapsed": false }, @@ -1377,7 +1346,7 @@ "'pass'" ] }, - "execution_count": 43, + "execution_count": 61, "metadata": {}, "output_type": "execute_result" } @@ -1394,9 +1363,9 @@ " assert len(WORDS) == 4360\n", " \n", " assert fredbuns == ['FB', 'RU', 'EN', 'DS']\n", - " assert combinations(fredbuns) == ['FRED','FRES','FRND','FRNS','FUED','FUES','FUND','FUNS',\n", - " 'BRED','BRES','BRND','BRNS','BUED','BUES','BUND','BUNS']\n", - " assert words_from(fredbuns) == ['FRED', 'FUND', 'FUNS', 'BRED', 'BUND', 'BUNS']\n", + " assert combinations(fredbuns) == {'FRED','FRES','FRND','FRNS','FUED','FUES','FUND','FUNS',\n", + " 'BRED','BRES','BRND','BRNS','BUED','BUES','BUND','BUNS'}\n", + " assert words_from(fredbuns) == {'FRED', 'FUND', 'FUNS', 'BRED', 'BUND', 'BUNS'}\n", " assert \"FRED\" in words_from(wordlock) and \"BUNS\" in words_from(wordlock)\n", "\n", " assert wordlock == ['SPHMTWDLFB', 'LEYHNRUOAI', 'ENMLRTAOSK', 'DSNMPYLKTE']\n", @@ -1427,7 +1396,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 62, "metadata": { "collapsed": false }, @@ -1438,7 +1407,7 @@ "{7, 15, 23, 28, 31, 39, 47, 55, 60, 63, 71, 79, 87, 92, 95}" ] }, - "execution_count": 48, + "execution_count": 62, "metadata": {}, "output_type": "execute_result" } @@ -1447,7 +1416,7 @@ "# Numbers up to 100 that are not the sum of 3 squares\n", "nums = range(11)\n", "sums = {A**2 + B**2 + C**2 for A in nums for B in nums for C in nums}\n", - "set(range(max(nums)**2)) - sums" + "set(range(101)) - sums" ] } ], @@ -1467,7 +1436,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.1" + "version": "3.6.0" } }, "nbformat": 4, diff --git a/ipynb/Golomb-Puzzle.ipynb b/ipynb/Golomb-Puzzle.ipynb index f7480ea..8c6e852 100644 --- a/ipynb/Golomb-Puzzle.ipynb +++ b/ipynb/Golomb-Puzzle.ipynb @@ -13,7 +13,7 @@ "source": [ "This problem by Solomon Golomb was presented by Gary Antonik in his 14/4/14 New York Times [Numberplay column](http://wordplay.blogs.nytimes.com/2014/04/14/rectangle):\n", "\n", - ">Say you’re given the following challenge: create a set of five rectangles that have sides of length 1, 2, 3, 4, 5, 6, 7, 8, 9 and 10 units. You can combine sides in a variety of ways: for example, you could create a set of rectangles with dimensions 1 x 3, 2 x 4, 5 x 7, 6 x 8 and 9 x 10.\n", + ">Say you’re given the following challenge: create a set of five rectangles that have sides of length 1, 2, 3, 4, 5, 6, 7, 8, 9 and 10 units. You can combine sides in a variety of ways: for example, you could create a set of rectangles with dimensions 1 x 3, 2 x 4, 5 x 7, 6 x 8 and 9 x 10.\n", ">\n", ">1. How many different sets of five rectangles are possible?\n", ">\n", @@ -21,7 +21,7 @@ ">\n", ">3. What other values for the total areas of the five rectangles are possible?\n", ">\n", - ">4. Which sets of rectangles may be assembled to form a square?\n", + ">4. Which sets of rectangles may be assembled to form a square?\n", "\n", "To me, these are interesting questions because, first, I have a (slight) personal connection to Solomon Golomb (my former colleague at USC) and to Nelson Blachman (the father of my colleague Nancy Blachman), who presented the problem to Antonik, and second, I find it interesting that the problems span the range from mathematical to computational. Let's answer them." ] @@ -645,7 +645,7 @@ "\n", "In Way 1, we could pre-sort the rectangles (say, biggest first). Then we try to put the biggest rectangle in all possible positions on the grid, and for each position that fits, try putting the second biggest rectangle in all remaining positions, and so on. As a rough estimate, assume there are on average about 10 ways to place a rectangle. Then this way will look at about 105 = 100,000 combinations.\n", "\n", - "In Way 2, we consider the positions in some fixed order; say top-to-bottom, left-to right. Take the first empty position (say, the upper left corner). Try putting each of the rectangles there, and for each one that fits, try all possible rectangles in the next empty position, and so on. There are only 5! permutations of rectangles, and each rectangle can go either horizontally or vertically, so we would have to consider 5! × 25 = 3840 combinations. Since 3840 < 100,000, I'll go with Way 2. Here is a more precise description:\n", + "In Way 2, we consider the positions in some fixed order; say top-to-bottom, left-to right. Take the first empty position (say, the upper left corner). Try putting each of the rectangles there, and for each one that fits, try all possible rectangles in the next empty position, and so on. There are only 5! permutations of rectangles, and each rectangle can go either horizontaly or vertically, so we would have to consider 5! × 25 = 3840 combinations. Since 3840 < 100,000, I'll go with Way 2. Here is a more precise description:\n", "\n", "> Way 2: To `pack` a set of rectangles onto a grid, find the first empty cell on the grid. Try in turn all possible placements of any rectangle (in either orientation) at that position. For each one that fits, try to `pack` the remaining rectangles, and return the resulting grid if one of these packings succeeds. " ] @@ -669,7 +669,7 @@ " return solution\n", "\n", "def rectangle_placements(rectangles, grid, pos):\n", - " \"Yield all (rectangles2, grid2) pairs that are the result of placing any rectangle at pos on grid.\"\n", + " \"Yield all (rect, grid) pairs that result from placing a rectangle at pos on grid.\"\n", " for (w, h) in rectangles:\n", " for rect in [(w, h), (h, w)]:\n", " grid2 = place_rectangle_at(rect, grid, pos)\n", @@ -728,7 +728,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "It would be nicer to have a graphical display of colored rectangles. I will define the function `show` which displays a grid as colored rectangles, by calling upon `html_table`, which formats any grid into HTML text." + "It would be nicer to have a graphical display of colored rectangles. I will define the function `show` which displays a grid as colored rectangles, by calling upon `html_table`, which formats any grid into HTML text. (*Note:* Github is conservative in the javascript and even CSS that it allows, so if you don't see colors in the grids below, look at this file on [nbviewer](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/master/ipynb/Golomb-Puzzle.ipynb); same file, but the rendering will definitely show the colors.)" ] }, { @@ -745,7 +745,8 @@ " display(html_table(grid, colored_cell))\n", " \n", "def html_table(grid, cell_function='{}'.format):\n", - " \"Return an HTML , where each cell's contents comes from calling cell_function(grid[y][x])\"\n", + " \"\"\"Return an HTML
, where each cell's contents comes from calling \n", + " cell_function(grid[y][x])\"\"\"\n", " return HTML('
{}
'\n", " .format(cat('\\n' + cat(map(cell_function, row)) \n", " for row in grid)))\n", @@ -754,7 +755,8 @@ " x, y = sorted(rect)\n", " return '{}{}'.format(colors[x], x%10, y%10)\n", "\n", - "colors = 'lightgrey yellow plum chartreuse cyan coral red olive slateblue lightgrey wheat'.split()\n", + "colors = ('lightgrey yellow plum chartreuse cyan coral red olive slateblue lightgrey wheat'\n", + " .split())\n", "\n", "cat = ''.join" ] @@ -931,17 +933,15 @@ { "cell_type": "code", "execution_count": 26, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "import time\n", "\n", "def pack(rectangles, grid, animation=False): \n", " \"\"\"Find a way to pack all rectangles onto grid and return the packed grid,\n", - " or return None if not possible. \n", - " Pause `animation` seconds between displaying each rectangle placement if `animation` is not false.\"\"\"\n", + " or return None if not possible. Pause `animation` seconds between \n", + " displaying each rectangle placement if `animation` is not false.\"\"\"\n", " if animation: \n", " clear_output()\n", " show(grid)\n", @@ -1073,7 +1073,7 @@ { "data": { "text/plain": [ - "'857 + 349 == 1206'" + "'325 + 764 == 1089'" ] }, "execution_count": 29, @@ -1094,8 +1094,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 29 s, sys: 42.2 ms, total: 29.1 s\n", - "Wall time: 29.1 s\n" + "CPU times: user 30 s, sys: 56.5 ms, total: 30 s\n", + "Wall time: 30.1 s\n" ] }, { @@ -1136,9 +1136,7 @@ { "cell_type": "code", "execution_count": 31, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "def compile_formula(formula, verbose=False):\n", @@ -1173,13 +1171,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "lambda Y,M,E,O,U: Y and M and ((100*Y+10*O+U) == (10*M+E)**2)\n" + "lambda M,U,E,O,Y: M and Y and ((100*Y+10*O+U) == (10*M+E)**2)\n" ] }, { "data": { "text/plain": [ - "(>, 'YMEOU')" + "(>, 'MUEOY')" ] }, "execution_count": 32, @@ -1200,13 +1198,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "lambda L,A,Y,P,M,E,R,U,B,N: P and B and N and ((100*N+10*U+M) + (100*B+10*E+R) == (1000*P+100*L+10*A+Y))\n" + "lambda U,A,R,E,L,Y,N,B,M,P: B and N and P and ((100*N+10*U+M) + (100*B+10*E+R) == (1000*P+100*L+10*A+Y))\n" ] }, { "data": { "text/plain": [ - "(>, 'LAYPMERUBN')" + "(>, 'UARELYNBMP')" ] }, "execution_count": 33, @@ -1221,15 +1219,14 @@ { "cell_type": "code", "execution_count": 34, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "def faster_solve_all(formula):\n", " \"\"\"Given a formula like 'ODD + ODD == EVEN', fill in digits to solve it.\n", " Input formula is a string; output is a digit-filled-in string or None.\n", - " Capital letters are variables. This version precompiles the formula; only one eval per formula.\"\"\"\n", + " Capital letters are variables. This version precompiles the formula; \n", + " only one eval per formula.\"\"\"\n", " fn, letters = compile_formula(formula)\n", " for digits in itertools.permutations((1,2,3,4,5,6,7,8,9,0), len(letters)):\n", " try:\n", @@ -1239,7 +1236,7 @@ " pass\n", " \n", "def replace_all(text, olds, news):\n", - " \"Replace each occurrence of each old in text with the corresponding new.\"\n", + " \"Replace each occurence of each old in text with the corresponding new.\"\n", " # E.g. replace_all('A + B', ['A', 'B'], [1, 2]) == '1 + 2'\n", " for (old, new) in zip(olds, news):\n", " text = text.replace(str(old), str(new))\n", @@ -1254,7 +1251,7 @@ { "data": { "text/plain": [ - "'857 + 349 = 1206'" + "'325 + 764 = 1089'" ] }, "execution_count": 35, @@ -1275,8 +1272,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 1.75 s, sys: 3.29 ms, total: 1.76 s\n", - "Wall time: 1.76 s\n" + "CPU times: user 1.77 s, sys: 4.05 ms, total: 1.77 s\n", + "Wall time: 1.77 s\n" ] }, { diff --git a/ipynb/Maze.ipynb b/ipynb/Maze.ipynb new file mode 100644 index 0000000..5f832ce --- /dev/null +++ b/ipynb/Maze.ipynb @@ -0,0 +1,455 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
Peter Norvig
13 March 2018
\n", + "\n", + "# Maze Generation\n", + "\n", + "Let's make some mazes! I'm thinking of mazes like this one, which is a rectangular grid of squares, with walls on some of the sides of squares, and openings on other sides:\n", + "\n", + "![Wikipedia](https://upload.wikimedia.org/wikipedia/commons/thumb/8/88/Maze_simple.svg/475px-Maze_simple.svg.png)\n", + "\n", + "The main constraint is that there should be a path from entrance to exit, and it should be ***fun*** to solve the maze with pencil, paper, and brain power—not too easy, but also not impossible. \n", + "\n", + "As I think about how to model a maze on the computer, it seems like a **graph** is the right model: the nodes of\n", + "the graph are the squares of the grid, and the edges of the graph are the openings between adjacent squares. So what properties of a graph make a good maze?\n", + "- There must be a path from entrance to exit.\n", + "- There must not be too such many paths; maybe it is best if there is only one. \n", + "- Probably the graph should be *singly connected*—there shouldn't be islands of squares that are unreachable from the start. And maybe we want exactly one path between any two squares.\n", + "- The path should have many twists; it would be too easy if it was mostly straight.\n", + "\n", + "I know that a **tree** has all these properties except the last one. So my goal has become: *Superimpose a tree over the grid, covering every square, and make sure the paths are twisty.* Here's how I'll do it:\n", + "\n", + "- Start with a grid with no edges (every square is surrounded by walls on all sides). \n", + "- Add edges (that is, knock down walls) for the entrance at upper left and exit at lower right.\n", + "- Place the root of the tree in some square.\n", + "- Then repeat until the tree covers the whole grid:\n", + " * Select some node already in the tree.\n", + " * Randomly select a neighbor that hasn't been added to the tree yet.\n", + " * Add an edge (knock down the wall) from the node to the neighbor.\n", + " \n", + "In the example below, the root, `A`, has been placed in the upper-left corner, and two branches,\n", + "`A-B-C-D` and `A-b-c-d`, have been randomly chosen (well, not actually random; they are starting to create the same maze as in the diagram above):\n", + "\n", + " o o--o--o--o--o--o--o--o--o--o\n", + " | A b c| | | | | | | |\n", + " o o--o o--o--o--o--o--o--o--o\n", + " | B| | d| | | | | | | |\n", + " o o--o--o--o--o--o--o--o--o--o\n", + " | C D| | | | | | | | |\n", + " o--o--o--o--o--o--o--o--o--o--o\n", + " | | | | | | | | | | |\n", + " o--o--o--o--o--o--o--o--o--o--o\n", + " | | | | | | | | | | |\n", + " o--o--o--o--o--o--o--o--o--o o\n", + " \n", + "Next I select node `d` and extend it to `e` (at which point there are no available neighbors, so `e` will not be selected in the future), and then I select `D` and extend from there all the way to `N`, at each step selecting the node I just added:\n", + "\n", + " o o--o--o--o--o--o--o--o--o--o\n", + " | A b c| | | | | | | |\n", + " o o--o o--o--o--o--o--o--o--o\n", + " | B| e d| | N| | | | | |\n", + " o o--o--o--o o--o--o--o--o--o\n", + " | C D| | | M| | | | | |\n", + " o--o o--o--o o--o--o--o--o--o\n", + " | F E| | K L| | | | | |\n", + " o o--o--o o--o--o--o--o--o--o\n", + " | G H I J| | | | | | |\n", + " o--o--o--o--o--o--o--o--o--o o\n", + " \n", + "Continue like this until every square in the grid has been added to the tree. \n", + "\n", + "\n", + "## Implementing Random Trees\n", + "\n", + "I'll make the following implementation choices:\n", + "\n", + "- A tree will be represented as a list of edges.\n", + "- An `Edge` is a tuple of two nodes. I'll keep them sorted so that `Edge(A, B)` is the same as `Edge(B, A)`.\n", + "- A node in a tree can be anything: a number, a letter, a square, ...\n", + "- The algorithm for `random_tree(nodes, neighbors, pop)` is as follows:\n", + " * We will keep track of three collections:\n", + " - `tree`: a list of edges that constitutes the tree.\n", + " - `nodes`: the set of nodes that have not yet been added to the tree, but will be.\n", + " - `frontier`: a queue of nodes in the tree that are eligible to have an edge added.\n", + " * On each iteration:\n", + " - Use `pop` to pick a `node` from the frontier, and find the neighbors that are not already in the tree.\n", + " - If there are any neighbors, randomly pick one (`nbr`), add `Edge(node, nbr)` to `tree`, remove the\n", + " neighbor from `nodes`, and keep both the node and the neighbor on the frontier. If there are no neighbors,\n", + " drop the node from the frontier.\n", + " * When no `nodes` remain, return `tree`." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import random\n", + "from collections import deque, namedtuple\n", + "\n", + "def Edge(node1, node2): return tuple(sorted([node1, node2]))\n", + "\n", + "def random_tree(nodes: set, neighbors: callable, pop: callable) -> [Edge]:\n", + " \"Repeat: pop a node and add Edge(node, nbr) until all nodes have been added to tree.\"\n", + " tree = []\n", + " root = nodes.pop()\n", + " frontier = deque([root])\n", + " while nodes:\n", + " node = pop(frontier)\n", + " nbrs = neighbors(node) & nodes\n", + " if nbrs:\n", + " nbr = random.choice(list(nbrs))\n", + " tree.append(Edge(node, nbr))\n", + " nodes.remove(nbr)\n", + " frontier.extend([node, nbr])\n", + " return tree" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Implementing Random Mazes\n", + "\n", + "Now let's use `random_tree` to implement `random_maze`. Some more choices:\n", + "\n", + "* A `Maze` is a named tuple with three fields: the `width` and `height` of the grid, and a list of `edges` between squares. \n", + "* A square is denoted by an `(x, y)` tuple of integer coordinates.\n", + "* The function `neighbors4` gives the four surrounding squares." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "Maze = namedtuple('Maze', 'width, height, edges')\n", + "\n", + "def neighbors4(square):\n", + " \"The 4 neighbors of an (x, y) square.\"\n", + " (x, y) = square\n", + " return {(x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)}\n", + "\n", + "def squares(width, height): \n", + " \"All squares in a grid of these dimensions.\"\n", + " return {(x, y) for x in range(width) for y in range(height)}\n", + "\n", + "def random_maze(width, height, pop=deque.pop):\n", + " \"Use random_tree to generate a random maze.\"\n", + " nodes = squares(width, height)\n", + " tree = random_tree(nodes, neighbors4, pop)\n", + " return Maze(width, height, tree)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Maze(width=10, height=5, edges=[((6, 3), (7, 3)), ((6, 3), (6, 4)), ((6, 4), (7, 4)), ((7, 4), (8, 4)), ((8, 3), (8, 4)), ((8, 2), (8, 3)), ((7, 2), (8, 2)), ((7, 1), (7, 2)), ((7, 0), (7, 1)), ((7, 0), (8, 0)), ((8, 0), (8, 1)), ((8, 1), (9, 1)), ((9, 0), (9, 1)), ((9, 1), (9, 2)), ((9, 2), (9, 3)), ((9, 3), (9, 4)), ((6, 0), (7, 0)), ((5, 0), (6, 0)), ((5, 0), (5, 1)), ((5, 1), (6, 1)), ((6, 1), (6, 2)), ((5, 2), (6, 2)), ((4, 2), (5, 2)), ((3, 2), (4, 2)), ((3, 2), (3, 3)), ((2, 3), (3, 3)), ((2, 2), (2, 3)), ((2, 1), (2, 2)), ((2, 0), (2, 1)), ((1, 0), (2, 0)), ((0, 0), (1, 0)), ((0, 0), (0, 1)), ((0, 1), (1, 1)), ((1, 1), (1, 2)), ((0, 2), (1, 2)), ((0, 2), (0, 3)), ((0, 3), (1, 3)), ((1, 3), (1, 4)), ((0, 4), (1, 4)), ((1, 4), (2, 4)), ((2, 4), (3, 4)), ((3, 4), (4, 4)), ((4, 3), (4, 4)), ((4, 3), (5, 3)), ((5, 3), (5, 4)), ((2, 0), (3, 0)), ((3, 0), (4, 0)), ((4, 0), (4, 1)), ((3, 1), (4, 1))])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random_maze(10,5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That's not very pretty to look at. I'm going to need a way to visualize a maze.\n", + "\n", + "# Printing a maze" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "o o--o--o--o--o--o--o--o--o--o\n", + "| | | |\n", + "o--o--o--o o--o o o o--o o\n", + "| | | | |\n", + "o o o--o--o o--o--o--o--o o\n", + "| | | | | | |\n", + "o o--o o o--o o o--o o--o\n", + "| | | | | | |\n", + "o o o--o--o--o--o o o--o o\n", + "| | |\n", + "o--o--o--o--o--o--o--o--o--o o\n" + ] + } + ], + "source": [ + "def print_maze(maze, dot='o', lin='--', bar='|', sp=' '):\n", + " \"Print maze in ASCII.\"\n", + " exit = Edge((maze.width-1, maze.height-1), (maze.width-1, maze.height))\n", + " edges = set(maze.edges) | {exit}\n", + " print(dot + sp + lin.join(dot * maze.width)) # Top line, including entrance\n", + " def vert_wall(x, y): return (' ' if Edge((x, y), (x+1, y)) in edges else bar)\n", + " def horz_wall(x, y): return (sp if Edge((x, y), (x, y+1)) in edges else lin)\n", + " for y in range(maze.height):\n", + " print(bar + cat(sp + vert_wall(x, y) for x in range(maze.width)))\n", + " print(dot + cat(horz_wall(x, y) + dot for x in range(maze.width)))\n", + " \n", + "cat = ''.join\n", + " \n", + "print_maze(random_maze(10, 5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Much better!* But can I do better still?\n", + "\n", + "# Plotting a maze\n", + "\n", + "I'll use `matplotlib` to plot lines where the edges aren't:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "\n", + "def plot_maze(maze):\n", + " \"Plot a maze by drawing lines between adjacent squares, except for pairs in maze.edges\"\n", + " plt.figure(figsize=(8, 4))\n", + " plt.axis('off')\n", + " plt.gca().invert_yaxis()\n", + " w, h = maze.width, maze.height\n", + " exits = {Edge((0, 0), (0, -1)), Edge((w-1, h-1), (w-1, h))}\n", + " edges = set(maze.edges) | exits\n", + " for sq in squares(w, h):\n", + " for nbr in neighbors4(sq):\n", + " if Edge(sq, nbr) not in edges:\n", + " plot_wall(sq, nbr)\n", + " plt.show()\n", + "\n", + "def plot_wall(s1, s2):\n", + " \"Plot a thick black line between squares s1 and s2.\"\n", + " (x1, y1), (x2, y2) = s1, s2\n", + " if x1 == x2: # horizontal wall\n", + " y = max(y1, y2)\n", + " X, Y = [x1, x1+1], [y, y]\n", + " else: # vertical wall\n", + " x = max(x1, x2)\n", + " X, Y = [x, x], [y1, y1+1]\n", + " plt.plot(X, Y, 'k-', linewidth=4.0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's compare the two visualization functions:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd0AAAD8CAYAAAAyun5JAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAABNxJREFUeJzt2sFuIjEUAMF4xf//svcaJSsIAdr2UnXj9uSZUct6jDnn\nBwDwen9WDwAA70J0ASAiugAQEV0AiIguAEREFwAiogsAEdEFgIjoAkBEdAEgIroAEBFdAIiILgBE\nRBcAIqILABHRBYCI6AJA5LJ6gGvGGPPz7znnWDXLv3ydD4Cz1F1x0wWAiOgCQER0ASCy9U53d7vt\nmHlfu///AXax+r84broAEBFdAIiILgBERBcAIqILABHRBYCI6AJARHQBICK6ABARXQCIiC4AREQX\nACKiCwAR0QWAiOgCQER0ASAiugAQEV0AiIguAEREFwAiogsAEdEFgIjoAkBEdAEgIroAEBFdAIiI\nLgBERBcAIqILABHRBYCI6AJARHQBICK6ABARXQCIiC4ARC6rBzjZGGOunuFec86xeoavTjvHHc9w\nd6c9Y57Dt/Kdmy4AREQXACKiCwARO90n2nF/ccIubcdz++yEMzzN7s+c3/Gt3OamCwAR0QWAiOgC\nQER0ASAiugAQEV0AiIguAEREFwAiogsAEdEFgIjoAkBEdAEgIroAEBFdAIiILgBERBcAIqILABHR\nBYCI6AJARHQBICK6ABARXQCIiC4AREQXACKiCwAR0QWAiOgCQER0ASAiugAQEV0AiIguAEREFwAi\nogsAEdEFgMhl9QC0xhhz9Qy3zDnH6hl4Le/h75xwblznpgsAEdEFgIjoAkDETvfN7Lin4v14D5/D\nOZ7HTRcAIqILABHRBYCI6AJARHQBICK6ABARXQCIiC4AREQXACKiCwAR0QWAiOgCQER0ASAiugAQ\nEV0AiIguAEREFwAiogsAEdEFgIjoAkBEdAEgIroAEBFdAIiILgBERBcAIqILABHRBYCI6AJARHQB\nICK6ABARXQCIiC4AREQXACKiCwAR0QWAyGX1ADDGmKtnuMdp8/IznuvjnOFtbroAEBFdAIiILgBE\n7HQfMOccq2f4HzjHx9mlPZ/38nE7nuHqb8VNFwAiogsAEdEFgIjoAkBEdAEgIroAEBFdAIiILgBE\nRBcAIqILABHRBYCI6AJARHQBICK6ABARXQCIiC4AREQXACKiCwAR0QWAiOgCQER0ASAiugAQEV0A\niIguAEREFwAiogsAEdEFgIjoAkBEdAEgIroAEBFdAIiILgBERBcAIqILAJHL6gHuMcaYq2e4Zs45\nVs9wy+5neIITnjOP863wCm66ABARXQCIiC4ARI7a6dql3c+ZPe6E3d7uz3n3+T4+zpiR87npAkBE\ndAEgIroAEBFdAIiILgBERBcAIqILABHRBYCI6AJARHQBICK6ABARXQCIiC4AREQXACKiCwAR0QWA\niOgCQER0ASAiugAQEV0AiIguAEREFwAiogsAEdEFgIjoAkBEdAEgIroAEBFdAIiILgBERBcAIqIL\nABHRBYCI6AJARHQBICK6ABC5rB7gHmOMuXoG8B7Cz8w5x+oZduOmCwAR0QWAiOgCQGTMaT0FAAU3\nXQCIiC4AREQXACKiCwAR0QWAiOgCQER0ASAiugAQEV0AiIguAEREFwAiogsAEdEFgIjoAkBEdAEg\nIroAEBFdAIiILgBERBcAIqILABHRBYCI6AJARHQBICK6ABARXQCIiC4AREQXACKiCwAR0QWAiOgC\nQER0ASDyFyUScgM3r2rXAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "o o--o--o--o--o--o--o--o--o--o\n", + "| | |\n", + "o o--o o--o o o--o--o--o o\n", + "| | | | | | | |\n", + "o o o--o o o o--o o--o o\n", + "| | | | | | | |\n", + "o o o o--o--o o o--o o--o\n", + "| | | | | | |\n", + "o--o o--o--o o o o--o--o o\n", + "| | |\n", + "o--o--o--o--o--o--o--o--o--o o\n" + ] + } + ], + "source": [ + "M = random_maze(10, 5)\n", + "plot_maze(M) \n", + "print_maze(M)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# `pop` strategies\n", + "\n", + "Now I want to compare how the maze varies based on theree different choices for the `pop` parameter. \n", + "\n", + "(1) The default is `deque.pop`\n", + "which means that the tree is created **depth-first**; we always select the `node` at the end of the `frontier`, so the tree follows a single branch along a randomly-twisted path until the path doubles back on itself and there are no more neighbors; at that point we select the most recent square for which there are neighbors:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_maze(random_maze(40, 20, deque.pop))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The maze with `deque.pop` looks pretty good. Reminds me of those [cyber brain](https://www.vectorstock.com/royalty-free-vector/cyber-brain-vector-3071965) images.\n", + "\n", + "(2) An alternative is `queue.popleft`, which creates the maze roughly **breadth-first**—we start at some root square , add an edge to it, and from then on we always select first a parent edge before we select a child edge. The net result is a design that appears to radiate out in concentric layers from the root (which is chosen by `random_tree` and is not necessarily the top-left square; below it looks like the root is in the upper-left quadrant). " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_maze(random_maze(40, 20, deque.popleft))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `deque.popleft` maze is interesting as a design, but to me it doesn't work well as a maze.\n", + "\n", + "(3) We can select a cell at random by shuffling the frontier before popping an element off of it:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nxnjoO1WPSQgAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def poprandom(seq):\n", + " \"Shuffle a mutable sequence (deque or list) and then pop an element.\"\n", + " random.shuffle(seq)\n", + " return seq.pop()\n", + "\n", + "plot_maze(random_maze(40, 20, poprandom))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is an interesting compromise: it has some structure, but still works nicely as a maze, in my opinion.\n", + "\n", + "What other variations can you come up with to generate interesting mazes?" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/ipynb/Pickleball.ipynb b/ipynb/Pickleball.ipynb new file mode 100644 index 0000000..206f6a0 --- /dev/null +++ b/ipynb/Pickleball.ipynb @@ -0,0 +1,422 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Scheduling a Doubles Pickleball Tournament\n", + "\n", + "My friend Steve asked for help in creating a schedule for a round-robin doubles pickleball tournament with 8 or 9 players on 2 courts. ([Pickleball](https://en.wikipedia.org/wiki/Pickleball) is a paddle/ball/net game played on a court that is smaller than tennis but larger than ping-pong.) \n", + "\n", + "To generalize: given *P* players and *C* available courts, we would like to create a **schedule**: a table where each row is a time period (a round of play), each column is a court, and each cell contains a game, which consists of two players partnered together and pitted against two other players. The preferences for the schedule are:\n", + "\n", + "- Each player should partner with each other player exactly once (or as close to that as possible).\n", + "- Fewer rounds are better (in other words, try to fill all the courts each round).\n", + "- Each player should play against each other player twice, or as close to that as possible.\n", + "- A player should not be scheduled to play two games at the same time.\n", + "\n", + "For example, here's a perfect schedule for *P*=8 players on *C*=2 courts:\n", + "\n", + " [([[1, 6], [2, 4]], [[3, 5], [7, 0]]),\n", + " ([[1, 5], [3, 6]], [[2, 0], [4, 7]]),\n", + " ([[2, 3], [6, 0]], [[4, 5], [1, 7]]),\n", + " ([[4, 6], [3, 7]], [[1, 2], [5, 0]]),\n", + " ([[1, 0], [6, 7]], [[3, 4], [2, 5]]),\n", + " ([[2, 6], [5, 7]], [[1, 4], [3, 0]]),\n", + " ([[2, 7], [1, 3]], [[4, 0], [5, 6]])]\n", + " \n", + "This means that in the first round, players 1 and 6 partner against 2 and 4 on one court, while 3 and 5 partner against 7 and 0 on the other. There are 7 rounds.\n", + "\n", + "My strategy for finding a good schedule is to use **hillclimbing**: start with an initial schedule, then repeatedly alter the schedule by swapping partners in one game with partners in another. If the altered schedule is better, keep it; if not, discard it. Repeat. \n", + "\n", + "## Coding it up\n", + "\n", + "The strategy in more detail:\n", + "\n", + "- First form all pairs of players, using `all_pairs(P)`.\n", + "- Put pairs together to form a list of games using `initial_games`.\n", + "- Use `Schedule` to create a schedule; it calls `one_round` to create each round and `scorer` to evaluate the schedule.\n", + "- Use `hillclimb` to improve the initial schedule: call `alter` to randomly alter a schedule, `Schedule` to re-allocate the games to rounds and courts, and `scorer` to check if the altered schedule's score is better.\n", + "\n", + "\n", + "\n", + "(Note: with *P* players there are *P × (P - 1) / 2* pairs of partners; this is an even number when either *P* or *P - 1* is divisible by 4, so everything works out when, say, *P*=4 or *P*=9, but for, say, *P*=10 there are 45 pairs, and so `initial_games` chooses to create 22 games, meaning that one pair of players never play together, and thus play one fewer game than everyone else.)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "from itertools import combinations\n", + "from collections import Counter\n", + "\n", + "#### Types\n", + "\n", + "Player = int # A player is an int: `1`\n", + "Pair = list # A pair is a list of two players who are partners: `[1, 2]`\n", + "Game = list # A game is a list of two pairs: `[[1, 2], [3, 4]]`\n", + "Round = tuple # A round is a tuple of games: `([[1, 2], [3, 4]], [[5, 6], [7, 8]])`\n", + "\n", + "class Schedule(list):\n", + " \"\"\"A Schedule is a list of rounds (augmented with a score and court count).\"\"\"\n", + " def __init__(self, games, courts=2):\n", + " games = list(games)\n", + " while games: # Allocate games to courts, one round at a time\n", + " self.append(one_round(games, courts))\n", + " self.score = scorer(self)\n", + " self.courts = courts\n", + " \n", + "#### Functions\n", + " \n", + "def hillclimb(P, C=2, N=100000):\n", + " \"Schedule games for P players on C courts by randomly altering schedule N times.\"\n", + " sched = Schedule(initial_games(all_pairs(P)), C)\n", + " for _ in range(N):\n", + " sched = max(alter(sched), sched, key=lambda s: s.score)\n", + " return sched\n", + "\n", + "def all_pairs(P): return list(combinations(range(P), 2))\n", + "\n", + "def initial_games(pairs):\n", + " \"\"\"An initial list of games: [[[1, 2], [3, 4]], ...].\n", + " We try to have every pair play every other pair once, and\n", + " have each game have 4 different players, but that isn't always true.\"\"\"\n", + " random.shuffle(pairs)\n", + " games = []\n", + " while len(pairs) >= 2:\n", + " A = pairs.pop()\n", + " B = first(pair for pair in pairs if disjoint(pair, A)) or pairs[0]\n", + " games.append([A, B])\n", + " pairs.remove(B)\n", + " return games\n", + "\n", + "def disjoint(A, B): \n", + " \"Do A and B have disjoint players in them?\"\n", + " return not (players(A) & players(B))\n", + "\n", + "def one_round(games, courts):\n", + " \"\"\"Place up to `courts` games into `round`, all with disjoint players.\"\"\"\n", + " round = []\n", + " while True:\n", + " G = first(g for g in games if disjoint(round, g))\n", + " if not G or not games or len(round) == courts:\n", + " return Round(round)\n", + " round.append(G)\n", + " games.remove(G)\n", + "\n", + "def players(x): \n", + " \"All distinct players in a pair, game, or sequence of games.\"\n", + " return {x} if isinstance(x, Player) else set().union(*map(players, x))\n", + "\n", + "def first(items): return next(items, None)\n", + "\n", + "def pairing(p1, p2): return tuple(sorted([p1, p2]))\n", + " \n", + "def scorer(sched):\n", + " \"Score has penalties for a non-perfect schedule.\"\n", + " penalty = 50 * len(sched) # More rounds are worse (avoid empty courts)\n", + " penalty += 1000 * sum(len(players(game)) != 4 # A game should have 4 players!\n", + " for round in sched for game in round)\n", + " penalty += 1 * sum(abs(c - 2) ** 3 + 8 * (c == 0) # Try to play everyone twice\n", + " for c in opponents(sched).values())\n", + " return -penalty\n", + " \n", + "def opponents(sched):\n", + " \"A Counter of {(player, opponent): times_played}.\"\n", + " return Counter(pairing(p1, p2) \n", + " for round in sched for A, B in round for p1 in A for p2 in B)\n", + " \n", + "def alter(sched):\n", + " \"Modify a schedule by swapping two pairs.\"\n", + " games = [Game(game) for round in sched for game in round] \n", + " G = len(games)\n", + " i, j = random.sample(range(G), 2) # index into games\n", + " a, b = random.choice((0, 1)), random.choice((0, 1)) # index into each game\n", + " games[i][a], games[j][b] = games[j][b], games[i][a]\n", + " return Schedule(games, sched.courts)\n", + "\n", + "def report(sched):\n", + " \"Print information about this schedule.\"\n", + " for i, round in enumerate(sched, 1):\n", + " print('Round {}: {}'.format(i, '; '.join('{} vs {}'.format(*g) for g in round)))\n", + " games = sum(sched, ())\n", + " P = len(players(sched))\n", + " print('\\n{} games in {} rounds for {} players'.format(len(games), len(sched), P))\n", + " opp = opponents(sched)\n", + " fmt = ('{:2X}|' + P * ' {}' + ' {}').format\n", + " print('Number of times each player plays against each opponent:\\n')\n", + " print(' |', *map('{:X}'.format, range(P)), ' Total')\n", + " print('--+' + '--' * P + ' -----')\n", + " for row in range(P):\n", + " counts = [opp[pairing(row, col)] for col in range(P)]\n", + " print(fmt(row, *[c or '-' for c in counts], sum(counts) // 2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 8 Player Tournament\n", + "\n", + "I achieved (in a previous run) a perfect schedule for 8 players: the 14 games fit into 7 rounds, each player partners with each other once, and plays each individual opponent twice:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Round 1: [1, 6] vs [2, 4]; [3, 5] vs [7, 0]\n", + "Round 2: [1, 5] vs [3, 6]; [2, 0] vs [4, 7]\n", + "Round 3: [2, 3] vs [6, 0]; [4, 5] vs [1, 7]\n", + "Round 4: [4, 6] vs [3, 7]; [1, 2] vs [5, 0]\n", + "Round 5: [1, 0] vs [6, 7]; [3, 4] vs [2, 5]\n", + "Round 6: [2, 6] vs [5, 7]; [1, 4] vs [3, 0]\n", + "Round 7: [2, 7] vs [1, 3]; [4, 0] vs [5, 6]\n", + "\n", + "14 games in 7 rounds for 8 players\n", + "Number of times each player plays against each opponent:\n", + "\n", + " | 0 1 2 3 4 5 6 7 Total\n", + "--+---------------- -----\n", + " 0| - 2 2 2 2 2 2 2 7\n", + " 1| 2 - 2 2 2 2 2 2 7\n", + " 2| 2 2 - 2 2 2 2 2 7\n", + " 3| 2 2 2 - 2 2 2 2 7\n", + " 4| 2 2 2 2 - 2 2 2 7\n", + " 5| 2 2 2 2 2 - 2 2 7\n", + " 6| 2 2 2 2 2 2 - 2 7\n", + " 7| 2 2 2 2 2 2 2 - 7\n" + ] + } + ], + "source": [ + "report([\n", + " ([[1, 6], [2, 4]], [[3, 5], [7, 0]]),\n", + " ([[1, 5], [3, 6]], [[2, 0], [4, 7]]),\n", + " ([[2, 3], [6, 0]], [[4, 5], [1, 7]]),\n", + " ([[4, 6], [3, 7]], [[1, 2], [5, 0]]),\n", + " ([[1, 0], [6, 7]], [[3, 4], [2, 5]]),\n", + " ([[2, 6], [5, 7]], [[1, 4], [3, 0]]),\n", + " ([[2, 7], [1, 3]], [[4, 0], [5, 6]]) ])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 9 Player Tournament\n", + "\n", + "For 9 players, I can fit the 18 games into 9 rounds, but some players play each other 1 or 3 times:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Round 1: [1, 7] vs [4, 0]; [3, 5] vs [2, 6]\n", + "Round 2: [2, 7] vs [1, 3]; [4, 8] vs [6, 0]\n", + "Round 3: [5, 0] vs [1, 6]; [7, 8] vs [3, 4]\n", + "Round 4: [7, 0] vs [5, 8]; [1, 2] vs [4, 6]\n", + "Round 5: [3, 8] vs [1, 5]; [2, 0] vs [6, 7]\n", + "Round 6: [1, 4] vs [2, 5]; [3, 6] vs [8, 0]\n", + "Round 7: [5, 6] vs [4, 7]; [1, 8] vs [2, 3]\n", + "Round 8: [1, 0] vs [3, 7]; [2, 8] vs [4, 5]\n", + "Round 9: [3, 0] vs [2, 4]; [6, 8] vs [5, 7]\n", + "\n", + "18 games in 9 rounds for 9 players\n", + "Number of times each player plays against each opponent:\n", + "\n", + " | 0 1 2 3 4 5 6 7 8 Total\n", + "--+------------------ -----\n", + " 0| - 2 1 2 2 1 3 3 2 8\n", + " 1| 2 - 3 3 2 2 1 2 1 8\n", + " 2| 1 3 - 3 3 2 2 1 1 8\n", + " 3| 2 3 3 - 1 1 1 2 3 8\n", + " 4| 2 2 3 1 - 2 2 2 2 8\n", + " 5| 1 2 2 1 2 - 3 2 3 8\n", + " 6| 3 1 2 1 2 3 - 2 2 8\n", + " 7| 3 2 1 2 2 2 2 - 2 8\n", + " 8| 2 1 1 3 2 3 2 2 - 8\n" + ] + } + ], + "source": [ + "report([\n", + " ([[1, 7], [4, 0]], [[3, 5], [2, 6]]),\n", + " ([[2, 7], [1, 3]], [[4, 8], [6, 0]]),\n", + " ([[5, 0], [1, 6]], [[7, 8], [3, 4]]),\n", + " ([[7, 0], [5, 8]], [[1, 2], [4, 6]]),\n", + " ([[3, 8], [1, 5]], [[2, 0], [6, 7]]),\n", + " ([[1, 4], [2, 5]], [[3, 6], [8, 0]]),\n", + " ([[5, 6], [4, 7]], [[1, 8], [2, 3]]),\n", + " ([[1, 0], [3, 7]], [[2, 8], [4, 5]]),\n", + " ([[3, 0], [2, 4]], [[6, 8], [5, 7]]) ])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 10 Player Tournament\n", + "\n", + "With *P*=10 there is an odd number of pairings (45), so two players necessarily play one game less than the other players. Let's see what kind of schedule we can come up with:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Round 1: (6, 7) vs (0, 5); (3, 4) vs (2, 8)\n", + "Round 2: (1, 8) vs (0, 3); (7, 9) vs (4, 5)\n", + "Round 3: (3, 6) vs (1, 7); (0, 9) vs (2, 5)\n", + "Round 4: (2, 9) vs (6, 8); (1, 3) vs (4, 7)\n", + "Round 5: (0, 8) vs (5, 7); (4, 6) vs (2, 3)\n", + "Round 6: (2, 4) vs (3, 5); (1, 6) vs (8, 9)\n", + "Round 7: (6, 9) vs (3, 7); (1, 2) vs (5, 8)\n", + "Round 8: (1, 4) vs (5, 9); (0, 7) vs (3, 8)\n", + "Round 9: (1, 5) vs (2, 7); (3, 9) vs (0, 6)\n", + "Round 10: (7, 8) vs (4, 9); (0, 1) vs (2, 6)\n", + "Round 11: (4, 8) vs (5, 6); (0, 2) vs (1, 9)\n", + "\n", + "22 games in 11 rounds for 10 players\n", + "Number of times each player plays against each opponent:\n", + "\n", + " | 0 1 2 3 4 5 6 7 8 9 Total\n", + "--+-------------------- -----\n", + " 0| - 2 2 2 - 2 2 2 2 2 8\n", + " 1| 2 - 3 2 1 2 2 2 2 2 9\n", + " 2| 2 3 - 2 2 3 2 - 2 2 9\n", + " 3| 2 2 2 - 3 - 3 3 2 1 9\n", + " 4| - 1 2 3 - 3 1 2 2 2 8\n", + " 5| 2 2 3 - 3 - 1 3 2 2 9\n", + " 6| 2 2 2 3 1 1 - 2 2 3 9\n", + " 7| 2 2 - 3 2 3 2 - 2 2 9\n", + " 8| 2 2 2 2 2 2 2 2 - 2 9\n", + " 9| 2 2 2 1 2 2 3 2 2 - 9\n", + "CPU times: user 2min 39s, sys: 661 ms, total: 2min 40s\n", + "Wall time: 2min 43s\n" + ] + } + ], + "source": [ + "%time report(hillclimb(P=10))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this schedule several players never play each other; it may be possible to improve on that (in another run that has better luck with random numbers).\n", + "\n", + "# 16 Player Tournament\n", + "\n", + "Let's jump to 16 players on 4 courts (this will take a while):" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Round 1: (0, 12) vs (9, 13); (5, 10) vs (11, 15); (6, 8) vs (1, 3); (2, 7) vs (4, 14)\n", + "Round 2: (5, 12) vs (0, 10); (6, 11) vs (3, 9); (8, 15) vs (2, 14)\n", + "Round 3: (12, 15) vs (4, 6); (10, 13) vs (1, 9); (2, 5) vs (8, 11)\n", + "Round 4: (11, 14) vs (0, 9); (3, 13) vs (7, 10); (2, 15) vs (4, 12)\n", + "Round 5: (10, 11) vs (0, 15); (12, 14) vs (5, 13); (1, 8) vs (6, 9); (3, 7) vs (2, 4)\n", + "Round 6: (3, 11) vs (8, 13); (7, 9) vs (5, 15); (1, 6) vs (4, 10); (2, 12) vs (0, 14)\n", + "Round 7: (3, 10) vs (7, 12); (1, 14) vs (5, 11); (6, 13) vs (4, 8)\n", + "Round 8: (4, 5) vs (0, 8); (6, 10) vs (2, 11); (1, 13) vs (9, 15)\n", + "Round 9: (3, 5) vs (2, 9); (10, 15) vs (1, 7); (0, 11) vs (6, 12); (8, 14) vs (4, 13)\n", + "Round 10: (1, 10) vs (3, 8); (6, 7) vs (5, 9); (11, 12) vs (4, 15)\n", + "Round 11: (4, 7) vs (1, 11); (9, 14) vs (10, 12); (0, 6) vs (2, 13)\n", + "Round 12: (10, 14) vs (5, 8); (9, 12) vs (2, 3); (4, 11) vs (7, 13)\n", + "Round 13: (7, 8) vs (0, 13); (3, 12) vs (1, 5); (14, 15) vs (4, 9)\n", + "Round 14: (0, 5) vs (1, 4); (13, 14) vs (3, 15); (9, 10) vs (2, 8)\n", + "Round 15: (0, 3) vs (1, 15); (2, 6) vs (5, 7)\n", + "Round 16: (7, 11) vs (8, 12); (3, 4) vs (5, 14); (6, 15) vs (0, 2)\n", + "Round 17: (3, 14) vs (9, 11); (8, 10) vs (0, 4); (5, 6) vs (7, 15); (1, 2) vs (12, 13)\n", + "Round 18: (0, 1) vs (7, 14); (13, 15) vs (3, 6)\n", + "Round 19: (11, 13) vs (2, 10); (0, 7) vs (8, 9); (6, 14) vs (1, 12)\n", + "\n", + "60 games in 19 rounds for 16 players\n", + "Number of times each player plays against each opponent:\n", + "\n", + " | 0 1 2 3 4 5 6 7 8 9 A B C D E F Total\n", + "--+-------------------------------- -----\n", + " 0| - 2 2 - 2 2 2 2 3 2 2 2 3 2 2 2 15\n", + " 1| 2 - - 3 2 2 3 2 2 2 3 1 2 2 2 2 15\n", + " 2| 2 - - 2 2 2 3 2 2 2 2 2 3 2 2 2 15\n", + " 3| - 3 2 - 1 2 2 2 2 3 2 2 2 3 2 2 15\n", + " 4| 2 2 2 1 - 2 2 3 3 - 1 2 2 2 3 3 15\n", + " 5| 2 2 2 2 2 - 2 3 2 2 2 2 2 - 3 2 15\n", + " 6| 2 3 3 2 2 2 - 2 2 2 1 2 2 2 - 3 15\n", + " 7| 2 2 2 2 3 3 2 - 2 2 2 2 1 2 1 2 15\n", + " 8| 3 2 2 2 3 2 2 2 - 2 3 2 - 3 2 - 15\n", + " 9| 2 2 2 3 - 2 2 2 2 - 2 2 2 2 3 2 15\n", + " A| 2 3 2 2 1 2 1 2 3 2 - 3 2 2 1 2 15\n", + " B| 2 1 2 2 2 2 2 2 2 2 3 - 2 2 2 2 15\n", + " C| 3 2 3 2 2 2 2 1 - 2 2 2 - 2 3 2 15\n", + " D| 2 2 2 3 2 - 2 2 3 2 2 2 2 - 2 2 15\n", + " E| 2 2 2 2 3 3 - 1 2 3 1 2 3 2 - 2 15\n", + " F| 2 2 2 2 3 2 3 2 - 2 2 2 2 2 2 - 15\n", + "CPU times: user 15min 6s, sys: 2.67 s, total: 15min 9s\n", + "Wall time: 15min 16s\n" + ] + } + ], + "source": [ + "%time report(hillclimb(P=16, C=4))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We get a pretty good schedule, although it takes 19 rounds rather than the 15 it would take if every court was filled, and again there are some players who never face each other." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/ipynb/Probability.ipynb b/ipynb/Probability.ipynb index ee8c703..6f1f140 100644 --- a/ipynb/Probability.ipynb +++ b/ipynb/Probability.ipynb @@ -11,44 +11,38 @@ } }, "source": [ - "
Peter Norvig, 12 Feb 2016
\n", + "
Peter Norvig, 12 Feb 2016
Revised 17 Feb 2018
\n", "\n", "# A Concrete Introduction to Probability (using Python)\n", "\n", - "\n", - "\n", - "\n", - "This notebook covers the basics of probability theory, with Python 3 implementations. (You should have some background in [probability](http://www.dartmouth.edu/~chance/teaching_aids/books_articles/probability_book/pdf.html) and [Python](https://www.python.org/about/gettingstarted/).) \n", - "\n", - "\n", "In 1814, Pierre-Simon Laplace [wrote](https://en.wikipedia.org/wiki/Classical_definition_of_probability):\n", "\n", - ">*Probability ... is thus simply a fraction whose numerator is the number of favorable cases and whose denominator is the number of all the cases possible ... when nothing leads us to expect that any one of these cases should occur more than any other.*\n", + ">*Probability theory is nothing but common sense reduced to calculation. ... [Probability] is thus simply a fraction whose numerator is the number of favorable cases and whose denominator is the number of all the cases possible ... when nothing leads us to expect that any one of these cases should occur more than any other.*\n", "\n", "![Laplace](https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/AduC_197_Laplace_%28P.S.%2C_marquis_de%2C_1749-1827%29.JPG/180px-AduC_197_Laplace_%28P.S.%2C_marquis_de%2C_1749-1827%29.JPG)\n", "
Pierre-Simon Laplace
1814
\n", "\n", "\n", - "Laplace really nailed it, way back then! If you want to untangle a probability problem, all you have to do is be methodical about defining exactly what the cases are, and then careful in counting the number of favorable and total cases. We'll start being methodical by defining some vocabulary:\n", + "Laplace nailed it. To untangle a probability problem, all you have to do is define exactly what the cases are, and careful count the favorable and total cases. Let's be clear on our vocabulary words:\n", "\n", "\n", - "- **[Experiment](https://en.wikipedia.org/wiki/Experiment_(probability_theory%29):**\n", - " An occurrence with an uncertain outcome that we can observe.\n", - "
*For example, rolling a die.*\n", + "- **[Trial](https://en.wikipedia.org/wiki/Experiment_(probability_theory%29):**\n", + " A single occurrence with an outcome that is uncertain until we observe it. \n", + "
*For example, rolling a single die.*\n", "- **[Outcome](https://en.wikipedia.org/wiki/Outcome_(probability%29):**\n", - " The result of an experiment; one particular state of the world. What Laplace calls a \"case.\"\n", + " A possible result of a trial; one particular state of the world. What Laplace calls a **case.**\n", "
*For example:* `4`.\n", "- **[Sample Space](https://en.wikipedia.org/wiki/Sample_space):**\n", - " The set of all possible outcomes for the experiment. \n", + " The set of all possible outcomes for the trial. \n", "
*For example,* `{1, 2, 3, 4, 5, 6}`.\n", "- **[Event](https://en.wikipedia.org/wiki/Event_(probability_theory%29):**\n", - " A subset of possible outcomes that together have some property we are interested in.\n", + " A subset of outcomes that together have some property we are interested in.\n", "
*For example, the event \"even die roll\" is the set of outcomes* `{2, 4, 6}`. \n", "- **[Probability](https://en.wikipedia.org/wiki/Probability_theory):**\n", - " As Laplace said, the probability of an event with respect to a sample space is the number of favorable cases (outcomes from the sample space that are in the event) divided by the total number of cases in the sample space. (This assumes that all outcomes in the sample space are equally likely.) Since it is a ratio, probability will always be a number between 0 (representing an impossible event) and 1 (representing a certain event).\n", + " As Laplace said, the probability of an event with respect to a sample space is the \"number of favorable cases\" (outcomes from the sample space that are in the event) divided by the \"number of all the cases\" in the sample space (assuming \"nothing leads us to expect that any one of these cases should occur more than any other\"). Since this is a proper fraction, probability will always be a number between 0 (representing an impossible event) and 1 (representing a certain event).\n", "
*For example, the probability of an even die roll is 3/6 = 1/2.*\n", "\n", - "This notebook will develop all these concepts; I also have a [second part](http://nbviewer.jupyter.org/url/norvig.com/ipython/ProbabilityParadox.ipynb) that covers paradoxes in Probability Theory." + "This notebook will explore these concepts in a concrete way using Python code. The code is meant to be succint and explicit, and fast enough to handle sample spaces with millions of outcomes. If you need to handle trillions, you'll want a more efficient implementation. I also have [another notebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/ProbabilityParadox.ipynb) that covers paradoxes in Probability Theory. " ] }, { @@ -62,14 +56,14 @@ } }, "source": [ - "# Code for `P` \n", + "# `P` is for Probability\n", "\n", - "`P` is the traditional name for the Probability function:" + "The code below implements Laplace's quote directly: *Probability is thus simply a fraction whose numerator is the number of favorable cases and whose denominator is the number of all the cases possible.*" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 1, "metadata": { "button": false, "collapsed": false, @@ -84,9 +78,12 @@ "from fractions import Fraction\n", "\n", "def P(event, space): \n", - " \"The probability of an event, given a sample space of equiprobable outcomes.\"\n", - " return Fraction(len(event & space), \n", - " len(space))" + " \"The probability of an event, given a sample space.\"\n", + " return Fraction(cases(favorable(event, space)), \n", + " cases(space))\n", + "\n", + "favorable = set.intersection # Outcomes that are in the event and in the sample space\n", + "cases = len # The number of cases is the length, or size, of a set" ] }, { @@ -100,9 +97,7 @@ } }, "source": [ - "Read this as implementing Laplace's quote directly: *\"Probability is thus simply a fraction whose numerator is the number of favorable cases and whose denominator is the number of all the cases possible.\"* \n", " \n", - "\n", "# Warm-up Problem: Die Roll" ] }, @@ -117,9 +112,175 @@ } }, "source": [ - "What's the probability of rolling an even number with a single six-sided fair die? \n", + "What's the probability of rolling an even number with a single six-sided fair die? Mathematicians traditionally use a single capital letter to denote a sample space; I'll use `D` for the die:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "button": false, + "collapsed": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Fraction(1, 2)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "D = {1, 2, 3, 4, 5, 6} # a sample space\n", + "even = { 2, 4, 6} # an event\n", "\n", - "We can define the sample space `D` and the event `even`, and compute the probability:" + "P(even, D)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Good to confirm what we already knew. We can explore some other events:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "prime = {2, 3, 5, 7, 11, 13}\n", + "odd = {1, 3, 5, 7, 9, 11, 13}" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Fraction(1, 2)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P(odd, D)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Fraction(5, 6)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P((even | prime), D) # The probability of an even or prime die roll" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Fraction(1, 3)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P((odd & prime), D) # The probability of an odd prime die roll" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "# Card Problems\n", + "\n", + "Consider dealing a hand of five playing cards. An individual card has a rank and suit, like `'J♥'` for the Jack of Hearts, and a `deck` has 52 cards:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "button": false, + "collapsed": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "52" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "suits = u'♥♠♦♣'\n", + "ranks = u'AKQJT98765432'\n", + "deck = [r + s for r in ranks for s in suits]\n", + "len(deck)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now I want to define `Hands` as the sample space of all 5-card combinations from `deck`. The function `itertools.combinations` does most of the work; we than concatenate each combination into a space-separated string:\n" ] }, { @@ -128,7 +289,6 @@ "metadata": { "button": false, "collapsed": false, - "deletable": true, "new_sheet": false, "run_control": { "read_only": false @@ -138,7 +298,7 @@ { "data": { "text/plain": [ - "Fraction(1, 2)" + "2598960" ] }, "execution_count": 8, @@ -147,35 +307,93 @@ } ], "source": [ - "D = {1, 2, 3, 4, 5, 6}\n", - "even = { 2, 4, 6}\n", + "import itertools\n", "\n", - "P(even, D)" + "def combos(items, n):\n", + " \"All combinations of n items; each combo as a space-separated str.\"\n", + " return set(map(' '.join, itertools.combinations(items, n)))\n", + "\n", + "Hands = combos(deck, 5)\n", + "len(Hands)" ] }, { "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, + "metadata": {}, "source": [ - "It is good to confirm what we already knew.\n", - "\n", - "You may ask: Why does the definition of `P` use `len(event & space)` rather than `len(event)`? Because I don't want to count outcomes that were specified in `event` but aren't actually in the sample space. Consider:" + "There are too many hands to look at them all, but we can sample:" ] }, { "cell_type": "code", "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['Q♥ J♥ J♠ J♦ 6♠',\n", + " 'J♥ T♠ 9♥ 8♦ 3♣',\n", + " 'T♣ 8♣ 6♥ 5♠ 4♠',\n", + " 'A♦ 8♠ 7♥ 7♠ 2♣',\n", + " 'A♥ J♠ J♦ 9♠ 9♦',\n", + " 'K♠ 8♠ 8♦ 7♦ 5♦',\n", + " 'J♥ J♣ T♥ 5♠ 4♥']" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import random\n", + "random.sample(Hands, 7)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['6♥', '5♦', 'Q♠', 'A♥', '9♣', '3♠', '8♥']" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random.sample(deck, 7)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "Now we can answer questions like the probability of being dealt a flush (5 cards of the same suit):" + ] + }, + { + "cell_type": "code", + "execution_count": 11, "metadata": { "button": false, "collapsed": false, - "deletable": true, "new_sheet": false, "run_control": { "read_only": false @@ -185,34 +403,60 @@ { "data": { "text/plain": [ - "Fraction(1, 2)" + "Fraction(33, 16660)" ] }, - "execution_count": 9, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "even = {2, 4, 6, 8, 10, 12}\n", + "flush = {hand for hand in Hands if any(hand.count(suit) == 5 for suit in suits)}\n", "\n", - "P(even, D)" + "P(flush, Hands)" ] }, { "cell_type": "markdown", "metadata": { "button": false, - "deletable": true, "new_sheet": false, "run_control": { "read_only": false } }, "source": [ - "Here, `len(event)` and `len(space)` are both 6, so if just divided, then `P` would be 1, which is not right.\n", - "The favorable cases are the *intersection* of the event and the space, which in Python is `(event & space)`.\n", - "Also note that I use `Fraction` rather than regular division because I want exact answers like 1/3, not 0.3333333333333333." + "Or the probability of four of a kind:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "button": false, + "collapsed": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Fraction(1, 4165)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "four_kind = {hand for hand in Hands if any(hand.count(rank) == 4 for rank in ranks)}\n", + "\n", + "P(four_kind, Hands)" ] }, { @@ -230,33 +474,25 @@ "\n", "# Urn Problems\n", "\n", - "Around 1700, Jacob Bernoulli wrote about removing colored balls from an urn in his landmark treatise *[Ars Conjectandi](https://en.wikipedia.org/wiki/Ars_Conjectandi)*, and ever since then, explanations of probability have relied on [urn problems](https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=probability%20ball%20urn). (You'd think the urns would be empty by now.) \n", + "Around 1700, Jacob Bernoulli wrote about removing colored balls from an urn in his landmark treatise *[Ars Conjectandi](https://en.wikipedia.org/wiki/Ars_Conjectandi)*, and ever since then, explanations of probability have relied on [urn problems](https://www.google.com/search?q=probability+ball+urn). (You'd think the urns would be empty by now.) \n", "\n", "![Jacob Bernoulli](http://www2.stetson.edu/~efriedma/periodictable/jpg/Bernoulli-Jacob.jpg)\n", "
Jacob Bernoulli
1700
\n", "\n", "For example, here is a three-part problem [adapted](http://mathforum.org/library/drmath/view/69151.html) from mathforum.org:\n", "\n", - "> An urn contains 23 balls: 8 white, 6 blue, and 9 red. We select six balls at random (each possible selection is equally likely). What is the probability of each of these possible outcomes:\n", + "> *An urn contains 6 blue, 9 red, and 8 white balls. We select six balls at random. What is the probability of each of these outcomes:*\n", "\n", - "> 1. all balls are red\n", - "2. 3 are blue, 2 are white, and 1 is red\n", - "3. exactly 4 balls are white\n", + "> - *All balls are red*.\n", + "- *3 are blue, and 1 is red, and 2 are white, *.\n", + "- *Exactly 4 balls are white*.\n", "\n", - "So, an outcome is a set of 6 balls, and the sample space is the set of all possible 6 ball combinations. We'll solve each of the 3 parts using our `P` function, and also using basic arithmetic; that is, *counting*. Counting is a bit tricky because:\n", - "- We have multiple balls of the same color. \n", - "- An outcome is a *set* of balls, where order doesn't matter, not a *sequence*, where order matters.\n", - "\n", - "To account for the first issue, I'll have 8 different white balls labeled `'W1'` through `'W8'`, rather than having eight balls all labeled `'W'`. That makes it clear that selecting `'W1'` is different from selecting `'W2'`.\n", - "\n", - "The second issue is handled automatically by the `P` function, but if I want to do calculations by hand, I will sometimes first count the number of *permutations* of balls, then get the number of *combinations* by dividing the number of permutations by *c*!, where *c* is the number of balls in a combination. For example, if I want to choose 2 white balls from the 8 available, there are 8 ways to choose a first white ball and 7 ways to choose a second, and therefore 8 × 7 = 56 permutations of two white balls. But there are only 56 / 2 = 28 combinations, because `(W1, W2)` is the same combination as `(W2, W1)`.\n", - "\n", - "We'll start by defining the contents of the urn:" + "We'll start by defining the contents of the urn. A `set` can't contain multiple objects that are equal to each other, so I'll call the blue balls `'B1'` through `'B6'`, rather than trying to have 6 balls all called `'B'`:" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": { "button": false, "collapsed": false, @@ -295,152 +531,19 @@ " 'W8'}" ] }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def cross(A, B):\n", - " \"The set of ways of concatenating one item from collection A with one from B.\"\n", - " return {a + b \n", - " for a in A for b in B}\n", - "\n", - "urn = cross('W', '12345678') | cross('B', '123456') | cross('R', '123456789') \n", - "\n", - "urn" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "23" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(urn)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Now we can define the sample space, `U6`, as the set of all 6-ball combinations. We use `itertools.combinations` to generate the combinations, and then join each combination into a string:" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "100947" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import itertools\n", - "\n", - "def combos(items, n):\n", - " \"All combinations of n items; each combo as a concatenated str.\"\n", - " return {' '.join(combo) \n", - " for combo in itertools.combinations(items, n)}\n", - "\n", - "U6 = combos(urn, 6)\n", - "\n", - "len(U6)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "I don't want to print all 100,947 members of the sample space; let's just peek at a random sample of them:" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "['B5 R2 W8 B1 R9 W5',\n", - " 'B5 W2 B6 W8 R5 B3',\n", - " 'B4 R8 B6 B1 R7 W5',\n", - " 'B5 B2 W7 R2 R4 W6',\n", - " 'B2 B4 B6 W8 R6 R5',\n", - " 'R2 R4 R9 W4 B3 W5',\n", - " 'R1 R6 R5 R9 R7 W5',\n", - " 'B5 R8 W7 B6 B3 W5',\n", - " 'B2 R8 W7 R5 W4 B3',\n", - " 'R1 W2 R3 W1 R7 W5']" - ] - }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "import random\n", + "def balls(color, n):\n", + " \"A set of n numbered balls of the given color.\"\n", + " return {color + str(i)\n", + " for i in range(1, n + 1)}\n", "\n", - "random.sample(U6, 10)" + "urn = balls('B', 6) | balls('R', 9) | balls('W', 8)\n", + "urn" ] }, { @@ -454,20 +557,157 @@ } }, "source": [ - "Is 100,947 really the right number of ways of choosing 6 out of 23 items, or \"23 choose 6\", as mathematicians [call it](https://en.wikipedia.org/wiki/Combination)? Well, we can choose any of 23 for the first item, any of 22 for the second, and so on down to 18 for the sixth. But we don't care about the ordering of the six items, so we divide the product by 6! (the number of permutations of 6 things) giving us:\n", - "\n", - "$$23 ~\\mbox{choose}~ 6 = \\frac{23 \\cdot 22 \\cdot 21 \\cdot 20 \\cdot 19 \\cdot 18}{6!} = 100947$$\n", - "\n", - "Note that $23 \\cdot 22 \\cdot 21 \\cdot 20 \\cdot 19 \\cdot 18 = 23! \\;/\\; 17!$, so, generalizing, we can write:\n", - "\n", - "$$n ~\\mbox{choose}~ c = \\frac{n!}{(n - c)! \\cdot c!}$$\n", - "\n", - "And we can translate that to code and verify that 23 choose 6 is 100,947:" + "Now we can define the sample space, `U6`, as the set of all 6-ball combinations: " ] }, { "cell_type": "code", "execution_count": 14, + "metadata": { + "button": false, + "collapsed": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['W1 R4 W3 R7 R2 W7',\n", + " 'R3 W1 B6 W3 R2 W7',\n", + " 'R3 W5 B4 B2 W8 W7',\n", + " 'W2 B1 R3 B2 R8 B5',\n", + " 'B1 R5 W6 R9 R7 B5']" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "U6 = combos(urn, 6)\n", + "\n", + "random.sample(U6, 5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Define `select` such that `select('R', 6)` is the event of picking 6 red balls from the urn:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def select(color, n, space=U6):\n", + " \"The subset of the sample space with exactly `n` balls of given `color`.\"\n", + " return {s for s in space if s.count(color) == n}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now I can answer the three questions:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Fraction(4, 4807)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P(select('R', 6), U6) " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Fraction(240, 4807)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P(select('B', 3) & select('R', 1) & select('W', 2), U6)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Fraction(350, 4807)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P(select('W', 4), U6)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "## Urn problems via arithmetic\n", + "\n", + "Let's verify these calculations using basic arithmetic, rather than exhaustive counting. First, how many ways can I choose 6 out of 9 red balls? It could be any of the 9 for the first ball, any of 8 remaining for the second, and so on down to any of the remaining 4 for the sixth and final ball. But we don't care about the *order* of the six balls, so divide that product by the number of permutations of 6 things, which is 6!, giving us \n", + "9 × 8 × 7 × 6 × 5 × 4 / 6! = 84. In general, the number of ways of choosing *c* out of *n* items is (*n* choose *c*) = *n*! / ((*n* - *c*)! × c!).\n", + "We can translate that to code:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, "metadata": { "button": false, "collapsed": true, @@ -488,103 +728,9 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 20, "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "100947" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "choose(23, 6)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Now we're ready to answer the 4 problems: \n", - "\n", - "### Urn Problem 1: what's the probability of selecting 6 red balls? " - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Fraction(4, 4807)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "red6 = {s for s in U6 if s.count('R') == 6}\n", - "\n", - "P(red6, U6)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Let's investigate a bit more. How many ways of getting 6 red balls are there?" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, "outputs": [ { @@ -593,49 +739,7 @@ "84" ] }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(red6)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Why are there 84 ways? Because there are 9 red balls in the urn, and we are asking how many ways we can choose 6 of them:" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "84" - ] - }, - "execution_count": 18, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -646,117 +750,17 @@ }, { "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, + "metadata": {}, "source": [ - "So the probability of 6 red balls is then just 9 choose 6 divided by the size of the sample space:" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "P(red6, U6) == Fraction(choose(9, 6), \n", - " len(U6))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "### Urn Problem 2: what is the probability of 3 blue, 2 white, and 1 red?" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Fraction(240, 4807)" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "b3w2r1 = {s for s in U6 if\n", - " s.count('B') == 3 and s.count('W') == 2 and s.count('R') == 1}\n", - "\n", - "P(b3w2r1, U6)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "We can get the same answer by counting how many ways we can choose 3 out of 6 blues, 2 out of 8 whites, and 1 out of 9 reds, and dividing by the number of possible selections:" + "Now we can verify the answers to the three problems. (Since `P` computes a ratio and `choose` computes a count,\n", + "I multiply the left-hand-side by `N`, the length of the sample space, to make both sides be counts.)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, "outputs": [ { @@ -771,37 +775,16 @@ } ], "source": [ - "P(b3w2r1, U6) == Fraction(choose(6, 3) * choose(8, 2) * choose(9, 1), \n", - " len(U6))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Here we don't need to divide by any factorials, because `choose` has already accounted for that. \n", + "N = len(U6)\n", "\n", - "We can get the same answer by figuring: \"there are 6 ways to pick the first blue, 5 ways to pick the second blue, and 4 ways to pick the third; then 8 ways to pick the first white and 7 to pick the second; then 9 ways to pick a red. But the order `'B1, B2, B3'` should count as the same as `'B2, B3, B1'` and all the other orderings; so divide by 3! to account for the permutations of blues, by 2! to account for the permutations of whites, and by 100947 to get a probability:" + "N * P(select('R', 6), U6) == choose(9, 6)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, "outputs": [ { @@ -816,43 +799,20 @@ } ], "source": [ - " P(b3w2r1, U6) == Fraction((6 * 5 * 4) * (8 * 7) * 9, \n", - " factorial(3) * factorial(2) * len(U6))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "### Urn Problem 3: What is the probability of exactly 4 white balls?\n", - "\n", - "We can interpret this as choosing 4 out of the 8 white balls, and 2 out of the 15 non-white balls. Then we can solve it the same three ways:" + "N * P(select('B', 3) & select('W', 2) & select('R', 1), U6) == choose(6, 3) * choose(8, 2) * choose(9, 1)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, "outputs": [ { "data": { "text/plain": [ - "Fraction(350, 4807)" + "True" ] }, "execution_count": 23, @@ -861,58 +821,77 @@ } ], "source": [ - "w4 = {s for s in U6 if\n", - " s.count('W') == 4}\n", + "N * P(select('W', 4), U6) == choose(8, 4) * choose(6 + 9, 2) # (6 + 9 non-white balls)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can solve all these problems just by counting; all you ever needed to know about probability problems you learned from Sesame Street:\n", "\n", - "P(w4, U6)" + "![The Count](http://img2.oncoloring.com/count-dracula-number-thir_518b77b54ba6c-p.gif)\n", + "
The Count
1972—
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "# Non-Equiprobable Outcomes\n", + "\n", + "So far, we have accepted Laplace's assumption that *nothing leads us to expect that any one of these cases should occur more than any other*.\n", + "In real life, we often get outcomes that are not equiprobable--for example, a loaded die favors one side over the others. We will introduce three more vocabulary items:\n", + "\n", + "* [Frequency](https://en.wikipedia.org/wiki/Frequency_%28statistics%29): a non-negative number describing how often an outcome occurs. Can be a count like 5, or a ratio like 1/6.\n", + "\n", + "* [Distribution](http://mathworld.wolfram.com/StatisticalDistribution.html): A mapping from outcome to frequency of that outcome. We will allow sample spaces to be distributions. \n", + "\n", + "* [Probability Distribution](https://en.wikipedia.org/wiki/Probability_distribution): A probability distribution\n", + "is a distribution whose frequencies sum to 1. \n", + "\n", + "\n", + "I could implement distributions with `Dist = dict`, but instead I'll make `Dist` a subclass `collections.Counter`:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "P(w4, U6) == Fraction(choose(8, 4) * choose(15, 2),\n", - " len(U6))" + "from collections import Counter\n", + " \n", + "class Dist(Counter): \n", + " \"A Distribution of {outcome: frequency} pairs.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because a `Dist` is a `Counter`, we can initialize it in any of the following ways:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, "outputs": [ { "data": { "text/plain": [ - "True" + "Dist({1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1})" ] }, "execution_count": 25, @@ -921,8 +900,269 @@ } ], "source": [ - "P(w4, U6) == Fraction((8 * 7 * 6 * 5) * (15 * 14),\n", - " factorial(4) * factorial(2) * len(U6))" + "# A set of equiprobable outcomes:\n", + "Dist({1, 2, 3, 4, 5, 6})" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Dist({'H': 5, 'T': 4})" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# A collection of outcomes, with repetition indicating frequency:\n", + "Dist('THHHTTHHT')" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Dist({'H': 5, 'T': 4})" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# A mapping of {outcome: frequency} pairs:\n", + "Dist({'H': 5, 'T': 4})" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Keyword arguments:\n", + "Dist(H=5, T=4) == Dist({'H': 5}, T=4) == Dist('TTTT', H=5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now I will modify the code to handle distributions.\n", + "Here's my plan:\n", + "\n", + "- Sample spaces and events can both be specified as either a `set` or a `Dist`.\n", + "- The sample space can be a non-probability distribution like `Dist(H=50, T=50)`; the results\n", + "will be the same as if the sample space had been a true probability distribution like `Dist(H=1/2, T=1/2)`.\n", + "- The function `cases` now sums the frequencies in a distribution (it previously counted the length).\n", + "- The function `favorable` now returns a `Dist` of favorable outcomes and their frequencies (not a `set`).\n", + "- I will redefine `Fraction` to use `\"/\"`, not `fractions.Fraction`, because frequencies might be floats.\n", + "- `P` is unchanged.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def cases(outcomes): \n", + " \"The total frequency of all the outcomes.\"\n", + " return sum(Dist(outcomes).values())\n", + "\n", + "def favorable(event, space):\n", + " \"A distribution of outcomes from the sample space that are in the event.\"\n", + " space = Dist(space)\n", + " return Dist({x: space[x] \n", + " for x in space if x in event})\n", + "\n", + "def Fraction(n, d): return n / d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For example, here's the probability of rolling an even number with a crooked die that is loaded to prefer 6:" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Crooked = Dist({1: 0.1, 2: 0.1, 3: 0.1, 4: 0.1, 5: 0.1, 6: 0.5})\n", + "\n", + "P(even, Crooked)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As another example, an [article](http://people.kzoo.edu/barth/math105/moreboys.pdf) gives the following counts for two-child families in Denmark, where `GB` means a family where the first child is a girl and the second a boy (I'm aware that not all births can be classified as the binary \"boy\" or \"girl,\" but the data was reported that way):\n", + "\n", + " GG: 121801 GB: 126840\n", + " BG: 127123 BB: 135138" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "button": false, + "collapsed": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [], + "source": [ + "DK = Dist(GG=121801, GB=126840,\n", + " BG=127123, BB=135138)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.48667063350701306" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "first_girl = {'GG', 'GB'}\n", + "P(first_girl, DK)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.4872245557856497" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "second_girl = {'GG', 'BG'}\n", + "P(second_girl, DK)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "This says that the probability of a girl is somewhere between 48% and 49%. The probability of a girl is very slightly higher for the second child. \n", + "\n", + "Given the first child, are you more likely to have a second child of the same sex?" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5029124959385557" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "same = {'GG', 'BB'}\n", + "P(same, DK)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "Yes, but only by about 0.3%." ] }, { @@ -936,18 +1176,18 @@ } }, "source": [ - "# Revised Version of `P`, with more general events\n", + "# Predicates as events\n", "\n", "To calculate the probability of an even die roll, I originally said\n", "\n", " even = {2, 4, 6}\n", " \n", - "But that's inelegant—I had to explicitly enumerate all the even numbers from one to six. If I ever wanted to deal with a twelve or twenty-sided die, I would have to go back and change `even`. I would prefer to define `even` once and for all like this:" + "But that's inelegant—I had to explicitly enumerate all the even numbers from one to six. If I ever wanted to deal with a twelve or twenty-sided die, I would have to go back and redefine `even`. I would prefer to define `even` once and for all like this:" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 35, "metadata": { "button": false, "collapsed": true, @@ -973,13 +1213,12 @@ } }, "source": [ - "Now in order to make `P(even, D)` work, I'll have to modify `P` to accept an event as either\n", - "a *set* of outcomes (as before), or a *predicate* over outcomes—a function that returns true for an outcome that is in the event:" + "Now in order to make `P(even, D)` work, I'll allow an `Event` to be either a collection of outcomes or a `callable` predicate (that is, a function that returns true for outcomes that are part of the event). I don't need to modify `P`, but `favorable` will have to convert a callable `event` to a `set`:" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 36, "metadata": { "button": false, "collapsed": true, @@ -991,82 +1230,51 @@ }, "outputs": [], "source": [ - "def P(event, space): \n", - " \"\"\"The probability of an event, given a sample space of equiprobable outcomes.\n", - " event can be either a set of outcomes, or a predicate (true for outcomes in the event).\"\"\"\n", - " if is_predicate(event):\n", - " event = such_that(event, space)\n", - " return Fraction(len(event & space), len(space))\n", - "\n", - "is_predicate = callable\n", - "\n", - "def such_that(predicate, collection): \n", - " \"The subset of elements in the collection for which the predicate is true.\"\n", - " return {e for e in collection if predicate(e)}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Here we see how `such_that`, the new `even` predicate, and the new `P` work:" + "def favorable(event, space):\n", + " \"A distribution of outcomes from the sample space that are in the event.\"\n", + " if callable(event):\n", + " event = {x for x in space if event(x)}\n", + " space = Dist(space)\n", + " return Dist({x: space[x] \n", + " for x in space if x in event})" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 37, "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, "outputs": [ { "data": { "text/plain": [ - "{2, 4, 6}" + "Dist({2: 1, 4: 1, 6: 1})" ] }, - "execution_count": 28, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "such_that(even, D)" + "favorable(even, D)" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 38, "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, "outputs": [ { "data": { "text/plain": [ - "Fraction(1, 2)" + "0.5" ] }, - "execution_count": 29, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -1076,38 +1284,26 @@ ] }, { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{2, 4, 6, 8, 10, 12}" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "D12 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}\n", - "\n", - "such_that(even, D12)" + "I'll define `die` to make a sample space for an *n*-sided die:" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 39, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def die(n): return set(range(1, n + 1))" + ] + }, + { + "cell_type": "code", + "execution_count": 40, "metadata": { "button": false, "collapsed": false, @@ -1121,16 +1317,82 @@ { "data": { "text/plain": [ - "Fraction(1, 2)" + "Dist({2: 1, 4: 1, 6: 1, 8: 1, 10: 1, 12: 1})" ] }, - "execution_count": 31, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "P(even, D12)" + "favorable(even, die(12))" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P(even, die(12))" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P(even, die(2000))" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.49975012493753124" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P(even, die(2001))" ] }, { @@ -1144,14 +1406,12 @@ } }, "source": [ - "Note: `such_that` is just like the built-in function `filter`, except `such_that` returns a set.\n", - "\n", - "We can now define more interesting events using predicates; for example we can determine the probability that the sum of a three-dice roll is prime (using a definition of `is_prime` that is efficient enough for small `n`):" + "We can define more interesting events using predicates; for example we can determine the probability that the sum of rolling *d* 6-sided dice is prime:" ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 44, "metadata": { "button": false, "collapsed": false, @@ -1163,223 +1423,62 @@ }, "outputs": [ { - "data": { - "text/plain": [ - "Fraction(73, 216)" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "P(is_prime, sum_dice(1)) = 0.5\n", + "P(is_prime, sum_dice(2)) = 0.417\n", + "P(is_prime, sum_dice(3)) = 0.338\n", + "P(is_prime, sum_dice(4)) = 0.333\n", + "P(is_prime, sum_dice(5)) = 0.317\n", + "P(is_prime, sum_dice(6)) = 0.272\n", + "P(is_prime, sum_dice(7)) = 0.242\n", + "P(is_prime, sum_dice(8)) = 0.236\n" + ] } ], "source": [ - "D3 = {(d1, d2, d3) for d1 in D for d2 in D for d3 in D}\n", + "def sum_dice(d): return Dist(sum(dice) for dice in itertools.product(D, repeat=d))\n", "\n", - "def prime_sum(outcome): return is_prime(sum(outcome))\n", + "def is_prime(n): return (n > 1 and not any(n % i == 0 for i in range(2, n)))\n", "\n", - "def is_prime(n): return n > 1 and not any(n % i == 0 for i in range(2, n))\n", - "\n", - "P(prime_sum, D3)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "# Card Problems\n", - "\n", - "Consider dealing a hand of five playing cards. We can define `deck` as a set of 52 cards, and `Hands` as the sample space of all combinations of 5 cards:" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "52" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "suits = 'SHDC'\n", - "ranks = 'A23456789TJQK'\n", - "deck = cross(ranks, suits)\n", - "len(deck)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "['4H 7D QS 4D 9D',\n", - " 'QC 2D TS 9S 3D',\n", - " 'QC 3S KC 4C JC',\n", - " '9H 7C TS 7H JH',\n", - " 'QC JD AS JH 8H']" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Hands = combos(deck, 5)\n", - "\n", - "assert len(Hands) == choose(52, 5)\n", - "\n", - "random.sample(Hands, 5)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Now we can answer questions like the probability of being dealt a flush (5 cards of the same suit):" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Fraction(33, 16660)" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def flush(hand):\n", - " return any(hand.count(suit) == 5 for suit in suits)\n", - "\n", - "P(flush, Hands)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Or the probability of four of a kind:" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Fraction(1, 4165)" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def four_kind(hand):\n", - " return any(hand.count(rank) == 4 for rank in ranks)\n", - "\n", - "P(four_kind, Hands)" + "for d in range(1, 9):\n", + " p = P(is_prime, sum_dice(d))\n", + " print(\"P(is_prime, sum_dice({})) = {}\".format(d, round(p, 3)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Fermat and Pascal: Gambling, Triangles, and the Birth of Probability\n", + "# Fermat and Pascal: The Unfinished Game\n", "\n", "\n", "
Pierre de Fermat
1654\n", "
Blaise Pascal]
1654\n", "
\n", "\n", - "Consider a gambling game consisting of tossing a coin. Player H wins the game if 10 heads come up, and T wins if 10 tails come up. If the game is interrupted when H has 8 heads and T has 7 tails, how should the pot of money (which happens to be 100 Francs) be split?\n", + "Consider a gambling game consisting of tossing a coin repeatedly. Player H wins the game as soon as a total of 10 heads come up, and T wins if a total of 10 tails come up before H wins. If the game is interrupted when H has 8 heads and T has 7 tails, how should the pot of money (which happens to be 100 Francs) be split? Here are some proposals, and arguments against them:\n", + "- It is uncertain, so just split the pot 50-50. \n", + "
*No, because surely H is more likely to win.*\n", + "- In proportion to each player's current score, so H gets a 8/(8+7) share. \n", + "
*No, because if the score was 0 heads to 1 tail, H should get more than 0/1.*\n", + "- In proportion to how many tosses the opponent needs to win, so H gets 3/(3+2). \n", + "
*This seems better, but no, if H is 9 away and T is only 1 away from winning, then it seems that giving H a 1/10 share is too much.*\n", + "\n", "In 1654, Blaise Pascal and Pierre de Fermat corresponded on this problem, with Fermat [writing](http://mathforum.org/isaac/problems/prob1.html):\n", "\n", ">Dearest Blaise,\n", "\n", ">As to the problem of how to divide the 100 Francs, I think I have found a solution that you will find to be fair. Seeing as I needed only two points to win the game, and you needed 3, I think we can establish that after four more tosses of the coin, the game would have been over. For, in those four tosses, if you did not get the necessary 3 points for your victory, this would imply that I had in fact gained the necessary 2 points for my victory. In a similar manner, if I had not achieved the necessary 2 points for my victory, this would imply that you had in fact achieved at least 3 points and had therefore won the game. Thus, I believe the following list of possible endings to the game is exhaustive. I have denoted 'heads' by an 'h', and tails by a 't.' I have starred the outcomes that indicate a win for myself.\n", "\n", - " h h h h * h h h t * h h t h * h h t t *\n", - " h t h h * h t h t * h t t h * h t t t\n", - " t h h h * t h h t * t h t h * t h t t\n", - " t t h h * t t h t t t t h t t t t\n", + "> h h h h * h h h t * h h t h * h h t t *\n", + "> h t h h * h t h t * h t t h * h t t t\n", + "> t h h h * t h h t * t h t h * t h t t\n", + "> t t h h * t t h t t t t h t t t t\n", + "\n", + ">I think you will agree that all of these outcomes are equally likely. Thus I believe that we should divide the stakes by the ration 11:5 in my favor, that is, I should receive (11/16)×100 = 68.75 Francs, while you should receive 31.25 Francs.\n", "\n", - ">I think you will agree that all of these outcomes are equally likely. Thus I believe that we should divide the stakes by the ration 11:5 in my favor, that is, I should receive (11/16)*100 = 68.75 Francs, while you should receive 31.25 Francs.\n", "\n", ">I hope all is well in Paris,\n", "\n", @@ -1394,26 +1493,36 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 45, "metadata": { "collapsed": true }, "outputs": [], "source": [ - "def win_unfinished_game(Hneeds, Tneeds):\n", + "def win_unfinished_game(h, t):\n", " \"The probability that H will win the unfinished game, given the number of points needed by H and T to win.\"\n", - " def Hwins(outcome): return outcome.count('h') >= Hneeds\n", - " return P(Hwins, continuations(Hneeds, Tneeds))\n", + " return P(at_least(h, 'h'), finishes(h, t))\n", "\n", - "def continuations(Hneeds, Tneeds):\n", - " \"All continuations of a game where H needs `Hneeds` points to win and T needs `Tneeds`.\"\n", - " rounds = ['ht' for _ in range(Hneeds + Tneeds - 1)]\n", - " return set(itertools.product(*rounds))" + "def at_least(n, item):\n", + " \"The event of getting at least n instances of item in an outcome.\"\n", + " return lambda outcome: outcome.count(item) >= n\n", + " \n", + "def finishes(h, t):\n", + " \"All finishes of a game where player H needs h points to win and T needs t.\"\n", + " tosses = ['ht'] * (h + t - 1)\n", + " return set(itertools.product(*tosses))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can generate the 16 equiprobable finished that Pierre wrote about:" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 46, "metadata": { "collapsed": false }, @@ -1439,18 +1548,25 @@ " ('t', 't', 't', 't')}" ] }, - "execution_count": 38, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "continuations(2, 3)" + "finishes(2, 3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we can find the 11 of them that are favorable to player `H`:" ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 47, "metadata": { "collapsed": false }, @@ -1458,326 +1574,17 @@ { "data": { "text/plain": [ - "Fraction(11, 16)" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "win_unfinished_game(2, 3)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Our answer agrees with Pascal and Fermat; we're in good company!" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "# Non-Equiprobable Outcomes: Probability Distributions\n", - "\n", - "So far, we have made the assumption that every outcome in a sample space is equally likely. In real life, we often get outcomes that are not equiprobable. For example, the probability of a child being a girl is not exactly 1/2, and the probability is slightly different for a second child. An [article](http://people.kzoo.edu/barth/math105/moreboys.pdf) gives the following counts for two-child families in Denmark, where `GB` means a family where the first child is a girl and the second a boy:\n", - "\n", - " GG: 121801 GB: 126840\n", - " BG: 127123 BB: 135138\n", - " \n", - "We will introduce three more definitions:\n", - "\n", - "* [Frequency](https://en.wikipedia.org/wiki/Frequency_%28statistics%29): a number describing how often an outcome occurs. Can be a count like 121801, or a ratio like 0.515.\n", - "\n", - "* [Distribution](http://mathworld.wolfram.com/StatisticalDistribution.html): A mapping from outcome to frequency for each outcome in a sample space. \n", - "\n", - "* [Probability Distribution](https://en.wikipedia.org/wiki/Probability_distribution): A distribution that has been *normalized* so that the sum of the frequencies is 1.\n", - "\n", - "We define `ProbDist` to take the same kinds of arguments that `dict` does: either a mapping or an iterable of `(key, val)` pairs, and/or optional keyword arguments. " - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [], - "source": [ - "class ProbDist(dict):\n", - " \"A Probability Distribution; an {outcome: probability} mapping.\"\n", - " def __init__(self, mapping=(), **kwargs):\n", - " self.update(mapping, **kwargs)\n", - " # Make probabilities sum to 1.0; assert no negative probabilities\n", - " total = sum(self.values())\n", - " for outcome in self:\n", - " self[outcome] = self[outcome] / total\n", - " assert self[outcome] >= 0" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "We also need to modify the functions `P` and `such_that` to accept either a sample space or a probability distribution as the second argument." - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": { - "button": false, - "collapsed": true, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [], - "source": [ - "def P(event, space): \n", - " \"\"\"The probability of an event, given a sample space of equiprobable outcomes. \n", - " event: a collection of outcomes, or a predicate that is true of outcomes in the event. \n", - " space: a set of outcomes or a probability distribution of {outcome: frequency} pairs.\"\"\"\n", - " if is_predicate(event):\n", - " event = such_that(event, space)\n", - " if isinstance(space, ProbDist):\n", - " return sum(space[o] for o in space if o in event)\n", - " else:\n", - " return Fraction(len(event & space), len(space))\n", - " \n", - "def such_that(predicate, space): \n", - " \"\"\"The outcomes in the sample pace for which the predicate is true.\n", - " If space is a set, return a subset {outcome,...};\n", - " if space is a ProbDist, return a ProbDist {outcome: frequency,...};\n", - " in both cases only with outcomes where predicate(element) is true.\"\"\"\n", - " if isinstance(space, ProbDist):\n", - " return ProbDist({o:space[o] for o in space if predicate(o)})\n", - " else:\n", - " return {o for o in space if predicate(o)}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Here is the probability distribution for Danish two-child families:" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'BB': 0.2645086533229465,\n", - " 'BG': 0.24882071317004043,\n", - " 'GB': 0.24826679089140383,\n", - " 'GG': 0.23840384261560926}" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "DK = ProbDist(GG=121801, GB=126840,\n", - " BG=127123, BB=135138)\n", - "DK" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "And here are some predicates that will allow us to answer some questions:" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "button": false, - "collapsed": true, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [], - "source": [ - "def first_girl(outcome): return outcome[0] == 'G'\n", - "def first_boy(outcome): return outcome[0] == 'B'\n", - "def second_girl(outcome): return outcome[1] == 'G'\n", - "def second_boy(outcome): return outcome[1] == 'B'\n", - "def two_girls(outcome): return outcome == 'GG'" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.4866706335070131" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "P(first_girl, DK)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.4872245557856497" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "P(second_girl, DK)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "The above says that the probability of a girl is somewhere between 48% and 49%, but that it is slightly different between the first or second child." - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(0.4898669165584115, 0.48471942072973107)" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "P(second_girl, such_that(first_girl, DK)), P(second_girl, such_that(first_boy, DK))" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(0.5101330834415885, 0.5152805792702689)" + "Dist({('h', 'h', 'h', 'h'): 1,\n", + " ('h', 'h', 'h', 't'): 1,\n", + " ('h', 'h', 't', 'h'): 1,\n", + " ('h', 'h', 't', 't'): 1,\n", + " ('h', 't', 'h', 'h'): 1,\n", + " ('h', 't', 'h', 't'): 1,\n", + " ('h', 't', 't', 'h'): 1,\n", + " ('t', 'h', 'h', 'h'): 1,\n", + " ('t', 'h', 'h', 't'): 1,\n", + " ('t', 'h', 't', 'h'): 1,\n", + " ('t', 't', 'h', 'h'): 1})" ] }, "execution_count": 47, @@ -1786,178 +1593,100 @@ } ], "source": [ - "P(second_boy, such_that(first_girl, DK)), P(second_boy, such_that(first_boy, DK))" + "favorable(at_least(2, 'h'), finishes(2, 3))" ] }, { "cell_type": "markdown", "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, "source": [ - "The above says that the sex of the second child is more likely to be the same as the first child, by about 1/2 a percentage point." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "# More Urn Problems: M&Ms and Bayes\n", - "\n", - "Here's another urn problem (or \"bag\" problem) [from](http://allendowney.blogspot.com/2011/10/my-favorite-bayess-theorem-problems.html) prolific Python/Probability author [Allen Downey ](http://allendowney.blogspot.com/):\n", - "\n", - "> The blue M&M was introduced in 1995. Before then, the color mix in a bag of plain M&Ms was (30% Brown, 20% Yellow, 20% Red, 10% Green, 10% Orange, 10% Tan). Afterward it was (24% Blue , 20% Green, 16% Orange, 14% Yellow, 13% Red, 13% Brown). \n", - "A friend of mine has two bags of M&Ms, and he tells me that one is from 1994 and one from 1996. He won't tell me which is which, but he gives me one M&M from each bag. One is yellow and one is green. What is the probability that the yellow M&M came from the 1994 bag?\n", - "\n", - "To solve this problem, we'll first represent probability distributions for each bag: `bag94` and `bag96`:" + "Finally, we can answer the question:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "68.75" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "bag94 = ProbDist(brown=30, yellow=20, red=20, green=10, orange=10, tan=10)\n", - "bag96 = ProbDist(blue=24, green=20, orange=16, yellow=14, red=13, brown=13)" + "100 * win_unfinished_game(2, 3)" ] }, { "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, + "metadata": {}, "source": [ - "Next, define `MM` as the joint distribution—the sample space for picking one M&M from each bag. The outcome `'yellow green'` means that a yellow M&M was selected from the 1994 bag and a green one from the 1996 bag." + "We agree with Pascal and Fermat; we're in good company!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Newton's Answer to a Problem by Pepys\n", + "\n", + "\n", + "
Isaac Newton
1693
\n", + "
Samuel Pepys
1693
\n", + "
\n", + "\n", + "Let's jump ahead from 1654 all the way to 1693, [when](http://fermatslibrary.com/s/isaac-newton-as-a-probabilist) Samuel Pepys wrote to Isaac Newton posing the problem:\n", + "\n", + "> Which of the following three propositions has the greatest chance of success? \n", + " 1. Six fair dice are tossed independently and at least one “6” appears. \n", + " 2. Twelve fair dice are tossed independently and at least two “6”s appear. \n", + " 3. Eighteen fair dice are tossed independently and at least three “6”s appear.\n", + " \n", + "Newton was able to answer the question correctly (although his reasoning was not quite right); let's see how we can do. Since we're only interested in whether a die comes up as \"6\" or not, we can define a single die like this:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'brown blue': 0.07199999999999998,\n", - " 'brown brown': 0.03899999999999999,\n", - " 'brown green': 0.059999999999999984,\n", - " 'brown orange': 0.04799999999999999,\n", - " 'brown red': 0.03899999999999999,\n", - " 'brown yellow': 0.041999999999999996,\n", - " 'green blue': 0.023999999999999994,\n", - " 'green brown': 0.012999999999999998,\n", - " 'green green': 0.02,\n", - " 'green orange': 0.015999999999999997,\n", - " 'green red': 0.012999999999999998,\n", - " 'green yellow': 0.013999999999999999,\n", - " 'orange blue': 0.023999999999999994,\n", - " 'orange brown': 0.012999999999999998,\n", - " 'orange green': 0.02,\n", - " 'orange orange': 0.015999999999999997,\n", - " 'orange red': 0.012999999999999998,\n", - " 'orange yellow': 0.013999999999999999,\n", - " 'red blue': 0.04799999999999999,\n", - " 'red brown': 0.025999999999999995,\n", - " 'red green': 0.04,\n", - " 'red orange': 0.031999999999999994,\n", - " 'red red': 0.025999999999999995,\n", - " 'red yellow': 0.027999999999999997,\n", - " 'tan blue': 0.023999999999999994,\n", - " 'tan brown': 0.012999999999999998,\n", - " 'tan green': 0.02,\n", - " 'tan orange': 0.015999999999999997,\n", - " 'tan red': 0.012999999999999998,\n", - " 'tan yellow': 0.013999999999999999,\n", - " 'yellow blue': 0.04799999999999999,\n", - " 'yellow brown': 0.025999999999999995,\n", - " 'yellow green': 0.04,\n", - " 'yellow orange': 0.031999999999999994,\n", - " 'yellow red': 0.025999999999999995,\n", - " 'yellow yellow': 0.027999999999999997}" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "def joint(A, B, sep=''):\n", - " \"\"\"The joint distribution of two independent probability distributions. \n", - " Result is all entries of the form {a+sep+b: P(a)*P(b)}\"\"\"\n", - " return ProbDist({a + sep + b: A[a] * B[b]\n", - " for a in A\n", - " for b in B})\n", - "\n", - "MM = joint(bag94, bag96, ' ')\n", - "MM" + "die6 = Dist({6: 1/6, '-': 5/6})" ] }, { "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, + "metadata": {}, "source": [ - "First we'll look at the \"One is yellow and one is green\" part:" + "Next we can define the joint distribution formed by combining two independent distribution like this:" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, "outputs": [ { "data": { "text/plain": [ - "{'green yellow': 0.25925925925925924, 'yellow green': 0.7407407407407408}" + "Dist({'--': 0.6944444444444445,\n", + " '-6': 0.1388888888888889,\n", + " '6-': 0.1388888888888889,\n", + " '66': 0.027777777777777776})" ] }, "execution_count": 50, @@ -1966,32 +1695,204 @@ } ], "source": [ - "def yellow_and_green(outcome): return 'yellow' in outcome and 'green' in outcome\n", + "def joint(A, B, combine='{}{}'.format):\n", + " \"\"\"The joint distribution of two independent distributions. \n", + " Result is all entries of the form {'ab': frequency(a) * frequency(b)}\"\"\"\n", + " return Dist({combine(a, b): A[a] * B[b]\n", + " for a in A for b in B})\n", "\n", - "such_that(yellow_and_green, MM)" + "joint(die6, die6)" ] }, { "cell_type": "markdown", "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, "source": [ - "Now we can answer the question: given that we got a yellow and a green (but don't know which comes from which bag), what is the probability that the yellow came from the 1994 bag?" + "And the joint distribution from rolling *n* dice:" ] }, { "cell_type": "code", "execution_count": 51, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Dist({'----': 0.48225308641975323,\n", + " '---6': 0.09645061728395063,\n", + " '--6-': 0.09645061728395063,\n", + " '--66': 0.019290123456790122,\n", + " '-6--': 0.09645061728395063,\n", + " '-6-6': 0.019290123456790122,\n", + " '-66-': 0.019290123456790122,\n", + " '-666': 0.0038580246913580245,\n", + " '6---': 0.09645061728395063,\n", + " '6--6': 0.019290123456790126,\n", + " '6-6-': 0.019290123456790126,\n", + " '6-66': 0.0038580246913580245,\n", + " '66--': 0.019290123456790126,\n", + " '66-6': 0.0038580246913580245,\n", + " '666-': 0.0038580246913580245,\n", + " '6666': 0.0007716049382716049})" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def dice(n, die):\n", + " \"Joint probability distribution from rolling `n` dice.\"\n", + " if n == 1:\n", + " return die\n", + " else:\n", + " return joint(die, dice(n - 1, die))\n", + " \n", + "dice(4, die6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we are ready to determine which proposition is more likely to have the required number of sixes:" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.665102023319616" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P(at_least(1, '6'), dice(6, die6))" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.61866737373231" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P(at_least(2, '6'), dice(12, die6))" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5973456859477678" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "P(at_least(3, '6'), dice(18, die6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We reach the same conclusion Newton did, that the best chance is rolling six dice." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "# More Urn Problems: M&Ms and Bayes\n", + "\n", + "Here's another urn problem (actually a \"bag\" problem) [from](http://allendowney.blogspot.com/2011/10/my-favorite-bayess-theorem-problems.html) prolific Python/Probability pundit [Allen Downey ](http://allendowney.blogspot.com/):\n", + "\n", + "> The blue M&M was introduced in 1995. Before then, the color mix in a bag of plain M&Ms was (30% Brown, 20% Yellow, 20% Red, 10% Green, 10% Orange, 10% Tan). Afterward it was (24% Blue , 20% Green, 16% Orange, 14% Yellow, 13% Red, 13% Brown). \n", + "A friend of mine has two bags of M&Ms, and he tells me that one is from 1994 and one from 1996. He won't tell me which is which, but he gives me one M&M from each bag. One is yellow and one is green. What is the probability that the yellow M&M came from the 1994 bag?\n", + "\n", + "To solve this problem, we'll first create distributions for each bag: `bag94` and `bag96`:" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "button": false, + "collapsed": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [], + "source": [ + "bag94 = Dist(brown=30, yellow=20, red=20, green=10, orange=10, tan=10)\n", + "bag96 = Dist(blue=24, green=20, orange=16, yellow=14, red=13, brown=13)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "Next, define `MM` as the joint distribution—the sample space for picking one M&M from each bag. The outcome `'94:yellow 96:green'` means that a yellow M&M was selected from the 1994 bag and a green one from the 1996 bag. In this problem we don't get to see the actual outcome; we just see some evidence about the outcome, that it contains a yellow and a green." + ] + }, + { + "cell_type": "code", + "execution_count": 56, "metadata": { "button": false, "collapsed": false, - "deletable": true, "new_sheet": false, "run_control": { "read_only": false @@ -2001,25 +1902,136 @@ { "data": { "text/plain": [ - "0.7407407407407408" + "Dist({'94:brown 96:blue': 720,\n", + " '94:brown 96:brown': 390,\n", + " '94:brown 96:green': 600,\n", + " '94:brown 96:orange': 480,\n", + " '94:brown 96:red': 390,\n", + " '94:brown 96:yellow': 420,\n", + " '94:green 96:blue': 240,\n", + " '94:green 96:brown': 130,\n", + " '94:green 96:green': 200,\n", + " '94:green 96:orange': 160,\n", + " '94:green 96:red': 130,\n", + " '94:green 96:yellow': 140,\n", + " '94:orange 96:blue': 240,\n", + " '94:orange 96:brown': 130,\n", + " '94:orange 96:green': 200,\n", + " '94:orange 96:orange': 160,\n", + " '94:orange 96:red': 130,\n", + " '94:orange 96:yellow': 140,\n", + " '94:red 96:blue': 480,\n", + " '94:red 96:brown': 260,\n", + " '94:red 96:green': 400,\n", + " '94:red 96:orange': 320,\n", + " '94:red 96:red': 260,\n", + " '94:red 96:yellow': 280,\n", + " '94:tan 96:blue': 240,\n", + " '94:tan 96:brown': 130,\n", + " '94:tan 96:green': 200,\n", + " '94:tan 96:orange': 160,\n", + " '94:tan 96:red': 130,\n", + " '94:tan 96:yellow': 140,\n", + " '94:yellow 96:blue': 480,\n", + " '94:yellow 96:brown': 260,\n", + " '94:yellow 96:green': 400,\n", + " '94:yellow 96:orange': 320,\n", + " '94:yellow 96:red': 260,\n", + " '94:yellow 96:yellow': 280})" ] }, - "execution_count": 51, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "def yellow94(outcome): return outcome.startswith('yellow')\n", - "\n", - "P(yellow94, such_that(yellow_and_green, MM))" + "MM = joint(bag94, bag96, '94:{} 96:{}'.format)\n", + "MM" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "We observe that \"One is yellow and one is green\":" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "button": false, + "collapsed": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Dist({'94:green 96:yellow': 140, '94:yellow 96:green': 400})" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def yellow_and_green(outcome): return 'yellow' in outcome and 'green' in outcome\n", + "\n", + "favorable(yellow_and_green, MM)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Given this observation, we want to know \"What is the probability that the yellow M&M came from the 1994 bag?\"" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "button": false, + "collapsed": false, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7407407407407407" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def yellow94(outcome): return '94:yellow' in outcome\n", + "\n", + "P(yellow94, favorable(yellow_and_green, MM))" ] }, { "cell_type": "markdown", "metadata": { "button": false, - "deletable": true, "new_sheet": false, "run_control": { "read_only": false @@ -2035,7 +2047,7 @@ "
Rev. Thomas Bayes
1701-1761\n", "
\n", "\n", - "Of course, we *could* solve it using Bayes Theorem. Why is Bayes Theorem recommended? Because we are asked about the probability of an event given the evidence, which is not immediately available; however the probability of the evidence given the event is. \n", + "Of course, we *could* solve it using Bayes Theorem. Why is Bayes Theorem recommended? Because we are asked about the probability of an outcome given the evidence—the probability the yellow came from the 94 bag, given that there is a yellow and a green. But the problem statement doesn't directly tell us the probability of that outcome given the evidence; it just tells us the probability of the evidence given the outcome. \n", "\n", "Before we see the colors of the M&Ms, there are two hypotheses, `A` and `B`, both with equal probability:\n", "\n", @@ -2051,7 +2063,7 @@ " \n", " P(A | E)\n", " \n", - "That's not easy to calculate (except by enumerating the sample space). But Bayes Theorem says:\n", + "That's not easy to calculate (except by enumerating the sample space, which our `P` function does). But Bayes Theorem says:\n", " \n", " P(A | E) = P(E | A) * P(A) / P(E)\n", " \n", @@ -2070,171 +2082,12 @@ " = 0.04 * 0.5 / 0.027 \n", " = 0.7407407407\n", " \n", - "You have a choice: Bayes Theorem allows you to do less calculation at the cost of more algebra; that is a great trade-off if you are working with pencil and paper. Enumerating the state space allows you to do less algebra at the cost of more calculation; often a good trade-off if you have a computer. But regardless of the approach you use, it is important to understand Bayes theorem and how it works.\n", + "You have a choice: Bayes Theorem allows you to do less calculation at the cost of more algebra; that is a great trade-off if you are working with pencil and paper. Enumerating the sample space allows you to do less algebra at the cost of more calculation; usually a good trade-off if you have a computer. But regardless of the approach you use, it is important to understand Bayes theorem and how it works.\n", "\n", "There is one important question that Allen Downey does not address: *would you eat twenty-year-old M&Ms*?\n", "😨" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Newton's Answer to a Problem by Pepys\n", - "\n", - "\n", - "
Isaac Newton
1693
\n", - "
Samuel Pepys
1693
\n", - "
\n", - "\n", - "[This paper](http://fermatslibrary.com/s/isaac-newton-as-a-probabilist) explains how Samuel Pepys wrote to Isaac Newton in 1693 to pose the problem:\n", - "\n", - "> Which of the following three propositions has the greatest chance of success? \n", - " 1. Six fair dice are tossed independently and at least one “6” appears. \n", - " 2. Twelve fair dice are tossed independently and at least two “6”s appear. \n", - " 3. Eighteen fair dice are tossed independently and at least three “6”s appear.\n", - " \n", - "Newton was able to answer the question correctly (although his reasoning was not quite right); let's see how we can do. Since we're only interested in whether a die comes up as \"6\" or not, we can define a single die and the joint distribution over *n* dice as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "die = ProbDist({'6':1/6, '-':5/6})\n", - "\n", - "def dice(n, die):\n", - " \"Joint probability from tossing n dice.\"\n", - " if n == 1:\n", - " return die\n", - " else:\n", - " return joint(die, dice(n - 1, die))" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'---': 0.5787037037037037,\n", - " '--6': 0.11574074074074073,\n", - " '-6-': 0.11574074074074073,\n", - " '-66': 0.023148148148148143,\n", - " '6--': 0.11574074074074073,\n", - " '6-6': 0.023148148148148143,\n", - " '66-': 0.023148148148148143,\n", - " '666': 0.0046296296296296285}" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dice(3, die)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we are ready to determine which proposition is more likely to have the required number of sixes:" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def at_least(k, result): return lambda s: s.count(result) >= k" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.6651020233196158" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "P(at_least(1, '6'), dice(6, die))" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.6186673737322984" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "P(at_least(2, '6'), dice(12, die))" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.5973456859478073" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "P(at_least(3, '6'), dice(18, die))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We reach the same conclusion Newton did, that the best chance is rolling six dice." - ] - }, { "cell_type": "markdown", "metadata": { @@ -2250,51 +2103,52 @@ "\n", "# Simulation\n", "\n", - "Sometimes it is inconvenient to explicitly define a sample space. Perhaps the sample space is infinite, or perhaps it is just very large and complicated, and we feel more confident in writing a program to *simulate* one pass through all the complications, rather than try to *enumerate* the complete sample space. *Random sampling* from the simulation\n", - "can give an accurate estimate of the probability.\n", + "Sometimes it is inconvenient, difficult, or even impossible to explicitly enumerate a sample space. Perhaps the sample space is infinite, or perhaps it is just very large and complicated (perhaps with a bunch of low-probability outcomes that don't seem very important). In that case, we might feel more confident in writing a program to *simulate* a random outcome. *Random sampling* from such a simulation\n", + "can give an accurate estimate of probability.\n", "\n", "# Simulating Monopoly\n", "\n", - "![](http://buckwolf.org/a.abcnews.com/images/Entertainment/ho_hop_go_050111_t.jpg)
[Mr. Monopoly](https://en.wikipedia.org/wiki/Rich_Uncle_Pennybags)
1940—\n", + "![Mr. Monopoly](http://buckwolf.org/a.abcnews.com/images/Entertainment/ho_hop_go_050111_t.jpg)
[Mr. Monopoly](https://en.wikipedia.org/wiki/Rich_Uncle_Pennybags)
1940—\n", "\n", - "Consider [problem 84](https://projecteuler.net/problem=84) from the excellent [Project Euler](https://projecteuler.net), which asks for the probability that a player in the game Monopoly ends a roll on each of the squares on the board. To answer this we need to take into account die rolls, chance and community chest cards, and going to jail (from the \"go to jail\" space, from a card, or from rolling doubles three times in a row). We do not need to take into account anything about buying or selling properties or exchanging money or winning or losing the game, because these don't change a player's location. We will assume that a player in jail will always pay to get out of jail immediately. \n", + "Consider [problem 84](https://projecteuler.net/problem=84) from the excellent [Project Euler](https://projecteuler.net), which asks for the probability that a player in the game Monopoly ends a roll on each of the squares on the board. To answer this we need to take into account die rolls, chance and community chest cards, and going to jail (from the \"go to jail\" space, from a card, or from rolling doubles three times in a row). We do not need to take into account anything about acquiring properties or exchanging money or winning or losing the game, because these events don't change a player's location. \n", "\n", - "A game of Monopoly can go on forever, so the sample space is infinite. But even if we limit the sample space to say, 1000 rolls, there are $21^{1000}$ such sequences of rolls (and even more possibilities when we consider drawing cards). So it is infeasible to explicitly represent the sample space.\n", + "A game of Monopoly can go on forever, so the sample space is infinite. Even if we limit the sample space to say, 1000 rolls, there are $21^{1000}$ such sequences of rolls, and even more possibilities when we consider drawing cards. So it is infeasible to explicitly represent the sample space. There are techniques for representing the problem as\n", + "a Markov decision problem (MDP) and solving it, but the math is complex (a [paper](https://faculty.math.illinois.edu/~bishop/monopoly.pdf) on the subject runs 15 pages).\n", "\n", - "But it is fairly straightforward to implement a simulation and run it for, say, 400,000 rolls (so the average square will be landed on 10,000 times). Here is the code for a simulation:" + "The simplest approach is to implement a simulation and run it for, say, a million rolls. Here is the code for a simulation:" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "from collections import deque\n", - "import random\n", + "from collections import deque as Deck # a Deck of community chest or chance cards\n", "\n", - "# The board: as specified by https://projecteuler.net/problem=84\n", + "# The Monopoly board, as specified by https://projecteuler.net/problem=84\n", "(GO, A1, CC1, A2, T1, R1, B1, CH1, B2, B3,\n", " JAIL, C1, U1, C2, C3, R2, D1, CC2, D2, D3, \n", " FP, E1, CH2, E2, E3, R3, F1, F2, U2, F3, \n", " G2J, G1, G2, CC3, G3, R4, CH3, H1, T2, H2) = board = range(40)\n", "\n", - "Deck = deque\n", - "\n", + "# A card is either a square, a set of squares meaning advance to the nearest, \n", + "# a -3 to go back 3 spaces, or None meaning no change to location.\n", "CC_deck = Deck([GO, JAIL] + 14 * [None])\n", - "CH_deck = Deck([GO, JAIL, C1, E3, H2, R1, {R1, R2, R3, R4}, {R1, R2, R3, R4}, {U1, U2}, -3] + 6 * [None])\n", + "CH_deck = Deck([GO, JAIL, C1, E3, H2, R1, -3, {U1, U2}] \n", + " + 2 * [{R1, R2, R3, R4}] + 6 * [None])\n", "\n", - "def monopoly(steps):\n", - " \"\"\"Simulate given number of steps of a Monopoly game, \n", + "def monopoly(rolls):\n", + " \"\"\"Simulate given number of dice rolls of a Monopoly game, \n", " and return the counts of how often each square is visited.\"\"\"\n", " counts = [0] * len(board)\n", - " doubles = 0\n", + " doubles = 0 # Number of consecutive doubles rolled\n", " random.shuffle(CC_deck)\n", " random.shuffle(CH_deck)\n", " goto(GO)\n", - " for _ in range(steps):\n", + " for _ in range(rolls):\n", " d1, d2 = random.randint(1, 6), random.randint(1, 6)\n", " doubles = (doubles + 1 if d1 == d2 else 0)\n", " goto(here + d1 + d2)\n", @@ -2315,14 +2169,15 @@ "\n", "def do_card(deck):\n", " \"Take the top card from deck and do what it says.\"\n", - " card = deck[0] # The top card\n", - " deck.rotate(-1) # Move top card to bottom of deck\n", + " card = deck.popleft() # The top card\n", + " deck.append(card) # Move top card to bottom of deck\n", " if card == None: # Don't move\n", " pass\n", " elif card == -3: # Go back 3 spaces\n", " goto(here - 3)\n", " elif isinstance(card, set): # Advance to next railroad or utility\n", - " goto(min({place for place in card if place > here} or card))\n", + " next1 = min({place for place in card if place > here} or card)\n", + " goto(next1)\n", " else: # Go to destination named on card\n", " goto(card)" ] @@ -2338,12 +2193,12 @@ } }, "source": [ - "And the results:" + "Let's run the simulation for a million dice rolls:" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 60, "metadata": { "button": false, "collapsed": false, @@ -2355,7 +2210,7 @@ }, "outputs": [], "source": [ - "counts = monopoly(400000)" + "counts = monopoly(10**6)" ] }, { @@ -2369,12 +2224,12 @@ } }, "source": [ - "I'll show a histogram of the squares, with a dotted red line at the average:" + "And print a table of square names and their percentages:" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 61, "metadata": { "button": false, "collapsed": false, @@ -2386,321 +2241,295 @@ }, "outputs": [ { - "data": { - "image/png": "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\n/j+i2P3L3vNP/QAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "JAIL 6.23%\n", + "E3 3.21%\n", + "R3 3.09%\n", + "GO 3.09%\n", + "D3 3.08%\n", + "R1 3.00%\n", + "D2 2.94%\n", + "R2 2.91%\n", + "E1 2.85%\n", + "FP 2.84%\n", + "U2 2.80%\n", + "D1 2.78%\n", + "E2 2.72%\n", + "C1 2.69%\n", + "F1 2.69%\n", + "F2 2.66%\n", + "G2 2.64%\n", + "G1 2.64%\n", + "H2 2.63%\n", + "F3 2.61%\n", + "U1 2.61%\n", + "CC2 2.60%\n", + "G3 2.48%\n", + "C3 2.46%\n", + "R4 2.41%\n", + "CC3 2.40%\n", + "C2 2.39%\n", + "T1 2.34%\n", + "B2 2.31%\n", + "B3 2.29%\n", + "B1 2.26%\n", + "H1 2.21%\n", + "T2 2.17%\n", + "A2 2.15%\n", + "A1 2.15%\n", + "CC1 1.88%\n", + "CH2 1.07%\n", + "CH3 0.91%\n", + "CH1 0.82%\n", + "G2J 0.00%\n" + ] } ], + "source": [ + "property_names = \"\"\"\n", + " GO, A1, CC1, A2, T1, R1, B1, CH1, B2, B3,\n", + " JAIL, C1, U1, C2, C3, R2, D1, CC2, D2, D3, \n", + " FP, E1, CH2, E2, E3, R3, F1, F2, U2, F3, \n", + " G2J, G1, G2, CC3, G3, R4, CH3, H1, T2, H2\"\"\".replace(',', ' ').split()\n", + "\n", + "for (c, n) in sorted(zip(counts, property_names), reverse=True):\n", + " print('{:4} {:.2%}'.format(n, c / sum(counts)))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "There is one square far above average: `JAIL`, at a little over 6%. There are four squares far below average: the three chance squares, `CH1`, `CH2`, and `CH3`, at around 1% (because 10 of the 16 chance cards send the player away from the square), and the \"Go to Jail\" square, which has a frequency of 0 because you can't end a turn there. The other squares are around 2% to 3% each, which you would expect, because 100% / 40 = 2.5%." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Central Limit Theorem \n", + "\n", + "We have covered the concept of *distributions* of outcomes. You may have heard of the *normal distribution*, the *bell-shaped curve.* In Python it is called `random.normalvariate` (also `random.gauss`). We can plot it with the help of the `repeated_hist` function defined below, which samples a distribution `n` times and displays a histogram of the results. (*Note:* in this section I am using \"distribution\" to mean a function that, each time it is called, returns a random sample from a distribution. I am not using it to mean a mapping of type `Dist`.)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "%matplotlib inline \n", "import matplotlib.pyplot as plt\n", - "\n", - "plt.hist(list(range(40)), bins=40, weights=counts, normed=True)\n", - "plt.plot([0, 39], [1/40, 1/40], 'r--');" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "There is one square far above average: `JAIL`, at a little over 6%. There are four squares far below average: the three chance squares, `CH1`, `CH2`, and `CH3`, at around 1% (because 10 of the 16 chance cards send the player away from the square), and the \"Go to Jail\" square, square number 30 on the plot, which has a frequency of 0 because you can't end a turn there. The other squares are around 2% to 3% each, which you would expect, because 100% / 40 = 2.5%." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# The Central Limit Theorem / Strength in Numbers Theorem\n", - "\n", - "So far, we have talked of an *outcome* as being a single state of the world. But it can be useful to break that state of the world down into components. We call these components **random variables**. For example, when we consider an experiment in which we roll two dice and observe their sum, we could model the situation with two random variables, one for each die. (Our representation of outcomes has been doing that implicitly all along, when we concatenate two parts of a string, but the concept of a random variable makes it official.)\n", - "\n", - "The **Central Limit Theorem** states that if you have a collection of random variables and sum them up, then the larger the collection, the closer the sum will be to a *normal distribution* (also called a *Gaussian distribution* or a *bell-shaped curve*). The theorem applies in all but a few pathological cases. \n", - "\n", - "As an example, let's take 5 random variables reprsenting the per-game scores of 5 basketball players, and then sum them together to form the team score. Each random variable/player is represented as a function; calling the function returns a single sample from the distribution:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "from random import gauss, triangular, choice, vonmisesvariate, uniform\n", - "\n", - "def SC(): return posint(gauss(15.1, 3) + 3 * triangular(1, 4, 13)) # 30.1\n", - "def KT(): return posint(uniform(5.2, 15.2) + 3 * triangular(1, 3.5, 9)) # 22.1\n", - "def DG(): return posint(vonmisesvariate(30, 2) * 3.08) # 14.0\n", - "def HB(): return posint(gauss(6.7, 1.5) if choice((True, False)) else gauss(16.7, 2.5)) # 11.7\n", - "def OT(): return posint(triangular(0, 12, 20) + uniform(0, 40) + gauss(6, 3)) # 37.0\n", - "\n", - "def posint(x): \"Positive integer\"; return max(0, int(round(x)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And here is a function to sample a random variable *k* times, show a histogram of the results, and return the mean:" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ "from statistics import mean\n", + "from random import normalvariate, triangular, choice, vonmisesvariate, uniform\n", "\n", - "def repeated_hist(rv, bins=10, k=200000):\n", - " \"Repeat rv() k times and make a histogram of the results.\"\n", - " samples = [rv() for _ in range(k)]\n", - " plt.hist(samples, bins=bins)\n", - " return mean(samples)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The two top-scoring players have scoring distributions that are slightly skewed from normal:" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "30.12574" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nSS2GgySp5f8DHUe3a7aRZB8AAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "repeated_hist(SC, bins=range(60))" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "22.16258" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "repeated_hist(KT, bins=range(60))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The next two players have bi-modal distributions; some games they score a lot, some games not:" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "14.005885" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "repeated_hist(DG, bins=range(60))" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "11.702395" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "repeated_hist(HB, bins=range(60))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The fifth \"player\" (actually the sum of all the other players on the team) looks like this:" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "36.338295" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nP+13wyYAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "repeated_hist(OT, bins=range(0, 70, 2))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we define the team score to be the sum of the five players, and look at the distribution:" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "114.30268" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def GSW(): return SC() + KT() + DG() + HB() + OT()\n", + "def normal(mu=0, sigma=1): return random.normalvariate(mu, sigma)\n", "\n", - "repeated_hist(GSW, bins=range(70, 160, 2))" + "def repeated_hist(dist, n=10**6, bins=100):\n", + " \"Sample the distribution n times and make a histogram of the results.\"\n", + " samples = [dist() for _ in range(n)]\n", + " plt.hist(samples, bins=bins, normed=True)\n", + " plt.title('{} (μ = {:.1f})'.format(dist.__name__, mean(samples)))\n", + " plt.grid(axis='x')\n", + " plt.yticks([], '')\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWQAAAEICAYAAABoLY4BAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADGJJREFUeJzt3X+s73VdB/DnSzBMfgiFlQJyTa1FglIO3dQitaJk4V8t\nw4xa1pZNXTiGWdlGZatWzNlm1kyaLHOzonSWuKRsTRaQYEQGOdAQCOQ3Wo5698f3e/XL8RzuOdx7\nvp/X+X4fj+3sfs/38/me8/pc7nnyuq/P+/29NcYIANN73NQFADAjkAGaEMgATQhkgCYEMkATAhmg\nCYFMS1V1RVX91KMcP6WqrqqqWmZdu6WqvrGqbqiqI6auhekIZPaqi5L89ph4IX1VPbeqrq6qL8x/\nfe6jnHtEVb2rqu6vqtur6uf3Hxtj3JHko0l+ehl105NA5qBV1eFL/n5PSfI9Sf5imd93kzq+Jsll\nSd6T5LgklyS5bP78Zn4lybOSnJxZ/RdU1VkLxy9N8jO7VjDtCeQ1VlU3V9Ubq+q6qrqvqv60qp6w\ncPw1VXVTVd1dVX9ZVU9dODaq6rVVdWOSGxee+9mqurGqHqiqi6rqGVX1j/Ou8H37w6qqjquqD1TV\nnVV1z/zxidss/XuTXDPG+O8N9Txz4fN3V9WvHuRv0YGcmeTwJBePMf5njPG2JJXkJVuc/+NJLhpj\n3DPGuCHJO5Oct3D8yiTfXFUn717JdCaQ+eEkZyV5epLTMg+IqnpJkrfOjz8lyS1J3rvhta9I8vwk\npyw89/1JvjPJC5JckFnovCrJSUmeneSV8/Mel+SPMusWn5bki0nevs2aT03yqW2e+1Wq6kVVde+j\nfLxom1/q25Nct2Fscu38+Y3f87jMfh+v3ercMcbDSW5K8pydXhOrYal/1aSlt40xPpckVfVXSfbP\nQM9N8q4xxjXzY29Kck9V7Rtj3Dw/561jjLs3fL3fHGPcn+T6qvqXJB8eY3x6/jU+lOT0JJeMMT6f\n5P37X1RVv5bZDHU7jk3y+R1e55eNMf5h/jUO1lFJ7tvw3P1Jjt7i3Gw4f7NzHzhEtbEH6ZC5feHx\nF/KV4HhqZl1xkmSM8WBmIXjCwvmf3eTr3bHw+IubfH5UklTVE6vq96vqlqq6P8nfJzm2qg7bRs33\nZPPQ21VV9eDCx9OSPJjkmA2nPSmzUN3owfmvxxzg3KOT3Hso6mXvEchs5XOZjROSJFV1ZJKvT3Lr\nwjkHs8Lh/CTfmuT5Y4xjknzX/m+1jddel+RbNnn+axceP2mrF1fVizeE68aPF2/2ujHGUQsfn0ly\nfZLTNiy9O23+/MbX3pPktjxyHPGcxXPnN0efmUeONVgjApmt/EmSn5gv6zoiya8nuXJhXHGwjs6s\nY763qr4uyVt28NrLk3zH4g3IufOq6rD50rOXJTm6qh6/8cVjjI9tCNeNHx/bZh1XJPnfJK+bL2l7\nXWb/k/rbLc7/4yS/OL+h+W1JXpPk3QvHz0hy8xjjls1ezOoTyGxqjPGRJL+U2Zz3tiTPSPIjh/Bb\nXJxZR3tXko8n+esd1HZHZqF3zoZDT8ys1j9I8stJXp2tVzwctDHGlzK7sfnqzMYM5yV5xfz5VNW5\nVbXYLb8lyX9kNgq6IrN5++J1n5vkHbtVL/2VN6hnL6qqUzJb93vGGGNU1UjyrDHGTROX9phU1Tck\n+bskpy8u52O9CGRWwl4PZEiMLADa0CEDNKFDBmhiRzv1jj/++LFv375dKmU5HnrooRx55JFTlzEJ\n1+7a11GH67/66qvvGmM8+UDn7SiQ9+3bl6uuuuqxV9XAFVdckTPPPHPqMibh2s+cuoxJrPO1Jz2u\nv6q2tbbcyAKgCYEM0IRABmhCIAM0IZABmhDIAE0IZIAmBDJAEwIZoAn/yCkrbd+FH0ySnH/qwzlv\n/jhJbv6Nl09VEmxJILNy9i0EL+wlApmVsNMQ3qdbpiEzZIAmBDJAEwIZoAkzZNaeeTJd6JABmtAh\ns2dZ3saq0SEDNCGQAZoQyABNCGSAJgQyQBNWWcACa5KZkkBmT7HUjVVmZAHQhEAGaEIgAzQhkAGa\ncFMPtmDFBcumQwZoQiADNGFkQXvWHrMudMgATQhkgCYEMkATAhmgCYEM0IRABmhCIAM0YR0ybINt\n1CyDDhmgCR0yLdmdxzrSIQM0IZABmhDIAE0IZIAmBDJAEwIZoAmBDNCEdciwQxvXSNu5x6GiQwZo\nQiADNGFkQRu2S7PudMgATQhkgCYEMkATAhmgCYEM0IRABmjCsjc4SP69PQ4VHTJAEwIZoAmBDNCE\nGTKTsl0avkKHDNCEQAZoQiADNCGQAZoQyABNCGSAJgQyQBPWIcMh5H0tOBg6ZIAmBDJAE0YWLJ3t\n0rA5HTJAEwIZoAmBDNCEQAZoQiADNCGQAZoQyABNWIcMu8Q2anZKhwzQhEAGaMLIgqWwXRoOTIcM\n0IRABmhCIAM0IZABmhDIAE0IZIAmBDJAE9YhwxLYRs126JABmhDIAE0IZIAmBDJAEwIZoAmrLNg1\n3uENdkaHDNCEQAZoQiADNCGQAZoQyABNCGSAJgQyQBPWIcOSeec3tqJDBmhCIAM0YWTBIWW7NDx2\nOmSAJgQyQBMCGaAJgQzQhEAGaEIgAzQhkAGaEMgATdgYAhPyvhYs0iEDNCGQAZowsuCgef8KODR0\nyABNCGSAJgQyQBMCGaAJgQzQhEAGaEIgAzRhHTI0YRs1OmSAJgQyQBNGFjwmtkvDoadDBmhCIAM0\nIZABmhDIAE0IZIAmBDJAE5a9QUN27a0nHTJAEwIZoAkjC7bN7jzYXTpkgCYEMkATAhmgCYEM0IRA\nBmhCIAM0YdkbNGfX3vrQIQM0IZABmjCyYEt25sFy6ZABmhDIAE0IZIAmBDJAEwIZoAmrLGAPsUlk\ntemQAZoQyABNGFnwCDaDwHR0yABNCGSAJgQyQBNmyLBHWQK3enTIAE0IZIAmBDJAE2bIWHsMTeiQ\nAZoQyABNCGSAJgQyQBNu6sEKsElkNQjkNWVlBfRjZAHQhEAGaEIgAzQhkAGacFMPVowVF3uXDhmg\nCYEM0ISRxRr55K335Tzrj6EtHTJAEwIZoAmBDCts34UfzCdvvc9W+T3CDHnFLf4gnn/qhIUAB6RD\nBmhCIAM0IZABmjBDhjVhS3V/OmSAJnTIK8gSJ9ibdMgATeiQYQ2ZJ/ekQwZoQoe8IsyNYe/TIQM0\noUOGNWee3IdA3sOMKWC1GFkANKFDBr7M+GJaAnmPMaaA1WVkAdCEDnkP0BUzBeOL5dMhAzShQ25K\nV0wnuuXlEMiNCGH2AuG8ewQy8JgJ50NLIE9MV8yq2PhnWUDvnEBeEsHLutE975xAPsQEL3y1rX4u\nBPUjCeRNCFVYjp3+rK16gNcYY/snV92Z5JbdK2cpjk9y19RFTMS1r6d1vvakx/WfPMZ48oFO2lEg\nr4KqumqM8byp65iCa3ft62gvXb+degBNCGSAJtYxkN85dQETcu3raZ2vPdlD1792M2SArtaxQwZo\nSSADNLHWgVxV51fVqKrjp65lWarqt6rq36rquqr686o6duqadltVnVVVn6qqm6rqwqnrWZaqOqmq\nPlpV/1pV11fV66euadmq6rCq+ueq+sDUtWzH2gZyVZ2U5PuSfGbqWpbs8iTPHmOcluTfk7xp4np2\nVVUdluT3kvxAklOSvLKqTpm2qqV5OMn5Y4xTkrwgyWvX6Nr3e32SG6YuYrvWNpCT/G6SC5Ks1V3N\nMcaHxxgPzz/9eJITp6xnCc5IctMY49NjjC8leW+ScyauaSnGGLeNMa6ZP34gs2A6YdqqlqeqTkzy\n8iR/OHUt27WWgVxV5yS5dYxx7dS1TOwnk3xo6iJ22QlJPrvw+X9mjUJpv6ral+T0JFdOW8lSXZxZ\n0/V/UxeyXSv75kJV9ZEk37TJoTcn+YXMxhUr6dGufYxx2fycN2f2V9pLl1kby1dVRyV5f5I3jDHu\nn7qeZaiqs5P81xjj6qo6c+p6tmtlA3mM8bLNnq+qU5M8Pcm1VZXM/sp+TVWdMca4fYkl7pqtrn2/\nqjovydlJXjpWfyH6rUlOWvj8xPlza6GqHp9ZGF86xvizqetZohcm+aGq+sEkT0hyTFW9Z4zxqonr\nelRrvzGkqm5O8rwxxtTvBrUUVXVWkt9J8t1jjDunrme3VdXhmd28fGlmQfxPSX50jHH9pIUtQc06\njkuS3D3GeMPU9Uxl3iG/cYxx9tS1HMhazpDX3NuTHJ3k8qr6RFW9Y+qCdtP8BubPJfmbzG5qvW8d\nwnjuhUl+LMlL5v+tPzHvGGlq7TtkgC50yABNCGSAJgQyQBMCGaAJgQzQhEAGaEIgAzTx/wMJ4oU1\ndxsGAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Normal distribution\n", + "repeated_hist(normal)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Sure enough, this looks very much like a normal distribution. The Central Limit Theorem appears to hold in this case. But I have to say \"Central Limit\" is not a very evocative name, so I propose we re-name this as the **Strength in Numbers Theorem**, to indicate the fact that if you have a lot of numbers, you tend to get the expected result." + "Why is this distribution called *normal*? The **Central Limit Theorem** says that it is the ultimate limit of other distributions, as follows (informally):\n", + "- Gather *k* independent distributions. They need not be normal-shaped.\n", + "- Define a new distribution to be the result of sampling one number from each of the *k* independent distributions and adding them up.\n", + "- As long as *k* is not too small, and the component distributions are not super-pathological, then the new distribution will tend towards a normal distribution.\n", + "\n", + "Here's a simple example: summing ten independent die rolls:" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nsiQ1YSBLUhN+U08trfQ38vxKtTqyhyxJTRjIktSEgSxJTRjIktSEgSxJTRjIktSEgSxJTRjIktSE\ngSxJTRjIktSEgSxJTRjIktSEgSxJTRjIktSEl9/Uqlrpy2zuLC/LqdVkD1mSmjCQJakJA1mSmjCQ\nJakJA1mSmjCQJakJA1mSmjCQJakJA1mSmjCQJakJA1mSmjCQJakJA1mSmjCQJakJA1mSmjCQJakJ\nA1mSmjCQJakJf8JJc9Htp5qkjgxkaQds7w3l/FM2zLElmjKHLCSpCQNZkpowkCWpCQNZkpowkCWp\nCQNZkpowkCWpCQNZkpowkCWpCQNZkpowkCWpCQNZkpowkCWpCQNZkpowkCWpCQNZkpowkCWpCQNZ\nkpowkCWpCX9TT9pNV91wO2cs8Zt7W845bRVao7XMQNYetVw4SbpvDllIUhMGsiQ1YSBLUhMGsiQ1\nYSBLUhMGsiQ1YSBLUhMGsiQ1YSBLUhMGsiQ1YSBLUhMGsiQ1YSBLUhMGsiQ1YSBLUhMGsiQ1YSBL\nUhMGsiQ1YSBLUhMGsiQ1YSBLUhP+6rR2ycZlfln6+Y+dc0MaW24fbTnntDm3RGuFPWRJasJAlqQm\nDGRJasJAlqQmDGRJasJAlqQmDGRJasJAlqQmDGRJasJAlqQmDGRJasJAlqQmDGRJasJAlqQmDGRJ\nasJAlqQmDGRJasJAlqQmDGRJasJAlqQmDGRJasJAlqQm9lrtBqiv5X7GXrtnuf265ZzT5twSdWMP\nWZKaMJAlqQkDWZKaMJAlqQkDWZKaMJAlqQkDWZKaMJAlqQkDWZKaMJAlqQkDWZKaMJAlqQkDWZKa\nMJAlqQkDWZKaMJAlqQkDWZKaMJAlqQkDWZKaMJAlqQl/5FT+mGkT/vip7CFLUhMGsiQ1YSBLUhMG\nsiQ1YSBLUhMGsiQ1YSBLUhMGsiQ1YSBLUhMGsiQ1YSBLUhMGsiQ1YSBLUhMGsiQ1YSBLUhMGsiQ1\nYSBLUhP+Ysg64i+DrE3+ksj6YQ9ZkpowkCWpCQNZkpowkCWpCQNZkpowkCWpCQNZkpowkCWpCQNZ\nkpowkCWpCQNZkpowkCWpCQNZkprwam8T5FXd1gevAjc99pAlqQkDWZKaMJAlqQkDWZKaMJAlqQkD\nWZKaMJAlqQkDWZKaMJAlqQkDWZKaMJAlqQmvZbGGec0KaVoMZGlivOjQ2uWQhSQ1YSBLUhMGsiQ1\nYSBLUhMGsiQ1YSBLUhMGsiQ1YSBLUhN+MWQN8Bt52hP8wkh/9pAlqQkDWZKaMJAlqQkDWZKaMJAl\nqQnPsmjEsym0Gjz7og97yJLUhIEsSU0YyJLUhIEsSU14UG8VePBOa8Fyr9PzT9kw55asH/aQJakJ\nA1mSmnDIYgVddcPtnOHwhCZmude15y3vPnvIktSEPeQ9YLmDH89/7JwbIq2i7R2stve8YwzkJXgW\nhLRn7ez/qfUa4KmqHV84uRm4bhe3dShwyy4+d62y5vVhvdW83uqF3a/5yKo67L4W2qlA3h1JLquq\nH5zLxpqw5vVhvdW83uqF+dXsQT1JasJAlqQm5hnIb5jjtrqw5vVhvdW83uqFOdU8tzFkSdL2OWQh\nSU0YyJLUxIoEcpI3Jtma5OqZaYck+VCS/xz/PmAltr0akhyR5KNJPpvkmiTPHadPueb9knwyyZVj\nzS8bp0+25gVJ7pfkU0kuGh9PuuYkW5JcleTTSS4bp0295oOTvDPJ55JsTvIj86h5pXrI5wOnLJp2\nFvDhqnoU8OHx8VR8C3h+VR0NPB743SRHM+2avwGcVFXHAccDpyR5PNOuecFzgc0zj9dDzT9eVcfP\nnIs79ZpfA3ygqh4NHMfw773yNVfVityAjcDVM4+vBR4y3n8IcO1KbXu1b8CFwJPXS83AAcAVwA9P\nvWbg4eN/xpOAi8ZpU695C3DoommTrRm4P/AlxpMe5lnzPMeQD6+qr4z3bwQOn+O25ybJRuAE4BNM\nvObxo/unga3Ah6pq8jUDrwZeCNwzM23qNRdwcZLLk/zWOG3KNX8PcDPwt+PQ1LlJNjCHmlfloF4N\nbzGTO98uyYHAPwLPq6o7ZudNseaquruqjmfoNT4uyWMWzZ9UzUlOB7ZW1eXLLTO1mkcnjv/OT2UY\njnvi7MwJ1rwX8APAX1XVCcA2Fg1PrFTN8wzkm5I8BGD8u3WO215xSfZmCOO/r6p3jZMnXfOCqroN\n+CjDcYMp1/wE4CeTbAEuAE5K8hamXTNVdcP4dyvwbuBxTLvm64Hrx098AO9kCOgVr3megfxe4Jnj\n/WcyjLNOQpIA5wGbq+rPZmZNuebDkhw83t+fYcz8c0y45qp6cVU9vKo2Ar8IfKSqfpkJ15xkQ5KD\nFu4DPwFczYRrrqobgS8nOWqcdDLwWeZQ84p8Uy/J24BNDJesuwl4KfAe4B3AIxgu4fnzVfW1Pb7x\nVZDkROBS4Cr+f2zxbIZx5KnWfCzwJuB+DG/s76iqlyd5IBOteVaSTcAfVNXpU645ySMZesUwfJR/\na1X9yZRrBkhyPHAusA/wReDXGF/nrGDNfnVakprwm3qS1ISBLElNGMiS1ISBLElNGMiS1ISBLElN\nGMiS1MT/AekMsW/hANdAAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def sum10dice(): return sum(random.randint(1, 6) for _ in range(10))\n", + "\n", + "repeated_hist(sum10dice, bins=range(10, 61))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As another example, let's take just *k* = 5 component distributions representing the per-game scores of 5 basketball players, and then sum them together to form the new distribution, the team score. I'll be creative in defining the distributions for each player, but [historically accurate](https://www.basketball-reference.com/teams/GSW/2016.html) in the mean for each distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def SC(): return max(0, normal(12.1, 3) + 3 * triangular(1, 13, 4)) # 30.1\n", + "def KT(): return max(0, triangular(8, 22, 15.3) + choice((0, 3 * triangular(1, 9, 4)))) # 22.1\n", + "def DG(): return max(0, vonmisesvariate(30, 2) * 3.08) # 14.0\n", + "def HB(): return max(0, choice((normal(6.7, 1.5), normal(16.7, 2.5)))) # 11.7\n", + "def BE(): return max(0, normal(17, 3) + uniform(0, 40)) # 37.0\n", + "\n", + "team = (SC, KT, DG, HB, BE)\n", + "\n", + "def Team(team=team): return sum(player() for player in team)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWQAAAEICAYAAABoLY4BAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADYRJREFUeJzt3WuQZPVdxvHvY4BAFsJtEZGl2MTCRHIBRBMQKonE6EJi\nqvIulFG2Kmql1FRQqhLwWli+ML6gYqXwgiFZvBRWGaMiMTEBV19gRLnDhkuwQgpWYBNIlgVDTODn\niz5Deoed3ZnZ6e1fz3w/VV3Tfc6Z7qenZp7+z/+cPp2qQpI0fd8z7QCSpBELWZKasJAlqQkLWZKa\nsJAlqQkLWZKasJA1VUluSnLGtHNMQpL3J/nwtHNodljIWrQk5yb59yQ7kzw5lOmPjq0/IcnVSR5N\nsivJfUkuT7Jugfv7aWBXVd1+AJ/D+iH3E8Pz+EKSc+Zt86tJHkvyVJKPJ3npXu7vqiT3J3k+yeZ5\nq/8M+Jkk3zuBp6JVyELWoiR5OXA98FHgGOBE4HLgW8P6Y4AvAIcBZ1fVEcDbgCOBH1jgbt8H/MVk\nk7/I08DPA8cDRwEfBv4xyUEASX4KuBR4K3Ay8EpGz3MhdwK/BNw2f0VVPQt8Bvi5FcyvVcxC1mL9\nIEBVXVtVz1XVN6vqc1V117D+14BdwHuq6qFh24er6uKxbV6Q5BDgPODfxpZtSfJ7Y7ffkuSRlXwS\nVfVsVd1bVd8BAjwHHM3oRQbgIuDqqtpWVV8HfhfYvJf7u7KqbgSeXWCTfwXevkLxtcpZyFqsB4Dn\nklyT5PwkR89b/xPAp6rq+UXe3ynA81W17MJNcleSbyxw+aN9fS+jEr0O+FhV7RhWvYbRqHfOncDx\nSY5dZsx7gdOW+b1aYw6adgDNhqp6Ksm5wIcYzY1+X5J/An6hqh4HjgUeXcJdHsVoRL0/mV6/P9+b\n5FDgXcAhY6sOB3aO3X5q+HoE8MQyHmoXo2kbaZ8cIWvRhn/1N1fVBuC1wPcDHxlWPwGcsIS7+zqj\nkpuaYfriWuDSJHOj2KeBl49tNlemy33xOILdC15akIWsZamq+4AtjIoZ4AbgXUkW+zv1IJAkJ85b\nftjY9b2OLJNsS/L0Apc/WWQOgIMZ7bwD2MbuUwynAY9X1XJGxwA/xO5TINKCLGQtSpJXJ7kkyYbh\n9knAhcB/DJtcwWhkeU2Sk4dtTkxyRZIXTS1U1f8xKvE3z1v1jiTHJzmc0VEYLxumFl6kql5TVYcv\ncHnfAs/jrOHwvUOSHJbkQ4yOuLh52OTPgfcmOXWYJ/8tRi88C/1cDhnyBTg4yaHzXpTezOhIC2mf\nLGQt1i7gjcDNSZ5hVMT3AJcAVNWTwI8B3x622QXcyOjf9QcXuM8/BX523rJtjI5MeAD4NPAksJTR\n7r68FLiS0RTLduAC4O1V9T/D8/gs8AfAVuArwJeB35n75iSfSfLrY/f3OeCbjJ77VcP1Nw3bHjrc\n/zUrmF+rWDxBvaYpyU3Ar1TV7Um2AI9U1W9OOdaKSPJ+4KSq+uC0s2g2eJSFpqqqztn3VrOpqj46\n7QyaLU5ZSFITTllIUhOOkCWpiSXNIa9fv742bty4rAd65plnWLdujyf9asm8k2XeyZq1vDB7mZeS\n99Zbb/1aVR23zw2ratGXM888s5Zr69aty/7eaTDvZJl3smYtb9XsZV5KXuCWWkTHOmUhSU1YyJLU\nhIUsSU1YyJLUhIUsSU1YyJLUhIUsSU1YyJLUhIUsSU14+k0t2cZLP73b7Yd+30+5l1aChay9ml++\nkibHKQtJasJClqQmnLLQfnNOWVoZjpAlqQkLWZKacMpCu/GoCml6HCFLUhOOkLXi9jTKdkeftG+O\nkCWpCQtZkpqwkCWpCQtZkppwp54OiPk7+rZsWjelJFJfFvIa5jHHUi9OWUhSExayJDVhIUtSExay\nJDVhIUtSExayJDVhIUtSExayJDXhG0M0FXdv38lmP4tP2o0jZElqwkKWpCYsZElqwkKWpCYsZElq\nwqMs1hBPtyn15ghZkppwhKw25o/gPS5Za40jZElqwkKWpCYsZElqwkKWpCYsZElqwkKWpCYsZElq\nwkKWpCYsZElqwkKWpCZ867Ta8q3UWmscIUtSExayJDVhIUtSE84hr2KekF6aLY6QJakJC1mSmnDK\nQjNjT1MwHgqn1cQRsiQ1YSFLUhMWsiQ1YSFLUhMWsiQ1YSFLUhMWsiQ1YSFLUhO+MUQzzXMmazVx\nhCxJTVjIktSEhSxJTVjIktSEhSxJTVjIktSEhSxJTVjIktSEbwxZJe7evpPNfqipNNMsZK0qfsyT\nZplTFpLUhIUsSU1YyJLUhIUsSU1YyJLUhIUsSU1YyJLUhMcha9XzU0U0KxwhS1ITFrIkNWEhS1IT\nFrIkNWEhS1ITFrIkNWEhS1ITHoesNcdzJqsrR8iS1ISFLElNWMiS1ISFLElNWMiS1IRHWcyo+UcK\n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\nFG7+33uq9XcAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWQAAAEICAYAAABoLY4BAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADN9JREFUeJzt3W2spHV9xvHvJatCF8KDEEJEORotLRbEbkMhorRQ24Wt\n9kX7AqspJDWlWhNoTJrFEmPTpvKmrU18jiitNbbFWmtA2oBsTR+StqzyDFvbuAooLFoRXA2l9dcX\nc586TM7Z3fMwZ36z5/tJJjv3fc/cc52Ts9f5z3/+MydVhSRp9p416wCSpBELWZKasJAlqQkLWZKa\nsJAlqQkLWZKasJA1M0neleSqWeeYhiRnJfnnWefQfLGQdciS7E3yM2Pblyb5VpILknxnuOxPUmPb\n30nywiXOdRLwK8AHNzD/c5Ncl+QrSZ5MckeSi8eOn5vkliT/leSxJDckOeUA53trktuTPJXk+vFj\nVXUX8HiS107vK9LhxkLWqiS5DHgvsKOqPl9VR1fV0cDLhpsct7ivqr66xCkuBz5bVd/boMgAW4AH\ngQuAY4FrgL9MsjAcPx74ELAAnAY8CXz0AOf7GvB7wEeWOf5x4Io1ZtYmYiFrxZJcAfwB8HNVtdqn\n5RcDnx875+VJ/nHicSrJS1af9Jmqan9VvbOq9lbV96vqRuDLwLbh+M1VdUNVPVFV3wXeA7zyAOf7\nVFV9GvjmMjf5e+CiJM9dr69Bh7ctsw6gufNm4Hzgoqq6cw3nORPYs9o7J3kf8MvLHP5qVZ11COc4\nGfhh4N5lbvLqAxw7qKp6OMnTwOnAXas9jzYPC1kr9RpgF3D3Gs9zHKMpgVWpqrcAb1nt/ZM8m9GU\nwp9U1QNLHD8LeAfwC6t9jMGTjL5W6aCcstBKvZnRqPLDSbKG83wLOGZ9Iq1MkmcBHwP+G3jrEsdf\nAtwMXFlV/7DGhzsGeHyN59AmYSFrpR4FLgJeBbxvDee5i1Gxjztq8UqSYw905yQfmFjJMX5Zdpph\n+CVyHXAy8ItV9fTE8dOAW4HfraqPrfBrmnys5wPPYQ1TM9pcLGStWFV9jVEpb0/yR6s8zWcZrXYY\nd2aSc5IcAfzmsO+EZTL8+tgqjsnLy5a6z+D9wI8Cr51c4TEU6G3Ae6rqAwf7ApJsSXIkcARwRJIj\nk4xPA14A3FZVTx3sXBJYyFqlYSnbhcAvJXnXKk7xp8AlSY4a23cfo2Vk+4DnATcAf7HWrIuG0e8V\nwNnAI2Mj6jcMN3kT8GLgneMj7rH7vz3JzWOnvAb4HrATeONw/Zqx428ADlrs0qL4AfWalSS/D+yr\nqncnuRx4U1WdP+NY62J4UfCDVXXerLNofrjKQjNTVW+fdYZpGd6pZxlrRZyykKQmnLKQpCYcIUtS\nEyuaQz7xxBNrYWFhVQ+0f/9+tm7duqr7zoJ5p8u80zVveWH+Mq8k7+7du79RVScd9IZVdciXbdu2\n1Wrt2rVr1fedBfNOl3mna97yVs1f5pXkBW6vQ+hYpywkqQkLWZKasJAlqQkLWZKasJAlqQkLWZKa\nsJAlqQkLWZKasJAlqQk/fnODLey86Rnbe6/dMaMkkrpxhCxJTVjIktSEhSxJTVjIktSEhSxJTVjI\nktSEhSxJTVjIktSEhSxJTVjIktSEhSxJTVjIktSEhSxJTVjIktSEhSxJTfh5yFM2+fnHkrQcR8iS\n1ISFLElNWMiS1ISFLElNWMiS1ISFLElNWMiS1ISFLElN+MaQGVvqjSN7r90xgySSZs0RsiQ1YSFL\nUhMWsiQ1YSFLUhMWsiQ1YSFLUhMWsiQ1YSFLUhMWsiQ1YSFLUhMWsiQ1YSFLUhMWsiQ1YSFLUhMW\nsiQ1YSFLUhMWsiQ1YSFLUhMWsiQ14d/UW0dL/X08STpUjpAlqQkLWZKasJAlqQkLWZKasJAlqQlX\nWTQ0uVpj77U7ZpRE0kZyhCxJTVjIktSEhSxJTVjIktSEhSxJTVjIktSEhSxJTVjIktSEhSxJTVjI\nktSEhSxJTVjIktSEhSxJTVjIktSEhSxJTVjIktSEhSxJTVjIktSEhSxJTVjIktSEhSxJTVjIktSE\nhSxJTVjIktSEhSxJTWyZdYB5trDzpllHkHQYsZDnwFLFv/faHTNIImmanLKQpCYsZElqwkKWpCYs\nZElqwkKWpCYsZElqwkKWpCYsZElqwkKWpCYsZElqwkKWpCYsZElqwkKWpCYsZElqwkKWpCYsZElq\nwkKWpCYsZElqwkKWpCYsZElqwkKWpCYsZElqYsusA2h1Fnbe9Izt67dvnVESSevFEbIkNWEhS1IT\nFrIkNeEc8iGanLOVpPXmCFmSmnCErHW31LOJvdfumEESab5YyFozp3Ok9eGUhSQ14QhZG8I3skgH\nZyFrxZyikKbDKQtJasJClqQmLGRJasI5ZM3E3Q9/m8sn5qJdq6zNzhGyJDXhCFkH5IoKaeM4Qpak\n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\nhSxJTfwf/gO8GA80m24AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n+rZV21vkraofSbJ/jHHnevt0ybrKRdPX9/LMprAunt/YLPO2JN+Z5J1jjPOTPJlVL/eb5U2SVNXx\nSa5M8t7V2zYr76IL+ZEkZ88tnzWt2woeq6ozk2T6uH/JeZ6lqo7LrIzfPcZ437S6deYkGWN8Psme\nzObsO+b93iRXVtW+JH+a5NKqeld6Zv1/Y4xHpo/7M5vfvDB9Mz+c5OHpVVKS3JRZQXfNu+LyJHeN\nMR6bljc976IL+V+TvLyqXjr9dnlTkg8s+Jib5QNJrpruX5XZPG0LVVVJ/iDJA2OM35zb1DJzVZ1e\nVadM91+U2Xz3g2mYd4xx3RjjrDHGzsy+X/92jPGTaZh1RVVtr6qTVu5nNs95X5pmHmM8muShqnrF\ntOq1ST6epnnnvDnPTFcki8h7BCbBX5fk35J8KskvLXtSfp2M70nymST/m9lv759O8rWZvbHziSS3\nJjlt2Tnn8l6U2cujjyW5e7q9rmvmJN+R5KNT3vuS/Mq0vmXeudyX5Jk39dpmTfKyJPdMt/tXfs6a\nZz4vyR3T98T7k5zaPO/2JP+Z5OS5dZue159OAzThTT2AJhQyQBMKGaAJhQzQhEIGaEIhAzShkAGa\n+D+SaGda5tKjKQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWQAAAEICAYAAABoLY4BAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADVRJREFUeJzt3XuspPVdx/H3p9AW2AUWXCybgl2qTetaBMRgG/EGqS5d\nxcZGpVG7JJpGY5M2wTRL1aqJNRvTNhrjNVVJraEGpBRLqil18RprlwLltljQrQUpF8OlbLUV/PrH\nzNnOjnvOnj07c+Y757xfyWTneZ6ZZz5n9pzP/OY3z8ykqpAkzd4LZh1AkjRgIUtSExayJDVhIUtS\nExayJDVhIUtSExayZibJi5Pcm2TLrLNMQ5L3JvmZWefQ/LCQtWxJ9if5ryTPJnkyyc1Jzh7Zfk2S\nrwy3L5zuXGKXbwH+tqoemX76gxm3Jdk7zP9kkluSbBvZ/rGx/F9JctcS+7s0yb4kX0qyJ8nLRja/\nB3hnkhdN82fS2mEh62j9QFVtBLYAjwK/Nbb916tq48jpvCX29dPAn0wr6CL+A/hRYPPwdBPwoYWN\nVXXZaH7gH4HrDrejJJuBG4BfBE4H9gJ/NrKvR4B9wOXT+VG01ljIWpGq+m/gemDbkS57OEm+Dng5\n8MmRdbcm+amR5SuT/P2xZh1VVU9V1YNV9TwQ4HngGxbJuBX4DuADi+zuh4B7quq64f3xy8B5SV41\ncplbgR0TCa817/hZB9B8SnISg5HmP61wF+cC/1pVzx1DhqeW2Ly7qnYf4bobGQxK3rXIxd4M/F1V\n7V9k+zcBB6dkqupAkgeG6/cNV98HvHGJnNJBFrKO1o1JngM2AI8D3ze2/eeSvHVk+SNVtfMw+9kE\nfPFYglTVpmO5bpINwE7gc4tc7M3Ary6xm40M7oNRzwAnjyx/kcHPKh2RUxY6Wm8YFuEJwFuBv0ly\n5sj291TVppHT4coY4EkOLa5VV1UHgN8DPpDka0e3JbkYOJPBtMxingVOGVt3Koc+0JwMLDWSlw6y\nkLUiVfV8Vd3AYA724hXs4jPAOUnGn6WdOHL+1KV2MHY0xPjpncvM8QLgJOClY+t3AjdU1bNLXPce\n4OCLlsMR99cP1y/4RkamNaSlWMhakQz8IHAag3nSo1JVDwEPABeNbfrhJKckOYNBKW5M8sJF9rFx\nidOvLZL7dUkuSHJcklOA9zEYrd83cpkTgR8BrjnCj/Fh4NVJ3pjkBOCXgDurat/IZb4L+NgR9iMB\nFrKO3l8keZbBXOm7gZ1VNToifMfYSPWJJfb1+8BPjK37dwaj508xmE44E/iFycVnE3At8DTwIIMR\n7fbhURIL3sBgmmHP+JWT3JPkxwCq6nEGL9i9m0GpXwRcMXLZLQyOQrlxgvm1hsUPqNesJHkxcDtw\naVU9kuRW4INV9f7ZJpuMJO8FHqyq35l1Fs0Hj7LQzFTVl1nhcczzoKqumnUGzRenLCSpCacsJKkJ\nR8iS1MRRzSFv3ry5tm7duqIbOnDgABs2bFjRdWfBvNNl3umat7wwf5mPJu9tt932RFWdccQLVtWy\nTxdeeGGt1J49e1Z83Vkw73SZd7rmLW/V/GU+mrzA3lpGxzplIUlNWMiS1ISFLElNWMiS1ISFLElN\nWMiS1ISFLElNWMiS1ISFLElN+PGbmritu27+f+v2794xgyTLN565e16tTRaylnS4cl2t25pUKU5i\nv3c9/DRXrlJp++CwflnIWhXjJXPN9iN/KMtKimlSDyDj+7nq3Mnc1krKdTm3Y2mvDRayZuJwI84j\nWc3R+rSs1rOA5TzgqR8LWYdYC6V3JOvhZ9R8spDXMYtp9vw/0CgPe5OkJhwhS2vQah4VoslxhCxJ\nTThCXkecr1zfPL65P0fIktSEhSxJTVjIktSEhSxJTVjIktSER1lI69Q8fkzqWmchr2Ee5ibNF6cs\nJKkJC1mSmrCQJakJC1mSmrCQJakJC1mSmrCQJakJC1mSmrCQJakJC1mSmvCt05IO8ltFZssRsiQ1\n4Qh5jTjctwxLmi+OkCWpCQtZkpqwkCWpCQtZkpqwkCWpCQtZkpqwkCWpCQtZkpqwkCWpCQtZkpqw\nkCWpCQtZkprww4Xm1PjHJF517oyCSJoYR8iS1ISFLElNOGUhaVHjU2Pgt4hMkyNkSWrCQpakJixk\nSWrCQpakJixkSWrCQpakJixkSWrCQpakJixkSWrCQpakJixkSWrCQpakJixkSWrCQpakJixkSWrC\nQpakJixkSWrCQpakJixkSWrCQpakJvyS0zlwuC+alLT2WMiSjsr4AMFvoZ4cpywkqQkLWZKasJAl\nqQkLWZKasJAlqQkLWZKasJAlqQkLWZKasJAlqQkLWZKasJAlqQkLWZKasJAlqQkLWZKasJAlqQkL\nWZKasJAlqQkLWZKasJAlqQkLWZKasJAlqQkLWZKaOH7WASTNt627bj5kef/uHTNKMv8cIUtSE46Q\nGxofcUhaHxwhS1ITFrIkNWEhS1ITFrIkNWEhS1ITFrIkNWEhS1ITFrIkNWEhS1ITFrIkNWEhS1IT\nFrIkNWEhS1ITFrIkNWEhS1ITFrIkNWEhS1ITFrIkNWEhS1ITFrIkNWEhS1ITFrIkNWEhS1ITFrIk\nNXH8rAOsd1t33TzrCJKasJAlTdThBhn7d++YQZL545SFJDVhIUtSExayJDVhIUtSExayJDVhIUtS\nExayJDVhIUtSExayJDVhIUtSExayJDVhIUtSExayJDVhIUtSExayJDVhIUtSExayJDVhIUtSExay\nJDVhIUtSExayJDVhIUtSExayJDVx/KwDSFr7tu66+ZDl/bt3zChJb46QJakJC1mSmnDKYpWNP3WT\npAWOkCWpCQtZkpqwkCWpCQtZkpqwkCWpCQtZkpqwkCWpCQtZkpqwkCWpCQtZkpqwkCWpCQtZkpqw\nkCWpCQtZkpqwkCWpCQtZkpqwkCWpCQtZkprwK5wkrbrDfZXZNds3zCBJLxbylPkdepKWyykLSWrC\nQpakJixkSWrCQpakJixkSWrCQpakJixkSWrCQpakJixkSWrCQpakJixkSWrCQpakJixkSWrCQpak\nJixkSWrCz0OeID/7WNKxsJAltXDXw09z5cigZv/uHTNMMxtOWUhSExayJDVhIUtSExayJDVhIUtS\nExayJDVhIUtSExayJDVhIUtSE75T7xj4VmlJk2QhS2ppfMCzHt5K7ZSFJDVhIUtSExayJDVhIUtS\nExayJDVhIUtSEx72tkwecyzN1uH+BtfaoXCOkCWpCQtZkpqwkCWpCeeQFzH+DbiS+llrb6+2kIfG\n/2OvOndGQSStW+uykD1iQlqblvO33XkUnapa/oWTx4HPrfC2NgNPrPC6s2De6TLvdM1bXpi/zEeT\n92VVdcaRLnRUhXwskuytqm9dlRubAPNOl3mna97ywvxlnkZej7KQpCYsZElqYjUL+Q9W8bYmwbzT\nZd7pmre8MH+ZJ5531eaQJUlLc8pCkpqwkCWpiakXcpLtSe5P8kCSXdO+vZVI8kdJHkty98i605N8\nPMlnh/+eNsuMo5KcnWRPknuT3JPkbcP1LTMnOSHJPye5c5j3V4brW+YFSHJcktuTfHS43DYrQJL9\nSe5KckeSvcN1bTMn2ZTk+iT7ktyX5LVd8yZ55fB+XTg9k+Tt08g71UJOchzw28BlwDbgTUm2TfM2\nV+gaYPvYul3AJ6rqFcAnhstdPAdcVVXbgNcAPzu8X7tm/jJwSVWdB5wPbE/yGvrmBXgbcN/Icues\nC76nqs4fOTa2c+bfBP6yql4FnMfgvm6Zt6ruH96v5wMXAl8CPsw08lbV1E7Aa4G/Glm+Grh6mrd5\nDFm3AnePLN8PbBme3wLcP+uMS2T/CPC6ecgMnAR8Gvi2rnmBs4Z/YJcAH52H3wdgP7B5bF3LzMCp\nwL8xPKige96xjN8L/MO08k57yuKlwOdHlh8arpsHL6mqR4bnvwC8ZJZhFpNkK3AB8EkaZx5OAdwB\nPAZ8vKo65/0N4B3A/46s65p1QQG3JLktyVuG67pmPgd4HPjj4bTQ+5NsoG/eUVcA1w7PTzyvL+ot\nQw0eAtsdH5hkI/DnwNur6pnRbd0yV9XzNXjKdxZwUZJXj21vkTfJ9wOPVdVti12mS9YxFw/v38sY\nTGF95+jGZpmPB74F+N2qugA4wNjT/WZ5AUjyIuBy4LrxbZPKO+1Cfhg4e2T5rOG6efBoki0Aw38f\nm3GeQyR5IYMy/tOqumG4unVmgKp6CtjDYM6+Y95vBy5Psh/4EHBJkg/SM+tBVfXw8N/HGMxvXkTf\nzA8BDw2fJQFcz6Cgu+ZdcBnw6ap6dLg88bzTLuRPAa9Ics7w0eUK4KYp3+ak3ATsHJ7fyWCetoUk\nAf4QuK+q3jeyqWXmJGck2TQ8fyKD+e59NMxbVVdX1VlVtZXB7+tfV9WP0zDrgiQbkpy8cJ7BPOfd\nNM1cVV8APp/klcNVlwL30jTviDfx1ekKmEbeVZgEfz3wL8CDwM/PelJ+kYzXAo8A/8Pg0fsnga9h\n8MLOZ4FbgNNnnXMk78UMnh59BrhjeHp918zANwO3D/PeDbxruL5l3pHc381XX9RrmxV4OXDn8HTP\nwt9Z88znA3uHvxM3Aqc1z7sB+E/g1JF1E8/rW6clqQlf1JOkJixkSWrCQpakJixkSWrCQpakJixk\nSWrCQpakJv4PEqD2OJabj0QAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for player in team: \n", + " repeated_hist(player, bins=range(70))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that none of the players have a distribution that looks like a normal distribution: `SC` is skewed to one side (the mean is 5 points to the right of the peak); the three next players have bimodal distributions; and `BE` is too flat on top. \n", + "\n", + "Now we define the team score to be the sum of the *k* = 5 players, and display this new distribution:" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "repeated_hist(Team, bins=range(50, 180))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sure enough, this looks very much like a normal distribution. The **Central Limit Theorem** appears to hold in this case. But I have to say: \"Central Limit\" is not a very evocative name, so I propose we re-name this as the **Strength in Numbers Theorem**, to indicate the fact that if you have a lot of numbers, you tend to get the expected result." ] }, { @@ -2718,10 +2547,7 @@ "\n", "We've had an interesting tour and met some giants of the field: Laplace, Bernoulli, Fermat, Pascal, Bayes, Newton, ... even Mr. Monopoly and The Count.\n", "\n", - "![The Count](http://img2.oncoloring.com/count-dracula-number-thir_518b77b54ba6c-p.gif)\n", - "
The Count
1972—
\n", - "\n", - "The conclusion is: be explicit about what the problem says, and then methodical about defining the sample space, and finally be careful in counting the number of outcomes in the numerator and denominator. Easy as 1-2-3. " + "The conclusion is: be methodical in defining the sample space and the event(s) of interest, and be careful in counting the number of outcomes in the numerator and denominator. and you can't go wrong. Easy as 1-2-3. " ] }, { @@ -2734,7 +2560,7 @@ "\n", "Everything up to here has been about discrete, finite sample spaces, where we can *enumerate* all the possible outcomes. \n", "\n", - "But I was asked about *continuous* sample spaces, such as the space of real numbers. The principles are the same: probability is still the ratio of the favorable cases to all the cases, but now instead of *counting* cases, we have to (in general) compute integrals to compare the sizes of cases. \n", + "But a reader asked about *continuous* sample spaces, such as the space of real numbers. The principles are the same: probability is still the ratio of the favorable cases to all the cases, but now instead of *counting* cases, we have to (in general) compute integrals to compare the sizes of cases. \n", "Here we will cover a simple example, which we first solve approximately by simulation, and then exactly by calculation.\n", "\n", "## The Hot New Game Show Problem: Simulation\n", @@ -2753,6 +2579,51 @@ "First, simulate the number that a player with a given cutoff gets (note that `random.random()` returns a float sampled uniformly from the interval [0..1]):" ] }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "number= random.random\n", + "\n", + "def strategy(cutoff):\n", + " \"Play the game with given cutoff, returning the first or second random number.\"\n", + " first = number()\n", + " return first if first > cutoff else number()" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7567488540951384" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "strategy(.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now compare the numbers returned with a cutoff of *A* versus a cutoff of *B*, and repeat for a large number of trials; this gives us an estimate of the probability that cutoff *A* is better than cutoff *B*:" + ] + }, { "cell_type": "code", "execution_count": 70, @@ -2761,10 +2632,10 @@ }, "outputs": [], "source": [ - "def number(cutoff):\n", - " \"Play the game with given cutoff, returning the first or second random number.\"\n", - " first = random.random()\n", - " return first if first > cutoff else random.random()" + "def Pwin(A, B, trials=20000):\n", + " \"The probability that cutoff A wins against cutoff B.\"\n", + " return mean(strategy(A) > strategy(B) \n", + " for _ in range(trials))" ] }, { @@ -2777,7 +2648,7 @@ { "data": { "text/plain": [ - "0.6118974990212028" + "0.5668" ] }, "execution_count": 71, @@ -2786,14 +2657,14 @@ } ], "source": [ - "number(.5)" + "Pwin(0.6, 0.9)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now compare the numbers returned with a cutoff of *A* versus a cutoff of *B*, and repeat for a large number of trials; this gives us an estimate of the probability that cutoff *A* is better than cutoff *B*:" + "Now define a function, `top`, that considers a collection of possible cutoffs, estimate the probability for each cutoff playing against each other cutoff, and returns a list with the `N` top cutoffs (the ones that defeated the most number of opponent cutoffs), and the number of opponents they defeat: " ] }, { @@ -2804,11 +2675,11 @@ }, "outputs": [], "source": [ - "def Pwin(A, B, trials=30000):\n", - " \"The probability that cutoff A wins against cutoff B.\"\n", - " Awins = sum(number(A) > number(B) \n", - " for _ in range(trials))\n", - " return Awins / trials" + "def top(N, cutoffs):\n", + " \"Return the N best cutoffs and the number of opponent cutoffs they beat.\"\n", + " winners = Counter(A if Pwin(A, B) > 0.5 else B\n", + " for (A, B) in itertools.combinations(cutoffs, 2))\n", + " return winners.most_common(N)" ] }, { @@ -2821,7 +2692,16 @@ { "data": { "text/plain": [ - "0.5018" + "[(0.6100000000000001, 44),\n", + " (0.60000000000000009, 43),\n", + " (0.63000000000000012, 43),\n", + " (0.55000000000000004, 42),\n", + " (0.58000000000000007, 42),\n", + " (0.56000000000000005, 42),\n", + " (0.62000000000000011, 42),\n", + " (0.64000000000000012, 41),\n", + " (0.65000000000000013, 41),\n", + " (0.57000000000000006, 40)]" ] }, "execution_count": 73, @@ -2829,68 +2709,10 @@ "output_type": "execute_result" } ], - "source": [ - "Pwin(.5, .6)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now define a function, `top`, that considers a collection of possible cutoffs, estimate the probability for each cutoff playing against each other cutoff, and returns a list with the `N` top cutoffs (the ones that defeated the most number of opponent cutoffs), and the number of opponents they defeat: " - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from collections import Counter\n", - "\n", - "def top(N, cutoffs):\n", - " \"Return the N best cutoffs and the number of opponent cutoffs they beat.\"\n", - " winners = Counter(A if Pwin(A, B) > 0.5 else B\n", - " for (A, B) in itertools.combinations(cutoffs, 2))\n", - " return winners.most_common(N)" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 19.8 s, sys: 72.1 ms, total: 19.9 s\n", - "Wall time: 20 s\n" - ] - }, - { - "data": { - "text/plain": [ - "[(0.60000000000000009, 46),\n", - " (0.58000000000000007, 43),\n", - " (0.59000000000000008, 43),\n", - " (0.64000000000000012, 42),\n", - " (0.65000000000000013, 41)]" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "from numpy import arange\n", "\n", - "%time top(5, arange(0.50, 0.99, 0.01))" + "top(10, arange(0.5, 1.0, 0.01))" ] }, { @@ -2929,7 +2751,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 74, "metadata": { "collapsed": true }, @@ -2945,7 +2767,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 75, "metadata": { "collapsed": false }, @@ -2956,7 +2778,7 @@ "0.4" ] }, - "execution_count": 77, + "execution_count": 75, "metadata": {}, "output_type": "execute_result" } @@ -2984,7 +2806,7 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 76, "metadata": { "collapsed": true }, @@ -2998,16 +2820,38 @@ " + A * (1-B) * Phigher(0, B)) # A below, B above" ] }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.495" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Pwin(0.5, 0.6)" + ] + }, { "cell_type": "markdown", "metadata": {}, "source": [ - "That was a lot of algebra. Let's define a few tests to check for obvious errors:" + "`Pwin` relies on a lot of algebra. Let's define a few tests to check for obvious errors:" ] }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 78, "metadata": { "collapsed": false }, @@ -3018,15 +2862,15 @@ "'ok'" ] }, - "execution_count": 79, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def test():\n", - " assert Phigher(0.5, 0.5) == Phigher(0.7, 0.7) == Phigher(0, 0) == 0.5\n", - " assert Pwin(0.5, 0.5) == Pwin(0.7, 0.7) == 0.5\n", + " assert Phigher(0.5, 0.5) == Phigher(0.75, 0.75) == Phigher(0, 0) == 0.5\n", + " assert Pwin(0.5, 0.5) == Pwin(0.75, 0.75) == 0.5\n", " assert Phigher(.6, .5) == 0.6\n", " assert Phigher(.5, .6) == 0.4\n", " return 'ok'\n", @@ -3043,7 +2887,7 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 79, "metadata": { "collapsed": false }, @@ -3051,20 +2895,25 @@ { "data": { "text/plain": [ - "[(0.62000000000000011, 48),\n", - " (0.6100000000000001, 47),\n", - " (0.60000000000000009, 46),\n", - " (0.59000000000000008, 45),\n", - " (0.63000000000000012, 44)]" + "[(0.62000000000000011, 49),\n", + " (0.6100000000000001, 48),\n", + " (0.60000000000000009, 47),\n", + " (0.59000000000000008, 46),\n", + " (0.63000000000000012, 45),\n", + " (0.58000000000000007, 44),\n", + " (0.57000000000000006, 43),\n", + " (0.64000000000000012, 42),\n", + " (0.56000000000000005, 41),\n", + " (0.55000000000000004, 40)]" ] }, - "execution_count": 80, + "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "top(5, arange(0.50, 0.99, 0.01))" + "top(10, arange(0.5, 1.0, 0.01))" ] }, { @@ -3076,7 +2925,7 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 80, "metadata": { "collapsed": false }, @@ -3096,13 +2945,13 @@ " (0.6110000000000001, 190)]" ] }, - "execution_count": 81, + "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "top(10, arange(0.500, 0.700, 0.001))" + "top(10, arange(0.5, 0.7, 0.001))" ] }, { @@ -3112,6 +2961,46 @@ "This says 0.618 is best, better than 0.620. We can get even more accuracy:" ] }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[(0.61803400000002973, 2000),\n", + " (0.6180330000000297, 1999),\n", + " (0.61803200000002967, 1998),\n", + " (0.61803500000002976, 1997),\n", + " (0.61803100000002964, 1996),\n", + " (0.61803000000002961, 1995),\n", + " (0.61802900000002958, 1994),\n", + " (0.61803600000002978, 1993),\n", + " (0.61802800000002955, 1992),\n", + " (0.61802700000002952, 1991)]" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "top(10, arange(0.617, 0.619, 0.000001))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So 0.618034 is best. Does that number [look familiar](https://en.wikipedia.org/wiki/Golden_ratio)? Can we prove that it is what I think it is?\n", + "\n", + "To understand the strategic possibilities, it is helpful to draw a 3D plot of `Pwin(A, B)` for values of *A* and *B* between 0 and 1:" + ] + }, { "cell_type": "code", "execution_count": 82, @@ -3121,44 +3010,9 @@ "outputs": [ { "data": { + "image/png": "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\n", "text/plain": [ - "[(0.61802999999999531, 200),\n", - " (0.61801999999999535, 199),\n", - " (0.61803999999999526, 198),\n", - " (0.6180099999999954, 197),\n", - " (0.61799999999999544, 196)]" - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "top(5, arange(0.61700, 0.61900, 0.00001))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So 0.61803 is best. Does that number [look familiar](https://en.wikipedia.org/wiki/Golden_ratio)? Can you prove that it is what I think it is?\n", - "\n", - "To understand the strategic possibilities, it is helpful to draw a 3D plot of `Pwin(A, B)` for values of *A* and *B* between 0 and 1:" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -3194,7 +3048,7 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 83, "metadata": { "collapsed": false }, @@ -3202,7 +3056,38 @@ "source": [ "cutoffs = (set(arange(0.00, 1.00, 0.01)) | \n", " set(arange(0.500, 0.700, 0.001)) | \n", - " set(arange(0.61700, 0.61900, 0.00001)))" + " set(arange(0.61803, 0.61804, 0.000001)))\n", + "\n", + "def Pwin_summary(A, B): return [Pwin(A, B), 'A:', A, 'B:', B]" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[0.625, 'A:', 0.5, 'B:', 0.0]" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max(Pwin_summary(A, B) for A in cutoffs for B in cutoffs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So **A** could win 62.5% of the time if only **B** would chose a cutoff of 0. But, unfortunately for **A**, a rational player **B** is not going to do that. We can ask what happens if the game is changed so that player **A** has to declare a cutoff first, and then player **B** gets to respond with a cutoff, with full knowledge of **A**'s choice. In other words, what cutoff should **A** choose to maximize `Pwin(A, B)`, given that **B** is going to take that knowledge and pick a cutoff that minimizes `Pwin(A, B)`? " ] }, { @@ -3215,7 +3100,7 @@ { "data": { "text/plain": [ - "[0.625, 0.5, 0.0]" + "[0.5, 'A:', 0.61803400000000008, 'B:', 0.61803400000000008]" ] }, "execution_count": 85, @@ -3224,37 +3109,7 @@ } ], "source": [ - "max([Pwin(A, B), A, B]\n", - " for A in cutoffs for B in cutoffs)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So **A** could win 62.5% of the time if only **B** would chose a cutoff of 0. But, unfortunately for **A**, a rational player **B** is not going to do that. We can ask what happens if the game is changed so that player **A** has to declare a cutoff first, and then player **B** gets to respond with a cutoff, with full knowledge of **A**'s choice. In other words, what cutoff should **A** choose to maximize `Pwin(A, B)`, given that **B** is going to take that knowledge and pick a cutoff that minimizes `Pwin(A, B)`? " - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[0.5, 0.61802999999999531, 0.61802999999999531]" - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "max(min([Pwin(A, B), A, B] for B in cutoffs)\n", + "max(min(Pwin_summary(A, B) for B in cutoffs)\n", " for A in cutoffs)" ] }, @@ -3267,7 +3122,7 @@ }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 86, "metadata": { "collapsed": false }, @@ -3275,16 +3130,16 @@ { "data": { "text/plain": [ - "[0.5, 0.61802999999999531, 0.61802999999999531]" + "[0.5, 'A:', 0.61803400000000008, 'B:', 0.61803400000000008]" ] }, - "execution_count": 87, + "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "min(max([Pwin(A, B), A, B] for A in cutoffs)\n", + "min(max(Pwin_summary(A, B) for A in cutoffs)\n", " for B in cutoffs)" ] }, @@ -3292,9 +3147,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In both cases, the rational choice for both players in a cutoff of 0.61803, which corresponds to the \"saddle point\" in the middle of the plot. This is a *stable equilibrium*; consider fixing *B* = 0.61803, and notice that if *A* changes to any other value, we slip off the saddle to the right or left, resulting in a worse win probability for **A**. Similarly, if we fix *A* = 0.61803, then if *B* changes to another value, we ride up the saddle to a higher win percentage for **A**, which is worse for **B**. So neither player will want to move from the saddle point.\n", + "In both cases, the rational choice for both players in a cutoff of 0.618034, which corresponds to the \"saddle point\" in the middle of the plot. This is a *stable equilibrium*; consider fixing *B* = 0.618034, and notice that if *A* changes to any other value, we slip off the saddle to the right or left, resulting in a worse win probability for **A**. Similarly, if we fix *A* = 0.618034, then if *B* changes to another value, we ride up the saddle to a higher win percentage for **A**, which is worse for **B**. So neither player will want to move from the saddle point.\n", "\n", - "The moral for continuous spaces is the same as for discrete spaces: be careful about defining your space; count/measure carefully, and let your code take care of the rest." + "The moral for continuous spaces is the same as for discrete spaces: be careful about defining your sample space; measure carefully, and let your code take care of the rest." ] } ], @@ -3314,7 +3169,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.1" + "version": "3.6.0" } }, "nbformat": 4, diff --git a/ipynb/Scrabble.ipynb b/ipynb/Scrabble.ipynb index 7dbea70..89efeb7 100644 --- a/ipynb/Scrabble.ipynb +++ b/ipynb/Scrabble.ipynb @@ -15,7 +15,7 @@ "\n", "# Refactoring a Crossword Game Program\n", "\n", - "In my [CS 212 class](https://www.udacity.com/course/design-of-computer-programs--cs212) on Udacity, the [most complex lesson](https://www.udacity.com/course/viewer#!/c-cs212/l-48634860) involved a crossword game program (for games such as Scrabble® and Words with Friends®). The program was developed *incrementally*. First I asked \"what words can be made with a rack of seven letters, reagardless of the board?\", then I asked \"how can you place words onto a single row of the board?\", and finally, I, with the help of the students, developed a program to find the highest scoring play anywhere on the board. This approach made for a good sequence of exercises, each building on the previous one. But the code ended up being overly complicated—it accumlated [technical debt](https://en.wikipedia.org/wiki/Technical_debt)—because it kept around old ideas from each iteration.\n", + "In my [CS 212 class](https://www.udacity.com/course/design-of-computer-programs--cs212) on Udacity, the most complex lesson involved a [crossword game program](https://www.udacity.com/course/viewer#!/c-cs212/l-48634860) (for games such as Scrabble® and Words with Friends®). The program was developed *incrementally*. First I asked \"what words can be made with a rack of seven letters, reagardless of the board?\" Then I asked \"how can you place words onto a single row of the board?\" Finally, I, with the help of the students, developed a program to find the highest scoring play anywhere on the board. This approach made for a good sequence of exercises, each building on the previous one. But the code ended up being overly complicated—it accumlated [technical debt](https://en.wikipedia.org/wiki/Technical_debt)—because it kept around old ideas from each iteration.\n", "\n", "In this notebook I will refactor the program to pay off the technical debt.\n", "\n", @@ -31,9 +31,9 @@ "* **Board**: a grid of squares onto which players play tiles to make words. \n", "* **Square**: a location on the board; a square can hold one tile. (In the code, the variable name `s` always stands for a square number, and `sq` for the contents of a square, which can be a tile or empty.)\n", "* **Bonus**: some squares give you bonus scores: double or triple letter or word scores.\n", - "* **Play**: a play consists of placing some tiles on the board to form a continuous string of letters in one direction (across or down), such that only valid words are formed, and such that one of the letters is placed on an anchor square.\n", + "* **Play**: a play consists of placing some tiles on the board to form a continuous string of letters in one direction (across or down), such that only valid dictionary words are formed, and such that one of the letters is placed on an anchor square.\n", "* **Anchor square**: Every play must place a letter on an anchor square: either the center start square or a square that is adjacent to a tile previously played on the board. \n", - "* **Direction:** Every play must be in either the across or down direction. (The variable `dir` always stands for a direction, and is `1` for across and `17` for down.)\n", + "* **Direction:** Every play must be in either the across or down direction. (The variable `dir` always stands for a direction.)\n", "* **Cross word**: a word formed in the *other* direction from a play. For example, a play forms a word in the across direction, and in doing so, places a letter that extends a word in the down direction. Any new extended *cross word* must be in the dictionary.\n", "* **Score**: the points awarded for a play, consisting of the sum of the word scores for each word created (the main word and possibly any cross words), plus a *bingo* bonus if all seven letters are used. \n", "* **Word score**: Each word scores the sum of the letter scores for each tile (either placed by the player or already on the board but part of the word) times the word bonus score. The word bonus score starts at 1, and is multiplied by 2 for each double word square and 3 for each triple word square covered by a tile on this play.\n", @@ -43,6 +43,7 @@ "rack is replenished with tiles until the player has 7 tiles or until the bag of tiles is empty.\n", "* **Prefix**: a string of zero or more letters that starts some word in the dictionary. Not a concept that has to do\n", "with the *rules* of the game; it will be important in our *algorithm* that finds valid plays.\n", + "* **HTML display**: a (hopefully) pretty display of the board.\n", "\n", "This notebook uses these imports:" ] @@ -61,8 +62,8 @@ }, "outputs": [], "source": [ - "from __future__ import division, print_function\n", - "from collections import defaultdict, namedtuple\n", + "from collections import defaultdict, namedtuple\n", + "from statistics import mean, median\n", "from IPython.display import HTML, display\n", "import random" ] @@ -81,7 +82,7 @@ "\n", "# Dictionary and Words\n", "\n", - "We will represent the dictionary as a set of words. A word is an uppercase string of letters, like `'WORD'`. There are several standard dictionaries used by different communities of players; we will use the ENABLE dictionary—we can cache a local copy with this shell command:" + "We will represent the dictionary as a `set` of words. A word is an uppercase string of letters, like `'WORD'`. There are several standard dictionaries used by different communities of players; we will use the ENABLE dictionary—we can cache a local copy with this shell command:" ] }, { @@ -131,20 +132,35 @@ "source": [ "def Word(w) -> str: return w.strip().upper()\n", "\n", - "def is_word(word) -> bool: \n", - " \"Is this a legal word in the dictionary?\"\n", - " return word.upper() in DICTIONARY" + "DICTIONARY = {Word(w) for w in open('enable1.txt')}" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { - "collapsed": true + "button": false, + "collapsed": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "172820" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "DICTIONARY = {Word(w) for w in open('enable1.txt')}" + "len(DICTIONARY)" ] }, { @@ -163,7 +179,16 @@ { "data": { "text/plain": [ - "172820" + "['MUTUALITY',\n", + " 'HYPERIMMUNIZE',\n", + " 'MULISH',\n", + " 'AIRSICK',\n", + " 'PERSISTS',\n", + " 'UNRIDABLE',\n", + " 'DECANES',\n", + " 'UNSETTLEDNESS',\n", + " 'PIANISSIMI',\n", + " 'IRENICS']" ] }, "execution_count": 5, @@ -172,7 +197,7 @@ } ], "source": [ - "len(DICTIONARY)" + "random.sample(DICTIONARY, 10)" ] }, { @@ -187,43 +212,6 @@ "read_only": false } }, - "outputs": [ - { - "data": { - "text/plain": [ - "['RATANY',\n", - " 'CONFERRING',\n", - " 'PHOTOTOXICITIES',\n", - " 'BESTIRS',\n", - " 'STRENGTH',\n", - " 'JACKSMELTS',\n", - " 'INVERSION',\n", - " 'PILEUP',\n", - " 'EYEBARS',\n", - " 'KNUCKLEHEADED']" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "random.sample(DICTIONARY, 10)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, "outputs": [ { "data": { @@ -231,7 +219,7 @@ "True" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -257,12 +245,12 @@ "\n", "The blank tile causes some complications. We'll represent a blank in a player's rack as the underscore character, `'_'`. But once the blank is played on the board, it must be used as if it was a specific letter. However, it doesn't score the points of the letter. I chose to use the lowercase version of the letter to represent this. That way, we know what letter the blank is standing for, and we can distinguish between scoring and non-scoring tiles. For example, `'EELRTT_'` is a rack that contains a blank; and `'LETTERs'` is a word played on the board that uses the blank to stand for the letter `S`. \n", "\n", - "We'll define `letters` to give all the distinct letters that can be made by a rack, and `remove` to remove letters from a rack (after they have been played)." + "We'll define `letters(rack)` to give all the distinct letters that can be made by a rack, and `is_word` to test if a word is in the dictionary. The `dict` `POINTS` tells how many points each letter is worth." ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": { "button": false, "collapsed": false, @@ -279,24 +267,43 @@ "\n", "def letters(rack) -> str:\n", " \"All the distinct letters in a rack (including lowercase if there is a blank).\"\n", - " if BLANK in rack:\n", - " return cat(set(rack.replace(BLANK, ''))) + 'abcdefghijklmnopqrstuvwxyz'\n", - " else:\n", - " return cat(set(rack))\n", + " return cat(set(rack.replace(BLANK, 'abcdefghijklmnopqrstuvwxyz')))\n", " \n", - "def letters(rack) -> str:\n", - " \"All the distinct letters in a rack (including lowercase if there is a blank).\"\n", - " if BLANK in rack:\n", - " return letters(rack.replace(BLANK, '')) + 'abcdefghijklmnopqrstuvwxyz'\n", - " else:\n", - " return cat(set(rack))\n", - " \n", - "def remove(tiles, rack) -> str:\n", - " \"Return a copy of rack with the given tile(s) removed.\"\n", - " for tile in tiles:\n", - " if tile.islower(): tile = BLANK\n", - " rack = rack.replace(tile, '', 1)\n", - " return rack" + "def is_word(word) -> bool: \n", + " \"Is this a legal word in the dictionary?\"\n", + " return word.upper() in DICTIONARY\n", + "\n", + "POINTS = defaultdict(int, \n", + " A=1, B=3, C=3, D=2, E=1, F=4, G=2, H=4, I=1, J=8, K=5, L=1, M=3, \n", + " N=1, O=1, P=3, Q=10, R=1, S=1, T=1, U=1, V=4, W=4, X=8, Y=4, Z=10)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "button": false, + "collapsed": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "is_word('LETTERs')" ] }, { @@ -315,7 +322,7 @@ { "data": { "text/plain": [ - "True" + "'KCAR'" ] }, "execution_count": 9, @@ -324,7 +331,7 @@ } ], "source": [ - "is_word('LETTERs')" + "letters('RRAACCK')" ] }, { @@ -343,7 +350,7 @@ { "data": { "text/plain": [ - "'ERLST'" + "'rzvEbTathwfodRjLecgpixsymqlkun'" ] }, "execution_count": 10, @@ -351,92 +358,30 @@ "output_type": "execute_result" } ], - "source": [ - "letters('LETTERS')" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'ERLTabcdefghijklmnopqrstuvwxyz'" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "letters('EELRTT_')" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } + "collapsed": false }, "outputs": [ { "data": { "text/plain": [ - "'LTER'" + "10" ] }, - "execution_count": 12, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "remove('SET', 'LETTERS')" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'LE'" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "remove('TREaT', 'LETTER_') " + "POINTS['Q']" ] }, { @@ -455,7 +400,7 @@ "In the [previous version](https://www.udacity.com/course/viewer#!/c-cs212/l-48634860) of this program, the board was a two-dimensional matrix, and a square on the board was denoted by a `(row, col)` pair of indexes. There's nothing wrong with that representation, but for this version we will choose a different representation that is simpler in most ways:\n", "\n", "* The board is represented as a one-dimensional list of squares.\n", - "* The default board is 15×15 squares, but\n", + "* The standard board is 15×15 squares, but\n", "we will include a *border* around the outside, making the board size 17×17. \n", "* Squares are denoted by integer indexes, from 0 to 288.\n", "* To move in the `ACROSS` direction from one square to the next, increment the square index by 1.\n", @@ -463,13 +408,14 @@ "* The border squares are filled with a symbol, `OFF`, indicating that they are off the board.\n", "The advantage of the border is that the code never has to check if it is at the edge of the board; it can always\n", "look at the neighboring square without fear of indexing off the end of the board.\n", - "* Each square on the board is initially filled by a symbol indicating the bonus value of the square. When a tile is placed on a square,\n", + "* Each square on the board is initially filled by a symbol indicating the bonus value of the square: 1/2/3-dot characters for single/double/triple letter score; 2/3-dash characters for double and triple word score; and a star for the center starting position. When a tile is placed on a square,\n", "the tile replaces the bonus value.\n", "\n", - "How will we implement this? We'll define `Board` as a subclass of `list` and give it two additional attributes: \n", + "How will we implement this? We'll define `Board` as a subclass of `list` and give it three additional attributes: \n", "\n", "- `down`: the increment to move in the down direction; 17 for a standard board.\n", "- `directions`: the four increments to move to any neighboring square; `(1, 17, -1, -17)` in a standard board.\n", + "- `bingo`: the number of points you get for using all 7 letters.\n", "\n", "Jupyter/Ipython notebooks have a special convention for displaying objects in HTML. We will adopt it as a method of `Board`:\n", "\n", @@ -478,7 +424,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "metadata": { "button": false, "collapsed": false, @@ -491,9 +437,9 @@ "outputs": [], "source": [ "ACROSS = 1 # The 'across' direction; 'down' depends on the size of the board\n", - "OFF = '#' # A square that is off the board\n", - "EMPTY = '.:;-=*'\n", - "SL, DL, TL, DW, TW, STAR = EMPTY # Single/double/triple letter; double/triple word; star\n", + "OFF = '█' # A square that is off the board\n", + "(SL, DL, TL, DW, TW, STAR) = EMPTY = ( # Single/double/triple letter; double/triple word; star\n", + " '.', ':', '∴', '=', '≡', '*') \n", "\n", "Square = int # Squares are implemented as integer indexes.\n", "Direction = int # Directions are implemented as integer increments\n", @@ -523,110 +469,14 @@ } }, "source": [ - "We'll define the standard boards for Words with Friends® and Scrabble®:" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "button": false, - "collapsed": true, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [], - "source": [ - "WWF = Board(\"\"\"\n", - "# # # # # # # # # # # # # # # # #\n", - "# . . . = . . ; . ; . . = . . . #\n", - "# . . : . . - . . . - . . : . . #\n", - "# . : . . : . . . . . : . . : . #\n", - "# = . . ; . . . - . . . ; . . = #\n", - "# . . : . . . : . : . . . : . . #\n", - "# . - . . . ; . . . ; . . . - . #\n", - "# ; . . . : . . . . . : . . . ; #\n", - "# . . . - . . . * . . . - . . . #\n", - "# ; . . . : . . . . . : . . . ; #\n", - "# . - . . . ; . . . ; . . . - . #\n", - "# . . : . . . : . : . . . : . . #\n", - "# = . . ; . . . - . . . ; . . = #\n", - "# . : . . : . . . . . : . . : . #\n", - "# . . : . . - . . . - . . : . . #\n", - "# . . . = . . ; . ; . . = . . . #\n", - "# # # # # # # # # # # # # # # # #\n", - "\"\"\".split(), bingo=35)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "SCRABBLE = Board(\"\"\"\n", - "# # # # # # # # # # # # # # # # #\n", - "# = . . : . . . = . . . : . . = #\n", - "# . - . . . ; . . . ; . . . - . #\n", - "# . . - . . . : . : . . . - . . #\n", - "# : . . - . . . : . . . - . . : #\n", - "# . . . . - . . . . . - . . . . #\n", - "# . ; . . . ; . . . ; . . . ; . #\n", - "# . . : . . . : . : . . . : . . #\n", - "# = . . : . . . * . . . : . . = #\n", - "# . . : . . . : . : . . . : . . #\n", - "# . ; . . . ; . . . ; . . . ; . #\n", - "# . . . . - . . . . . - . . . . #\n", - "# : . . - . . . : . . . - . . : #\n", - "# . . - . . . : . : . . . - . . #\n", - "# . - . . . ; . . . ; . . . - . #\n", - "# = . . : . . . = . . . : . . = #\n", - "# # # # # # # # # # # # # # # # #\n", - "\"\"\".split(), bingo=50)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [], - "source": [ - "assert len(WWF) == len(SCRABBLE) == 17 * 17\n", - "assert all(sq in EMPTY or sq == OFF for sq in WWF + SCRABBLE)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "# Displaying the Board in HTML\n", + "# HTML Display of the Board\n", "\n", - "I want to diaplay the board in HTML, as a table with different background colors for the bonus squares; and gold-colored letter tiles. I also want to display the point values for each letter on the tiles; I'll use a `defaultdict` of `{letter: int}` named `POINTS` for that." + "I want to diaplay the board in HTML, as a table with different background colors for the bonus squares; and gold-colored letter tiles. " ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 13, "metadata": { "button": false, "collapsed": false, @@ -642,34 +492,42 @@ " \"An HTML representation of the board.\"\n", " size = board.down - 2\n", " squares = [square_html(sq) for sq in board if sq != OFF]\n", - " row = ('' + '{}' * size)\n", - " return ('' + row * size + '
').format(*squares)\n", + " row = ('' + size * '{}')\n", + " return ('' + (size * row) + '
').format(*squares)\n", " \n", - "board_colors = {\n", + "def square_html(sq) -> str:\n", + " \"An HTML representation of a square.\"\n", + " color, size, text = (bonus_colors[sq] if sq in EMPTY else ('gold', 120, sq))\n", + " return ('''{}{}'''\n", + " .format(color, size, text, POINTS[text] or ''))\n", + "\n", + "bonus_colors = {\n", " DL: ('lightblue', 66, 'DL'),\n", " TL: ('lightgreen', 66, 'TL'),\n", " DW: ('lightcoral', 66, 'DW'),\n", " TW: ('orange', 66, 'TW'),\n", " SL: ('whitesmoke', 66, ''),\n", - " STAR: ('violet', 100, '✭')}\n", - "\n", - "def square_html(sq) -> str:\n", - " \"An HTML representation of a square.\"\n", - " color, size, text = board_colors.get(sq, ('gold', 120, sq))\n", - " if text.isupper(): \n", - " text = '{}{}'.format(text, POINTS.get(text, ''))\n", - " params = \"width:25px; height:25px; text-align:center; padding:0px;\"\n", - " style = \"background-color:{}; font-size:{}%\".format(color, size, text)\n", - " return '' + text\n", - "\n", - "POINTS = defaultdict(int, \n", - " A=1, B=3, C=3, D=2, E=1, F=4, G=2, H=4, I=1, J=8, K=5, L=1, M=3, \n", - " N=1, O=1, P=3, Q=10, R=1, S=1, T=1, U=1, V=4, W=4, X=8, Y=4, Z=10)" + " STAR: ('violet', 99, '✭')}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "We'll define the standard boards for Words with Friends® and Scrabble®:" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 14, "metadata": { "button": false, "collapsed": false, @@ -683,95 +541,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDW
TLDLDLTL
DWDW
TLDLDLTL
DWTLTLDW
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DLDWDWDL
TWTLTLTW
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDW
TLDLDLTL
DWDW
TLDLDLTL
DWTLTLDW
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DLDWDWDL
TWTLTLTW
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", - " ';',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -787,26 +870,26 @@ " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -820,13 +903,13 @@ " '.',\n", " '.',\n", " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", + " '∴',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", @@ -834,161 +917,181 @@ " '.',\n", " '.',\n", " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", " '.',\n", - " ':',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '=',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, - "execution_count": 19, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "WWF = Board(\"\"\"\n", + "█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █\n", + "█ . . . ≡ . . ∴ . ∴ . . ≡ . . . █\n", + "█ . . : . . = . . . = . . : . . █\n", + "█ . : . . : . . . . . : . . : . █\n", + "█ ≡ . . ∴ . . . = . . . ∴ . . ≡ █\n", + "█ . . : . . . : . : . . . : . . █\n", + "█ . = . . . ∴ . . . ∴ . . . = . █\n", + "█ ∴ . . . : . . . . . : . . . ∴ █\n", + "█ . . . = . . . * . . . = . . . █\n", + "█ ∴ . . . : . . . . . : . . . ∴ █\n", + "█ . = . . . ∴ . . . ∴ . . . = . █\n", + "█ . . : . . . : . : . . . : . . █\n", + "█ ≡ . . ∴ . . . = . . . ∴ . . ≡ █\n", + "█ . : . . : . . . . . : . . : . █\n", + "█ . . : . . = . . . = . . : . . █\n", + "█ . . . ≡ . . ∴ . ∴ . . ≡ . . . █\n", + "█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █\n", + "\"\"\".split(), bingo=35)\n", + "\n", "WWF" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -996,34 +1099,306 @@ { "data": { "text/html": [ - "
TWDLTWDLTW
DWTLTLDW
DWDLDLDW
DLDWDLDWDL
DWDW
TLTLTLTL
DLDLDLDL
TWDLDLTW
DLDLDLDL
TLTLTLTL
DWDW
DLDWDLDWDL
DWDLDLDW
DWTLTLDW
TWDLTWDLTW
" + "
TWDLTWDLTW
DWTLTLDW
DWDLDLDW
DLDWDLDWDL
DWDW
TLTLTLTL
DLDLDLDL
TWDLDLTW
DLDLDLDL
TLTLTLTL
DWDW
DLDWDLDWDL
DWDLDLDW
DWTLTLDW
TWDLTWDLTW
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '=',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '≡',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " ':',\n", + " '.',\n", + " '.',\n", " '=',\n", " '.',\n", " '.',\n", @@ -1031,114 +1406,67 @@ " ':',\n", " '.',\n", " '.',\n", + " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", " '.',\n", " '.',\n", " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", " ':',\n", " '.',\n", " '.',\n", @@ -1150,9 +1478,9 @@ " ':',\n", " '.',\n", " '.',\n", - " '=',\n", - " '#',\n", - " '#',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -1168,97 +1496,32 @@ " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ':',\n", " '.',\n", " '.',\n", " '.',\n", @@ -1266,36 +1529,121 @@ " '.',\n", " '.',\n", " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", " ':',\n", " '.',\n", " '.',\n", + " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '.',\n", + " '.',\n", + " ':',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, - "execution_count": 20, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "SCRABBLE = Board(\"\"\"\n", + "█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █\n", + "█ ≡ . . : . . . ≡ . . . : . . ≡ █\n", + "█ . = . . . ∴ . . . ∴ . . . = . █\n", + "█ . . = . . . : . : . . . = . . █\n", + "█ : . . = . . . : . . . = . . : █\n", + "█ . . . . = . . . . . = . . . . █\n", + "█ . ∴ . . . ∴ . . . ∴ . . . ∴ . █\n", + "█ . . : . . . : . : . . . : . . █\n", + "█ ≡ . . : . . . * . . . : . . ≡ █\n", + "█ . . : . . . : . : . . . : . . █\n", + "█ . ∴ . . . ∴ . . . ∴ . . . ∴ . █\n", + "█ . . . . = . . . . . = . . . . █\n", + "█ : . . = . . . : . . . = . . : █\n", + "█ . . = . . . : . : . . . = . . █\n", + "█ . = . . . ∴ . . . ∴ . . . = . █\n", + "█ ≡ . . : . . . ≡ . . . : . . ≡ █\n", + "█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █\n", + "\"\"\".split(), bingo=50)\n", + "\n", "SCRABBLE" ] }, @@ -1323,7 +1671,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 16, "metadata": { "button": false, "collapsed": true, @@ -1363,7 +1711,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 17, "metadata": { "button": false, "collapsed": false, @@ -1377,95 +1725,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2DWB3E1C3DWI1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1Y4T1H4E1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2DWB3E1C3DWI1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1DLE1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", - " ';',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -1481,26 +2054,26 @@ " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'B',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -1515,12 +2088,12 @@ " 'O',\n", " 'U',\n", " 'R',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'G',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", @@ -1528,13 +2101,13 @@ " 'E',\n", " '.',\n", " 'C',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " 'I',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " 'A',\n", " '.',\n", " '.',\n", @@ -1549,8 +2122,8 @@ " 'A',\n", " 'R',\n", " 'D',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'V',\n", " 'I',\n", @@ -1560,14 +2133,14 @@ " 'e',\n", " 'N',\n", " 'T',\n", - " ';',\n", + " '∴',\n", " 'I',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'L',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'E',\n", " ':',\n", @@ -1579,29 +2152,29 @@ " 'E',\n", " '.',\n", " 'L',\n", - " 'Y',\n", - " 'T',\n", - " 'H',\n", + " '.',\n", + " ':',\n", + " '.',\n", " 'E',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " 'E',\n", + " '.',\n", + " '.',\n", " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '-',\n", " 'R',\n", " 'E',\n", " 'D',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " 'S',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", @@ -1617,61 +2190,61 @@ " '.',\n", " ':',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'E',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " 'N',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, - "execution_count": 22, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -1684,7 +2257,6 @@ " Play(158, DOWN, 'MUSES', ''),\n", " Play(172, ACROSS, 'VIRULeNT', ''),\n", " Play(213, ACROSS, 'RED', ''),\n", - " Play(198, ACROSS, 'LYTHE', ''),\n", " Play(147, DOWN, 'CHILDREN', ''),\n", " Play(164, ACROSS, 'HEARD', ''),\n", " Play(117, DOWN, 'BRIDLES', ''),\n", @@ -1707,338 +2279,17 @@ } }, "source": [ - "# Strategy for Finding Legal Plays\n", + "# Strategy for Finding All Legal Plays\n", "\n", "This is our strategy for finding all possible legal plays on a board:\n", "\n", "1. Find all *anchor squares* on the board. An anchor square is an empty square that is adjacent to a letter on the board—every legal move must place a letter on an anchor square. (One exception: on the game's first play, there are no letters on the board, and the `STAR` square in the center counts as the only anchor square.)\n", - "2. Using just the letters in the rack, find all *prefixes* of words in the dictionary. For example, with the rack `ABC`, we find that `B`, `BA`, and `BAC` are all prefixes of the word `BACK` (and the rack contains other prefixes of other words as well).\n", + "2. Using just the letters in the rack, find all *prefixes* of words in the dictionary. For example, with the rack `ABC`, we find that `B`, `BA`, and `BAC` are all prefixes of the word `BACK` (and the rack contains other prefixes of other words as well, such as `CA` and `CAB`).\n", "3. For each anchor square and for both directions (across and down):\n", " - Try each prefix before the anchor (that is, to the left or above the anchor). Don't allow a prefix to extend to another anchor or off the board. That means we won't have to worry about *cross words* for the prefix. If there are already letters on the board before the anchor point, use them as the (only possible) prefix rather than using the prefixes from the rack. For each prefix that fits:\n", - " - Starting at the anchor, march forward (or down) one square at a time, trying to fill empty squares with each possible letter from the rack that forms a valid prefix of a word in the dictionary. If the march forward hits letters that are already on the board, make sure they form a valid prefix too. Also check that any cross words are valid words. When we make a complete word (with an empty or `OFF` square ahead), yield the play that made the word.\n", + " - Starting at the anchor, march across (or down) one square at a time, trying to fill empty squares with each possible letter from the rack that forms a valid prefix of a word in the dictionary. If the march hits letters that are already on the board, make sure they form a valid prefix too. Also check that any cross words are valid words. When we make a complete word (with an empty or `OFF` square ahead), yield the play that made the word.\n", " \n", - "So, each legal play will have zero or more prefix letters (which either all come from the rack or all were already on the board), followed by one letter from the rack covering an anchor square, followed by zero or more additional letters (which can be a mix of letters from the rack and letters already on the board), followed by an empty or `OFF` square." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "# Prefixes\n", - "\n", - "Here we define the set of all prefixes of all words in the dictionary, and investigate the set:" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "button": false, - "collapsed": true, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [], - "source": [ - "def dict_prefixes(dictionary) -> set:\n", - " \"The set of all prefixes of each word in a dictionary.\"\n", - " return {word[:i] for word in dictionary for i in range(len(word))}\n", - "\n", - "PREFIXES = dict_prefixes(DICTIONARY)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "276374" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(PREFIXES)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "1.5992014813100335" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(PREFIXES) / len(DICTIONARY)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "['TOASTM',\n", - " 'SYNTAX',\n", - " 'BOOGEYM',\n", - " 'MASSAS',\n", - " 'TONS',\n", - " 'PYROT',\n", - " 'ETHNOCENTRICIT',\n", - " 'TROOPIA',\n", - " 'EVENTFULNES',\n", - " 'PENITENTIA']" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "random.sample(PREFIXES, 10)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "Here are all the prefixes from a tiny dictionary of three words. Note that the empty string is a prefix, and we include `HELP` because it is a prefix of `HELPER`, but we don't include `HELPER`, because there is no letter we can add to `HELPER` to make a word in this dictionary:" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'', 'H', 'HE', 'HEL', 'HELL', 'HELP', 'HELPE'}" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dict_prefixes({'HELLO', 'HELP', 'HELPER'})" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "The function `rack_prefixes` gives the set of prefixes that can be made just from the letters in the rack. Most of the work is done by `extend_prefixes`, which accumulates a set of prefixes into `results`:" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "button": false, - "collapsed": true, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [], - "source": [ - "def rack_prefixes(rack) -> set: \n", - " \"All word prefixes that can be made by the rack.\"\n", - " return extend_prefixes('', rack, set())\n", - "\n", - "def extend_prefixes(prefix, rack, results) -> set:\n", - " if prefix.upper() in PREFIXES:\n", - " results.add(prefix)\n", - " for L in letters(rack):\n", - " extend_prefixes(prefix+L, remove(L, rack), results)\n", - " return results" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'', 'A', 'AB', 'AC', 'B', 'BA', 'BAC', 'C', 'CA', 'CAB'}" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rack = 'ABC'\n", - "rack_prefixes(rack)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "button": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "source": [ - "The number of prefixes in a rack is usually on the order of a hundred, unless there is a blank in the rack:" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "155" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(rack_prefixes('LETTERS'))" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "120" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(rack_prefixes('HJRIPUM'))" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "button": false, - "collapsed": false, - "deletable": true, - "new_sheet": false, - "run_control": { - "read_only": false - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "1590" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(rack_prefixes('LETTER_'))" + "So, each legal play will have zero or more prefix letters (which either all come from the rack or all were already on the board), followed by one letter from the rack covering an anchor square, followed by zero or more additional letters (which can be a mix of letters from the rack and letters already on the board). A legal play must be proceeded and followed by either an empty or `OFF` square." ] }, { @@ -2059,7 +2310,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 18, "metadata": { "button": false, "collapsed": false, @@ -2083,7 +2334,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 19, "metadata": { "button": false, "collapsed": false, @@ -2100,7 +2351,7 @@ "[144]" ] }, - "execution_count": 34, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -2121,14 +2372,35 @@ } }, "source": [ - "# Plays on Example Board\n", + "# Prefixes\n", "\n", - "Let's work through the process of finding plays on the example `board`. First, we'll find all the anchors:" + "Here we define the set of all prefixes of all words in the dictionary, and investigate the set:" ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 20, + "metadata": { + "button": false, + "collapsed": true, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [], + "source": [ + "def dict_prefixes(dictionary) -> set:\n", + " \"The set of all prefixes of each word in a dictionary.\"\n", + " return {word[:i] for word in dictionary for i in range(len(word))}\n", + "\n", + "PREFIXES = dict_prefixes(DICTIONARY)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, "metadata": { "button": false, "collapsed": false, @@ -2142,10 +2414,347 @@ { "data": { "text/plain": [ - "53" + "276374" ] }, - "execution_count": 35, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(PREFIXES)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['REDRAWER',\n", + " 'TRIVE',\n", + " 'MENT',\n", + " 'CORPO',\n", + " 'TALESME',\n", + " 'DAVENPO',\n", + " 'TEMPORIZATIO',\n", + " 'PLURA',\n", + " 'CRUP',\n", + " 'SPOOR']" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random.sample(PREFIXES, 10)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "Here are all the prefixes from a tiny dictionary of three words. Note that the empty string is a prefix, and `HELP` is included because it is a prefix of `HELPER`, but `HELPER` is not included because there is no letter we can add to `HELPER` to make a word in this dictionary:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "button": false, + "collapsed": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'', 'H', 'HE', 'HEL', 'HELL', 'HELP', 'HELPE'}" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dict_prefixes({'HELLO', 'HELP', 'HELPER'})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "The function `rack_prefixes` gives the set of prefixes that can be made just from the letters in the rack (returning them in shortest-first order). Most of the work is done by `extend_prefixes`, which accumulates a set of prefixes into `results`. The function `remove(tiles, rack)` removes letters from a rack (after they have been played)." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "button": false, + "collapsed": true, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [], + "source": [ + "def rack_prefixes(rack) -> set: \n", + " \"All word prefixes that can be made by the rack.\"\n", + " return sorted(set(extend_prefixes('', rack, set())), key=len)\n", + "\n", + "def extend_prefixes(prefix, rack, results) -> set:\n", + " \"Add possible prefixes to `results`.\"\n", + " if prefix.upper() in PREFIXES:\n", + " results.add(prefix)\n", + " for L in letters(rack):\n", + " extend_prefixes(prefix+L, remove(L, rack), results)\n", + " return results\n", + "\n", + "def remove(tiles, rack) -> str:\n", + " \"Return a copy of rack with the given tile(s) removed.\"\n", + " for tile in tiles:\n", + " if tile.islower(): tile = BLANK\n", + " rack = rack.replace(tile, '', 1)\n", + " return rack" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "button": false, + "collapsed": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['', 'A', 'B', 'C', 'BA', 'AB', 'CA', 'AC', 'CAB', 'BAC']" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rack = 'ABC'\n", + "rack_prefixes(rack)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "The number of prefixes in a rack is usually on the order of a hundred or two:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "button": false, + "collapsed": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "155" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(rack_prefixes('LETTERS'))" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "196" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(rack_prefixes('ERYINNA'))" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "178" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(rack_prefixes('XNMNAIE'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Unless there is a blank in the rack, in which case it is more like a thousand or two:" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "button": false, + "collapsed": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1590" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(rack_prefixes('LETTER_'))" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1809" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(rack_prefixes('ERYINN_'))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "button": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "source": [ + "# Plays on Example Board\n", + "\n", + "Let's work through the process of finding plays on the example `board`. First, we'll find all the anchors:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "button": false, + "collapsed": false, + "deletable": true, + "new_sheet": false, + "run_control": { + "read_only": false + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "54" + ] + }, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -2171,7 +2780,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 32, "metadata": { "button": false, "collapsed": false, @@ -2185,95 +2794,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLB3
TLDLT1O1U1R1
G2DWB3E1C3I1
A1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1I1L1
E1S1E1L1Y4T1H4E1
TWE1R1E1D2S1
DLS1R1DL
DLDWE1DL
TWTLTLN1
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLB3
TLDLT1O1U1R1
G2DWB3E1C3I1
A1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1I1L1
E1S1E1L1DLE1
TWE1R1E1D2S1
DLS1R1DL
DLDWE1DL
TWTLTLN1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", - " ';',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -2289,26 +3123,26 @@ " ':',\n", " '.',\n", " '*',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '*',\n", " '*',\n", " '*',\n", " 'B',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '*',\n", " '.',\n", " '.',\n", @@ -2323,12 +3157,12 @@ " 'O',\n", " 'U',\n", " 'R',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '*',\n", " 'G',\n", " '*',\n", - " '-',\n", + " '=',\n", " '*',\n", " '.',\n", " '*',\n", @@ -2340,8 +3174,8 @@ " '*',\n", " '*',\n", " 'I',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '*',\n", " 'A',\n", " '*',\n", @@ -2357,8 +3191,8 @@ " 'A',\n", " 'R',\n", " 'D',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '*',\n", " 'V',\n", " 'I',\n", @@ -2374,8 +3208,8 @@ " '*',\n", " '*',\n", " 'L',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '*',\n", " 'E',\n", " '*',\n", @@ -2387,13 +3221,13 @@ " 'E',\n", " '*',\n", " 'L',\n", - " 'Y',\n", - " 'T',\n", - " 'H',\n", + " '*',\n", + " ':',\n", + " '*',\n", " 'E',\n", - " '#',\n", - " '#',\n", - " '=',\n", + " '█',\n", + " '█',\n", + " '≡',\n", " '*',\n", " '.',\n", " '*',\n", @@ -2405,11 +3239,11 @@ " 'E',\n", " 'D',\n", " '*',\n", - " '*',\n", + " '.',\n", " '*',\n", " 'S',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", @@ -2425,14 +3259,14 @@ " '.',\n", " ':',\n", " '*',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '*',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", @@ -2442,44 +3276,44 @@ " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '*',\n", " 'N',\n", " '*',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, - "execution_count": 36, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -2487,7 +3321,7 @@ "source": [ "board2 = Board(board)\n", "for a in anchors:\n", - " board2[a] = STAR\n", + " board2[a] = STAR\n", " \n", "board2" ] @@ -2508,7 +3342,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 33, "metadata": { "button": false, "collapsed": false, @@ -2525,7 +3359,7 @@ "88" ] }, - "execution_count": 37, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -2539,7 +3373,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 34, "metadata": { "button": false, "collapsed": false, @@ -2553,10 +3387,10 @@ { "data": { "text/plain": [ - "' BANQ BH KANB KAC HACK ACK QAN BAH CAB CHAB BAN HACKB NA CH KHAN CAH AH ANKH H BHA CHAK CANK BAC KAH NAK KBA CN ABH ANK QA HAN NACH Q CAN BA BAK K HAC A AQ HAK BHAK CA NAB NAC AB BHAN KNAC C AK CHA KA HANK HACKN ACQ HANC N B ANC BANK KN HA KAN BACH CHAQ BACKH AN ABN KAB KACH KB AHC CHAN CAK BANKC BACK ANH KH ACKN AC BANC KNA KHA HAB ANCH ACH ACN'" + "' C H Q K A B N BA CA BH KH CN KB KA KN AB AQ CH NA AC HA AN AH AK QA CHA KAC KAN HAK KNA KAB BAH BHA CAB ANK AHC ABH HAC ANC KBA KAH CAK CAH NAC ACQ BAK ACN KHA NAK BAC CAN HAN ANH ACK NAB HAB ABN QAN BAN ACH ACKN HANK BANC KANB CHAN CHAK CANK NACH KACH BACH KNAC HANC KHAN HACK BACK BHAN ANCH ANKH CHAB BANQ BANK CHAQ BHAK HACKB BANKC BACKH HACKN'" ] }, - "execution_count": 38, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -2581,7 +3415,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 35, "metadata": { "button": false, "collapsed": false, @@ -2595,95 +3429,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2DWB3E1C3DWI1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1Y4T1H4E1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2DWB3E1C3DWI1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1DLE1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", - " ';',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -2699,26 +3758,26 @@ " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'B',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -2733,12 +3792,12 @@ " 'O',\n", " 'U',\n", " 'R',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'G',\n", " '.',\n", - " '-',\n", + " '=',\n", " '*',\n", " '.',\n", " '.',\n", @@ -2746,13 +3805,13 @@ " 'E',\n", " '.',\n", " 'C',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " 'I',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " 'A',\n", " '.',\n", " '.',\n", @@ -2767,8 +3826,8 @@ " 'A',\n", " 'R',\n", " 'D',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'V',\n", " 'I',\n", @@ -2778,14 +3837,14 @@ " 'e',\n", " 'N',\n", " 'T',\n", - " ';',\n", + " '∴',\n", " 'I',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'L',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'E',\n", " ':',\n", @@ -2797,29 +3856,29 @@ " 'E',\n", " '.',\n", " 'L',\n", - " 'Y',\n", - " 'T',\n", - " 'H',\n", + " '.',\n", + " ':',\n", + " '.',\n", " 'E',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " 'E',\n", + " '.',\n", + " '.',\n", " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '-',\n", " 'R',\n", " 'E',\n", " 'D',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " 'S',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", @@ -2835,61 +3894,61 @@ " '.',\n", " ':',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'E',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " 'N',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, - "execution_count": 39, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -2917,7 +3976,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 36, "metadata": { "button": false, "collapsed": false, @@ -2931,95 +3990,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2B3B3E1C3DWI1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1Y4T1H4E1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2B3B3E1C3DWI1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1DLE1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", - " ';',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -3035,26 +4319,26 @@ " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'B',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -3069,8 +4353,8 @@ " 'O',\n", " 'U',\n", " 'R',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'G',\n", " '.',\n", @@ -3082,13 +4366,13 @@ " 'E',\n", " '.',\n", " 'C',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " 'I',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " 'A',\n", " '.',\n", " '.',\n", @@ -3103,8 +4387,8 @@ " 'A',\n", " 'R',\n", " 'D',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'V',\n", " 'I',\n", @@ -3114,14 +4398,14 @@ " 'e',\n", " 'N',\n", " 'T',\n", - " ';',\n", + " '∴',\n", " 'I',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'L',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'E',\n", " ':',\n", @@ -3133,29 +4417,29 @@ " 'E',\n", " '.',\n", " 'L',\n", - " 'Y',\n", - " 'T',\n", - " 'H',\n", + " '.',\n", + " ':',\n", + " '.',\n", " 'E',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " 'E',\n", + " '.',\n", + " '.',\n", " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '-',\n", " 'R',\n", " 'E',\n", " 'D',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " 'S',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", @@ -3171,61 +4455,61 @@ " '.',\n", " ':',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'E',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " 'N',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, - "execution_count": 40, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -3251,7 +4535,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 37, "metadata": { "button": false, "collapsed": false, @@ -3265,95 +4549,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2B3A1B3E1C3DWI1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1Y4T1H4E1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2B3A1B3E1C3DWI1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1DLE1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", - " ';',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -3369,26 +4878,26 @@ " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'B',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -3403,8 +4912,8 @@ " 'O',\n", " 'U',\n", " 'R',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'G',\n", " '.',\n", @@ -3416,13 +4925,13 @@ " 'E',\n", " '.',\n", " 'C',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " 'I',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " 'A',\n", " '.',\n", " '.',\n", @@ -3437,8 +4946,8 @@ " 'A',\n", " 'R',\n", " 'D',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'V',\n", " 'I',\n", @@ -3448,14 +4957,14 @@ " 'e',\n", " 'N',\n", " 'T',\n", - " ';',\n", + " '∴',\n", " 'I',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'L',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'E',\n", " ':',\n", @@ -3467,29 +4976,29 @@ " 'E',\n", " '.',\n", " 'L',\n", - " 'Y',\n", - " 'T',\n", - " 'H',\n", + " '.',\n", + " ':',\n", + " '.',\n", " 'E',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " 'E',\n", + " '.',\n", + " '.',\n", " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '-',\n", " 'R',\n", " 'E',\n", " 'D',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " 'S',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", @@ -3505,61 +5014,61 @@ " '.',\n", " ':',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'E',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " 'N',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, - "execution_count": 41, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -3586,7 +5095,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 38, "metadata": { "button": false, "collapsed": false, @@ -3600,95 +5109,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2B3A1C3K5B3E1C3DWI1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1Y4T1H4E1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2B3A1C3K5B3E1C3DWI1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1DLE1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", - " ';',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -3704,26 +5438,26 @@ " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'B',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -3738,8 +5472,8 @@ " 'O',\n", " 'U',\n", " 'R',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'G',\n", " '.',\n", @@ -3751,13 +5485,13 @@ " 'E',\n", " '.',\n", " 'C',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " 'I',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " 'A',\n", " '.',\n", " '.',\n", @@ -3772,8 +5506,8 @@ " 'A',\n", " 'R',\n", " 'D',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'V',\n", " 'I',\n", @@ -3783,14 +5517,14 @@ " 'e',\n", " 'N',\n", " 'T',\n", - " ';',\n", + " '∴',\n", " 'I',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'L',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'E',\n", " ':',\n", @@ -3802,29 +5536,29 @@ " 'E',\n", " '.',\n", " 'L',\n", - " 'Y',\n", - " 'T',\n", - " 'H',\n", + " '.',\n", + " ':',\n", + " '.',\n", " 'E',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " 'E',\n", + " '.',\n", + " '.',\n", " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '-',\n", " 'R',\n", " 'E',\n", " 'D',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " 'S',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", @@ -3840,68 +5574,68 @@ " '.',\n", " ':',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'E',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " 'N',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, - "execution_count": 42, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "board3[142:144] = 'CK'\n", - "assert 'BACK' in PREFIXES\n", + "assert 'BACKBE' in PREFIXES\n", "board3" ] }, @@ -3921,7 +5655,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 39, "metadata": { "button": false, "collapsed": false, @@ -3935,95 +5669,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2B3A1C3K5B3E1N1C3DWI1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1Y4T1H4E1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2B3A1C3K5B3E1N1C3DWI1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1DLE1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", - " ';',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -4039,26 +5998,26 @@ " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'B',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -4073,8 +6032,8 @@ " 'O',\n", " 'U',\n", " 'R',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'G',\n", " '.',\n", @@ -4086,13 +6045,13 @@ " 'E',\n", " 'N',\n", " 'C',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " 'I',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " 'A',\n", " '.',\n", " '.',\n", @@ -4107,8 +6066,8 @@ " 'A',\n", " 'R',\n", " 'D',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'V',\n", " 'I',\n", @@ -4118,14 +6077,14 @@ " 'e',\n", " 'N',\n", " 'T',\n", - " ';',\n", + " '∴',\n", " 'I',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'L',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'E',\n", " ':',\n", @@ -4137,29 +6096,29 @@ " 'E',\n", " '.',\n", " 'L',\n", - " 'Y',\n", - " 'T',\n", - " 'H',\n", + " '.',\n", + " ':',\n", + " '.',\n", " 'E',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " 'E',\n", + " '.',\n", + " '.',\n", " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '-',\n", " 'R',\n", " 'E',\n", " 'D',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " 'S',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", @@ -4175,61 +6134,61 @@ " '.',\n", " ':',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'E',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " 'N',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, - "execution_count": 43, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -4256,7 +6215,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 40, "metadata": { "button": false, "collapsed": false, @@ -4270,95 +6229,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2B3A1C3K5B3E1N1C3H4I1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1Y4T1H4E1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2B3A1C3K5B3E1N1C3H4I1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1DLE1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", - " ';',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -4374,26 +6558,26 @@ " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'B',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -4408,8 +6592,8 @@ " 'O',\n", " 'U',\n", " 'R',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'G',\n", " '.',\n", @@ -4425,9 +6609,9 @@ " '.',\n", " '.',\n", " 'I',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " 'A',\n", " '.',\n", " '.',\n", @@ -4442,8 +6626,8 @@ " 'A',\n", " 'R',\n", " 'D',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'V',\n", " 'I',\n", @@ -4453,14 +6637,14 @@ " 'e',\n", " 'N',\n", " 'T',\n", - " ';',\n", + " '∴',\n", " 'I',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'L',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'E',\n", " ':',\n", @@ -4472,29 +6656,29 @@ " 'E',\n", " '.',\n", " 'L',\n", - " 'Y',\n", - " 'T',\n", - " 'H',\n", + " '.',\n", + " ':',\n", + " '.',\n", " 'E',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " 'E',\n", + " '.',\n", + " '.',\n", " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '-',\n", " 'R',\n", " 'E',\n", " 'D',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " 'S',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", @@ -4510,61 +6694,61 @@ " '.',\n", " ':',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'E',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " 'N',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, - "execution_count": 44, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -4595,7 +6779,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 41, "metadata": { "button": false, "collapsed": true, @@ -4637,7 +6821,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 42, "metadata": { "button": false, "collapsed": false, @@ -4657,8 +6841,9 @@ " else: # Prefixes from rack fit in space before anchor\n", " maxlen = (anchor - scan_to_anchor(board, anchor, -dir)) // dir\n", " for prefix in prefixes:\n", - " if len(prefix) <= maxlen:\n", - " yield Play(anchor - len(prefix) * dir, dir, prefix, remove(prefix, rack))" + " if len(prefix) > maxlen:\n", + " return\n", + " yield Play(anchor - len(prefix) * dir, dir, prefix, remove(prefix, rack))" ] }, { @@ -4677,7 +6862,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 43, "metadata": { "button": false, "collapsed": true, @@ -4735,7 +6920,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 44, "metadata": { "button": false, "collapsed": true, @@ -4758,7 +6943,7 @@ "\n", "def valid_crossword(cword, L) -> bool:\n", " \"Is placing letter L valid (with respective to the crossword)?\"\n", - " return len(cword) == 1 or cword.replace('.', L).upper() in DICTIONARY\n", + " return len(cword) == 1 or is_word(cword.replace('.', L))\n", "\n", "def other(dir, board) -> Direction:\n", " \"The other direction (across/down) on the board.\"\n", @@ -4767,7 +6952,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 45, "metadata": { "button": false, "collapsed": false, @@ -4784,7 +6969,7 @@ "'.MUSES'" ] }, - "execution_count": 49, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -4795,7 +6980,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 46, "metadata": { "button": false, "collapsed": false, @@ -4812,7 +6997,7 @@ "'T.E'" ] }, - "execution_count": 50, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -4837,7 +7022,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 47, "metadata": { "button": false, "collapsed": false, @@ -4854,7 +7039,7 @@ "True" ] }, - "execution_count": 51, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -4879,7 +7064,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 48, "metadata": { "button": false, "collapsed": false, @@ -4903,7 +7088,7 @@ " Play(start=141, dir=1, letters='', rack='ABCHKNQ')}" ] }, - "execution_count": 52, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -4928,7 +7113,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 49, "metadata": { "button": false, "collapsed": false, @@ -4948,7 +7133,7 @@ " Play(start=140, dir=1, letters='BAN', rack='CHKQ')}" ] }, - "execution_count": 53, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -4970,12 +7155,12 @@ "source": [ "# Scoring\n", "\n", - "Now we'll show how to count up the points made by a play. The score is the sum of the word score for the play, plus a bingo score if all seven letters are used, plus the sum of the word scores for any cross words. The word score is the sum of the letter scores (where each letter score may be doubled or tripled by a bonus square when the letter is first played on the square), all multiplied by any word bonus(es) encountered by the newly-placed letters." + "Now we'll show how to count up the points made by a play. The score is the sum of the word score for the play, plus the sum of the word scores for any cross words, plus a bingo score if all seven letters are used. The word score is the sum of the letter scores (where each letter score may be doubled or tripled by a bonus square when the letter is first played on the square), all multiplied by any word bonus(es) encountered by the newly-placed letters." ] }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 50, "metadata": { "button": false, "collapsed": false, @@ -5025,7 +7210,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 51, "metadata": { "button": false, "collapsed": false, @@ -5043,8 +7228,8 @@ " \n", "def enumerate_play(play) -> list:\n", " \"List (square_number, letter) pairs for each tile in the play.\"\n", - " return [(play.start + i * play.dir, L) \n", - " for (i, L) in enumerate(play.letters)]\n", + " return [(play.start + i * play.dir, play.letters[i]) \n", + " for i in range(len(play.letters))]\n", " \n", "def cross_plays(board, play):\n", " \"Generate all plays for words that cross this play.\"\n", @@ -5072,7 +7257,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 52, "metadata": { "button": false, "collapsed": false, @@ -5089,7 +7274,7 @@ "116" ] }, - "execution_count": 56, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -5114,7 +7299,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 53, "metadata": { "button": false, "collapsed": true, @@ -5133,7 +7318,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 54, "metadata": { "button": false, "collapsed": false, @@ -5150,7 +7335,7 @@ "Play(start=140, dir=1, letters='BACKBENCH', rack='Q')" ] }, - "execution_count": 58, + "execution_count": 54, "metadata": {}, "output_type": "execute_result" } @@ -5161,7 +7346,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 55, "metadata": { "button": false, "collapsed": false, @@ -5175,95 +7360,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2B3A1C3K5B3E1N1C3H4I1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1Y4T1H4E1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDWB3
TLDLDLT1O1U1R1
G2B3A1C3K5B3E1N1C3H4I1
TLA1M3N1H4E1A1R1D2
V4I1R1U1L1eN1T1TLI1DWL1
E1DLS1DLE1L1DLE1
TWTLE1DWR1E1D2TLS1
DLS1R1DL
DLDWDWE1DL
TWTLTLN1TW
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", - " ';',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -5279,26 +7689,26 @@ " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'B',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -5313,8 +7723,8 @@ " 'O',\n", " 'U',\n", " 'R',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'G',\n", " '.',\n", @@ -5330,9 +7740,9 @@ " '.',\n", " '.',\n", " 'I',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " 'A',\n", " '.',\n", " '.',\n", @@ -5347,8 +7757,8 @@ " 'A',\n", " 'R',\n", " 'D',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'V',\n", " 'I',\n", @@ -5358,14 +7768,14 @@ " 'e',\n", " 'N',\n", " 'T',\n", - " ';',\n", + " '∴',\n", " 'I',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'L',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " 'E',\n", " ':',\n", @@ -5377,29 +7787,29 @@ " 'E',\n", " '.',\n", " 'L',\n", - " 'Y',\n", - " 'T',\n", - " 'H',\n", + " '.',\n", + " ':',\n", + " '.',\n", " 'E',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " 'E',\n", + " '.',\n", + " '.',\n", " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '-',\n", " 'R',\n", " 'E',\n", " 'D',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " 'S',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", @@ -5415,61 +7825,61 @@ " '.',\n", " ':',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " 'E',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " 'N',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, - "execution_count": 59, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } @@ -5496,7 +7906,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 56, "metadata": { "button": false, "collapsed": false, @@ -5506,21 +7916,9 @@ "read_only": false } }, - "outputs": [ - { - "data": { - "text/plain": [ - "100" - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "BAG = 'AAAAAAAAABBCCDDDDEEEEEEEEEEEEFFGGGHHIIIIIIIIIJKLLLLMMNNNNNNOOOOOOOOPPQRRRRRRSSSSTTTTTTUUUUVVWWXYYZ__'\n", - "len(BAG)" + "BAG = 9*'A' + 12*'E' + 9*'I' + 8*'O' + 'BBCCDDDDFFGGGHHJKLLLLMMNNNNNNPPQRRRRRRSSSSTTTTTTUUUUVVWWXYYZ__'" ] }, { @@ -5539,7 +7937,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 57, "metadata": { "button": false, "collapsed": true, @@ -5573,15 +7971,16 @@ "def make_one_play(board, p, strategy, scores, racks, bag, verbose) -> Board:\n", " \"\"\"One player, player p, chooses a move according to the strategy.\n", " We make the move, replenish the rack, update scores, and return the new Board.\"\"\"\n", - " rack = racks[p]\n", - " play = strategy(board, racks[p])\n", + " rack = racks[p]\n", + " play = strategy(board, racks[p])\n", " racks[p] = replenish(play.rack, bag)\n", - " points = score(board, play)\n", - " scores[p] += points\n", - " board = make_play(board, play)\n", + " points = score(board, play)\n", + " is_bingo = ('(BINGO!)' if bingo(board, play) else '')\n", + " scores[p]+= points\n", + " board = make_play(board, play)\n", " if verbose:\n", - " display(HTML('Player {} with rack {} makes {}
for {} points; draws: {}; scores: {}'\n", - " .format(p, rack, play, points, racks[p], scores)),\n", + " display(HTML('Player {} with rack {} makes {}
for {} points {}; draws: {}; scores: {}'\n", + " .format(p, rack, play, points, is_bingo, racks[p], scores)),\n", " board)\n", " return board\n", "\n", @@ -5602,7 +8001,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 58, "metadata": { "button": false, "collapsed": false, @@ -5633,7 +8032,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 59, "metadata": { "button": false, "collapsed": false, @@ -5647,7 +8046,7 @@ { "data": { "text/html": [ - "Player 0 with rack NIEUTBT makes Play(start=144, dir=1, letters='BUTTE', rack='NI')
for 14 points; draws: NITDINC; scores: [14, 0]" + "Player 0 with rack EDOSOLB makes Play(start=144, dir=1, letters='BOODLE', rack='S')
for 18 points ; draws: STOYNRR; scores: [18, 0]" ], "text/plain": [ "" @@ -5659,95 +8058,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDW
TLDLDLTL
DWB3U1T1T1E1
TLDLDLTL
DWTLTLDW
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DLDWDWDL
TWTLTLTW
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDW
TLDLDLTL
DWB3O1O1D2L1E1
TLDLDLTL
DWTLTLDW
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DLDWDWDL
TWTLTLTW
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", - " ';',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -5763,26 +8387,26 @@ " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -5796,1032 +8420,28 @@ " '.',\n", " '.',\n", " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", + " '∴',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Player 1 with rack IMIOOEE makes Play(start=144, dir=17, letters='BIOME', rack='IOE')
for 18 points; draws: IOEP_OL; scores: [14, 18]" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDW
TLDLDLTL
DWB3U1T1T1E1
TLDLI1DLTL
DWTLO1TLDW
DLDLM3DLDL
TWTLE1TLTW
DLDLDLDL
DLDWDWDL
TWTLTLTW
" - ], - "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", " 'O',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Player 0 with rack NITDINC makes Play(start=63, dir=17, letters='INCIDENT', rack='')
for 48 points; draws: RRAXDFA; scores: [62, 18]" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLI1DL
TWTLDWN1TW
DLDLDLC3DL
DWTLTLI1DW
TLDLDLD2TL
DWB3U1T1T1E1
TLDLI1DLN1TL
DWTLO1TLT1DW
DLDLM3DLDL
TWTLE1TLTW
DLDLDLDL
DLDWDWDL
TWTLTLTW
" - ], - "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", + " 'O',\n", " 'D',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Player 1 with rack IOEP_OL makes Play(start=212, dir=1, letters='EOLOPIlE', rack='')
for 80 points; draws: OFUADSE; scores: [62, 98]" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLI1DL
TWTLDWN1TW
DLDLDLC3DL
DWTLTLI1DW
TLDLDLD2TL
DWB3U1T1T1E1
TLDLI1DLN1TL
DWTLO1TLT1DW
DLDLM3DLDL
TWTLE1O1L1O1P3I1lE1
DLDLDLDL
DLDWDWDL
TWTLTLTW
" - ], - "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", " 'L',\n", - " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", " 'E',\n", - " '#',\n", - " '#',\n", " '.',\n", - " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", " '.',\n", " '.',\n", " ':',\n", @@ -6833,60 +8453,128 @@ " ':',\n", " '.',\n", " '.',\n", - " ':',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '∴',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", + " ':',\n", " '.',\n", + " ':',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '=',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -6895,7 +8583,7 @@ { "data": { "text/html": [ - "Player 0 with rack RRAXDFA makes Play(start=230, dir=1, letters='FAX', rack='RRDA')
for 45 points; draws: RRDACGA; scores: [107, 98]" + "Player 1 with rack IUSI_IT makes Play(start=146, dir=17, letters='OUISTItI', rack='')
for 53 points (BINGO!); draws: OHAKAQL; scores: [18, 53]" ], "text/plain": [ "" @@ -6907,95 +8595,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLI1DL
TWTLDWN1TW
DLDLDLC3DL
DWTLTLI1DW
TLDLDLD2TL
DWB3U1T1T1E1
TLDLI1DLN1TL
DWTLO1TLT1DW
DLDLM3DLDL
TWTLE1O1L1O1P3I1lE1
DLDLF4A1X8DL
DLDWDWDL
TWTLTLTW
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDW
TLDLDLTL
DWB3O1O1D2L1E1
TLDLU1DLTL
DWTLI1DW
DLDLDLS1DL
TWTLDWT1TLTW
DLDLI1DLDL
DLDWtDL
TWTLTLI1TW
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", - " 'N',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -7007,30 +8920,30 @@ " ':',\n", " '.',\n", " '.',\n", - " 'C',\n", + " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " 'I',\n", " '.',\n", - " '-',\n", " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '=',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -7041,308 +8954,30 @@ " '.',\n", " '.',\n", " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '∴',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", " 'O',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'E',\n", " 'O',\n", + " 'D',\n", " 'L',\n", - " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", " 'E',\n", - " '#',\n", - " '#',\n", " '.',\n", - " ':',\n", " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Player 1 with rack OFUADSE makes Play(start=180, dir=1, letters='FETUS', rack='OAD')
for 32 points; draws: OADTYTI; scores: [107, 130]" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLI1DL
TWTLDWN1TW
DLDLDLC3DL
DWTLTLI1DW
TLDLDLD2TL
DWB3U1T1T1E1
TLDLI1DLN1TL
DWTLO1F4E1T1U1S1
DLDLM3DLDL
TWTLE1O1L1O1P3I1lE1
DLDLF4A1X8DL
DLDWDWDL
TWTLTLTW
" - ], - "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -7351,166 +8986,132 @@ " '.',\n", " '.',\n", " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", " ':',\n", " '.',\n", " '.',\n", + " '.',\n", + " '∴',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'I',\n", " '.',\n", " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", + " ':',\n", " 'S',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", " '.',\n", - " ':',\n", - " 'M',\n", - " ':',\n", + " '.',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", + " 'T',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", - " ';',\n", " '.',\n", " '.',\n", " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", - " 'P',\n", " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", " ':',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '∴',\n", + " 'I',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -7519,7 +9120,7 @@ { "data": { "text/html": [ - "Player 0 with rack RRDACGA makes Play(start=112, dir=1, letters='CAIRD', rack='RGA')
for 28 points; draws: RGAEESA; scores: [135, 130]" + "Player 0 with rack STOYNRR makes Play(start=264, dir=1, letters='YIRR', rack='STON')
for 45 points ; draws: STONONE; scores: [63, 53]" ], "text/plain": [ "" @@ -7531,95 +9132,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLI1DL
TWTLDWN1TW
DLDLDLC3DL
DWTLC3A1I1R1D2
TLDLDLD2TL
DWB3U1T1T1E1
TLDLI1DLN1TL
DWTLO1F4E1T1U1S1
DLDLM3DLDL
TWTLE1O1L1O1P3I1lE1
DLDLF4A1X8DL
DLDWDWDL
TWTLTLTW
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDW
TLDLDLTL
DWB3O1O1D2L1E1
TLDLU1DLTL
DWTLI1DW
DLDLDLS1DL
TWTLDWT1TLTW
DLDLI1DLDL
DLDWtDL
TWTLY4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", - " 'N',\n", " '.',\n", " '.',\n", " '=',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -7631,30 +9457,30 @@ " ':',\n", " '.',\n", " '.',\n", - " 'C',\n", + " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", + " '∴',\n", " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -7665,476 +9491,164 @@ " '.',\n", " '.',\n", " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '∴',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", " 'E',\n", " '.',\n", " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'I',\n", " '.',\n", " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", + " ':',\n", " 'S',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '.',\n", - " ':',\n", - " 'M',\n", - " ':',\n", + " '█',\n", + " '█',\n", + " '≡',\n", " '.',\n", " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Player 1 with rack OADTYTI makes Play(start=248, dir=1, letters='TOADY', rack='TI')
for 38 points; draws: TIROSIA; scores: [135, 168]" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
TWTLTLTW
DLDWDWDL
DLDLDLI1DL
TWTLDWN1TW
DLDLDLC3DL
DWTLC3A1I1R1D2
TLDLDLD2TL
DWB3U1T1T1E1
TLDLI1DLN1TL
DWTLO1F4E1T1U1S1
DLDLM3DLDL
TWTLE1O1L1O1P3I1lE1
DLDLF4A1X8DL
DLDWT1O1A1D2Y4
TWTLTLTW
" - ], - "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", " 'T',\n", - " 'O',\n", - " 'A',\n", - " 'D',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", " 'Y',\n", - " '.',\n", - " '#',\n", - " '#',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -8143,7 +9657,7 @@ { "data": { "text/html": [ - "Player 0 with rack RGAEESA makes Play(start=49, dir=17, letters='GREASE', rack='A')
for 36 points; draws: AERGQPG; scores: [171, 168]" + "Player 1 with rack OHAKAQL makes Play(start=212, dir=1, letters='LOTAH', rack='KAQ')
for 32 points ; draws: KAQDEWU; scores: [63, 85]" ], "text/plain": [ "" @@ -8155,95 +9669,320 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDLG2
DLDLDLI1DLR1
TWTLDWN1E1
DLDLDLC3DLA1
DWTLC3A1I1R1D2S1
TLDLDLD2E1
DWB3U1T1T1E1
TLDLI1DLN1TL
DWTLO1F4E1T1U1S1
DLDLM3DLDL
TWTLE1O1L1O1P3I1lE1
DLDLF4A1X8DL
DLDWT1O1A1D2Y4
TWTLTLTW
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLDW
TLDLDLTL
DWB3O1O1D2L1E1
TLDLU1DLTL
DWTLI1DW
DLDLDLS1DL
TWTLL1O1T1A1H4TW
DLDLI1DLDL
DLDWtDL
TWTLY4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'G',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " 'R',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " 'N',\n", + " '=',\n", " '.',\n", " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", @@ -8255,30 +9994,30 @@ " ':',\n", " '.',\n", " '.',\n", - " 'C',\n", + " '.',\n", " ':',\n", " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", " '.',\n", - " '-',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", @@ -8289,164 +10028,164 @@ " '.',\n", " '.',\n", " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '∴',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", " 'E',\n", " '.',\n", " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'I',\n", " '.',\n", " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", " '.',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", + " ':',\n", " 'S',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", " '.',\n", - " ':',\n", - " 'M',\n", - " ':',\n", + " '.',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", " 'L',\n", " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", " 'T',\n", - " 'O',\n", " 'A',\n", - " 'D',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", " 'Y',\n", - " '.',\n", - " '#',\n", - " '#',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -8455,7 +10194,7 @@ { "data": { "text/html": [ - "Player 1 with rack TIROSIA makes Play(start=267, dir=1, letters='SOAR', rack='TII')
for 26 points; draws: TIIEANA; scores: [171, 194]" + "Player 0 with rack STONONE makes Play(start=116, dir=17, letters='ONSET', rack='ON')
for 30 points ; draws: ONROBEM; scores: [93, 85]" ], "text/plain": [ "" @@ -8467,298 +10206,523 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDLG2
DLDLDLI1DLR1
TWTLDWN1E1
DLDLDLC3DLA1
DWTLC3A1I1R1D2S1
TLDLDLD2E1
DWB3U1T1T1E1
TLDLI1DLN1TL
DWTLO1F4E1T1U1S1
DLDLM3DLDL
TWTLE1O1L1O1P3I1lE1
DLDLF4A1X8DL
DLDWT1O1A1D2Y4
TWTLTLS1O1A1R1
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLO1
TLDLDLN1TL
DWB3O1O1D2L1E1S1
TLDLU1DLE1TL
DWTLI1T1
DLDLDLS1DL
TWTLL1O1T1A1H4TW
DLDLI1DLDL
DLDWtDL
TWTLY4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'G',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " 'R',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'O',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", " '.',\n", " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", + " '∴',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", " 'E',\n", + " 'S',\n", " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " '∴',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'I',\n", " '.',\n", " '.',\n", - " ':',\n", - " 'N',\n", " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", " 'T',\n", - " 'U',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", " 'S',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", " '.',\n", - " ':',\n", - " 'M',\n", - " ':',\n", + " '.',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", " 'L',\n", " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", " 'T',\n", - " 'O',\n", " 'A',\n", - " 'D',\n", - " 'Y',\n", + " 'H',\n", " '.',\n", - " '#',\n", - " '#',\n", " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", " '.',\n", - " ';',\n", + " 't',\n", " '.',\n", " '.',\n", - " 'S',\n", - " 'O',\n", - " 'A',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -8767,7 +10731,7 @@ { "data": { "text/html": [ - "Player 0 with rack AERGQPG makes Play(start=262, dir=1, letters='GAPE', rack='RQG')
for 21 points; draws: RQGENYJ; scores: [192, 194]" + "Player 1 with rack KAQDEWU makes Play(start=168, dir=17, letters='DAWK', rack='QEU')
for 57 points ; draws: QEURLVI; scores: [93, 142]" ], "text/plain": [ "" @@ -8779,997 +10743,456 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWDLG2
DLDLDLI1DLR1
TWTLDWN1E1
DLDLDLC3DLA1
DWTLC3A1I1R1D2S1
TLDLDLD2E1
DWB3U1T1T1E1
TLDLI1DLN1TL
DWTLO1F4E1T1U1S1
DLDLM3DLDL
TWTLE1O1L1O1P3I1lE1
DLDLF4A1X8DL
DLDWT1O1A1D2Y4
TWG2A1P3E1S1O1A1R1
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDL
TWTLDWTLTW
DLDLDLDL
DWTLTLO1
TLDLDLN1TL
DWB3O1O1D2L1E1S1
TLDLU1DLE1D2
DWTLI1T1A1
DLDLDLS1DLW4
TWTLL1O1T1A1H4K5
DLDLI1DLDL
DLDWtDL
TWTLY4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'G',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " 'R',\n", - " '#',\n", - " '#',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", " '.',\n", " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'O',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", " '.',\n", " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", + " '∴',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", " 'E',\n", + " 'S',\n", " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'I',\n", " '.',\n", " '.',\n", - " ':',\n", - " 'N',\n", " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", " 'T',\n", - " 'U',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", " 'S',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", " '.',\n", " ':',\n", " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ':',\n", - " 'M',\n", - " ':',\n", + " '∴',\n", " '.',\n", " '.',\n", " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", " 'L',\n", " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", " 'T',\n", - " 'O',\n", " 'A',\n", - " 'D',\n", - " 'Y',\n", + " 'H',\n", " '.',\n", - " '#',\n", - " '#',\n", " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " 'G',\n", - " 'A',\n", - " 'P',\n", - " 'E',\n", - " '.',\n", - " 'S',\n", - " 'O',\n", - " 'A',\n", - " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Player 1 with rack TIIEANA makes Play(start=176, dir=17, letters='TAENIA', rack='I')
for 24 points; draws: IIKRZDH; scores: [192, 218]" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
TWTLTLTW
DLDWDWDLG2
DLDLDLI1DLR1
TWTLDWN1E1
DLDLDLC3DLA1
DWTLC3A1I1R1D2S1
TLDLDLD2E1
DWB3U1T1T1E1
TLDLI1DLN1TL
DWT1O1F4E1T1U1S1
DLA1DLM3DLDL
TWTLE1E1O1L1O1P3I1lE1
DLDLN1F4A1X8DL
DLI1T1O1A1D2Y4
TWA1G2A1P3E1S1O1A1R1
" - ], - "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'G',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " 'R',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'A',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " 'E',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'T',\n", - " 'O',\n", - " 'A',\n", - " 'D',\n", - " 'Y',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " 'A',\n", - " 'G',\n", - " 'A',\n", - " 'P',\n", - " 'E',\n", - " '.',\n", - " 'S',\n", - " 'O',\n", - " 'A',\n", - " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Player 0 with rack RQGENYJ makes Play(start=205, dir=1, letters='GYRENE', rack='QJ')
for 36 points; draws: QJLLEHE; scores: [228, 218]" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
TWTLTLTW
DLDWDWDLG2
DLDLDLI1DLR1
TWTLDWN1E1
DLDLDLC3DLA1
DWTLC3A1I1R1D2S1
TLDLDLD2E1
DWB3U1T1T1E1
TLDLI1DLN1TL
DWT1O1F4E1T1U1S1
DLA1DLM3DLDL
G2Y4R1E1N1E1E1O1L1O1P3I1lE1
DLDLN1F4A1X8DL
DLI1T1O1A1D2Y4
TWA1G2A1P3E1S1O1A1R1
" - ], - "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'G',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " 'R',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'A',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'G',\n", - " 'Y',\n", - " 'R',\n", - " 'E',\n", - " 'N',\n", - " 'E',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'T',\n", - " 'O',\n", - " 'A',\n", - " 'D',\n", - " 'Y',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " 'A',\n", - " 'G',\n", - " 'A',\n", - " 'P',\n", - " 'E',\n", - " '.',\n", - " 'S',\n", - " 'O',\n", - " 'A',\n", - " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Player 1 with rack IIKRZDH makes Play(start=45, dir=17, letters='KHI', rack='IRZD')
for 25 points; draws: IRZDIIO; scores: [228, 243]" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
TWTLTLTW
DLDWDWK5DLG2
DLDLH4I1DLR1
TWTLDWI1N1E1
DLDLDLC3DLA1
DWTLC3A1I1R1D2S1
TLDLDLD2E1
DWB3U1T1T1E1
TLDLI1DLN1TL
DWT1O1F4E1T1U1S1
DLA1DLM3DLDL
G2Y4R1E1N1E1E1O1L1O1P3I1lE1
DLDLN1F4A1X8DL
DLI1T1O1A1D2Y4
TWA1G2A1P3E1S1O1A1R1
" - ], - "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", " 'K',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'G',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", @@ -9779,234 +11202,64 @@ " '.',\n", " '.',\n", " '.',\n", - " '.',\n", - " 'H',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " 'R',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'A',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'G',\n", - " 'Y',\n", - " 'R',\n", - " 'E',\n", - " 'N',\n", - " 'E',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", " ':',\n", " '.',\n", " '.',\n", " ':',\n", - " 'N',\n", " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'T',\n", - " 'O',\n", - " 'A',\n", - " 'D',\n", - " 'Y',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", " '.',\n", " '=',\n", " '.',\n", - " 'A',\n", - " 'G',\n", - " 'A',\n", - " 'P',\n", - " 'E',\n", " '.',\n", - " 'S',\n", - " 'O',\n", - " 'A',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -10015,7 +11268,7 @@ { "data": { "text/html": [ - "Player 0 with rack QJLLEHE makes Play(start=138, dir=17, letters='JELLY', rack='QHE')
for 30 points; draws: QHEBMNO; scores: [258, 243]" + "Player 0 with rack ONROBEM makes Play(start=66, dir=17, letters='BROMO', rack='NE')
for 41 points ; draws: NEETN_A; scores: [134, 142]" ], "text/plain": [ "" @@ -10027,61 +11280,456 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWK5DLG2
DLDLH4I1DLR1
TWTLDWI1N1E1
DLDLDLC3DLA1
DWTLC3A1I1R1D2S1
TLDLDLD2E1
J8DWB3U1T1T1E1
TLE1DLI1DLN1TL
L1T1O1F4E1T1U1S1
L1DLA1DLM3DLDL
G2Y4R1E1N1E1E1O1L1O1P3I1lE1
DLDLN1F4A1X8DL
DLI1T1O1A1D2Y4
TWA1G2A1P3E1S1O1A1R1
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDLB3
TWTLDWTLR1
DLDLDLDLO1
DWTLTLO1M3
TLDLDLN1O1
DWB3O1O1D2L1E1S1
TLDLU1DLE1D2
DWTLI1T1A1
DLDLDLS1DLW4
TWTLL1O1T1A1H4K5
DLDLI1DLDL
DLDWtDL
TWTLY4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", " 'K',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'G',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", @@ -10091,234 +11739,64 @@ " '.',\n", " '.',\n", " '.',\n", - " '.',\n", - " 'H',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " 'R',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'J',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'L',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'L',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'A',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'G',\n", - " 'Y',\n", - " 'R',\n", - " 'E',\n", - " 'N',\n", - " 'E',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", " ':',\n", " '.',\n", " '.',\n", " ':',\n", - " 'N',\n", " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'T',\n", - " 'O',\n", - " 'A',\n", - " 'D',\n", - " 'Y',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", " '.',\n", " '=',\n", " '.',\n", - " 'A',\n", - " 'G',\n", - " 'A',\n", - " 'P',\n", - " 'E',\n", " '.',\n", - " 'S',\n", - " 'O',\n", - " 'A',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -10327,7 +11805,7 @@ { "data": { "text/html": [ - "Player 1 with rack IRZDIIO makes Play(start=123, dir=17, letters='IODIZER', rack='I')
for 34 points; draws: IVUTLON; scores: [258, 277]" + "Player 1 with rack QEURLVI makes Play(start=80, dir=17, letters='QUELL', rack='RVI')
for 34 points ; draws: RVIDTHA; scores: [134, 176]" ], "text/plain": [ "" @@ -10339,61 +11817,456 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWK5DLG2
DLDLH4I1DLR1
TWTLDWI1N1E1
DLDLDLC3DLA1
DWTLC3A1I1R1D2S1
TLI1DLDLD2E1
J8O1B3U1T1T1E1
TLE1D2DLI1DLN1TL
L1I1T1O1F4E1T1U1S1
L1DLZ10A1DLM3DLDL
G2Y4R1E1N1E1E1O1L1O1P3I1lE1
DLR1DLN1F4A1X8DL
DLI1T1O1A1D2Y4
TWA1G2A1P3E1S1O1A1R1
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDLB3
TWTLDWQ10R1
DLDLDLU1DLO1
DWTLTLE1O1M3
TLDLDLL1N1O1
DWB3O1O1D2L1E1S1
TLDLU1DLE1D2
DWTLI1T1A1
DLDLDLS1DLW4
TWTLL1O1T1A1H4K5
DLDLI1DLDL
DLDWtDL
TWTLY4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", " 'K',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'G',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", @@ -10403,234 +12276,64 @@ " '.',\n", " '.',\n", " '.',\n", - " '.',\n", - " 'H',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " 'R',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", " 'I',\n", " ':',\n", " '.',\n", " '.',\n", + " ':',\n", " '.',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'J',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " 'E',\n", - " '.',\n", - " 'D',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'L',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'L',\n", - " ':',\n", - " 'Z',\n", - " '.',\n", - " 'A',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'G',\n", - " 'Y',\n", - " 'R',\n", - " 'E',\n", - " 'N',\n", - " 'E',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'R',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'T',\n", - " 'O',\n", - " 'A',\n", - " 'D',\n", - " 'Y',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", - " 'A',\n", - " 'G',\n", - " 'A',\n", - " 'P',\n", - " 'E',\n", " '.',\n", - " 'S',\n", - " 'O',\n", - " 'A',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -10639,7 +12342,7 @@ { "data": { "text/html": [ - "Player 0 with rack QHEBMNO makes Play(start=154, dir=17, letters='HE', rack='QBMNO')
for 28 points; draws: QBMNOVS; scores: [286, 277]" + "Player 0 with rack NEETN_A makes Play(start=190, dir=1, letters='NEATNEsS', rack='')
for 47 points (BINGO!); draws: VEXEPIL; scores: [181, 176]" ], "text/plain": [ "" @@ -10651,61 +12354,456 @@ { "data": { "text/html": [ - "
TWTLTLTW
DLDWDWK5DLG2
DLDLH4I1DLR1
TWTLDWI1N1E1
DLDLDLC3DLA1
DWTLC3A1I1R1D2S1
TLI1DLDLD2E1
J8O1B3U1T1T1E1
H4E1D2DLI1DLN1TL
E1L1I1T1O1F4E1T1U1S1
L1DLZ10A1DLM3DLDL
G2Y4R1E1N1E1E1O1L1O1P3I1lE1
DLR1DLN1F4A1X8DL
DLI1T1O1A1D2Y4
TWA1G2A1P3E1S1O1A1R1
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDLB3
TWTLDWQ10R1
DLDLDLU1DLO1
DWTLTLE1O1M3
TLDLDLL1N1O1
DWB3O1O1D2L1E1S1
TLDLU1DLE1D2
DWTLI1T1A1
N1E1A1T1N1E1sS1DLW4
TWTLL1O1T1A1H4K5
DLDLI1DLDL
DLDWtDL
TWTLY4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", - " ';',\n", + " '∴',\n", " '.',\n", " '.',\n", - " '=',\n", + " '≡',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '-',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", " 'K',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'G',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", @@ -10715,234 +12813,64 @@ " '.',\n", " '.',\n", " '.',\n", - " '.',\n", - " 'H',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " 'R',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", " 'I',\n", " ':',\n", " '.',\n", " '.',\n", + " ':',\n", " '.',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'J',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'H',\n", - " 'E',\n", - " '.',\n", - " 'D',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " 'E',\n", - " 'L',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'L',\n", - " ':',\n", - " 'Z',\n", - " '.',\n", - " 'A',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'G',\n", - " 'Y',\n", - " 'R',\n", - " 'E',\n", - " 'N',\n", - " 'E',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'R',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'T',\n", - " 'O',\n", - " 'A',\n", - " 'D',\n", - " 'Y',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", - " 'A',\n", - " 'G',\n", - " 'A',\n", - " 'P',\n", - " 'E',\n", " '.',\n", - " 'S',\n", - " 'O',\n", - " 'A',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -10951,7 +12879,7 @@ { "data": { "text/html": [ - "Player 1 with rack IVUTLON makes Play(start=22, dir=17, letters='VOLUTIN', rack='')
for 50 points; draws: _UWEARW; scores: [286, 327]" + "Player 1 with rack RVIDTHA makes Play(start=174, dir=17, letters='DEARTH', rack='VI')
for 36 points ; draws: VINESTI; scores: [181, 212]" ], "text/plain": [ "" @@ -10963,298 +12891,2671 @@ { "data": { "text/html": [ - "
TWV4TLTLTW
DLO1DWDWK5DLG2
DLL1H4I1DLR1
TWTLU1DWI1N1E1
DLT1DLDLC3DLA1
DWI1TLC3A1I1R1D2S1
TLI1N1DLD2E1
J8O1B3U1T1T1E1
H4E1D2DLI1DLN1TL
E1L1I1T1O1F4E1T1U1S1
L1DLZ10A1DLM3DLDL
G2Y4R1E1N1E1E1O1L1O1P3I1lE1
DLR1DLN1F4A1X8DL
DLI1T1O1A1D2Y4
TWA1G2A1P3E1S1O1A1R1
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDLB3
TWTLDWQ10R1
DLDLDLU1DLO1
DWTLTLE1O1M3
TLDLDLL1N1O1
DWB3O1O1D2L1E1S1
TLDLU1DLE1D2
DWD2TLI1T1A1
N1E1A1T1N1E1sS1DLW4
TWA1L1O1T1A1H4K5
DLR1DLI1DLDL
DLT1DWtDL
H4TLY4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", " '=',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'R',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Player 0 with rack VEXEPIL makes Play(start=230, dir=1, letters='PIXIE', rack='VEL')
for 48 points ; draws: VELUCUI; scores: [229, 212]" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
TWTLTLTW
DLDWDWDL
DLDLDLDLB3
TWTLDWQ10R1
DLDLDLU1DLO1
DWTLTLE1O1M3
TLDLDLL1N1O1
DWB3O1O1D2L1E1S1
TLDLU1DLE1D2
DWD2TLI1T1A1
N1E1A1T1N1E1sS1DLW4
TWA1L1O1T1A1H4K5
DLR1DLP3I1X8I1E1DL
DLT1DWtDL
H4TLY4I1R1R1
" + ], + "text/plain": [ + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'R',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Player 1 with rack VINESTI makes Play(start=165, dir=1, letters='SNED', rack='VIETI')
for 22 points ; draws: VIETIAA; scores: [229, 234]" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
TWTLTLTW
DLDWDWDL
DLDLDLDLB3
TWTLDWQ10R1
DLDLDLU1DLO1
DWTLTLE1O1M3
TLDLDLL1N1O1
DWB3O1O1D2L1E1S1
TLDLU1DLS1N1E1D2
DWD2TLI1T1A1
N1E1A1T1N1E1sS1DLW4
TWA1L1O1T1A1H4K5
DLR1DLP3I1X8I1E1DL
DLT1DWtDL
H4TLY4I1R1R1
" + ], + "text/plain": [ + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'R',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Player 0 with rack VELUCUI makes Play(start=205, dir=1, letters='UVEA', rack='LCUI')
for 23 points ; draws: LCUIEIF; scores: [252, 234]" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
TWTLTLTW
DLDWDWDL
DLDLDLDLB3
TWTLDWQ10R1
DLDLDLU1DLO1
DWTLTLE1O1M3
TLDLDLL1N1O1
DWB3O1O1D2L1E1S1
TLDLU1DLS1N1E1D2
DWD2TLI1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1L1O1T1A1H4K5
DLR1DLP3I1X8I1E1DL
DLT1DWtDL
H4TLY4I1R1R1
" + ], + "text/plain": [ + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'R',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Player 1 with rack VIETIAA makes Play(start=159, dir=17, letters='VITIATE', rack='A')
for 24 points ; draws: AZEOIMG; scores: [252, 258]" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
TWTLTLTW
DLDWDWDL
DLDLDLDLB3
TWTLDWQ10R1
DLDLDLU1DLO1
DWTLTLE1O1M3
TLDLDLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4U1DLS1N1E1D2
DWD2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1tDL
H4E1TLY4I1R1R1
" + ], + "text/plain": [ + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", " 'V',\n", " '.',\n", - " ';',\n", " '.',\n", - " ';',\n", " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", " '.',\n", " '=',\n", " '.',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", " 'O',\n", - " '-',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", " '.',\n", " '.',\n", - " '.',\n", - " '-',\n", " 'K',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", - " 'G',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'L',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'H',\n", - " 'I',\n", - " '.',\n", - " ':',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " 'U',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", " ':',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", " '.',\n", " '.',\n", - " 'I',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'J',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'H',\n", - " 'E',\n", - " '.',\n", - " 'D',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " 'E',\n", - " 'L',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'L',\n", - " ':',\n", - " 'Z',\n", - " '.',\n", - " 'A',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'G',\n", - " 'Y',\n", - " 'R',\n", - " 'E',\n", - " 'N',\n", - " 'E',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", " 'P',\n", " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'R',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", + " ':',\n", + " 'T',\n", " '.',\n", " 'T',\n", - " 'O',\n", - " 'A',\n", - " 'D',\n", - " 'Y',\n", - " '.',\n", - " '#',\n", - " '#',\n", " '.',\n", " '.',\n", " '.',\n", - " '=',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", " '.',\n", - " 'A',\n", - " 'G',\n", - " 'A',\n", - " 'P',\n", " 'E',\n", + " '∴',\n", " '.',\n", - " 'S',\n", - " 'O',\n", - " 'A',\n", + " 'Y',\n", + " 'I',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -11263,7 +15564,7 @@ { "data": { "text/html": [ - "Player 0 with rack QBMNOVS makes Play(start=239, dir=1, letters='MOBS', rack='QNV')
for 29 points; draws: QNV; scores: [315, 327]" + "Player 0 with rack LCUIEIF makes Play(start=245, dir=17, letters='IF', rack='LCUEI')
for 28 points ; draws: LCUEIGD; scores: [280, 258]" ], "text/plain": [ "" @@ -11275,298 +15576,523 @@ { "data": { "text/html": [ - "
TWV4TLTLTW
DLO1DWDWK5DLG2
DLL1H4I1DLR1
TWTLU1DWI1N1E1
DLT1DLDLC3DLA1
DWI1TLC3A1I1R1D2S1
TLI1N1DLD2E1
J8O1B3U1T1T1E1
H4E1D2DLI1DLN1TL
E1L1I1T1O1F4E1T1U1S1
L1DLZ10A1DLM3DLDL
G2Y4R1E1N1E1E1O1L1O1P3I1lE1
DLR1DLN1F4A1X8DL
M3O1B3S1I1T1O1A1D2Y4
TWA1G2A1P3E1S1O1A1R1
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDLB3
TWTLDWQ10R1
DLDLDLU1DLO1
DWTLTLE1O1M3
TLDLDLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4U1DLS1N1E1D2
DWD2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1I1tDL
H4E1F4Y4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '=',\n", " '.',\n", " '.',\n", " '.',\n", " '=',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", " 'V',\n", " '.',\n", - " ';',\n", " '.',\n", - " ';',\n", " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", " '.',\n", " '=',\n", " '.',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", " 'O',\n", - " '-',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", " '.',\n", " '.',\n", - " '.',\n", - " '-',\n", " 'K',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", - " 'G',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'L',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'H',\n", - " 'I',\n", - " '.',\n", - " ':',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " 'U',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", " ':',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", " '.',\n", " '.',\n", - " 'I',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'J',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'H',\n", - " 'E',\n", - " '.',\n", - " 'D',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " 'E',\n", - " 'L',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'L',\n", - " ':',\n", - " 'Z',\n", - " '.',\n", - " 'A',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'G',\n", - " 'Y',\n", - " 'R',\n", - " 'E',\n", - " 'N',\n", - " 'E',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", " 'P',\n", " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'R',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " 'T',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " 't',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", - " '#',\n", - " '#',\n", - " 'M',\n", - " 'O',\n", - " 'B',\n", - " 'S',\n", " '.',\n", - " 'I',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " 'T',\n", - " 'O',\n", - " 'A',\n", - " 'D',\n", - " 'Y',\n", + " 'H',\n", " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " 'A',\n", - " 'G',\n", - " 'A',\n", - " 'P',\n", " 'E',\n", + " 'F',\n", " '.',\n", - " 'S',\n", - " 'O',\n", - " 'A',\n", + " 'Y',\n", + " 'I',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -11575,7 +16101,7 @@ { "data": { "text/html": [ - "Player 1 with rack _UWEARW makes Play(start=21, dir=1, letters='AVoWER', rack='UW')
for 63 points; draws: UW; scores: [315, 390]" + "Player 1 with rack AZEOIMG makes Play(start=76, dir=17, letters='GAZEBO', rack='IM')
for 36 points ; draws: IMGRORY; scores: [280, 294]" ], "text/plain": [ "" @@ -11587,298 +16113,523 @@ { "data": { "text/html": [ - "
A1V4oW4E1R1TW
DLO1DWDWK5DLG2
DLL1H4I1DLR1
TWTLU1DWI1N1E1
DLT1DLDLC3DLA1
DWI1TLC3A1I1R1D2S1
TLI1N1DLD2E1
J8O1B3U1T1T1E1
H4E1D2DLI1DLN1TL
E1L1I1T1O1F4E1T1U1S1
L1DLZ10A1DLM3DLDL
G2Y4R1E1N1E1E1O1L1O1P3I1lE1
DLR1DLN1F4A1X8DL
M3O1B3S1I1T1O1A1D2Y4
TWA1G2A1P3E1S1O1A1R1
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDLB3
TWTLG2Q10R1
DLDLA1DLU1DLO1
DWTLZ10TLE1O1M3
TLDLE1DLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4O1U1DLS1N1E1D2
DWD2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1I1tDL
H4E1F4Y4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " 'A',\n", - " 'V',\n", - " 'o',\n", - " 'W',\n", - " 'E',\n", - " 'R',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '=',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", - " 'O',\n", - " '-',\n", " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " 'K',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'G',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'L',\n", " '.',\n", " '.',\n", " '.',\n", + " 'Q',\n", " '.',\n", " '.',\n", - " 'H',\n", - " 'I',\n", - " '.',\n", - " ':',\n", " 'R',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'A',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", - " 'U',\n", " '.',\n", + " '∴',\n", " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'J',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'H',\n", - " 'E',\n", - " '.',\n", - " 'D',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " 'E',\n", - " 'L',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'L',\n", - " ':',\n", " 'Z',\n", " '.',\n", - " 'A',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'G',\n", - " 'Y',\n", - " 'R',\n", - " 'E',\n", - " 'N',\n", - " 'E',\n", + " '∴',\n", " '.',\n", " 'E',\n", + " '.',\n", " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " '.',\n", + " ':',\n", " 'L',\n", - " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", " '.',\n", - " ':',\n", - " '.',\n", - " 'R',\n", - " ':',\n", " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", " '.',\n", " '.',\n", " ':',\n", + " 'V',\n", " '.',\n", - " '#',\n", - " '#',\n", - " 'M',\n", " 'O',\n", - " 'B',\n", + " '.',\n", + " 'U',\n", + " ':',\n", " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", " '.',\n", " 'I',\n", " '.',\n", " '.',\n", " '.',\n", " 'T',\n", - " 'O',\n", " 'A',\n", - " 'D',\n", - " 'Y',\n", - " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " 'A',\n", - " 'G',\n", - " 'A',\n", - " 'P',\n", + " 'N',\n", " 'E',\n", - " '.',\n", - " 'S',\n", - " 'O',\n", " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " ':',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " 'T',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " 'E',\n", + " 'F',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -11887,7 +16638,7 @@ { "data": { "text/html": [ - "Player 0 with rack QNV makes Play(start=39, dir=1, letters='ON', rack='QV')
for 6 points; draws: QV; scores: [321, 390]" + "Player 0 with rack LCUEIGD makes Play(start=110, dir=1, letters='ZIG', rack='LCUED')
for 17 points ; draws: LCUEDEA; scores: [297, 294]" ], "text/plain": [ "" @@ -11899,298 +16650,523 @@ { "data": { "text/html": [ - "
A1V4oW4E1R1TW
DLO1N1DWK5DLG2
DLL1H4I1DLR1
TWTLU1DWI1N1E1
DLT1DLDLC3DLA1
DWI1TLC3A1I1R1D2S1
TLI1N1DLD2E1
J8O1B3U1T1T1E1
H4E1D2DLI1DLN1TL
E1L1I1T1O1F4E1T1U1S1
L1DLZ10A1DLM3DLDL
G2Y4R1E1N1E1E1O1L1O1P3I1lE1
DLR1DLN1F4A1X8DL
M3O1B3S1I1T1O1A1D2Y4
TWA1G2A1P3E1S1O1A1R1
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDLB3
TWTLG2Q10R1
DLDLA1DLU1DLO1
DWTLZ10I1G2E1O1M3
TLDLE1DLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4O1U1DLS1N1E1D2
DWD2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1I1tDL
H4E1F4Y4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " 'A',\n", - " 'V',\n", - " 'o',\n", - " 'W',\n", - " 'E',\n", - " 'R',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '=',\n", " '.',\n", " '.',\n", " ':',\n", " '.',\n", - " 'O',\n", - " 'N',\n", " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " 'K',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'G',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'L',\n", " '.',\n", " '.',\n", " '.',\n", + " 'Q',\n", " '.',\n", " '.',\n", - " 'H',\n", - " 'I',\n", - " '.',\n", - " ':',\n", " 'R',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'A',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", - " 'U',\n", " '.',\n", + " '∴',\n", " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'J',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'H',\n", - " 'E',\n", - " '.',\n", - " 'D',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " 'E',\n", - " 'L',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'L',\n", - " ':',\n", " 'Z',\n", - " '.',\n", - " 'A',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'G',\n", - " 'Y',\n", - " 'R',\n", - " 'E',\n", - " 'N',\n", - " 'E',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", - " 'P',\n", " 'I',\n", - " 'l',\n", + " 'G',\n", + " '.',\n", " 'E',\n", - " '#',\n", - " '#',\n", " '.',\n", - " ':',\n", - " '.',\n", - " 'R',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'M',\n", " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", " 'S',\n", " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'V',\n", + " '.',\n", + " 'O',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'I',\n", " '.',\n", " '.',\n", " '.',\n", " 'T',\n", - " 'O',\n", " 'A',\n", - " 'D',\n", - " 'Y',\n", - " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " 'A',\n", - " 'G',\n", - " 'A',\n", - " 'P',\n", + " 'N',\n", " 'E',\n", - " '.',\n", - " 'S',\n", - " 'O',\n", " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " ':',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " 'T',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " 'E',\n", + " 'F',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -12199,7 +17175,7 @@ { "data": { "text/html": [ - "Player 1 with rack UW makes Play(start=38, dir=1, letters='WON', rack='U')
for 11 points; draws: U; scores: [321, 401]" + "Player 1 with rack IMGRORY makes Play(start=92, dir=1, letters='YAM', rack='IGROR')
for 22 points ; draws: IGRORNJ; scores: [297, 316]" ], "text/plain": [ "" @@ -12211,298 +17187,523 @@ { "data": { "text/html": [ - "
A1V4oW4E1R1TW
DLW4O1N1DWK5DLG2
DLL1H4I1DLR1
TWTLU1DWI1N1E1
DLT1DLDLC3DLA1
DWI1TLC3A1I1R1D2S1
TLI1N1DLD2E1
J8O1B3U1T1T1E1
H4E1D2DLI1DLN1TL
E1L1I1T1O1F4E1T1U1S1
L1DLZ10A1DLM3DLDL
G2Y4R1E1N1E1E1O1L1O1P3I1lE1
DLR1DLN1F4A1X8DL
M3O1B3S1I1T1O1A1D2Y4
TWA1G2A1P3E1S1O1A1R1
" + "
TWTLTLTW
DLDWDWDL
DLDLDLDLB3
TWTLG2Q10R1
DLY4A1M3U1DLO1
DWTLZ10I1G2E1O1M3
TLDLE1DLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4O1U1DLS1N1E1D2
DWD2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1I1tDL
H4E1F4Y4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " 'A',\n", - " 'V',\n", - " 'o',\n", - " 'W',\n", - " 'E',\n", - " 'R',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '=',\n", " '.',\n", " '.',\n", " ':',\n", - " 'W',\n", - " 'O',\n", - " 'N',\n", " '.',\n", " '.',\n", - " '.',\n", - " '-',\n", - " 'K',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'G',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'L',\n", " '.',\n", " '.',\n", " '.',\n", + " 'Q',\n", " '.',\n", " '.',\n", - " 'H',\n", - " 'I',\n", - " '.',\n", - " ':',\n", " 'R',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Y',\n", + " 'A',\n", + " 'M',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", " '=',\n", " '.',\n", " '.',\n", - " ';',\n", - " 'U',\n", " '.',\n", + " '∴',\n", " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'J',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'H',\n", - " 'E',\n", - " '.',\n", - " 'D',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " 'E',\n", - " 'L',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'L',\n", - " ':',\n", " 'Z',\n", - " '.',\n", - " 'A',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'G',\n", - " 'Y',\n", - " 'R',\n", - " 'E',\n", - " 'N',\n", - " 'E',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", - " 'P',\n", " 'I',\n", - " 'l',\n", + " 'G',\n", + " '.',\n", " 'E',\n", - " '#',\n", - " '#',\n", " '.',\n", - " ':',\n", - " '.',\n", - " 'R',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'M',\n", " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", " 'S',\n", " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'V',\n", + " '.',\n", + " 'O',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'I',\n", " '.',\n", " '.',\n", " '.',\n", " 'T',\n", - " 'O',\n", " 'A',\n", - " 'D',\n", - " 'Y',\n", - " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " 'A',\n", - " 'G',\n", - " 'A',\n", - " 'P',\n", + " 'N',\n", " 'E',\n", - " '.',\n", - " 'S',\n", - " 'O',\n", " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " ':',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " 'T',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " 'E',\n", + " 'F',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -12511,7 +17712,7 @@ { "data": { "text/html": [ - "Player 0 with rack QV makes Play(start=0, dir=1, letters='', rack='QV')
for 0 points; draws: QV; scores: [321, 401]" + "Player 0 with rack LCUEDEA makes Play(start=24, dir=17, letters='DECAY', rack='LUE')
for 18 points ; draws: LUETSAW; scores: [315, 316]" ], "text/plain": [ "" @@ -12523,298 +17724,523 @@ { "data": { "text/html": [ - "
A1V4oW4E1R1TW
DLW4O1N1DWK5DLG2
DLL1H4I1DLR1
TWTLU1DWI1N1E1
DLT1DLDLC3DLA1
DWI1TLC3A1I1R1D2S1
TLI1N1DLD2E1
J8O1B3U1T1T1E1
H4E1D2DLI1DLN1TL
E1L1I1T1O1F4E1T1U1S1
L1DLZ10A1DLM3DLDL
G2Y4R1E1N1E1E1O1L1O1P3I1lE1
DLR1DLN1F4A1X8DL
M3O1B3S1I1T1O1A1D2Y4
TWA1G2A1P3E1S1O1A1R1
" + "
TWD2TLTW
DLDWE1DWDL
DLDLC3DLDLB3
TWTLA1G2Q10R1
DLY4A1M3U1DLO1
DWTLZ10I1G2E1O1M3
TLDLE1DLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4O1U1DLS1N1E1D2
DWD2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1I1tDL
H4E1F4Y4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " 'A',\n", - " 'V',\n", - " 'o',\n", - " 'W',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '=',\n", " 'E',\n", - " 'R',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'W',\n", - " 'O',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " 'K',\n", - " '.',\n", " ':',\n", " '.',\n", - " 'G',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '█',\n", + " '█',\n", " '.',\n", " ':',\n", " '.',\n", " '.',\n", - " 'L',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'H',\n", - " 'I',\n", - " '.',\n", " ':',\n", - " 'R',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " 'U',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", " '.',\n", " 'C',\n", - " ':',\n", - " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", " '.',\n", " '.',\n", " '.',\n", " ':',\n", - " 'D',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'J',\n", - " '.',\n", - " 'O',\n", - " '.',\n", " '.',\n", " '.',\n", + " ':',\n", " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " 'A',\n", + " 'G',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Y',\n", + " 'A',\n", + " 'M',\n", + " '.',\n", + " '.',\n", " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'H',\n", - " 'E',\n", - " '.',\n", - " 'D',\n", " ':',\n", " '.',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " 'E',\n", - " 'L',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " 'T',\n", - " '.',\n", " 'O',\n", + " '█',\n", + " '█',\n", " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", + " '=',\n", " '.',\n", - " '#',\n", - " '#',\n", " '.',\n", - " 'L',\n", - " ':',\n", + " '.',\n", + " '∴',\n", + " '.',\n", " 'Z',\n", - " '.',\n", - " 'A',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'G',\n", - " 'Y',\n", - " 'R',\n", - " 'E',\n", - " 'N',\n", - " 'E',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", - " 'P',\n", " 'I',\n", - " 'l',\n", + " 'G',\n", + " '.',\n", " 'E',\n", - " '#',\n", - " '#',\n", " '.',\n", - " ':',\n", - " '.',\n", - " 'R',\n", - " ':',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'F',\n", - " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'M',\n", " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", " 'S',\n", " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'V',\n", + " '.',\n", + " 'O',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'I',\n", " '.',\n", " '.',\n", " '.',\n", " 'T',\n", - " 'O',\n", " 'A',\n", - " 'D',\n", - " 'Y',\n", - " '.',\n", - " '#',\n", - " '#',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", - " '.',\n", - " '=',\n", - " '.',\n", - " 'A',\n", - " 'G',\n", - " 'A',\n", - " 'P',\n", + " 'N',\n", " 'E',\n", - " '.',\n", - " 'S',\n", - " 'O',\n", " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " ':',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " 'T',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " 'E',\n", + " 'F',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -12823,7 +18249,7 @@ { "data": { "text/html": [ - "Player 1 with rack U makes Play(start=225, dir=1, letters='RUN', rack='')
for 7 points; draws: ; scores: [321, 408]" + "Player 1 with rack IGRORNJ makes Play(start=40, dir=1, letters='REJOIN', rack='GR')
for 52 points ; draws: GRNPFEC; scores: [315, 368]" ], "text/plain": [ "" @@ -12835,298 +18261,4282 @@ { "data": { "text/html": [ - "
A1V4oW4E1R1TW
DLW4O1N1DWK5DLG2
DLL1H4I1DLR1
TWTLU1DWI1N1E1
DLT1DLDLC3DLA1
DWI1TLC3A1I1R1D2S1
TLI1N1DLD2E1
J8O1B3U1T1T1E1
H4E1D2DLI1DLN1TL
E1L1I1T1O1F4E1T1U1S1
L1DLZ10A1DLM3DLDL
G2Y4R1E1N1E1E1O1L1O1P3I1lE1
DLR1U1N1F4A1X8DL
M3O1B3S1I1T1O1A1D2Y4
TWA1G2A1P3E1S1O1A1R1
" + "
TWD2TLTW
DLR1E1J8O1I1N1DL
DLDLC3DLDLB3
TWTLA1G2Q10R1
DLY4A1M3U1DLO1
DWTLZ10I1G2E1O1M3
TLDLE1DLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4O1U1DLS1N1E1D2
DWD2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1I1tDL
H4E1F4Y4I1R1R1
" ], "text/plain": [ - "['#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", - " 'A',\n", - " 'V',\n", - " 'o',\n", - " 'W',\n", - " 'E',\n", - " 'R',\n", + " '≡',\n", " '.',\n", " '.',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " 'W',\n", - " 'O',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " 'K',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'G',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'L',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'H',\n", - " 'I',\n", - " '.',\n", - " ':',\n", - " 'R',\n", - " '#',\n", - " '#',\n", - " '=',\n", - " '.',\n", - " '.',\n", - " ';',\n", - " 'U',\n", - " '.',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " ':',\n", - " '.',\n", - " 'A',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " '-',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'C',\n", - " 'A',\n", - " 'I',\n", - " 'R',\n", - " 'D',\n", - " 'S',\n", - " '#',\n", - " '#',\n", - " ';',\n", - " '.',\n", - " '.',\n", - " 'I',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", " 'D',\n", " '.',\n", + " '∴',\n", " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'R',\n", " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", " 'J',\n", - " '.',\n", " 'O',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " 'B',\n", - " 'U',\n", - " 'T',\n", - " 'T',\n", - " 'E',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " 'H',\n", - " 'E',\n", - " '.',\n", - " 'D',\n", - " ':',\n", - " '.',\n", - " '.',\n", " 'I',\n", - " '.',\n", - " '.',\n", - " ':',\n", " 'N',\n", " '.',\n", - " '.',\n", - " ';',\n", - " '#',\n", - " '#',\n", - " 'E',\n", - " 'L',\n", - " '.',\n", - " 'I',\n", - " '.',\n", - " 'T',\n", - " '.',\n", - " 'O',\n", - " '.',\n", - " 'F',\n", - " 'E',\n", - " 'T',\n", - " 'U',\n", - " 'S',\n", - " '.',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " 'L',\n", " ':',\n", - " 'Z',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'C',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", " '.',\n", " 'A',\n", - " ':',\n", - " 'M',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '.',\n", - " '#',\n", - " '#',\n", " 'G',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", " 'Y',\n", - " 'R',\n", - " 'E',\n", - " 'N',\n", - " 'E',\n", - " '.',\n", - " 'E',\n", - " 'O',\n", - " 'L',\n", - " 'O',\n", - " 'P',\n", - " 'I',\n", - " 'l',\n", - " 'E',\n", - " '#',\n", - " '#',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " 'R',\n", - " 'U',\n", - " 'N',\n", - " '.',\n", - " '.',\n", - " 'F',\n", " 'A',\n", - " 'X',\n", - " '.',\n", - " '.',\n", - " ':',\n", - " '.',\n", - " '#',\n", - " '#',\n", " 'M',\n", - " 'O',\n", - " 'B',\n", - " 'S',\n", " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Z',\n", " 'I',\n", + " 'G',\n", " '.',\n", + " 'E',\n", " '.',\n", - " '.',\n", - " 'T',\n", " 'O',\n", - " 'A',\n", - " 'D',\n", - " 'Y',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", " '.',\n", - " '#',\n", - " '#',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", " '.',\n", " '.',\n", " '.',\n", " '=',\n", " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'V',\n", + " '.',\n", + " 'O',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'R',\n", + " ':',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " 'T',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " 'E',\n", + " 'F',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Player 0 with rack LUETSAW makes Play(start=26, dir=1, letters='WAES', rack='LUT')
for 62 points ; draws: LUTA; scores: [377, 368]" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
TWD2W4A1E1S1
DLR1E1J8O1I1N1DL
DLDLC3DLDLB3
TWTLA1G2Q10R1
DLY4A1M3U1DLO1
DWTLZ10I1G2E1O1M3
TLDLE1DLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4O1U1DLS1N1E1D2
DWD2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1I1tDL
H4E1F4Y4I1R1R1
" + ], + "text/plain": [ + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'W',\n", + " 'A',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " 'E',\n", + " 'J',\n", + " 'O',\n", + " 'I',\n", + " 'N',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'C',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", " 'A',\n", " 'G',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Y',\n", " 'A',\n", - " 'P',\n", + " 'M',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Z',\n", + " 'I',\n", + " 'G',\n", + " '.',\n", " 'E',\n", " '.',\n", - " 'S',\n", " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'V',\n", + " '.',\n", + " 'O',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", " 'R',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#',\n", - " '#']" + " ':',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " 'T',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " 'E',\n", + " 'F',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Player 1 with rack GRNPFEC makes Play(start=60, dir=1, letters='ENG', rack='RPFC')
for 21 points ; draws: RPFC; scores: [377, 389]" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
TWD2W4A1E1S1
DLR1E1J8O1I1N1DL
DLDLC3E1N1G2DLB3
TWTLA1G2Q10R1
DLY4A1M3U1DLO1
DWTLZ10I1G2E1O1M3
TLDLE1DLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4O1U1DLS1N1E1D2
DWD2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1I1tDL
H4E1F4Y4I1R1R1
" + ], + "text/plain": [ + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'W',\n", + " 'A',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " 'E',\n", + " 'J',\n", + " 'O',\n", + " 'I',\n", + " 'N',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'C',\n", + " '.',\n", + " 'E',\n", + " 'N',\n", + " 'G',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " 'A',\n", + " 'G',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Y',\n", + " 'A',\n", + " 'M',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Z',\n", + " 'I',\n", + " 'G',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'V',\n", + " '.',\n", + " 'O',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'R',\n", + " ':',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " 'T',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " 'E',\n", + " 'F',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Player 0 with rack LUTA makes Play(start=172, dir=1, letters='TAD', rack='LU')
for 11 points ; draws: LU; scores: [388, 389]" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
TWD2W4A1E1S1
DLR1E1J8O1I1N1DL
DLDLC3E1N1G2DLB3
TWTLA1G2Q10R1
DLY4A1M3U1DLO1
DWTLZ10I1G2E1O1M3
TLDLE1DLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4O1U1DLS1N1E1D2
T1A1D2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1I1tDL
H4E1F4Y4I1R1R1
" + ], + "text/plain": [ + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'W',\n", + " 'A',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " 'E',\n", + " 'J',\n", + " 'O',\n", + " 'I',\n", + " 'N',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'C',\n", + " '.',\n", + " 'E',\n", + " 'N',\n", + " 'G',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " 'A',\n", + " 'G',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Y',\n", + " 'A',\n", + " 'M',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Z',\n", + " 'I',\n", + " 'G',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'V',\n", + " '.',\n", + " 'O',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'R',\n", + " ':',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " 'T',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " 'E',\n", + " 'F',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Player 1 with rack RPFC makes Play(start=96, dir=1, letters='CUP', rack='RF')
for 10 points ; draws: RF; scores: [388, 399]" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
TWD2W4A1E1S1
DLR1E1J8O1I1N1DL
DLDLC3E1N1G2DLB3
TWTLA1G2Q10R1
DLY4A1M3C3U1P3O1
DWTLZ10I1G2E1O1M3
TLDLE1DLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4O1U1DLS1N1E1D2
T1A1D2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1I1tDL
H4E1F4Y4I1R1R1
" + ], + "text/plain": [ + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'W',\n", + " 'A',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " 'E',\n", + " 'J',\n", + " 'O',\n", + " 'I',\n", + " 'N',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'C',\n", + " '.',\n", + " 'E',\n", + " 'N',\n", + " 'G',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " 'A',\n", + " 'G',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Y',\n", + " 'A',\n", + " 'M',\n", + " '.',\n", + " 'C',\n", + " 'U',\n", + " 'P',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Z',\n", + " 'I',\n", + " 'G',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'V',\n", + " '.',\n", + " 'O',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'R',\n", + " ':',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " 'T',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " 'E',\n", + " 'F',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Player 0 with rack LU makes Play(start=127, dir=1, letters='EL', rack='U')
for 8 points ; draws: U; scores: [396, 399]" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
TWD2W4A1E1S1
DLR1E1J8O1I1N1DL
DLDLC3E1N1G2DLB3
TWTLA1G2Q10R1
DLY4A1M3C3U1P3O1
DWTLZ10I1G2E1O1M3
TLDLE1L1DLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4O1U1DLS1N1E1D2
T1A1D2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1I1tDL
H4E1F4Y4I1R1R1
" + ], + "text/plain": [ + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'W',\n", + " 'A',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " 'E',\n", + " 'J',\n", + " 'O',\n", + " 'I',\n", + " 'N',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'C',\n", + " '.',\n", + " 'E',\n", + " 'N',\n", + " 'G',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " 'A',\n", + " 'G',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Y',\n", + " 'A',\n", + " 'M',\n", + " '.',\n", + " 'C',\n", + " 'U',\n", + " 'P',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Z',\n", + " 'I',\n", + " 'G',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " 'L',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'V',\n", + " '.',\n", + " 'O',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'R',\n", + " ':',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " 'T',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " 'E',\n", + " 'F',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Player 1 with rack RF makes Play(start=234, dir=17, letters='EF', rack='R')
for 9 points ; draws: R; scores: [396, 408]" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
TWD2W4A1E1S1
DLR1E1J8O1I1N1DL
DLDLC3E1N1G2DLB3
TWTLA1G2Q10R1
DLY4A1M3C3U1P3O1
DWTLZ10I1G2E1O1M3
TLDLE1L1DLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4O1U1DLS1N1E1D2
T1A1D2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1I1tF4
H4E1F4Y4I1R1R1
" + ], + "text/plain": [ + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'W',\n", + " 'A',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " 'E',\n", + " 'J',\n", + " 'O',\n", + " 'I',\n", + " 'N',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'C',\n", + " '.',\n", + " 'E',\n", + " 'N',\n", + " 'G',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " 'A',\n", + " 'G',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Y',\n", + " 'A',\n", + " 'M',\n", + " '.',\n", + " 'C',\n", + " 'U',\n", + " 'P',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Z',\n", + " 'I',\n", + " 'G',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " 'L',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'V',\n", + " '.',\n", + " 'O',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'R',\n", + " ':',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " 'T',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " 'F',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'H',\n", + " '.',\n", + " 'E',\n", + " 'F',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Player 0 with rack U makes Play(start=258, dir=1, letters='UH', rack='')
for 5 points ; draws: ; scores: [401, 408]" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
TWD2W4A1E1S1
DLR1E1J8O1I1N1DL
DLDLC3E1N1G2DLB3
TWTLA1G2Q10R1
DLY4A1M3C3U1P3O1
DWTLZ10I1G2E1O1M3
TLDLE1L1DLL1N1O1
DWB3O1O1D2L1E1S1
TLDLV4O1U1DLS1N1E1D2
T1A1D2I1I1T1A1
N1E1A1T1N1E1sS1DLW4
U1V4E1A1I1L1O1T1A1H4K5
DLR1DLA1P3I1X8I1E1DL
DLT1T1I1tF4
U1H4E1F4Y4I1R1R1
" + ], + "text/plain": [ + "['█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " 'D',\n", + " '.',\n", + " 'W',\n", + " 'A',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " 'E',\n", + " 'J',\n", + " 'O',\n", + " 'I',\n", + " 'N',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'C',\n", + " '.',\n", + " 'E',\n", + " 'N',\n", + " 'G',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'B',\n", + " '█',\n", + " '█',\n", + " '≡',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " 'A',\n", + " 'G',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Q',\n", + " '.',\n", + " '.',\n", + " 'R',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'Y',\n", + " 'A',\n", + " 'M',\n", + " '.',\n", + " 'C',\n", + " 'U',\n", + " 'P',\n", + " '.',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '∴',\n", + " '.',\n", + " 'Z',\n", + " 'I',\n", + " 'G',\n", + " '.',\n", + " 'E',\n", + " '.',\n", + " 'O',\n", + " 'M',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " '.',\n", + " 'E',\n", + " 'L',\n", + " '.',\n", + " ':',\n", + " 'L',\n", + " '.',\n", + " 'N',\n", + " 'O',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '=',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'B',\n", + " 'O',\n", + " 'O',\n", + " 'D',\n", + " 'L',\n", + " 'E',\n", + " 'S',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '∴',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'V',\n", + " '.',\n", + " 'O',\n", + " '.',\n", + " 'U',\n", + " ':',\n", + " 'S',\n", + " 'N',\n", + " 'E',\n", + " 'D',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " 'D',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " 'T',\n", + " 'A',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'N',\n", + " 'E',\n", + " 'A',\n", + " 'T',\n", + " 'N',\n", + " 'E',\n", + " 's',\n", + " 'S',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'W',\n", + " '█',\n", + " '█',\n", + " 'U',\n", + " 'V',\n", + " 'E',\n", + " 'A',\n", + " '.',\n", + " 'I',\n", + " '.',\n", + " 'L',\n", + " 'O',\n", + " 'T',\n", + " 'A',\n", + " 'H',\n", + " '.',\n", + " '.',\n", + " 'K',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " ':',\n", + " '.',\n", + " 'R',\n", + " ':',\n", + " 'A',\n", + " '.',\n", + " '.',\n", + " 'P',\n", + " 'I',\n", + " 'X',\n", + " 'I',\n", + " 'E',\n", + " ':',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " ':',\n", + " 'T',\n", + " '.',\n", + " 'T',\n", + " 'I',\n", + " '.',\n", + " '.',\n", + " 't',\n", + " '.',\n", + " '.',\n", + " 'F',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '.',\n", + " '.',\n", + " 'U',\n", + " 'H',\n", + " '.',\n", + " 'E',\n", + " 'F',\n", + " '.',\n", + " 'Y',\n", + " 'I',\n", + " 'R',\n", + " 'R',\n", + " '.',\n", + " '.',\n", + " '.',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█',\n", + " '█']" ] }, "metadata": {}, @@ -13135,10 +22545,10 @@ { "data": { "text/plain": [ - "[307, 422]" + "[402, 407]" ] }, - "execution_count": 63, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } @@ -13158,16 +22568,12 @@ } }, "source": [ - "That was an exciting game, ranging to the four edges of the board, with three bingos: INCIDENT,\n", - "EOLOPILE and \n", - "VOLUTIN (yes, those are actual words). \n", - "\n", - "But that was just one game; Let's get statistics for both players over, say, 10 games:" + "That was an exciting high-scoring game, but it was just one game. Let's get statistics for both players over, say, 10 games:" ] }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 60, "metadata": { "button": false, "collapsed": false, @@ -13182,9 +22588,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "min: 278, median: 389, mean: 378.15, max: 447\n", - "CPU times: user 26.7 s, sys: 313 ms, total: 27 s\n", - "Wall time: 29.1 s\n" + "min: 307, median: 373.5, mean: 382.8, max: 459\n", + "CPU times: user 33.2 s, sys: 324 ms, total: 33.5 s\n", + "Wall time: 36.2 s\n" ] } ], @@ -13193,11 +22599,11 @@ "\n", "games = 10\n", "\n", - "scores = sorted(score for game in range(games) \n", - " for score in play_game(verbose=False))\n", + "scores = [score for game in range(games) \n", + " for score in play_game(verbose=False)]\n", "\n", "print('min: {}, median: {}, mean: {}, max: {}'.format(\n", - " min(scores), scores[games], sum(scores)/(2*games), max(scores)))" + " min(scores), median(scores), mean(scores), max(scores)))" ] }, { @@ -13218,7 +22624,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 61, "metadata": { "button": false, "collapsed": false, @@ -13235,7 +22641,7 @@ "'ok'" ] }, - "execution_count": 65, + "execution_count": 61, "metadata": {}, "output_type": "execute_result" } @@ -13258,10 +22664,16 @@ " assert dict_prefixes({'HELLO', 'HELP', 'HELPER'}) == {\n", " '', 'H', 'HE', 'HEL', 'HELL', 'HELP', 'HELPE'}\n", " \n", - " assert rack_prefixes('ABC') == {'', 'A', 'AB', 'AC', 'B', 'BA', 'BAC', 'C', 'CA', 'CAB'}\n", + " assert set(rack_prefixes('ABC')) == {'', 'C', 'B', 'A', 'AB', 'CA', 'AC', 'BA', 'BAC', 'CAB'}\n", " assert len(rack_prefixes('LETTERS')) == 155\n", " assert len(rack_prefixes('LETTER_')) == 1590\n", " \n", + " assert remove('SET', 'EELRTTS') == 'ELRT'\n", + " remove('TREaT', 'EELRTT_') == 'EL'\n", + " \n", + " assert len(WWF) == len(SCRABBLE) == 17 * 17\n", + " assert all(sq in EMPTY or sq == OFF for sq in WWF + SCRABBLE)\n", + " \n", " DOWN = WWF.down\n", " plays = {\n", " Play(145, DOWN, 'ENTER', ''),\n", @@ -13270,7 +22682,6 @@ " Play(158, DOWN, 'MUSES', ''),\n", " Play(172, ACROSS, 'VIRULeNT', ''),\n", " Play(213, ACROSS, 'RED', ''),\n", - " Play(198, ACROSS, 'LYTHE', ''),\n", " Play(147, DOWN, 'CHILDREN', ''),\n", " Play(164, ACROSS, 'HEARD', ''),\n", " Play(117, DOWN, 'BRIDLES', ''),\n", @@ -13283,9 +22694,11 @@ " assert len(WWF) == len(board) == 17 * 17\n", " assert all_anchors(WWF) == [144]\n", " assert all_anchors(board) == [\n", - " 100, 114, 115, 116, 121, 127, 128, 130, 137, 139, 141, 143, 146, 148, 149, 150, 154, 156, 157, 159, 160, \n", - " 161, 163, 171, 180, 182, 183, 184, 188, 190, 191, 193, 194, 195, 197, 206, 208, 210, 212, 216, 217, 218, \n", - " 225, 227, 230, 231, 233, 236, 243, 248, 250, 265, 267]\n", + " 100, 114, 115, 116, 121, 127, 128, 130, 137, 139, 141, 143, \n", + " 146, 148, 149, 150, 154, 156, 157, 159, 160, 161, 163, 171, \n", + " 180, 182, 183, 184, 188, 190, 191, 193, 194, 195, 197, 199, \n", + " 201, 206, 208, 210, 212, 216, 218, 225, 227, 230, 231, 233, \n", + " 236, 243, 248, 250, 265, 267]\n", " \n", " assert crossword(board, 141, ACROSS) == '.MUSES'\n", " assert crossword(board, 148, ACROSS) == 'T.E'\n", @@ -13340,7 +22753,7 @@ "1. **Is the code easy to follow?** \n", " - I'm biased, but I think this code is easy to understand, test, and modify.\n", "2. **Does the strategy score well?** \n", - " - Yes: the mean and median are both well over 350, which is enough for [the elite club](https://www.facebook.com/WWF350Club) of high scorers. \n", + " - Yes: the mean and median scores are both over 350, which is enough for [the elite club](https://www.facebook.com/WWF350Club) of high scorers. \n", " - No: this is not quite world-champion caliber.\n", "3. **Is the code fast enough?** \n", " - It takes less than 3 seconds to play a complete game for both players; that's fast enough for me. If desired, the code could be made about 100 times faster, by using multiprocessing, by caching more information, by not building explicit lists for intermediate results (although those intermediate results make the code easier to test), by using PyPy or Cython, or by porting to another language.\n", @@ -13348,12 +22761,11 @@ " - We could give players the option of trading in tiles.\n", " - We could explore better strategies. A better strategy might:\n", " - Plan ahead to use high-scoring letters only with bonuses.\n", - " - Manage letters to increase the chance of a bingo.\n", " - Use blank tiles strategically, not greedily.\n", + " - Manage letters to increase the chance of a bingo.\n", " - Play defensively to avoid giving the opponent good chances at high scores.\n", " - Think ahead in the end game to go out before the opponent (or at least avoid being stuck with high-scoring letters in the rack).\n", " - In the end game, know which tiles have not been played and thus which ones the opponent could have.\n", - " - The display could be prettier.\n", " - The game could be interfaced to an online game server.\n", " - More complete unit tests would be great.\n", " - We could compare this program to those of the [giants](https://www.cs.cmu.edu/afs/cs/academic/class/15451-s06/www/lectures/scrabble.pdf) whose [shoulders](http://ericsink.com/downloads/faster-scrabble-gordon.pdf) we [stood](http://web.archive.org/web/20040116175427/http://www.math-info.univ-paris5.fr/~bouzy/ProjetUE3/Scrabble.pdf) [upon](http://www.gtoal.com/wordgames/scrabble.html).\n", diff --git a/ipynb/Snobol.ipynb b/ipynb/Snobol.ipynb index 19e9147..c3db1d9 100644 --- a/ipynb/Snobol.ipynb +++ b/ipynb/Snobol.ipynb @@ -8,7 +8,7 @@ "\n", "# Bad Grade, Good Experience\n", "\n", - "Recently I was asked a question I hadn't thought about before: \n", + "Recently I was asked a question I hadn't thought about in decades: \n", "\n", "> *As a student, did you ever get a bad grade on a programming assignment?* \n", "\n", @@ -20,20 +20,20 @@ "\n", "After studying Snobol a bit, I realized that the expected solution was along these lines:\n", "\n", - "1. Create an empty `dict` (Snobol calls these \"tables\") whose keys will be words and values will be lists of line numbers.\n", + "1. Create an empty hash table whose keys will be words and values will be lists of line numbers.\n", "2. Read the lines of text (tracking the line numbers), split them into words, and build up the list of line numbers for each word.\n", - "3. Convert the table into a two-dimensional `array` where each row has the two columns `[word, line_numbers]`.\n", + "3. Convert the hash table into a two-dimensional array where each row has the two columns `[word, line_numbers]`.\n", "4. Write a function to sort the array alphabetically (`sort` is not built-in to Snobol).\n", "5. Write a function to print the array.\n", "\n", "That would be around 40 to 60 lines of code; an easy task. But I noticed three interesting things about Snobol:\n", "\n", - "* There is an *indirection* operator, `$`, so if the variable `'X'` has the value `\"A\"`, then `'$X = i'` is the same as `'A = i'`.\n", - "* Uninitialized variables are treated as the empty string, so `'A += \"text\"'` works even if we haven't seen `'A'` before.\n", - "* When the program ends, the Snobol interpreter automatically\n", - "prints the values of every variable, sorted alphabetically, as a debugging aid.\n", + "* '`$`' is an *indirection* operator, so if the variable `'word'` has the value `\"A\"`, then `'$word = x'` is the same as `'A = x'`.\n", + "* Uninitialized variables are treated as the empty string, so `'A = A + \"text\"'` works even if we haven't seen `'A'` before.\n", + "* When the program ends, the Snobol interpreter \n", + "prints out each variable (in sorted order), with its value, as a debugging aid.\n", "\n", - "That means I could do away with the `dict` and `array` data structures, eliminating steps 1, 3, 4, and 5, and just do step 2! \n", + "That means I could use `$` to do away with the hash table and array data structures, eliminating steps 1, 3, 4, and 5, and just do step 2! \n", "\n", "# The Concordance Solution\n", "\n", @@ -50,8 +50,8 @@ "source": [ "program = \"\"\"\n", "for i, line in enumerate(input):\n", - " for word in re.findall(r\"\\w+\", line.upper()):\n", - " $word += str(i) + ', '\n", + " for word in re.findall(\"[A-Z]+\", line.upper()):\n", + " $word = $word + i + \", \"\n", "\"\"\"" ] }, @@ -61,38 +61,43 @@ "source": [ "That's just 3 lines, not 40 to 60! \n", "\n", - "To test the program, I'll write a mock Snobol/Python interpreter, which at heart is just a call to the Python interpreter, `exec(program)`, except that it handles the three things I noticed about the Snobol interpreter:\n", + "To test the program, I'll write a mock Snobol/Python interpreter, which at heart is just a call to the Python interpreter, `exec(program)`, except that it handles the three things I mentioned about the Snobol interpreter, plus one more:\n", "\n", - "* `$word` gets translated as `_context[word]`.\n", - "* It calls `exec(program, _context)`, where `_context` is a `defaultdict(str)`, so variables default to `''`.\n", - "* After the `exec` completes, the user-defined variables (but not the built-in ones) are printed." + "1. `$word` gets translated as `_globals[word]`.\n", + "2. The interpreter calls `exec(program, _globals)`, where `_globals` is a `defaultdict` that makes variables default to the empty string.\n", + "3. After the `exec` completes, the user-defined variables (but not the built-in ones) are printed.\n", + "4. Concatenating a string with an integer coerces the `int` to `str` automatically. I'll handle that with a `Str` class.\n" ] }, { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from collections import defaultdict\n", "import re\n", "\n", "def snobol(program, data=''):\n", - " \"\"\"A Python interpreter with three Snobol-ish features:\n", - " (1) $word indirection; (2) variables default to ''; (3) post-mortem dump.\"\"\"\n", - " program = re.sub(r'\\$(\\w+)', r'_context[\\1]', program) # (1) \n", - " _context = defaultdict(str, vars(__builtins__)) # (2) \n", - " _context.update(re=re, input=data.splitlines(), _context=_context)\n", - " builtins = set(_context)\n", + " \"\"\"A Python interpreter with four Snobol-ish features:\n", + " 1. $word indirection; 2. variables default to empty string; \n", + " 3. post-mortem dump; 4. automatic coercing to string\"\"\"\n", + " program = re.sub(r'\\$(\\w+)', r'_globals[\\1]', program) # 1. \n", + " _globals = defaultdict(Str, vars(__builtins__)) # 4., 2.\n", + " _globals.update(re=re, input=data.splitlines(), _globals=_globals)\n", + " builtins = set(_globals) | {'__builtins__'}\n", " try:\n", - " exec(program, _context)\n", + " exec(program, _globals)\n", " finally:\n", - " print('-' * 79) # (3)\n", - " for name in sorted(_context):\n", - " if not (name in builtins or name == '__builtins__'):\n", - " print('{:10} = {}'.format(name, _context[name]))" + " print('-' * 79) # 3. \n", + " for name in sorted(_globals):\n", + " if name not in builtins:\n", + " print('{:10} = {}'.format(name, _globals[name]))\n", + " \n", + "class Str(str):\n", + " \"String class with automatic coercion for +\"\n", + " def __add__(self, other): return Str(str(self) + str(other))\n", + " def __radd__(self, other): return Str(str(other) + str(self))\n" ] }, { @@ -105,9 +110,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "data = \"\"\"\n", @@ -115,17 +118,17 @@ "Singin' \"Do wah diddy diddy dum diddy do\"\n", "Snappin' her fingers and shufflin' her feet, \n", "Singin' \"Do wah diddy diddy dum diddy do\"\n", - "She looked good (looked good), she looked fine (looked fine)\n", - "She looked good, she looked fine and I nearly lost my mind\n", + "She looked good (looked good), \n", + "She looked fine (looked fine)\n", + "She looked good, she looked fine \n", + "And I nearly lost my mind\n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -133,24 +136,24 @@ "text": [ "-------------------------------------------------------------------------------\n", "A = 1, \n", - "AND = 3, 6, \n", + "AND = 3, 8, \n", "DIDDY = 2, 2, 2, 4, 4, 4, \n", "DO = 2, 2, 4, 4, \n", "DOWN = 1, \n", "DUM = 2, 4, \n", "FEET = 3, \n", - "FINE = 5, 5, 6, \n", + "FINE = 6, 6, 7, \n", "FINGERS = 3, \n", - "GOOD = 5, 5, 6, \n", + "GOOD = 5, 5, 7, \n", "HER = 3, 3, \n", - "I = 6, \n", + "I = 8, \n", "JUST = 1, \n", - "LOOKED = 5, 5, 5, 5, 6, 6, \n", - "LOST = 6, \n", - "MIND = 6, \n", - "MY = 6, \n", - "NEARLY = 6, \n", - "SHE = 1, 5, 5, 6, 6, \n", + "LOOKED = 5, 5, 6, 6, 7, 7, \n", + "LOST = 8, \n", + "MIND = 8, \n", + "MY = 8, \n", + "NEARLY = 8, \n", + "SHE = 1, 5, 6, 7, 7, \n", "SHUFFLIN = 3, \n", "SINGIN = 2, 4, \n", "SNAPPIN = 3, \n", @@ -160,8 +163,8 @@ "WAH = 2, 4, \n", "WALKIN = 1, \n", "WAS = 1, \n", - "i = 6\n", - "line = She looked good, she looked fine and I nearly lost my mind\n", + "i = 8\n", + "line = And I nearly lost my mind\n", "word = MIND\n" ] } @@ -174,15 +177,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Oops! The post-mortem printout includes the variables `i`, `line`, and `word`. Reluctantly, I increased the program's line count by 33%:" + "**Oops!** The post-mortem printout includes the variables `i`, `line`, and `word`. Reluctantly, I'll increase the program's line count by 33%:" ] }, { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -190,24 +191,24 @@ "text": [ "-------------------------------------------------------------------------------\n", "A = 1, \n", - "AND = 3, 6, \n", + "AND = 3, 8, \n", "DIDDY = 2, 2, 2, 4, 4, 4, \n", "DO = 2, 2, 4, 4, \n", "DOWN = 1, \n", "DUM = 2, 4, \n", "FEET = 3, \n", - "FINE = 5, 5, 6, \n", + "FINE = 6, 6, 7, \n", "FINGERS = 3, \n", - "GOOD = 5, 5, 6, \n", + "GOOD = 5, 5, 7, \n", "HER = 3, 3, \n", - "I = 6, \n", + "I = 8, \n", "JUST = 1, \n", - "LOOKED = 5, 5, 5, 5, 6, 6, \n", - "LOST = 6, \n", - "MIND = 6, \n", - "MY = 6, \n", - "NEARLY = 6, \n", - "SHE = 1, 5, 5, 6, 6, \n", + "LOOKED = 5, 5, 6, 6, 7, 7, \n", + "LOST = 8, \n", + "MIND = 8, \n", + "MY = 8, \n", + "NEARLY = 8, \n", + "SHE = 1, 5, 6, 7, 7, \n", "SHUFFLIN = 3, \n", "SINGIN = 2, 4, \n", "SNAPPIN = 3, \n", @@ -223,8 +224,8 @@ "source": [ "program = \"\"\"\n", "for i, line in enumerate(input):\n", - " for word in re.findall(r\"\\w+\", line.upper()):\n", - " $word += str(i) + ', '\n", + " for word in re.findall(\"[A-Z]+\", line.upper()):\n", + " $word = $word + i + \", \"\n", "del i, line, word\n", "\"\"\"\n", "\n", @@ -235,7 +236,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Looks good to me! \n", + "## Looks good to me! \n", "\n", "But sadly, the grader for the course did not agree, complaining that my program was not extensible: what if I wanted to cover two or more files in one run? What if I wanted the output to have a slightly different format? I argued that [YAGNI](https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it), and if the requirements\n", "changed, *then* I would write the necessary 40 or 60 lines, but there's no sense doing that until then. The grader was not impressed with my arguments and I got points taken off. \n", @@ -268,7 +269,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.0" + "version": "3.5.3" } }, "nbformat": 4, diff --git a/ipynb/TSP.ipynb b/ipynb/TSP.ipynb index 7e75acb..68352f5 100644 --- a/ipynb/TSP.ipynb +++ b/ipynb/TSP.ipynb @@ -4,153 +4,148 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# The Traveling Salesperson Problem" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Consider the [*Traveling Salesperson Problem*](http://en.wikipedia.org/wiki/Traveling_salesman_problem): \n", + "# The Traveling Salesperson Problem\n", "\n", - "> *Given a set of cities and the distances between each pair of cities, what is the shortest possible tour that visits each city exactly once, and returns to the starting city?*\n", + "Consider the [*Traveling Salesperson Problem*](http://en.wikipedia.org/wiki/Traveling_salesman_problem) (or TSP): \n", "\n", - "In this notebook we will develop some solutions to the problem, and more generally show *how to think about* solving a problem like this. [Elsewhere](https://research.googleblog.com/2016/09/the-280-year-old-algorithm-inside.html) you can read about how the algorithms developed here are used in serious applications that millions of people rely on every day.\n", + "> *Given a set of cities and the distance between each pair of cities, what is the shortest possible tour that visits each city exactly once, and returns to the starting city?*\n", "\n", - "\n", - "
An example tour.
\n", - " \n", - "# Understanding What We're Talking About (Vocabulary)\n", + "In this notebook we will develop some solutions to the problem, and more generally show *how to think about* solving problems. The algorithms developed here are used in [serious applications](https://research.googleblog.com/2016/09/the-280-year-old-algorithm-inside.html) that millions of people rely on every day.\n", "\n", - "Do we understand precisely what the problem is asking? Do we understand all the concepts that the problem talks about? Do we understand them well enough to implement them in a programming language? Let's take a first pass:\n", + "|![](http://support.sas.com/documentation/cdl/en/ornoaug/66084/HTML/default/images/map002g.png)|\n", + "|---|\n", + "|[An example tour](http://www.math.uwaterloo.ca/tsp/history/pictorial/dfj.html)|\n", "\n", - "- **A set of cities**: We will need to represent a set of cities; Python's `set` datatype might be appropriate.\n", - "- **Distance between each pair of cities**: If `A` and `B` are cities, this could be a function, `distance(A, B),` or a table lookup, `distance[A][B]`. The resulting distance will be a real number.\n", - "- **City**: All we have to know about an individual city is how far it is from other cities. We don't have to know its name, population, best restaurants, or anything else. So a city could be just an integer (0, 1, 2, ...) used as an index into a distance table, or a city could be a pair of (x, y) coordinates, if we are using straight-line distance on a plane.\n", - "- **Tour**: A tour is a specified order in which to visit the cities; Python's `list` or `tuple` datatypes would work. For example, given the set of cities `{A, B, C, D}`, a tour might be the list `[B, D, A, C]`, which means to travel from `B` to `D` to `A` to `C` and finally back to `B`.\n", - "- **Shortest possible tour**: The shortest tour is the one whose tour length is the minimum of all tours.\n", - "- **Tour length**: The sum of the distances between adjacent cities in the tour (including the last city back to the first city). Probably a function, `tour_length(tour)`.\n", - "- **What is ...**: We can define a function to answer the question *what is the shortest possible tour?* The function takes a set of cities as input and returns a tour as output. I will use the convention that any such function will have a name ending in the letters \"`tsp`\", the traditional abbreviation for Traveling Salesperson Problem.\n", + "Do we understand the problem statement well enough to program a solution? Let's check:\n", "\n", - "At this stage I have a rough sketch of how to attack the problem. I don't have all the answers, and I haven't committed to specific representations for all the concepts, but I know what all the pieces are, and I don't see anything that stops me from proceeding." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here are the imports used throughout this notebook. I'm assuming Python 3." + "- ***Given a set of cities***\n", + "
A Python `set` could represent a set of cities. An individual city might be just an integer index, or it might be (x, y) coordinates.\n", + "- ... ***and the distance between each pair of cities***: \n", + "
We could use either a function, `distance(A, B),` or a table, `distance[A, B]`.\n", + "- ... ***what is the shortest possible tour***\n", + "
A tour is a sequential order in which to visit the cities; a function `shortest_tour(tours)` should find the one that minimizes `tour_length(tour)`, which is the sum of the distances between adjacent cities in the tour. \n", + "- ... ***that visits each city once and returns to the starting city***\n", + "
Make sure a tour doesn't re-visit a city (except returning to the start). \n", + "\n", + "\n", + "\n", + "I don't yet have all the answers, but I'm ready to attack the problem. " ] }, { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ + "# Imports used in this notebook. This is Python 3 on Jupyter with matplotlib.\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import random\n", - "import time\n", - "import itertools\n", - "import urllib\n", - "import csv\n", - "import functools\n", - "from statistics import mean, stdev" + "from time import clock \n", + "from itertools import permutations, combinations\n", + "from functools import lru_cache as cache\n", + "from collections import Counter\n", + "from statistics import mean, median" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# All Tours Algorithm: `alltours_tsp`" + "# Exhaustive Search Algorithm: `exhaustive_tsp`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let's start with an algorithm that is guaranteed to solve the problem, although it is inefficient for large sets of cities:\n", + "Let's start with an algorithm that is *guaranteed* to solve the problem, although inefficiently:\n", "\n", - "> **All Tours Algorithm**: *Generate all possible tours of the cities, and choose the shortest tour (the one with minimum tour length).*\n", + "> **Exhaustive Search Algorithm**: *Generate all possible tours of the cities, and choose the shortest tour (the one with minimum tour length).*\n", "\n", - "My design philosophy is to first write an English description of the algorithm, then write Python code that closely mirrors the English description. This will probably require some auxiliary functions and data structures; just assume they exist; put them on a TO DO list, and eventually define them with the same design philosophy.\n", - "\n", - "Here is the start of the implementation:" + "My design philosophy is to first write an English description of the algorithm (as above), then write Python code that closely mirrors the English description. This will probably require some auxilliary functions and data structures; just assume they exist; put them on a TO DO list, and eventually define them with the same design philosophy:" ] }, { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "def alltours_tsp(cities):\n", + "def exhaustive_tsp(cities):\n", " \"Generate all possible tours of the cities and choose the shortest tour.\"\n", " return shortest_tour(alltours(cities))\n", "\n", - "def shortest_tour(tours): \n", - " \"Choose the tour with the minimum tour length.\"\n", - " return min(tours, key=tour_length)\n", + "def shortest_tour(tours): return min(tours, key=tour_length)\n", "\n", - "# TO DO: Data types: cities, tours, Functions: alltours, tour_length" + "# TO DO: Data types: City, Cities, Tour; Functions: alltours, tour_length" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**Note**: In Python `min(`*collection*`,key=`*function*`)` means to find the element *x* that is a member of *collection* such that *function(x)* is minimized. So `shortest` finds the tour whose `tour_length` in the minimal among the tours. \n", + "This gives us a good start; the Python code closely matches the English description. Now for the TO DO list.\n", "\n", - "This gives us a good start; the Python code closely matches the English description. And we know what we need to do next: represent cities and tours, and implement the functions `alltours` and `tour_length`. Let's start with tours.\n", + "**Tours:** A tour that starts in city `1`, moves to `2`, then `3`, then back to `1` will be represented by `(1, 2, 3)`. Any valid tour of a set of cities will be a *permutation* of the cities. That means we can implement `alltours` with the built-in `permutations` function (from the `itertools` module). \n", + "The length of a tour is the sum of the distances between adjacent cities in the tour—the sum of the lengths of the **links** between cities in the tour. \n", "\n", - "\n", - "Representing Tours\n", - "------------------\n", - "\n", - "A tour starts in one city, and then visits each of the other cities in order, before returning to the start city. A natural representation of a tour is a sequence of cities. For example `(1, 2, 3)` could represent a tour that starts in city 1, moves to 2, then 3, and finally returns to 1. \n", - "\n", - "**Note**: I considered using `(1, 2, 3, 1)` as the representation of this tour. I also considered an ordered list of **edges** between cities: \n", - "`((1, 2), (2, 3), (3, 1))`. In the end, I decided `(1, 2, 3)` was simplest.\n", - " \n", - "\n", - "Now for the `alltours` function. If a tour is a sequence of cities, then all the tours are *permutations* of the set of all cities. A function to generate all permutations of a set is already provided in Python's standard `itertools` library module; we can use it as our implementation of `alltours`:" + "**Cities:** the only thing we need to know about a city is its distance to other cities. We don't need to know the city's name, population, best restaurants, or anything else. We'll assume the distance between two cities is the [Euclidean distance](http://en.wikipedia.org/wiki/Euclidean_distance), the straight-line distance between points in a two-dimensional plane. So I want `City(300, 100)` to be the city with x-coordinate 300 and y coordinate 100. At first glance it seems like Python does not have a builtin type for a point in the two-dimensional plane, but actually there is one: complex numbers. I'll implement `City` with `complex`, which means the distance between two cities, `distance(A, B)`, is the absolute value of the vector difference between them. \n", + "I'll also define `Cities(n)` to make a set of `n` random cities. I want `Cities(n)` to be reproducible (to return the same result when called with the same arguments), so I provide an optional argument that sets `random.seed`. " ] }, { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "alltours = itertools.permutations " + "alltours = permutations \n", + "\n", + "def tour_length(tour):\n", + " \"\"\"The total of distances between each pair of consecutive cities in the tour.\n", + " This includes the last-to-first, distance(tour[-1], tour[0])\"\"\"\n", + " return sum(distance(tour[i - 1], tour[i]) \n", + " for i in range(len(tour)))\n", + "\n", + "City = complex\n", + "\n", + "def distance(A, B): return abs(A - B)\n", + "\n", + "def Cities(n, seed=123, width=999, height=666):\n", + " \"Make a set of n cities, sampled uniformly from a (width x height) rectangle.\"\n", + " random.seed((n, seed))\n", + " return frozenset(City(random.randint(1, width), random.randint(1, height))\n", + " for c in range(n))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "For *n* cities there are *n*! (that is, the factorial of *n*) permutations.\n", - "Here's are all 3! = 6 tours of 3 cities:" + "# A solution!\n", + "\n", + "Now we're ready: `exhaustive_tsp` can find a tour for a set of cities:" ] }, { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]" + "((158+421j),\n", + " (297+397j),\n", + " (832+102j),\n", + " (872+207j),\n", + " (817+315j),\n", + " (939+600j),\n", + " (620+498j),\n", + " (163+639j),\n", + " (31+501j))" ] }, "execution_count": 4, @@ -159,434 +154,123 @@ } ], "source": [ - "cities = {1, 2, 3}\n", - "\n", - "list(alltours(cities))" + "exhaustive_tsp(Cities(9))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The length of a tour is the sum of the lengths of each edge in the tour; in other words, the sum of the distances between consecutive cities in the tour, including the distance form the last city back to the first:" + "Quick, is that the shortest tour? I can't tell. But this should help:\n", + "\n", + "## Visualizing results: `plot_tour` and `do`\n" ] }, { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "def tour_length(tour):\n", - " \"The total of distances between each pair of consecutive cities in the tour.\"\n", - " return sum(distance(tour[i], tour[i-1]) \n", - " for i in range(len(tour)))\n", - "\n", - "# TO DO: Functions: distance, Data types: cities" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Note**: I use one Python-specific trick: when `i` is 0, then `distance(tour[0], tour[-1])` gives us the wrap-around distance between the first and last cities, because `tour[-1]` is the last element of `tour`. \n", - "\n", - "Representing Cities\n", - "--------------------------------\n", - "\n", - "We determined that the only thing that matters about cities is the distance between them. But before we can decide about how to represent cities, and before we can define `distance(A, B)`, we have to make a choice. In the fully general version of the TSP, the \"distance\" between two cities could be anything: it could factor in the amount of time it takes to travel between cities, the twistiness of the road, or anything else. The `distance(A, B)` might be different from `distance(B, A)`. So the distances could be represented by a matrix `distance[A][B]`, where any entry in the matrix could be any (non-negative) numeric value.\n", + "def plot_tour(tour, style='bo-'): \n", + " \"Plot every city and link in the tour, and highlight start city.\"\n", + " if len(tour) > 1000: plt.figure(figsize=(15, 10))\n", + " start = tour[0:1]\n", + " plot_segment(tour + start, style)\n", + " plot_segment(start, 'rD') # start city is red Diamond.\n", " \n", - "But we will ignore the fully general TSP and concentrate on an important special case, the **Euclidean TSP**, where the distance between any two cities is the [Euclidean distance](http://en.wikipedia.org/wiki/Euclidean_distance), the straight-line distance between points in a two-dimensional plane. So a city can be represented by a two-dimensional point: a pair of *x* and *y* coordinates. We will use the constructor function `City`, so that `City(300, 0)` creates a city with x-coordinate of 300 and y coordinate of 0. Then `distance(A, B)` will be a function that uses the *x* and *y* coordinates to compute the distance between `A` and `B`.\n", - "\n", - "Representing Points and Computing `distance`\n", - "---\n", - " \n", - "OK, so a city can be represented as just a two-dimensional point. But how will we represent points? Here are some choices, with their pros and cons:\n", - "\n", - "* **tuple:** A point is a two-tuple of (*x*, *y*) coordinates, for example, `(300, 0)`. **Pro:** Very simple. \n", - "**Con:** doesn't distinguish Points from other two-tuples. \n", - " \n", - "* **class:** Define a custom `Point` class with *x* and *y* slots. **Pro:** explicit, gives us `p.x` and `p.y` accessors. **Con:** less efficient.\n", - " \n", - "* **complex:** Python already has the two-dimensional point as a built-in numeric data type, but in a non-obvious way: as `complex` numbers, which inhabit the two-dimensional (real × imaginary) plane. **Pro:** efficient. **Con:** a little confusing; doesn't distinguish Points from other complex numbers.\n", - "* **subclass of complex:** All the pros of `complex`, and eliminating the major con.\n", - "\n", - "\n", - "Any of these choices would work perfectly well; I decided to use a subclass of `complex`:" + "def plot_segment(segment, style='bo-'):\n", + " \"Plot every city and link in the segment.\"\n", + " plt.plot([X(c) for c in segment], [Y(c) for c in segment], style, clip_on=False)\n", + " plt.axis('scaled')\n", + " plt.axis('off')\n", + " \n", + "def X(city): \"X coordinate.\"; return city.real\n", + "def Y(city): \"Y coordinate.\"; return city.imag" ] }, { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# Cities are represented as Points, which are a subclass of complex numbers\n", - "\n", - "class Point(complex):\n", - " x = property(lambda p: p.real)\n", - " y = property(lambda p: p.imag)\n", - " \n", - "City = Point\n", - "\n", - "def distance(A, B): \n", - " \"The distance between two points.\"\n", - " return abs(A - B)" + "plot_tour(exhaustive_tsp(Cities(9)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Here's an example of computing the distance between two cities:" + "That looks much better! It certainly looks like the shortest possible tour, although I can't prove it. \n", + "\n", + "*Vocabulary note:* A **segment** is a portion of a tour that does not loop back to the start. The **segment** `(1, 2, 3)` has only two links, 1-2 and 2-3, whereas the **tour** `(1, 2, 3)` has three links, because it includes the link back to the start, 3-1.\n", + "\n", + "One more convenience: the function `do` runs a TSP algorithm on a set of cities, plots the tour, asserts it is valid, and prints summary information. " ] }, { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "5.0" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "A = City(3, 0)\n", - "B = City(0, 4)\n", - "distance(A, B)" - ] - }, - { - "cell_type": "markdown", "metadata": {}, + "outputs": [], "source": [ - "Random Sets of Cities\n", - "---\n", - "\n", - "The input to a TSP algorithm should be a set of cities. I can make a random set of *n* cities by calling `City` *n* times, each with different random *x* and *y* coordinates:" + "def do(algorithm, cities):\n", + " \"Apply a TSP algorithm to cities, plot the result, and print info.\"\n", + " t0 = clock()\n", + " tour = algorithm(cities)\n", + " t1 = clock()\n", + " assert Counter(tour) == Counter(cities) # Every city appears exactly once in tour\n", + " plot_tour(tour)\n", + " print(\"{}: {} cities ⇒ tour length {:.0f} (in {:.3f} sec)\".format(\n", + " name(algorithm), len(tour), tour_length(tour), t1 - t0))\n", + " \n", + "def name(algorithm): return algorithm.__name__.replace('_tsp', '')" ] }, { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{(193+375j), (427+384j), (497+585j), (179+546j), (224+543j), (245+643j)}" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "{City(random.randrange(1000), random.randrange(1000)) for c in range(6)}" - ] - }, - { - "cell_type": "markdown", "metadata": {}, - "source": [ - "The function `Cities` does that (and a bit more):" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def Cities(n, width=900, height=600, seed=42):\n", - " \"Make a set of n cities, each with random coordinates within a (width x height) rectangle.\"\n", - " random.seed(seed * n)\n", - " return frozenset(City(random.randrange(width), random.randrange(height))\n", - " for c in range(n))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There are three complications that I decided to tackle in `Cities`:\n", - "\n", - "1. IPython's matplotlib plots (by default) in a rectangle that is 1.5 times wider than it is high; that's why I specified a width of 900 and a height of 600. If you want the coordinates of your cities to be bounded by a different size rectangle, you can change width or height.\n", - "\n", - "2. Sometimes I want `Cities(n)` to be a true function, returning the same result each time. This is very helpful for getting repeatable results: if I run a test twice, I get the same results twice. \n", - "But other times I would like to be able to do an experiment, where, for example, I call `Cities(n)` 30 times and get 30 different sets, and I then compute the average tour length produced by my algorithm across these 30 sets. Can I get both behaviors out of one function? *Yes!* The trick is the additional optional parameter, `seed`. Two calls to `Cities` with the same `n` and `seed` parameters will always return the same set of cities, and two calls with different values for `seed` will return different sets. This is implemented by calling the function `random.seed`, which resets the random number generator.\n", - "\n", - "3. Once I create a set of Cities, I don't want anyone messing with my set. For example, I don't want an algorithm that claims to \"solve\" a problem by deleting half the cities from the input set, then finding a tour of the remaining cities. Therefore, I make `Cities` return a `frozenset` rather than a `set`. A `frozenset` is *immutable*; nobody can change it once it is created. (Likewise, each city is immutable.)\n", - "\n", - "For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, "outputs": [ - { - "data": { - "text/plain": [ - "frozenset({(172+20j), (234+40j), (696+415j), (393+7j), (671+296j)})" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# A set of 5 cities\n", - "Cities(5)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[frozenset({(172+20j), (234+40j), (696+415j), (393+7j), (671+296j)}),\n", - " frozenset({(172+20j), (234+40j), (696+415j), (393+7j), (671+296j)}),\n", - " frozenset({(172+20j), (234+40j), (696+415j), (393+7j), (671+296j)})]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# The exact same set of 5 cities each time\n", - "[Cities(5) for i in range(3)]" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[frozenset({(414+310j), (776+430j), (41+265j), (864+394j), (523+497j)}),\n", - " frozenset({(814+542j), (29+476j), (637+261j), (759+367j), (794+255j)}),\n", - " frozenset({(439+494j), (211+473j), (585+33j), (832+503j), (591+15j)})]" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# A different set of 5 cities each time\n", - "[Cities(5, seed=i) for i in range(3)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we are ready to apply the `alltours_tsp` function to find the shortest tour:" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "((6+546j),\n", - " (199+147j),\n", - " (350+65j),\n", - " (737+26j),\n", - " (847+187j),\n", - " (891+465j),\n", - " (554+374j),\n", - " (505+548j))" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "alltours_tsp(Cities(8))" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2509.307587720301" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tour_length(alltours_tsp(Cities(8)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Quick, is that the right answer? I have no idea, and you probably can't tell either. But if we could *plot* the tour we'd understand it better and might be able to see at a glance if the tour is optimal.\n", - "\n", - "Plotting Tours\n", - "---\n", - "\n", - "I define `plot_tour(tour)` to plot the cities (as circles) and the tour (as lines):" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def plot_tour(tour): \n", - " \"Plot the cities as circles and the tour as lines between them.\"\n", - " plot_lines(list(tour) + [tour[0]])\n", - " \n", - "def plot_lines(points, style='bo-'):\n", - " \"Plot lines to connect a series of points.\"\n", - " plt.plot([p.x for p in points], [p.y for p in points], style)\n", - " plt.axis('scaled'); plt.axis('off')" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nRK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_tour(alltours_tsp(Cities(8)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "That looks much better! To me, it looks like the shortest possible tour, although I don't have an easy way to prove it. Let's go one step further and define a function, `plot_tsp(algorithm, cities)` that will take a TSP algorithm (such as `alltours_tsp`) and a set of cities, apply the algorithm to the cities to get a tour, check that the tour is reasonable, plot the tour, and print information about the length of the tour and the time it took to find it:" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def plot_tsp(algorithm, cities):\n", - " \"Apply a TSP algorithm to cities, plot the resulting tour, and print information.\"\n", - " # Find the solution and time how long it takes\n", - " t0 = time.clock()\n", - " tour = algorithm(cities)\n", - " t1 = time.clock()\n", - " assert valid_tour(tour, cities)\n", - " plot_tour(tour); plt.show()\n", - " print(\"{} city tour with length {:.1f} in {:.3f} secs for {}\"\n", - " .format(len(tour), tour_length(tour), t1 - t0, algorithm.__name__))\n", - " \n", - "def valid_tour(tour, cities):\n", - " \"Is tour a valid tour for these cities?\"\n", - " return set(tour) == set(cities) and len(tour) == len(cities)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nRK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, { "name": "stdout", "output_type": "stream", "text": [ - "8 city tour with length 2509.3 in 0.110 secs for alltours_tsp\n" + "exhaustive: 9 cities ⇒ tour length 2450 (in 1.049 sec)\n" ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "plot_tsp(alltours_tsp, Cities(8))" + "do(exhaustive_tsp, Cities(9))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## All Non-Redundant Tours Algorithm (improved `alltours_tsp`)" + "## Optimization: non-redundant `alltours`" ] }, { @@ -598,10 +282,8 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { "data": { @@ -609,7 +291,7 @@ "[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]" ] }, - "execution_count": 19, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -622,45 +304,34 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "But this is redundant: `(1, 2, 3)`, `(2, 3, 1)`, and `(3, 1, 2)` are three ways of describing the same tour. So let's arbitrarily say that all tours must start with the first city in the set of cities. We'll just pull the first city out, and then tack it back on to all the permutations of the rest of the cities. \n", - "\n", - "While we're re-assembling a tour from the start city and the rest, we'll take the opportunity to construct the tour as a *list* rather than a *tuple*. It doesn't matter much now, but later on we will want to represent *partial* tours, to which we will want to append cities one by one; appending can only be done to lists, not tuples." + "But this is redundant: `(1, 2, 3)`, `(2, 3, 1)`, and `(3, 1, 2)` are three ways of describing the same tour. So let's arbitrarily say that a tour must start with the first city in the set of cities. While we're redefining `alltours`, we'll take the opportunity to define a tour as a *list* rather than a *tuple*. It doesn't matter now, but I anticipate wanting to represent *partial* tours, to which we will append cities one by one; appending can be done to lists, but not tuples." ] }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [], "source": [ "def alltours(cities):\n", - " \"Return a list of tours, each a permutation of cities, but each one starting with the same city.\"\n", - " start = first(cities)\n", - " return [[start] + Tour(rest)\n", - " for rest in itertools.permutations(cities - {start})]\n", - "\n", - "def first(collection):\n", - " \"Start iterating over collection, and return the first element.\"\n", - " return next(iter(collection))\n", - "\n", - "Tour = list # Tours are implemented as lists of cities" + " \"Return a list of non-redundant tours (permutations of cities).\"\n", + " start, *others = cities\n", + " return [[start] + Tour(perm) for perm in permutations(others)]\n", + " \n", + "Tour = list # A Tour is a list of cities" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We can verify that for 3 cities there are now only 2 tours (not 6) and for 4 cities there are 6 tours (not 24):" + "We can verify that for 3 cities there are now only 2 tours, and that `exhaustive_tsp` can now do 10 cities in about the time it took to do 9 before:" ] }, { "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, + "execution_count": 11, + "metadata": {}, "outputs": [ { "data": { @@ -668,7 +339,7 @@ "[[1, 2, 3], [1, 3, 2]]" ] }, - "execution_count": 21, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -679,1130 +350,694 @@ }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, + "execution_count": 12, + "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "exhaustive: 10 cities ⇒ tour length 2720 (in 1.466 sec)\n" + ] + }, { "data": { + "image/png": "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\n", "text/plain": [ - "[[1, 2, 3, 4],\n", - " [1, 2, 4, 3],\n", - " [1, 3, 2, 4],\n", - " [1, 3, 4, 2],\n", - " [1, 4, 2, 3],\n", - " [1, 4, 3, 2]]" + "" ] }, - "execution_count": 22, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "alltours({1, 2, 3, 4})" + "do(exhaustive_tsp, Cities(10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**Note:** We could say that there is only one tour of three cities, because `[1, 2, 3]` and `[1, 3, 2]` are in some sense the same tour, one going clockwise and the other counterclockwise. However, I choose not to do that, for two reasons. First, it would mean we can never handle TSP problems where the distance from A to B is different from B to A. Second, it would complicate the code (if only by a line or two).\n", + "# General Strategies\n", "\n", - "We can verify that calling `alltours_tsp(Cities(8))` still works and gives the same tour with the same total distance. But it now runs faster:" + "It takes Exhaustive Search 1 or 2 seconds to solve a 10-city problem. Since it looks at all permutations, an 11-city problem would take about 11 times longer, and a 15-city problem would take days.\n", + "There must be a better way ... \n", + "\n", + "To get inspired, here are some general strategies for algorithm design: \n", + "\n", + "* **Brute Force Strategy**: The strategy used for `exhaustive_tsp`; as [Ken Thompson](https://en.wikipedia.org/wiki/Ken_Thompson) [says](https://www.brainyquote.com/quotes/ken_thompson_185574?src=t_brute_force), *\"when in doubt, use brute force.\"*\n", + "* **Approximation Strategy**: If it is too hard to find a precise, optimal solution, consider finding an approximate, suboptimal solution.\n", + "* **Greeedy Strategy**: To complete a multiple step problem, first do the step that has the best gain. Repeat. \n", + "* **Iterative Improvement Strategy**: Use an existing algorithm to create a solution, then have another algorithm improve the solution.\n", + "* **Ensemble Strategy**: Apply a set of algorithms to the problem, and pick the best solution. \n", + "* **Divide and Conquer Strategy**: Split the problem in half, solve each half, and combine the two partial solutions.\n", + "* **Stand on the Shoulders of Giants Strategy**: Find out what other people have done, and copy (or modify).\n", + "\n", + "Let's apply these strategies to develop some TSP algorithms.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Nearest Neighbor Algorithm: `nn_tsp`\n", + "\n", + "> **Nearest Neighbor Algorithm:** *Start at some city; at each step extend the tour by moving from the previous city to its nearest neighbor that has not yet been visited.*\n", + "\n", + "This is an instance of both the **approximation strategy** and the **greedy strategy**, where we are being greedy about choosing the shortest link to a neighbor. So now, instead of considering all *n*! tours, we incrementally build a single tour. \n", + "In more detail:\n", + "\n", + "* ***Start at some city*** (pass the start city as an argument, or if `None`, use the first city in the set)\n", + "* ***... at each step extend the tour*** (using `tour.append`)\n", + "* ***... by moving from the previous city*** (`C`)\n", + "* ***...to its nearest neighbor*** (as given by the function `nearest_neighbor`)\n", + "* ***...that has not yet been visited*** (I will maintain a set of `unvisited` cities)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def nn_tsp(cities, start=None):\n", + " \"\"\"Start the tour at the given start city (default: first city); \n", + " at each step extend the tour by moving from the previous city \n", + " to its nearest neighbor that has not yet been visited.\"\"\"\n", + " C = start or first(cities)\n", + " tour = [C]\n", + " unvisited = set(cities - {C})\n", + " while unvisited:\n", + " C = nearest_neighbor(C, unvisited)\n", + " tour.append(C)\n", + " unvisited.remove(C)\n", + " return tour\n", + "\n", + "def first(collection): return next(iter(collection))\n", + "\n", + "def nearest_neighbor(A, cities):\n", + " \"Find the city in cities that is nearest to city A.\"\n", + " return min(cities, key=lambda C: distance(C, A))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "While `exhaustive_tsp` was limited to about a dozen cities, this algorithm can do thousands of cities in less than a second:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nn: 1998 cities ⇒ tour length 33688 (in 0.510 sec)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "do(nn_tsp, Cities(2000))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(Note: I asked for 2000 cities but only got 1998 distinct ones—sometimes the random number generator produces the exact same city.)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nn: 10 cities ⇒ tour length 2792 (in 0.000 sec)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "do(nn_tsp, Cities(10))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On `Cities(10)`, `nn_tsp` took almost no time, but the tour is not optimal: it is 3% longer than optimal. But that will vary, depending on the set of cities, and also depending on the starting city. So that gives me an idea: Just as with buying lottery tickets, we can improve our chance of winning by trying more often.\n", + "\n", + "## Repetitive Nearest Neighbor Algorithm: `rep_nn_tsp`\n", + "\n", + "> **Repetitive Nearest Neighbor Algorithm:** *Run the nearest neighbor algorithm repeatedly, each time with a different start city, and pick the resulting tour with the shortest total distance.*\n", + "\n", + "This is an instance of the **ensemble strategy**, because providing a different paramater to the function each time is like using a different algorithm each time. Which starting cities should we pick? I'll define a function to randomly `sample` the cities (and for reproducibility I'll give it a `seed` argument, as I did with `Cities`). The parameter *k* says how many cities to sample." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def rep_nn_tsp(cities, k=25):\n", + " \"Repeat nn_tsp starting from k different cities; pick the shortest tour.\"\n", + " return shortest_tour(nn_tsp(cities, start) for start in sample(cities, k))\n", + "\n", + "def sample(population, k, seed=42):\n", + " \"Return a list of k elements sampled from population. Set random.seed.\"\n", + " if k >= len(population): \n", + " return population\n", + " else:\n", + " random.seed((k, seed))\n", + " return random.sample(population, k)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's try it:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rep_nn: 10 cities ⇒ tour length 2720 (in 0.000 sec)\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAADqCAYAAABEHfkJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAGmlJREFUeJzt3Xmc3tPZx/HPFSGRIZJU22QoKrSWWEsQa0hQlFLCY6ldg7Yey6NFtE8rTy21RFtE1U4FL1vtotQSO7XE1gixRVQEkUmiEdfzx/klM2LCLPd9n3Pu3/f9es0rzWDmmjRzf+c61/mdY+6OiIiUU5fYBYiISDwKARGRElMIiIiUmEJARKTEFAIiIiWmEBARKTGFgIhIiSkERERKTCEgIlJiCgERkRJTCIiIlJhCQESkxBQCIiIlphAQESkxhYCISIkpBERESkwhICJSYgoBEZESUwiIiJRY19gFiMgXmfVcAQaMhH6N8M5kGD/Cffqk2HVJ/VEIiCQmBMBOd8Po/tAANAHDNzTrOURBIJWm5SCR5AwY2RwAEH4d3R/W+l3MqqQ+RekE1OqKfJnllm8OgHkagC2GmdEbuKt4e8Edr3l5UldqHgJqdUUWzowtYKV1w/dFyyBoAh68Drga2Br4ObCYGWMJgXC3O/+udb2SvwjLQQtrddc7zYwGMxapfU0icZmxiBm/Bq6CtQ+F4RPDCz8UPyhNhCd/4c717gwHVgQ2Bx4FdgP+ZcZTZpxixlZmdI/zlUhuzL223aTZj+6B6wZ/8Z+M+BRGzgG6A58Csxd4m1WL97nzaeW/apGFM6MfcCVgwF7uTG5eMu3bCFO+csnUjEWBgYQuYSgwABiHlo7kK0QIgUFXwNi9vtjqDr3S/aG9zTBgUWBxQiC0fKv2+xYHnI4FSCVCaY6+UcvFjK2BS4HzgZPcmVuhj9sL2JIQCtsAi4GWjuSLIoRAqzOBiXBTEjOB4ieqWofPvPctQoTup/j1EwVQ7ZjRFfgNsB+wjzv3VPFzGdCf0CFsDQwGXqU5FMa5M7tan1/SVvMQgHlBMPQC6L8ePHirdgcFxQtDN2ofPt0JPyl+Qu3DZzYw253PKvFnmKIv7oYb9Cc4/ffATEIA1PSnci0dSUtRQgDAjDWAMe6sHqUA+RwzutAcQLUInwXfP4faLr21DKCqzYFa73xPnAu7ngGDjksh/LR0VG4xQ6Av8Iw734xSgCSjWK5YjNp3P/P+92dUrdPZ5Wi4fOjCZmCd/9OrLC0dlU/MYyPeB/qY0SWFn4YknmLp4ZPi7aNafu7iRa8rnQuV3gv/91Ye2PqDX30bq/qFdVDx/8Urxdt5CywdnQQMMJu/dDQWeF5LR3mLFgLuzDFjBuEb6P1YdUi5FS9gc4q36ZX++GYPXAFNreyGmzK50p+rGtyZQ5gXjAN+vcDS0c+A7mbzZwlaOspQtOUgADMmADu483K0IkSqKPXdcJ1lRn9CIGjpKFOxQ+Ah4Fh3HoxWhEiVtffBr1x9xa4jLR0lKnYI/A24yJ0boxUhIlWxwNLR1oRZiZaOEhM7BC4EHnHngmhFiEhNtLJ09BrNoaClo0hih8CpwIfunBytCBGpOS0dpSN2CBwDNLpzVLQiRCS6ti4d6S6Syot9veRUYM3INYhIZO58CFxfvLVcOtoNONeM1+DxR2DYjnB2o+4iqZzYncD2wE/d+X60IkQkac1LRwefB6PWyOXp61zEvmP4PWDpyDWISMLcmePOOJg2Naenr3MROwSmAl+PXIOIZOGdyc23rc2Tz9PXqYodAuoERKSNxo9o/drN8SNiVpW72DMBI5y42MudWdEKEZEsmG26Cmz5HDz/IEx+W7uDOi/q7iB33Gx+N/BmzFpEJAcP9CQ8Q9DKPeXSEbGXg0BzARFpu7WAZ2IXUU9SCAHNBUSkrdYCno5dRD1JIQTUCYhIW6kTqLAUQkCdgIh8peIe7DVRCFRUCiGgTkBEvlQ4M2jb6+GEbjDo7PB7qYTYZwdB6ATWil2EiKSpldvZ9tKZQZWjTkBEEjdgZHMAQPh1dP/wfumsFEJAMwER+RL9GnVmUPWkEALqBETkS+jMoGpKIQTUCYjIl2jtzKAT58JRY2NWVS9SGAxPA/qY0cWdz2IXIyJpcZ8+yaznEJg4MiwBTZkMw2+EXf9gRj/gVF1F2XFRD5CbX4QxDVjZnfdj1yIieTBjWeA64HXgAHdmRC4pSyksB4HmAiLSTu68BWwOzAAeLq6klHZKJQTeQyEgIu3kzmzgQGA08JAZ20QuKTuphMBUNBwWkQ5wx905h3Ap/cVmHFvcVSJtkEoIqBMQkU5x535gA0IYjDH7wsMF0opUQkCdgIh0mjtvApsCswjLQytGLil5qYSAOgERqYhiTrA/8BfCwHho5JKSlkoIqBMQkYop5gR/BIYBl5lxjOYErUslBNQJiEjFuXMfYU6wB3ClGT0il5ScVEJAnYCIVIU7bxDmBHMIc4JvRy4pKamEgDoBEakad2YB+wEXE+YEQ+JWlI5Ujo1YAnjXXVu6RKS6zBgM/BU4HTiz7OcOpRICRtjS1cedmbHrEZH6ZsbywA3Ai8DBZX7dSWI5qEhiHSktIjXhzuvAxsBnwDgzVohbUTxJhEBBh8iJSM0Uc4IfA5cCj5ixZeSSokgpBNQJiEhNFc8TjAL2BP5qxpFle54gpRBQJyAiUbhzD7AhoTO43IzFI5dUMymFgDoBEYnGnUmEOYER5gTLx62oNlIKAXUCIhJVsUtob+AKwpxgcOSSqi6lEFAnICLRFXOCM4F9gKvMOKKe5wQphYA6ARFJhjt3AxsRTiS9pF7nBCmFgDoBEUmKO68Bg4DFgAfMWC5ySRWXUgioExCR5BRzgj2BMcCjZmweuaSKSikE1AmISJKKOcHphC2k15jxs3qZEyRxdhCAGV2B2UA3d+bGrkdEpDXFlZU3Ak8Bw4ubzLKVTCfgzqfAR0Dv2LWIiCyMO68SBsaLE+YE34pcUqckEwIFzQVEJHnuNBFuK7uWMCfYLHJJHZZaCOhyGRHJQjEnOI1wWc21Zhye45wgtRDQNZMikhV37iJsI/0JcKEZ3SOX1C6phYA6ARHJjjsTCUGwJHCfGctGLqnNUgsBdQIikiV3ZgDDCDeWPWrGJpFLapPUQkCdgIhkq5gTnAIcCFxnxqGpzwlSCwF1AiKSPXfuIBxLfThwgRndIpe0UKmFgDoBEakL7rxCuKimF3Cf2ZEbmA26wuxH94Rfe64Qt8Kga+wCFqBOQETqhjszzNgNHj4N7EEY2xUagCZg+IZmPYe4T58Us0Z1AiIiVeSOw9H94KQiACD8Oro/DBgZszZILwTUCYhIXTFjEVhnw+YAmKcB6NsYo6aWUguBJsDMvvCnJSKSHTP6A/fD4kuEl7eWmoApkyOU9TlJhUBom3SktIjkzQwz4xDgEeBauGQjGD6xOQiaCL8fPyJelUFqg2FoPkTu9diFiIi0lxn9gAuBbwCbu/MCTMWs5xCYODIsAU2ZDONHxB4KQ5ohoE5ARLIUdgLxJ2A0MNKdOfP+WfGCv3ek0hYqxRDQcdIikhUzehNe/NcDfuDOY5FLarOkZgIFdQIikg0zhgLPAtOAdXIKAFAnICLSIWb0AE4FdgIOcGds5JI6RJ2AiEg7mbEB8E/Cdbhr5RoAoE5ARKTNzFgUOJFwgcxP3bk2ckmdlmIIqBMQkeSYsRpwOTAFWNuddyKXVBEpLgepExCRZJjRxYwjgfuB84Ed6iUAQJ2AiMhCmbEccAnQDdiguEayrqTYCUwDeoVDl0REaq849mFf4EngTmCzegwASLATcGeuGR8CfQhdgYhIzZjxdcKyz0rAEHeeiVxSVaXYCYDmAiISgRk7Eh78mgCsX+8BAAl2AgVdLiMiNWNGT+AsYAtgmDsPxK2odlLuBDQcFpGqM2Mz4BlgLmHrZ2kCANQJiEhJmdEdGAnsCRzizi2RS4oi1RBQJyAiVWPGOoQHv14C1nRnauSSokl1OUidgIhUnBldzTiesO3zFGC3MgcApN0JrBe7CBGpH2asDFwKzAK+586bkUtKgjoBEalrxYNfhwIPA2OAoQqAZil3ApoJiEinmNEIXAR8DdjEnZcil5QcdQIiUpfM2J1w5v/DwCAFQOuS7gTMMHc8djEikg8z+gDnAOsQTvx8PHJJSUuyE3CnCXCgIXYtIpIPM7YhHPvwb8J9vwqAr5BqJwDNc4EZsQsRkbSZ0QD8HtgB2Nedv0cuKRtJdgIFzQVE5CuZsSHwNLAE4cEvBUA7pNwJ6HIZEVkoMxYDfgUcBBzuznWRS8pSyiGg46RFpFVmrE449uFtwqFvUyKXlK3Ul4PUCYjIfMV9v0cD/wDOBXZUAHSOOgERyYIZKxDu+12EcN/vq1ELqhPqBEQkacWxD/sDjwO3AlsoACpHnYCIJMuMbwB/Br4NbOXOs5FLqjvqBEQkSWb8kHDj14vAQAVAdaQcAuoEEmVmvQaYXW1mvWLXIvXHjKXMuAQ4HdjVnePc+SRyWXUr5RBQJ5Ags4ZtB9Jjys0wbCA9ppg1bBu7JqkfZgwm/PQ/m7D1c1zkkuqeuad5PpsZiwCfAN3d+TR2PRICYH2633Yn06w38AGwDX38cWZv5950R+z6JF9mLA78H7A7cLA7t0UuqTSS7QTcmUt4nekTuxYJS0AD4cZ5AQDQG7iTaTYQbtTSkHSUGesCTwDLEo59UADUULIhUNBcIBGrw/ljmNmt9wLv7w2MYWa3VWm4NEZdkq/ivt8RwB0UXYA770cuq3RSDwEdIpcAM3o9z1sfDqOXf7DAP/sA2J2en73Im5ub8TczdjJj0Rh1Sj7M+A4wDtgcWNedv+rukDhSDwFdMxlR8ZDOXsALsIw/wTLDtqHP/CBongl8uj30Xha4ATgGeNOM08xYJVbtkqbi79ThwEOEs3+2ceetyGWVWsoPi4E6gWjMWJVwNstSwM7uPArjMWvYblt63DiGmd32oMcnjzP7hy2GwhcDF5vxXWB/4F4zXgMuBK5x5+MoX4wkwYxlCff9LgVs7M7LkUsS1AnIAsxoMONk4H7gOmD9EACBe9MdjzGz7w/gmseY2be1XUHuvOzOL4FvAScTLvp4w4yLzNjEDKvRlyMJKH763xN4CngABUBScugEVoxdRBkUL8w7AmcDDwJrLOx0Rnf/kLCV70sVW3tvBm4245vAPsAFQBczLgIuc+edCn0JkiAzvkboKNcAtnPnicglyQLUCQhmfBv4G3AKsL87e1f6eF533nXndGA1YD9gJeAFDZPrlxnfJzz4NRn4ngIgTamHgGYCVWRGNzNOIJzOOA5Yy517q/k53XF3HnbnYMJy0fU0D5N/X8wiJGNmLGHGaGA0sI87R7ozK3Zd0rrUQ0CdQJWYMQR4FlgfWM+dU9z5Ty1rcGeGO5e4symwGfAp8HczHjLjQDOWrGU90nlmDCLc99ud8OBXVX+okM5L9tgIADOWAx5yZ9nYtdQLMxqBM4ANgZ+7c3Pkkj7HjK7AtsCBwBbAjYTdReO0jzxdxX2/vyHsCjvUnRsilyRtlEUnoN0knVc8nXkEYY12IrB6agEAYZjszi3u7AysAjxPGCa/ZMYvzOgXt0JZkBlrAI8BqxOWFBUAGUm6EwAwownoqz3mHWfGRsB5wPvA4e68FLmkdil+CNgQOADYlbB76ULgVnfmxKytbMx6rgADRkK/Rnj3HTj1ddj4YOAXwMXq1vKTQwi8TrhO7rXYteSm2J53CrA9cDQwJvdvUjMagN0IgfAdwlOnF7nzYtTCSiAEwE53w+j+0AA0AcfPgqW2dv/tg5HLkw5KfTkItEOo3czoYsYBwAvATGBVd67KPQAA3Gkqhsmb8flh8sNmHGRGz8gl1rEBI5sDAMKvv1sc7h4esyrpnBxCQDuE2sGMNQlPZR4CbOvOEe58FLmsqnDnX+4cByxHOIVyO+B1My42Y1PNkiqtX2NzAMzTAPRtjFGNVEYOIaBOoA3MWNKMM4GxwCXAIHf+Gbeq2mgxTN6FMEweD5wPvGzGL4sdUdJp70wOS0AtNQFTJseoRiojlxBQJ7AQxbkswwiXcS8FDHDnAnc+i1xaFMWTyWcQdqr8mHDsyHgzbjZj52Iro3TI+BEwfGJzEDQRfj9+RMyqpHNyGAwfD/QsDiSTFooz2f8E9CXszdZ9rK0ohsm7EobJq9A8TH4hamEZat4dtNUeMO56eOJY9+mTYtclHZdDCBwMbODOQbFrSUVxH+txwGHA74A/aqtk25ixMuGBpn2BNwhHG1/tzvSohWXGjCeAn7rzSOxapHNyWA7SFZMtmLEdYc17FWBtd85UALSdOxPcOR5YHhhJeDr5dTMuMWMzDZPbbAKwcuwipPNSP0oaNBMA5h+hMYpwJO9h7twZuaSsFcdc3wrcasY3gL0JD9Qt1uKY67dj1pg4hUCdUCeQODMWNeNYwoUcTxPO+VcAVJA7/3bnTGAAIQxWAJ4z4xYzdtEwuVUKgTqRQwiUthMwYzPCC/9gwlzkt+7MjlxW3SqOuX7UnZ8Qjrm+BjiCcMz1GWasFrfCpEwg3AkhmcthMNwF+A+weFnWvotbuE4jvPj/N3BDPTztm6timLxf8fYm4dyiUg+TzVgaeAXorb+beUu+Eyj2u08D+sSupdrMWMSMQ4HngHeB1dy5Xt9kcRXD5BMIw+TfEobJb5hxaYmHye8DTkm79HqSw2AYmucC78YupFrMWI8wmJwFbOnO+MglyQKKYfJtwG1mfJ0wPzgX6Fa2YbI7bjZ/LvBe7Hqk45LvBAp1Oxcwo7cZ5xAuZP8jsLkCIH3uvOfOWYTdWnvRPEy+tUTDZA2H60AuIVB3O4SK4x72IZz0aYSln8u09JOXYpj8WDFMXha4Gvg5zcPk1eNWWFUKgTqQSwjU1SFyxQvDPwg7T3Z05zB3PohblXSWOzOLIN8C2BiYDdxlxqNmHGLGUnErrDiFQB3IJQTq4jhpM5Yw41RCAFxN2Pb5eNyqpBrceaXFMPk3wNaEJ5MvNWPzOhkmKwTqQC4hkHUnUCz97Ey4L7eRcNLnue7MjVyaVFlxzPVt7uxKeMF8GjgHmGDG8WYsE7fCTpkArFwngVZauYRAtp2AGSsCtxAuPdnXnX3c63eXkyzcAsPkPQmX4cwbJv8ot2FysYT5CfDN2LVIx+USAtl1AmZ0M+NE4DHgfsJhb/+IW5WkoMUweThhmDwG+BnwlhlnmjEgboXtoieHM5dLCGTVCZgxlPDA17rA99w51Z3/RC5LElQMky8vhsmDCHdC31EMk3+SwTD5FTQXyFouIZBFJ2DGMmZcTbja8Ch3dnbn9dh1SR6KYfIIwjD5f4GhhGHyZWZskejau4bDmcslBKYCSyf6TYAZXc04EngG+Bdh8HtL5LIkU+7Mdef2FsPkpwgPEk4w4wQzlo1b4ecoBDKXRQi4MwuYAywZu5YFmbEx8CSwPbCxOye6MzNyWVInimHyKGBN4L8Ip5s+a8ZtZuyawDBZIZC55E8RnceMSYQzdV6NXQvMP0XxVMJhYkcB1+hpX6kFM3oAuwAHAqsDVxLuTH4uQi1LAW8DS+rvf56y6AQKScwFzOhixkGEPf/TgVXduVrfAFIrxTD5CncGAxsBTcDtZjxmxvBaDpPd+YgwzO5Xq88plZVTCETfIWTG2sA44ABgG3eOLPOZ8hKfOxNbDJN/BWxFGCZfXgyTa/E9riWhjOUUAtE6ATN6mjEKuBP4C7CJO0/HqEWkNcUw+Q53diPs23+S2g2TFQIZyy0EatoJFMc97AG8CCwBrO7OhcVFNyJJcmdqi2Hy7oQH0p414/ZimNytwp9SIZCxnEKgpsdJm/FdYCxwHLCbOwe5M7VWn1+ks4onk59w51BCEFwJHEY45vosM9ao0KfSU8MZyykEatIJmNHDjJGEtf9bCE/8PlTtzytSTS2GyVsCGwIzCDekPV4Mk3t14sPrqeGM5RQCVe8EzNiBsOtnJWAtd0YVVwqK1A13XnXnRMJtaCcCWwKTimHy4A4MkycA/Ws0hJYKy+WOYahiJ2DG8sDZwGrAIe6MrcbnEUlJcZT5HYSzipYmXJN5NtBgxsXApe682YaP87EZHxOOSX+rmjVL5eWU3BXvBMxYzIxfEnZSPAGsoQCQMiqGyWcDaxGGyY3A08Uwebc2DJM1HM5UTiFQ0U7AjMGEs342BQa6M9KdTyr18UVy1GKYfBjhiIorgEMJx1yPMmPNhfynCoFM5XRsRBfCBRY93JnTiY/TFzid8OJ/BHCTnvYV+XLF5Uj7AfsDU4CLgKvc+dCs5wow7Abo0QeeeADGj3CfPiletdIe2YQAgBnvEga2Uzrw3y5C+Inm14S/wCe5M6PCJYrUteL7aAjh3KKt4dl74Q8D4exGaCCcYDF8Itw0REGQh9xC4Hlgj/YelGXGQOA8wra4w9x5vhr1iZRJGCbvdzucs14IgHmagKFXuj+0d6zapO1ymglAO+cCZvQxYzRwEzAK2EIBIFIZ4eHJjz/+fABA+H3fxhg1SfvlFgJt2iFUHPewH/ACMBdYrbjCL5+2RyQL70wOP/m31ARMmRyjGmm/3ELgKw+RKy7pvh84HNjBncPd+aAWxYmUz/gRYQYwLwjmzQTGj4hZlbRdTg+LwZccJ23GEoSh736EI3X/XDwMIyJV4j59klnPITBxZFgCmjJZu4PyklsIvAd8p+U7inuHdwHOAu4l3O/7boTaREqpeMHXEDhT2YRA2Iu8wzDou7LZI71Cuzm9K+HM9OWAfdy5L26VIiJ5yWKLaAiAne6G0f2b9yIfMw3+x2DFk4FRnXmATESkrDIJgUFXwNi9vrgXeecb3O/aJVZdIiK5y2R3UL/G1vciL9GZM9BFREovkxDQXmQRkWrIJAS0F1lEpBqymAnAvOHwAO1FFhGpoGxCQEREKi+T5SAREakGhYCISIkpBERESkwhICJSYgoBEZESUwiIiJSYQkBEpMQUAiIiJaYQEBEpMYWAiEiJKQREREpMISAiUmIKARGRElMIiIiUmEJARKTEFAIiIiWmEBARKTGFgIhIiSkERERKTCEgIlJiCgERkRJTCIiIlJhCQESkxBQCIiIlphAQESkxhYCISIkpBERESkwhICJSYgoBEZESUwiIiJSYQkBEpMQUAiIiJaYQEBEpMYWAiEiJKQREREpMISAiUmL/DyEyXmQk5TkkAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "do(rep_nn_tsp, Cities(10))" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rep_nn: 1998 cities ⇒ tour length 32382 (in 12.480 sec)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "do(rep_nn_tsp, Cities(2000))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That's encouraging; it found the optimal tour for `Cities(10)` and it improved the `Cities(2000)` tour by 4%, although it does take *k* times longer to run. \n", + "\n", + "# Real Cities" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Random cities are boring to look at; I thought it would be fun to work on some *real* cities. I found a web page (now 404, but a copy is [here](https://raw.githubusercontent.com/norvig/pytudes/master/data/latlong.htm)) that lists coordinates of over 10,000 cities in the USA, in this format:\n", + "\n", + " [TCL] 33.23 87.62 Tuscaloosa,AL\n", + " [FLG] 35.13 111.67 Flagstaff,AZ\n", + " [PHX] 33.43 112.02 Phoenix,AZ\n", + "\n", + "I define the function `parse_cities` to take an iterable of lines and build a `City` out of each line that matches the format (excluding Alaska and Hawaii)." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "def continental_USA(line): \n", + " \"Is this a line of the form '[TLA] long lat City,ST'?\"\n", + " return line.startswith('[') and ',AK' not in line and ',HI' not in line\n", + " \n", + "def parse_cities(lines, keep=continental_USA, long_scale=-48, lat_scale=69):\n", + " \"\"\"Make a set of Cities from lines of text.\"\"\"\n", + " return frozenset(City(long_scale * ncol(line, 2), lat_scale * ncol(line, 1))\n", + " for line in lines if keep(line))\n", + "\n", + "def ncol(line, n): \"The number in the nth column\"; return float(line.split()[n])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You might be wondering about the `long_scale=-48, lat_scale=69` part. The issue is that we have latitude and longitude for cities, and we want to compute the distance between cities. To do that accurately requires [complicated trigonometry](http://en.wikipedia.org/wiki/Haversine_formula). But we can get an approximation by assuming that latitude and longitude are on a flat rectangular grid. (This is a bad approximation if you're talking about distances of 10,000 miles, but close enough for distances of 100 miles, as long as you're not too near the poles.) I took the latitude of the center of the USA (Wichita, KS: latitude 37.65) and plugged it into a [Length Of A Degree Of Latitude\n", + "And Longitude Calculator](http://www.csgnetwork.com/degreelenllavcalc.html) to find that, in Wichita, one degree of latitude is 69 miles, and one degree of longitude is 48 miles. (It is -48 rather than +48 because the USA is west of the prime meridian.) \n", + "\n", + "I also found a [blog post](http://www.randalolson.com/2015/03/08/computing-the-optimal-road-trip-across-the-u-s/) by Randal S. Olson, who chose 50 landmarks across the USA and found a tour based on actual road-travel distances, not straight-line distance; I would need a new `distance` function to handle that. William Cook provides an\n", + "analysis, and a [tour that is shorter](http://www.math.uwaterloo.ca/tsp/usa50/index.html) than Randal's.\n", + "\n", + "Now let's fetch the file (with a shell command); parse it; and find a baseline nearest neighbor tour:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "! [ -e latlong.htm ] || curl -O https://raw.githubusercontent.com/norvig/pytudes/master/data/latlong.htm" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nn: 1089 cities ⇒ tour length 52879 (in 0.158 sec)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "USA = parse_cities(open('latlong.htm'))\n", + "\n", + "do(nn_tsp, USA)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Improving Bad Links\n", + "\n", + "There are some obviously bad (long) links in this tour. \n", + "To understand the problem and how we might fix it, consider this simpler tour:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nn: 10 cities ⇒ tour length 17 (in 0.000 sec)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cities10 = {City(x, 1) for x in range(0, 5)} | {City(x - 1.49, 0) for x in range(5, 10)}\n", + "\n", + "do(nn_tsp, cities10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Starting at the upper left, the tour goes to the right, picking up the 5 cities in a line, jogs downward, and continues to the right, picking up the remaining 5 cities. But then it has a long diagonal link back to the start. Once you've seen this type of configuration a few times it becomes clear: *any time a tour has an \"X\" where two links cross, we can shorten the tour by uncrossing the \"X\".* \n", + "\n", + "You can think of uncrossing the X as deleting two links and adding two new ones. Or you can think of it as **reversing a segment**: this tour visits the bottom 5 cities in left-to-right order; let's reverse that segment and visit them in right-to-left order:" ] }, { "cell_type": "code", "execution_count": 23, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { - "image/png": "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\ngg==\n", "text/plain": [ - "" + "15.299342436137655" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "8 city tour with length 2509.3 in 0.018 secs for alltours_tsp\n" - ] } ], "source": [ - "plot_tsp(alltours_tsp, Cities(8))" + "tour = nn_tsp(cities10)\n", + "\n", + "tour[5:10] = reversed(tour[5:10])\n", + "\n", + "plot_tour(tour)\n", + "tour_length(tour)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now let's try a much harder 10-city tour:" + "That's an improvement! \n", + "\n", + "Below is a diagram to explain why uncrossing the X is *always* an improvement. Below the crossed lines that we will remove are dotted blue; the lines we will add are dashed red. We can see that two red-and-blue triangles are formed, and by the [triangle inequality](https://en.wikipedia.org/wiki/Triangle_inequality) each red line is shorter than the two parts of the blue lines that make up the rest of the triangle." ] }, { "cell_type": "code", "execution_count": 24, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { - "image/png": "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\nAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10 city tour with length 2291.8 in 1.636 secs for alltours_tsp\n" - ] } ], "source": [ - "plot_tsp(alltours_tsp, Cities(10))" + "plot_tour([tour[4], tour[5]], 'r--'); plot_tour([tour[5], tour[0]], 'b:')\n", + "plot_tour([tour[0], tour[9]], 'r--'); plot_tour([tour[9], tour[4]], 'b:')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Complexity of `alltours_tsp`\n", - "---\n", + "It is difficult to get nearest neighbors to avoid mistakes (like crossing an X), because in the middle of the tour, when the algorithm is forced to make a choice, it doesn't know where the rest of the tour will end up. So, rather than tackling the difficult task of *avoiding* the mistakes, the **iterative improvement strategy** says to go ahead and make mistakes, finish the tour, and then do the much easier task of *fixing* the mistakes. Why is it easier to fix the mistakes? Because we can see the whole tour, so we can propose a change and get a definitive answer: either the change makes the whole tour shorter or it doesn't. The strategy is called *iterative* because we do multiple improvements, if possible.\n", "\n", - "It takes about 2 seconds on my machine to solve this 10-city problem. In general, the function `TSP` looks at (*n*-1)! tours for an *n*-city problem, and each tour has *n* cities, so the total time required for *n* cities should be roughly proportional to *n*!. This means that the time grows rapidly with the number of cities. *Really* rapidly. This table shows the actual time for solving a 10 city problem, and the exepcted time for solving larger problems:\n", - "\n", - "\n", - "
n expected time for `alltours_tsp(Cities(n))`\n", - "
10Covering 10! tours = 2 secs\n", - "
112 secs × 11! / 10! ≈ 22 secs\n", - "
122 secs × 12! / 10! ≈ 4 mins\n", - "
142 secs × 14! / 10! ≈ 13 hours\n", - "
162 secs × 16! / 10! ≈ 200 days\n", - "
182 secs × 18! / 10! ≈ 112 years\n", - "
252 secs × 25! / 10! ≈ 270 billion years\n", - "
\n", - "\n", - "There must be a better way ..." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Approximate Algorithms" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What if we are willing to settle for a tour that is short, but not guaranteed to be shortest? Then we can save billions of years of compute time: we will show several *approximate* algorithms, which find tours that are typically within 10% of the shortest possible tour, and can handle thousands of cities in a few seconds. (**Note:** There are more sophisticated approximate algorithms that can handle hundreds of thousands of cities and come within 0.01% or better of the shortest possible tour.)\n", - "\n", - "So how do we come up with an approximate algorithm? Here are two general plans of how to create a tour:\n", - "\n", - "* **Nearest Neighbor Algorithm**: Make the tour go from a city to its nearest neighbor. Repeat.\n", - "* **Greedy Algorithm**: Find the shortest distance between any two cities and include that edge in the tour. Repeat.\n", - "\n", - "We will expand these ideas into full algorithms.\n", - "\n", - "In addition, here are four very general strategies that apply not just to TSP, but to any optimization problem. An **optimization problem** is one in which the goal is to find a solution that is best (or near-best) according to some metric,\n", - "out of a pool of many candidate solutions. The strategies are:\n", - "\n", - "* **Repetition Strategy**: Take some algorithm and re-run it multiple times, varying some aspect each time, and take the solution with the best score.\n", - "* **Alteration Strategy**: Use some algorithm to create a solution, then make small changes to the solution to improve it.\n", - "* **Ensemble Strategy**: Take two or more algorithms, apply all of them to the problem, and pick the best solution.\n", - "\n", - "And here are two more strategies that work for a wide variety of problems:\n", - "\n", - "* **Divide and Conquer**: Split the input in half, solve the problem for each half, and then combine the two partial solutions.\n", - "\n", - "* **Stand on the Shoulders of Giants** *or* **Just Google It**: Find out what others have done in the past, and either copy it or build on it." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Nearest Neighbor Algorithm: `nn_tsp`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here is a description of the nearest neighbor algorithm:\n", - "\n", - "> **Nearest Neighbor Algorithm:** *Start at any city; at each step extend the tour by moving from the previous city to its nearest neighbor that has not yet been visited.*\n", - "\n", - "So now, instead of considering all *n*! tours, we are generating a single tour. It takes O(*n*2 ) time to find the tour, because it has *n*-1 steps, and at each step we consider each of the remaining cities.\n", - "I implement the algorithm as follows:\n", - "\n", - "* \"*Start at any city*\": arbitrarily pick the first city. \n", - "* \"*extend the tour*\": append to the end of a list of cities.\n", - "* \"*by moving from the previous city*\": previous city is `tour[-1]`.\n", - "* \"*to its nearest neighbor*\": I will define the function `nearest_neighbor`.\n", - "* \"*that has not yet been visited*\": I will keep a set of `unvisited` cities.\n", - "\n", - "That gives us:" + "The changes we propose will all consist of reversing segments; here is how we can check if reversing an arbitrary segment would be an improvement, and if it is, go ahead and do the reversal:" ] }, { "cell_type": "code", "execution_count": 25, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "def nn_tsp(cities):\n", - " \"\"\"Start the tour at the first city; at each step extend the tour \n", - " by moving from the previous city to the nearest neighboring city, C,\n", - " that has not yet been visited.\"\"\"\n", - " start = first(cities)\n", - " tour = [start]\n", - " unvisited = set(cities - {start})\n", - " while unvisited:\n", - " C = nearest_neighbor(tour[-1], unvisited)\n", - " tour.append(C)\n", - " unvisited.remove(C)\n", - " return tour\n", - "\n", - "def nearest_neighbor(A, cities):\n", - " \"Find the city in cities that is nearest to city A.\"\n", - " return min(cities, key=lambda c: distance(c, A))" + "def reverse_segment_if_improvement(tour, i, j):\n", + " \"If reversing tour[i:j] would make the tour shorter, then do it.\" \n", + " # Given tour [...A,B...C,D...], consider reversing B...C to get [...A,C...B,D...]\n", + " A, B, C, D = tour[i-1], tour[i], tour[j-1], tour[j % len(tour)]\n", + " # Are old links (AB + CD) longer than new ones (AC + BD)? If so, reverse segment.\n", + " if distance(A, B) + distance(C, D) > distance(A, C) + distance(B, D):\n", + " tour[i:j] = reversed(tour[i:j])\n", + " return True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**Note:** In Python, as in the formal mathematical theory of computability, `lambda` (or λ) is the symbol for *function*, so \"`lambda c: distance(c, A)`\" means the function of `c` that computes the distance from `c` to the city `A`. \n", - "\n", - "We can compare the the slow (but optimal) `alltours_tsp` algorithm to the new fast (but approximate) `nn_tsp` algorithm:" + "Now I'll define `improve_tour` to consider various segments, and reverse the ones that improve the tour. What segments should we consider? I don't know how to be clever about that, but I do know how to use **brute force**: try every subsegment. (I have an intuition (from experience with [simulated annealing](https://en.wikipedia.org/wiki/Simulated_annealing)) that trying longer subsegments first would be better, so I'll write `subsegments` that way.) After I've tried all segments, if one of them did improve the tour that might open up new possibilities, so I'll repeat the process until there are no improvements, then return the improved tour:" ] }, { "cell_type": "code", "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10 city tour with length 2291.8 in 1.681 secs for alltours_tsp\n" - ] - } - ], + "metadata": {}, + "outputs": [], "source": [ - "plot_tsp(alltours_tsp, Cities(10))" + "def improve_tour(tour):\n", + " \"Try to alter tour for the better by reversing segments.\"\n", + " while True:\n", + " improvements = {reverse_segment_if_improvement(tour, i, j)\n", + " for (i, j) in subsegments(len(tour))}\n", + " if improvements == {None}:\n", + " return tour\n", + "\n", + "@cache()\n", + "def subsegments(N):\n", + " \"Return (i, j) pairs denoting tour[i:j] subsegments of a tour of length N.\"\n", + " return [(i, i + length)\n", + " for length in reversed(range(2, N))\n", + " for i in reversed(range(N - length + 1))]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are all the subsegments of a 5 city tour:" ] }, { "cell_type": "code", "execution_count": 27, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", "text/plain": [ - "" + "[(1, 5), (0, 4), (2, 5), (1, 4), (0, 3), (3, 5), (2, 4), (1, 3), (0, 2)]" ] }, + "execution_count": 27, "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10 city tour with length 2381.4 in 0.000 secs for nn_tsp\n" - ] + "output_type": "execute_result" } ], "source": [ - "plot_tsp(nn_tsp, Cities(10))" + "subsegments(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "So the nearest neighbor algorithm is a lot faster, but it didn't find the shortest tour. To understand where it went wrong, it would be helpful to know what city it started from. I can modify `plot_tour` by adding one line of code to highlight the start city with a red square:" + "# Improved Nearest Neighbor Algorithms\n", + "\n", + "Here are two ways of improving nearest neighbor algorithms—either improve the single nearest neighbor algorithm, or improve each candidate tour from the repetitive nearest neighbor algorithm:" ] }, { "cell_type": "code", "execution_count": 28, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "def plot_tour(tour):\n", - " \"Plot the cities as circles and the tour as lines between them. Start city is red square.\"\n", - " start = tour[0]\n", - " plot_lines(list(tour) + [start])\n", - " plot_lines([start], 'rs') # Mark the start city with a red square" + "def improve_nn_tsp(cities): \n", + " \"Improve the tour produced by nn_tsp.\"\n", + " return improve_tour(nn_tsp(cities))\n", + "\n", + "def rep_improve_nn_tsp(cities, k=5):\n", + " \"Run nn_tsp from k different starts, improve each tour; keep the best.\"\n", + " return shortest_tour(improve_tour(nn_tsp(cities, start)) \n", + " for start in sample(cities, k))" ] }, { "cell_type": "code", "execution_count": 29, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, { "name": "stdout", "output_type": "stream", "text": [ - "10 city tour with length 2381.4 in 0.000 secs for nn_tsp\n" + "improve_nn: 10 cities ⇒ tour length 15 (in 0.000 sec)\n" ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "plot_tsp(nn_tsp, Cities(10))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can see that the tour moves clockwise from the start city, and mostly makes good decisions, but not optimal ones.\n", - "\n", - "We can compare the performance of these two algorithms on, say, eleven different sets of cities instead of just one:" + "do(improve_nn_tsp, cities10)" ] }, { "cell_type": "code", "execution_count": 30, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "improve_nn: 1089 cities ⇒ tour length 45489 (in 2.571 sec)\n" + ] + }, { "data": { + "image/png": "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\n", "text/plain": [ - "[1.0,\n", - " 1.0,\n", - " 1.0,\n", - " 1.0,\n", - " 1.0118279018107388,\n", - " 1.0121039193389436,\n", - " 1.107851821362778,\n", - " 1.139713084817861,\n", - " 1.1531140497779002,\n", - " 1.1972133336642432,\n", - " 1.2160497559961319]" + "" ] }, - "execution_count": 30, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "def length_ratio(cities): \n", - " \"The ratio of the tour lengths for nn_tsp and alltours_tsp algorithms.\"\n", - " return tour_length(nn_tsp(cities)) / tour_length(alltours_tsp(cities))\n", - "\n", - "sorted(length_ratio(Cities(8, seed=i*i)) for i in range(11))" + "do(improve_nn_tsp, USA)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The ratio of `1.0` means the two algorithms got the same (optimal) result; that happened 4 times out of 10. The other times, we see that the `nn_tsp` produces a longer tour, by anything up to 21% worse, with a median of 1% worse.\n", - "\n", - "But more important than that 1% (or even 21%) difference is that the nearest neighbor algorithm can quickly tackle problems that the all tours algorithm can't touch in the lifetime of the universe. Finding a tour of 1000 cities takes well under a second:" + "Not bad! A single call to `improve_tour` fixes the `cities10` problem, and on the USA map, uncrosses every X and saves over 7000 miles of travel! Let's try repetitions:" ] }, { "cell_type": "code", "execution_count": 31, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, { "name": "stdout", "output_type": "stream", "text": [ - "1000 city tour with length 21275.9 in 0.145 secs for nn_tsp\n" + "rep_improve_nn: 1089 cities ⇒ tour length 44500 (in 15.181 sec)\n" ] + }, + { + "data": { + "image/png": "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0rSBLDOBsSIz3TvCycAEYktBRwIjl2Y9SxFp0RQEiohI1oKKoeWDYHGDSqL5nptICxPCctBo4/lPgBuJrwqqL2dEREGgiIiEJBLwqQiMSHZCWA4abTzfDjibWCZw7kfwsir2ioiCQBEREZECkvVy0Nge3XbEisLUAjNmKgAUEVBhGBEREZFCEsJy0OqJULkhviBM5Ybg9yIiygSKiIiIFJKvgU3MaOXOxsyGqKiE0W3iC8KMbgOLKwE1iBcRBYEiIiIihcIdN2MDwb7ArzIbpUtX2J1Yb8Ao9e0UkYCWg4qIiIgUliyLw7RCfTtFpDEKAkVEREQKS8bFYcw4HK7tA+e8X29PoFpDiMi3zN3zPQcRERERiTDjI2BPd1am+bgfAfcAP4HylUG/QPXtFJGGtCdQREREpLCkvRzUjMMIAsCj3XkBakB9O0UkCS0HFRERESksaS0HNeOHwN+AIe48n7NZiUjRUBAoIiIiUlhS7hVoxiBgEnCMO/NzOisRKRoKAkVEREQKS0rLQc04FJgMDHXnuZzPSkSKhoJAERERkcLS5HJQMwYC9wHHuqsBvIikR0GgiIiISGFpNBNoxgDgfuA4d+Y126xEpGgoCBQREREpLEkzgWYcAkwBjndnbnNOSkSKh1pEiIiIiBSWhIVhzDgYeBAY5s6cZp+ViBQNZQJFRERECkuD5aBmHEQQAJ7gzuy8zEpEioaCQBEREZHCErcc1IwDgYeAk9yZlbdZiUjRMHfP9xxEREREJMKs+km4sgzWfw0bN8Dv94aeJ7ozM99zE5HioD2BIiIiIgXCrPwAOOaHcEdraAfUAr/+EB54F2ryPT0RKRLKBIqIiIgUALPy7tD3dZhaFgSAUbXA4Hvd54/I09REpMhoT6CIiIhIQagYB33rBYAQ/Ltz13zMSESKk4JAERERkYLQpWtQFLS23u9rgZUf5mFCIlKkFASKiIiIFIQVH8IwYCyxQLAWGLUGqqvyNy8RKTbaEygiIiJSAII9gUfPhNG94AGCThEL1sCCI9xrns3z9ESkiCgIFBERESkQQSBYMS7YA7jyQ6iucq9Zlu95iUhxURAoIiIiIiJSQrQnUEREREREpIQoCBQRERERESkhCgJFRERERERKiIJAERERERGREqIgUEREREREpIQoCBQRERERESkhCgJFRERERERKiIJAERERERGREqIgUEREREREpIQoCBQRERERESkhCgJFRERERERKiIJAERERERGREqIgUEREREREpIQoCBQRERERESkhCgJFRERERERKiIJAERERERGREqIgUEREREREpIQoCBQRERERESkhCgJFRERERERKiIJAERERERGREqIgUEREREREpIQoCBQRERERESkhCgJFRERERERKiIJAERERERGREqIgUEREREREpIQoCBQRERERESkhCgJFRERERERKiIJAERERERGREqIgUEREREREpIQoCBQRERERESkhCgJFRERERERKiIJAERERERGREqIgUEREREREpIQoCBQRERERESkhCgJFRERERERKiIJAERERERGREqIgUEREREREpIQoCBQRERERESkhCgJFRERERERKiIJAERERERGREj48UvcAAAAaSURBVKIgUEREREREpIQoCBQRERERESkh/w8x2WMS3n+D4wAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "plot_tsp(nn_tsp, Cities(1000))" + "do(rep_improve_nn_tsp, USA)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Can we do better? Can we combine the speed of the nearest neighbor algorithm with the optimality of the all tours algorithm? \n", - "\n", - "Let's consider where `nn_tsp` can go wrong. At the end of `plot_tsp(nn_tsp, Cities(10))`, we see a very long edge, because there are no remaining cities near by. In a way, this just seems like bad luck—we started in a place that left us with no good choices at the end. Just as with buying lottery tickets, we could improve our chance of winning by trying more often; in other words, by using the **repetition strategy**." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Repeated Nearest Neighbor Algorithm: `repeated_nn_tsp`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here is an easy way to apply the **repetition** strategy to improve **nearest neighbors**:\n", - "\n", - "> **Repeated Nearest Neighbor Algorithm:** *For each of the cities, run the nearest neighbor algorithm with that city as the starting point, and choose the resulting tour with the shortest total distance.*\n", - "\n", - "So, with *n* cities we could run the `nn_tsp` algorithm *n* times, regrettably making the total run time *n* times longer, but hopefully making at least one of the *n* tours shorter. \n", - "\n", - "To implement `repeated_nn_tsp` we just take the shortest tour over all starting cities:" + "Even better! Could we do better still by trying more repetitions? Maybe, but there's a problem: `do` doesn't accept extra arguments, so I have no place to change `rep_improve_nn_tsp`'s optional *k* parameter from the default value of 5. I could modify `do`, but instead I'll define a [higher-order function](https://en.wikipedia.org/wiki/Higher-order_function), `bind`, so that `bind(rep_improve_nn_tsp, 5)` creates a new function, that, when called with the argument `cities`, calls `rep_improve_nn_tsp(cities, 5)`. (My `bind` does the same job as `functools.partial`, but also sets the function name of the newly created function.)" ] }, { "cell_type": "code", "execution_count": 32, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "def repeated_nn_tsp(cities):\n", - " \"Repeat the nn_tsp algorithm starting from each city; return the shortest tour.\"\n", - " return shortest_tour(nn_tsp(cities, start) \n", - " for start in cities)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To do that requires a modification of `nn_tsp` so that the `start` city can be specified as an optional argument:" + "@cache()\n", + "def bind(fn, *extra):\n", + " \"Bind extra arguments; also assign .__name__\"\n", + " newfn = lambda *args: fn(*args, *extra)\n", + " newfn.__name__ = fn.__name__ + ''.join(', ' + str(x) for x in extra)\n", + " return newfn" ] }, { "cell_type": "code", "execution_count": 33, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def nn_tsp(cities, start=None):\n", - " \"\"\"Start the tour at the first city; at each step extend the tour \n", - " by moving from the previous city to its nearest neighbor \n", - " that has not yet been visited.\"\"\"\n", - " if start is None: start = first(cities)\n", - " tour = [start]\n", - " unvisited = set(cities - {start})\n", - " while unvisited:\n", - " C = nearest_neighbor(tour[-1], unvisited)\n", - " tour.append(C)\n", - " unvisited.remove(C)\n", - " return tour" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nFBH/D6i9NWsGaMGjAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "100 city tour with length 6734.1 in 0.002 secs for nn_tsp\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "100 city tour with length 5912.6 in 0.157 secs for repeated_nn_tsp\n" - ] - } - ], - "source": [ - "# Compare nn_tsp to repeated_nn_tsp\n", - "plot_tsp(nn_tsp, Cities(100))\n", - "plot_tsp(repeated_nn_tsp, Cities(100))" - ] - }, - { - "cell_type": "markdown", "metadata": {}, - "source": [ - "We see that `repeated_nn_tsp` does indeed take longer to run, and yields a tour that is shorter. \n", - "\n", - "Let's try again with a smaller map that makes it easier to visualize the tours:" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10 city tour with length 2381.4 in 0.000 secs for nn_tsp\n" - ] - }, - { - "data": { - "image/png": "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\nSEoUsCIiKfl/otWLcOBvkAEAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10 city tour with length 2297.7 in 0.000 secs for repeated_nn_tsp\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10 city tour with length 2291.8 in 1.619 secs for alltours_tsp\n" - ] - } - ], - "source": [ - "for f in [nn_tsp, repeated_nn_tsp, alltours_tsp]:\n", - " plot_tsp(f, Cities(10))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This time the `repeated_nn_tsp` gives us a tour that is better than `nn_tsp`, but not quite optimal. So, it looks like repetition is helping. But if I want to tackle 1000 cities, I don't really want the run time to be 1000 times slower. I'd like a way to moderate the repetition—to repeat the `nn_tsp` starting from *a sample* of the cities but not *all* the cities.\n", - "\n", - "# Sampled Repeated Nearest Neighbor Algorithm: revised `repeated_nn_tsp`\n", - "\n", - "\n", - "We can give `repeated_nn_tsp` an optional argument specifying the number of different cities to try starting from. We will implement the function `sample` to draw a random sample of the specified size from all the cities. Most of the work is done by the standard library function `random.sample`. What our `sample` adds is the same thing we did with the function `Cities`: we ensure that the function returns the same result each time for the same arguments, but can return different results if a `seed` parameter is passed in. (In addition, if the sample size, `k` is `None` or is larger than the population, then return the whole population.)" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def repeated_nn_tsp(cities, repetitions=100):\n", - " \"Repeat the nn_tsp algorithm starting from specified number of cities; return the shortest tour.\"\n", - " return shortest_tour(nn_tsp(cities, start) \n", - " for start in sample(cities, repetitions))\n", - "\n", - "def sample(population, k, seed=42):\n", - " \"Return a list of k elements sampled from population. Set random.seed with seed.\"\n", - " if k is None or k > len(population): \n", - " return population\n", - " random.seed(len(population) * k * seed)\n", - " return random.sample(population, k)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's compare with 1, 10, and 100 starting cities on a 300 city map:" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def repeat_10_nn_tsp(cities): return repeated_nn_tsp(cities, 10)\n", - "def repeat_100_nn_tsp(cities): return repeated_nn_tsp(cities, 100)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "299 city tour with length 12752.7 in 0.014 secs for nn_tsp\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "299 city tour with length 12070.6 in 0.127 secs for repeat_10_nn_tsp\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "299 city tour with length 11598.6 in 1.285 secs for repeat_100_nn_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(nn_tsp, Cities(300))\n", - "plot_tsp(repeat_10_nn_tsp, Cities(300))\n", - "plot_tsp(repeat_100_nn_tsp, Cities(300))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As we add more starting cities, the run times get longer and the tours get shorter.\n", - "\n", - "I'd like to understand the tradefoff better. I'd like to have a way to compare different algorithms (or different choices of parameters for one algorithm) over *multiple* trials, and summarize the results. That means we now have a new vocabulary item:\n", - "\n", - "# New Vocabulary: \"Maps\"\n", - "\n", - "\n", - "We use the term *cities* and the function `Cities` to denote a set of cities. But now I want to talk about multiple trials over a collection of sets of cities: a plural of a plural. English doesn't give us a good way to do that, so it would be nice to have a *singular* noun that is a synonym for \"set of cities.\" We'll use the term \"map\" for this, and the function `Maps` to create a collection of maps. Just like `Cities`, the function `Maps` will give the same result every time it is called with the same arguments." - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def Maps(num_maps, num_cities):\n", - " \"Return a tuple of maps, each consisting of the given number of cities.\"\n", - " return tuple(Cities(num_cities, seed=(m, num_cities))\n", - " for m in range(num_maps))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Benchmarking\n", - "\n", - "The term *benchmarking* means running a function on a standard collection of inputs, in order to compare its performance. We'll define a general-purpose function, `benchmark`, which takes a function and a collection of inputs for that function, and runs the function on each of the inputs. It then returns two values: the average time taken per input, and the list of results of the function." - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "@functools.lru_cache(None)\n", - "def benchmark(function, inputs):\n", - " \"Run function on all the inputs; return pair of (average_time_taken, results).\"\n", - " t0 = time.clock()\n", - " results = [function(x) for x in inputs]\n", - " t1 = time.clock()\n", - " average_time = (t1 - t0) / len(inputs)\n", - " return (average_time, results)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note: Each time we develop a new algorithm, we would like to compare its performance to some standard old algorithms.\n", - "The use of `@functools.lru_cache` here means that we don't need to to re-run the old algorithms on a standard data set each time; we can just cache the old results. \n", - "\n", - "We can use `benchmark` to see the average call to the absolute value function takes less than a microsecond:" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(5.00000000069889e-07,\n", - " [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "benchmark(abs, range(-10, 10))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And we can see that `alltours_tsp` can handle 6-city maps in under a millisecond each:" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(0.00032370000000003785,\n", - " [[(574+214j), (236+141j), (556+348j), (677+277j), (833+33j), (578+224j)],\n", - " [(433+6j), (396+143j), (527+431j), (167+227j), (113+100j), (127+105j)],\n", - " [(571+206j), (724+42j), (703+269j), (797+331j), (543+474j), (310+248j)],\n", - " [(12+30j), (344+45j), (693+77j), (548+186j), (279+508j), (171+229j)],\n", - " [(243+271j), (379+72j), (859+331j), (840+411j), (651+478j), (8+369j)],\n", - " [(672+502j), (820+460j), (887+489j), (853+65j), (422+69j), (433+135j)],\n", - " [(38+119j), (644+90j), (622+288j), (602+511j), (509+424j), (275+536j)],\n", - " [(18+208j), (832+456j), (483+477j), (314+533j), (314+539j), (23+596j)],\n", - " [(274+560j), (213+594j), (248+84j), (550+317j), (508+577j), (377+575j)],\n", - " [(813+467j), (438+216j), (270+118j), (71+18j), (125+320j), (199+578j)]])" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "benchmark(alltours_tsp, Maps(10, 6))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Benchmarking Specifically for TSP Algorithms\n", - "\n", - "Now let's add another function, `benchmarks`, which builds on `benchmark` in two ways:\n", - "\n", - "1. It compares multiple algorithms, rather than just running one algorithm. (Hence the plural `benchmarks`.)\n", - "2. It is specific to `TSP` algorithms, and rather than returning results, it prints summary statistics: the mean, standard deviation, min, and max of tour lengths, as well as the time taken and the number and size of the sets of cities." - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def benchmarks(tsp_algorithms, maps=Maps(30, 60)):\n", - " \"Print benchmark statistics for each of the algorithms.\" \n", - " for tsp in tsp_algorithms:\n", - " time, results = benchmark(tsp, maps)\n", - " lengths = [tour_length(r) for r in results]\n", - " print(\"{:>25} |{:7.0f} ±{:4.0f} ({:5.0f} to {:5.0f}) |{:7.3f} secs/map | {} ⨉ {}-city maps\"\n", - " .format(tsp.__name__, mean(lengths), stdev(lengths), min(lengths), max(lengths),\n", - " time, len(maps), len(maps[0])))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "How Many Starting Cities is best for `nn_tsp`?\n", - "---\n", - "\n", - "Now we are in a position to gain some insight into how many repetitions, or starting cities, we need to get a good result from `nn_tsp`." - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def repeat_25_nn_tsp(cities): return repeated_nn_tsp(cities, 25)\n", - "def repeat_50_nn_tsp(cities): return repeated_nn_tsp(cities, 50)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " nn_tsp | 5668 ± 488 ( 4674 to 6832) | 0.001 secs/map | 30 ⨉ 60-city maps\n", - " repeat_10_nn_tsp | 5232 ± 374 ( 4577 to 6172) | 0.006 secs/map | 30 ⨉ 60-city maps\n", - " repeat_25_nn_tsp | 5159 ± 394 ( 4620 to 6069) | 0.014 secs/map | 30 ⨉ 60-city maps\n", - " repeat_50_nn_tsp | 5118 ± 386 ( 4512 to 6069) | 0.029 secs/map | 30 ⨉ 60-city maps\n", - " repeat_100_nn_tsp | 5113 ± 384 ( 4512 to 6069) | 0.034 secs/map | 30 ⨉ 60-city maps\n" + "rep_improve_nn, 10: 1089 cities ⇒ tour length 44418 (in 32.362 sec)\n" ] - } - ], - "source": [ - "algorithms = [nn_tsp, repeat_10_nn_tsp, repeat_25_nn_tsp, repeat_50_nn_tsp, repeat_100_nn_tsp]\n", - "\n", - "benchmarks(algorithms, Maps(30, 60))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We see that adding more starting cities results in shorter tours, but you start getting diminishing returns after 50 repetitions.\n", - "\n", - "Let's try again with bigger maps:" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " nn_tsp | 7789 ± 458 ( 6877 to 8632) | 0.002 secs/map | 30 ⨉ 120-city maps\n", - " repeat_10_nn_tsp | 7316 ± 334 ( 6646 to 7870) | 0.021 secs/map | 30 ⨉ 120-city maps\n", - " repeat_25_nn_tsp | 7242 ± 287 ( 6725 to 7870) | 0.053 secs/map | 30 ⨉ 120-city maps\n", - " repeat_50_nn_tsp | 7189 ± 295 ( 6646 to 7742) | 0.106 secs/map | 30 ⨉ 120-city maps\n", - " repeat_100_nn_tsp | 7173 ± 289 ( 6646 to 7736) | 0.213 secs/map | 30 ⨉ 120-city maps\n" - ] - } - ], - "source": [ - "benchmarks(algorithms, Maps(30, 120))" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " nn_tsp | 8668 ± 485 ( 7183 to 9636) | 0.003 secs/map | 30 ⨉ 150-city maps\n", - " repeat_10_nn_tsp | 8220 ± 364 ( 7290 to 9197) | 0.033 secs/map | 30 ⨉ 150-city maps\n", - " repeat_25_nn_tsp | 8117 ± 326 ( 7222 to 8918) | 0.083 secs/map | 30 ⨉ 150-city maps\n", - " repeat_50_nn_tsp | 8086 ± 300 ( 7237 to 8676) | 0.166 secs/map | 30 ⨉ 150-city maps\n", - " repeat_100_nn_tsp | 8062 ± 284 ( 7174 to 8603) | 0.331 secs/map | 30 ⨉ 150-city maps\n" - ] - } - ], - "source": [ - "benchmarks(algorithms, Maps(30, 150))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The results are similar. So depending on what your priorities are (run time versus tour length), somewhere around 25 or 50 repetitions might be a good tradeoff.\n", - "\n", - "Next let's try to analyze where nearest neighbors goes wrong, and see if we can do something about it." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# A Problem with Nearest Neighbors: Outliers" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Consider the 20-city map that we build below:" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "outliers_list = [City(2, 2), City(2, 3), City(2, 4), City(2, 5), City(2, 6), \n", - " City(3, 6), City(4, 6), City(5, 6), City(6, 6), \n", - " City(6, 5), City(6, 4), City(6, 3), City(6, 2), \n", - " City(5, 2), City(4, 2), City(3, 2), \n", - " City(1, 6.8), City(7.8, 6.4), City(7, 1.2), City(0.2, 2.8)]\n", - "\n", - "outliers = set(outliers_list)\n", - "\n", - "plot_lines(outliers, 'bo')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's see what a nearest neighbor search does on this map:" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "20 city tour with length 38.8 in 0.000 secs for nn_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(nn_tsp, outliers)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The tour starts out going around the inner square. But then we are left with long lines to pick up the outliers. \n", - "Let's try to understand what went wrong. First we'll create a new tool to draw better diagrams:" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def plot_labeled_lines(points, *args):\n", - " \"\"\"Plot individual points, labeled with an index number.\n", - " Then, args describe lines to draw between those points.\n", - " An arg can be a matplotlib style, like 'ro--', which sets the style until changed,\n", - " or it can be a list of indexes of points, like [0, 1, 2], saying what line to draw.\"\"\"\n", - " # Draw points and label them with their index number\n", - " plot_lines(points, 'bo')\n", - " for (label, p) in enumerate(points):\n", - " plt.text(p.x, p.y, ' '+str(label))\n", - " # Draw lines indicated by args\n", - " style = 'bo-'\n", - " for arg in args:\n", - " if isinstance(arg, str):\n", - " style = arg\n", - " else: # arg is a list of indexes into points, forming a line\n", - " Xs = [points[i].x for i in arg]\n", - " Ys = [points[i].y for i in arg]\n", - " plt.plot(Xs, Ys, style)\n", - " plt.axis('scaled'); plt.axis('off'); plt.show() " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the diagram below, imagine we are running a nearest neighbor algorithm, and it has created a partial tour from city 0 to city 4. Now there is a choice. City 5 is the nearest neighbor. But if we don't take city 16 at this point, we will have to pay a higher price sometime later to pick up city 16. " - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": { - "collapsed": false - }, - "outputs": [ { "data": { - "image/png": "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\nmpklcGmamSVwaZqZJXBpmpklcGmamSVwaZqZJXBpmpklcGmamSVwaZqZJXBpmpklcGmamSVwaZqZ\nJXBpmpklcGmamSVwaZqZJXBpmpklcGmamSVwaZqZJXBpmpklcGmamSVwaZqZJXBpmpklcGmamSVw\naTYRSWsl/ULS3ZKulLRP2ZmstUlaLuk+STskHVzz2Ofyx+6S9NKyMrYal2ZzWRsRL4iI44DZwHvK\nDmQtbx1wKvBA9aCkNwJdEfEnwF8Cq0vI1pJmlh3AxkTEt6vu3g4cWVYWaw8RsQFAkmoeWgysyde5\nTdKBkg6PiIeLzthqvKXZhCTNBM4Fvr27dc320BHA5qr7D+VjthsuzYJIlV6pZxAuQuoZlCq9E6x+\nGfD9iLilqHzWeqRKp9SzVlrSl91WOsvONB1497wAWUEu7oPVs6ADuPBoWNYnVRZGDK/beV39PXBo\nRLyvnLTWCrKCXHwTrO7K5tQIsOxkqbIoYnjTOE+JmvsPAc+pun9kPma74S3NQnSvGStMyG5Xz8rG\nx0h6D/B64O1FJ7RW071yrDAhn1Nd2fi4lC+jvg4sBZB0MrDNxzMnx6VZiHlzxyb3qI58fCeXA4cB\nt0q6U9KKQuJZC5q/oM6cWlA9IukCSZvJjldukHQFQET8N7BR0v3AvwN/VUDotuDd80Js3QYjB+08\nyUfy8TERMavYXNa6tgxlc2iXOTVUvVZErAJWjfcdIuL9jcvXvrylWYj+pbBsezapIT/+tD0bN9sT\n/Stg2UDNnBrIxq2RFFF7fNgaITsZ1L0GTjsabtwI/UtrTwKZpchOBnWvzHbJtw5B/4o6J4FsCrk0\nCyYREdReaGxmLcK752ZmCVyaZmYJXJpmZglcmmZmCVyaZmYJXJpmZglcmmZmCVyaZmYJXJpmZglc\nmmZmCVyaZmYJXJpmZglcmmZmCVyaZmYJXJpmZglcmmZmCVyaZmYJXJpmZglcmmZmCVyaZmYJXJpm\nZglcmmZmCVyaZmYJXJpmZglcmmZmCVyaTUTSckn3Sdoh6eCy81jrqzenJB0r6YeSnpL012VmbDUu\nzeayDjgVeKDsINY26s2pR4ELgE8XnqjFzSw7gI2JiA0AklR2FmsP9eZURDwCPCLp9FKCtTBvaZqZ\nJXBpFkSq9Eo9g3ARUs+gVOktO5O1NqnSKfWslZb0ZbeVzrIzTQfePS9AVpCL+2D1LOgALjwalvVJ\nlYURw+vGeUoUndFaS1aQi2+C1V3ZnBoBlp0sVRZFDG8a5ymeU1PEW5qF6F4zVpiQ3a6elY2PS/li\nVkf3yrHChHxOdWXj45poTnmuJSi9NCe4JGKupK9K2iDpVkkvKjPn3pk3d2xyj+rIx8dIukDSZuAI\nYIOkK4pKaK1m/oI6c2pB9Ui9OSXp8Hz8Q8DfSXpQ0gFFJG91zbB7vg74BvC9mvGPAesj4ixJxwKX\nAosKzjZFtm6DkYN2nuQj+fiYiFgFrCo0mrWoLUPZHNplTg1Vr1VvTkXEw8BzGhqxTZW+pRkRGyLi\nQXbdRXgR0Jev80ugU9Kzi843NfqXwrLt2aSG/PjT9mzcbE/0r4BlAzVzaiAbt0Zqhi3NejYAZwG3\nSDoJOAo4Evi/UlPtgYjhdVJlIQysgdOOhhs3Qv/SOieBzHYrYniTVFkEAyuzXfKtQ9C/os5JIJtC\nimiOk2qSNgIvi4jH8vtzgM8CLwV+CrwAeG9E3F1eyr0nERE+8G7Wqhq6pZldFtG9MjtovWV3vwl3\nau+I+B1w3tj30kZgsGFhzcwmoWGluQfXke10SYSkA4EnImK7pPcC34+IxxuV18xsMhp4Imhy15FN\ncJnNC4F+SfcArwc+0LisZmaT08Dd88ldRzbBJRG3Asc2Lp+ZWboGbmmOXkdWbdfryMzMWkkDS9PX\nkZlZ+2noJUdjZ899HdkoX3Jk1tqa5jrN6cKladbaSv8zSjOzVuLSNDNL4NI0M0vg0jQzS+DSNDNL\n4NI0M0vg0jQzS+DSNDNL4NI0M0vg0jQzS+DSNDNL4NI0M0vg0jQzS+DSNDNL4NI0M0vg0jQzS+DS\nNDNL4NJsIpI6Jd0q6V5JX5TUwE8LnXSm5ZLuk7RD0sFV46+WtE3SnflS2Gc/1ctU9fgrJG2XdFZR\nmSbKJekMSRskrZd0u6RXNUGmd+SZNkhaJ+klRWVqdS7N5vIvwCURcQywDXh3yXkA1gGnAg+M89jN\nEXFivqwc5/HCM0maAXwS+E6BeUbVy3VTRBwfESeQ/Zte2QSZBoE/i4jjgZXAFwrM1NJcms1lIXBd\n/vU1wJklZgEgIjZExIMw7ucalfJZR7vJdAHwFeDXxaaqnysinqi6ewDwTBNkujUifpvfvRU4oqhM\nrc6l2SQkHQL8JiJGf6B+BSwoMdJknCLpLknflPSissNIWgC8JSIup6RCr0fSWyTdA3wDOK/sPDXe\nA3yr7BCtovRjZtay7gCOiognJL0RuB44puRMnwE+WnW/aYozIq4HrpfUS7Y7fFrJkQCQ9FrgXUBv\n2Vlahbc0CyJVeqWeQbgIqWdQquw0SSPiUWBufkwO4EjgoQZn6pR61kpL+rLbSucEq+/0Wc8R8fjo\nbmdEfAuYNd5JmSIzAS8H/kPSRuCtwKWSztjbTFOQa+yBiHXA85rgtULSccAVwBkR8Zu9zTNtRISX\nBi8wpxfOeRoeD4jIbs95Gub07rwe/wm8Lf/6cmBZAzN1wjn312S6H+Z0jr8+G4FDqu4fXvX1ScCm\nsjPVPHY1cFaTvFZdVV+fCGxugkxHAfcBJzdqjrXrUnqA6bDAKYNjkzuqJvkpgzuvx9HAbcC9eYHO\namCmtXUyra3JdAGwGXia7DjrFfn4cqAfWA/8EHhl2Zlq1rlq6kpzr1+rC/PX6k7gFuCUJsj0BeDR\nPNN64Payf05aZSk9wHRY4MzHdp7co8uZj5WX6ay+Opn6nKn5czVjpumy+JhmIbZug5GasZF8vCxb\nhupkGiojTaYZM0Fz5mrGTNNE2a09HZbJHtMsOFNnyjGx6ZqpWXM1Y6bpsij7B7BGy86Wd6+BeXOz\nLcz+pRHD60rO1AndK2HegmwLpX9FxPAmZ2qNXM2YaTpwaZqZJfAxTTOzBC5NM7MELk0zswQuTTOz\nBC5NM7MELk0zswQuTTOzBC5NM7MELk0zswQuTTOzBC5NM7MELk0zswQuTTOzBC5NM7MELk0zswQu\nTTOzBC5NM7MELk0zK5Sk5ZLuk7RD0sFV4xVJX5d0l6SfSnpniTHrcmmaWdHWAacCD9SMLwd+FhEv\nBV4LXCJpZtHhdqfpAplZe4uIDQCSVPsQMCf/eg7waET8ochsk+HSNLNm8Xng65KGgAOAt5WcZ1ze\nPTezKSNVOqWetdKSvuy20pnw9NcD6yNiAXACcKmkAxoSdC94S9PMpkRWkItvgtVd0AGMAMtOliqL\n6nwee+3nh78L+GeAiBiQtBF4AfCTBsZO5i1NM5si3SvHChOy29Vd2fi4lC+jHgAWAUg6HDgGGGxU\n2j3l0jSzKTJ/wVhhjuoA5i2oHpF0gaTNwBHABklX5A+tBHok3Q3cCFwYEY81OnUq756b2RTZMpTt\nklcX5wiwdah6rYhYBayqfXZEbCE7rtnUvKVpZlOkfwUsG8iKEvJjmgPZePtQRO2xWDOzPZOdDOpe\nme2Sbx2C/hV1TgK1LJemmVkC756bmSVwaZqZJXBpmpklcGmamSVwaZqZJXBpmpklcGmamSVwaZqZ\nJXBpmpklcGmamSVwaZqZJXBpmpklcGmamSVwaZqZJXBpmpklcGmamSVwaZqZJXBpmpklcGmamSVw\naZqZJXBpmpklcGmamSVwaZqZJXBpmpkl+H8nmwKHqbW4/gAAAABJRU5ErkJggg==\n", + "image/png": "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97XAkg+LsCARaaMUBIqIiIi0CIs/hGHAWBKBYC0wfBVUjy7eukSkrdGZQBEREZEWIJwJPHQmnNcH7iN0ipi7CuYOdq95usjLE5E2REGgiIiISAsRAsHKceEM4JIPoXq0e82iYq9LRNoWBYEiIiIiIiIlRGcCRURERERESoiCQBERERERkRKiIFBERERERKSEKAgUEREREREpIQoCRURERERESoiCQBERERERkRKiIFBERERERKSEKAgUEREREREpIQoCRURERERESoiCQBERERERkRKiIFBERERERKSEKAgUEREREREpIQoCRURERERESoiCQBERERERkRKiIFBERERERKSEKAgUEREREREpIQoCRURERERESoiCQBERERERkRKiIFBERERERKSEKAgUEREREREpIdz/L/cAAADcSURBVAoCRURERERESoiCQBERERERkRKiIFBERERERKSEKAgUEREREREpIQoCRURERERESoiCQBERERERkRKiIFBERERERKSEKAgUEREREREpIQoCRURERERESoiCQBERERERkRKiIFBERERERKSEKAgUEREREREpIQoCRURERERESoiCQBERERERkRKiIFBERERERKSEKAgUEREREREpIQoCRURERERESoiCQBERERERkRKiIFBERERERKSEKAgUEREREREpIQoCRURERERESoiCQBERERERkRLy//FaPp35wLk3AAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1810,1326 +1045,234 @@ } ], "source": [ - "plot_labeled_lines(outliers_list, 'bo-', [0, 1, 2, 3, 4], 'ro--', [4, 16], 'bo--', [4, 5])" + "do(bind(rep_improve_nn_tsp, 10), USA)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "It seems that picking up an outlier is *sometimes* a good idea, but sometimes going directly to the nearest neighbor is a better idea. So what can we do? It is difficult to make the choice between an outlier and a nearest neighbor while we are constructing a tour, because we don't have the context of the whole tour yet. So here's an alternative idea: don't try to make the right choice while constructing the tour; just go ahead and make any choice, then when the tour is complete, *alter* it to correct problems caused by outliers (or other causes)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# New Vocabulary: \"Segment\"\n", + "We got a slight improvement, but we may be at the point of diminishing returns. Let's try something new.\n", "\n", + "# Greedy Algorithm: `greedy_tsp`\n", "\n", - "We'll define a *segment* as a subsequence of a tour: a sequence of consecutive cities within a tour. A tour forms a loop, but a segment does not have a loop; it is open-ended on both ends. So, if `[A, B, C, D]` is a 4-city tour, then segments include `[A, B]`, `[B, C, D]`, and many others. Note that the segment `[A, B, C, D]` is different than the tour `[A, B, C, D]`; the tour returns from `D` to `A` but the segment does not. \n", + "Let's return to the **greedy strategy**. We've already covered the Nearest Neighbor Algorithm, which follows the greedy strategy in always choosing the neighbor that is nearest to the last city in the tour. But one problem is that when you get near the end of the tour, you may be left with some very long links. Another way to be greedy is to always grab the shortest possible link, from among all the links between cities. That means we will no longer be building up a single tour, city by city; rather we will be maintaining a set of segments, and joining segments together by greedily choosing the shortest link:\n", "\n", - "# Altering Tours by Reversing Segments\n", + "> **Greedy Algorithm:** *Maintain a set of segments; intially each city defines its own 1-city segment. Find the shortest possible link that connects two endpoints of two different segments, and join those segments with that link. Repeat until we form a single segment that tours all the cities.*\n", "\n", + "On each step of the algorithm, we want to *\"find the shortest possible link that connects two endpoints.\"* That seems like an expensive operation to do on each step. So we will add in some data structures to speed up the computation: \n", "\n", - "One way we could try to improve a tour is by *reversing* a segment. Consider this tour:" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAASkAAAEACAYAAADvOoB8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHdpJREFUeJzt3XucnVV97/HPj4ZiweQEUk5jpcqlFZWIXI8QIhUoagG5\nBKhSIRBFCCDiaZAiXo4e8FIuFuG8IAcoEYRTLYgBBREE7CFc5E4IgigJilaoGkIuqAT59Y+1JpkM\n2TN7zzzPs9Z69vf9euU1zrBn75+zZ//medbz2+tr7o6ISK7WS12AiMhw1KREJGtqUiKSNTUpEcma\nmpSIZE1NSkSypiYlIllTkxKRrKlJiUjW1KREJGtqUiKSNTUpEcmampSIZE1NSkSypiYlIllTkxKR\nrKlJiUjW1KREJGtqUpkxs/PMbHnqOqQZZranmd1vZgvMbK6Z6TU5hH4gGTGzHYGJgDae7wNmZsBX\ngL9z922BnwJHpawpR2pSmYh/Qc8CPpa6FmnMJOD37v5k/Px7wMEJ68mSmlQ+PgzMc/dnAUtdjNTP\n3X8NjDOzHeKXDgE2S1hSltSkGmA2YZrZ1EVm05eEjxOmrf3f7TXAocD/SVOh1MFs/CFmU5ebTV8V\nPo4/ZB03ex9wrpndDSwD/tBslfkbl7qAtgsN6YBbYc76sBGwcmOYdavZhD3dl82PN9se2Ar4SVyn\n2NDMnnD3NyQrXMYkNKQDr4I5xOf91TDrKrPxh7ovv3rgdu7+A2D38D22N6DnfAhTOGi9zKYugpu3\nCL+oA1YCey92v3PLdX+PLXf38c1UKHUwm7ocbn71Op73Fe53jl9zO9vU3X9lZhsA1wNnuPv3Gy43\nazrdq93kiWv/okL4fPLEYb5JfzmKN/lVHZ73Vw354sfM7IfAQ8C1alCvpNO92j2zNJziDf2L+szS\nTt/h7hPqr0vq9czvwineK5733w2+lbufApzSaGmF0ZFU7T5xM5zm4RcUwsfjXoKFM1JWJXV7ZCYc\nz9rP+/HAT49JV1OZ1KRqZMZhsO+74akDYe/FMP05OHkFzLxm0KK5tNLy5TDjV/DOlTD9Jdh7Bex3\nF/xiHzONmPRCC+c1MWMqMA/Yy51HBn19E2ABcIQ7t6WqT+pjxkTgEWCmO98b9PUNge8D17vz2UTl\nFUdNqgZmbAXMB45y57vr+O/7ABcA27qzrOn6pF5mXAascOeEdfy3ycDdwCfduaLx4gqkJlUxMzYG\n7gLOdWfOMLe7CDB3PtRYcVI7Mw4Ezgbe6r56QWrobaYAtwIHu3N7k/WVSE2qQmb8MfBd4AF3Zo9w\n2/GE074T3LmhifqkXmZsSnhOD3HnjhFu+07gcuDt7vy4ifpKpSZVkbgYOhf4b4Rf0hHf3mDGO4Ar\nCKd9S+qtUOoUn/+rgSfduxspMOMYwhvKd3HnN3XWVzI1qYqY8QngIOCvOx3md/i+c4H/7s7f11ac\n1M6Mvwc+Aezozu9Guv2g7zsT2AXY253f11VfydSkKhBGDfgi4S/iL3v83g2BBwkLqVfVUZ/Uy4w/\nJ0yM/6079/f4vesBVwEvADPc9W6DodSkxqjTqEGP97FLvI+3uvNslfVJveJp3vXAPe58ZpT3odGE\nYWiYcwziqME3CDNPo2pQAO7cDVwKXKRBv+J8EJgMfG60d+DOC8D+wEwzDq+qsLbQkdQodTtq0MP9\nbQDcC5ztzuVjvT+pnxmbE56zPdxZWMH9aTRhHdSkRqGXUYMe73c74CbC4uvTVd2vVC+uJd0CfMed\nMyu8X40mDKHTvR7F07GLgKVU/O51dx4CzgP+Rad92fswsAFwTpV36s5NwKeBG8yYVOV9l0pHUj0a\n7ahBD/c/DrgTuLSK00ipnhlbA3cAu9Z1tKPRhDXUpHowllGDHh/nTcDtwNvceXKk20tz4h+R24Er\n3evbk16jCWvodK9LZuwGfBnYr84GBeDOY8Dngblm/FGdjyU9O5nQOC6o80HceRk4AtiacPrXt3Qk\n1YWRdjWo6THXA24DrnXnS008pgzPjLcQrr7t6M7PGnrMvt81QU1qBFWPGvT42FsCPwB2j0dXkki8\nonsP8GV35jb82H09mqAmNYy6Rg16rOFY4GhgqjurUtQgYMbpwHbA/inWh/p5NEFNqoPR7GpQYx03\nAvPdOT1FDf3OjP8BfAvYru71yBHqOIawJrZrP+2aoCbVQd2jBj3WshnwAPAudx5MWUu/MeNPCD/7\nz7jz9Qzq6bvRBDWpdWhq1KAXZhxBGB7dqV9+OXNgxjnAZu68N3Ut0J+jCWpSQ8RRg28yhl0N6hBP\n+64BHnfn46nr6Qdm7A58jbAp4a9T1zOg33ZNUJMaJMWoQS/M+DPgYeAgd+5KXU+bmfFqwlbAH3Xn\nutT1DNVPowlqUlGMmrqTBKMGvTDjEMKg53Zxiw+pgRkXAq9yZ2bqWjrpl9EENSnyGDXohRlXAr92\n56TUtbSRGe8CLgbe4s7zqesZjhl7A1+lxaMJfd+kchk16IUCRuvTKdgzZ20fTVCTymjUoBcKGK3H\ncMGeOWvzaEJfN6kcRw16oYDRanUT7JmrNo8m9G2TynXUoBcKGK1OL8GeuWrraEJfNqncRw16oYDR\nsRtNsGeu2jia0HdNqpRRg14oYHRsRhvsmau2jSb0VZMqbdSgWwoYHb2xBHvmrE2jCX3TpEocNeiF\nAkZ7V0WwZ87M+BDwMQofTein7YNPA6YAh7etQYECRkdpzMGeOXPnYsIfrm/GXMci9cWRVOmjBt1S\nwGj3qg72zFUbRhNa36TaMGrQCwWMjqyuYM9clT6a0OrTvThqcDXh7SOtb1CggNEu1RLsmav4RvT9\ngZlmvD91Pb1q7ZFUG0cNuqWA0c6aCPbMVamjCa1sUm0dNeiFAkZfqalgz5yVOJrQutO9eIpzEbAU\nyp4eHgsFjK5TI8GeOXPnZuBTwPVmTEpdTzdadyRlxieBAylsV4M6KGB0jRTBnjkradeEVjWpNaMG\nE+fD89vELz8BHOXufbmLpQJG0wZ75ir+Afs34Lf0OJpgZnsBZxLOxJYTXl+LaimUFjWpwaMGYIvd\nfUX4up0DPOvurb/U3Em/B4ymDvbMVRxNuA24oZfRBDP7EfAed3/CzI4Ddnb3D9RVZyvWpIaOGgxq\nUAb8CfT9L+ZFwBLg1NSFNC0Gex4DHKMGtbY4mnAAvY8mvEx4exnx439UXdtgxR9JdRo1MLNLgX2A\nR4F93b34d7ePRT8GjOYW7JmrXkcTzGwa4e02LwDLgF0GDgzqUPSRVFxr+AZhknateaB4+Pka4DHg\nfQnKy4o7PwdmA5eX/D6uHp0BLFCDGl58W9D7gavM+KsuvuV/Au9299cR3rT/z3XWV1yTMpswzWzq\nIrPpS2DWb+De9egwauDhMPHrwPRGi8zXFcBPoH3v+B8qBnseBmXtVZ7KmtGEx24xe8dTZtOXhNfZ\nhGmDb2dmfwq81d3vi1/6N2DXOmsbV+edVy38wA64FeasDxsBK4HjpsK8XWHZ/DW3s63c/cm4JrU/\n8HiqmnPijpsxC3jYjOvaGjAagz2/AszKKXk4fxMeg/e/Fq5fL76+NoZZt5pN2NN99evrOWCCmf2l\nu/8EeCfUe9W4qDUps6mL4OYtwg9wwEpg78Xud24ZbmNGmCoeDxgh8fe4Os+ZS9P2gNESgj1z1M3r\nK9zODgBOB/5AaFofcPen6qqrqCMpmDxx7R8ghM8nTxz4LJ7iTUM6cudqMw4CvgDtChiNwZ77Am9J\nXUt5Rn59Abj7tcC1TVVV2JrUM0t5xRD5yvh16dGJwMFm7JG6kKrEYM9LgA/knjycpzxfX4U1qYUz\nYNaqNT/IlYTPF85IWVWJYrLMMYT39k1IXU9FvgxcV0rycH7yfH0VtSYFYLbtXnDgzfDo8/DL52Dh\njEGLetKjtgSMlhzsmZNwcWrK5bDLZvDT5+Dmg1O/vgpsUuxGGNzcOXUtbdCGgNE2BHvmxoz/Rbj4\n8PHUtRR2ugfAjsB9I95KuuLOcmAmIcBhk9T19CpuzTMH+KoaVKXuI7zWkiu1SbUmHy0H7nyf8N7H\nEjeCOwx4I/Dp1IW0zP3AjjlsQV1ik9oJNak6nEb4pTw0dSHdisGe5xK2Gunr92ZWzZ1ngN8Bmycu\npawmZcZGwBaENw1LheJQ55HA+Wb8Wep6RhL/wl8CXNCm5OHM3E8Gp3xFNSnCnkCPuvNi6kLaqLCA\n0VYHe2ZCTWoUtGhev88SjlaPSF1IJzHY8wuE07y+28SvQVksnpfYpHRoX6O43/UM4Gwz/iJ1PUPF\nbW/nAme1OXk4E1ksnpfWpLRo3oDMA0b7KtgzpVwWz4tpUlo0b9wXgYnAsakLGRCDPT8NHOnOH1LX\n0yeSr0sV06TQonmj3HmJcLXvjLiHfFIx2PMrhK2Aiwi1bAk1qR5oPaphmQWM9n2wZyJqUj3Qlb00\nziWk7STbdyoGe84GZrrzcqo6+lTyxfOSmpQWzROITWEm8HEz3tT048ewja8Cpyh5uHnu/JLEi+dF\nNCktmqflziLgk4SkmfUbfvhPAU8T1qMkjaSnfEU0KbRonoPGA0YV7JkNNakuaNE8sdgkPgicaMb2\ndT9eDPa8DPhIPOWQdNSkurATWjRPruGAUQV75uN+YKdUi+elNCkdSeWj9oBRBXvmJR7J/pZEi+fZ\nNyktmuclnvbNAmaaVZ9cq2DPbCU75cu+SaFF8+y48yzhPXSXmbFhxXd/FvDv7lxX8f3K2KhJDUOn\nehly52rgXsKWKZUYFOz50aruUyqjJjUMDXHmq7KAUQV7Zi/Z4nkJTUpvh8lUxQGjCvbMWMrF86yb\nlBbN8xez+m5iDPs7xWDP3YBTqqpLapHklC/rJsUwi+ZmdoWZPW5mC8zsEjNL/S79fjYb+Bsz9un1\nG2Ow54WEPaKUPJy3EZuUmf1/M3vAzB40s1+Y2TVjfdDcm9Rwi+ZXuPsb3X1bYEPg6ObKksFGGzAa\n1zcuRMGepRixSbn77u6+g7tvD9wFtL5JdVw0d/cbB316D7BZIxXJOo0yYPQw4E0o2LMUXS+em9kE\nYE9g3lgfNPcmNeKiuZmNIySb3Djc7aQRXQeMKtizPD0unh8AfM/dV4z1cbNtUj0sml8A/Lu763Qh\nsW4DRhXsWbRuF88PA/61igfMskmZTZgG+/0YTvljmPp4+Hxdt7NPA3/q7v/QcInSQZcBowr2LFB4\nHR45DY7/qtnURcO8LicBOwPXV/LA7p7VPxg/DQ5/EVY4uIePh78I46etfTuOBu4ANkhds/4NfQ59\nA/AF4DPW8d82B/8V+JTUdepfL89pd6/LcFtmAXOremyLd5oNs6mL4OYtYKNBX10J7L3Y/c4t19zO\nVgFPASsIe3Bf4+5nNFqsdGTGdoT5qR3deTp+bT3gFuA77pyZsj7pTbevy3BbuxX4orvfVMVjj6vi\nTqo1eeLaPwgIn0+eOPgr7t70NrbSA3ceMlsdMPoudxwFexasu9clgLvvWeUjZ7gm9cxSXjHTtzJ+\nXQqzOmBUwZ6lS/e6zLBJLZwBs1at+YGsJHy+cEbKqqR3viZg9AvA7SjYs2DpXpfZrUnBwFWE7a+A\nt78ObnsKHpnhvmx+6rpkdMz4T2BTYP3YuKRA4XV5xI1hVOrx/4SFjbwus2xSA8z4OfB2dxanrkVG\nJwZ7fh9YBpzvzpfSViRjYcajwPvdeaipx8zwdG8tjwJvTl2EjM6gYM+Tgb1IFDAq1YiZi1sBP2ry\ncXNvUj8EtkldhIza6mBPTxswKtX4K+Bpd37b5IPm3qQeRU2qSB2CPRsPGJVKbUOCvd1KaFI63StM\np2DP2KwaCxiVyr0ZNalXeAx4U5xUlnJ0DPb0ZgNGpVrbEJZgGpX1i9+dpcBS4PWpa5HudBnsWXvA\nqNRCp3sd6JSvEN0Ge8bTvtoCRqV6qa7sQRlNSlf4ytF1sKfXGzAq1UtyZQ/KaFK6wleA0QR7eg0B\no1KbJKd6UE6T0ulexsYY7FlZwKjUKsmVPSijSekKX/5GHezp1QaMSn2SXNmDApqUrvDlrYpgT68g\nYFRqp9O9EeiUL0MVB3uOOmBU6pXyyh6U06R0hS8zVQd7+igDRqURya7sQTlNSlf48lN5sKePLmBU\n6pfsVA/KalI63ctEzcGeXQeMSmOSXdmDcpqUrvBlou5gT+8yYFQalezKHhTSpHSFLyu1B3t6dwGj\n0hyd7nVJp3yJmbE5YTp8hjuran64zwJbAEfU/DgyjNRX9qCsJqUrfAnFU+25wFnuLKz78dz5PTAD\nONuMv6j78aSjpFf2oKwmpSt8aTUe7Bk3+x8IGNVpXxpJT/WgvCal070EEgd7rg4YbfhxJUh6ZQ/K\nalK6wpeAGeMIe0QlCfYcFDB6hhlbNf34kvbKHhTUpHSFL5mTgReAC1IV4M5jwOcJb0L+o1R19Cmd\n7vVIp3wNisGes4GZ7rycuJxzAQdOSlxH34hX9rYEHk9ZR4lNSovnDRgU7HmKOz9LXU9skjNRwGiT\nBq7sVf2ugp6U1qQ0htCc1cGeietYTQGjjUu+HgXlNSmd7jWgQ7BnLhQw2pzkV/agvCb1Q3SFr1ad\ngj1zoYDRRiVfNIfCmlTcP1tX+OrVMdgzFwoYbYxO90ZJp3w16TLYMxcKGK1RLlf2oNwmpcXzinUb\n7JkLBYzWLosre1BmkxrxCp+ZnWBmPzazP5iZtqLtTtfBnrlQwGithj3VM7PPmdmPzOxRM/twnYWU\n2KS6Od2bD+wF/LT+cso3mmDPXChgtDYdr+yZ2VHAa919a3ffBvhanYWU2KRGvMLn7g+7+89A75wf\nyRiDPXOhgNHqDXdl7zjgfw984u61Lg8U16R0ha9yow72zIUCRmsx3OneVsD7zOxeM7vezP6yzkKK\na1JmE6bBSZvAUQvMpi4Kn8toVBHsmQsFjFbDbMI0s90Ww6feDNO+2eH1tQHwgrvvTDgKv7TWoty9\nmH8wfhoc/iKscHAPHw9/EcZPW/ftWQRskrruHP+Bbwr+S/DdUtdS4f+n8eCLwfdJXUuJ/7p9fRGO\nsF4/6POlddZV2JHUlMthzvqwUfx8I8LnUy7v8A2G1qVeoepgz1y4AkbHqOvX1zxgTwAzewc1739e\nWJOaPHHND3DARvHra5jZiWb2NPBa4GEzu6ipCgtRebBnLlwBo2PQ3esL+CfgYDNbQEgNOrrOqsbV\neefVe2YprNx47R/kyvj1Ndz9fOD8RksrxKBgz7/1DAb1anIa8KAZh7pzVepiytH16+t5YL+mqirs\nSGrhDJi1KvzgIHw81eGpoxIWVYy6gz1z4QoYHaWTr4NP+Nqvr1mrwusuHYsLX8UIVxumXB4OQZ99\nHs5/FnZ4EDjePbttRbJixtHA8cDbvP7cvOTM+DzhUvqB+t0Ynhn7A3Pg8I/AojPD6+uZpbBwhvuy\n+UlrK61JDRXnYu4A5rrzpdT15CoGe94L7OEN5OblIO6QcC9wtjudLq70PTN2AL4L7OfOD1LXM1Tx\nTQrAjNcBdwEnuDMvdT25idP5twDfcefM1PU0yYztCPNTO7rzdOp6cmPGZsDdwEnufCN1PetS2JrU\nunnYg/sA4GIzdkpdT4YaD/bMhStgtCMzxgPfBs7LtUFBS46kBphxEOHS866eQXhADmKw5x2En0nj\nuXk5iNmBdwKXujMndT05iD+Ta4FfAMfmvGbXqiYFYMZswpWdae4sS11PSvEX8XbgSvf+nhuKCTO3\nEy4aPJm6npTiEeX5wBuAfXO/iNKK070hvkT4q/n1+CLtZ8mDPXPhChgd7CPAHsChuTcoaOGRFKw+\ngvg2sJg+HU2IwZ63EhaMderL6gsItwHX9uuV4DWjBkx156nE5XSllU0K+ns0IQZ7/oCwIDo3dT05\nMWNLws9m93h01TdyHzXopI2newDE9ah9gdlxS5J+8ing52QU7JkL79OA0ThqcB1hD/tiGhS0+Ehq\nQBxJ+A7hvWr3pa6nbjHY81vAdp5hbl4O4sLxjcB8d05PXU/d4qjB7cD/K3FOrvVNCvpnNCEGez4A\nfMYzzs3LQTyyeAB4lzsPpq6nLiWNGnTS2tO9wdz5JuGq37dbvr1s9sGeufA+CBiNR4znAusT3o1R\nXIOCPjmSgtVP2AXA5sB73HkpbUXVisGeXwO29QJy83IQfyeuAR535+Op66maGScR9n6f6uWGbPRP\nk4K1RhMWUfBflqFisOcC4KNeUG5eDuJWLg8DB7lzV+p6qmLGe4D/S0GjBp30VZOCtUYTLnXnn1PX\nUwUzLgRe5c7M1LWUyIxDCIOe28W9qIpW6qhBJ33XpKBduybEYM+LgbeUfEifmhlXAr9256TUtYxF\nCbsa9KovmxS0YzQhBns+Asz0gnPzchCDGxYAR7hzW+p6RqP0UYNO+rZJQfmjCWZcBqxw54TUtbSB\nGfsQLq5sW9qb09swatBJXzcpKHfXhDhFfzbwVvfVm1LLGJlxEWDufCh1Lb0w43xgawrY1aBXalIF\njiaYsSnh1OSQNuXm5SCeMi0grFfekLqebpjxEeBYCh816KTvmxSUNZoQm+pVwCL38uPRc2TGO4Ar\nCKd9SxKXM6w2jRp00hcT5yOJR09/B7wd+GjickbS2mDPXJQSMBpHDS4lzHg9lbic2uhIapDcRxNi\nsOdDhCuSrc3Ny4EZGwIPAp/MMWC0jaMGnahJDTFoNOHdOTWCeJp3PXCPO59JXE5fMGMXYB7h4sSz\nqesZ0NZRg07UpNYhjiacTzjPz2I0od+CPXORW8Bom0cNOlGT6iCn0YR+DPbMRW4Bo20eNehETaqD\nXEYT+jnYMxe5BIy2fdSgE13d6yAeRp8IGHBewmDJvg32zEUOAaNx1OBUwhFU3zQo0JHUiOKuCfMJ\ngQ6N7pqgYM98pAwYNWN71uxqcE+Tj50DNakuDBpNON6daxt6TAV7ZiZFwGgcNbiLsFdYq0cNOtHp\nXhfiFb4DgEvM2LGhh1WwZ2aaDhiNowbfBs7v1wYFOpLqSVOjCQr2zFdTAaP9OGrQiZpUj+oeTVCw\nZ/6aCBjtx1GDTtSkelT3aIIZpwPbAfv381/P3JlxLHA04ai60ibSr6MGnahJjUJduyYo2LMcdQWM\nxlGDOcBubX7TcC/UpEap6tEEBXuWp+qA0X4fNehEV/dGKa5H7QecbMYBFdylgj0LU2XAaGx41wHH\nqUGtTUdSY1TFrgkK9ixXFQGjg3Y1uNKds6qsrw3UpCoQ9xsfCHTo6b1dCvYs31gCRuP65jzgP+jz\nUYNO1KQqMtrRBAV7tsNoA0bNOA94Ixo16EhNqiKjGU1QsGe79BowqlGD7mjhvCK97poQgz0vAT7g\nzvNmtrmZ3W1mT5jZv5rZuAbKlmqdCBxsxh4j3TCOGvwjTPoh2INm9qCZPWBm29ZfZlnUpCo0KNBh\nGiMHOnwZuG5Q8vA/Aee4+xuApcAHaytUahGTZY4hvLdvQqfbxVGDfwEOgiUrgNnuvr277+DuCxoq\ntxhqUhXrZjQhLrTvBmtFUu0Jq99EehlwUJ11Sj1iVt9NdNj/q8OogV6Hw9APpwaDdk24eOiuCTHY\n80LgyIHkYTObBDzn7i/Hm/0c+PMGS5ZqzQb+Jsa2rxZHDb5FeF/m4F0NPm9mD5nZOWa2fpOFlkBN\nqibu3Ec49L/W7L0HmU1dZDZ9CZywGL53i5KH28ud5cBMeOIrZn/9lNn0JWa7LYb7biTulz7o5qe6\n+9bAzsAk4B8TlJw1Lc7WyJ15ZvP2gtd8Ay412AhYCRz3XrPpc9yXzQ+389+Y2UQzWy8eTW1G2KJD\nijXhJTh8EtywaXzeN4ZTXw/TT3P/2epL6u7+bPy4yszmEo7CZBAdSdXuzH3hc7FBQfh44TiYMjR5\n5Dbg0Pi/j4RmdgCVuky5HM5ab+3n/YsGm621/Y6ZTY4fDTgQlAY0lJpU7SZPXPOLOmCj+PW1nAr8\ng5k9AWxCuPojxer6eb/SzB4mTKxPIryHUwbR6V7tnlkaDvUH/8KujF9fw90XA29rtDSpUdfP+17N\n1lUeHUnVbuEMmLUq/IJC+DhrVfi6tJee96robTENMJswLaxRTJ4Y/pIunDGwaC7tpee9GmpSIpI1\nne6JSNbUpEQka2pSIpI1NSkRyZqalIhkTU1KRLKmJiUiWVOTEpGsqUmJSNbUpEQka2pSIpI1NSkR\nyZqalIhkTU1KRLKmJiUiWVOTEpGsqUmJSNbUpEQka2pSIpI1NSkRyZqalIhkTU1KRLKmJiUiWVOT\nEpGsqUmJSNbUpEQka2pSIpI1NSkRyZqalIhkTU1KRLKmJiUiWVOTEpGsqUmJSNbUpEQka2pSIpI1\nNSkRyZqalIhkTU1KRLKmJiUiWfsv+abpfa0U1HMAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cross = [City(9, 3), City(3, 10), City(2, 16), City(3, 21), City(9, 28), \n", - " City(26, 3), City(32, 10), City(33, 16), City(32, 21), City(26, 28)]\n", - "\n", - "plot_labeled_lines(cross, range(-1,10))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is clearly not an optimal tour. We should \"uncross\" the lines, which can be achieved by reversing a segment. The tour as it stands is `[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]`. If we reverse the segment `[5, 6, 7, 8, 9]`, we get the tour `[0, 1, 2, 3, 4, 9, 8, 7, 6, 5]`, which is the optimal tour. In the diagram below, reversing `[5, 6, 7, 8, 9]` is equivalent to deleting the red dashed lines and adding the green dotted lines. If the sum of the lengths of the green dotted lines is less than the sum of the lengths of the red dashed lines, then we know the reversal is an improvement." - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_labeled_lines(cross, 'bo-', range(5), range(5, 10), \n", - " 'g:', (4, 9), (0, 5), \n", - " 'r--', (4, 5), (0, 9))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we see that reversing `[5, 6, 7, 8, 9]` works:" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "tour = Tour(cross)\n", - "tour[5:10] = reversed(tour[5:10])\n", - "plot_tour(tour)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here is how we can check if reversing a segment is an improvement, and if so to do it:" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def reverse_segment_if_better(tour, i, j):\n", - " \"If reversing tour[i:j] would make the tour shorter, then do it.\" \n", - " # Given tour [...A-B...C-D...], consider reversing B...C to get [...A-C...B-D...]\n", - " A, B, C, D = tour[i-1], tour[i], tour[j-1], tour[j % len(tour)]\n", - " # Are old edges (AB + CD) longer than new ones (AC + BD)? If so, reverse segment.\n", - " if distance(A, B) + distance(C, D) > distance(A, C) + distance(B, D):\n", - " tour[i:j] = reversed(tour[i:j])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's write a function, `alter_tour`, which finds segments to swap. What segments should we consider? I don't know how to be clever about the choice, but I do know how to be fairly thorough: try all segments of all lengths at all starting positions. I have an intuition that trying longer ones first is better (although I'm not sure). \n", - "\n", - "I worry that even trying all segements won't be enough: after I reverse one segment, it might open up opportunities to reverse other segments. So, after trying all possible segments, I'll check the tour length. If it has been reduced, I'll go through the `alter_tour` process again." - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def alter_tour(tour):\n", - " \"Try to alter tour for the better by reversing segments.\"\n", - " original_length = tour_length(tour)\n", - " for (start, end) in all_segments(len(tour)):\n", - " reverse_segment_if_better(tour, start, end)\n", - " # If we made an improvement, then try again; else stop and return tour.\n", - " if tour_length(tour) < original_length:\n", - " return alter_tour(tour)\n", - " return tour\n", - "\n", - "def all_segments(N):\n", - " \"Return (start, end) pairs of indexes that form segments of tour of length N.\"\n", - " return [(start, start + length)\n", - " for length in range(N, 2-1, -1)\n", - " for start in range(N - length + 1)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here is what the list of all segments look like, for N=4:" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[(0, 4), (0, 3), (1, 4), (0, 2), (1, 3), (2, 4)]" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "all_segments(4)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can see that altering the cross tour does straighten it out:" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_tour(alter_tour(Tour(cross)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Altered Nearest Neighbor Algorithm (`altered_nn_tsp`)\n", - "----\n", - "\n", - "Let's see what happens when we alter the output of `nn_tsp`:" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def altered_nn_tsp(cities):\n", - " \"Run nearest neighbor TSP algorithm, and alter the results by reversing segments.\"\n", - " return alter_tour(nn_tsp(cities))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's try this new algorithm on some test cases:" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10 city tour with length 93.2 in 0.000 secs for altered_nn_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(altered_nn_tsp, set(cross))" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10 city tour with length 2333.4 in 0.000 secs for altered_nn_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(altered_nn_tsp, Cities(10))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It fails to get the optimal result here. Let's try benchmarking:" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " nn_tsp | 5668 ± 488 ( 4674 to 6832) | 0.001 secs/map | 30 ⨉ 60-city maps\n", - " repeat_50_nn_tsp | 5118 ± 386 ( 4512 to 6069) | 0.029 secs/map | 30 ⨉ 60-city maps\n", - " altered_nn_tsp | 4820 ± 233 ( 4450 to 5346) | 0.008 secs/map | 30 ⨉ 60-city maps\n" - ] - } - ], - "source": [ - "algorithms = [nn_tsp, repeat_50_nn_tsp, altered_nn_tsp]\n", - "\n", - "benchmarks(algorithms)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is quite encouraging; `altered_nn_tsp` gives shorter tours and is faster than repeating nearest neighbors from 50 starting cities. Could we do better?\n", - "\n", - "Altered Repeated Nearest Neighbor Algorithm (`altered_repeated_nn_tsp`)\n", - "---\n", - "\n", - "We have seen that the *nearest neighbor* algorithm is improved by both the *alteration* and *repetition* strategies. So why not apply both strategies? " - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def repeated_altered_nn_tsp(cities, repetitions=20): \n", - " \"Use alteration to improve each repetition of nearest neighbors.\"\n", - " return shortest_tour(alter_tour(nn_tsp(cities, start)) \n", - " for start in sample(cities, repetitions))\n", - "\n", - "def repeat_5_altered_nn_tsp(cities): return repeated_altered_nn_tsp(cities, 5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's see it in action:" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "100 city tour with length 5701.6 in 0.541 secs for repeated_altered_nn_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(repeated_altered_nn_tsp, Cities(100))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "That looks like a good tour. Let's gather more data:" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " nn_tsp | 5668 ± 488 ( 4674 to 6832) | 0.001 secs/map | 30 ⨉ 60-city maps\n", - " repeat_50_nn_tsp | 5118 ± 386 ( 4512 to 6069) | 0.029 secs/map | 30 ⨉ 60-city maps\n", - " altered_nn_tsp | 4820 ± 233 ( 4450 to 5346) | 0.008 secs/map | 30 ⨉ 60-city maps\n", - " repeated_altered_nn_tsp | 4640 ± 194 ( 4298 to 4991) | 0.148 secs/map | 30 ⨉ 60-city maps\n", - "----------------------------------------------------------------------------------------------------\n", - " nn_tsp | 7789 ± 458 ( 6877 to 8632) | 0.002 secs/map | 30 ⨉ 120-city maps\n", - " repeat_50_nn_tsp | 7189 ± 295 ( 6646 to 7742) | 0.106 secs/map | 30 ⨉ 120-city maps\n", - " altered_nn_tsp | 6589 ± 202 ( 6188 to 7016) | 0.036 secs/map | 30 ⨉ 120-city maps\n", - " repeated_altered_nn_tsp | 6402 ± 185 ( 6015 to 6779) | 0.701 secs/map | 30 ⨉ 120-city maps\n" - ] - } - ], - "source": [ - "algorithms = [nn_tsp, repeat_50_nn_tsp, altered_nn_tsp, repeated_altered_nn_tsp]\n", - "\n", - "benchmarks(algorithms)\n", - "print('-' * 100)\n", - "benchmarks(algorithms, Maps(30, 120))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So, alteration gives the most gain, but alteration plus repetition gives a modest improvement in tour length, at the cost of 20 times more run time. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Non-Random Maps\n", - "====" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I thought it would be fun to work on some *real* maps, instead of random maps. First I found [a page](http://www.realestate3d.com/gps/latlong.htm) that lists geographical coordinates of US cities. Here is an excerpt from that page:\n", - "\n", - "
\n",
-    "[TCL]  33.23   87.62  Tuscaloosa,AL\n",
-    "[FLG]  35.13  111.67  Flagstaff,AZ\n",
-    "[PHX]  33.43  112.02  Phoenix,AZ\n",
-    "
\n", - "\n", - "I also found a [blog post](http://www.randalolson.com/2015/03/08/computing-the-optimal-road-trip-across-the-u-s/) by Randal S. Olson who chose 50 landmarks across the states and found a tour based on actual road-travel distances, not straight-line distance. His data looks like this:\n", - "\n", - "
\n",
-    "Mount Rushmore National Memorial, South Dakota 244, Keystone, SD\t43.879102\t-103.459067\n",
-    "Toltec Mounds, Scott, AR\t34.647037\t-92.065143\n",
-    "Ashfall Fossil Bed, Royal, NE\t42.425000\t-98.158611\n",
-    "
\n", - "You can't see, but fields are separated by tabs in this data.\n", - "\n", - "Now we have a problem: we have two similar but different data formats, and we want to convert both of them to `Maps` (sets of cities). Python provides a module, [`csv`](https://docs.python.org/3/library/csv.html) (for \"comma-separated values\"), to parse data like this. The function `csv.reader` takes an input that should be an iterable over lines of text, and optionally you can tell it what character to use as a delimiter (as well as several other options). For each line, it generates a\n", - "list of fields. For example, for the line `\"[TCL] 33.23 87.62 Tuscaloosa,AL\"` it would generate the list `['[TCL]', '33.23', '87.62', 'Tuscaloosa,AL']`.\n", - "\n", - "I define the function `Coordinate_map` to take an iterable of lines (a file object or a list of strings), parse it with `csv_reader`, pick out the latitude and longitude columns, and build a `City` out of each one:" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def lines(text): return text.strip().splitlines()\n", - "\n", - "def Coordinate_map(lines, delimiter=' ', lat_col=1, long_col=2, lat_scale=69, long_scale=-48):\n", - " \"\"\"Make a set of Cities from an iterable of lines of text.\n", - " Specify the column delimiter, and the zero-based column number of lat and long.\n", - " Treat long/lat as a square x/y grid, scaled by long_scale and lat_scale.\n", - " Source can be a file object, or list of lines.\"\"\"\n", - " return frozenset(City(long_scale * float(row[long_col]), \n", - " lat_scale * float(row[lat_col]))\n", - " for row in csv.reader(lines, delimiter=delimiter, skipinitialspace=True))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You might be wondering about the `lat_scale=69, long_scale=-48` part. The issue is that we have latitude and longitude for cities, and we want to compute the distance between cities. To do that accurately requires [complicated trigonometry](http://en.wikipedia.org/wiki/Haversine_formula). But we can get an approximation by assuming the earth is flat, and that latitude and longitude are on a rectangular grid. (This is a bad approximation if you're talking about distances of 10,000 miles, but close enough for 100 miles, as long as you're not too close to the poles.) I took the latitude of the center of the country (Wichita, KS: latitude 37.65) and plugged it into a [Length Of A Degree Of Latitude\n", - "And Longitude Calculator](http://www.csgnetwork.com/degreelenllavcalc.html) to find that, in Wichita, one degree of latitude is 69 miles, and one degree of longitude is 48 miles. (It is -48 rather than +48 because the US is west of the prime meridian.) \n", - "\n", - "Now let's create the map of USA cities, and find a tour for it:" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "USA_map = Coordinate_map(lines(\"\"\"\n", - "[TCL] 33.23 87.62 Tuscaloosa,AL\n", - "[FLG] 35.13 111.67 Flagstaff,AZ\n", - "[PHX] 33.43 112.02 Phoenix,AZ\n", - "[PGA] 36.93 111.45 Page,AZ\n", - "[TUS] 32.12 110.93 Tucson,AZ\n", - "[LIT] 35.22 92.38 Little Rock,AR\n", - "[SFO] 37.62 122.38 San Francisco,CA\n", - "[LAX] 33.93 118.40 Los Angeles,CA\n", - "[SAC] 38.52 121.50 Sacramento,CA\n", - "[SAN] 32.73 117.17 San Diego,CA\n", - "[SBP] 35.23 120.65 San Luis Obi,CA\n", - "[EKA] 41.33 124.28 Eureka,CA\n", - "[DEN] 39.75 104.87 Denver,CO\n", - "[DCA] 38.85 77.04 Washington/Natl,DC\n", - "[MIA] 25.82 80.28 Miami Intl,FL\n", - "[TPA] 27.97 82.53 Tampa Intl,FL\n", - "[JAX] 30.50 81.70 Jacksonville,FL\n", - "[TLH] 30.38 84.37 Tallahassee,FL\n", - "[ATL] 33.65 84.42 Atlanta,GA\n", - "[BOI] 43.57 116.22 Boise,ID\n", - "[CHI] 41.90 87.65 Chicago,IL\n", - "[IND] 39.73 86.27 Indianapolis,IN\n", - "[DSM] 41.53 93.65 Des Moines,IA\n", - "[SUX] 42.40 96.38 Sioux City,IA\n", - "[ICT] 37.65 97.43 Wichita,KS\n", - "[LEX] 38.05 85.00 Lexington,KY\n", - "[NEW] 30.03 90.03 New Orleans,LA\n", - "[BOS] 42.37 71.03 Boston,MA\n", - "[PWM] 43.65 70.32 Portland,ME\n", - "[BGR] 44.80 68.82 Bangor,ME\n", - "[CAR] 46.87 68.02 Caribou Mun,ME\n", - "[DET] 42.42 83.02 Detroit,MI\n", - "[STC] 45.55 94.07 St Cloud,MN\n", - "[DLH] 46.83 92.18 Duluth,MN\n", - "[STL] 38.75 90.37 St Louis,MO\n", - "[JAN] 32.32 90.08 Jackson,MS\n", - "[BIL] 45.80 108.53 Billings,MT\n", - "[BTM] 45.95 112.50 Butte,MT\n", - "[RDU] 35.87 78.78 Raleigh-Durh,NC\n", - "[INT] 36.13 80.23 Winston-Salem,NC\n", - "[OMA] 41.30 95.90 Omaha/Eppley,NE\n", - "[LAS] 36.08 115.17 Las Vegas,NV\n", - "[RNO] 39.50 119.78 Reno,NV\n", - "[AWH] 41.33 116.25 Wildhorse,NV\n", - "[EWR] 40.70 74.17 Newark Intl,NJ\n", - "[SAF] 35.62 106.08 Santa Fe,NM\n", - "[NYC] 40.77 73.98 New York,NY\n", - "[BUF] 42.93 78.73 Buffalo,NY\n", - "[ALB] 42.75 73.80 Albany,NY\n", - "[FAR] 46.90 96.80 Fargo,ND\n", - "[BIS] 46.77 100.75 Bismarck,ND\n", - "[CVG] 39.05 84.67 Cincinnati,OH\n", - "[CLE] 41.42 81.87 Cleveland,OH\n", - "[OKC] 35.40 97.60 Oklahoma Cty,OK\n", - "[PDX] 45.60 122.60 Portland,OR\n", - "[MFR] 42.37 122.87 Medford,OR\n", - "[AGC] 40.35 79.93 Pittsburgh,PA\n", - "[PVD] 41.73 71.43 Providence,RI\n", - "[CHS] 32.90 80.03 Charleston,SC\n", - "[RAP] 44.05 103.07 Rapid City,SD\n", - "[FSD] 43.58 96.73 Sioux Falls,SD\n", - "[MEM] 35.05 90.00 Memphis Intl,TN\n", - "[TYS] 35.82 83.98 Knoxville,TN\n", - "[CRP] 27.77 97.50 Corpus Chrst,TX\n", - "[DRT] 29.37 100.92 Del Rio,TX\n", - "[IAH] 29.97 95.35 Houston,TX\n", - "[SAT] 29.53 98.47 San Antonio,TX\n", - "[LGU] 41.78 111.85 Logan,UT\n", - "[SLC] 40.78 111.97 Salt Lake Ct,UT\n", - "[SGU] 37.08 113.60 Saint George,UT\n", - "[CNY] 38.77 109.75 Moab,UT\n", - "[MPV] 44.20 72.57 Montpelier,VT\n", - "[RIC] 37.50 77.33 Richmond,VA\n", - "[BLI] 48.80 122.53 Bellingham,WA\n", - "[SEA] 47.45 122.30 Seattle,WA\n", - "[ALW] 46.10 118.28 Walla Walla,WA\n", - "[GRB] 44.48 88.13 Green Bay,WI\n", - "[MKE] 42.95 87.90 Milwaukee,WI\n", - "[CYS] 41.15 104.82 Cheyenne,WY\n", - "[SHR] 44.77 106.97 Sheridan,WY\n", - "\"\"\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_lines(USA_map, 'bo')" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "80 city tour with length 13562.6 in 0.297 secs for repeated_altered_nn_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(repeated_altered_nn_tsp, USA_map)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Not bad! There are no obvious errors in the tour (although I'm not at all confident it is the optimal tour). \n", - "\n", - "Now let's do the same for Randal Olson's landmarks. Note that the data is delimited by tabs, not spaces, and the longitude already has a minus sign, so we don't need another one in `long_scale`." - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "USA_landmarks_map = Coordinate_map(lines(\"\"\"\n", - "Mount Rushmore National Memorial, South Dakota 244, Keystone, SD\t43.879102\t-103.459067\n", - "Toltec Mounds, Scott, AR\t34.647037\t-92.065143\n", - "Ashfall Fossil Bed, Royal, NE\t42.425000\t-98.158611\n", - "Maryland State House, 100 State Cir, Annapolis, MD 21401\t38.978828\t-76.490974\n", - "The Mark Twain House & Museum, Farmington Avenue, Hartford, CT\t41.766759\t-72.701173\n", - "Columbia River Gorge National Scenic Area, Oregon\t45.711564\t-121.519633\n", - "Mammoth Cave National Park, Mammoth Cave Pkwy, Mammoth Cave, KY\t37.186998\t-86.100528\n", - "Bryce Canyon National Park, Hwy 63, Bryce, UT\t37.593038\t-112.187089\n", - "USS Alabama, Battleship Parkway, Mobile, AL\t30.681803\t-88.014426\n", - "Graceland, Elvis Presley Boulevard, Memphis, TN\t35.047691\t-90.026049\n", - "Wright Brothers National Memorial Visitor Center, Manteo, NC\t35.908226\t-75.675730\n", - "Vicksburg National Military Park, Clay Street, Vicksburg, MS\t32.346550\t-90.849850\n", - "Statue of Liberty, Liberty Island, NYC, NY\t40.689249\t-74.044500\n", - "Mount Vernon, Fairfax County, Virginia\t38.729314\t-77.107386\n", - "Fort Union Trading Post National Historic Site, Williston, North Dakota 1804, ND\t48.000160\t-104.041483\n", - "San Andreas Fault, San Benito County, CA\t36.576088\t-120.987632\n", - "Chickasaw National Recreation Area, 1008 W 2nd St, Sulfur, OK 73086\t34.457043\t-97.012213\n", - "Hanford Site, Benton County, WA\t46.550684\t-119.488974\n", - "Spring Grove Cemetery, Spring Grove Avenue, Cincinnati, OH\t39.174331\t-84.524997\n", - "Craters of the Moon National Monument & Preserve, Arco, ID\t43.416650\t-113.516650\n", - "The Alamo, Alamo Plaza, San Antonio, TX\t29.425967\t-98.486142\n", - "New Castle Historic District, Delaware\t38.910832\t-75.527670\n", - "Gateway Arch, Washington Avenue, St Louis, MO\t38.624647\t-90.184992\n", - "West Baden Springs Hotel, West Baden Avenue, West Baden Springs, IN\t38.566697\t-86.617524\n", - "Carlsbad Caverns National Park, Carlsbad, NM\t32.123169\t-104.587450\n", - "Pikes Peak, Colorado\t38.840871\t-105.042260\n", - "Okefenokee Swamp Park, Okefenokee Swamp Park Road, Waycross, GA\t31.056794\t-82.272327\n", - "Cape Canaveral, FL\t28.388333\t-80.603611\n", - "Glacier National Park, West Glacier, MT\t48.759613\t-113.787023\n", - "Congress Hall, Congress Place, Cape May, NJ 08204\t38.931843\t-74.924184\n", - "Olympia Entertainment, Woodward Avenue, Detroit, MI\t42.387579\t-83.084943\n", - "Fort Snelling, Tower Avenue, Saint Paul, MN\t44.892850\t-93.180627\n", - "Hoover Dam, Boulder City, CO\t36.012638\t-114.742225\n", - "White House, Pennsylvania Avenue Northwest, Washington, DC\t38.897676\t-77.036530\n", - "USS Constitution, Boston, MA\t42.372470\t-71.056575\n", - "Omni Mount Washington Resort, Mount Washington Hotel Road, Bretton Woods, NH\t44.258120\t-71.441189\n", - "Grand Canyon National Park, Arizona\t36.106965\t-112.112997\n", - "The Breakers, Ochre Point Avenue, Newport, RI\t41.469858\t-71.298265\n", - "Fort Sumter National Monument, Sullivan's Island, SC\t32.752348\t-79.874692\n", - "Cable Car Museum, 94108, 1201 Mason St, San Francisco, CA 94108\t37.794781\t-122.411715\n", - "Yellowstone National Park, WY 82190\t44.462085\t-110.642441\n", - "French Quarter, New Orleans, LA\t29.958443\t-90.064411\n", - "C. W. Parker Carousel Museum, South Esplanade Street, Leavenworth, KS\t39.317245\t-94.909536\n", - "Shelburne Farms, Harbor Road, Shelburne, VT\t44.408948\t-73.247227\n", - "Taliesin, County Road C, Spring Green, Wisconsin\t43.141031\t-90.070467\n", - "Acadia National Park, Maine\t44.338556\t-68.273335\n", - "Liberty Bell, 6th Street, Philadelphia, PA\t39.949610\t-75.150282\n", - "Terrace Hill, Grand Avenue, Des Moines, IA\t41.583218\t-93.648542\n", - "Lincoln Home National Historic Site Visitor Center, 426 South 7th Street, Springfield, IL\t39.797501\t-89.646211\n", - "Lost World Caverns, Lewisburg, WV\t37.801788\t-80.445630\n", - "\"\"\"), delimiter='\\t', long_scale=48)" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_lines(USA_landmarks_map, 'bo')" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "50 city tour with length 10236.7 in 0.125 secs for repeated_altered_nn_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(repeated_altered_nn_tsp, USA_landmarks_map)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can compare that to the tour that Randal Olson computed as the shortest based on road distances:\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "The two tours are similar but not the same. I think the difference is that roads through the rockies and along the coast of the Carolinas tend to be very windy, so Randal's tour avoids them, whereas my program assumes straight-line roads and thus includes them. William Cook provides an\n", - "analysis, and a [tour that is shorter](http://www.math.uwaterloo.ca/tsp/usa50/index.html) than either Randal's or mine.\n", - "\n", - "Now let's go back to the [original web page](http://www.realestate3d.com/gps/latlong.htm) to get a bigger map with over 1000 cities. A shell command fetches the file:" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "! [ -e latlong.htm ] || curl -O http://www.realestate3d.com/gps/latlong.htm" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I note that the page has some lines that I don't want, so I will filter out lines that are not in the continental US (that is, cities in Alaska or Hawaii), as well as header lines that do not start with `'['`." - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def continental_USA(line): \n", - " \"Does line denote a city in the continental United States?\"\n", - " return line.startswith('[') and ',AK' not in line and ',HI' not in line\n", - "\n", - "USA_big_map = Coordinate_map(filter(continental_USA, open('latlong.htm')))" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\niRIlSpTIS/8/TuRYhKOqNG4AAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_lines(USA_big_map, 'bo')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's get a baseline tour with `nn_tsp`:" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1089 city tour with length 52879.1 in 0.177 secs for nn_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(nn_tsp, USA_big_map)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now try to improve on that with `repeat_100_nn_tsp` and with `repeat_5_altered_nn_tsp` (which will take a while with over 1000 cities):" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1089 city tour with length 50802.6 in 17.126 secs for repeat_100_nn_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(repeat_100_nn_tsp, USA_big_map)" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nEAL5fxkVHTv2ITP1AAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1089 city tour with length 44234.6 in 23.149 secs for repeat_5_altered_nn_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(repeat_5_altered_nn_tsp, USA_big_map)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Again we see that we do better by spending our run time budget on alteration rather than on repetition. This time we saved over 8,000 miles of travel in half a minute of computation!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Greedy Algorithm: `greedy_tsp`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "At the start of the *Approximate Algorithms* section, we mentioned two ideas:\n", - "\n", - "1. **Nearest Neighbor Algorithm:** Make the tour go from a city to its nearest neighbor. Repeat.\n", - "2. **Greedy Algorithm:** Find the shortest distance between any two cities and include that in the tour. Repeat.\n", - "\n", - "It is time to develop the *greedy algorithm*, so-called because at every step it greedily adds to the tour the edge that is shortest (even if that is not best in terms of long-range planning). The nearest neighbor algorithm always extended the tour by adding on to the end. The greedy algorithm is different in that it doesn't have a notion of *end* of the tour; instead it keeps a *set* of partial segments. Here's a brief statement of the algorithm:\n", - "\n", - "> **Greedy Algorithm:** *Maintain a set of segments; initially each city defines its own 1-city segment. Find the shortest possible edge that connects two endpoints of two different segments, and join those segments with that edge. Repeat until we form a segment that tours all the cities.*\n", - "\n", - "On each step of the algorithm, we want to \"find the shortest possible edge that connects two endpoints.\" That seems like an expensive operation to do on each step. So we will add in some data structures to enable us to speed up the computation. Here's a more detailed sketch of the algorithm:\n", - "\n", - "1. Pre-compute a list of **edges**, sorted by shortest edge first. An edge is a pair of cities; if the list contains `(A, B)` then it does not contain `(B, A)`, and it never contains `(A, A)`.\n", - "2. Maintain a dict that maps **endpoints** to **segments**, e.g. `{A: [A, B, C, D], D: [A, B, C, D]}`. Initially, each city is the endpoint of its own 1-city-long segment, but as we join segments together, some cities are no longer endpoints and are removed from the dict.\n", - "3. Go through the edges in shortest-first order. When you find an edge `(A, B)` such that both `A` and `B` are endpoints of different segments, then join the two segments together. Maintain the endpoints dict to reflect this new segment. Stop when you create\n", - "a segment that contains all the cities.\n", - "\n", - "\n", - "Let's consider an example: assume we have seven cities, labeled A through G. Suppose CG happens to be the shortest edge. We would add the edge to the partial tour, by joining the segment that contains C with the segment that contains G. In this case, the joining is easy, because each segment is one city long; we join them to form a segment two cities long. We then look at the next shortest edge and continue the process, joining segments as we go, as shown in the table below. Some edges cannot be used. For example, FD cannot be used, because by the time it becomes the shortest edge, D is already in the interior of a segment. Next, AE cannot be used, even though both A and E are endpoints, because it would make a loop out of ACGDE. Finally, note that sometimes we may have to reverse a segment. For example, EF can merge AGCDE and BF, but first we have to reverse BF to FB. \n", - "\n", - "\n", - "\n", - "
Shortest EdgeUsage of edgeResulting Segments\n", - "
A; B; C; D; E; F; G\n", - "
CGJoin C to GA; B; CG; D; E; F\n", - "
DEJoin D to EA; B; CG; DE; F\n", - "
ACJoin A to CGB; ACG; DE; F\n", - "
GDJoin ACG to DB; ACGDE; F\n", - "
FDDiscardB; ACGDE; F\n", - "
AEDiscardB; ACGDE; F\n", - "
BFJoin B to FBF; ACGDE\n", - "
CFDiscardBF; ACGDE\n", - "
EFJoin ACGDE to FBACGDEFB\n", - "
\n", + "1. Pre-compute a list of links, sorted by shortest link first. A link is a pair of cities: `(A, B)`.\n", + "2. Maintain a dict that maps **endpoints** to **segments**, e.g. `{A: [A, B, C], C: [A, B, C], D: [D]}` means that `A` and `C` are the endpoints of segment `[A, B, C]` and `D` is a 1-city segment. \n", + "3. Go through the links in shortest-first order. Suppose `(B, D)` is the next shortest link. We can't use it, because `B` is already attached to `A` and `C`. But if `(A, D)` is the next shortest, that works: `A` and `D` are endpoints of different segments, so we can join the two segments together. Update the endpoints dict to reflect this new segment: `{A: [D, A, B, C], D: [D, A, B, C]}`.\n", + "4. Stop when the newly created segment contains all the cities.\n", "\n", "Here is the code:\n" ] }, { "cell_type": "code", - "execution_count": 79, - "metadata": { - "collapsed": false - }, + "execution_count": 34, + "metadata": {}, "outputs": [], "source": [ "def greedy_tsp(cities):\n", - " \"\"\"Go through edges, shortest first. Use edge to join segments if possible.\"\"\"\n", - " endpoints = {c: [c] for c in cities} # A dict of {endpoint: segment}\n", - " for (A, B) in shortest_edges_first(cities):\n", + " \"\"\"Go through links, shortest first. Use a link to join segments if possible.\"\"\"\n", + " endpoints = {C: [C] for C in cities} # A dict of {endpoint: segment}\n", + " for (A, B) in shortest_links_first(cities):\n", " if A in endpoints and B in endpoints and endpoints[A] != endpoints[B]:\n", " new_segment = join_endpoints(endpoints, A, B)\n", " if len(new_segment) == len(cities):\n", " return new_segment\n", " \n", - "# TO DO: functions: shortest_edges_first, join_endpoints" + "def improve_greedy_tsp(cities): return improve_tour(greedy_tsp(cities))\n", + " \n", + "def shortest_links_first(cities):\n", + " \"Return all links between cities, sorted shortest first.\"\n", + " return sorted(combinations(cities, 2), key=lambda link: distance(*link))\n", + " \n", + "# TO DO: join_endpoints" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "**Note:** The `endpoints` dict is serving two purposes. First, the keys of the dict are all the cities that are endpoints of some segment, making it possible to ask \"`A in endpoints`\" to see if city `A` is an endpoint. Second, the value of `endpoints[A]` is the segment that `A` is an endpoint of, making it possible to ask \"`endpoints[A] != endpoints[B]`\" to make sure that the two cities are endpoints of different segments, not of the same segment.\n", "\n", - "**Note:** The `endpoints` dict is serving two purposes. First, the keys of the dict are all the cities that are endpoints of some segments,\n", - "making it possible to ask \"`A in endpoints`\" to see if city `A` is an endpoint. Second, the values of the dict are all the segments, making it possible to ask \"`endpoints[A] != endpoints[B]`\" to make sure that the two cities are endpoints of different segments, not of the same segment.\n", - "\n", - "The `shortest_edges_first` function is easy: generate all `(A, B)` pairs of cities, and sort by the distance between the cities. (Note: I use the conditional `if id(A) < id(B)` so that I won't have both `(A, B)` and `(B, A)` in my list of edges, and I won't ever have `(A, A)`.)" + "For the `join_endpoints` function, I first make sure that A is the last element of one segment and B is the first element of the other, by reversing segments if necessary. Then I add the B segment on to the end of the A segment. Finally, I update the `endpoints` dict by deleting `A` and `B` and then adding the two endpoints of the new segment: " ] }, { "cell_type": "code", - "execution_count": 80, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def shortest_edges_first(cities):\n", - " \"Return all edges between distinct cities, sorted shortest first.\"\n", - " edges = [(A, B) for A in cities for B in cities \n", - " if id(A) < id(B)]\n", - " return sorted(edges, key=lambda edge: distance(*edge))" - ] - }, - { - "cell_type": "markdown", + "execution_count": 35, "metadata": {}, - "source": [ - "For the `join_endpoints` function, I first make sure that A is the last element of one segment and B is the first element of the other, by reversing segments if necessary. Then I add the B segment on to the end of the A segment. Finally, I update the `endpoints` dict. This is a bit tricky! My first thought was that A and B are no longer endpoints, because they have been joined together in the interior of the segment. However, that isn't always true. If A was the endpoint of a 1-city segment, then when you join it to B, A is still an endpoint. I could have had complicated logic to handle the case when A, B, or both, or neither were 1-city segments, but I decided on a different tactic: first unconditionally delete A and B from the endpoints dict, no matter what. Then add the two endpoints of the new segment (which is `Asegment`) to the endpoints dict. " - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": { - "collapsed": false - }, "outputs": [], "source": [ "def join_endpoints(endpoints, A, B):\n", - " \"Join B's segment onto the end of A's and return the segment. Maintain endpoints dict.\"\n", - " Asegment, Bsegment = endpoints[A], endpoints[B]\n", - " if Asegment[-1] is not A: Asegment.reverse()\n", - " if Bsegment[0] is not B: Bsegment.reverse()\n", - " Asegment.extend(Bsegment)\n", - " del endpoints[A], endpoints[B] # A and B are no longer endpoints\n", - " endpoints[Asegment[0]] = endpoints[Asegment[-1]] = Asegment\n", - " return Asegment" + " \"Join segments [...,A] + [B,...] into one segment. Maintain `endpoints`.\"\n", + " Aseg, Bseg = endpoints[A], endpoints[B]\n", + " if Aseg[-1] is not A: Aseg.reverse()\n", + " if Bseg[0] is not B: Bseg.reverse()\n", + " Aseg += Bseg\n", + " del endpoints[A], endpoints[B] \n", + " endpoints[Aseg[0]] = endpoints[Aseg[-1]] = Aseg\n", + " return Aseg" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let's try out the `greedy_tsp` algorithm on the two USA maps:" + "Let's try out the `greedy_tsp` algorithm, with and without improvement, on the USA map:" ] }, { "cell_type": "code", - "execution_count": 82, - "metadata": { - "collapsed": false - }, + "execution_count": 36, + "metadata": {}, "outputs": [ - { - "data": { - "image/png": "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\nH76Nk+B8wxPEAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, { "name": "stdout", "output_type": "stream", "text": [ - "80 city tour with length 16087.5 in 0.006 secs for greedy_tsp\n" + "greedy: 1089 cities ⇒ tour length 46982 (in 0.561 sec)\n" ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "plot_tsp(greedy_tsp, USA_map)" + "do(greedy_tsp, USA)" ] }, { "cell_type": "code", - "execution_count": 83, - "metadata": { - "collapsed": false - }, + "execution_count": 37, + "metadata": {}, "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, { "name": "stdout", "output_type": "stream", "text": [ - "1089 city tour with length 46981.5 in 1.052 secs for greedy_tsp\n" + "improve_greedy: 1089 cities ⇒ tour length 43844 (in 2.855 sec)\n" ] + }, + { + "data": { + "image/png": "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pr6dIpKMWkSIiIiI5JcGTwc1YwAhATzCndehHNS3U0SS0HRQERERkfyyngZMBzXjEOBeYLA7r2UsKhEpGEoCRURERPJLvUcCzegHTAGOdGdWRqMSkYKhJFBEREQkv9SrMIwZBwP3A0e5MzPjUYlIwVASKCIiIpJf6pwOasZBwN+Ao915NStRiUjBUBIoIiIikl9qnQ5qxoHAA8Cv3Xkla1GJSMFQEigiIiKSX5KOBJpxAPAgcIw7L2czKBEpHGoRISIiIpJfEq4JNKMv8DAwxJ2Xsh6ViBQMjQSKiIiI5Jca00HN2J+QAB7rzos5iUpECoaSQBEREZH8Um06qBm/AB4BfuPOjJxFJSIFw9w91zGIiIiISIxZ2bNwVStYtwF+WA/X7wnbHOfO9FzHJiKFQWsCRURERPKEWcl+sH9/2L1pmBE6BLh6CTz0MZTnOjwRKRBKAkVERETygFlJdxg0Fe5oCi2BCmAMcF5nmDsOGJbTAEWkYGhNoIiIiEhe6DkO7mgVEkAIP68AHgI6ds5dXCJSaJQEioiIiOSFTp3jCWClloQ6McuW5CAgESlQSgJFRERE8sLSJWEKaFUVwOw1UFaai4hEpDApCRQRERHJC2WlMGJBPBGsAIavgdkD3csX5zAwESkwahEhIiIikidCcZie48IawGVLoKxUCaCIRE1JoIiIiIiISBHRdFAREREREZEioiRQRERERESkiCgJFBERERERKSJKAkVERERERIqIkkAREREREZEioiRQRERERESkiCgJFBERERERKSJKAkVERERERIqIkkAREREREZEioiRQRERERESkiCgJFBERERERKSJKAkVERERERIqIkkAREREREZEioiRQRERERESkiCgJFBERERERKSJKAkVERERERIqIkkAREREREZEioiRQRERERESkiCgJFBERERERKSJKAkVERERERIqIkkAREREREZEioiRQRERERESkiCgJFBERERERKSJKAkVERERERIqIkkAREREREZEioiRQRERERESkiCgJFBERERERKSJKAkVERERERIqIkkAREREREZEioiRQRERERESkiCgJFBERERERKSJKAkVERERERIqIkkAREREREZEioiRQRERERESkiCgJFBERERERKSJKAkVERERERIqIkkAREREREZEioiRQRERERESkiCgJFBERERERKSJKAkVERERERIqIkkAREREREZEioiRQRERERESkiPw/YGrpcX7NqlkAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "plot_tsp(greedy_tsp, USA_big_map)" + "do(improve_greedy_tsp, USA)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The greedy algorithm is worse than nearest neighbors, but it is fast (especially on the big map). Let's see if the *alteration* strategy can help:" + "That's the best result yet, and it only took 3 seconds!\n", + "\n", + "What about a repetitive greedy algorithm? That might be a good idea, but there is no obvious way to do it, because the greedy algorithm as it stands doesn't have a parameter that can be varied on each repeated run.\n", + "\n", + "## Visualizing the Greedy Algorithm\n", + "\n", + "I would like to visualize how the process of joining segments unfolds. Although I dislike copy-and-paste (because it violates the *[Don't Repeat Yourself](http://en.wikipedia.org/wiki/Don%27t_repeat_yourself)* principle), I'll copy `greedy_tsp` and make a new version called `visualize_improve_greedy_tsp` which adds a line to plot the segments several times as the algorithm is running, and a few lines at the end to improve and plot the final tour." ] }, { "cell_type": "code", - "execution_count": 84, - "metadata": { - "collapsed": false - }, + "execution_count": 38, + "metadata": {}, "outputs": [], "source": [ - "def altered_greedy_tsp(cities):\n", - " \"Run greedy TSP algorithm, and alter the results by reversing segments.\"\n", - " return alter_tour(greedy_tsp(cities))" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "80 city tour with length 14133.3 in 0.022 secs for altered_greedy_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(altered_greedy_tsp, USA_map)" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1089 city tour with length 43769.9 in 4.177 secs for altered_greedy_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(altered_greedy_tsp, USA_big_map)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "That's the best result yet on the big map. Let's look at some benchmarks:" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " altered_nn_tsp | 4820 ± 233 ( 4450 to 5346) | 0.008 secs/map | 30 ⨉ 60-city maps\n", - " altered_greedy_tsp | 4766 ± 207 ( 4320 to 5185) | 0.009 secs/map | 30 ⨉ 60-city maps\n", - " repeated_altered_nn_tsp | 4640 ± 194 ( 4298 to 4991) | 0.148 secs/map | 30 ⨉ 60-city maps\n", - "----------------------------------------------------------------------------------------------------\n", - " altered_nn_tsp | 6589 ± 202 ( 6188 to 7016) | 0.036 secs/map | 30 ⨉ 120-city maps\n", - " altered_greedy_tsp | 6539 ± 240 ( 5994 to 7203) | 0.037 secs/map | 30 ⨉ 120-city maps\n", - " repeated_altered_nn_tsp | 6402 ± 185 ( 6015 to 6779) | 0.701 secs/map | 30 ⨉ 120-city maps\n" - ] - } - ], - "source": [ - "algorithms = [altered_nn_tsp, altered_greedy_tsp, repeated_altered_nn_tsp]\n", - "\n", - "benchmarks(algorithms)\n", - "print('-' * 100)\n", - "benchmarks(algorithms, Maps(30, 120))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So overall, the altered greedy algorithm looks slightly better than the altered nearest neighbor algorithm and runs in about the same time. However, the repeated altered nearest neighbor algorithm does best of all (although it takes much longer).\n", - "\n", - "What about a repeated altered greedy algorithm? That might be a good idea, but there is no obvious way to do it. We can't just start from a sample of cities, because the greedy algorithm doesn't have a notion of starting city.\n", - "\n", - "Visualizing the Greedy Algorithm\n", - "---\n", - "\n", - "I would like to see how the process of joining segments unfolds. Although I dislike copy-and-paste (because it violates the *[Don't Repeat Yourself](http://en.wikipedia.org/wiki/Don%27t_repeat_yourself)* principle), I'll copy `greedy_tsp` and make a new version called `visualize_greedy_tsp` which adds one line to plot the segments several times as the algorithm is running:" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def visualize_greedy_tsp(cities, plot_sizes):\n", - " \"\"\"Go through edges, shortest first. Use edge to join segments if possible.\n", - " Plot segments at specified sizes.\"\"\"\n", - " edges = shortest_edges_first(cities) # A list of (A, B) pairs\n", + "def visualize_improve_greedy_tsp(cities, plot_sizes):\n", + " \"\"\"Go through links, shortest first. Use link to join segments if possible.\n", + " Plot segments at specified plot_sizes.\"\"\"\n", " endpoints = {c: [c] for c in cities} # A dict of {endpoint: segment}\n", - " for (A, B) in edges:\n", + " for (A, B) in shortest_links_first(cities):\n", " if A in endpoints and B in endpoints and endpoints[A] != endpoints[B]:\n", " new_segment = join_endpoints(endpoints, A, B)\n", - " plot_segments(endpoints, plot_sizes, distance(A, B)) # <<<< NEW\n", + " plot_segments(endpoints, plot_sizes)\n", " if len(new_segment) == len(cities):\n", - " return new_segment\n", - " \n", - "def plot_segments(endpoints, plot_sizes, dist):\n", + " plot_tour(new_segment)\n", + " plt.show()\n", + " do(improve_greedy_tsp, cities)\n", + " return \n", + " \n", + "def plot_segments(endpoints, plot_sizes):\n", " \"If the number of distinct segments is one of plot_sizes, then plot segments.\"\n", " segments = set(map(tuple, endpoints.values()))\n", " if len(segments) in plot_sizes:\n", " for s in segments:\n", - " plot_lines(s)\n", - " plt.show()\n", - " print('{} segments, longest edge = {:.0f}'.format(\n", - " len(segments), dist))" + " plot_segment(s)\n", + " plt.show()" ] }, { "cell_type": "code", - "execution_count": 89, - "metadata": { - "collapsed": false - }, + "execution_count": 39, + "metadata": {}, "outputs": [ { "data": { - "image/png": "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\nSJIq/T+l9LsUcEiXJQAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ - "" + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" ] }, "metadata": {}, @@ -3139,97 +1282,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "50 segments, longest edge = 119\n" + "improve_greedy: 110 cities ⇒ tour length 14999 (in 0.030 sec)\n" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAADqCAYAAABTP2nAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAH5tJREFUeJzt3Xu8VHW9//HXR5AUZYceL1xUkDRTydRQFC+lgcfUJEAt\nwnPsl0cDS8k65Q3LFMVTaUfxpKZYKXhLRY+FFoaaQiqppShKYBoCkqAnBCVvn98fa29nb5hh9t6z\nZn2/a837+Xisxy517/nMrDXrs763z9fcHRERkQ3ZKHQAIiISPyULERGpSslCRESqUrIQEZGqlCxE\nRKQqJQsREalKyUJERKpSshARkaqULEREpColCxERqUrJQkREqlKyEBGRqrqGDqBWZk39YeBE6N0H\nli2FeRPcV70YOi4RkSLJdbJIEsXw++Cqj8BmwBpg7H5mTUOVMERE0pPzbqiBE0uJApKfV30k+eci\nIpKWnCeL3n1KiaLFZkCvPiGiEREpqpwni2VLk66n1tYArywNEY2ISFHlPFnMmwBjF5USxhqS/z9v\nQsioRESKxvK+rWoyyD34Etj3KLj/l5oNJSKSvtwnCwAzugBvAT3c+WfoeEREiibn3VAJd94DlgJ9\nQ8ciIlJEhUgWzV4C+oUOQkSkiArSDdXUH748C9auhXlPaNxCRCRduU8WFVZxL4K7tIpbRCQlBeiG\n0ipuEZF6K0Cy0CpuEZF6y3UhwUTLKu7WCUOruKUtVSeWLBT5OtOYhUQn7S9cVtdIkW8UUl3h70Xu\nnvsDevSHb70CX34S9p8KPfqHjklHLefy+IWw2sE9+Xn8wo6cU3AD3wx8W/CPwJG/Kv09b/V3958a\nU9w68n0k9576XmchjwJ0Q4H7qhfNeAMY7c5zoeORWlSasPCh6WbMAHoAm1c4Wv5dd2AtsDo5Bm5T\n/3GtSnEvmggcn97rSLyKPX5aiGRhhgHbAYtDxyK1qvSF23QL4E1gOR8kgYrHGk9W9QNg9vupsGbM\n+uNay1Mc1+q3Y5FvFNIexR4/LUSyAP4FeMt9vXrlkjuVvnCPP+zOhZ37m/MmwNj92vYln70Wrt3R\njL7uLKklYjMGwIBPFPlGIe0xbwJ8/SC4Yoe2YxbFqIJdgKmzAGxPHVoVZk39zYZMNRs1K/nZ1D/t\n15B1pV92PhlcvGsoDJsGI+9Pfv5yd9h1BvCEGaM6+7fN+CjwAAydpHL5jS25zk64Fs58oXSdFWRw\nmwLMhgIw42jgZHeOSu9vFnxmQ8RKs4p69UmezOs3q8iMwcA04EFgvDurO/C7uwEzgXPduS7LuCVO\nZtwB3O7OtNCxpK0oyeJrwEB3xqX3N4dMhZll+rmHTXOfU/cBS03DzI4ZPYD/Bg4GxrjzWDt+Zw/g\nXuA77kytc4iSA2Z0BV4FdnXnldDxpK0oYxZ16IYKN7OhQqtmP7Ommlo1SkDlufMGcKIZxwB3m3E5\ncHHrQfLWzNgbmEHSErklw1AlboOAxUVMFFCAZNFccfYLsPYts3m7pXcDDDmzIf1pmPVKQEXizm1m\nPAJcD/yrGf/mzkut/xsz9gXuBsa6Mz1EnBKtYSTdksUUeqFHbYtg6rcQKuQiKxg5q+3CnpZjxKzO\n/81iLxhK9/P3jcC/Df53uOe05LMbOQuG3wuLVoAfFTpGHfEd4L8HPzx0HPU6ct6yqN9CqGShX9PQ\n5G9lPWBZj1ZNsRcMpcmd94Efml35LCyYDjM3LrXGxi+FW+fBqsBRSkzM2BzYG3godCz1kvNkUd8b\nYHNiCLD6tty6gFqnYRZ7wVB93DC6lCgg+XlZH3hWq7JlXZ8C5nqB13rlPFkU8wZYn1ZNpYVpP+lq\nRhevMJjb2NQak3Yr9ngFuU8W9XgCj0ParZryCWizi2DPycC05sHcd9J6vWIo5sOI1MUw4Muhg6in\n3K+z0EKo2pixCXArYMCx7qwNHFI0tDBTqkmukcGXwOCj4YFb4alzinpt5D5ZSO3M2Bi4AeZvD2MX\nw1bbaB1GQg8jUkmjPUwoWQgAZn0GwMgn4b+aGuHCF6lV6CoPWStKIUGpWf/zS4kCStOQB04MGVWj\nUzHLmDXWBIicD3BLehrrws8DrbqP3ZpVjTQBQi0LadYy86e14l74+VBp0alae52VVkvNjF5wxV7w\nzVcbpSy9WhbSrD7TkFW8sBZq7aUprZaaGU3APbDTFLjpeni6ISZAKFkIUJ+FgOpGqZXWeaSr9vJA\nzVPN7wTmABe4r/L2/m7eKVnIB9Ivb1K/2l2NobiLTsOoraVmRhfgBmAlcJo7DTWVVMlC6kjdKLVo\n29o79Dh45H/hsf9Uq6yzVizvaEutbTfqtn3htBXwsUMbsTyOkkVK1DdfTjzdKHk9Py2tPTMGAhe5\n82LYiPLsB8vhzNVw8ebtaamV70Y9ZWOY3hviv3ZSF7pGehGOkHtfxHzE8rnEEkdt78FngH8udBx5\nPcB3BF8JZwxJ9icZMSv5Wfka0B4wbQ+1LFKhvvlywu4J0lohzs8SQN13nXcp8GP3i+eQDE63g7pR\nW1OySIUuqkrC7QnSWiHOzxKgb+gg8siMw4A9gNEd+814ulFjoEV5qdCCtrgV4vwoWXSCGd2Ay4HT\nvcMVledNgHP+2SiL7qpRyyIVmuIYt3yfn2Sg9fDR0O8TZrM/lJfB+XUFmmRwGvBX4O6O/+qqnsme\n64c9ANsWftFdNao6m5LkizDucVi6CBYtaOSLKkalG9XgQ+G1l2H6cXk4P0Upg53l+yid6x36w86D\nYNPPup99f8f/DpOBle6cl2Z8uRV6hL1IB/ifwPcMHYeODZ6jr4L/LHQc7Y+3GDNysnofac18A98E\nfAV4v9CfXSyHxizS1QV4P3QQskFzgX1CB9F+hRicJ7v3kVrxxRHAk+68lG58+ZXbMYtIF1ltBI23\nsjNfProKRu9i9uyDsGRxJNfNBmQ7I6d+36us3ketJT1a3v8BR8CSZ8x+1T/u6yNDoZs2IZua6cfl\n88F3Df356Kh0fuK8bmKJuZ6vldX7qNzdNeK3scSY1yN4AOleEGH7ccEXgO8S+vPRUen8xHndVI+7\nR/8k9rELYNzz9bp51fvzKb2P6quna3uNdW/4/7EMFi4Fvw58q6JdH1kdOe2GirYfV91QUYv2utmg\nVvWhhgIT3H/yYn1eqb6fTxYLNCtVDYBrVgLnA8+YcRbwc/d1xxfzeX1kJafJ4vWVka6s1AB31PK+\nInf8KmgabPbsrPqM0+X980lsICmdbsYNwNXAl80Y584zpX9djPdfN6GbNh1vZnoTPP8UjHsttr5F\n8JfqMdWu1HwfWbfmeyMcee6TziL28q/x1RV5+Hw69j69C/jXwF8FnwTePXnve06HE97L4/WRxZGr\nRXlmdAfuBZ6Gph8msxbi2c7QjMXAEHcWp/c3i7EoKxal2S57DIJu3eDnh+bhczQbMhVmjln/qXfY\nNPc5qXXtlD6fXn1g9f/BVQfCgC+5c19arxELM3oDl8KiA2BSV7isN6wArgXmvwWLfwPzT8/D9ZGJ\n0NmqA08D3cDvAb8efKPQ8VSIcSl433T/pgbd6nSutktKVnvX9v9OuBZe8pru6x8jZtX5c/o0+Ctw\n7oFFbd3CMb/Td6z6EfWYRekpp09f2G4AnDQfdv+KrzcwFV4S62k9YeEtZn97Mb2Wjgbd6sGdl80W\nLIUzZ5hZ12pjAOH3Ew/Tn+7OA2a/vxpW/Q5mdivmXurvm75j7RA6W1XO9uX6T/9tUYxPNPWdnx5v\nyyLPYylJ7GNXVjpn4JuD7wV+HPgE+PqikOch5HhLzNeg3l+Gn1PoAIpwAusZa6yDsrHGVfs5+9Yr\n4EvA3wR/Cvz2ZBD05PkhuoHW/8z3nwpfnA0T1sJRA7N53TBdYNl+rvm9lrM6Iu6GylP3S/1iLc0b\n3+ohWPU6zH8qhsH8/O8+V+mcrVgKDAeWeKvuTrOnt4c1Hws5rbL1lFAzbgaGAvPq/8rFnlIaz46O\ncYu4kGCeNqypX6ylcZtuPeC1ZfFcxHlK5uVUOmcLnnVnsa83LjZvQjILLZqNcC4FxpvRpf4vVe69\nn/senDaj/q/dMWZN/c2GTDUbNSv52dS/Pb/nvupF9znHu99xaPIzhu9YZEI3bYrQNKxXrDF/Bnnq\nJkzrs82iXEXH3oPPBh+V3efV+r3fOBp8Gfi3wS30+WyO8UD44qoYvy9FOIIHUOXkR/XlzDrWmG/I\nMSeyIl5f5eP3Y8AfDvj6O4DPBb8FfPPw53Loqli/L0U4Ih6zyKaWTFrqE2u8XT2lft7ec2H5S/CX\n5+LpImufPF1fFdwJ/MiMfd15LOsXd+dvZhwE/AT4gxkj3FmYdRyJgRNhcI9Yvy9FEHWykLgHFpOE\nwd+Ar7rzeOh4Go0775pxOXA6MDpQDGvNOBEYC8wxm34G/PAz2e8z07sPbEzM35e8i3iAW8oPLJ69\nFlacFzCodX0IeDt0EA1sCnCYGduHCqC5l+JK+PlYeOinSVmS2w9Jfg6/r72DzLVZthSOA75H2+/L\nf7wRcBJCoeSqNlQjalurZ/lSuKYX7Pa0O6eHjg3AjAXAUe4sCB1LozLjx8Db7pwRNo5s6leVf+2W\nFfZnfwRuBd4BHn0DHj3CfdXD9XztRqFuqMit269uxhbA42bMdue2YIGVqGUR3uXAXDMucGd1uDDC\njbFprUT9KVnkjDuvm3EscI8ZT4V8om+uh7U1LJyabj0s6Qh3/mo2by78aJbZG6vD7UlfaYxti55m\nbOR1rulWgAkLUVM3VE6ZcTJwKrCf+3qryzJ4fZVOj0VyLo59GC7vG/JclL8mvvYSnLUSdlkOnODO\nq1nFI+lq6GRRGg/IeuZG7cww4OeAkXwJMz2RIfunpa2YzkXbMbaWLU1XLQEmAl8CvuTOQ1nGJOlo\n2G6o8CWna+OOmzEOeBQ4mWSryAzFuwak8cRzLjbQFXSGGQ8CvzRjMjCp3t1Skq4GnjpbqRDewIkh\no+oId94ERgETzfhktq+ep9pdRVfpXKwNONi9PndmAIOAw4F7zdgmcEjSAQ2cLHr3jeVprBbNA9zj\nSJ7YtszulaMrrNfAyp2Lb62AKw4048Lm7Yij4M7LwCHAXOBJMw4JHJK0U0N2Q5mxOWw/oCirPd25\nzYwDgOvNODqL5r2mKsaj0rmAq94BLgGeMeNUaJoXwxidO+8C5zR3S91oxlXARHfeyzoWab+GG+A2\noz9wF/x5PlyyD1w5oAizeczYGHgA+LU7FwUORyJixjBYeDVcvg1M2iym692MPsA04H1gDDRtEkNC\nk/U1VLIw41PAzcAkYDI09Vt35kaeL0wz+sILT8K3/wx00ZctPqFm4JkddCPcOzqGGVPrat6T47vw\nwli46F24rE9MCU2ahS57m9UBPhZ8OfjQ0LHU7z326A8nLslz2fAiH2H30Y5/a1QYOVMlxuM9Cjlm\n0fbpbfkymPwe7DUIOMCDlVDOwsCJpacyyN9Wp0UXcivauCsYN+tShEknRVW4ZFF+/cRZb8J3B7vf\nXeBEATHNt5dyQp6feRPgW/8Kl2zVtosnptlruUhoDauAU2fLPb1N6g4rzwwZVTa09iFu4c5P0uf/\ntUfgq3+AkffDsGnxjQXMmwCnLdF07DgVMFk08tO11j7ELcz5MWvqn5QEuXkYrPg73PcV9znHx5Uo\nWhLalybDmS/Em9AaV+G6oRq5Kau1D3ELcX7KdMsOh7ED4y1r85l/gc9c686k0JFIW4WbOmt2+mCw\n2XBBF02/k0YXU5HB9jDjTuAGd24PHYu0VaiWRVKJ9cfnwSOXw7Bt9HTduPJcUThdueuW3QW062KM\nCpEsSjeGjw+CnlvD9FPdFxR85pNUkveKwunKT7esGV2BHaHI09vzK/cD3KUbw8wxcPUu8N0tYfC9\n2WwSL3HKf0Xh9ORj0kPyfT38NjjHYcg1+v7GpwAti5ALnSROuet6qZu2g+qDDoa3Xoe7hsfUwirT\nEhzTuC3BeBUgWejGIOvKT9dLFlo2JDLjIGCy+zUvho1oXXrgy4Pcd0PlfSFayxx4s1Gzkp9qftcu\nH10vAcwBepsxIHQgbemBLw8K0LKYNwHG7rfOYGYubgwdHYjVDJ/2KXW9rJ0C/feE2ffoswJ33jPj\nLmAEyT4XkVBLMBdCVzJM40iqee4/FUbdD2evhutGhI6pfXHvP7V8lc1j7wf/JHgf8K6l9ximYmle\nD/BjwW8PHUdMB/jh4A+HjqNtTL86Bb7xT13bcR8FaFm03STejJNIthmdHjKm9um7Xfnm9w4fB64B\n+gBbmrECxn0omemlft0O6AGsCh1EZGYBN5nRy51XQgdjRhMceTasHAPDPq+1UfEqRLJYxy+As804\nwJ3ZoYOpJPmS9PtY+eb3nHvdP0h+XYFtYdmdsNk6e2yrX7eKJuCN0EHExJ23zbgHGA5cHToeYCJw\nr/u/3wb/flvoYKSyAgxwt+XO28CFwPdDx1KJGdsCD8CY31QbiHXnXXeWwMLn8zyQH4haFuXdAYwM\nHYQZg4DjgDNCxyLVFa42FHywH/XzwAnuPBQ6ntbM2BH4LTAVOL+9W7tWGAxXzasNMOMHwEp3/it0\nLDExY3NgKdDPndcDxdAFeBSY7M4vQsQgHVPEbijceceMicB5wGcCh/MBM/YAZgAXufOT5J+Wxls2\npDTDZ9O7YePu8OQf1K9bVRPw19BBxMad1WbcDxxJ8tCSig7O1jsFWA1cn9brS30VMlk0uwE4x4yD\n3fl9iADafnnefwcu2RsGfN2dWzrz95KEwR+AP7rz03SjLaQeaMyikukkXVGpJIuOTAM3ow/wXeBg\nd4rXtVFQhU0Wza2LC0jGLg7J+vXLf3nGL4VbH62xG30b4NU0YmwATWjMopK7gcvM6O7Om7X/uQ2v\nwm774LTdABhzs/u+82t/XclK4Qa41zEV2M6MT2f/0uW+PJf1SaGY3TbA32v8G41CLYuKmnrAf74J\nJz6STuWASquwd9/T7JRBpWKftx8CF/WDK45QtYJ8KXSycOddSFoXyV4XWapbCYNMk0XOy5GoZVFG\nqdX7/V4w5ePJTXz4fbWd20pldzZvgq1mr//gdOWAxqwCnF+FThbNbgR6k3lXVN1qVm1NRsmibfn3\n2w9J56aSKbUsyqpHCfdK9bimHAzPzFHtp/wrfLII17pIv5idGZsAm5DZ03I+94VoaQ3BhH4w9KIc\nJbeMpN/qTQax7xoKw6bByPuTny3Tupct0Rqh/CvsAPc6boKF58GZM818oyyK8LXdRyC1EgZbA69m\nN4Mkf9VAy0wsGAVj96zn3gj5K/BYn8J9rcvutJXfYp/SSujiVFkcSRG+k17Jc6Gy5D18bgac8UZS\ngLD+sVcudLj/1NCfRywxd7bAY6n45chZWZ3PWmOu/TX3nwojMn+/OlI6h6EDyORN5vCm1zb+MBVn\n81jpNrn5uq9/jJiV7bV18E0xf65JDF9fBCc9q5u3jvYcDdINlb/ulLbC7CRWp660Ost6b4RK19an\njjPjsyRlNZY0/2z+30ccG3pnuOYFnsuBMzyykjgSpwZJFpVuIMtzMsAWLtlV7oeOVdb945Wurftu\ngvNPIykz3wfo2/xzV9hut0geXnYCFmb8mpJTDZIsyt1Azl4LV2+R3grWetJOYu2VfWuocnJy5zXg\nNWBe698wm/NhWDMm5Pk048MkAQTf00LyoZBVZ8spzVhpuYG8fT78cQKwOzDcnZcDh1iRKs7Gbf1r\na8PJKYbzacbewM/c+UQWryf51zDJopzmdRffAU4DRrrzaOCQKkpuMOOfgwVzYfFL8Y8dyIZ0NMGk\n//ocBxznzjFZvabkW0MnixZmHA1MAca7c2PoeMoxY0uScts93VWpU2pjxtlAkztnho5F8qHwK7jb\nw53/Jdn34kIzLjSL8nPZGVioRCEp0eC2dEiMN8Ug3HkK2Bc4GLjdbNhukRXQ2wn4S+AYpDh2RslC\nOqBBZkO1jzuvmjEU/nw97P4kXNit2kYuGdoZJQtJj1oW0iFqWazDnX/CuHdKiQIiKaCnJ0GpWVJk\n8VM3w7nbwAEXR9BilpxQsigryhXf6oaSmpSm7M74AlywEfw2byXnJSAli7LqthdFh7Uqt703HHq6\nvtjSefksOS9x0JhFWeVW5X7z71mXVC6zeOsYGLtX4LETCaSjpdDN6A7sAeyZHAd9LsIWs+SEkkUZ\n65eMWLsarjgAru6WbSRhCghKfCqs+v5g0oUZ25Akhb34IDnQD5gP/Ck5FjwCaw5T2RjpDCWLCtYt\noGfGKcCNZgxx5+1soohy7ESCqPTgsPXDzeuCNuWDpMA9wCTgudbXqtnv7oaxZcqMaBMiqU7Jov2u\nBD4LfB84K5uXVAFBaVHpweEfrwGfA/5WbcFmFkUW87droLSXkkU7ueNmnAj8yeymp2DykfX/QpQb\nOxm/TE+CjSVZ+7PTHuUfHOY/5c5L7f1b9Sw5X62rrB6vKdlRbagOMrvtBJhzLVzQNYuKoW0LznUB\nJvWDnXbNritMQjFjH+AioB/MuAxuOj3mysPJrL2ZZUqvD5vmPkdjbDmnlkWHXToMZnbNatC5zNjJ\nr4FTgUvSfi2Jgxm7ABOBISTdnj9zP+Idsy/+Ou5dCzXGVmRKFh0W/AvxTWC2GVPdWZ7Ra0rKyvXt\nw6p3ge8Bnwd+CJzQemOu+Hct1BhbkSlZdFjYL4Q7z5vxC5Inz5OyeE1JV/m+/W8fCS8AA64CPurO\n60GD7JSst7SVLGnMooMi2eWsJ7ywAMbPhW6batZJvlTu2//8He4zR4WKKw2hN3WS+lHLooOy3+O5\nnKaeMBq4+QjNOsmjSl2ZPbYIEU2a4u8qk85SsuiE8F+IgRPh0q21sjuv1Lcv+aNCgrkUfJBdajJv\nQtJ12VKsUn37Ej+1LHJJT6Z5VurK3Pph+MdKmP+0+vYldhrgzqEYBtmldmZMB25w547QsYhUo5ZF\nDsUxyC4peBd9ByUndKHmVPhBdkmBkoXkhga4RcJRspDcULIQCeddkuqQItFTshAJRy0LyQ0lC5Fw\nlCwkN3ShioSTq2ShXfAaW24uVJECeo+Mv4OdveFrFzxRshAJJ9OWRW03/IETS78HqkfWeJQsRMLJ\nuBuq0g1/7RQzrgW2AHo2/2z9v3vCp3dTPbLGpmQhEkDylP/FI6HbZmZP7J5N/3+lApT99wSOBv4P\neB14FVjQ/L+b/9kT58Ka4apH1riULETIdvC21B3045buoB2z6f+vVIBy9j3uG+5KMpvzDfjGYPjv\nXtoFrzGpkKA0vKwLM1beKW/YNPc5dev/r/V9mv3xp3DVPvDa66pH1njUshDJfPA2zH4ktRegHLQH\nXPsNdx6sZ5wSJyULyb3au5CyvnmH24+kswUozdgU+DgwN+2YJB+ULCQqHb3xpzP/v/um2d68502A\nsfut3x0Udf//IOBZd94MHYiEoWQh0Wjvjd+M7kCv5DhiUi1dSGb0g+9/FE5dDJO3z+LmndP9SIYA\ns0MHIeEoWUhEKo0dbPmAGS8BvUmSxMbAK8mx3U6d7UIyYyPgOhjwA7jtFngus5t3DvcjOQCYGjoI\nCUfJQiJSaezgzdXAd/kgQbDKHQcwmzMV1pSZWdSuLqRTgO7Aj9xXvUe+bt6ZMcNIWhanhI5FwlHV\nWYlIy8Bva2uAZ/7kzoPuPO/OP1oSRWLehKTLaE2r/756F5IZOwPfA05w57303kMh7Qyscefl0IFI\nOFpnIdHo7DqA0qD4wL1g8w/DtQdu+L+nC/AQcJM7k9N9F8Vjxv8DDnNndOhYJBwlC4lK6cbf8bED\nMzYDFgMD3anYDWXGd4DDgaHuvJ9G3EVmxjXAn925InQsEo6ShRSKGT8FXnDn4gr/fiBwP7CPOy9m\nGVtemfEscLw7T4SORcJRspBCMWMwcAOwS9uxDTBjY+BR4H/cmRIivrwxY0vgJWALd94NHY+EowFu\nKZrHgHeAA8v8u3OAZcB1mUaUb/sDjylRiJKFFEpza+I64Cut/7kZnwTGASet2+KQDRoCzAkdhISn\nbigpHDO2BZ4HtnfnDTM2AR4HJrpzU9jo8qE00eDAI+GvT8BvTox8hbnUmZKFFJIZ04FfuTPFjB8A\nOwLHqVVRXdYl2yUflCykkMzuPBHmTILli2H7XWHpge7XaTZPO4Tab0PipnIfUjjJk/Hnz4Irt4bN\ntm5+Mr61/jvRFUWY/TYkbhrglgIaOBGuLFOQcODEkFHlR6WyK9pvu5EpWUgB6cm4NuXqbZ25OvL9\nNqTO1A0lBRRuJ7oiWH+/jRXLYcqeMPlQtEalYWmAWwpHs3nSZ8ZuwIPAQe48FzoeyZ6ShRRSLQUJ\npTwzTibZ02I/d9aGjkeypWQhIu3SvAnSL4El7owPHY9kS8lCRNrNjC2AJ4FT3bk7dDySHSULEekQ\nMw4Abgc+6c6S0PFINjR1VkQ6xJ3ZwP8ANzTvOigNQMlCRDrjIpL7x5mhA5FsqBtKRDrFjO1IqvmO\ncFcZ86JTy0JEOsWdl4GTgWlm9Awdj9SXWhYiUhMzJgPbAl9QCfjiUrIQkZokm0v95Um44B+w5s2k\n3IoWQRaNakOJSI2aesGo7nDlx1qVV9lPJeGLRWMWIlKjgRPhih1UEr7YlCxEpEYqCd8IlCxEpEba\nLKkRKFmISI3KbZY0dpE2SyoWzYYSkZqpJHzxKVmIiEhV6oYSEZGqlCxERKQqJQsREalKyUJERKpS\nshARkaqULEREpColCxERqUrJQkREqlKyEBGRqpQsRESkKiULERGpSslCRESqUrIQEZGqlCxERKQq\nJQsREalKyUJERKpSshARkaqULEREpColCxERqUrJQkREqlKyEBGRqpQsRESkKiULERGpSslCRESq\nUrIQEZGqlCxERKQqJQsREalKyUJERKpSshARkaqULEREpColCxERqUrJQkREqlKyEBGRqpQsRESk\nKiULERGpSslCRESq+v925hp4HkFWDQAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "25 segments, longest edge = 190\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "10 segments, longest edge = 255\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5 segments, longest edge = 335\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2 segments, longest edge = 597\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1 segments, longest edge = 1021\n" - ] } ], "source": [ - "visualize_greedy_tsp(USA_map, (50, 25, 10, 5, 2, 1));" + "visualize_improve_greedy_tsp(sample(USA, 110), {40, 20, 10, 5});" ] }, { @@ -3238,60 +1306,58 @@ "source": [ "# Divide and Conquer Strategy\n", "\n", - "The next general strategy to consider is *divide and conquer*. Suppose we have an algorithm, like `alltours_tsp`, that is inefficient for large *n* (the `alltours_tsp` algorithm is O(*n!*) for *n* cities). So we can't apply `alltours_tsp` directly to a large set of cities. But we can divide the problem into smaller pieces, and then combine those pieces:\n", + "The next general strategy to consider is **divide and conquer**. Suppose we have an algorithm, like `exhaustive_tsp`, that we can't feasibly apply to a large set of cities, because it is inefficient. We could divide the problem into smaller pieces, and then combine those pieces:\n", "\n", "1. Split the set of cities in half.\n", "2. Find a tour for each half.\n", "3. Join those two tours into one.\n", "\n", - "The trick is that when *n* is small, then step 2 can be done directly. But when *n* is large, step 2 is done with a recursive call, breaking the half into two smaller halves.\n", + "When *n* is small, then step 2 can be done directly by the inefficient algorithm. But when *n* is large, step 2 is done with a recursive call, breaking each half into two smaller pieces.\n", + "Here's an example with six cities. We split them into two halves of 3 cities each, for which we can easily create tours:" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "d, a, b, e, c, f = Cities(6)\n", "\n", - "Let's work out by hand an example with a small map of just six cities. Here are the cities:" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nrkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cities = Cities(6)\n", + "half1, half2 = [c, a, b], [d, e, f]\n", "\n", - "plot_labeled_lines(cities)" + "plot_tour(half1, 'bo-')\n", + "plot_tour(half2, 'gs-')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Step 1 is to divide this set in half. I'll divide it into a left half (blue circles) and a right half (black squares):" + "Now to join the two halves together, the first thing I do is delete a link from each half. There are 3 × 3 ways to do that; here's one:" ] }, { "cell_type": "code", - "execution_count": 91, - "metadata": { - "collapsed": false - }, + "execution_count": 41, + "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -3299,28 +1365,27 @@ } ], "source": [ - "plot_labeled_lines(list(cities), 'bo', [3, 4, 0], 'ks', [1, 2, 5])" + "plot_segment(half1, 'bo-')\n", + "plot_segment(half2, 'gs-')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Step 2 is to find a tour for each half:" + "Now I connect the two halves back together. There are two ways to do that; this is the better way:" ] }, { "cell_type": "code", - "execution_count": 92, - "metadata": { - "collapsed": false - }, + "execution_count": 42, + "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -3328,65 +1393,31 @@ } ], "source": [ - "plot_labeled_lines(list(cities), 'bo-', [0, 3, 4, 0], 'ks-', [1, 2, 5, 1])" + "plot_tour(half1 + half2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Step 3 is to combine the two halves. We do that by choosing an edge from each half to delete (the edges marked by red dashes) and replacing those two edges by two edges that connect the halves (the blue dash-dot edges). Note that there are two choices of ways to connect the new dash-dot lines. Pick the one that yields the shortest tour." + "Now we have a feel for what we have to do. I'll call the divide and conquer algorithm `divide_tsp`. If the size of the set of cities is *n* or less, then find the shortest tour using `exhaustive_tsp`. If there are more than *n* cities, then split the cities in half (with `split_cities`), find a tour for each half (using `divide_tsp` recursively), and join the two tours together (with `join_tours`): " ] }, { "cell_type": "code", - "execution_count": 93, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# One way to connect the two segments, giving the tour [1, 3, 4, 0, 2, 5]\n", - "plot_labeled_lines(list(cities), 'bo-', [0, 3, 4], 'ks-', [1, 2, 5],\n", - " 'b-.', [0, 1], [4, 5],\n", - " 'r--', [0, 4], [1, 5])" - ] - }, - { - "cell_type": "markdown", + "execution_count": 43, "metadata": {}, - "source": [ - "Now we have a feel for what we have to do. Let's define the divide and conquer algorithm, which we will call `dq_tsp`. Like all `tsp` algorithms it gets a set of cities as input and returns a tour. If the size of the set of cities is 3 or less, then just listing the cities in any order produces an optimal tour. If there are more than 3 cities, then split the cities in half (using `split_cities`), find a tour for each half (using `dq_tsp` recursively), and join the two tours together (using `join_tours`): " - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "metadata": { - "collapsed": false - }, "outputs": [], "source": [ - "def dq_tsp(cities):\n", - " \"\"\"Find a tour by divide and conquer: if number of cities is 3 or less,\n", - " any tour is optimal. Otherwise, split the cities in half, solve each\n", - " half recursively, then join those two tours together.\"\"\"\n", - " if len(cities) <= 3:\n", - " return Tour(cities)\n", + "def divide_tsp(cities, n=6):\n", + " \"\"\"Find a tour by divide and conquer: if number of cities is n or less, use exhaustive search.\n", + " Otherwise, split the cities in half, solve each half recursively, \n", + " then join those two tours together.\"\"\"\n", + " if len(cities) <= n:\n", + " return exhaustive_tsp(cities)\n", " else:\n", - " Cs1, Cs2 = split_cities(cities)\n", - " return join_tours(dq_tsp(Cs1), dq_tsp(Cs2))\n", + " half1, half2 = split_cities(cities)\n", + " return join_tours(divide_tsp(half1), divide_tsp(half2))\n", " \n", "# TO DO: functions: split_cities, join_tours" ] @@ -3395,60 +1426,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let's verify that `dq_tsp` works for three cities:" + "How do we split a set of cities? My approach is to imagine drawing an axis-aligned rectangle that is just big enough to contain all the cities. If the rectangle is wider than it is tall, then order all the cities by *x* coordinate and split that ordered list in half. If the rectangle is taller than it is wide, order and split the cities by *y* coordinate. " ] }, { "cell_type": "code", - "execution_count": 95, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3 city tour with length 1203.4 in 0.000 secs for dq_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(dq_tsp, Cities(3))" - ] - }, - { - "cell_type": "markdown", + "execution_count": 44, "metadata": {}, - "source": [ - "If we have more than 3 cities, how do we split them? My approach is to imagine drawing an axis-aligned rectangle that is just big enough to contain all the cities. If the rectangle is wider than it is tall, then order all the cities by *x* coordinate and split that ordered list in half. If the rectangle is taller than it is wide, order and split the cities by *y* coordinate. " - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "metadata": { - "collapsed": false - }, "outputs": [], "source": [ "def split_cities(cities):\n", " \"Split cities vertically if map is wider; horizontally if map is taller.\"\n", - " width, height = extent([c.x for c in cities]), extent([c.y for c in cities])\n", - " key = 'x' if (width > height) else 'y'\n", - " cities = sorted(cities, key=lambda c: getattr(c, key))\n", - " mid = len(cities) // 2\n", - " return frozenset(cities[:mid]), frozenset(cities[mid:])\n", + " width = extent(list(map(X, cities)))\n", + " height = extent(list(map(Y, cities)))\n", + " cities = sorted(cities, key=(X if (width > height) else Y))\n", + " middle = len(cities) // 2\n", + " return cities[:middle], cities[middle:]\n", "\n", "def extent(numbers): return max(numbers) - min(numbers)" ] @@ -3457,64 +1450,26 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let's show that split_cities is working:" + "Now for the tricky part: joining two tours together. First we consider all ways of deleting one link from each of the two tours. If we delete a link from a tour we get a segment. We are representing segments as lists of cities, the same surface representation as tours. But there is a difference in their interpretation. The tour `[c, a, b]` is a triangle of three links, but the segment `[c, a, b]` consists of only two links, from `c` to `a` and from `a` to `b`. The segments that result from deleting a link from the tour `[c, a, b]` are:\n", + "\n", + " [c, a, b], [a, b, c], [b, c, a]\n", + "\n", + "You may recognize these as the *rotations* of the segment `[c, a, b]`. So any candidate combined tour consists of taking a rotation of the first tour, and appending to it a rotation of the second tour, with one caveat: when we go to append the two segments, there are two ways of doing it: either keep the second segment as is, or reverse the second segment." ] }, { "cell_type": "code", - "execution_count": 97, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQ4AAAEACAYAAABCu5jVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFKpJREFUeJzt3X+YlWWdx/H3VydRQfyNQGYYqYOCUoaJmpZpXmZmpqux\narpd6tpm5qp5lZLrJmXijzaNRNtrS5HU1VRCXcUfsWpCoq3JCIgh9MMBCX/BjIAg3/3jfsYZmGGY\n+8w55z7Pcz6v6/I6eJpzzsf0fOZ+7ud+7sfcHRGRGJulDiAi+aPiEJFoKg4RiabiEJFoKg4Riabi\nEJFoKg4RiabiEJFoKg4RiabiEJFoKg4RiabiEJFoKg4RiabiEJFoKg4RiabiEJFoKg4RiabiEJFo\nKg4RiabiEJFoKg4RiabiEJFoKg4RiabiEJFoKg4RiabiEJFoKg4RiabiEJFoKg4RiabiEJFoKg4R\niabiEJFoKg4RiabiEJFoKg4RiabiEJFoKg4RiabiEJFoKg4RiabiEJFoKg4RiabiEJFoKg4Riabi\nEJFoDakD1Auz/kNg+DgYNBgWN0PTWPfli1LnEimFiqMKQmkc9yhMHAp9gVbgnAPN+h+h8pA80qFK\nVQwf114aEB4nDg3Pi+SPiqMqBg1uL402fYGBg1OkEektFUdVLG4OhycdtQItb6VII9JbKo6qGHU9\nXLauvTxagQuXwY2jzdg/ZTKRUpi7p85QeGb8HGathW9tEw5PljRD01hY/jHgZuBr7kxNnVOkp1Qc\nFWbGcOAxYC93Oh2amHEAcB/wQ3d+Wu18IqVQcVSYGQ8CD7lzfTc/szuEnwMucue9auUTKYXmOCrI\njCOBPYCJ3f2cOwuBg4CRwN1mbF2FeCIlU3FUiBmbA1cD33Hn3U39vDtvAkcBK4DpZuxS4YgiJVNx\nVM6phNMn9/T0BVnBnA48AMw0Y+8KZRPpFc1xVEB2qPEScJI7M0p8j68SRixj3Hm8nPlEeksjjso4\nH5hRamkAuHMr8BXgDjNOL1sykTLQiKPMzBgAzAE+6c6CMrzfMMKhyyTgcnf0L0ySU3GUmRkTgHfd\n+dcyvucuwFRgHnCWO6vL9d4ipVBxlJEZjcCTQKM7r5f5vbcGbgN2AI7PzsKIJKE5jvL6EXBVuUsD\nwJ13gH8A/gDMMOMj5f4MkZ7SRj5lYsZhwH6ECc2KyFaUXmDGAuApM4535/eV+jyRjdGIowzM2Ay4\n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\ncYhItP8Hf62p30lzGqcAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "Cs1, Cs2 = split_cities(cities)\n", - "plot_tour(dq_tsp(Cs1))\n", - "plot_tour(dq_tsp(Cs2))" - ] - }, - { - "cell_type": "markdown", + "execution_count": 45, "metadata": {}, - "source": [ - "Now for the tricky part: joining two tours together. First we consider all ways of deleting one edge from each of the two tours. If we delete a edge from a tour we get a segment. We are representing segments as lists of cities, the same surface representation as tours. But there is a difference in their interpretation. The tour `[0, 2, 5]` is a triangle of three edges, but the segment `[0, 2, 5]` consists of only two edges, from `0` to `2` and from `2` to `5`. The segments that result from deleting an edge from the tour `[0, 2, 5]` are:\n", - "\n", - "
\n",
-    "[0, 2, 5],    [2, 5, 0],    [5, 0, 2]\n",
-    "
\n", - "\n", - "You may recognize these as the *rotations* of the segment `[0, 2, 5]`. So any candidate combined tour consists of taking a rotation of the first tour, and appending to it a rotation of the second tour, with one caveat: when we go to append the two segments, there are two ways of doing it: either keep the second segment as is, or reverse the second segment.\n", - "\n", - "**Note:** In Python, `sequence[::-1]` means to reverse the sequence." - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "metadata": { - "collapsed": false - }, "outputs": [], "source": [ "def join_tours(tour1, tour2):\n", " \"Consider all ways of joining the two tours together, and pick the shortest.\"\n", " segments1, segments2 = rotations(tour1), rotations(tour2)\n", - " tours = [s1 + s2\n", - " for s1 in segments1\n", - " for s in segments2\n", - " for s2 in (s, s[::-1])]\n", - " return shortest_tour(tours)\n", + " return shortest_tour(s1 + s2\n", + " for s1 in segments1\n", + " for s in segments2\n", + " for s2 in (s, s[::-1]))\n", "\n", "def rotations(sequence):\n", " \"All possible rotations of a sequence.\"\n", @@ -3526,316 +1481,151 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let's see if it works, first on the 6 city example:" + "As usual, we can define an **improved** version:" ] }, { "cell_type": "code", - "execution_count": 99, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQ4AAAEACAYAAABCu5jVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFqxJREFUeJzt3Xu0lVW9xvHvL/GKohkpYBrpUUFRFK8Yihrk8JaSJhJq\n5lEj5aCpmZedR0tTCTmJomB1UAQvqRh5KRGNIwoY2vGyBS8RlAmEeCwuKl74nT/m3LEFNux377XW\nXOt9n88YDYcKez0jts+ec77zndPcHRGRLD6TOoCI1B4Vh4hkpuIQkcxUHCKSmYpDRDJTcYhIZioO\nEclMxSEimak4RCQzFYeIZKbiEJHMVBwikpmKQ0QyU3GISGYqDhHJTMUhIpmpOEQkMxWHiGSm4hCR\nzFQcIpKZikNEMlNxiEhmKg4RyUzFISKZqThEJDMVh4hkpuIQkcxUHCKSmYpDRDJTcYhIZioOEclM\nxSEimak4RCQzFYeIZKbiEJHMVBwikpmKQ0QyU3GISGYqDhHJTMUhIpmpOEQkMxWHiGSm4hCRzFQc\nIpJZm9QBisKsXWfodjV07AQL5kN9nfuSealzibSEiqMCQmkcNxlG7QRtgeXAoAPN2vVReUgt0lSl\nIrpdvao0IPx11E7hn4vUHhVHRXTstKo0GrQFOnRKkUaktVQcFbFgfpieNLYcWPaPFGlEWkvFURH7\njYArVq4qj+XAhYvh1p5m7JMymUhLmLunzpB7ZvwcZn4M520RpicL50N9HSzZG7gNOMOdh1LnFGku\nFUeZmdENeALY1Z01piZm7A/8GviJOzdXOp9IS6g4ysyMR4HfuTNiHb/mSxB+HXCRO59UKp9IS2iN\no4zM6AvsDIxa169zZy5wELAXcL8Zm1UgnkiLqTjKxIwNgJ8Cl7jz4fp+vTvvAkcAS4EpZmxb5ogi\nLabiKJ9TCI9PJjT3N8SC+RbwCDDDjN3KlE2kVbTGUQZxqvEacJI701v4NU4jjFgGuPNkKfOJtJZG\nHOVxPjC9paUB4M5YoD9wtxnfKlkykRLQiKPEzNgGmAUc4M6cEny9roSpy53Ale7oD0ySU3GUmBkj\ngQ/d+V4Jv+a2wG8I05+z3FlRqq8t0hIqjhIyowswFejizjsl/tqbAeOArYF+8SmMSBJa4yit64Dr\nS10aAO68B3wD+CMw3YwdS/0ZIs2lg3xKxIzeQHfg5HJ9RtxReoEZc4CnzejnzrPl+jyRpmjEUQJm\nfAYYBlzmzgfl/jx3RgJnAw+bcUK5P09kdSqO0ugPOHBvpT7QnYcJO01vNONCM6xSny2ixdFWMmMT\n4FXgNHeeSvD5OxAe1z4FnOfOx5XOIMWjEUfrDQZeSFEaAO78FehFeJnu12ZsniKHFItGHK1gxucI\no41e7ryWOMuGwC3APsAx7sxPmUfyTSOO1qkDfpW6NADc+YiwYHof4XHtHokjSY5pxNFCZvwbMAPY\nzZ1FqfM0ZsbJwAjgFHcmpc4j+aMRR8tdCwyvttIAcOce4OvAWDPOSp1H8kcjjhYwoyfh0WuXuKOz\nKpmxM+FIwvuBy91ZmTiS5ISKI6O4X+IZYLQ7d6TOsz5mtAcmAm8Cp1dig5rkn6Yq2X0d2JTwwlnV\nc2cx8JX4t5NjkYi0ioojAzM2Aq4Hvl9LJ5HHUcY3CW/uTo9TGJEWU3FkMwh43Z3JqYNk5c5Kdy4F\nhgJTzeiVOpPULq1xNJMZWxEO0vmKO/Wp87SGGUcQThQbEp/AiGSi4mgmM4YCn3XPx+NNM/YEHiLc\n+XKdjiSULFQczWBGZ+B5oJs7CxLHKRkzOgEPEw4H+m7cfSqyXlrjaJ5rgJvyVBoA8X2WQ4AOwCNm\nbJk4ktQIFcd6mLEvcCjhoJ7ccWcZcDzwBuFUsR0SR5IaoOJYh7jZaxjhWoJlqfOUSzzDYzAwBphm\nRo/EkaTKqTjW7RigPeE/qFxzx90ZDgwBHjPjmNSZpHppcbQJZrQBXgYudOfR1HkqyYwDgAeBa+L5\npiKfohFH084E3gJ+mzpIpcWT03sBg80YbsYGqTNJddGIYy3MaEfY7HWkOy+kzpOKGZ8FJgDvEs72\nqNo3gaWyNOJYu4uBSUUuDYB4W9wRwDLg9/EqShGNOFZnxheAF4G93HkzdZ5qEJ8u/SdwGnC0O7MT\nR5LEVByrMWMMsMCdy1JnqTZmfIvwktzJ7vw+dR5JR8XRiBndgceAXdxZkjpPNTLjcOAe4CJ3xqbO\nI2moOBoxYxIwUY8g182M3QiXQN0O/EgvyBWPFkej+Kr5F4HbUmepdu7MAnoCRwO3xwOOpEBUHEDc\npzAMuFhviDaPOwsJ7/C0A34XH91KQag4gtMJexV+kzhHTYn7Ok4kPIWaZsaXEkeSCin8GocZbYHX\ngX7u/CF1nlplxmDgMuB4/f+YfxpxwIXAU/pmbx13bga+QzjXo1/qPFJehR5xmNEBqAf2c2du6jx5\nYMY+hHtcbgB+picu+VT04hgNLHXnotRZ8iQeBvQoMAU4P573ITlS2OKIexGmALvGdzKkhOIxhPcD\nHwAD8nwQUhEVeY1jKHCtSqM83PkncBTwd+CpeDCy5EQhiyNum+4K3JI6S57FPTFnEUYe083YI3Ek\nKZHCTVXM+AzwHGG0cV/qPEVhxgDgRsK5HpNS55HWKeKIYyCwgvBTUCrEnbuBE4CxZpyZOo+0TqFG\nHGZsSjjZa4A7z6TOU0Rm7EJ4Qe4+oM6dlYkjSQsUbcRxHjBTpZGOO68DBwG9gbvM2CRxJGmBwow4\nzPg8MBvo6c4bqfMUXSyMO4DtCNvUFyeOJBkUacRxBXCXSqM6uIf9HcDThBfkdk4cSTIoxIgjzquf\nAbrqJ1v1MeMs4MfACZpG1oaiFMcEYIY7Q1NnkbWLByndCfyHO/emziPrlvviMONgYBxha/kHqfNI\n08zYE3iYsDHver0gV71yXRzxWP8ZwAh3xqfOI+tnxnaE8ngOOEcnslWnvC+OngS0Ae5OHUSax523\ngEOATsDD8VY9qTK5LQ4zNgauJRzjr01GNcSdpcBxwBzgaTO2TxxJVpPb4gDOBV7RxUG1KZ7hcS5h\nr8d0M3okjiSN5HKNw4ytgVeB3rqusPaZcQIwCjjdnUdS55H8FscNQFt3BqXOIqVhxoHABOBqdx2H\nkFruisOMHYGZwO7x7g/Jifhn+yjhqcvFWrtKJ4/FcQ9Q787VqbNI6cVp6ATgHeDUeLeLVFiuFkfN\nOADoBQxPnUXKw53/A44A3gOeNGObxJEKKTfFETd7DQN+qJ9C+ebOCuA04DFghhldEkcqnDapA5TQ\n8cCWwNjUQaT84nb0/zRjLvA/ZuOHwMhjoWMnWDAf6uvcl8xLHDO3clEcZmwIXA8MdueT1Hmkcty5\n3eyeD+H58fD4BtAWWA4MOtCsXR+VR3nkZaryHWCuDsEtqhFHwY9jaUD466idoJsWyMuk5kcc8eKf\nOuCrqbNIKh07rSqNBm2BDrrLpUxqsjjM2nUOP006doL228A5U9y7v5Q6l6SyYH6YnjQuj+XAB7o9\nrkxqbh9HKI3jJoehaMN89tx5MOEwzWeLae3fExcsgh+0gR3PcmdC4oi5U4PFcdA4eHzgmj9d+o53\nn3ZKqlyS1qpRaIdOsHA+1NfBkvbAA8B4wmN6LZyXSA1OVTSflTXF0ebqPzjmmbEv8CvgETO+GTeQ\nSSvV4FOVhvlsY8uBj95PkUaqmztvA32BV4CZZnRPHCkXarA46utg0JxV5dEwn73xADOuMmOjlOmk\n+rjzsTsXEp6+TY732Eor1NwaBzQ5n/0QGA18Efi2O8+nTSnVKB6I/CDwa+AH8cAgyagmi6Mp8X2V\ngcANwC+AH8X3GkT+Jb5hexewEdA/TmckgxqcqjTNHXdnHNAd2A143oz9EseSKhMXSI8GpgPP6Xsk\nu1yNOBqLo4/+wI3AGOBK3asiqzOjH2GK+wN3xqTOUytyWxwNzNgWuBnoBpzhzvTEkaTKmNGVsO7x\nJHC+Ox8mjlT1cjVVWRt3/u7ONwiXTk8wY5gZm6bOJdUjHmh9ALAd8HszOiaOVPVyXxwN3LkP2JPw\nzfGiGb0SR5Iq4s4/gX7A7wj7PQ5KHKmq5X6qsjZxXjuSsKPwcvc1dpRJgZlxFHFdDBilO2zXVJgR\nR2PuPAjsAbQnjD56J44kVcSdR4EvA+cAvzRjk8SRqk4hiwPAnXfcOQW4ALjLjJvN2Dx1LqkO7vwJ\n6El4EWqqGTskjlRVClscDdz5DeGJy+bAS2YcnjiSVAl3lgEnA/cCz5pxWOJIVaOQaxxNiXPb0ay6\n8Gdp4khSJczoA4wjnG37s6KvexR+xNFYnNt2AzYEXjajb+JIUiXcmQwcCJwKjDdjs8SRklJxrMad\nf7pzJuEA5F+Y8fN4rqkUnDvzCIumHwHT45WUhaTiaII7jxGevKwkjD6OTBxJqoA77wOnE16inG7G\nEWkTpaE1jmYw4yuEb5QpwAXuvJs2kVQDMw4G7iG80nBdkdY9NOJoBneeIOw6fY8w+jgmcSSpAu5M\nBfYHjgMeMGOLxJEqRsXRTO4sdedcwrmWN5oxNp7rIAXmzltAb+BtwiPbXRNHqggVR0buTCGMPt4l\njD6OT5tIUnNnhTvfAYYTNot9LXWmctMaRyvEOe5/AzOBIe4sThxJEjPjAOB+Vp0BszJxpLLQiKMV\n4hy3O7CAMPo4MXEkScydZ4F9gUOBh8zYKm2i8tCIo0Tia9hjgBeBwe4sShxJEjJjQ2AYcBTQz536\nxJFKSiOOEnFnGrAXMI/wzkv/eHyhFJA7H7lzHnAV4XCgk1JnKiWNOMogznPHALOBc9z5e+JIkpAZ\nPQhXUTac/1LzVzJoxFEGcZ7bA3iNMPoYqNFHcbnzR8K6Rw/gt2a0Txyp1TTiKLN4d+kY4M/AIHcW\nJI4kiZixAXAN4fT9E2Kh1CSNOMrMnecIP21eJJw2dppGH8XkzifuXAJcDDxmxqmpM7WURhwVZMbe\nhNHHW8DZcdehFJAZ3QhXMvwWdhkB7a+Ejp3Cper1de5L5qVNuG4qjgqLl2JfCpwLXAKMKdLLUbJK\n2OMx6wEY3RN+smk4pXA54VL1iX2quTxUHImY0Z0w+lhEGH38NXEkScDsy+Ng0sBQGg2WA33Hu087\nJVWu9dEaRyLuvEi4BGgq4Y7bs7X2UUQdOn26NCD8fYdOKdI0l4ojobhJ6BrgMOAsYJIZndOmkspa\nMJ81rvVZDiycnyJNc6k4qkDcjtwTeIJwe/p3zfRnUwz1dWFNo6E8GtY46utSplofrXFUmXgB8hjg\nfeDf3flz4khSZmYHd4HDX4ZXnob5b+mpirRI3Cj0PcJTl6uAkXl9PVvAjP2B0e7snTpLc2k4XIXi\nRqFhwEGEXYZTzNg5cSwpn72AF1KHyELFUcXceZ1wLN0Ewona34ujEckXFYeUVhx9/IxwGVA/wtF0\nhTjXskBUHFIe8RLkQ4G7gGfM+L5GH7UvPj3bg/AuU81QcdQQd1a6czPhSP4jCQWyW+JY0jo7AYvd\n+UfqIFmoOGpQfETbB7gdeMqMS81okzaVtNBe1NhoA1QcNSuOPkYRXtk/nLB42i1xLMmu5tY3QMVR\n8+JFyF8FbiOcbVkXD8qV2qDikDTccXd+DuwD9CLcKNY9cSxpHhWHpBVfzT8SuAl43Iwr4/kfUoXM\n+DzhVdi/pM6Slbac55QZ2wGjge33Zoc/bc+bOy5l8y7Oxm2MFR9vwbJXF8HM6e5np85aVGb0AX7o\nTu/UWbLSSnxOufOWGccCp27JVr+cyJttYBnhf7QB9jouaUKhRqcpoKlKrsW1j7HGvE/W9u+XsnmX\nSmeST1FxSPVyNlrrDlNnY40401JxSPUyVjRxc9gnmNGusmkEwIxNgB2BWamztISKowC2YNmra/vn\nbdhqCfC6GYO196PidgfecGdF6iAtoaFqASyCmccR1jQaP1VZxryZwC3AUGCIGZcAD+q6hoqoya3m\nDfQ4VgAw46vATwmPXb7vzrTEkXLNjJuAue4MT52lJTRVEQDcmUS4FPk24F4z7tepY2VVswujoOKQ\nRuKhQXcAuwDPE16cuynucJQSiWdwdKeGpyoqDlmDO++7cy3QFXBgthmXmbFZ4mh50Rn4hzvvpA7S\nUioOaZI7b7szhHDnSw/gNTNO18ljrVbT0xRQcUgzuPOGOycCJxFunPujGUckjlXLavqJCqg4JAN3\nphNe278KuMmMSXp9v0U04pBiie+/TCBsYJoIPGbGHWZsnzhaLVFxSDHFC7NHEp7A/A14wYxrzdgy\ncbSqZsbWwFbA3NRZWkPFIa3izhJ3Lic8XtyWsIV9iA4QalJ34MVav9JTxSEl4c7f3DkD6Es4hewV\nM040wxJHqzY1vzAKKg4pMXdecudI4LvA5cA0M76cOFY1qfn1DVBxSJm4M5lwePItwF1mTNDVlYCK\nQ2Td4t0vdwJdgBnA02aMNGObxNGSMGNjwmLyK6mztJaKQ8oubmEfStjC/hFhC3tdAbewdwXmuPN+\n6iCtpeKQinFnsTvnE+6+3ZPwBOaMAm1hz8U0BVQckoA7c9w5CTgB+DZhD8iRBXgCk4snKqDikITc\neRY4BKgD/otwiVSPtKnKSiMOkVKIW9gnAnsADwCPmHGnGTskjlZScTRV02dwNKbikKoQt7DfSnjq\nMBf4XzOuN2OrxNFKZQfgPXcWpQ5SCioOqSruLHXnCsII5HOEBdTzc7CFPTfTFFBxSJVyZ747ZwKH\nE7axzzajfw0voKo4RCrFnXp3jiYcIHQxMMOMgxPHaoncPFEBFYfUCHeeBPYDRgB3mjHRjFq6+1Yj\nDpEU4hb28YQt7FOBqWbcasa2iaOtU1zg/TwwJ3WWUlFxSM1x5wN3hhEK5H1glhlXmNE2cbSm7Am8\n5M4nqYOUiopDapY777hzAWEK05XwBOZMs6q72jRX0xRQcUgOuPNndwYA/YBTCVvYj66iJzC5WhgF\nFYfkiDt/AA4FLgWGAU+YsU/SUIFGHCLVLG5hf4iwgexe4CEzxpvROUUeMzYkrMW8nOLzy0XFIbnk\nzsfujCZsYX8DeN6Mn5rx2QpH6QL8xZ33Kvy5ZaXikFxzZ5k7VwLdgC0J11heEE/jqoTcTVNAxSEF\n4c4Cd84mrIEcBrxqxoB4c3w5qThEap07s9w5lnCA0IXAs2b0LuNH5u6JCoC5e+oMIknE0UZ/4CeE\nxctL3JlVwq9vwGJgd3cWlurrVgONOKSw4hb2uwkLmFOAKWaMNqNDiT7iC8BHeSsNUHGI4M4Kd4YD\nuwJLCbfQXWnG5q380t3J4foGqDhE/sWdd925CNgX2Jmwhf3sVmxhz+XCKKg4RNbgzlx3BgJfAwYA\nL5lxbAu2sOe2OLQ4KrIOsSyOAoYCbwMXufNcM3/vn4Bj3ZldxohJaMQhsg5xC/sjhPWKccBEM+42\n40vr+n1mtAM6Aq9XIGbFqThEmiFuYf8FYQv7bOA5M24wY+smfsseQH2ezuBoTMUhkoE7y935EbA7\nsBlhC/tFZmyy2i/N7foGaI1DpFXM6ApcR5jKXA7tp8EuP4b9D4N3/wYP9ndfMi9tytJTcYiUgBmH\nwGs3wq1d4ZqNoS2wHBg0Byb2yVt5qDhESsTsoHHw+EA+dfTpcqDvePdpp6TKVQ5a4xApmY6dWOO8\n5LZAh04p0pSTikOkZBbMDyOMxpYDC+enSFNOKg6RkqmvC2saDeXRsMZRX5cyVTlojUOkhMzadYZu\nV4fpycL5UF+Xt4VRUHGISAtoqiIimak4RCQzFYeIZKbiEJHMVBwikpmKQ0QyU3GISGYqDhHJTMUh\nIpmpOEQkMxWHiGSm4hCRzFQcIpKZikNEMlNxiEhmKg4RyUzFISKZqThEJDMVh4hkpuIQkcxUHCKS\nmYpDRDL7f32INzgSOu2iAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "6 city tour with length 1431.7 in 0.000 secs for dq_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(dq_tsp, Cities(6))" - ] - }, - { - "cell_type": "markdown", + "execution_count": 46, "metadata": {}, - "source": [ - "That is indeed the optimal tour, achieved by deleting the two dashed red lines and adding the dotted blue lines.\n", - "\n", - "Now for the USA map:" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nBDopa1IAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "80 city tour with length 14883.2 in 0.142 secs for dq_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(dq_tsp, USA_map)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Not quite as good as `altered_greedy_tsp`. Let's alter it!" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "metadata": { - "collapsed": false - }, "outputs": [], "source": [ - "def altered_dq_tsp(cities): return alter_tour(dq_tsp(cities))" + "def improve_divide_tsp(cities): return improve_tour(divide_tsp(cities))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's divide and conquer! First the 6 cities, then 100 USA cities:" ] }, { "cell_type": "code", - "execution_count": 102, - "metadata": { - "collapsed": false - }, + "execution_count": 47, + "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "divide, 3: 6 cities ⇒ tour length 1922 (in 0.000 sec)\n" + ] + }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "80 city tour with length 14209.6 in 0.109 secs for altered_dq_tsp\n" - ] } ], "source": [ - "plot_tsp(altered_dq_tsp, USA_map)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's just remind ourselves how the algorithms behave on the standard test cases:" + "do(bind(divide_tsp, 3), Cities(6))" ] }, { "cell_type": "code", - "execution_count": 103, - "metadata": { - "collapsed": false - }, + "execution_count": 48, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " nn_tsp | 5668 ± 488 ( 4674 to 6832) | 0.001 secs/map | 30 ⨉ 60-city maps\n", - " greedy_tsp | 5392 ± 306 ( 4554 to 5967) | 0.002 secs/map | 30 ⨉ 60-city maps\n", - " dq_tsp | 5268 ± 236 ( 4743 to 5752) | 0.042 secs/map | 30 ⨉ 60-city maps\n", - " altered_dq_tsp | 4953 ± 221 ( 4575 to 5399) | 0.049 secs/map | 30 ⨉ 60-city maps\n", - " altered_nn_tsp | 4820 ± 233 ( 4450 to 5346) | 0.008 secs/map | 30 ⨉ 60-city maps\n", - " altered_greedy_tsp | 4766 ± 207 ( 4320 to 5185) | 0.009 secs/map | 30 ⨉ 60-city maps\n", - " repeated_altered_nn_tsp | 4640 ± 194 ( 4298 to 4991) | 0.148 secs/map | 30 ⨉ 60-city maps\n" + "improve_divide: 110 cities ⇒ tour length 14749 (in 0.247 sec)\n" ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "algorithms = [nn_tsp, greedy_tsp, dq_tsp, altered_dq_tsp, altered_nn_tsp, altered_greedy_tsp, \n", - " repeated_altered_nn_tsp]\n", - "\n", - "benchmarks(algorithms)" + "do(improve_divide_tsp, sample(USA, 110))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Of the non-altered algorithms (the first three lines), divide and conquer (`dq_tsp`) does best. But interestingly, divide and conquer is helped less by `alter_tour` than is the greedy algorithm or nearest neighbor algorithm. Perhaps it is because divide and conquer constructs its tour by putting together pieces that are already good, so `alter_tour` is less able to improve it. ALso, `dq_tsp` has a standard deviation that is much smaller than the other two—this suggests that `dq_tsp` is not producing really bad tours that can be easily improved by `alter_tour`. In any event, `altered_dq_tsp` is the worst of the `altered` algorithms, both in average tour length and in run time. \n", + "That's slightly better than `improve_greedy_tsp` (although it took 10 times longer).\n", "\n", - "`repeated_altered_nn_tsp` remains the best in tour length, although the worst in run time." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Shoulders of Giants: Minimum Spanning Tree Algorithm: `mst_tsp`\n", + "# Shoulders of Giants: Minimum Spanning Tree Algorithm\n", "\n", "\n", - "\n", - "\n", - "
Joseph Kruskal (Wikipedia)
\n", + "| ![Joseph Kruskal (Wikipedia)](http://people.inf.elte.hu/hytruongson/Kruskal/J.Kruskal.jpg) |\n", + "|----|\n", + "| [Joseph Kruskal (Wikipedia)](https://en.wikipedia.org/wiki/Joseph_Kruskal) |\n", "\n", "\n", - "I hope you now believe that you could have come up with some ideas for solving the TSP. But even if you can't come up with something all on your own, you can always [Google it](http://bit.ly/XNGt2y), in which case you'll no doubt find a giant of a mathematician, [Joseph Kruskal](http://en.wikipedia.org/wiki/Joseph_Kruskal), who, in 1956, \n", - "published [a paper](http://www.cmat.edu.uy/~marclan/TAG/Sellanes/Kruskal.pdf) that led to an algorithm that\n", - "most people would not have thought of on their own\n", - " (I know I wouldn't have):\n", + "\n", + "I hope you now believe that you could have come up with some ideas for solving the TSP, using the set of **strategies**. But even if you can't come up with something all on your own, you can follow the **Stand on the Shoulders of Giants Strategy**, also known as the **[Just Google it Strategy](http://bit.ly/XNGt2y)**, in which case you'll no doubt find a giant of a mathematician, [Joseph Kruskal](http://en.wikipedia.org/wiki/Joseph_Kruskal), who, in 1956, published [a paper](http://www.cmat.edu.uy/~marclan/TAG/Sellanes/Kruskal.pdf) that led to an algorithm that\n", + "most people would not have thought of on their own (I know I wouldn't have):\n", "> **Minimum Spanning Tree Traversal Algorithm:** *Construct a Minimum Spanning Tree, then do a pre-order traversal. That will give you a tour that is guaranteed to be no more than twice as long as the minimal tour.* \n", "\n", - "What does all this jargon mean? It is part of *graph theory*, the study of vertexes and edges. Here is a glossary of terms:\n", + "What does all this jargon mean? It is part of *[graph theory](https://en.wikipedia.org/wiki/Graph_theory)*, the study of vertexes and links. Here is a glossary of terms:\n", "\n", - "* A **graph** is a collection of vertexes and edges.\n", + "* A **graph** is a collection of vertexes and links.\n", "* A **vertex** is a point (such as a city).\n", - "* An **edge** is a link between two vertexes. Edges have lengths.\n", + "* A **link** is an edge between two vertexes. Links have lengths.\n", "\n", - "* A **directed graph** is a graph where the edges have a direction. We say that the edge goes from the **parent** vertex to the **child** vertex.\n", + "* A **directed graph** is a graph where the links have a direction. We say that the link goes from the **parent** vertex to the **child** vertex.\n", "\n", "* A **tree** is a directed graph in which there is one distinguished vertex called the **root** that has no parent; every other vertex has exactly one parent. \n", "\n", "* A **spanning tree** (of a set of vertexes) is a tree that contains all the vertexes. \n", "\n", - "* A **minimum spanning tree** is a spanning tree with the smallest possible sum of edge lengths.\n", + "* A **minimum spanning tree** is a spanning tree with the smallest possible sum of link lengths.\n", "\n", "* A **traversal** of a tree is a way of visiting all the vertexes in some order.\n", "\n", "* A **pre-order traversal** means that you visit the root first, then do a pre-order traversal of each of the children.\n", "\n", - "* A **guarantee** means that, no matter what set of cities is selected, the tour found by the minimum spanning tree traversal algorithm will never be more than twice as long as the shortest possible tour. None of the other algorithms has any guarantee at all (except for `alltours_tsp`, which is guaranteed to find the optimal algorithm, if it has enough time to complete).\n", + "* A **guarantee** means that, no matter what set of cities you consider, the tour found by the minimum spanning tree traversal algorithm will never be more than twice as long as the shortest possible tour. None of the other algorithms has any guarantee at all (except for `exhaustive_tsp`, which is guaranteed to find the optimal algorithm, if it has enough time to complete).\n", "\n", - "We will implement a vertex as a Point, and a directed graph as a dict of `{parent: [child, ...]}` pairs. \n", - "\n", - "Visualizing Graphs and Trees\n", - "---\n", - "\n", - "I think we will need visualization right away, so before doing anything else I will define `plot_graph`. I will make it plot in red so that we can easily tell a tour (blue) from a graph (red)." - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def plot_graph(graph):\n", - " \"Given a graph of the form {parent: [child...]}, plot the vertexes and edges.\"\n", - " vertexes = {v for parent in graph for v in graph[parent]} | set(graph)\n", - " edges = {(parent, child) for parent in graph for child in graph[parent]}\n", - " for edge in edges:\n", - " plot_lines(edge, 'ro-')\n", - " total_length = sum(distance(p, c) for (p, c) in edges)\n", - " print('{} node Graph of total length: {:.1f}'.format(len(vertexes), total_length))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's try it out:" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "8 node Graph of total length: 10.9\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "Ps = [Point(0, 0.1), \n", - " Point(-2, -1), Point(0, -1), Point(2, -1), \n", - " Point(-2.9, -1.9), Point(-1, -1.9), Point(1, -1.9), Point(2.9, -1.9)]\n", - "\n", - "Ptree = {Ps[0]: Ps[1:4], Ps[1]: Ps[4:6], Ps[3]: Ps[6:8]}\n", - "\n", - "plot_graph(Ptree)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now our plan is:\n", + "We will implement a directed graph as a dict of `{parent: [child, ...]}`. Now our plan is:\n", "\n", "1. Implement an algorithm to create a minimum spanning tree.\n", "2. Implement a tree traversal; that will give us our `mst_tsp` algorithm.\n", - "3. Understand the guarantee, \n", + "3. Understand the guarantee.\n", "\n", - "Creating a Minimum Spanning Tree (`mst`)\n", - "---\n", + "# Creating a Minimum Spanning Tree (`mst`)\n", "\n", - "Now let's see how to create a minimum spanning tree (or MST). Kruskal has a very nice algorithm to find MSTs, but with what we have done so far, it will be a bit easier to implement another Giant's algorithm:\n", "\n", - "> **[Prim's algorithm for creating a MST](http://en.wikipedia.org/wiki/Prim%27s_algorithm):** *List all the edges and sort them, shortest first. Initialize a tree to be a single root city (we'll arbitrarily shoose the first city). Now repeat the following until the tree contains all the cities: find the shortest edge that links a city (A) that is in the tree to a city (B) that is not yet in the tree, and add B to the list of A's children in the tree.*\n", + "Now let's see how to create a minimum spanning tree (or MST). Kruskal has a very nice algorithm to find MSTs, but with what we have done so far, it will be a bit easier to implement [another Giant](https://en.wikipedia.org/wiki/Robert_C._Prim)'s algorithm:\n", "\n", - "Here's the code. One tricky bit: In the first line inside the `while` loop, we define `(A, B)` to be an edge in which one of `A` or `B` is in the tree, using the exclusive-or operator, `^`. Then in the next line, we make sure that `A` is the one that is in the tree and B is not, by swapping if necessary." + "> **[Prim's algorithm for creating a MST](http://en.wikipedia.org/wiki/Prim%27s_algorithm):** *List all the links and sort them, shortest first. Initialize a tree to be a single root city (we'll arbitrarily choose the first city). Now repeat the following until the tree contains all the cities: find the shortest link that links a city (A) that is in the tree to a city (B) that is not yet in the tree, and add B to the list of A's children in the tree.*\n", + "\n", + "Here's the code. One tricky bit: In the first line inside the `while` loop, we assign `(A, B)` to be a link in which exactly one of `A` or `B` is in the tree, using the exclusive-or operator, `^`. Then in the next line, we make sure that `A` is the one that is in the tree and B is not, by swapping if necessary." ] }, { "cell_type": "code", - "execution_count": 106, - "metadata": { - "collapsed": true - }, + "execution_count": 49, + "metadata": {}, "outputs": [], "source": [ "def mst(vertexes):\n", - " \"\"\"Given a set of vertexes, build a minimum spanning tree: a dict of the form {parent: [child...]}, \n", - " where parent and children are vertexes, and the root of the tree is first(vertexes).\"\"\"\n", + " \"\"\"Given a set of vertexes, build a minimum spanning tree: a dict of the form \n", + " {parent: [child...]}, spanning all vertexes.\"\"\"\n", " tree = {first(vertexes): []} # the first city is the root of the tree.\n", - " edges = shortest_edges_first(vertexes)\n", + " links = shortest_links_first(vertexes)\n", " while len(tree) < len(vertexes):\n", - " (A, B) = shortest_usable_edge(edges, tree)\n", + " (A, B) = first((A, B) for (A, B) in links if (A in tree) ^ (B in tree))\n", + " if A not in tree: (A, B) = (B, A)\n", " tree[A].append(B)\n", " tree[B] = []\n", - " return tree\n", - "\n", - "def shortest_usable_edge(edges, tree):\n", - " \"Find the ehortest edge (A, B) where A is in tree and B is not.\"\n", - " (A, B) = first((A, B) for (A, B) in edges if (A in tree) ^ (B in tree)) # ^ is \"xor\" \n", - " return (A, B) if (A in tree) else (B, A)" + " return tree" ] }, { @@ -3847,23 +1637,21 @@ }, { "cell_type": "code", - "execution_count": 107, - "metadata": { - "collapsed": false - }, + "execution_count": 50, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "80 node Graph of total length: 11518.4\n" + "1089 node Graph of total length: 37868.3\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -3871,418 +1659,155 @@ } ], "source": [ - "plot_graph(mst(USA_map))" + "def plot_graph(graph):\n", + " \"Given a graph of the form {parent: [child...]}, plot vertexes and links.\"\n", + " vertexes = {v for parent in graph for v in graph[parent]} | set(graph)\n", + " links = [(parent, child) for parent in graph for child in graph[parent]]\n", + " total = sum(distance(p, c) for (p, c) in links)\n", + " print('{} node Graph of total length: {:.1f}'.format(len(vertexes), total))\n", + " if len(graph) > 1000: plt.figure(figsize=(15, 7.5))\n", + " for link in links:\n", + " plot_segment(link, 'b.-')\n", + "\n", + " \n", + "plot_graph(mst(USA))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This algorithm clearly produced a spanning tree. It looks pretty good, but how can we be sure the algorithm will *always* produce a minimum spanning tree? \n", + "This certainly looks like a spanning tree. But can we prove it is a minimum spanning tree? \n", "\n", "1. The output is a **tree** because (1) every city is connected by a path from the root, and (2) every city only gets one parent (we only add a B that is not in tree), so there can be no loops. \n", "2. The output is a **spanning tree** because it contains all the cities.\n", - "3. The output is a **minimum spanning tree** because each city was added with the shortest possible edge. Suppose this algorithm produces the tree T. For another putative spanning tree to be shorter, it would have to contain at least one city C whose edge from its parent was shorter than the edge in T. But that is not possible, because the algorithm always chooses the shortest possible edge from C's parent to C.\n", + "3. The output is a **minimum spanning tree** because each city was added with the shortest possible link. Suppose this algorithm produces the tree T. For another putative spanning tree to be shorter, it would have to contain at least one city C whose link from its parent was shorter than the link in T. But that is not possible, because the algorithm always chooses the shortest possible link from C's parent to C.\n", "\n", "\n", + "# Turning a Minimum Spanning Tree into a Tour (`mst_tsp`)\n", "\n", - "**Note:** There are refinements to Prim's algorithm to make it more efficient. I won't bother with them because they complicate the code, and because `mst` is already fast enough for our purposes.\n", - "\n", - "Turning a Minimum Spanning Tree into a Tour (`mst_tsp`)\n", - "---\n", "\n", "Given a minimum spanning tree, we can generate a tour by doing a pre-order traversal, which means the tour starts at the root, then visits all the cities in the pre-order traversal of the first child of the root, followed by the pre-order traversals of any other children." ] }, { "cell_type": "code", - "execution_count": 108, - "metadata": { - "collapsed": false - }, + "execution_count": 51, + "metadata": {}, "outputs": [], "source": [ "def mst_tsp(cities):\n", " \"Create a minimum spanning tree and walk it in pre-order, omitting duplicates.\"\n", - " return preorder_traversal(mst(cities), first(cities))\n", + " return Tour(preorder_traversal(mst(cities), first(cities)))\n", "\n", "def preorder_traversal(tree, root):\n", " \"Traverse tree in pre-order, starting at root of tree.\"\n", - " result = [root]\n", + " yield root\n", " for child in tree.get(root, ()):\n", - " result.extend(preorder_traversal(tree, child))\n", - " return result" + " yield from preorder_traversal(tree, child)\n", + " \n", + "def improve_mst_tsp(cities): return improve_tour(mst_tsp(cities))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "To better understand pre-order traversal, let's go back to the `Ptree` example, and this time label the vertexes:" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "8 node Graph of total length: 10.9\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "P = [Point(0, 0.1), \n", - " Point(-2, -1), Point(0, -1), Point(2, -1), \n", - " Point(-2.9, -1.9), Point(-1, -1.9), Point(1, -1.9), Point(2.9, -1.9)]\n", - "\n", - "Ptree = {P[0]: P[1:4], P[1]: P[4:6], P[3]: P[6:8]}\n", - "\n", - "plot_graph(Ptree)\n", - "plot_labeled_lines(P)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A pre-order traversal starting at 0 would go to the first child, 1, then to its children, 4 and 5, then since there are no children of 4 and 5, it would continue with the other children of 0, hitting 2, then 3, and finally the children of 3, namely 6 and 7. So the following should be true:" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 110, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "preorder_traversal(Ptree, P[0]) == [P[0], P[1], P[4], P[5], P[2], P[3], P[6], P[7]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And this is what the pre-order traversal looks like as a tour:" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_tour([P[0], P[1], P[4], P[5], P[2], P[3], P[6], P[7]])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can think of this as starting at the root (at the top) and going around the outside of the tree counterclockwise, as if you were walking with your left hand always touching an edge, but skipping cities you have already been to.\n", - "\n", - "We see that the result is a tour, but not an optimal one. \n", + "You can think of this as starting at the root of the tree and going around the outside of the tree, as if you were walking with your hand always touching a link, but skipping cities you have already been to.\n", "\n", "Let's see what `mst_tsp` can do on the USA map:" ] }, { "cell_type": "code", - "execution_count": 112, - "metadata": { - "collapsed": false - }, + "execution_count": 52, + "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mst: 1089 cities ⇒ tour length 58059 (in 0.879 sec)\n" + ] + }, { "data": { - "image/png": "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\nMAzDSMr/BwzNZAmFc5HQAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "80 city tour with length 17924.5 in 0.004 secs for mst_tsp\n" - ] } ], "source": [ - "plot_tsp(mst_tsp, USA_map)" + "do(mst_tsp, USA)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Not so great. Can the alteration strategy help?" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def altered_mst_tsp(cities): return alter_tour(mst_tsp(cities))" - ] - }, - { - "cell_type": "code", - "execution_count": 114, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\ny0KtgVW7AAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "80 city tour with length 14105.0 in 0.022 secs for altered_mst_tsp\n" - ] - } - ], - "source": [ - "plot_tsp(altered_mst_tsp, USA_map)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Better. Let's go to the benchmarks:" - ] - }, - { - "cell_type": "code", - "execution_count": 115, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " mst_tsp | 5953 ± 361 ( 5334 to 7030) | 0.002 secs/map | 30 ⨉ 60-city maps\n", - " nn_tsp | 5668 ± 488 ( 4674 to 6832) | 0.001 secs/map | 30 ⨉ 60-city maps\n", - " greedy_tsp | 5392 ± 306 ( 4554 to 5967) | 0.002 secs/map | 30 ⨉ 60-city maps\n", - " dq_tsp | 5268 ± 236 ( 4743 to 5752) | 0.042 secs/map | 30 ⨉ 60-city maps\n" - ] - } - ], - "source": [ - "benchmarks([mst_tsp, nn_tsp, greedy_tsp, dq_tsp])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Not very encouraging: `mst_tsp` is the second slowest and has the longest tours. I'm sure I could make it faster (at the cost of making the code a bit more complicated), but there is no point if the tours are going to be longer. \n", + "That's 5,000 miles worse than `nn_tsp`. Why would anyone want to use the minimum spanning tree algorithm, when the nearest neighbor algorithm is simpler to describe and implement, runs faster, and produces shorter tours? \n", "\n", - "What happens when we add the alteration strategy?" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " altered_dq_tsp | 4953 ± 221 ( 4575 to 5399) | 0.049 secs/map | 30 ⨉ 60-city maps\n", - " altered_nn_tsp | 4820 ± 233 ( 4450 to 5346) | 0.008 secs/map | 30 ⨉ 60-city maps\n", - " altered_mst_tsp | 4823 ± 227 ( 4354 to 5250) | 0.009 secs/map | 30 ⨉ 60-city maps\n", - " altered_greedy_tsp | 4766 ± 207 ( 4320 to 5185) | 0.009 secs/map | 30 ⨉ 60-city maps\n", - " repeated_altered_nn_tsp | 4640 ± 194 ( 4298 to 4991) | 0.148 secs/map | 30 ⨉ 60-city maps\n" - ] - } - ], - "source": [ - "benchmarks([altered_dq_tsp, altered_nn_tsp, altered_mst_tsp, altered_greedy_tsp, repeated_altered_nn_tsp])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now `altered_mst_tsp` is in the middle of the pack, both in tour length and in run time.\n", + "# Guaranteed Tour Length!\n", "\n", - "So why would we want to use the rather complicated minimum spanning tree algorithm, when the greedy algorithm is simpler to implement, runs faster, and produces shorter tours?\n", + "The \"giant\" thing about the minimum spanning tree algorithm is that it comes with a *guarantee*, which none of the other algorithms offer. The algorithm guarantees that the tour length will be no worse than twice as long as the optimal tour. (And, with a bit more [complication](https://en.wikipedia.org/wiki/Christofides_algorithm), you can modify it to give a guarantee of 1.5 times longer.) The guarantee works like this:\n", "\n", - "Guaranteed Tour Length!\n", - "---\n", - "\n", - "The great thing about the minimum spanning tree algorithm is that it comes with a *guarantee*, which none of the other algorithms offer. You are guaranteed that the tour length it comes up with will be no worse than twice as long as the optimal tour. (And, with a bit more complication, you can modify it to give a guarantee of 1.5 times longer.) The guarantee works like this:\n", - "\n", - "1. The minimum spanning tree, by definition, connects all the cities with the shortest possible total edge length.\n", - "2. So if you could follow each edge in the spanning tree just once, and that formed a legal tour, then that would be guaranteed to be\n", + "1. The minimum spanning tree, by definition, connects all the cities with the shortest possible total link length.\n", + "2. So if you could follow each link in the spanning tree just once, and that formed a legal tour, then that would be guaranteed to be\n", "a minimal tour. \n", "3. But you can't do that in general; in general there will be places where you skip to the next city without following the spanning tree. Any such skip, however, is a straight line, and thus will be less than you would take if you went to the next city by following along the spanning tree.\n", - "4. If you did follow along the spanning tree, you would follow some edges twice, and some edges once. Hence the total length of the tour would be at most twice the spanning tree, and thus at most twice the minimal tour.\n", + "4. If you did follow along the spanning tree, you would follow some links twice, and some links once. Hence the total length of the tour would be at most twice the spanning tree, and thus at most twice the minimal tour.\n", "\n", - "A guarantee is great from a theoretical point of view, but in practice the greedy or nearest neighbor algorithms do just better than the minimum spanning tree, on the maps that we actually see. " + "A guarantee is great from a theoretical point of view, but in practice the greedy or nearest neighbor algorithms do better than the minimum spanning tree, and the improved versions of those algorithms do significantly better, on the maps that we actually see. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Shoulders of Giants: Held-Karp Algorithm: `hk_tsp`\n", + "# Shoulders of Giants: Held-Karp Algorithm: `held_karp_tsp`\n", "\n", "\n", - "\n", - "
Held, Shareshian, Karp (Computer History Museum)
\n", + "| ![](http://archive.computerhistory.org/resources/still-image/IBM/IBM_People/IBM.3_mathematicians_Held_Shareshian_Karp.ca1964.102650390.lg.jpg) |\n", + "|----|\n", + "| [Held, Shareshian, Karp (Computer History Museum)](http://www.computerhistory.org/collections/catalog/102650390) |\n", "\n", - "\n", - "\n", - "
xkcd 399
\n", + "| ![](http://imgs.xkcd.com/comics/travelling_salesman_problem.png) |\n", + "|----|\n", + "| [xkcd 399](http://xkcd.com/399/) |\n", "\n", - "Another algorithm that shows up with a literature search is the [Held-Karp Dynamic Programming Algorithm](http://en.wikipedia.org/wiki/Held%E2%80%93Karp_algorithm), named after giants [Michael Held](http://www.computerhistory.org/collections/catalog/102650390) and [Richard Karp](http://en.wikipedia.org/wiki/Richard_M._Karp). It is an algorithm for finding optimal tours, not approximate ones, so it is not appropriate for large *n*. But even in its simplest form, without any programming tricks, it can go quite a bit further than `alltours_tsp`. That is because `alltours_tsp` is O(*n*!), while the Held-Karp algorithm is only O(*n*2 2*n*). How did Held and Karp achieve this speedup? They noticed that `alltours_tsp` wastes a lot of time with permutations that can't possibly be optimal tours. Consider the following 10-city problem, with a 6-city segment shown:" + "\n", + "Another algorithm that shows up with a literature search is the [Held-Karp Dynamic Programming Algorithm](http://en.wikipedia.org/wiki/Held%E2%80%93Karp_algorithm), named after giants [Michael Held](http://www.computerhistory.org/collections/catalog/102650390) and [Richard Karp](http://en.wikipedia.org/wiki/Richard_M._Karp). It is an algorithm for finding optimal tours, not approximate ones, so it is not appropriate for large *n*. But even in its simplest form, without any programming tricks, it can go quite a bit further than `exhaustive_tsp`. That is because `exhaustive_tsp` is O(*n*!), while the Held-Karp algorithm is only O(*n*2 2*n*). How did Held and Karp achieve this speedup? They noticed that `exhaustive_tsp` wastes a lot of time with permutations that can't possibly be optimal tours. Here's the key idea:\n", + "\n", + "\n", + ">*Given a start city A, an end city C, and a set of middle cities Bs, then out of all the possible segments that start in A, end in C, and go through all and only the cities in Bs, only the shortest of those segments could ever be part of an optimal tour.*\n", + "\n", + "Of course, we don't know that the optimal tour goes through exactly those Bs cities before hitting C. But if it does, then we need only consider the permutation of Bs that leads to the shortest segment. Why is that such a big deal? Suppose we are considering segments of the form:\n", + "\n", + " [A, {B1, ... B10}, C, {D1, ... D10}, E]\n", + " \n", + "That is, segments that start with A, then have have 10 Bi cities in some order, then C, then 10 Dj cities in some order, then E. With the Exhaustive Search algorithm, we have to consider all orderings of Bi and all orderings of Dj, so overall there would be (10!)2 ≈ 13 trillion orderings of this form. But with Held-Karp, we consider the Bi and Dj separately, and chose the best segment from each, giving us only 2 × 10! ≈ 7 million orderings to consider. (Actually it is even better than that, because we use Held-Karp recursively to split the Bi and Dj into pieces.) \n", + "\n", + "So far we have only been talking about segments. We know that the TSP is defined for tours, not segments. So even if we find the shortest possible segment, it might not be the shortest possible tour. But here's something we do know: a tour has to end somewhere. So just find the shortest segment from the start city, `A`, to each possible end city, `C`. Out of those segments, choose the one that is the shortest tour. That gives us our algorithm:" ] }, { "cell_type": "code", - "execution_count": 117, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_labeled_lines(cross, 'r-', [0, 4, 1, 3, 2, 9])" - ] - }, - { - "cell_type": "markdown", + "execution_count": 53, "metadata": {}, - "source": [ - "The `alltours_tsp` would consider 4! = 24 different tours that start with those 6 cities. But that seems wasteful: there is no way that this segment could be part of an optimal tour, so why waste time on *any* continuation of it? The proof that this segment can never be part of an optimal tour comes down to two things. First, we demonstrate another tour that also starts in city 0 and ends in city 9, and along the way goes through cities 1 through 4, and is shorter:" - ] - }, - { - "cell_type": "code", - "execution_count": 118, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_labeled_lines(cross, [0, 1, 2, 3, 4, 9])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Second, we need this key property:\n", - "\n", - ">*Given a start city A, an end city C, and a set of middle cities Bs, then out of all the possible segments that start in A, end in C, and go through all and only the cities in Bs, only the shortest of those segments could ever be part of an optimal tour. \n", - "\n", - "Of course, we don't know that the optimal tour goes through exactly those Bs cities before hitting C. But if it does, then we need only consider the permutation of Bs that leads to the shortest segment. So we can throw out the red zig-zag segment above, and keep the nice smooth blue segment.\n", - "\n", - "So far we have only been talking about segments. We know that the TSP is defined for tours, not segments. So even if we find the shortest possible segment, it might not be the shortest possible tour. But here's something we do know: a tour has to end somewhere. So just find the shortest segment from the start city, `A`, to every possible end city, `C`. That will give you *n*-2 segments. Out of those, don't choose the shortest *segment*, but rather choose the shortest *tour*.\n", - "\n", - "That gives us our algorithm:" - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "metadata": { - "collapsed": false - }, "outputs": [], "source": [ - "def hk_tsp(cities):\n", - " \"\"\"The H eld-Karpshortest tour of this set of cities.\n", + "def held_karp_tsp(cities):\n", + " \"\"\"The Held-Karp shortest tour of this set of cities.\n", " For each end city C, find the shortest segment from A (the start) to C.\n", " Out of all these shortest segments, pick the one that is the shortest tour.\"\"\"\n", " A = first(cities)\n", + " shortest_segment.cache_clear() # Start a new problem\n", " return shortest_tour(shortest_segment(A, cities - {A, C}, C)\n", - " for C in cities if C is not A)\n", + " for C in cities - {A})\n", "\n", "# TO DO: function: shortest_segment(A, Bs, C)" ] @@ -4291,28 +1816,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now for `shortest_segment(A, Bs, C)`. It is defined to produce the shortest segment that starts in city `A`, ends in `C`, and visits some permutation of `Bs` cities in the middle. If there are no `Bs` cities, then of course the shortest segment is to go directly from `A` to `C`. If there are `Bs` cities, then one of them has to be the last `B` city visited (just before visiting `C`). So for each `B`, find the shortest segment that first goes from `A`, through all the other `Bs` cities, then to `B`, and finally to `C`. Out of all these candidate segments, return the one with the minimum segment length.\n", + "Now for `shortest_segment(A, Bs, C)`, the shortest segment that starts in city `A`, ends in `C`, and visits some permutation of `Bs` cities in the middle. If there are no `Bs` cities, then of course the shortest segment is to go directly from `A` to `C`. If there are `Bs` cities, then one of them has to be the last `B` city visited (just before visiting `C`). So for each `B`, find the shortest segment that first goes from `A`, through all the other `Bs` cities, then to `B`, and finally to `C`. Out of all these candidate segments, return the one with the minimum segment length.\n", "\n", - "**Note:** the decorator `@functools.lru_cache` makes this a **dynamic programming** algorithm, which is a fancy name meaning that we cache the results of sub-computations because we will re-use them multiple times." + "**Note:** the decorator `@cache` makes this a **dynamic programming** algorithm, which is a fancy name meaning that we cache the results of sub-computations because we will re-use them multiple times. In the function `held_karp_tsp` we clear the cache at the start of each new problem." ] }, { "cell_type": "code", - "execution_count": 120, - "metadata": { - "collapsed": false - }, + "execution_count": 54, + "metadata": {}, "outputs": [], "source": [ - "@functools.lru_cache(None)\n", + "@cache(None)\n", "def shortest_segment(A, Bs, C):\n", " \"The shortest segment starting at A, going through all Bs, and ending at C.\"\n", " if not Bs:\n", " return [A, C]\n", " else:\n", - " segments = [shortest_segment(A, Bs - {B}, B) + [C] \n", - " for B in Bs]\n", - " return min(segments, key=segment_length)\n", + " return min((shortest_segment(A, Bs - {B}, B) + [C] for B in Bs),\n", + " key=segment_length)\n", " \n", "def segment_length(segment):\n", " \"The total of distances between each pair of consecutive cities in the segment.\"\n", @@ -4325,306 +1847,656 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "That's all there is to it. Let's compare `alltours_tsp` with `hk_tsp` on 10 city tours:" + "That's all there is to it. Let's compare `exhaustive_tsp` with `held_karp_tsp` on 10 city tours:" ] }, { "cell_type": "code", - "execution_count": 121, - "metadata": { - "collapsed": false - }, + "execution_count": 55, + "metadata": {}, "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVgAAAEACAYAAAD2sW7aAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGkpJREFUeJzt3XmYnFWVx/HvCYFAEpodk0awQjBsARkRBxnZkxEBCYoi\nCPgouMS4O4qCzagzYQ3OPIDDRBaVTcCVsEdABTWACIPQQBRCGsEssmZpIAqc+ePepqq7qjvVSb11\n37fq93meejodSOokJD9un3vfc83dERGRxhuRugARkValgBURyYgCVkQkIwpYEZGMKGBFRDKigBUR\nyYgCVkQkIwpYEZGMKGBFRDKigBURyYgCVkQkIwpYEZGMKGBFRDKigBURyYgCVkQkIwpYEZGMKGBF\nRDKigBURyYgCVkQkIwpYEZGMKGBFRDKigBURyYgCVkQkIwpYEZGMKGBFRDKigBURyYgCVkQkIwpY\nEZGMKGBFRDKigBURyYgCVkQkIwpYEZGMjExdwGDeYXbBlrDHCsbu4Iwaaax6ZUNWzv8b3HOn+ydS\n1ycisjq5DdgtYY85sBusJLwYCew2LW1ZIiJ1y22LYAVjdxjO94uI5E1uV7DOqJFx5drPa4xe34w/\nAz3Awvix8rXUndeaVKaIyKByG7DGqleoUd8IXnoZOAyYAJTi6/CKb3eY8RfKgTswhJe64xmWLiIC\n5DhgN2TlfGC36u9fMd+d+cD8Wj/OjDHANpQDdwLw1orPNzTjCfqHbmUI/00BLCKNkNuA/RvcMw1Y\nwYY7vsYGo0bw4st9pwiG+nHu9AKPxFeVGMBvohy4JWD3im+PqRHAPZRD+GkFsIjUw9zznRVmTAB+\n5U6pSe83luoArnyNoTp8K18KYBEBcryCrbAe8PdmvZk7K4GH4quKGRtSHcBvr/j2BmZDBvAzCmCR\n9lCUgF2Vuog+7qwAuuOrSkUAV27C7Vnx7VGrCeBnFcAiraEIATuKJq5g11YdAdxB/xXwBGCvis/X\niwFc6whaD/CcAlikGIoQsE1tEWTNneXAg/FVxYyNqG5BvLPi2yMrVsC1Qvh5BbBIPhQlYHPTIsia\nO8uAB+KrihkbUx3Ae1NeDY+o0YKoDOIXFMAizVGEgC1UiyBr7rwAvAD8sdY/jwFcGvDah3IAM0gP\neCHQE39+EWmAIgRsS7UIshYD8v74qhIDuHIDrgTsFz9OMOM1Bt+AWxhX2HUz6yjB5JkwvhMWL4Lu\nLvflPcP5OUSKqigB2zYtgqzFAP6/+OrHDIN+K+AJwLbAAZQD+BWGOAdcGcAhXKfdCrMnhuPDvcD0\nPc06pihkpR0UIWDVImiS2Jt9Pr4GC+BN6L/6nQhM6fvcjH/weuAeswOcHcMVwsfZE2HBTODY7H4l\nIvlQhIDVCjYnYgA/F1/3DfznMYA35fXwtTPK4dpnDDCuM9tKRfIht/NgK2gFWxDuuDvPunOvOz+F\n++8ObYFKvcCSRSnqE2m2IgSsNrkKa9E34OuryiHbC0xfAN1dKasSaRa1CCRDPUfAI7+HqX8JbYEl\nOkUgbaUIAasWQQGZ8WbgRNhxD/d5C1PXI5KCWgTScHGz6wLgNHcUrtK2ihKwahEUywmE4wLnpC5E\nJKWitAieS12E1MeMTuB04EB3Xk1dj0hKRVnBqkVQHOcB33WvPaxGpJ0UYQWrFkFBmPE+YGfgmNS1\niORBEQJWpwgKIA6ROQ84yp2XU9cjkgdqEUijzALmuPOb1IWI5EURVrBqEeScGfsDBxHaAyISFWEF\nqxZBjpmxAeHM64x4HY6IREUIWLUI8u2bwL3uXJe6EJG8KUKLYBRqEeSSGW8FPgLsmrgUkVzSClbW\niBkjgYuAE91ZmroekTxSwMqa+hLwDHBp6kJE8kotAhm28qQs9tAV4CKD0wpWhqViUtapmpQlMrSi\nBKxWsPnRNynr3NSFiORdUVoEWsHmgCZliQxPUVawCth80KQskWEowgpWLYIc0KQskeErQsCqRZCY\nJmWJrBlzz+8pm7hj/Rqwjjuvpa6nXZlxIfAPd2akrkWkSPK+gh0JvKJwTUeTskTWXN43udQeSEiT\nskTWTt4DVicI0vommpQlssby3iLQY7JNZtZRgskzYeIkKO0CT+8Ns1OXJVJIeQ9YrWCbKITrtFth\n9sTwsFYvMP0qs44p7st70lYnUjxqEUiFyTPL4Qrh4+yJ4ftFZLjyHrBqETTV+M5yuPYZA4zrTFGN\nSNHlPWC1gm2qxYtCW6BSL2CaOyCyBhSwUqG7C6YvKIdsL/D5RTBrNzNOSFmZSBHlfZNLLYImcl/e\nY9YxBRbMDG2BJYtC6F40CrjBjEnASXrwQ6Q+eQ9YrWCbLJ4WOHbg95uxJ/Az4MdmHOfOi82uTaRo\n1CKQurjzDDAVeBG43YzxiUsSyb28B6xaBDnizirgw8C1wF1muq5bZCh5D1itYHPGHXfnP4GvAbeZ\ncXDqmkTyKu8Bq2EvOeXOlcA04GIzPpO6HpE8ynvA6jaDHHNnHvAvwAwzzjXL/aapSFMVIWC1gs0x\ndx4H9gJ2BOaYsWHikkRyI7cBGwaPHH88fO5Qs70uD59LHrnzAnAw8BTwWzO2SVySSC7k8sqYQaY6\nLYA5muqUY/GKny/F1zR3/pC4JJGkchqwe10OtxzTf/BILzD1Cvd5VYfgJV/MOBy4EPikOz9LXY9I\nKjltEQw21Wm3Pc2YHFdKklPuXEO4x+tcM07Ufy9pVzkN2MGmOvEqcB3whBmzzXiPWVUSSw64cy+w\nJ/Ah4AIz1k1ckkjT5TRga011mr4ALn8XsC3wr8CjwBeAJWbMNePzZrw5UcFSgztPAe8ExgE3m7FJ\n4pJEmiqXPViovBuqPNWp1gaXGR3AgcAhhJ3slcCN8XV7fLxTEjJjHeBsQtvgUHcWJC5JpClyG7Br\nIvb63kII2oOBXYBfE8L2Jnf+kq46MWMGcArwfnd+l7oekay1VMAOZMZmhHbCwYTV0xLgBkLg3unO\nPxKW15bMOAi4FPiCOz9MXY9Illo6YCvFL1P3oLy6nQjcQgjcm91ZmrC8tmLGLoTNyu8D/+FOe/wh\nlLbTNgE7UJxnehAhbKcAj1Hu3d6jqf3ZMmMcMIfw+36COy8nLkmk4do2YCvFI0R7Ud4o2xK4mRC2\nc915Pvx7fRtv4zvDUbLaG29SHzNGA5cA44H3uvN04pJEGkoBW4MZbwLeTQjb/YA/wrw74aKj4Lyt\n9fhu45gxApgJfBA4xJ35iUsSaRgF7GqYsT6wL8w4B2Ztr8d3s2HGR4EzgA+5c1vqevJKX0UVi+Z3\nrkbsDc41W7oIxmzf/5+OIZzTlbXlzvfN6AGuMuNkdy5OXVPeDDIEaU+zDn0VlVM5fZIrjwZ7fHfJ\nohTVtCJ3fgXsA5xkxpmxfSCvmzyzHK4QPs6eGL5f8kh/gOs22OO73V0pq2o17vyJMMPgHYQrwkcn\nLikXwv9sdv6n2kOQ9FVUXqlFUCf35T1mHVNg/D2w9Al4dL76X9lw5xkzphJGHt5uxmHuLE5dVypm\n7A+cDZtsGf7HPnAfYMXzaSqT1dEm1zCZsRh4mzt/TV1Lq4uPPn8d+DjwHnceSFxSU5mxM3AmsBNw\nEnTcXd2D/fKz8G+9sN3+8foeyREF7DCYsQHwPDBaDyI0jxlHAecCH3HnxtT1ZC0+BPMt4HDgdOD8\nvqFFtYYgwfKDgC7gIHe6kxUuVRSww2DGDsC17kxKXUu7MeMdwM+AU935Tup6smDGWODLwGeB7wGn\n9T3kUseP/RDwX8Bh7vw+uyplOLTJNTwTgIWpi2hH7txJeNqu5a4IN2OkGZ8A/gy8Gdjdna/UG64A\ncXDOx4HrY89WckABOzwloCdxDW3LnYW00BXhZpgZhwIPAEcTVp/HuK/ZnzF3rgOOBK424z2Nq1TW\nlAJ2eLSCTaxVrgg3Y3fgl8BZwInAAY24hdedXxNmalwY2waSkAJ2eEooYJOLc3ynE+bK3mnG2xKX\nVDczSmZcQRjXeCWwqzvXN3Jkozv3EG75ONOMTzXq55XhU8AOzwTUIsgFd9ydbwOfBm4y432paxqK\nGZuYMQu4l3Cf3CR3LnDnlSzez52HgH2BL5vxtSzeQ1avZTYKmkQtgpxx5xozniT0ZLcDZuVpgLcZ\no4AZwEnANcDkZj004c7jZuwN/MKMjYGT8vR70w50TKtOcUNlCTBWf0jzx4w3AtcD9wAzUl8HFB+S\nOJJwjvVh4KtxVZmils2Am4D7gE+782qKOtqRWgT1KwE9Ctd8ytMV4XHVeBdh8+oEdw5NFa4A7jxL\n6MluD1wWB8xLEyhg61dC/ddcc2cl4emnB4B5Zkxs5vubsb0Z1wCXEZ482yNOCEvOnRWE0xdjgZ/H\npxIlYwrY+qn/WgDuvOrOF4HzCMe4/iXr9zTjDWacD/wW+B2wgztX5O1xandeAo4AlhE2BjsSl9Ty\nFLD1K6EVbGG4cz7wUcJqLZPzoGaMNqMLeAhYRQjWWXm+wDH2po8DHgFuM2PzxCW1NAVs/bSCLRh3\nbib0Hk8z4xtx42mtmbGOGccTHm3dBfhnd74Ye525F1fWMwjX1t9hxlaJS2pZOqZVvxIK2MJx50Ez\n9iRcET7JbM2vCI8B/S7C01fLgCPcubtx1TZP3Kw92YxlwG/MmOrOgtR1tRod06qTGS8A27rzXOpa\nZPjips4lQCdrcEW4GbsBs4BtgK8Cc1rlRIkZnwROQeMOG04tgjrEIz8G9U83knyJGzxHAXcAd8XR\nk6tlxtZmXALcDPyc8KDANa0SrgDufBf4CnCrGW9PXU8rUcDWp4TOwBaeO6+5czIwk3AVzYGD/btm\nbGTG6cD9wJOER1vPT/0AQ1bcuRL4GBp32FDqwdZHG1wtJF4RvhC42uy2b8Mpu8L4znBz8LJvwUN9\nNwTcALwlPsTQ8ty53owjgR+Z8TF3rk1dU9EpYOtTQke0Woo7vzY742hYejPcsm75jquuI+HhebDT\n1Ha7Awz6fl84BLjOjA53Lk9dU5EpYOszAXgsdRHSaNceXw5XCB9nrgtTn3Kf13bh2sede2L75OYY\nsuenrqmo1IOtTwmtYFvQ+M7+V2BD+HxcZ4pq8iTOTtgH+JIZJzXqDHG7UcDWRz3YlrR4UWgLVOol\n3NYq8YqevYFjgDMUssOngF2N+IeqhFawLai7C6YvKIdsL+Hz7q6UVeVJnF27L7AfMNuMddJWVCx6\n0GA1zNgCmO/OZqlrkcYz6yjB5JmhLbBkEXR3uS/vSV1X3sR5yHOApcCHW/W4WqMpYFcjHrw+3704\n9z6JZMGM9YEfAesAH3DnxcQl5Z5aBKtXQu0BEeIMhyMITzRq3GEdFLCrpw0ukSi2Bj4MdAO/1LjD\noSlgV6+EVrAir4vjDj8DzEXjDoekgF09rWBFBojXpn8d+AHh5ojtEpeUS3qSa/VKaAUrUpM7Z8VR\nnrebcZA7D6auKU90imAIZowgHI7cTDumIoMz4yjgHOCwog4hz4JaBEMbByxTuIoMzZ2rgOMJ4w4H\nHQPZbhSwQyuh9oBIXdy5AXg/cKUZ01LXkwfqwQ5NG1wiw+DO7WYcTHnc4WWpa0pJATu0ElrBigyL\nO3+IbYK5MWT/J3VNqShghzYB+H3qIkSKxp2HzdgHuMWMjYDT2/HKJfVgh1ZCK1iRNVIx7vBo4Kx2\nHHeogB2aerAia6Fi3OE+wAXtNu5Q52AHEf8gvAh0uLMqdT0iRRbHHV4DPAMc587fE5fUFFrBDm4r\n4GmFq8jac2cFcAiwPnCNGaMTl9QUCtjBqT0g0kBx3OH7gecIFypulLikzClgB1dCG1wiDVUx7vAB\nwrjDLRKXlCkF7OC0ghXJQBx3+FngJsK4wzcmLikzCtjBldAKViQTcdxhF/A94DetOu5QATs4rWBF\nMubOLOA0wrjDXVPX02h6kmtwJbSCFcmcOxeasZzw1Nc0d+5KXVOj6BxsDWasC6wExrjzSup6RNpB\nHBJzCXC0O7emrqcR1CKobRtgscJVpHncuZFwa+0PzTg8dT2NoBZBbSXUfxVpOnfuMOPdhMHdGxZ9\n3KECtjZtcIkk4s69ZhxAGHe4sTvnpa5pTSlgayuhDS6RZNx5JI47vDU+8XVqEccdqgdbm1awIom5\n00MYd/hBYFYRxx0qYGsroRWsSHIV4w7fCVxYtHGHCtjatIIVyQl3ngOmEP5eXmnGeolLqpsCdgAz\nNgA2BRanrkVEAndWEsYdrgfMKcq4QwVstW2AJ915NXUhIlJWMe7wacIJg9yPO1TAVpuA+q8iuRQf\n/vkIcD/wKzO2TFvR0BSw1Uqo/yqSW3Hc4eeAGwjjDrdOXNKgdA62mja4RHIunok9xYxlhHGHU915\nNHVdA2kFW62EWgQiheDO2cCp5HTcoVaw1bSCFSmQAeMOD3fnztQ19dEKtloJrWBFCsWdq4GPAtea\nMSV1PX0UsBXMGAuMBZamrkVEhmfAuMP3pq4H1CIYqAQ8UcShEiJSNe6ww51LUtajgO2vhPqvIoUW\nxx3uD/zCjI3cOTdVLQrY/vSQgUgLcGd+HHd4S3zia2aKr0zVg+2vhFawIi2hYtzhB4CzU4w7VMD2\npyNaIi3EnSXAfsBeJBh3qIDtr4RaBCItJY47nEr4+32VGaOa9d4K2P60ghVpQXHc4aHAuoRxh2Oa\n8b7mrhNJAGZsDDwJdOiYlkhrMmMkcDEwEY74FCz+KozvhMWLoLvLfXlPI99PpwjKSsBChatI63Ln\nFTM+CvddDFvfA5eOgjFALzB9T7OOKY0MWbUIynRES6QNhHGHn1kXTo3hCuHj7IkweWYj30sBW1ZC\n/VeRNjG+k6o27BhgXGcj30UBW6YNLpG2sWRRaAtU6o3f3zgK2LISahGItLyw0fW/o+Hkl8oh2wtM\nXwDdXY18r7bf5DLrKIW+y74HwIMjzO64v9E7iSKSD/HK7x/CrqPhvrfC1K7QFliSySmCtj6mFcJ1\n2q2huf36TuICmNPQnUQRSc+MDYCfAH8HjnJnVdbv2eYtgskzy+EK5Z3EQy41Y/t4Zk5ECi7Oer4e\nWAYc2YxwhbZvEQy2k7jVjoQbKzvN+BPQHV8Pxo9P6rysSDHEaVo3Ao8An3Tn1Wa9d5sH7OK4k1gZ\nsr3AvLnuHBsfp9sR2AWYDHw+fhxrxkMMCF53nm5q+SIyJDM2B+YCvwO+EK/8bt77qwc7/B6sGZsS\ngrbytQuht9NN/+B92J3lmf5CRKSKGeOAW4HrgJNTfNXZ1gELlacI1m4nMc6aHE85bPuCdyfgafoH\nbzcw352XG/OrEJFKZmxNCNfLgFNTtfTaPmCzFudPlugfupOBiYRztwOD97Fm9ohEWo0ZEwnheq47\n/520FgVsGvE83iSqg3c8MJ/qVsNT2lgTGZoZOwC3EFats5PXo4DNl3icpHJjre81hurV7oPuPJOo\nVJFcMeMtwE3A19y5NHU9oIAtDDM2A3amOnhXUR28D7mzIlGpIk1nxtsJm1mfcefHqevpo4AtsLix\n1kn1xtqOwN+ovbHWlAPWIs1ixt7AT4Hj3bk+dT2VFLAtKG6sTaA6eLclTAwbGLwLtLEmRWTGVOAK\n4Gh3bktdz0AK2DYSL3ubRHXwvoHqjbVutLEmOWbGYcBFwPvc+W3qempRwErfxtpOVPd3N6A6dLu1\nsSapmfFB4BzgUHf+kLqewShgZVDxMcNaG2svUXtjbWWiUqWNmPER4DTgXe48mLicISlgZVjixtpW\nVLcZdgCWUntj7e9pqpVWY8YM4GvAVHf+lLqe1VHASkPEjbVtqQ7eCcDjVAfv49pYk+Ew4yvAp4AD\n3YtxvZMCVjIVN9a2pzp4tySMjxsYvH/VxppUil81/TtwNDDFnacSl1Q3BawkYcaGhI21gcE7itob\na88mKlUSiuF6JnAQoS2wNHFJw6KAlVwxYwvCxtrA4H2R8sDzvtfD2lhrXWaMAM4D9gAOcue5xCUN\nmwJWci+uYt5I/9m7fRtri6le8f5JG2vFFnv6FwHbAYcUdaayAlYKK/4lnEh18JaABVQH70JtrOWf\nGesS5rhuBhzu/vrd2oWjgJWWY8b61N5Y2wJ4mOrgXaSNtXyI/+2uJlzI+oGiD6VXwErbMKOD8sZa\nZfiuS+2NtcL1/IrMjNHANcALwDHu/CNxSWtNASttz4wtqb2xtoLq4H24yF+y5lX8n9/1hDPTH3Pn\nlcQlNYQCVqSGuLG2NdWr3e0JG2sDTzT8WRtrayZeInoTcC9hnmtTb37NkgJWZBjMGEntjbU3ETbW\nBgbvwlYKjEaLXz3cEl9fabVeuAJWpAHi5swOVAfvZoQn1gYG7+JWC5PhMmMrwuWEVwPfasXfDwWs\nSIbM2IjqjbVdCLvktTbWnk9UalOZUQJuA77rzlmJy8mMAlYkgfilceUIyF0IG20rqP3E2ouJSm04\nMyYRWgKz3PlO6nqypIAVyYm4sbYN1cG7PfBXyle4V26sFeookxmTgbnAKe58L3U9WVPAiuRc3Fjb\njur+7jbAY1SveHvyuLFmxu7ADcAX3LkqdT3NoIAVKSgzNqD2xtqmhCfWBgbvklQbSWbsBfwc+IQ7\nc1LUkIICVqTFxI21vgcnKjfWjOo2w0NZb6yZcQBwFXCcO3OzfK+8UcCKtIHY3x1sY20Z1cH7SCM2\n1sw4GPgBYa7A7Wv78xWNAlakjcWZq7U21iYBT1EdvI8OtbFm1lGCyTNhfCesNxJO3RG2PdSduzP+\npeSSAlZEqsSRgZUba33BuzXwKNXB+wR0bAPTboXZE2EM0At89kn4yT7uy3sS/DKSU8CKSN3ixtqO\nVAfvxnDiy/CNzUO49ukFpl7hPu/Y5leb3sjUBYhIcbjzEnBffL3OjI1h6W0wZvP+P2IMMK6zaQXm\nzIjUBYhI8bnzAjz6CFWTHHuBJYtS1JQHClgRaZDuLpi+oByyvYTPu7tSVpWSerAi0jDlUwTjOsPK\ntburXTe4QAErIpIZtQhERDKigBURyYgCVkQkIwpYEZGMKGBFRDKigBURyYgCVkQkIwpYEZGMKGBF\nRDKigBURyYgCVkQkIwpYEZGMKGBFRDKigBURyYgCVkQkIwpYEZGMKGBFRDKigBURyYgCVkQkIwpY\nEZGMKGBFRDKigBURyYgCVkQkI/8PIA8V8VuLTu4AAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, { "name": "stdout", "output_type": "stream", "text": [ - "10 city tour with length 2291.8 in 1.650 secs for alltours_tsp\n" + "exhaustive: 10 cities ⇒ tour length 2720 (in 1.611 sec)\n" ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "plot_tsp(alltours_tsp, Cities(10))" + "do(exhaustive_tsp, Cities(10))" ] }, { "cell_type": "code", - "execution_count": 122, - "metadata": { - "collapsed": false - }, + "execution_count": 56, + "metadata": {}, "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, { "name": "stdout", "output_type": "stream", "text": [ - "10 city tour with length 2291.8 in 0.037 secs for hk_tsp\n" + "held_karp: 10 cities ⇒ tour length 2720 (in 0.032 sec)\n" ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "plot_tsp(hk_tsp, Cities(10))" + "do(held_karp_tsp, Cities(10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We see that `hk_tsp` returns the optimal tour, and it is a lot faster. We can take `hk_tsp` into uncharted territory well beyond the reach of `alltours_tsp`:" + "We see that `held_karp_tsp` is a lot faster. We can extend into uncharted territory beyond the reach of `exhaustive_tsp`:" ] }, { "cell_type": "code", - "execution_count": 123, - "metadata": { - "collapsed": false - }, + "execution_count": 57, + "metadata": {}, "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEACAYAAABfxaZOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHGRJREFUeJzt3XuYlWW5x/HvDSgqOaaRyngIwxKFUEwTcechMc9iZqWi\nYCU70NxUui2FUmtQQ3eeMknd5gnLU4WpuwIPpWFmZgmilsiQCniIFJySk/f+43nHmWEOrDWz1nre\nw+9zXVzrYsT13srM733W/T4Hc3dERKQYesUuQEREakehLyJSIAp9EZECUeiLiBSIQl9EpEAU+iIi\nBaLQFxEpEIW+iEiBKPRFRApEoS8iUiAKfRGRAlHoi4gUiEJfRKRAFPoiIgWi0BcRKRCFvohIgSj0\nRUQKRKEvIlIgCn0RkQJR6IuIFIhCX0SkQBT6IiIFotAXESkQhb6ISIH0iV1AGpnVDYShDTCgHpYs\nhnlT3Jc3xq5LRKSnFPrrCIE/ejZMHwT9gCZgwgizulEKfhHJOoV+O0MbWgIfwuv0QdD3Z2b8GFgN\nrCnhtZQ/0+mrO179/1YRKRqFfjsD6lsCv1k/YOPNgf7ABoT/b+t7LeXPdPpqxjtU+EaStvdy5531\n/nWISEUp9NtZsji0dFoHfxPwxCPunFWLCswwwkP2qtxQunjdpIrv3a5uMyDFN6UKvdc7+tRWHXr2\n1j3mru/H1sI30mcehiu2bdXTXwAz1dOvMLMub2w9uqGk6D17ke6bUiXea22tb2ydPHvTz2kJFPod\nMHvyRrhqV1i2DJZqBCHdltzYavlpLcZ796b0m0SFbkrjR8Nlw9p/Ij9ohvucE0v4qykstXfWYUZf\nGH44XPdRdxbFrkeyLXlusSr5lUvJja03Nb1J9a3r+Nnb1vXV+u/MC4V+e4cBcxX4IqVJbmzNEw9q\nwuxPH4amge1H+ksX16qGrNKK3PbGAjfHLkJEujJvSujhNyW/b+7pz5sSs6osUE+/FTP6A88D27uz\nPHY9ItK58DB3v6tgyL7w25l69lYahX4rZpwG7OPOCbFrEZH1M2MocJs7Q2LXkhVq77Q1FrgpdhEi\nUrJVwIaxi8gShX7CjMHA9sDs2LWISMkU+mVS6Lc4CZjhzprYhYhIyVYTpnFKiTRlk3fnGZ8IHBm7\nFhEpi0b6ZdJIP9gX+Kc7T8UuRETKotAvk0I/0ANckWxSe6dMhZ+yacYmwMvAzu4sjV2PiJTOjD7A\nSnd6x64lKzTSh6OBRxX4Ipm0FjAzhX6pFPradkEks5ItndXXL0Oh2ztm1ANPA9u486/Y9YhI+cxY\nQfgZ1tYpJSj6SP8E4KcKfJFM00i/DIUN/eRIwnFo1o5I1in0y1DY0Ad2BTYFHo5diIj0yCo0bbNk\nRQ79scDNyQEQIpJdq9FIv2SF3IYhmdt7AmElrohkm9o7ZSjqSP8gYKE7f41diIj0mEK/DEUNfW27\nIJIf6umXoXChb8ZmwKHAbbFrEZGKUE+/DIULfeBY4H53lsUuREQqQu2dMhQx9LXtgki+qL1ThkKF\nvhk7ALsA98WuRUQqRiP9MhQq9AmnY93mzqrYhYhIxainX4bCzNNPtl0YC4yJXYuIVJRG+mUo0kh/\nBGHv7cdjFyIiFaWefhmKFPpjgZuS/bdFJD800i9DIdo7ZvQFPgsMj12LiFScevplKMpI/3DgL+78\nPXYhIlJxau+UoSihr20XRPJL7Z0y5D70zegP7A/cFbkUEakOhX4Zch/6wHHAPe6siF2IiFSFevpl\nKELoa9sFkXxTT78MuQ59M3YGtgXuj12LiFSN2jtlyHXoAycBM9xZE7sQEakahX4ZcjtP34xehNA/\nLHYtIlJVq1F7p2R5HunvD7zuztzYhYhIVWmkX4Y8h77m5osUg0K/DLkMfTP6AaOBH8euRUSqTlM2\ny5DL0AeOBua4szR2ISJSdZqyWYa8hr5aOyLFofZOGXIX+mZsA+wJ3B27FhGpCYV+GXIX+sAJwF3u\n/Dt2ISJSE5qyWYZchX5yJOI4tO2CSJFopF+GXIU+sBvQD3gkdiEiUn1mdQPhqMnwjY+Yjbwl/F66\nkrcVuWOBm915J3YhIlJdIeBHz4bpg8JYr2kMTBhhVjfKfXlj5PJSy9zzcWSsGRsALwH/4c7fYtcj\nItVlNvIWmDUmBH6zJuCgGe5zToxVV9rlqb3zSWCBAl+kKAbUtw18CL/fuj5GNVmRp9DX3HyRQlmy\nOIzsW2sCli6OUU1W5KK9Y8Z7gUXADu4si12PiFRf6OkfPRuubu7pAxMWwEz19LuQl9A/BTjEnWNj\n1yIitWN2+4nwx0vh+blhhD9vigK/a3kJ/d8Cl7hrFa5IkZhxJbDYnQtj15IVme/pm/FBYDDwy9i1\niEhtmNUNDLN3Jo+Hw0dqfn7p8jBP/0TgJ+6sil2IiFRfB/Pzj4AJO2t+fmkyPdJPtl0Yi7ZdECmQ\noQ0tgQ/hdfqg8HVZn0yHPrA3YbOlP8YuRERqpbP5+R8abEbfGBVlSdbbO2OBm9zJ/tNoESlR8/z8\ndVfibr0DsMyMp4DfA48mry8qI1pkdvaOGRsBLwPD3fl77HpEpDY66OnTPD8flr8G7EHoAoxIXtfQ\n9ibwRJG3Xs9y6B8LTHTnwNi1iEhtheAf2hC2XOh8fn7y3G8gLTeAEcAQYD5tbwQLi/JpIMuhfzfh\nsJQbY9ciItlhxsbA7rT9NNCHtjeBx93b7fGQC5kMfTPeD/wN2M6dFbHrEZHsSj4NbEvbm8Aw4K+0\n3AQeBZ7Pw6eBrIb+6cDH3Dkpdi0ikj/JLKDhtG0L9SPcAJpvAo+7szxakd2U1dB/HDjHnVmxaxGR\nYjCjnrY3geHAC7RtCz2X9kOcMhf6ZuwCzAK2d2dt7HpEpJjM2JDQBmrdFtoceIyWm8Bj7rwRrcgO\nZDH0LwR6ufP12LWIiLRmxlaEG0DzTeCjwIu0fTbwTGcD1pZZSQPqw3qEyu8amqnQN6M30Agc6s68\nyOWIiHTJjD7AR2jbFtoK+AMtzwd+784/ulp/UMngz1roHwhc7M7usWsREekOM/oDe9FyE/gYsBRO\n7w0XfbDaZ/5mbRsGHYkoIpnmzuvAvcmv5g7GLrDqjlqc+ZuZDdfMeA8wGvhx7FpERCrFnbXuzIU3\nX6nFmb+ZCX3gU8Aj7rwSuxARkUoy44twwWA4/aWW4G/u6c+bUtFrZaWnb8Ys4Fp3bo9di4hIpZhx\nFjAROBjqVpWyp1CPrpeF0DdjW+ApYJsi744nIvmRbP8wDTgM+KQ7L9fiull5kDsGuFOBLyJ5kEzl\nvAbYGfi4O8tqde3Uh36rIxG/FLsWEZGeSs4C+QmwETCq1rt5ZuFB7nBgY+B3sQsREekJMzYDfgm8\nDRwVY/vm1Ia+Wd1As5G3wKSZMP4tqPtA7JpERLrLjC2BB4GngTHurIpRRyrbOx0sR94W3p5tVlfR\n5cgiIrVgxkDg14R1RufF3Jc/pSP9oQ0tgQ/hdfqg8HURkewwYwjwMHClO+fGPogllSP9sMNc9Zcj\ni4hUkxl7Az8HvubOjNj1QGpH+ksW12I5sohItZhxMHA38Pm0BD6kNvTnTQnLj6u7HFlEpBrMOI6w\nOeTR7twXu57WUtnecV/eaFY3Cjb+BWywCTz5aDWWI4uIVJoZpwFnE+bgz41dz7pSGfrQHPz8Amhy\nZ2rsekREupIsJP0WcCJhle3CyCV1KLWhnzCI+6RbRGR9zOgFXA58HPiPNO8GrNAXEemB5ID0G4Bt\ngP3ceTNuRV1T6IuIdJMZ/YA7gdXAIVnYFDKls3fepdAXkVQyYwtgFvAKcEwWAh8U+iIiZTOjHvgN\n8CjwBXfWRC6pZAp9EZEymLEj8AgwAzjTnXcil1QW9fRFREpkxnDgXuBcd66NXU93KPRFREpgxr6E\nh7YT3bkrdj3dpfaOiMh6mHEUIfCPz3Lgg0JfRKRLZowjnGd7uDv3x66np9TeERHphBlfAyYB+7vz\nbOx6KkGhLyKyjmQfnanApwjbKrwYuaSKUeiLiLRiRm/gamA3wsZpr0cuqaKyEPoiIjVhRl/C/Pv3\nAge6syJySRWX9ge5oJG+iNSAGZsS5uBDeGibu8CH9Ie+2jsiUnVm9AceABYAn3NnZeSSqiYL7R2F\nvohUzN5m12wJe67gPYOdvn2MVWsPYDtfypbPPMODE9zznTkKfREplC1hz5mwG7xF+EUfmM9o5tv8\nnAc+qL0jIgWzgvcMLufreaPQF5FCcfp22OHo7Ot5o9AXkUIxVna4931nX88bhb6IFMqmvNXhdgqd\nfT1v0v5xRqEvIhX1Kjw+mtDDDy0d77URvV56g9cfj11bLSj0RaRQHnX/z9a/N+NA4CpgYpyKakvt\nHREpugeAN4BjYhdSCwp9ESm0ZDHWVGBysrtmrin0RUTgHkLeHB67kGpT6ItI4RVptK/QFxEJ7gI2\nBw6IXUg1KfRFRAB31gIXAZNj11JNCn0pm1ndQLORt5h9+oHwWjcwdk0iFTIDGGTG3rELqRbN05ey\nhIAfPRumD4J+QBMwYYRZ3Sj35Y1xqxPpGXdWmzGNMNo/InY91aCRvpRpaENL4EN4nT4ofF0kF64H\ndjdjt9iFVINCX8q0404tgd+sH7B1fYxqRCrNnbeB/wHOiV1LNSj0pSRmvM+MH8L2Q0JLp7UmYPW/\nY9QlUiU/BPY3I3d77Gch9CUiM3qbMQF4BlgJz+wFExa0BH8T8LVX4fI9zfiBGVvEq1akMtx5C7gS\n+EbsWipND3KlU8kMhu8Tkn2UO0/BXZjVjYIFDaGls3QxzJsCP1wOfAeYb8Zk4EfuvBOzfpEe+j7w\nvBk7uLMwdjGVYu7pzVQzbgfucue22LUUiRlbEuYrHwycBdxa6mHRZuxO2LHQgFPd+VPVChWpMjMu\nADZ3z88OnFlo76T3rpQzZvQx43TgaWAZsLM7M0oNfIAk5PcBrgHuU8tHMu5S4HNm5GaigkJfADDj\n48ATwNHAfu6c6c7y7ryXO++4cz2wC+Hvb74ZXzRL/febSBvuvAbcBJwRu5ZKSfsPoUK/yswYYMYt\nhJWIDYTe/fxKvLc7y9w5DTgMOAWYk7R/RLLkEuDzZvSPXUglKPQLyowNzDgDmAv8HdjFnTvKaeWU\nSi0fyTJ3XgLuBL4Su5ZKUOgXkBmfAP4CHASMdOecZIpa1ajlIxl3ETDBjM1iF9JTaf+BU+hXkBnb\nmXEb8L+E1YaHuvPXWtaglo9kkTsvAP8HnBa7lp5S6BeAGX3N+AbwJPAsMMSdn1ejlVMqtXwkgy4E\nJpm124ckUxT6OWfGIYS+/UjgY+6c686/IpcFqOUj2ZJMcHgEGB+7lp5I+w+XQr+bzBhoxs8Iqwq/\n6s5RyUfU1Omk5fPRyGWJdOQC4L/N6Bu7kO5S6OeMGRuZ8S3CnPsngKHu3Bu5rJKs0/K5Vy0fSRt3\nniBMgjg5cindptDPETOOJKymHQbs7k5Dsk1sZqjlIxkwFfi6Wer3LutQ2n+QFPolMGNHM+4BLgYm\nunOsO4ti19UTavlIWrnzO8LaluNj19IdCv0MM2MTMxqA3wO/BYa58+vIZVVUZy0fndMrkU0Fzsni\nJ9C0fzxR6HfADAOOAb4HzAF2S1YN5lKyRfP1Zvwc+A688Cwc7/C9LXVOr0QyG1hB+Dm8M3ItZUn7\nXUqhvw4zdgJ+BZwPjHPn+DwHfmstLZ9Jj7cEPuicXqm1ZI1LA2G0n6nDnhT6GWHGpmZ8lzBP+D5g\nuDsPxa0qlg031jm9kgL3ELolh8YupBwK/ZQzw8w4DpgPbA18xJ3L3FkdubSIlizu+JzepYtjVCPF\nlLQdLwAmZ2m0r9BPMTOGAg8Qzuk8zp1x7iyNXFYKzJvS/pzeCQvC10Vq6g7g/cB+sQsplUI/hczY\nzIxLgQcJD4n2SKaJCRAe1s4cBQfNgG+ugSPugJl6iCs1585awg6cmRlwaPZOiiQfEU8ifBPdR9jj\n/rW4VaVTEvAnJp+GvutOY9yKpMBuAc41Yy93HotdzPpkYaRfCGbsBjwMnA4c7c4pCvySLAQGxi5C\nisudVcA0YHLsWkqRhdDP9UjfjM3N+D5hGuaNwAh3/hC5rCxpRKEv8V0P7GnGsNiFrE/aQx9yGvpm\n9DLjFOAZwt/DLu5cm/QIpXQLgR1iFyHF5s6/CYslz4ldy/qopx+BGXsAVwHvAIclWw1I9zQCn4xd\nhAgwHXjBjJ3ceS52MZ1J+0g/V6FvRn8zrgF+AVwN7KPA77FGNNKXFHBnBXAlYYp1ain0a8CM3mZM\nJCyw+jewszs3JIs7pGcagYFZWhwjuXYlcJQZH4hdSGcU+lVmxt7A44RtWEe5M8mdNyKXlRvuLAfe\nJiyQEYnKnX8C1wJnxa6lMwr9KjFjKzNuICyuugTYz52n4laVW5q2KWlyKXC8GQNiF9IRhX6FmdHH\njP8C5gGvEVo5tya78kl1NKLQl5Rw5xXCgq0zYtfSEc3eqSAz9iUcRP4aYWQ/P3JJRaFpm5I2FwN/\nMeNCd/4Ru5jWNNKvADPqzZhBuLt/h9C7V+DXTiMa6UuKuPMicBcwKXYt61Lo94AZG5pxJvAUsIjQ\nyrlDrZyaaySHI30dCZl53wVONaMudiGtqb3TTWYcSGjlNAIj3flr3IoKLXcPckPAj54dTgTTkZBZ\n5M7zZvwKOJWwiWIqaKRfJjO2M+N24DrCIozDFPjRLQI+kMVDqjs3tKEl8EFHQmbWhcBXzdgkdiHN\n0v5DkprQN6OvGecAfyYsstrFnZlq5cTnThOwHNgqdi2Vs822OhIy+9yZB/wOGB+7lmYK/VKKMA4l\nTMHcC9jTnfOSDZYkPRrJSYvHjA/BoGEdHwn5xusxapIemQqcaUbf2IWAQr/rixs7mPFzwtLqSe6M\ndueFWPVIl3IxbdOM44E5cMil7Y+EPOtNuG5/Mz6nbSeyw50ngKeBsbFrATD36APpTpnxJPDFWm9K\nZsbGhGXUpxO2S/2eO2/XsgYpjxkXAcvduSB2Ld2RfM9dAewPfNadJ8PD3KENoaWzdHE4A3j5AMLz\npAXAqe68FK9qKZUZHwduAHZyZ03MWjR7p/XFwujpSOAy4E/A7u78vVbXlx5ZCOwRu4juMGNn4HZg\nLuF7bgW0HAm5zh9vNGN34GzgSTO+CVyjzfvSzZ2HzXgZOI6wnicatXeaL2R8CLiXcOzZl9w5VoGf\nKY1ksKdvxjjCMZlXAGOaA78r7qx05zzgAOBk4EEzPlzNOqUiGoCzY88yK3zom9HPjKnAo8CDwDB3\nZlXzmlIVjWSop598391AmPZ7QHJqWlnf68nMkH2AnwJzzDjbjA0qX61UyCzgX8DRMYsobOibYWYc\nS5h+uQOwqzsXJ4ccS/YsArYzo3fsQtbHjI8AfyR8f+/pztzuvpc7a925nNDa2h/4gxkfrUihUlHJ\nTX0qMDnmg/hChn7SQ/01cB4wzp0T3Hm50teR2kketP8D0rmdLbw70DgFeAC4yJ1x7rxVifd2pxE4\nhLCt731mTEvTgiB5191AX+DgWAVkIfQr92bGpmZMI/RQ7wWGu/NQJa8hUaV22qYZmwIzCBtw7efO\njZW+hjvuzk3AMGB7wi6PB1T6OtJ9yQP3C4ApsUb7WQj9Ho/0kxHW8cAzwJbAUHcuc2d1T99bUqWR\nFD7MNWM48ARhsv1e1d6B1Z1X3DmOsJ/7TWZcY8Z7q3lNKcvthNXj+8a4eNpDH3oY+kn/9CHCvPvP\nuXOyO0srUZikTqpG+slg41SSVqI74935V62u787dwFBgLTDPLO4DRAmSefoXAZNjXD/tod/tkb4Z\nm5lxGXA/cBuwhzu/q2RxkjqNpGSkn4ysbyfsubKPO7fGqMOdN92ZCIwBpplxhxlbx6hF2rgZGGzG\nnrW+cO5C34xeydznZwk7VA1x5wfurK1GgZIqjaRgpJ/8IP8JeBXYOw27sLrzG2BX4HngKTM+r60c\n4klmCV5MhNF+2rdheA4Y7c6zJf754YQ97jcETnPnD9WsT9LFjEHAbPc4wZ+E6CTgHMIWCXfGqGN9\nkp+T64BlhIWI2k8qgrD1xguL4PTHYKN+sGQxzJtS7fMScrENgxlbEFa7fZpw57xey9IL6UWg3ow+\ntd7fJPke/BFQD4xIc5CGfX3YC/gqYV7/BcDl+jRca3VbwZhecPsRtTwoJ9PtnaSVM54wK8cJxxVe\np8AvpuQj8yvAtrW8rhl7A08CLxD696kN/GburHHnYmAEYb+pR80YFrmsXEvy6oNmHGnG1+HkB+CS\n99X6oJzMjvSTvulVwBrgEHeerGVhklqNhIe5jdW+ULKHypmEqZHjk9kymZIc6fcJ4BTgfjOmAw3u\nrIxcWmYl3xcDgSHALsnrEGAwYQHh0+HXypUxDsrJXOib0Z9wBNkRhH1LbtbIXlppnrb5UDUvYsb7\ngRuBzYGPubOomterpmR7gGvNuJcwkPqzGadotlvXSg93HiL8f33GneUt//7craFpcNvgbyJso13F\nutP6IDfsJf7lubBoHixcAI3fgsWHELZOuBU41503oxYpqWPG+QDunFvFa+xLWF17KzAlT4v8kofR\nnybs+vlT4OxSdv7MszLCfX7y2ibcO3/fuoEwenbLWchNhINzZla1p5/K0O/4f8bklTDhzzB4fE82\nqJJ8M+PzhF0rK35KUbKZ29nAl4EvuHNfpa+RFsmD6UuAA4GJef5vbVatcO/6mu0Pyqn27J2Uhv7I\nW2DWmPYfew6a4T5n3UMlRN5lxv7At90ru8TdjK0Ih1/0BU4oyolVZowCriFsPf4Vd16LXFKPxQj3\nNElpT39AfYwHHJILjVR4gZYZBwI3AdcD58c+7q6W3JmdbGXybWCuGWcAt5a7938MPe2551VKQ3/J\n4jCyr+0DDsmFl4Atzdiwp2cjJO2cbxG2UhhX1MN13GkCzjDjNsKirhPMmJiWk+UU7uVJaXsnzgMO\nyQczFgKj3FnQg/eoJzyoXQuc6M6SStWXZWZsSNi8cBJhUsXVtZo9V/S2TKWkMvQhzgMOyQczHgAu\ncGd2N//9Qwira68GpmqlanvJQUTXJr89pdStUkp8b4V7FaU29EW6y4zrgTnuXFfmv7cBoXd9EmF0\n/1AVysuNJJwnEkb8lwPToK4+DNYG1K9vLxmFexwp7emL9EjZ++qbsR3wE2AFsLs7r1ajsDxJ2jpX\nmfEL4Gr421/gM++BK7Ztu5dM/4PgdUM991TQSF9yx4yTCFtzjCnxzx9JeEB5KTBNK7zLFxZ1nfAw\nXLtP+wkY09bA+UvQyD0VNNKXPGqkhJF+8lDyQuAzwDHadqD73HGzlas6nmo9f447+8WoS9pT6Ese\nLWQ9J2iZsQOhnfMqMNydf9SgrpzrbKr1yy9GKkg6kPatlUW6YwmwhRkbdfQPzTgGeIxwjOZRCvxK\nmTclTK1uSn7fPNV63pSYVUlb6ulLLpnxN+AId55r9bW+hP1kjgCOc+exWPXllaZap5/aO5JXjYQW\nz3MAZuxIGNkvIszO+We0ynIsCXjtj5ViGulL7oTR5thZsGYtPPVH+Obv4dBzgfOBq7Kwb4xItSj0\nJVc63sJjymrY6Rj3CfdELk8kOj3IlZwZ2tAS+BBeGzaAm46LWZVIWij0JWe0LbdIVxT6kjPNc8Vb\n07bcIs0U+pIzmisu0hU9yJXc0Vxxkc4p9EVECkTtHRGRAlHoi4gUiEJfRKRAFPoiIgWi0BcRKRCF\nvohIgSj0RUQKRKEvIlIgCn0RkQJR6IuIFIhCX0SkQBT6IiIFotAXESkQhb6ISIEo9EVECkShLyJS\nIAp9EZECUeiLiBSIQl9EpEAU+iIiBaLQFxEpEIW+iEiBKPRFRApEoS8iUiD/D6gGX6fvXhHKAAAA\nAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, { "name": "stdout", "output_type": "stream", "text": [ - "14 city tour with length 2886.6 in 1.464 secs for hk_tsp\n" + "held_karp: 18 cities ⇒ tour length 2771 (in 42.475 sec)\n" ] - } - ], - "source": [ - "plot_tsp(hk_tsp, Cities(14))" - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "metadata": { - "collapsed": false - }, - "outputs": [ + }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "16 city tour with length 2868.6 in 9.018 secs for hk_tsp\n" - ] } ], "source": [ - "plot_tsp(hk_tsp, Cities(16))" + "do(held_karp_tsp, Cities(18))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Not bad! In 11 seconds, we did what `alltours_tsp` would have taken an estimated 200 days to complete! Let's repeat the table of expected times, comparing the All Tours algorithm with the Held-Karp algorithm:\n", + "Not bad! To see how much time we save using `held_karp_tsp` over `exhaustive_tsp`, we can extrapolate from the timings we've done, using the fact that Held-Karp is *O*(*n*2 2*n*) while Exhaustive Search is *O*(*n*!), to get this table:\n", "\n", - "\n", - "
n `alltours_tsp(Cities(n))``hk_tsp(Cities(n))`\n", - "
expected time ≈ O(n!)expected time ≈ O(n2 2n)\n", - "
10 10! tours = 2 secs 0.1 secs \n", - "
112 secs × 11! / 10! ≈ 22 secs 0.2 secs\n", - "
122 secs × 12! / 10! ≈ 4 mins 0.4 secs\n", - "
142 secs × 14! / 10! ≈ 13 hours 3 secs\n", - "
162 secs × 16! / 10! ≈ 200 days 162 216 tours = 11 secs\n", - "
182 secs × 18! / 10! ≈ 112 years\n", - "11 secs × (18/16)2 2(18-16) ≈ 1 min\n", - "
252 secs × 25! / 10! ≈ 270 billion years\n", - " 11 secs × (25/16)2 2(25-16) ≈ 4 hours\n", - "
502 secs × 50! / 10! ≈ 5 × 1050 years11 secs × (50/16)2 2(50-16) ≈ 58,000 years\n", - "
\n", "\n", - "So if we had some patience, we could find the optimal tour for a 25 city map, but we still can't handle the 50-city landmarks map.\n", - "(There are refinements to Held-Karp that can handle 50-city maps, and could do it even with 1960s-era computing power.)\n", + "|*n*|Exhaustive Search|Held Karp|\n", + "|---|---|---|\n", + "|10| 2 secs | 0.04 secs |\n", + "|12|≈ 4 mins | 0.25 secs|\n", + "|15|≈ 8 days |3 secs|\n", + "|18|≈ 112 years| 43 secs|\n", + "|25|≈ 270 billion years|≈ 3 hours|\n", + "|50|≈ 1050 years|≈ 45,000 years|\n", "\n", - "We're starting to run out of tricks, but we have one more general strategy to consider." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Ensembles of Other Algorithms: `ensemble_tsp`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When we have several optimization algorithms and we're not sure which is best, we can always try them all and take the best result. We will define `ensemble_tsp`, to combine the algorithms we have previously developed. First, if the set of input cities is small enough, it solves the problem optimally with `hk_tsp`. If the set is too large, it tries a selection of algorithms, and chooses the best resulting tour. The result is guaranteed to be as good or better than any of the component algorithms; but the run time is guaranteed to be longer than any of the component algorithms." + "\n", + "So if we had the patience to wait 3 hours, `held_karp_tsp` could give us an answer that saves 270 billion years of computing with `exhaustive_tsp`. The original Held-Karp algorithm had refinements that allowed it to handle 50-city sets in hours, not milleniums, and could do so even with 1970s-era computing power! See **Branch and Cut** below.\n", + "\n", + "We have one more trick to try:\n", + "\n", + "# Ensemble Strategy: `ensemble_tsp`\n", + "\n", + "When we have several optimization algorithms and we're not sure which is best, we can always try them all and take the best result:" ] }, { "cell_type": "code", - "execution_count": 125, - "metadata": { - "collapsed": false - }, + "execution_count": 58, + "metadata": {}, "outputs": [], "source": [ - "ensemble = [altered_dq_tsp, altered_greedy_tsp, altered_mst_tsp, repeated_altered_nn_tsp]\n", + "ensemble = {rep_improve_nn_tsp, improve_greedy_tsp, improve_mst_tsp, improve_divide_tsp}\n", "\n", - "def ensemble_tsp(cities, threshold=16, algorithms=ensemble): \n", - " \"Apply all algorithms to cities and take the shortest resulting tour.\"\n", - " if len(cities) <= threshold:\n", - " return hk_tsp(cities)\n", - " else:\n", - " return shortest_tour(tsp(cities) for tsp in algorithms)" + "def ensemble_tsp(cities, algorithms=None): \n", + " \"Apply an ensemble of algorithms to cities and take the shortest resulting tour.\"\n", + " return shortest_tour(tsp(cities) for tsp in (algorithms or ensemble))" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ensemble: 110 cities ⇒ tour length 14727 (in 0.388 sec)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "do(ensemble_tsp, set(sample(USA, 110)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let's go to the benchmarks:" + "# Review\n", + "\n", + "Here are the algorithms we developed, sorted by strategy:\n", + "\n", + "- **Brute Force Strategy**: `exhaustive_tsp`\n", + "- **Greedy Strategy**: `nn_tsp`, `greedy_tsp`\n", + "- **Divide and Conquer Strategy**: `divide_tsp`\n", + "- **Ensemble Strategy**: `rep_nn_tsp`, `ensemble_tsp`\n", + "- **Giant Shoulders Strategy**: `mst_tsp`, `held_karp_tsp`\n", + "- **Iterative Improvement Strategy**: `improve_nn_tsp`, `improve_greedy_tsp`, `improve_divide_tsp`, `rep_improve_nn_tsp`, `improve_mst_tsp`\n", + "\n", + "\n", + "# Benchmark Experiments on Algorithms\n", + "\n", + "Which algorithm is best? I can't tell by trying them on only one or two problems. What I need to do is **benchmark** each algorithm on a standard **test suite** of problems. If the test suite is large enough, the results will have statistical significance. First we'll define `TestSuite`. It passes a different `seed` to `sample` each time, so we get a different set of cities each time." ] }, { "cell_type": "code", - "execution_count": 126, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " altered_dq_tsp | 4953 ± 221 ( 4575 to 5399) | 0.049 secs/map | 30 ⨉ 60-city maps\n", - " altered_greedy_tsp | 4766 ± 207 ( 4320 to 5185) | 0.009 secs/map | 30 ⨉ 60-city maps\n", - " altered_mst_tsp | 4823 ± 227 ( 4354 to 5250) | 0.009 secs/map | 30 ⨉ 60-city maps\n", - " repeated_altered_nn_tsp | 4640 ± 194 ( 4298 to 4991) | 0.148 secs/map | 30 ⨉ 60-city maps\n", - " ensemble_tsp | 4630 ± 187 ( 4298 to 4991) | 0.213 secs/map | 30 ⨉ 60-city maps\n" - ] - } - ], + "execution_count": 60, + "metadata": {}, + "outputs": [], "source": [ - "benchmarks(ensemble + [ensemble_tsp])" + "def TestSuite(n, k, cities=USA):\n", + " \"Return n different samples from cities, each consisting of k cities.\"\n", + " return tuple(frozenset(sample(cities, k, seed=(n, k, i)))\n", + " for i in range(n))" ] }, { "cell_type": "code", - "execution_count": 127, - "metadata": { - "collapsed": false - }, + "execution_count": 61, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - " altered_dq_tsp | 6771 ± 220 ( 6273 to 7248) | 0.347 secs/map | 30 ⨉ 120-city maps\n", - " altered_greedy_tsp | 6539 ± 240 ( 5994 to 7203) | 0.037 secs/map | 30 ⨉ 120-city maps\n", - " altered_mst_tsp | 6616 ± 213 ( 6268 to 7010) | 0.050 secs/map | 30 ⨉ 120-city maps\n", - " repeated_altered_nn_tsp | 6402 ± 185 ( 6015 to 6779) | 0.701 secs/map | 30 ⨉ 120-city maps\n", - " ensemble_tsp | 6390 ± 184 ( 6015 to 6779) | 1.100 secs/map | 30 ⨉ 120-city maps\n" - ] + "data": { + "text/plain": [ + "(frozenset({(-3804+2908.35j), (-3847.2000000000003+1798.83j)}),\n", + " frozenset({(-3512.6400000000003+2915.94j), (-3623.04+2611.65j)}),\n", + " frozenset({(-4736.64+3237.48j), (-4761.6+2439.15j)}),\n", + " frozenset({(-3435.84+2840.73j), (-4353.6+2925.6j)}))" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "benchmarks(ensemble + [ensemble_tsp], Maps(30, 120))" - ] - }, - { - "cell_type": "code", - "execution_count": 128, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " altered_dq_tsp | 9750 ± 288 ( 9187 to 10167) | 3.052 secs/map | 10 ⨉ 250-city maps\n", - " altered_greedy_tsp | 9229 ± 261 ( 8723 to 9606) | 0.215 secs/map | 10 ⨉ 250-city maps\n", - " altered_mst_tsp | 9484 ± 142 ( 9190 to 9668) | 0.221 secs/map | 10 ⨉ 250-city maps\n", - " repeated_altered_nn_tsp | 9187 ± 194 ( 8785 to 9390) | 3.524 secs/map | 10 ⨉ 250-city maps\n", - " ensemble_tsp | 9153 ± 216 ( 8723 to 9390) | 6.959 secs/map | 10 ⨉ 250-city maps\n" - ] - } - ], - "source": [ - "benchmarks(ensemble + [ensemble_tsp], Maps(10, 250))" + "# A tiny test of sets of 2 cities each:\n", + "TestSuite(4, 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "So the `ensemble_tsp` returns tours that are shortest, but the run time is slowest, as expected. It improves on `repeated_altered_nn_tsp` by less than 1%." + "Next, the function `benchmark` takes as input a TSP function and a test suite, runs the function on each city set in the suite, and returns two values: the list of tour lengths that the function produced, and the average run time of the function. (Note that I *cache* the results, so that if you call benchmark a second time, and it has already done the computation, it just looks up the result rather than tediously re-running it. Note also that I round the tour lengths at 4 digits past the decimal place, because I don't want a round-off error to proclaim one tour better than another when they actually have the same length.)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "@cache(None)\n", + "def benchmark(algorithm, tests):\n", + " \"Benchmark one TSP algorithm on a test suite; return ([tour_lengths], average_time)\"\n", + " t0 = clock()\n", + " lengths = [round(tour_length(algorithm(cities)), 4) for cities in tests] \n", + " t1 = clock()\n", + " return lengths, (t1 - t0) / len(tests)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "# Boxplots\n", + "\n", + "A **boxplot** is a standard statistical visualization tool. I'll plot first, explain later. " + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "def boxplots(algorithms, tests):\n", + " \"Draw a boxplot for each of the functions executing the tests.\"\n", + " lengthlists, times = unzip(benchmark(tsp, tests) for tsp in algorithms)\n", + " best = min(map(median, lengthlists))\n", + " labels = [boxplot_label(A, L, T, best) \n", + " for (A, L, T) in zip(algorithms, lengthlists, times)]\n", + " plt.figure(figsize=(15, 7.5))\n", + " plt.grid(axis='y')\n", + " plt.tick_params(axis='x', which='major', labelsize=12)\n", + " plt.boxplot(lengthlists, labels=labels, showmeans=True, whis=(10, 90), sym='o', notch=True)\n", + " plt.title(\"Comparison on {} sets of Cities({})\"\n", + " .format(len(tests), len(tests[0])), fontsize=14)\n", + "\n", + "def boxplot_label(tsp, lengths, T, best):\n", + " return '{}\\n{:.0f} ms\\n{:.0f} mean len\\n{:.0f} med len\\n{:.3f} med ratio'.format(\n", + " name(tsp), T * 1000, mean(lengths), median(lengths), median(lengths) / best)\n", + "\n", + "def unzip(sequences): return zip(*sequences)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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PuOMNCDJDTcAa3fPsxjrHHcc57TzTBPd9EzTJX9IN1v23jslp56gvDYMH56eAf3GN+AnP0nP8m6/fXqmcs89K127zk2dCuefD3fcAV/4QpqGpKGh8/3MzMxKdToVQjXpLVMhtLSkYbv/+Ee4/XbYbLNK16h3ueyyNInx736X5r6y6jB9epq6Yv78NIXHjjtWukarZ/HidNH/29/CpZemaTmsttx9dxpdMwJefKl7mrzOoe2RW9tbvzp+eUNwyCFupTMzs451NBWCk7tu9vrrac6s6dPTxeOQIZWuUe/061+nlqFf/AL22qvStalvLS1wySVpXsJTT02vfqs0zm51mjIltZLssksarXXDDStdI+uKlpZ0Q+jCC9NUFyefnM7F3TUhfU+Olrl8eWoFv+CClJCeemqau65//y4d1szMapSTuzVowoQ0D9HNN8O661a6Nr3bXXelOdb+/W/YYINK16Y+Pf106sbY0pLmGtt220rXqHu98go0NsJ118HEiXDooW416W1eey09d/e976Vz7mmnwcEH984bEBFw551pDtSnnkrP3x13HAweXOmamZlZNekouSt3QBUr07x5cMABTuy6w5gxqeVzyZJK16T+vPFGusD80IdS97a77669xA7S7+n3vpduxkyYAJ/6FDz/fKVrZeVYuDBNcj5yJNx0U3pm969/TS1evTGxg3RjYZ990nySt94KjzwCW26ZEtbnnut8fzMzMyd3ZraSxx6DD34wPTP60ENpsu9an2B+t93ShfT226dnCX/+89SKYtVnxow0qfmoUfCvf6VBSP7whzRwSi21ur7vfalF+W9/S902d9gBjj46/X6amZm1x8mdmQHpedFzzkkXyccfn1oPttyy0rVac9ZeO43WescdcPHFacTFGTMqXStr9cgjcPjhKelZa6003cGVV6aEvJZtsUXqMvzss/Cud6WWvf33T6Mw+waEmZmVcnJnZjz8MOy8c2oleOSRNNBILbWCrIrRo+HBB9PcYu9/f+ru19JS6VrVp4iUbO+9d+ruvtNO6RncCy6ov1GIhw6Fs86C5mY46CD48pfhAx9IA7G88Uala2dmZtXCyZ1ZHXv1VTj99HThfMYZ6Tmfertobstaa8GZZ8I998C116ZEr42BEq2HLF+eBknZaSc45RQ44oiU1Jx2mgcXWWeddPPliSfSvH4/+hFsvXVq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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# boxplots for the 5 basic approximate algorithms:\n", + "basic5 = [greedy_tsp, rep_nn_tsp, divide_tsp, nn_tsp, mst_tsp]\n", + "\n", + "boxplots(basic5, TestSuite(50, 200))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each column represents a data set (in this case, the 50 tour lengths for one algorithm) with a box covering the first to third quartiles of the data; inside the box is a horizontal line indicating the median and a marker indicating the mean. The 10% and 90% intervals are the \"whiskers\" coming out of the top and bottom of the box, and individual points outside that range are shown as dots. The \"notches\" in the sides of a boxes represent the 95% confidence interval on the median: if two boxes' notches do not overlap, that is strong evidence that the true medians of the algorithms differ. The **label** at the bottom of each column gives the name of the algorithm, the average run time in milliseconds, the mean and median tour length, and the ratio of the median tour length of this algorithm to the median tour length of the best algorithm in this boxplot.\n", + "\n", + "This plot says that the first three algorithms all did about the same in tour length; their notches overlap, so we can't be confident that one is better than the others. (Although we can be confident that the greedy algorithm is much faster.) The minimum spanning tree algorithm produces by far the longest tours. Nearest neighbor is fastest, while divide and conquer is slowest.\n", + "\n", + "# Rankings\n", + "\n", + "I'd also like to know for how many different problems each algorithm was best, or second best, etc. I will define a function called `rankings` to do that. I'll also define `compare` to call both `boxplots` and `rankings`:" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [], + "source": [ + "def rankings(algorithms, tests):\n", + " \"Print a table of how often each algorithm had each rank: you get a #1 if you were shortest.\"\n", + " N = len(algorithms)\n", + " lengthlists = [benchmark(tsp, tests)[0] for tsp in algorithms]\n", + " # ordered[i] is all tour lengths (for all algorithms) for the i-th problem, sorted\n", + " ordered = [sorted(L) for L in zip(*lengthlists)]\n", + " fmt = ('{:>4}' * len(algorithms) + ' | {}').format\n", + " print(fmt(*['#' + str(i + 1) for i in range(N)], 'Algorithm'))\n", + " print(' ---' * N + ' | ---------')\n", + " for alg, lengths in zip(algorithms, lengthlists):\n", + " ranks = Counter(ordered[i].index(lengths[i]) for i in range(len(tests)))\n", + " print(fmt(*[ranks[i] for i in range(N)], name(alg)))" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " #1 #2 #3 #4 #5 | Algorithm\n", + " --- --- --- --- --- | ---------\n", + " 14 17 14 5 0 | greedy\n", + " 16 15 16 3 0 | rep_nn\n", + " 20 14 12 4 0 | divide\n", + " 0 4 8 22 16 | nn\n", + " 0 0 0 16 34 | mst\n" + ] + } + ], + "source": [ + "rankings(basic5, TestSuite(50, 200))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The top line of the rankings says the greedy algorithm was #1 (had the shortest tour) for 14 out of the 50 problems, came in second for 17 problems, third 14 times, and fourth 5 times. The `rep_nn_tsp` algorithm was similar, coming in first 16 times; divide and conquer had the most first-place finishes with 20, and the MST algorithm was terrible, coming in last 34 times." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Comparsion of Improved Algorithms\n", + "\n", + "Now let's compare the **improved** versions of these algorithms (using `compare` to do boxplots and rankings):" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [], + "source": [ + "def compare(algorithms, tests=TestSuite(50, 200)):\n", + " \"Compare TSP algorithms on a test suite.\"\n", + " boxplots(algorithms, tests)\n", + " plt.show()\n", + " rankings(algorithms, tests)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " #1 #2 #3 #4 #5 | Algorithm\n", + " --- --- --- --- --- | ---------\n", + " 17 16 8 8 1 | improve_greedy\n", + " 26 16 6 2 0 | rep_improve_nn\n", + " 0 2 4 6 38 | improve_divide\n", + " 3 10 15 19 3 | improve_nn\n", + " 4 6 17 15 8 | improve_mst\n" + ] + } + ], + "source": [ + "improved = [improve_greedy_tsp, rep_improve_nn_tsp, improve_divide_tsp, improve_nn_tsp, improve_mst_tsp]\n", + "\n", + "compare(improved)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `improve_greedy_tsp` and `rep_improve_nn_tsp` algorithms give the shortest tours. One surprising result is that the divide and conquer algorithm was not improved much; perhaps the re-assembly steps of divide and conquer are already doing similar things to what `improve_tour` does. The minimum spanning tree algorithm is no longer terrible.\n", + "\n", + "\n", + "# Comparison of *k* Values for `rep_improve_nn_tsp`\n", + "\n", + "What's a good value for the *k* parameter for the repetitive improved nearest neighbor algorithm?" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3cAAAINCAYAAACd/YYFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XucVfP+x/HXpwtRiIP8Jl1GyuVwdHCIg4qT+3E9iJKIHHdJJGfUGFEkkXBcU8JxF8ctNCgKkfspMrpNHA6FXFLz/f3xWVO7adfc9p6195738/HYj5m19tprf/aetWevz/p+v5+vhRAQERERERGR7NYg7gBERERERESk9pTciYiIiIiI5AAldyIiIiIiIjlAyZ2IiIiIiEgOUHInIiIiIiKSA5TciYiIiIiI5AAldyIi9ZiZDTaz9+OOQ+qGmW1gZo+Y2WIzW2FmrWuxryodO2ZWZmbH1PR51rLPU8zsxVTus4rPu56ZzTWzXev6uUVEqkLJnYhIFZjZlmZ2o5l9Zma/mNl8M/u3mR0Sd2y1dB3QOe4g6oqZFUfJRvlthZndX2Gb5mY2PkqAFpvZODPbJM1xTTazm9L5HJHTgH2AvYH/A+avI6bTzex1M/vezJaY2dtmNsDMNoo2We3YMbN7zGxikl1tBTyVqhdgZo2Bq4AhFWJ91cy+NbPvzOxlM/tzkseebWafm9nP0evZJ8k2Q8xsoZn9FP1ddiy/L4SwDLg2uomIZBwldyIilTCzNsC7QDfgUmBn4C/AM8CtMYZWY+YahBB+CiF8F3c8dSgAdwMt8KTj/4AzK2zzANAROBA4CNgVGFeHMabTtsAnIYSPQwj/DSGEZBuZ2X3AjcDTwP74MV8AdAGOBqjqsRM9z28pih/gOOCnEMKUhHWdgQeBrsAewCzgeTNrV76BmZ0AjMITw47A68CzZrZ1wjaXAv2Ac4Ddgf8Ck8ysacJz3Q/sY2Y7pPA1iYikRghBN9100023ddzwJG4+sEGS+zZO+L0V8DjwfXR7FGiZcP9g4AOgF1AC/AjcBTQGzgbmAd8A11d4jpLoseOBH4BFQP8K2/QD3ov2uQC4A9gk4f5TosceEsWwDNixPKaE7XYCXgSWRNu/C3ROuH8/YBrwM/AlMBJonHD/ZGAMMBT4GvgKuK4G73lz4F7gW+AnYBKwY5LXs3/0en4EXgbaVLLfycBN67h/e6AM6JSw7s/RuvbreNx+wBtRTIuj9ygx3r2BYmBp9Pe5BWgW3XdPtP8VCT9bA42Am4CFwC/AXODqSl7fMcD70fbzgEEVXntZwu3ltezj+Oj+I9dy/8aJx3PC7xVfw37RfWXAMQmPz8MTsW+j29PAtgn3bw08Afwver8+Bo5PuP8pKnxG1hLnIuCchOVpwG0VtpkNDE1YLgUGJiw3wT/LZ1R43EvAlan6H6ObbrrplqqbWu5ERNbBzDbFW29uDiH8XPH+EML30XYGTAS2wFsRuuAnsY9XeEhb4AjgMLwF5PjocbvhLYN9gPPM7OgKj+sHfAT8EbgCuNrMjkq4fwVwAZ6wnQj8CU8MEjUB/gH0jbabV/4yEra5Hz/B3R3YBe/69kv0GvPwRHcG3vJxWvRcV1d4npOA34C98BaQC6NWk+q4N3oNf41+/gQ8Z2brJ2yzPjAQ6A10whPC26qw7+5m9rWZfWhm15lZs4T79gJ+CCFMK18RQpiKJxl7J9uZmTXEk5FX8RauPfAWohXR/TsDz0fb7Iz/3XfBWxDB/25v4EleC7w1cUG0/kj8GNkWOAFvkUrKzHYDHgIewZP0S4HLzOycaJOjo+d4PXqetY2DOwmYFUJ4Mtmd5cd8+WL0c0T03C8mvIbXk8S4AZ5kLgX2xf9upcCLZtYk2uxWYAP8c7QjcCGeMJfbB3h7LbGXP8/6+PH+XbTcGP+MTaqw6QtEf1czy8dbc1duE0L4Bf+7Vvzbv0k96s4sItmjUdwBiIhkuG0BA/5TyXZ/wU+otwkhzAcws5OAz8xs/xDCy9F2DYDeIYQfgY/N7Dm81eevIYTlwCwzm4p3L0tMDKeHEIZFv39mZnsAF+EJAyGExERuXtS97Am8hatcA7wlY2b5Cs9JV9MGb2n7NFr+POG+c4CFIYTyZGGWmQ0EbjOzguhEGODjEMKQhFj7AgcA/0ryvq3BzLbFk7p9o8QKMzsZT0Z7sCopagicHUL4LNpmBN4Sui4T8BawUuD3wDA84To4un8rvMWxov9G9yWzMbAJ8HQI4Yto3eyE+y8GHgwhjIqWP48SrnfMbPMQwjdmtgzvarjyuaNiJ7PL3wM84ZvG2vUDikMIV0bLn5lZBzzJGxNCWGxmPwHLEp8nifZUfryvJoSw1Mx+BjasZN8nRtv3KV9hZmfhLbyH44lpa+CREMKH0SZzE7bdBH+vSysJ6Sq8FbV8DODm+PHyVYXtvsKPTfC/b1jLNnkV1pXiF2pERDKKWu5ERNZtjexnLbYHSssTO4AQQgl+ErhjwnbzosSu3Ff4CfzyCuu2rLD/N5Isr9yvme1vZi9EhV6+Bx4D1jOzxIRkOd51c11GAneZ2UtmNsjMtqvwGismF1OA9fAkuFzFCoqlSV7PuuyAt3oltp59j3e/THwvfy1P7BKeZz0za762HYcQ7gwhTAohfBRCeAhvFTvQzDpWI76K+/wOb2l8wcyeNrN+ZtYqYZPdgJ5m9kP5DX/fAtAuyS7LjQX+aGazzexmMzvUkmTjCXYAplZYNwVoWaF1sjJVPeZrYldgmwrvxWK81bX8vbgRKIiKuRTZ6pUpN4h+/sJamNkFwBnA0RU+a6n0c0IsIiIZQ8mdiMi6fYqfhNemeEJit8eKhSXCWtZV+f9zVPDlabzb5t/wE+jTorvXS9j01xBC0gIaK584hEL8tT6Od0V738x6VxYClb/GVH3fJD7P8rXcV53nmoEnku2j5S/xrrUVbRndlzyoEE7Du2O+gne7nWVm3RLiuRP4A94dc5fo9/bAzDX3tnKf7+ItqQPx9/hevBthTazz717BbGp3vK9LA3wcZ+J7sQvQAfgnQAjhbrxV7G78PXrdzK6IHv8//LVsmmznZnYhcCVwSAhhRsJd3+B/5xYVHtKCVX/XL/H3eV3blNuM5C28IiKxUnInIrIOUavM88C5ZrZhxfsTSuR/AuRZwrxhZrYN3p3roxSE0qnC8l7Rc4K3DDUGLgohTI9as1rW9IlCCHNCCDeHEA7HuzmeHt31SZI49gV+BebU9PmS+AT/ftqrfIWZbYx3n0zFe5noD3h3vUXR8htAMzNb+TrNbG9gQ5KMIUsUQvgghHBdCKErXjylvEvsO8DvQwglIYTPK9x+jbZZFsVRcZ9LQwiPRV1hDwMOiLqtJvMJXvwl0b7AghDC0nXFXsH9QPsKYzpXWse0EElfQwXv4K28/0vyXqwcVxdCKI1aWbvjY0z7Rut/wwus7Fhxx2Z2EVAIHBpCWK2lO3rcDHxca6JuRH/XqKX9y8RtonGA+7Jmi+hO0WsREckoSu5ERCp3Dn5F/20z+5uZdTCz7aKxQu8BhBBexLsNTjCz3cxsd+A+4O0QQnEKYuhkZpea2bZmdgbQE+9CCd662ADoZ2ZtzexEvBhHtZhZk6j7X2cza2Nme+LFK8oTqlvwBPZWM9vezA4DrgFGJ4y3q7UoOZ0I/NPM9okKktyHV/B8oLKXsdY7zLYxs4Lo79PGzA6N9jeD6OQ9hPAfPJn/p5l1MrO98CItTyWMQ6y437Zmdo2Z7WVmrc2sK540lr9vw4E9oveto5m1M7PDzSyx+MsX0TZtzOx35vqZWffovd4WH2+4BB97l8z1QGfzycXbm1kPfFzm8Eres9VE3VUfwo/lf5jZ7tHrOtjMnsaLvCTzBbBT9Pn4nXmhmYom4N2OnzSz/aL3bj8zG2HRtAVmNsrMDjKz/Ki77MGsntQ/jx+XK5nZAPxY7IOPNWwR3TZO2Gwk0NvM+kTv6Y144ZfEv8Mo4FIzO9rMdsK7xv7AmsfdvsCza3kfRERio4IqIiKVCCGURON+BuEFOFri3cM+xCv5lTsCr1BZXjxlEnB+isIYiScM/8DL/heEEB6P4vsgGmd0KVCEt0T0p4oFTBKswLu73YOf9P4PLzs/IHqeUvNJ26/Du9Ytxk/WL0/YR3W6/61Lb/xE+0m86uEU4OCElq61WdfzL8OLZ5wPNMOnt3gaL2mf+LgTgdHAc9Hyk8B569jvT3i3wofwwh1f4dNWXAsr/z774UU+ivHWrc9ZvWDOCDyR+Bh/vfl4UjEAb+kK+Ht+8NoS6RDCu2Z2HN56dVkUx9UhhFvWEXtSIYQTzex0PFm6BJ/OYA6edD+2lofdgVeQfBtoihcFepWEv0kI4efovRiGv1/lxVEmE1W2xC9U3IRPLfIDPu1A/wrP866ZNU9o7TsbP6epeMzfS9RFOYTwkJlthh+v/4d/fg+pME722qi17mb8szAdODCx5TNK+DfGpzoREckoVsnwC8wn9xyH9zkvA+4IIdxkZn/DS2TvAPwphPBOwmMuw/+ZLgcuCCG8EK3fFf/yagI8E0K4MFq/XvQcu+H94k8IIZSX6BYRqdfMrARvHRtZ6cYi9YCZ3Q98FEIYGsNzPwTMCCFUq0VURKQuVKVb5nJ8HMfvieYsMrPt8e5HR+ODx1cysx3w6mM74JPl3pJQ3etWoE8IoQPQwcwOitb3Ab4NIbTHr9ReW7uXJSIiIjnsEnxy8ToVXYx+Dz9XERHJOJUmdyGEL8vnRIpKCn8CtAwhzIrGH1Qc33AkPp/P8mi+n0/xcQRbARuFEN6KthsHHJXwmHuj3x9h1ZwzIiKSuq6OIjkhhLAghDA6huddFkIYWoXuwSIisajWmDszawt0xPugr01LVp+PaWG0bjmrDwJfwKpqbi3xsQ+EEFaY2WIz2yyE8G114hMRyUUhhG3ijkFEREQyX5WTO/MJUB/Bx9Cla1LQlU+3lhh09VpEREREROq1EELSfKlKyZ2ZNcITu/EhhCcr2XwhXuGq3NbRurWtT3xMaVQ6eeO1tdpVVgCmPhoyZAhDhgyJOwzJAjpWpDp0vEhV6ViR6tDxIlWlYyW5VeVM1lTVee7uBj4OIdy4tudI+H0i0N3M1jOzfLyE85shhC+BJWa2R1RgpRdeXrr8MeWTvR7HqjLiIiIiIiIiUgWVttyZ2Z/xiVM/MLN38YH9g/DpDEbjc/o8bWYzQwiHhBA+jsoEfwz8BpydMH/QOaw+FUL5HEJ3AePN7FN8XqXuqXqBIiIiIiIi9UGlyV0IYSo+4WoyT6zlMdcA1yRZPwPYOcn6X/HpE6QGunTpEncIkiV0rEh16HiRqtKxItWh40WqSsdK9VU6iXkmMbOQTfGKiIiIiIikkpnVrqCKiIiIiIhIXSgpmUtBwVgWLiyjZcsGFBX1Jj+/TdxhZQW13ImIiIiISEYoKZlLt26jmTOnEGgKLKVdu8FMmnSeErzIulruqlotU0REREREJK0KCsYmJHYATZkzp5CCgrExRpU9lNyJiIiIiEhGWLiwjFWJXbmmlJaWxRFO1lFyJyIiIiIiGaFlywbA0gprl5KXp7SlKvQuiYiIiIhIRigq6k27doNZleD5mLuiot6xxZRNVFBFREREREQyRnm1zNLSMvLyVC2zonUVVFFyJyIiIiIikiVULVNERERERCTHKbkTERERERHJAUruREREREREcoCSOxERERERkRyg5E5ERERERCQHKLkTERERERHJAUruREREREREcoCSOxERERERkRyg5E5ERERERCQHKLkTERERERHJAUruREREREREckCjuAMQEREREREpV1Iyl4KCsSxcWEbLlg0oKupNfn6buMPKChZCiDuGKjOzkE3xioiIiIhI1ZWUzKVbt9HMmVMINAWW0q7dYCZNOk8JXsTMCCFYsvvULVNERERERDJCQcHYhMQOoClz5hRSUDA2xqiyh5I7ERERERHJCAsXlrEqsSvXlNLSsjjCyTpK7kREREREJCO0bNkAWFph7VLy8pS2VIXeJRERERERyQhFRb1p124wqxI8H3NXVNQ7tpiyiQqqiIiIiIhIxiivlllaWkZenqplVrSugipK7kRERERERLKEqmWKiIiIiIjkOCV3IiIiIiIiOUDJnYiIiIiISA5QciciIiIiIpIDlNyJiIiIiIjkACV3IiIiIiIiOUDJnYiIiIiISA5QciciIiIiIpIDlNyJiIiIiIjkACV3IiIiIiIiOUDJnYiIiIiISA5oFHcAIiIiIpL7SkrmUlAwloULy2jZsgFFRb3Jz28Td1giOcVCCHHHUGVmFrIpXhERERHxxK5bt9HMmVMINAWW0q7dYCZNOk8Jnkg1mRkhBEt2n7plZrGSkrn07FlI166D6dmzkJKSuXGHJCIiIrKGgoKxCYkdQFPmzCmkoGBsjFGJ5B51y8xSya6ATZumK2AiIiKSeRYuLGNVYleuKaWlZXGEI5Kz1HKXpXQFTERERLJFy5YNgKUV1i4lL0+noiKppE9UltIVMBEREckWRUW9adduMKsSPB9zV1TUO7aYRHKRumVmqVVXwBITPF0BExERkcyTn9+GSZPOo6BgBKWlZeTlNaCoSENJRFJN1TKzlKpOiYiIiIjUP+uqlqnkLouVzxez6gqY5osREREREcllSu5ERERERERygOa5ExERERERyXFK7kRERERERHJApcmdmW1tZi+b2Udm9oGZnR+t39TMXjCzWWb2vJltEq1vY2Y/mdk70e2WhH3tambvm9lsMxuVsH49M3vQzD41szfMrHU6XqyIiIiIiEiuqkrL3XLgohDC74G9gHPMbHtgIPBiCGE74GXgsoTHfBZC2DW6nZ2w/lagTwihA9DBzA6K1vcBvg0htAdGAdfW7mWJiIiIiIjUL5UmdyGEL0MIM6PffwQ+AbYGjgTujTa7Fzgq4WFrDPAzs62AjUIIb0WrxiU8JnFfjwAHVO9liIiIiIiI1G/VGnNnZm2BjsA0oEUI4SvwBBDYMmHTtlGXzMlmtk+0riWwIGGbBdG68vvmR/taASw2s82q91JERERERCTblZTMpWfPQrp2HUzPnoWUlMyNO6Ss0aiqG5pZM7xV7YIQwo9mVnFOgvLlRUDrEMJ3ZrYr8ISZ7VjNuJKW9gTo3bs3bdu2BaB58+Z07NiRLl26AFBcXAygZS1rWcta1rKWtaxlLWs5C5cfeOBBLr74cUpL7waaAs8yefIlTJlyLfn5bWKPL47lmTNnsnjxYgC++OIL1qVK89yZWSPgaeDZEMKN0bpPgC4hhK+iLpeTQwg7JHnsZKA/UJq4jZl1BzqHEM4ys+eAwSGE6WbWEFgUQtgyyb40z52IiIiISI7q2bOQCRMuxhO7ckvp0WME9903OK6wMkoq5rm7G/i4PLGLTAR6R7+fAjwZPdnmZtYg+n0bYFvg86jr5hIz28PMDOhV/phoX6dEvx+HF2iRSqjJWkRERERyycKFZaye2AE0pbS0LI5wsk6l3TLN7M9AD+ADM3sX7345CBgOPGRmpwFzgeOjh+wHXGlmy4Ay4MwQwuLovnOAsUAT4JkQwnPR+ruA8Wb2KfA/oHsKXltOKymZS7duo5kzpxD/ACxl2rTBTJp0Hvn5beIOT0RERESk2lq2bAAspWLLXV5eVduk6rcqdcvMFOqWuYqarEVEREQk1yRrwGjXTg0YidbVLbPKBVUks6jJWkRERERyTX5+GyZNOo+CghGUlpaRl9eAoiIldlWl5C5LqclaRERERHJRfn4b9USrIXXLzFIlJXPp3Hko8+e3wOvilNGq1Ve88srlurIhIiIiIpKj1C0zR5ltAAykvD+y2aCYIxIRERERqZ2SkrkUFIxl4cIyWrZsQFFRbzVeVJFa7rKUCqqIiIiISK5RQZXKpWKeO8kwKqgiIiIiIrmmoGBsQmIH0JQ5cwopKBgbY1TZQ8ldltp445/wgiqJlrLRRj/FEY6IiIiISK2pAaN2lNxlKbPlQAGrErylQEG0XkREREQk+6yqCJ9IFeGrSu9SllqyZGPgAmAEMDj6eQHff79xrHGJiIiIiNRUUVFv2rUbTGIDRrt2gykq6h1bTNlE1TKzlF/V2BxP7MrpqoaIiIiIZC9NYl47qpaZpVRJSERE4qZy5SIidW9d1TKV3GWx8i/VVVc19KUqIiJ1o6RkLp07D2X+/Bb4KI8yWrX6ildeuVzfRSIiaaTkTkRERFLqqKP68eSTBhRR3oMECjjyyMATT9wQb3AiIjlM89yJiIhISr3xxlxWJXZEP4uYNm1ufEGJiNRzSu5ERESkBpqRbC4qXy8iInFQciciIiLV1qlTC5LNRbXnni3iCEdERNCYOxEREamBkpK5dOkyknnzrqZ8zF3r1oMoLr5IBVVEpFZUiXfdVFBFREREUk5Vm0Uk1TTdV+WU3ImIiIiISMbr2bOQCRMuZvUxvUvp0WME9903OK6wMsq6krtGdR2MiIiIiNQ/6monVbFwYRnJijWVlpbFEU7WUXInIiIiImmVrKvdtGnqaidratmyAV6safWWu7w81YGsCnXLFBGR1ejquoikmrra1T9mSXsNVtGRwATKLwRAD+DJWsWTSzmEumWKiEiV6Oq6iKSDutrVP7VJpvwi4wgmTCijR48GFBXdSH7+EymMLnepfVNERFYqKBibkNgBNGXOnEIKCsbGGJWIZLtVXe0SqaudJJef3yZq0S3kvvsG6+JiNegTlcVKSubSs2chXbsOpmfPQkpK5sYdkohkOV1dF5F0KCrqTbt2g1mV4Hl5+6Ki3rHFJJKL1C0zS6nrlIikgwayi0g65Oe3YdKk8ygoGJEwL6LOWURSTQVVspQGJotIOmjyWBERyRRDhvhNVqeCKjlIXadEJB10dV1ERDKFErvqU3KXpdR1SkTSZdVAdhEREckmygSylAYmi4iIiIhIIo25y2LlEw2v6jqliYZFRERERHLZusbcKbkTERERERHJEutK7tQtU0REREREMo4KqlSfWu5ERERERCTjmIFO/dekqRBE6rny8ZkLF5bRsqXGZ4qIiIjkIrXcieQ4TUotIiIi2Ugtd8lpzJ1IPVZQMDYhsQNoypw5hRQUjI0xKhERERFJNSV3Ijlu4cIyVp/sHqAppaVlcYQjIiIiImmi5E4kx7Vs2YBVk92XW0penj7+IiIikrkGD447guyjMXciOU5j7kRERERyhyYxF6nnyqtllpaWkZenapkiIiIi2UrJnYiIiIiISA5QtUwREREREZEcp+ROREREREQkByi5ExERERGRjDNkSNwRZB+NuRMRERERkYxjBjr1X5PG3ImIiIiIiOQ4JXciIiIiIiI5QMmdiIiIiIhIDlByJyIiIiJp9+qrU8nPP5bmzXuRn38sr746Ne6QJImyssy5ZVI82TL2TwVVRERERCStXn11KgcccAfLl48BmgJLadToHF566Qz22+/PcYcnkV9+gc03h59+ijsSF4IXVYlbCHDyyTBuXNyRuFoVVDGzrc3sZTP7yMw+MLPzo/WbmtkLZjbLzJ43s00SHnOZmX1qZp+Y2YEJ63c1s/fNbLaZjUpYv56ZPRg95g0za127lywiIiLpppYYqapTThmZkNgBNGX58jGccsrIOMOSCn77zZOpuFvJElvL4o6hrAwmToTvvov7r1M1VemWuRy4KITwe2Av4Bwz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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " #1 #2 #3 #4 #5 #6 | Algorithm\n", + " --- --- --- --- --- --- | ---------\n", + " 10 4 1 11 12 12 | improve_greedy\n", + " 17 17 10 6 0 0 | rep_improve_nn, 15\n", + " 15 9 17 5 2 2 | rep_improve_nn, 10\n", + " 8 8 8 12 9 5 | rep_improve_nn, 5\n", + " 5 5 7 10 12 11 | rep_improve_nn, 3\n", + " 1 4 8 4 13 20 | rep_improve_nn, 1\n" + ] + } + ], + "source": [ + "compare([improve_greedy_tsp] + [bind(rep_improve_nn_tsp, k) for k in (15, 10, 5, 3, 1)])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We do get shorter tours as we increase the reptitions, but of course we pay a penalty in run time. With *k*=3,\n", + "`rep_improve_nn_tsp` is roughly comparable to `improve_greedy_tsp` (although the later is twice as fast). With *k*=15 the tours are 2.5% shorter than with *k*=1, but the run time is 15 times longer. \n", + "\n", + "# Comparison of Ensemble Strategy\n", + "\n", + "Since no one algorithm always dominates the others, maybe it is time for the **ensemble strategy**:" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " #1 #2 #3 #4 | Algorithm\n", + " --- --- --- --- | ---------\n", + " 50 0 0 0 | ensemble\n", + " 28 0 19 3 | rep_improve_nn\n", + " 18 0 20 12 | improve_greedy\n", + " 4 0 11 35 | improve_mst\n" + ] + } + ], + "source": [ + "ensemble = (rep_improve_nn_tsp, improve_greedy_tsp, improve_mst_tsp)\n", + "\n", + "compare((ensemble_tsp, *ensemble))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `ensemble_tsp` algorithm produces the shortest tours yet, because it gets contributions from both `rep_improve_nn_tsp` and `improve_greedy_tsp` (and, for just 4 out of 50 problems, from `improve_mst_tsp`). Note that in the rankings, for every problem there is a two way tie for first between the `ensemble_tsp` algorithm and whichever member of the ensemble contributed that tour. That's why there are 100 (not 50) entries in the \"#1\" column, and 0 in the \"#2\" column. \n", + "\n", + "Let's see if the results are different for different-sized city sets:" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " #1 #2 #3 #4 | Algorithm\n", + " --- --- --- --- | ---------\n", + " 30 0 0 0 | ensemble\n", + " 14 0 15 1 | rep_improve_nn\n", + " 14 0 12 4 | improve_greedy\n", + " 2 0 3 25 | improve_mst\n" + ] + } + ], + "source": [ + "compare((ensemble_tsp, *ensemble), TestSuite(30, 300))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A similar picture.\n", + "\n", + "# Comparing Precise Algorithms\n", + "\n", + "Here I compare the two precise algorithms, Exhaustive Search and Held-Karp, to the (approximate) ensemble algorithm. I'll try both 9 and 10-city test suites:" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " #1 #2 #3 | Algorithm\n", + " --- --- --- | ---------\n", + " 200 0 0 | exhaustive\n", + " 200 0 0 | held_karp\n", + " 194 0 6 | ensemble\n" + ] + } + ], + "source": [ + "compare([exhaustive_tsp, held_karp_tsp, ensemble_tsp], TestSuite(200, 9))" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " #1 #2 #3 | Algorithm\n", + " --- --- --- | ---------\n", + " 20 0 0 | exhaustive\n", + " 20 0 0 | held_karp\n", + " 19 0 1 | ensemble\n" + ] + } + ], + "source": [ + "compare([exhaustive_tsp, held_karp_tsp, ensemble_tsp], TestSuite(20, 10))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This says that while `ensemble_tsp` does not quite give a guarantee of an optimal tour, in practice on random city sets it performs almost exactly the same as the precise algorithms, only faster.\n", + "\n", + "\n", "# Further Explorations\n", "\n", "\n", "That's all I'm going to write for now. But there are still plenty of open questions for you to explore:\n", "\n", "* **Branch and Cut**: this is a technique to cut off a search early, when a partial solution is obviously not optimal. We saw how Held-Karp cuts off some permutations of cities when another permutation is better. A refinement on that is to keep track of, say, the best total length of the segment going through all the Bs cities. Then, any time you have a partial segment through some of the Bs cities that exceeds the best total, we can stop right there, before even finishing all the Bs. With this technique, you can find optimal tours for around 50 cities.\n", - "* **Linear programming**: Lookup the topic \"linear programming\" and see how it applies to TSP.\n", - "* **Heuristic Algorithms**: There are many approaches for using heurisitic estimates to find good (but not optimal) tours. For example, *ant colony optimization algorithms* make random choices of which edge to follow, and then the edges that occur in the best tours get reinforced with some virtual pheromones, and other ants tend to follow those pheromones. *Simulated annealing* takes its inspiration from metallurgy.\n", - "* The **[Lin-Kernighan heuristic](http://akira.ruc.dk/~keld/research/LKH/LKH-1.3/DOC/LKH_REPORT.pdf)** is one of the best.\n", - "* The **[Christofides algorithm](https://en.wikipedia.org/wiki/Christofides_algorithm)** gives a guarantee of 3/2 the optimal tour length (improving on the minimum-spanning-tree guarantee).\n", - "* `altered` as a function: we defined a lot of one-line functions that just called another algorithm, and then calls `alter_tour` on the result. Can you write a function, `altered(func)`, which takes a TSP algorithm as argument, and returns a TSP algorithm that does the original algorithm and then calls `alter_tour`?\n", - "* Why does `mst` produce an optimal result, while `greedy_tsp` does not, even though the two algorithms have similar structure in the way they iterate over `shortest_edges_first`?\n", + "* **Linear programming**: Look up the topic \"linear programming\" and see how it applies to TSP.\n", + "* **Heuristic Algorithms**: There are many approaches for using heurisitic estimates to find good (but not optimal) tours. For example, *ant colony optimization algorithms* make random choices of which link to follow, and then the links that occur in the best tours get reinforced with some virtual pheromones, and other ants tend to follow those pheromones. *Simulated annealing* takes its inspiration from metallurgy.\n", + "* The **[Lin-Kernighan heuristic](http://akira.ruc.dk/~keld/research/LKH/LKH-1.3/DOC/LKH_REPORT.pdf)** is a generalization of `improve_tour` that sometimes splits the tour into three pieces, not two, and considers all ways to put it back together. With this and other tricks, approximate algorithms can handle hundreds of thousands of cities and come within 0.01% of the shortest possible tour.\n", + "* The **[Christofides algorithm](https://en.wikipedia.org/wiki/Christofides_algorithm)** gives a guarantee of 3/2 the optimal tour length (improving on the minimum-spanning-tree guarantee of 2).\n", + "* **improved** as a function: we defined a lot of one-line functions that just call another algorithm, and then call `improve_tour` on the result. Can you write a function, `improved(algorithm)`, which takes a TSP algorithm as argument, and returns an improved TSP algorithm that does the original algorithm and then calls `improve_tour` on the result? Make sure it handles extra arguments, and has a readable function name.\n", + "* Why does `mst_tsp` produce a guaranteed result, while `greedy_tsp` does not, even though the two algorithms have similar structure in the way they iterate over `shortest_links_first`?\n", "* The code in this notebook was designed for clarity, not efficiency. Can you make the code faster?\n", - "* [William Cook](http://www.math.uwaterloo.ca/tsp/) maintains a great page on the TSP.\n", - "* William Cook also has a [draft chapter](http://www.math.uwaterloo.ca/~bico/papers/comp_chapter1.pdf) on Discrete Optimization featuring TSP. Like my notebook here, Cook goes through a variety of algorithms for TSP, describing each one in prose and in concise, elegant code. The difference is that his code is in C and has an imperative style, while mine is in Python and is largely functional. His code is much more efficient, but if it is 100 times faster, that might only mean two more cities, so the algorithms are more important than the efficiency of the implemenation details. (Also, Cook chooses a different set of algorithms to explore.) I find his explanation very beautiful and concise, and I think it is very interesting that\n", + "* **[William Cook](https://www.math.uwaterloo.ca/~bico/)** has a comprehensive \n", + "[web page](http://www.math.uwaterloo.ca/tsp/) on the TSP, as well as a great \n", + "[book](https://press.princeton.edu/titles/9531.html) and a\n", + "[draft chapter](http://www.math.uwaterloo.ca/~bico/papers/comp_chapter1.pdf) on Discrete Optimization featuring TSP. Like my notebook here, Cook's chapter goes through a variety of algorithms for TSP, describing each one in prose and code. His coding style is different because he uses C (in an imperative style) while I used Python (in a functional style). His code is much more efficient (but if it is 100 times faster, that might only mean two more cities). Cook chooses a different set of algorithms to explore, with\n", + "more emphasis on optimizing algorithms that find guaranteed shortest tours. I find his explanations and code\n", + "are both beautiful and concise, and I think it is very interesting that\n", "there can be two quite different approaches, which (in my opinion) both turn out very well. \n", "* If you are heavily into math, there's a [taxonomy](http://cstheory.stackexchange.com/questions/9241/approximation-algorithms-for-metric-tsp) of solutions.\n", "* What else are you interested in?" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { @@ -4643,9 +2515,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.1" + "version": "3.5.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/ipynb/WWW.ipynb b/ipynb/WWW.ipynb index b222814..b83d92c 100644 --- a/ipynb/WWW.ipynb +++ b/ipynb/WWW.ipynb @@ -4,57 +4,59 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# WWW: Will the Warriors Win?\n", + "# WWW: Who Will Win?\n", "\n", - "## 18 April 2016\n", + "## 12 April, 2018\n", "\n", - "The Golden State Warriors have had a historic basketball season, winning more games than any other team ever has. But will they top that off by winning the championship? There are 15 other teams in contention, including one, the Spurs, that has had a historic season as the best second-best team ever. The web site fivethirtyeight, using a complicated scoring system, [gives](http://projects.fivethirtyeight.com/2016-nba-picks/) the Warriors a 44% chance of winning, with the Spurs at 28%. Basketball-reference [has](http://www.basketball-reference.com/friv/playoff_prob.cgi) the Warriors at 41% and Spurs at 32.5%, while a [betting site](http://www.oddsshark.com/nba/nba-futures) had the Warriors at 54% and Spurs at 18%. But what's a good way to make a prediction? There are several choices:\n", + "\"It's tough to make predictions, especially [about](https://en.wikiquote.org/wiki/Yogi_Berra) [the](https://en.wikiquote.org/wiki/Niels_Bohr) future.\" That's true for the **NBA basketball playoffs**, where there is a wide range of opinion about the Warriors and Cavs, the teams that met in the finals each of the last three years. The Las Vegas oddsmakers have the Warriors as co-favorites at 35% chance to win the title, while [538](https://fivethirtyeight.com/features/the-nba-playoffs-sleepers-favorites-and-best-first-round-matchups/), using their ELO rating, give the Warriors only a 4% chance. That 9-fold difference underscores that rational people can use different models with different assumptions and come to different conclusions. Here are some models you might choose:\n", "\n", - "- Subjective impression of a team's strength? Or a statistical model?\n", - "- Predictions based on:\n", - " - Holistic impression of entire postseason (e.g. \"I think the Warriors have a 50% chance of winning it all\")\n", - " - Series by series (e.g. \"I think the Warriors have a 95% chance of beating the Rockets in the first round, then ...\")\n", - " - Game by game (e.g. \"I think the Warriors have a 83% chance of beating the Rockets in Game 1, then ...\")\n", - " - Possession by possession (e.g. simulate games basket by basket, based on past stats)\n", - " \n", - "Here are the top four teams with their Won-Loss percentage and [SRS](http://www.basketball-reference.com/blog/?p=39) (Simple rating system: average margin of victory, adjusted for strength of opponents):\n", + "1. **Holistic**: I just feel that the Warriors have about a 1 in 5 chance of winning it all.\n", + "2. **Game by Game**: I think the Warriors have an 75% chance of winning each game in the first round, then 65% for each game in the second round, but only 45% against the Rockets, then 55% if they make it to the finals. From that I'll calculate their overall chance.\n", + "3. **Point by Point**: The Warriors have a per-game average point differential of +5.8; I'll compare that to the other teams and caclulate their overall chance.\n", + "4. **Play by Play**: Use [detailed statistics](https://www.basketball-reference.com/play-index/plus/shot_finder.cgi) to [model](https://danvatterott.com/blog/2016/06/16/creating-videos-of-nba-action-with-sportsvu-data/) the game shot-by-shot, or even pass-by-pass. That's too complex for me.\n", "\n", - " TEAM PCT SRS\n", - " Warriors .890 10.38\n", - " Spurs .817 10.28\n", - " Thunder .671 7.09\n", - " Cavaliers .695 5.45\n", + "# Point by Point Model\n", "\n", - "I decided to go with a subjective impression of one team beating another in a single game. For example, I might think that the Warriors have a 58% chance of beating the Cavaliers in any one game, and from that compute the odds of winning a series:" + "The [Simple Rating System](https://www.sportingcharts.com/dictionary/nba/simple-rating-system-statistics.aspx) (SRS) records the average point differential of a team over the season, with a slight adjustment for strength of schedule. We can look up the winning percentage and SRS of the top contending teams [here](https://www.basketball-reference.com/leagues/NBA_2018.html) (and other sites have slightly different ways of making similar calculations): \n", + "\n", + " TEAM PCT SRS\n", + " Rockets .793 8.2\n", + " Raptors .720 7.3\n", + " Warriors .707 5.8\n", + " Sixers .634 4.3\n", + " \n", + "\n", + "The Point-by-Point model says: a game is decided by a random sample from the distribution of point differentials, which is a normal (Gaussian) distribution centered around the difference of SRS scores of the two teams. So, if the Raptors play the Sixers, then the\n", + "mean of this distribution is 7.3 - 4.3 = 3.0. We also need to know the standard deviation of the distribution; [Betlabs](https://www.betlabssports.com/blog/a-look-at-nba-team-totals/) says it\n", + "is 10.5 points across the NBA (and they confirm that scores roughly follow a normal distribution). \n", + "The function `simulate` does the calculation by Monte Carlo simulation:" ] }, { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "def win_series(p, W=0, L=0):\n", - " \"Probability of winning best-of-7 series, given a probability p of winning a game.\"\n", - " return (1 if W == 4 else\n", - " 0 if L == 4 else\n", - " p * win_series(p, W + 1, L) +\n", - " (1 - p) * win_series(p, W, L + 1))" + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "from statistics import mean\n", + "from random import gauss\n", + "\n", + "def simulate(diff, 𝝈=10.5, n=100000):\n", + " \"Given SRS point differential of a team against another, return game win probability.\"\n", + " return mean(gauss(diff, 𝝈) > 0 for game in range(n))" ] }, { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.6705883933696" + "0.61325" ] }, "execution_count": 2, @@ -63,77 +65,135 @@ } ], "source": [ - "win_series(0.58)" + "simulate(7.3 - 4.3) # Raptors game win probability vs Sixers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The model says the Raptors have a 61% chance of beating the Sixers in a single game. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "In other words, if you have a 58% chance of winning a game, you have a 67% chance of winning the series.\n", "\n", - "Note that I ignore the fact that games aren't strictly independent; I ignore home court advantage; and I ignore the chance of catastrophic injuries. Why? Because all these factors would change the final winning estimate by only a few percentage points, and I already have more uncertainty than that.\n", "\n", - "Note that `win_series` takes optional arguments to say how many games in the sries have been won and lost so far. Here's a table showing your chance of winning a series, given the current tally of games won and lost on the left, and your expected percentage of winning a game at the top:" + "# Game by Game Model\n", + "\n", + "The next model says that a playoff series is a sequence of independent and identically distributed game results (where the probability of a single-game win could be specified using point differential, or holistically, or some other model). The idea here is to be consistent: if you believe that a team's win percentage is 60%, and you believe that games are independent, then you must believe that the team's chance of wining 4 in a row is 0.64 = 0.1296. This model ignores the fact that games aren't strictly independent, and ignores home court advantage. Why? Because these factors would change the final winning estimate by only a few percentage points, and I already have more uncertainty than that.\n", + "\n", + "The function `win_series` calculates the probability of winning a series, given the probability of winning a game:" ] }, { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "def percents(items, fmt='{:4.0%}'): return ' '.join(fmt.format(item) for item in items)\n", - "\n", - "def series_table(pcts=[p/100 for p in range(20, 81, 5)]):\n", - " print('W-L | Singe Game Win Percentage')\n", - " print(' | ' + percents(pcts))\n", - " for W in range(4):\n", - " print('----+' + '-' * 5 * len(pcts))\n", - " for L in reversed(range(4)):\n", - " results = [win_series(p, W, L) for p in pcts]\n", - " print('{}-{} | {}'.format(W, L, percents(results)))" + "def win_series(p, W=0, L=0):\n", + " \"\"\"Probability of winning best-of-7 series, given a probability p of winning a game.\n", + " The optional arguments say how many Wins and Losses the team has in the series so far.\"\"\"\n", + " return (1 if W == 4 else\n", + " 0 if L == 4 else\n", + " p * win_series(p, W + 1, L) + \n", + " (1 - p) * win_series(p, W, L + 1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can make a table:" ] }, { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "W-L | Singe Game Win Percentage\n", - " | 20% 25% 30% 35% 40% 45% 50% 55% 60% 65% 70% 75% 80%\n", - "----+-----------------------------------------------------------------\n", - "0-3 | 0% 0% 1% 2% 3% 4% 6% 9% 13% 18% 24% 32% 41%\n", - "0-2 | 1% 2% 3% 5% 9% 13% 19% 26% 34% 43% 53% 63% 74%\n", - "0-1 | 2% 4% 7% 12% 18% 26% 34% 44% 54% 65% 74% 83% 90%\n", - "0-0 | 3% 7% 13% 20% 29% 39% 50% 61% 71% 80% 87% 93% 97%\n", - "----+-----------------------------------------------------------------\n", - "1-3 | 1% 2% 3% 4% 6% 9% 12% 17% 22% 27% 34% 42% 51%\n", - "1-2 | 3% 5% 8% 13% 18% 24% 31% 39% 48% 56% 65% 74% 82%\n", - "1-1 | 6% 10% 16% 24% 32% 41% 50% 59% 68% 76% 84% 90% 94%\n", - "1-0 | 10% 17% 26% 35% 46% 56% 66% 74% 82% 88% 93% 96% 98%\n", - "----+-----------------------------------------------------------------\n", - "2-3 | 4% 6% 9% 12% 16% 20% 25% 30% 36% 42% 49% 56% 64%\n", - "2-2 | 10% 16% 22% 28% 35% 43% 50% 57% 65% 72% 78% 84% 90%\n", - "2-1 | 18% 26% 35% 44% 52% 61% 69% 76% 82% 87% 92% 95% 97%\n", - "2-0 | 26% 37% 47% 57% 66% 74% 81% 87% 91% 95% 97% 98% 99%\n", - "----+-----------------------------------------------------------------\n", - "3-3 | 20% 25% 30% 35% 40% 45% 50% 55% 60% 65% 70% 75% 80%\n", - "3-2 | 36% 44% 51% 58% 64% 70% 75% 80% 84% 88% 91% 94% 96%\n", - "3-1 | 49% 58% 66% 73% 78% 83% 88% 91% 94% 96% 97% 98% 99%\n", - "3-0 | 59% 68% 76% 82% 87% 91% 94% 96% 97% 98% 99% 100% 100%\n" + "0 point differential = 50% win game = 50% win series\n", + "1 point differential = 54% win game = 58% win series\n", + "2 point differential = 58% win game = 67% win series\n", + "3 point differential = 61% win game = 73% win series\n", + "4 point differential = 65% win game = 80% win series\n", + "5 point differential = 68% win game = 85% win series\n", + "6 point differential = 72% win game = 89% win series\n", + "7 point differential = 75% win game = 93% win series\n", + "8 point differential = 78% win game = 95% win series\n", + "9 point differential = 81% win game = 97% win series\n" ] } ], "source": [ + "for diff in range(10):\n", + " g = simulate(diff)\n", + " print('{} point differential = {:4.0%} win game = {:4.0%} win series'.format(\n", + " diff, g, win_series(g)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With a zero point differential obnviously you're at 50% win percententage; with a 3 point differential you're at 61% to win a game, and 73% to win the series. This agrees very well with the \"Differential vs. Win Percentage\" [chart](http://a.espncdn.com/combiner/i?img=%2Fphoto%2F2018%2F0408%2F180408_differential.png&w=1140&cquality=40) on [this page](http://www.espn.com/nba/story/_/id/23071005/kevin-pelton-weekly-mailbag-including-nba-all-offensive-teams). \n", + "\n", + "What happens if some games in a series have already been played? The following function prints a table where each row tells a team's current win-loss record, each column is the game win percentage, and each entry in the table is the series win percentage." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W-L | Game Win Percentage\n", + " | 15% 20% 25% 30% 35% 40% 45% 50% 55% 60% 65% 70% 75% 80% 85%\n", + "----+---------------------------------------------------------------------------\n", + "0-0 | 1% 3% 7% 13% 20% 29% 39% 50% 61% 71% 80% 87% 93% 97% 99%\n", + "0-1 | 1% 2% 4% 7% 12% 18% 26% 34% 44% 54% 65% 74% 83% 90% 95%\n", + "0-2 | 0% 1% 2% 3% 5% 9% 13% 19% 26% 34% 43% 53% 63% 74% 84%\n", + "0-3 | 0% 0% 0% 1% 2% 3% 4% 6% 9% 13% 18% 24% 32% 41% 52%\n", + "----+---------------------------------------------------------------------------\n", + "1-0 | 5% 10% 17% 26% 35% 46% 56% 66% 74% 82% 88% 93% 96% 98% 99%\n", + "1-1 | 3% 6% 10% 16% 24% 32% 41% 50% 59% 68% 76% 84% 90% 94% 97%\n", + "1-2 | 1% 3% 5% 8% 13% 18% 24% 31% 39% 48% 56% 65% 74% 82% 89%\n", + "1-3 | 0% 1% 2% 3% 4% 6% 9% 12% 17% 22% 27% 34% 42% 51% 61%\n", + "----+---------------------------------------------------------------------------\n", + "2-0 | 16% 26% 37% 47% 57% 66% 74% 81% 87% 91% 95% 97% 98% 99% 100%\n", + "2-1 | 11% 18% 26% 35% 44% 52% 61% 69% 76% 82% 87% 92% 95% 97% 99%\n", + "2-2 | 6% 10% 16% 22% 28% 35% 43% 50% 57% 65% 72% 78% 84% 90% 94%\n", + "2-3 | 2% 4% 6% 9% 12% 16% 20% 25% 30% 36% 42% 49% 56% 64% 72%\n", + "----+---------------------------------------------------------------------------\n", + "3-0 | 48% 59% 68% 76% 82% 87% 91% 94% 96% 97% 98% 99% 100% 100% 100%\n", + "3-1 | 39% 49% 58% 66% 73% 78% 83% 88% 91% 94% 96% 97% 98% 99% 100%\n", + "3-2 | 28% 36% 44% 51% 58% 64% 70% 75% 80% 84% 88% 91% 94% 96% 98%\n", + "3-3 | 15% 20% 25% 30% 35% 40% 45% 50% 55% 60% 65% 70% 75% 80% 85%\n" + ] + } + ], + "source": [ + "pct = '{:4.0%}'.format \n", + "\n", + "def series_table(pcts=[p/100 for p in range(15, 90, 5)]):\n", + " print('W-L | Game Win Percentage')\n", + " print(' | ' + ' '.join(map(pct, pcts)))\n", + " for W in range(4):\n", + " print('----+' + '-' * 5 * len(pcts))\n", + " for L in range(4):\n", + " results = [win_series(p, W, L) for p in pcts]\n", + " print('{}-{} | {}'.format(W, L, ' '.join(map(pct, results))))\n", + "\n", "series_table()" ] }, @@ -141,121 +201,385 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "And here's a function to tabulate the chances of winning each series on the way to a title:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def playoffs(name, rounds):\n", - " \"Print probability for team winning each series.\"\n", - " overall = (1, 1, 1) # (lo, med, hi) probabilities of winning it all\n", - " for (opponent, probs) in rounds:\n", - " this_round = [win_series(p) for p in probs]\n", - " overall = [overall[i] * this_round[i] for i in range(len(probs))]\n", - " print('{} vs {:8} win this round: {}; win through here: {}'.format(\n", - " name, opponent, percents(this_round), percents(overall)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now I enter my subjective probability estimates (low, medium, and high), and likely opponents for each round, for the three top contenders:" + "For example, if our team with a 60% game win percentage loses the first game of the series, check the \"0-1\" row and the \"60%\" column to see that it still has a 54% chance of winning the series. \n", + "\n", + "We can also do plots:" ] }, { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Warriors vs Rockets win this round: 93% 98% 99%; win through here: 93% 98% 99%\n", - "Warriors vs Clippers win this round: 83% 91% 97%; win through here: 77% 89% 95%\n", - "Warriors vs Spurs win this round: 39% 67% 87%; win through here: 30% 60% 83%\n", - "Warriors vs Cavs win this round: 71% 83% 93%; win through here: 22% 50% 78%\n" - ] - } - ], + "metadata": {}, + "outputs": [], "source": [ - "playoffs('Warriors',\n", - " [('Rockets', (0.75, 0.83, 0.85)),\n", - " ('Clippers', (0.67, 0.73, 0.80)),\n", - " ('Spurs', (0.45, 0.58, 0.70)),\n", - " ('Cavs', (0.60, 0.67, 0.75))])" + "diff = [d/10 for d in range(100)]\n", + "game = [simulate(d) for d in diff]\n", + "series = [win_series(p) for p in game]" ] }, { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Spurs vs Memphis win this round: 93% 98% 99%; win through here: 93% 98% 99%\n", - "Spurs vs Thunder win this round: 39% 75% 87%; win through here: 36% 73% 86%\n", - "Spurs vs Warriors win this round: 13% 33% 61%; win through here: 5% 24% 53%\n", - "Spurs vs Cavs win this round: 71% 83% 93%; win through here: 3% 20% 49%\n" - ] + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "playoffs('Spurs',\n", - " [('Memphis', (0.75, 0.83, 0.85)),\n", - " ('Thunder', (0.45, 0.62, 0.70)),\n", - " ('Warriors', (0.30, 0.42, 0.55)),\n", - " ('Cavs', (0.60, 0.67, 0.75))])" + "plt.plot(diff, series, label='Series Win')\n", + "plt.plot(diff, game, label='Game Win')\n", + "plt.legend(loc='best');\n", + "plt.grid()\n", + "plt.title('Point Differential vs. Win Percentage');" ] }, { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Cavs vs Pistons win this round: 93% 98% 99%; win through here: 93% 98% 99%\n", - "Cavs vs Hawks win this round: 39% 71% 93%; win through here: 36% 70% 92%\n", - "Cavs vs Raptors win this round: 29% 61% 80%; win through here: 11% 42% 73%\n", - "Cavs vs GSW/SAS win this round: 7% 17% 29%; win through here: 1% 7% 21%\n" - ] + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEKCAYAAAD3tSVSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJzt3WmYFPXV9/HvQcVdUDQqKhL3XbyjxF3URMAlLjEqKohL5ImRaFyJK8HbLcYIatxRbtxwwSiJEVwHBAERRTSKIioiQVEQFBUF5jwv/jVU207P9MxUd/Xy+1xXXzPVXV19+lT16epTm7k7IiJSmVqlHYCIiBSOiryISAVTkRcRqWAq8iIiFUxFXkSkgqnIi4hUMBX5EmJme5vZ22nHIekohflvZseb2cg0Y5BkVUSRN7PjzGyCmS0ys0/MbLyZ/a4E4hppZudnDLc3s9oc9/3E3ce6+7bNfK2TzGypmX1pZgvM7FUzOySJ95GUKMYX044jSWZ2qpm9bWYLzWyOmf3LzFZvzrRaMv8biG+amf0mY3jPaHnLvG+vaLlp5e4PuHu3Zr7W5Wb2fTSt+WY21sx2T+J9JCWKcWjacRRT2Rd5MzsXuAG4Fljf3TcA/h+wp5mtlGpwMAbYN2N4X+Dteu57193nJvB6L7n7Wu7eFrgbeNjM2jRlAma2QgJx5Jw8UDFH35nZfsCVwLHu3gbYFniomdMqVN7zWQb3ISw7tQm83jB3XwtYDxgHPNbUCRR4Gaw+7l62N2AtYBFwRCPjHQy8CiwEZgKXZzy2KVAL9AY+AuYBfYBdgdeB+cBNWdM7BXgrGvcpoEOO190bmJ8x/Hfgt8CcrPvuiP7fD5iV8dgHwLlRHF8ADwKtc7zWScCYjOHVovf1P9HwocBr0XTGAjtmvc4F0et8S/jy3xgYDswFPgNuzOf9R6/ZB3g3yt3N0f3bRNNeAnxVl5eG5k30eC/gwyiGS6JYD4geM6Af8F70+DCgbY78vAUcnDG8QvTeOgErA/cCn0f5mQisl8fydy7wWAOPtwb+Gr2vOcAtwMqZ8zrK+xzg/+qZ/xsCj0ZxzgD6Zjy2GzApytsc4K85YjgReD1j+Mkop9n3XZSxHL3Y2PzM8VqXA0MzhrcDlgHr5LncnBG9zozovu2Bp6Px5wD9GpvvxJ/nXlHe52a8t67Ad9HtK+C16P7eUVxfRtM8Pet9XQD8F/gYODWa/maNzeNSuaUeQIuCDzPte6BVI+PtC2wf/b9DNDN+lbVQ3BLNsF8QitFjQDugPfApsE80/uHRgrgVoRheBIzL8bqtgW+AnaPhN4COwItZ950Y/b8f8FHG8z8AJgDrA22jBfH0HK+1vMgDKwJnEQrAmsAu0XvYNfqA9IymvVLG67wavdeVo/c1JVp4V4nex575vP8olyOi190k+pAdlB1jnvNmu+jDuEf0nq4jfEDrivxZwEuEYrgScCvwQI78XALclzF8CPCf6P/TgSei925RvtbIY/nbG/ga6A/sSdYXMOEX5uNAG2D16DWuzJjXS4CrothXzpz/URyvABcTvpA6EgrQL6PHXwJOiP5fDeicI8YOwNJo+THgk+i1Psq4bwGwV33zqKH5Wc9rLS/y0WtcB3zYhOVmVBTTysAahMJ6NmH5Wx3YrbH5Tvx5vj163k7AYmDr7BgzXrs70DH6f59onnaKhrtFcWxD+CzcS/ji2qyxeVwqt9QDaFHwcALw36z7xhHWxr4B9s7xvBuA6zMWimXABhmPfw78JmP4UeAP0f//Bk7OeKxVtFBskuO1XgD6AmsDM6P7rs64b1ndc6m/yPfIGL4WuCXH65xEKBrzow/iS8D+0WO3AH/OGn8a8RfXB8BJGY/tTvhS+NGXZ2PvP/qA7ZHx+EPABRkxjqkv/hzz5lLg/ozHVuWHRf6tuvcYDW9Iji99YHPCmtoq0fB9wCXR/yeT9eumCctg1+iDPT+a/vWARY8tAn6aMe4ewPsZ83ox0Rdt9vwHfk5UIDMe7wcMjv4fTShY7fKI8X3gMMKvlhej+x7MuO9r4i/8+op8vfOznte5PJo/8wlfJs8SF8t8lpv9Mh4/Dpic43Vyznfiz/OGGY9PBI7JiHFofdPNGP8fRL+agMFkFO1oOcpck885j0vltiLlbR6wbrTBqBbA3fcCMLOPiLY5mNnPCYV1B8K3e2vgkaxpZfbEvyUUuczhNaL/NwUGmdn10XBdn3kjws/vbHU90ZmELyAIBeXk6L6P3L2+59XJjOMbwgKdy3h337ee+zcFeplZ34yYVyKsudf5OOP/TQhfSPX1aPN5/9kxr0EOZtYZuIb65037jGni7t+a2bysWP5hZnVxGuGLbn3CLwIynjvDzN4CDjOzfwG/Ai6LHr6X0J4aFm3DuA+42N2X5Yo7Y7qjCGugmNn+hBWCaWb2OGENe7KZ1Y3eKoqxzmfuviTHpDsAG5nZ/Iz31oqwPEFofVwRvdb7wAB3fzLHtF4kLIOzov8hLIP7EdboX24gDmjC/AQecvde9dyfz3KTvQzOyPEaDc33JsdsZt0Jy0Ldr4xVganRw+0JbbE6szKetx6Nz+PUlfuG1/GENYfD63ksM9H3E35SbeRho+TtNH9GzAL6uPs60W1td1/D3SfkGL+uyO9L/AEbB+wV3Tcmx/OSNIuwNpIdc+ZGQs8av4OZ1bd8fETT3n8mr+e+B8g9b+YQii8AZrYqoYWWGUv3rFhWd/cfFPgMw4DjCcvLf9z9fQB3X+ruV7j79oS2y2GEnm6TuPsLwPOEL6zPCcVl+4z42nrYQLv8KQ1MbhZhjTDzvbVx98Oi15rh7se7+3rAX4BHo/zUZwyhoO9NvAzWFf59KM4ymM9yk70Mbt7AtJoy3zP9IOdm1prwxfwXwnaYtQnbC+pdBglfvnXymcepK+si7+4LgQHALWb2azNbw4JOhG/YOmsAX7j7kmjN8fisSTWl4N8GXGRm2wGYWRszO7qB8ccT+ownEH3A3H0BYYPRiRTnA3Yn8P+i946ZrW5mBzewq9/LhIX7GjNbzcxWNrM9o8dup2nvP9OnwMZZez01NG8eJax57x49p3/W9G4HrjKzDlEs65nZrxp4/WHAQcDvCF8uRM/rYmY7RF9qiwhrhY3uaWJmvzKzY82sbTTcmVBMx3v47X4nMDBa48PMNjKzgxqbbuRl4Cszu8DMVjGzFcxsezPbNZrWCWa2bjTuQkLxyhXzGMJ2hn2Jf02+AfwU6EJxlsGmLjf/AjYwsz+YWevos905Y1oNzfeGPs+fAh0tXvWu+/X4ubvXRmv1mfPoYeBkM9vGzFYjbNtxgATmcVGUdZEHcPfrgHMIW8A/iW63RsMvRaOdAVxhZgsJMyl7N7fsNaqcw+7+OKG9MMzMFhB+1uXcr9jdvwEmE3qeb2Y89CJhN7OGPmANrenlzd0nE/bquTn6+f8uofda7+tEbZrDgC0Ja02zgGOixxp7/w3l8nngP8AnZlbXHvs9OeaNu79F2HbxEGHj15eEttp30SiDCP3wp6PnvwTUFYL68vAJ4Ut3d364DGxA+EJZGMX3AqGFg5ndama35JjkF4S8vhu9/lDgWncfFj1+IWFj6YQoV08TWgKNiubBoYSe+QfR+76TsEcZhJz/x8y+JGzHONbdv8sxrenR8+e4+5fRfU74IlmT+HNS79MbGc5LU5cbd18E/JLQVvuEsMx2iR5ubL43FPMjhC+BeWb2SvQ6ZwGPRJ+N46Jp18UxEriRsEy8S1h+IF4Gmz2Pi6VuA1HuEcwGExa2T919pxzj3EjYQv010NvdpyQdqEj0y2MBsIW7z0w7Hqk+ZrYN4VfQyjm2WZWcfNbk7yHsQVCv6OfN5u6+JWF/2tsSik0EMzvUzFaNCvz1wFQVeCkmMzsiahmtTdjDbUS5FHjIo8i7+1jCz9JcDif8TMXdJwJtzGz9BsYXaYrDiQ9E2Zzwc1qkmPoQ2l3TCdtrzkg3nKZJYhfK7F0HZ0f3fVr/6CL5c/ffEvreIqlw9+5px9ASZb/hVUREcktiTX424cCFOhtH9/2ImSWyt4iISLVx92Yd25NvkTdy73s6grAb3EMWTiu6wN1ztmoa25unWvTv35/+/funHUZJUC5iykWsJbmorYV334XXX4c33oCpU+Gtt+Djj2GTTWCLLeCnP4VNNw23jTeG9u1hgw1gtdUan36xZRxR22SNFnkze4Cwf2q76FQBlxMOHnB3v8Pd/x0dWPMeYRfKk5sdTRX58MMP0w6hZCgXMeUi1pRcLFwI48bB2LHw8svwyiuw9tqwyy6w445w0kmw/faw2WbQunXhYi5FjRZ5d88+OrS+cc5MJhwRkcZ9910o6iNHwnPPwTvvwG67wT77wDnnhP/XWy/tKEtDuZ+grGz17t077RBKhnIRUy5i2bmYPx/++U/4xz/g+edh222hWzcYNCgU9ZVXTifOUtfoEa+JvpiZqycvIvlauBCGD4cHH4SJE+HAA+HII+Hgg2HddRt/fqUws2ZveNUulCmpqalJO4SSoVzElIuw0XTkSNh//xo6dAhr76efDnPmhLX4Xr2qq8C3lNo1IlISPvkE7r4b7rwT2rWDffcNa/HrrJN2ZOVN7RoRSdXUqfC3v8ETT8DRR0OfPrDrrmlHVVpa0q7RmryIpGL0aLjqqrAf+5lnwowZWmsvBPXkU6Lea0y5iFV6LtzDnjH77QenngrHHAMffAAXXfTjAl/puSgWrcmLSFG8/DJceCHMng2XXALHHw8rqgIVnHryIlJQ06eHNfWXXoI//xl691ZxbyrtQikiJeerr8Ka+x57hNMLTJ8Op52mAl9sKvIpUb8xplzEKiEX7nD//eGI1E8+gTffDGvyTT3xVyXkohToO1VEEjNjRtgFcv58ePhh2HPPtCMS9eRFpMWWLoUbboBrr4U//QnOOkttmSRpP3kRSc20aeFUA2utFfag2WyztCOSTOrJp0T9xphyESunXNTWwo03wt57w8knwzPPJFvgyykXpUxr8iLSZHPmhLX3RYtg/HjYcsu0I5Jc1JMXkSYZNSrs696nTzioSb33wlNPXkQKbskSuOwyuO++cH73Ll3SjkjyoZ58StRvjCkXsVLNxaefwi9/CVOmwKuvFqfAl2ouyo2KvIg0aOLEcHm9/faDJ5/UtVPLjXryIpLTXXeFo1UHD4bDDks7muqlnryIJGrZMjj//LDm/uKLsPXWaUckzaV2TUrUb4wpF7FSyMWXX8Lhh8Prr8OECekV+FLIRSVQkReR5WbNCgc3bbxxuJj22munHZG0lHryIgKEy/Adcgj84Q9w7rlgzeoASyGoJy8iLVJTEy7FN2gQ9OiRdjSSJLVrUqJ+Y0y5iKWRi+HDQ4EfNqy0CryWi2RoTV6kit19N1x8cThVwS67pB2NFIJ68iJV6oYbYOBAePpp7SJZ6tSTF5G8ucOAAfDAA2Ef+A4d0o5ICkk9+ZSo3xhTLmKFzoU7XHopPPoojBlT2gVey0UytCYvUiXcw6X5nnoKnn9e56CpFurJi1QBd7jgAnj22XBr1y7tiKQp1JMXkZzq1uCfey7c1lkn7YikmNSTT4n6jTHlIlaIXAwYEE409vTT5VXgtVwkQ2vyIhXsmmvCVZxGj4Z11007GklDXj15M+sGDCSs+Q9292uzHl8LuA/oAKwAXO/uQ+qZjnryIkVy003hNAWjR8NGG6UdjbRES3ryjRZ5M2sFvAscCPwXmAQc5+7TMsb5E7CWu//JzNYF3gHWd/elWdNSkRcpgnvvDRf7ePFF6Ngx7WikpVpS5PPpyXcGprv7THdfAgwDDs8ax4E1o//XBOZlF3j5IfUbY8pFLIlcjBgRLvgxalR5F3gtF8nIpye/ETArY/hjQuHPdDMwwsz+C6wBHJtMeCLSFKNHw6mnhg2t222XdjRSCpLa8NoVeM3dDzCzzYFnzGwnd1+UPWLv3r3pGK1etG3blk6dOtEluvR73Td3NQx36dKlpOLRcOkM12nq8wcPruHcc2H48C507lw676e5w3X3lUo8xRyuqalhyJAhAMvrZXPl05PfHejv7t2i4X6AZ258NbN/AVe7+7ho+DngQnd/JWta6smLFMBHH8Fee8F118Fxx6UdjSSt0D35ScAWZrapmbUGjgNGZI0zE/hFFMz6wFbA+80JqFpkr7VVM+Ui1pxczJ8P3brBOedUVoHXcpGMRts17r7MzM4EnibehfJtM+sTHvY7gP8FhpjZ1OhpF7j7/IJFLSIALF4MRxwBBx8Mf/xj2tFIKdK5a0TKVG0tnHBC+Pvgg9BKx69XLJ27RqQKXXZZ6MU/95wKvOSmRSMl6jfGlItYvrm4++5wTdbHH4dVVilsTGnRcpEMrcmLlJnnnw9nlRwzRueEl8apJy9SRqZPh733Dmvx+++fdjRSLIXehVJESsCCBXDYYXDFFSrwkj8V+ZSo3xhTLmK5crF0KRx7LHTtCqefXtyY0qLlIhkq8iJl4LzzwAyuvz7tSKTcqCcvUuLuuQeuvhpefhnatk07GklDQc8nnyQVeZGmmTgx9OFHj4Ztt007GkmLNryWIfUbY8pFLDMXc+bA0UfDXXdVZ4HXcpEMFXmREvTdd/DrX4eNrL/6VdrRSDlTu0akBP3ud/DJJzB8uE5ZIDp3jUhFGTIkHNU6aZIKvLScFqGUqN8YUy5id9xRw/nnwz/+AWutlXY06dJykQwVeZESMW9eOLPkLbfo+qySHPXkRUpAbS0cckgo7jrgSbJpF0qRMnfVVbBoEVxzTdqRSKVRkU+J+o2xas/Fs8+GFs1DD8G4cTVph1Myqn25SIqKvEiKZs+Gnj3hvvugffu0o5FKpJ68SEqWLAmnDO7eHS6+OO1opJTp3DUiZahfP3j9dXjySe0PLw3ThtcypH5jrBpz8dRTcP/9MHToDwt8NeYiF+UiGTriVaTIPv4YTj4ZHnlE12iVwlO7RqSIli4NffiDDw4X4xbJh9o1ImWif39YbTW48MK0I5FqoSKfEvUbY9WSi+efh7vv/nEfPlO15CIfykUyVORFimDuXOjVKxT49ddPOxqpJurJixRYbS0ceijsvHO4VqtIU6knL1LCbrgBvvgCBgxIOxKpRiryKVG/MVbJuZg8Ga69Fh58EFZaqfHxKzkXTaVcJENFXqRAFi2CHj3gxhuhY8e0o5FqpZ68SIGccgq4wz33pB2JlDtd41WkxDz0EIwdC6++mnYkUu3UrkmJ+o2xSsvFzJnQt2/ow6+xRtOeW2m5aAnlIhkq8iIJWrYsnB/+vPPgZz9LOxqRPHvyZtYNGEj4Uhjs7tfWM04X4AZgJeAzd9+/nnHUk5eKdtVV4UpPzz6r0wdLcgp6PnkzawW8CxwI/BeYBBzn7tMyxmkDvAQc5O6zzWxdd/+8nmmpyEvFmjQpXIx78mTYZJO0o5FKUuiDoToD0919prsvAYYBh2eNczww3N1nA9RX4OWH1G+MVUIuFi2CE06Av/+9ZQW+EnKRFOUiGfkU+Y2AWRnDH0f3ZdoKWMfMXjCzSWbWM6kARcrBOefAnnvCb36TdiQiP5TULpQrAv8DHACsDow3s/Hu/l5C0684Xbp0STuEklHuuXjiidCDnzKl5dMq91wkSblIRj5FfjbQIWN44+i+TB8Dn7v7YmCxmY0BdgZ+VOR79+5Nx+jwv7Zt29KpU6flM7Pu55mGNVwuw/PnwxlndGH4cHj11fTj0XBlDNfU1DBkyBCA5fWyufLZ8LoC8A5hw+sc4GWgh7u/nTHONsBNQDdgZWAicKy7v5U1LW14jdTU1CyfudWuXHPhHja0/uxncMUVyUyzXHNRCMpFrKBHvLr7MjM7E3iaeBfKt82sT3jY73D3aWY2CpgKLAPuyC7wIpXm1lvhs8/gssvSjkQkN527RqQZ3nkH9toLxo2DrbdOOxqpdDqfvEgRLVkSjmodMEAFXkqfinxK6jaySPnl4soroV07+N3vkp92ueWikJSLZOgslCJNMHEi3HYbvPYaWLN+PIsUl3ryInn6+mvYZZdwfpqjj047GqkmBT13TZJU5KWcnXFGOH3B0KFpRyLVRhtey5D6jbFyyMXIkfDkk3DTTYV9nXLIRbEoF8lQT16kEfPmwWmnhTX4Nm3SjkakadSuEWmAOxx3HLRvDzfckHY0Uq10jVeRAhk2DN54A6LTiIiUHfXkU6J+Y6xUczF7Npx1Ftx7L6y6anFes1RzkQblIhkq8iL1cIdTToEzz9S1WqW8qScvUo9bb4V77gnnpllppbSjkWqn/eRFEjR9erjK09ixOjeNlAbtJ1+G1G+MlVIuli6Fk06CSy9Np8CXUi7SplwkQ0VeJMN114WNrGeemXYkIslQu0Yk8vrr8ItfwOTJ0KFD4+OLFIvaNSIt9N134Rzxf/2rCrxUFhX5lKjfGCuFXPTvD5ttBr16pRtHKeSiVCgXydARr1L1xo0LR7ROmaJzxEvlUU9eqtqiRdCpU9jgeuSRaUcjUj/tJy/STGecES4G8n//l3YkIrlpw2sZUr8xllYuRo0K54gfNCiVl6+XlouYcpEM9eSlKn3xBZx6aliDb9s27WhECkftGqlKJ5wA7drBjTemHYlI43Q+eZEmePhheOUVeO21tCMRKTz15FOifmOsmLmYMwf69g3niF9ttaK9bN60XMSUi2SoyEvVcA99+D59oHPntKMRKQ715KVq3HEH3H47jB8PrVunHY1I/rSfvEgjZsyAn/8cRo+G7bdPOxqRptF+8mVI/cZYoXOxbFk4J83FF5d+gddyEVMukqEiLxXvuutg5ZXDRblFqo3aNVLRpkyBgw4Ku0zqFMJSrtSuEanH4sU6R7yIinxK1G+MFSoXl1wCW20VCn250HIRUy6SoSNepSK98AI8+GC4pJ/OES/VTD15qTgLF8JOO8Ftt0H37mlHI9JyBe/Jm1k3M5tmZu+a2YUNjLebmS0xs6OaE4xIEvr2hUMOUYEXgTyKvJm1Am4GugLbAz3MbJsc410DjEo6yEqkfmMsyVw88ghMnBh2myxHWi5iykUy8lmT7wxMd/eZ7r4EGAYcXs94fYFHgbkJxieSt9mz4cwz4b77YPXV045GpDQ02pM3s18DXd399Gj4RKCzu/8hY5z2wP3uvr+Z3QP8090fq2da6slLQdTWQteusN9+Ya8akUpSCvvJDwQye/Xan0GK6sYbw7Va+/VLOxKR0pLPLpSzgcxDSTaO7su0KzDMzAxYF+huZkvcfUT2xHr37k3Hjh0BaNu2LZ06daJLly5A3IOrhuHMfmMpxJPmcN19zX1+u3ZduPJKGDiwhrFj038/LRmeMmUKZ599dsnEk+bwwIEDq7o+DBkyBGB5vWyufNo1KwDvAAcCc4CXgR7u/naO8dWuyUNNTc3ymVvtWpKLxYvDueHPPhtOOSXZuNKg5SKmXMQKfqphM+sGDCK0dwa7+zVm1gdwd78ja9y7gX+pyEsx/PGPMGtW2KtGBz1JpdL55KUqjRoFp50WjmpdZ520oxEpnFLY8CpNlNmPrnbNycVnn4X2zNChlVXgtVzElItkqMhL2XEPa/Anngj77592NCKlTe0aKTu33AKDB+tarVI91JOXqvHmm2Htfdy4cBphkWqgnnwZUr8xlm8uvv0WjjsO/vKXyi3wWi5iykUyVOSlbJx3HuywA/TunXYkIuVD7RopCyNGhAtxv/YatG2bdjQixdWSdo2uDCUlb9Ys+O1v4fHHVeBFmkrtmpSo3xhrKBdLl8IJJ4TTFuyxR/FiSouWi5hykQwVeSlpV1wBK68MF+a8HpmINEQ9eSlZNTXQo0fow2+wQdrRiKRHu1BKxZk7NxzROmSICrxIS6jIp0T9xlh2LmproWdP6NUrXO2pmmi5iCkXyVCRl5JzzTXwzTcwYEDakYiUP/XkpaSMGQPHHAOvvAIbb5x2NCKlQT15qQhz54bdJYcMUYEXSYqKfErUb4zV1NSwbFko8D17QrduaUeUHi0XMeUiGSryUhIGDIBly9SHF0maevKSupEjw0VAXnlFu0uK1EfnrpGy9dFH4aySDz+sAi9SCGrXpET9Rli8GI4+Go44ooZ99007mtKg5SKmXCRDRV5S07cvbLopHHts2pGIVC715CUVd90Ff/sbTJwIa66ZdjQipU3XeJWyMmkSHHwwvPgibLNN2tGIlD4dDFWGqrXfOHdu6MPffntc4Ks1F/VRLmLKRTJU5KVovv8+FPiePeGoo9KORqQ6qF0jRfP734ddJp94Alpp9UIkb9pPXkreXXfBc8+FDa0q8CLFo49bSqqp3zhuHFx0UViDb9Pmx49XUy4ao1zElItkqMhLQX34YejDDx0KW2+ddjQi1Uc9eSmYr76CvfaCU0+Fs85KOxqR8qX95KXk1NbCkUfC+uuH3SWtWYuniID2ky9Lld5v7NcPFi6Em29uvMBXei6aQrmIKRfJ0N41krjbbw8bWcePh9at045GpLqpXSOJGjkynDp47FjYYou0oxGpDNpPXkrC1KnhaNbHH1eBFykVefXkzaybmU0zs3fN7MJ6Hj/ezF6PbmPNbMfkQ60sldZvnDULDj0Ubrwx7FHTFJWWi5ZQLmLKRTIaLfJm1gq4GegKbA/0MLPscwe+D+zr7jsD/wvcmXSgUroWLIDu3cP54Xv0SDsaEcnUaE/ezHYHLnf37tFwP8Dd/doc47cF3nD3Tep5TD35CrN4MXTrBp06wQ03aFdJkUIo9C6UGwGzMoY/ju7L5TTgqeYEI+WlthZ69YKf/CRcAEQFXqT0JLrh1cz2B04G9s41Tu/evenYsSMAbdu2pVOnTnTp0gWIe3DVMJzZbyyFeJo67A5HHlnDzJkwYUIXWrVq/vSyc1IK7y+t4SlTpnD22WeXTDxpDg8cOLCq68OQIUMAltfL5sq3XdPf3btFw/W2a8xsJ2A40M3dZ+SYlto1kZqamuUztxxdcknYXfL552GttVo2rXLPRZKUi5hyESvoaQ3MbAXgHeBAYA7wMtDD3d/OGKcD8BzQ090nNDAtFfkKcP314dTBY8bAeuulHY1I5SvofvLuvszMzgSeJvTwB7v722bWJzzsdwCXAusAt5iZAUvcvXNzApLSNngw3HRTuD6rCrxI6dMEuL2IAAAIvklEQVQRrykpx5+i998PF1wAL7wAW22V3HTLMReFolzElIuYjniVgnvkETjvvHB1pyQLvIgUltbkpVFPPAGnnw5PPw0775x2NCLVR6caloKpK/BPPqkCL1KOVORTkrmPeKl67LFQ4P/9b9h118K9TjnkoliUi5hykQwVeanXI4/AGWeEfeF/9rO0oxGR5lJPXn7kvvvCRtZRo9SiESkF2rtGEvP3v8M114QjWbfbLu1oRKSl1K5JSan1G93hqqvCicbGjClugS+1XKRJuYgpF8nQmrxQWxsOcho5Mly2b8MN045IRJKinnyV++67cE3WWbNgxAhYZ520IxKRbNpPXpplwYJwwY/vv4dnnlGBF6lEKvIpSbvfOHMm7LMP7LADPPwwrLpqerGknYtSolzElItkqMhXofHjYY894JRTwoW3V1gh7YhEpFDUk68y998Pf/wj3HMPHHJI2tGISD60n7w0aunScDWnhx4K+8DvsEPaEYlIMahdk5Ji9hs//zxsYJ08GSZNKr0Cr95rTLmIKRfJUJGvcK+8Ek4utttuYT/4dddNOyIRKSb15CuUOwwaFI5ivfVW+PWv045IRJpLPXn5gXnzwp4zc+bAhAmw2WZpRyQiaVG7JiWF6jc+9xzssgtssUU4RUE5FHj1XmPKRUy5SIbW5CvEt99Cv34wfDgMHgxdu6YdkYiUAvXkK8CECXDyyWEN/uabdXoCkUqjnnyV+uoruPhiePRRGDgQjjkm7YhEpNSoJ5+SlvYb//nPsL/7okXw5pvlXeDVe40pFzHlIhlaky8z06fD2WfDe+/B3XfDgQemHZGIlDL15MvEl1/C1VfDnXfChRfCWWdB69ZpRyUixaDzyVew778PZ4rccsuw3/vUqXD++SrwIpIfFfmUNNZvXLoUhg6FbbcNpyN45hkYMgTaty9KeEWl3mtMuYgpF8lQT77ELFkSTgd85ZWw0UZhn/cuXdKOSkTKlXryJeLLL0NBHzQoHKV6+eWw335pRyUipUD7yZexGTPCCcTuuQd++ctwKb7OndOOSkQqhXryKViyBP785xoOOgh23z3cN3kyDBtWnQVevdeYchFTLpKhNfkicYeXX4Z77w1XZ9pww7Ar5IgRsMoqaUcnIpVKPfkCqq0Nhf2xx8JthRWgZ084/vjyODukiJQG9eRLyBdfwLPPht0en3oqnCzsqKPgkUegUyewZs0mEZHmyasnb2bdzGyamb1rZhfmGOdGM5tuZlPMrFOyYZauL74I55E577zQT99007A/e6dOMHp0OK/MgAHhDJGZBV79xphyEVMuYspFMhot8mbWCrgZ6ApsD/Qws22yxukObO7uWwJ9gNsKEGvq5s8PhXvQIDjxRNhqK+jQIRyR2qYN/PWvMHcuPPkk9O0bjlLNZcqUKcULvMQpFzHlIqZcJCOfdk1nYLq7zwQws2HA4cC0jHEOB4YCuPtEM2tjZuu7+6dJB1xoX38NM2fChx+Gk4G9+264vfVWOLXvjjvCTjvBAQeEi3Rsu23otTfVggULEo+9XCkXMeUiplwkI58ivxEwK2P4Y0Lhb2ic2dF9qRV5d/juu3Aq3kWLYOHCcFuwIFwDdd48+Pxz+PTTcE6YOXNg9mz45puwdr7ppuESelttBYcdBttsE+5TT11EyknRN7wedlj4m7mTTfYON+4/vtXWhtuyZeG2dGm4LVkSTuK1ZEko6osXh9s338CKK8Lqq8Maa4R2Stu24W+7drDuuuG25ZZhd8b27cPfn/ykOIX8ww8/LPyLlAnlIqZcxJSLZDS6C6WZ7Q70d/du0XA/wN392oxxbgNecPeHouFpwH7Z7Rozq579J0VEElTIXSgnAVuY2abAHOA4oEfWOCOA3wMPRV8KC+rrxzc3SBERaZ5Gi7y7LzOzM4GnCXvjDHb3t82sT3jY73D3f5vZwWb2HvA1cHJhwxYRkXwU9YhXEREproKcoEwHT8Uay4WZHW9mr0e3sWa2YxpxFkM+y0U03m5mtsTMjipmfMWU52eki5m9ZmZvmtkLxY6xWPL4jKxlZiOiWvGGmfVOIcyCM7PBZvapmU1tYJym1013T/RG+OJ4D9gUWAmYAmyTNU534Mno/58DE5KOoxRueeZid6BN9H+3as5FxnjPAf8Cjko77hSXizbAf4CNouF10447xVz8Cbi6Lg/APGDFtGMvQC72BjoBU3M83qy6WYg1+eUHT7n7EqDu4KlMPzh4CmhjZusXIJa0NZoLd5/g7gujwQmE4wsqUT7LBUBf4FFgbjGDK7J8cnE8MNzdZwO4++dFjrFY8smFA2tG/68JzHP3pUWMsSjcfSzwRQOjNKtuFqLI13fwVHbhynXwVKXJJxeZTgOeKmhE6Wk0F2bWHjjC3W8FKnlPrHyWi62AdczsBTObZGY9ixZdceWTi5uB7czsv8DrwFlFiq3UNKtu6iyUJcLM9ifslbR32rGkaCCQ2ZOt5ELfmBWB/wEOAFYHxpvZeHd/L92wUtEVeM3dDzCzzYFnzGwnd1+UdmDloBBFfjbQIWN44+i+7HE2aWScSpBPLjCznYA7gG7u3tDPtXKWTy52BYaZmRF6r93NbIm7jyhSjMWSTy4+Bj5398XAYjMbA+xM6F9XknxycTJwNYC7zzCzD4BtgFeKEmHpaFbdLES7ZvnBU2bWmnDwVPaHdATQC5YfUVvvwVMVoNFcmFkHYDjQ091npBBjsTSaC3ffLLr9lNCXP6MCCzzk9xl5AtjbzFYws9UIG9reLnKcxZBPLmYCvwCIetBbAe8XNcriMXL/gm1W3Ux8Td518NRy+eQCuBRYB7glWoNd4u4Vd6XXPHPxg6cUPcgiyfMzMs3MRgFTgWXAHe7+VophF0Sey8X/AkMydi28wN3npxRywZjZA0AXoJ2ZfQRcDrSmhXVTB0OJiFSwghwMJSIipUFFXkSkgqnIi4hUMBV5EZEKpiIvIlLBVORFRCqYiryISAVTkRcRqWD/H7178o4AEFgLAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "playoffs('Cavs',\n", - " [('Pistons', (0.75, 0.83, 0.85)),\n", - " ('Hawks', (0.45, 0.60, 0.75)),\n", - " ('Raptors', (0.40, 0.55, 0.65)),\n", - " ('GSW/SAS', (0.25, 0.33, 0.40))])" + "P = [p/100 for p in range(100)]\n", + "plt.plot(P, [win_series(p) for p in P])\n", + "plt.grid()\n", + "plt.title('Game Win Percentage vs. Series Win Percentage');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "I have the Warriors at 50% (for the medium estimate of winning it all) and the Spurs at 20%, so I'm more of a Warriors fan than fivethirtyeight and basketball-reference, but I have very wide margins between my low and high estimate: 22% to 78% for the Warriors; 3% to 49% for the Spurs; 1% to 21% for the Cavs. Interestingly, while fivethirtyeight does not think this year's Warriors are better than the 1995 Bulls, they [do think](http://fivethirtyeight.com/features/the-warriors-still-arent-the-best-team-ever/) the Spurs, Thunder, and Cavs are the best ever second-, third-, and fourth-best teams in a season.\n", + "# Series by Series Model\n", + "\n", + "Here's a function to tabulate a team's chance of winning each series on the way to a title. The first argument is the team's name, and each following argument is a playoff round entry, consisting of the opponent team name, the game win percentage against this opponent, and optionally the wins and losses in the series so far:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def playoffs(name, *rounds):\n", + " \"Print probability for team winning each series.\"\n", + " overall = 1.0 \n", + " for (opponent, p, *WL) in rounds:\n", + " this_round = win_series(p, *WL)\n", + " overall *= this_round\n", + " print('{} vs {:8} {}; through here: {}'\n", + " .format(name, opponent, pct(this_round), pct(overall)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here my holistic game estimates are turned into overall predictions:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rockets vs Wolves 93%; through here: 93%\n", + "Rockets vs Jazz 87%; through here: 81%\n", + "Rockets vs Warriors 61%; through here: 49%\n", + "Rockets vs Raptors 71%; through here: 35%\n" + ] + } + ], + "source": [ + "playoffs('Rockets',\n", + " ('Wolves', 0.75),\n", + " ('Jazz', 0.70),\n", + " ('Warriors', 0.55),\n", + " ('Raptors', 0.60))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Warriors vs Spurs 93%; through here: 93%\n", + "Warriors vs Blazers 80%; through here: 74%\n", + "Warriors vs Rockets 39%; through here: 29%\n", + "Warriors vs Raptors 61%; through here: 18%\n" + ] + } + ], + "source": [ + "playoffs('Warriors',\n", + " ('Spurs', 0.75),\n", + " ('Blazers', 0.65),\n", + " ('Rockets', 0.45),\n", + " ('Raptors', 0.55))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So I'm in good agreement with the Vegas oddsmakers about the Rockets: I have the Rockets at 49% winning the conference and 35% winning the title, while Vegas had them at 44% and 35%. For the Warriors I'm splitting the difference between 538's low estimate (8% win conference, 4% win title) and Vegas's high estimate (44% and 35%, tied with the Rockets).\n", + "\n", + "What if I went by point differential?" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rockets vs Wolves 88%; through here: 88%\n", + "Rockets vs Jazz 78%; through here: 69%\n", + "Rockets vs Warriors 69%; through here: 48%\n", + "Rockets vs Raptors 57%; through here: 27%\n" + ] + } + ], + "source": [ + "playoffs('Rockets',\n", + " ('Wolves', simulate(8.2 - 2.3)),\n", + " ('Jazz', simulate(8.2 - 4.5)),\n", + " ('Warriors', simulate(8.2 - 5.8)),\n", + " ('Raptors', simulate(8.2 - 7.3)))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Warriors vs Spurs 73%; through here: 73%\n", + "Warriors vs Blazers 75%; through here: 55%\n", + "Warriors vs Rockets 31%; through here: 17%\n", + "Warriors vs Raptors 37%; through here: 6%\n" + ] + } + ], + "source": [ + "playoffs('Warriors',\n", + " ('Spurs', simulate(5.8 - 2.9)),\n", + " ('Blazers', simulate(5.8 - 2.6)),\n", + " ('Rockets', simulate(5.8 - 8.2)),\n", + " ('Raptors', simulate(5.8 - 7.3)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This model gives cuts the Rockets' chances a bit (mainly because the Raptors have a strong 7.3 score), and cuts the Warriors' chances a lot, bringing them more in line with the 538 prediction. How do I reconcile the discrepancy between my subjective probabilities and these numbers? I guess I would say that I have less faith in the point differential model, for several reasons: it counts games from the distant past, when some teams had very different lineups than they have now (due to injuries and trades); different teams have different approaches to how they handle games whose outcome is already decided; the metric puts too much emphasis on blowouts, for example, in the Warriors' final game, it was to their strategic advantage to lose, and they did it very convincingly—by 40 points, which dropped their average point differential for the entire year by 0.5 points.\n", + "\n", + "# Series Length\n", + "\n", + "Given a team's game win percentage, how many games should we expect a series to run? That is, with a game win percentage of 60%, how likely is it to sweep all 4 games? To go to 7 games? Here's a chart of the probability of each possible series outcome, based on the win percentage of the first team:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import collections\n", + "\n", + "class MCounter(collections.Counter):\n", + " \"A multipliable Counter: you can say `2 * MCounter(stuff)`.\"\n", + " def __mul__(self, p): return MCounter({k: p * self[k] for k in self})\n", + " __rmul__ = __mul__" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W-L | Game Win Percentage\n", + " | 10% 15% 20% 25% 30% 35% 40% 45% 50% 55% 60% 65% 70% 75% 80% 85% 90%\n", + "----+-------------------------------------------------------------------------------------\n", + "4-0 | 0% 0% 0% 0% 1% 2% 3% 4% 6% 9% 13% 18% 24% 32% 41% 52% 66%\n", + "4-1 | 0% 0% 1% 1% 2% 4% 6% 9% 12% 16% 21% 25% 29% 32% 33% 31% 26%\n", + "4-2 | 0% 0% 1% 2% 4% 6% 9% 12% 16% 19% 21% 22% 22% 20% 16% 12% 7%\n", + "4-3 | 0% 1% 2% 3% 6% 8% 11% 14% 16% 17% 17% 15% 13% 10% 7% 4% 1%\n", + "3-4 | 1% 4% 7% 10% 13% 15% 17% 17% 16% 14% 11% 8% 6% 3% 2% 1% 0%\n", + "2-4 | 7% 12% 16% 20% 22% 22% 21% 19% 16% 12% 9% 6% 4% 2% 1% 0% 0%\n", + "1-4 | 26% 31% 33% 32% 29% 25% 21% 16% 12% 9% 6% 4% 2% 1% 1% 0% 0%\n", + "0-4 | 66% 52% 41% 32% 24% 18% 13% 9% 6% 4% 3% 2% 1% 0% 0% 0% 0%\n" + ] + } + ], + "source": [ + "def series_results(p, W=0, L=0) -> MCounter:\n", + " \"\"\"Return {(win, loss): probability} for all possible outcomes of the series.\"\"\"\n", + " return MCounter([(W, L)] if W == 4 or L == 4 else\n", + " (p * series_results(p, W + 1, L) + \n", + " (1 - p) * series_results(p, W, L + 1)))\n", + " \n", + "def series_results_table(pcts=[p/100 for p in range(10, 95, 5)]):\n", + " outcomes = [(4, 0), (4, 1), (4, 2), (4, 3), (3, 4), (2, 4), (1, 4), (0, 4)]\n", + " print('W-L | Game Win Percentage')\n", + " print(' | ' + ' '.join(map(pct, pcts)))\n", + " print('----+' + '-' * 5 * len(pcts))\n", + " for (W, L) in outcomes:\n", + " results = [series_results(p)[W, L] for p in pcts]\n", + " print('{}-{} | {}'.format(W, L, ' '.join(map(pct, results))))\n", + "\n", + "series_results_table()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So we see that our 60% team has a 13% chance of sweeping (4-0), and 13+21+21 = 55% chance of winning in 6 games or less.\n", + "\n", + "**Note:** I had to define `MCounter` because `collectionsCounter` does not support multiplication. I think it should: if `C` is a `Counter`, then shouldn't `C + C` be the same as `2 * C`?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "# Historical Relic: 2016 NBA Playoffs\n", "\n", "\n", + "## 18 April 2016\n", "\n", - "What's better--a holistic guess at the outcome, or a reductionist model like this one? I can't say that one is better than the other in every case, but it can be instructive to examine the cases where the reductionist model differs from your holistic impressions. For example, look at the low end of my prediction for the Spurs. I feel like it is crazy to say the Spurs only have a 3% chance of winning the title, but I don't feel that any of the individual game win probabilities (75%, 45%, 30%, and 60%, respectively) are crazy. So now I know that at least one of my intutions is wrong. But I'm not sure how to reconcile the mismatch..." + "The Golden State Warriors have had a historic basketball season, winning more games than any other team ever has. But will they top that off by winning the championship? There are 15 other teams in contention, including one, the Spurs, that has had a historic season as the best second-best team ever. The web site fivethirtyeight, using a complicated scoring system, [gives](http://projects.fivethirtyeight.com/2016-nba-picks/) the Warriors a 44% chance of winning, with the Spurs at 28%. Basketball-reference [has](http://www.basketball-reference.com/friv/playoff_prob.cgi) the Warriors at 41% and Spurs at 32.5%, while a [betting site](http://www.oddsshark.com/nba/nba-futures) had the Warriors at 54% and Spurs at 18%. \n", + " \n", + "Here are the top four teams with their stats:\n", + "\n", + " TEAM PCT SRS\n", + " Warriors .890 10.38\n", + " Spurs .817 10.28\n", + " Thunder .671 7.09\n", + " Cavaliers .695 5.45\n", + "\n", + "I came up with my own subjective game winning percentages, informed by SRS calculations, plus injury status, etc." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Warriors vs Rockets 98%; through here: 98%\n", + "Warriors vs Clippers 91%; through here: 89%\n", + "Warriors vs Spurs 67%; through here: 60%\n", + "Warriors vs Cavs 83%; through here: 50%\n" + ] + } + ], + "source": [ + "playoffs('Warriors',\n", + " ('Rockets', 0.83),\n", + " ('Clippers', 0.73),\n", + " ('Spurs', 0.58),\n", + " ('Cavs', 0.67))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Spurs vs Memphis 98%; through here: 98%\n", + "Spurs vs Thunder 75%; through here: 73%\n", + "Spurs vs Warriors 33%; through here: 24%\n", + "Spurs vs Cavs 83%; through here: 20%\n" + ] + } + ], + "source": [ + "playoffs('Spurs',\n", + " ('Memphis', 0.83),\n", + " ('Thunder', 0.62),\n", + " ('Warriors', 0.42),\n", + " ('Cavs', 0.67))" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cavs vs Pistons 98%; through here: 98%\n", + "Cavs vs Hawks 71%; through here: 70%\n", + "Cavs vs Raptors 61%; through here: 42%\n", + "Cavs vs GSW/SAS 17%; through here: 7%\n" + ] + } + ], + "source": [ + "playoffs('Cavs',\n", + " ('Pistons', 0.83),\n", + " ('Hawks', 0.60),\n", + " ('Raptors', 0.55),\n", + " ('GSW/SAS', 0.33))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I have the Warriors at 50% (for the estimate of winning it all) and the Spurs at 20%, so I'm more of a Warriors fan than fivethirtyeight and basketball-reference. Interestingly, while fivethirtyeight does not think this year's Warriors are better than the 1995 Bulls, they [do think](http://fivethirtyeight.com/features/the-warriors-still-arent-the-best-team-ever/) the Spurs, Thunder, and Cavs are the best ever second-, third-, and fourth-best teams in a season." ] }, { @@ -268,58 +592,31 @@ "\n", "The Playoff picture has changed! \n", "\n", - "We have some results for first-round series, and there have been key injuries to players including Steph Curry, Avery Bradley, Chris Paul, and Blake Griffin. To update, first I make a small alteration to allow the current state of a series in terms of wins/loses to be specified as part of the input to `playoffs`:" + "We have some results for first-round series, and there have been key injuries to players including Steph Curry, Avery Bradley, Chris Paul, and Blake Griffin. We don't know for sure how long Curry will be out, but here are my updated odds for the Warriors, under the assumption that Curry misses the second round, and comes back in time for the Western Conference Finals at a mildly reduced capacity:" ] }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def playoffs(name, rounds):\n", - " \"Print probability for team winning each series.\"\n", - " overall = (1, 1, 1) # (lo, med, hi) probabilities of winning it all\n", - " for (opponent, probs, *args) in rounds:\n", - " this_round = [win_series(p, *args) for p in probs]\n", - " overall = [overall[i] * this_round[i] for i in range(len(probs))]\n", - " print('{} vs {:8} win this round: ({}) win through here: ({})'.format(\n", - " name, opponent, percents(this_round), percents(overall)))" - ] - }, - { - "cell_type": "markdown", + "execution_count": 19, "metadata": {}, - "source": [ - "We don't know for sure how long Curry will be out, but here are my updated odds for the Warriors, with the middle probability value representing the assumption that Curry misses the second round, and comes back in time for the Western Conference Finals at a mildly reduced capacity; the low and high probability values represent more and less severe injuries:" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Warriors vs Rockets win this round: ( 88% 97% 99%) win through here: ( 88% 97% 99%)\n", - "Warriors vs Blazers win this round: ( 39% 61% 83%) win through here: ( 34% 59% 83%)\n", - "Warriors vs Spurs win this round: ( 13% 61% 83%) win through here: ( 4% 36% 69%)\n", - "Warriors vs Cavs win this round: ( 29% 71% 87%) win through here: ( 1% 26% 60%)\n" + "Warriors vs Rockets 97%; through here: 97%\n", + "Warriors vs Blazers 61%; through here: 59%\n", + "Warriors vs Spurs 61%; through here: 36%\n", + "Warriors vs Cavs 71%; through here: 26%\n" ] } ], "source": [ "playoffs('Warriors',\n", - " [('Rockets', (0.50, 0.70, 0.80), 3, 1),\n", - " ('Blazers', (0.45, 0.55, 0.67)),\n", - " ('Spurs', (0.30, 0.55, 0.67)),\n", - " ('Cavs', (0.40, 0.60, 0.70))])" + " ('Rockets', 0.70, 3, 1),\n", + " ('Blazers', 0.55),\n", + " ('Spurs', 0.55),\n", + " ('Cavs', 0.60))" ] }, { @@ -331,54 +628,50 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 20, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Spurs vs Memphis win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Spurs vs Thunder win this round: ( 39% 75% 87%) win through here: ( 39% 75% 87%)\n", - "Spurs vs Warriors win this round: ( 17% 39% 87%) win through here: ( 7% 29% 76%)\n", - "Spurs vs Cavs win this round: ( 71% 83% 93%) win through here: ( 5% 24% 71%)\n" + "Spurs vs Memphis 100%; through here: 100%\n", + "Spurs vs Thunder 75%; through here: 75%\n", + "Spurs vs Warriors 39%; through here: 29%\n", + "Spurs vs Cavs 83%; through here: 24%\n" ] } ], "source": [ "playoffs('Spurs',\n", - " [('Memphis', (0.75, 0.83, 0.85), 4, 0),\n", - " ('Thunder', (0.45, 0.62, 0.70)),\n", - " ('Warriors', (0.33, 0.45, 0.70)),\n", - " ('Cavs', (0.60, 0.67, 0.75))])" + " ('Memphis', 0.83, 4, 0),\n", + " ('Thunder', 0.62),\n", + " ('Warriors', 0.45),\n", + " ('Cavs', 0.67))" ] }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 21, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Cavs vs Pistons win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Cavs vs Hawks win this round: ( 39% 71% 93%) win through here: ( 39% 71% 93%)\n", - "Cavs vs Raptors win this round: ( 29% 61% 80%) win through here: ( 11% 43% 74%)\n", - "Cavs vs GSW/SAS win this round: ( 13% 29% 71%) win through here: ( 1% 13% 53%)\n" + "Cavs vs Pistons 100%; through here: 100%\n", + "Cavs vs Hawks 71%; through here: 71%\n", + "Cavs vs Raptors 61%; through here: 43%\n", + "Cavs vs GSW/SAS 29%; through here: 13%\n" ] } ], "source": [ "playoffs('Cavs',\n", - " [('Pistons', (0.75, 0.83, 0.85), 4, 0),\n", - " ('Hawks', (0.45, 0.60, 0.75)),\n", - " ('Raptors', (0.40, 0.55, 0.65)),\n", - " ('GSW/SAS', (0.30, 0.40, 0.60))])" + " ('Pistons', 0.83, 4, 0),\n", + " ('Hawks', 0.60),\n", + " ('Raptors', 0.55),\n", + " ('GSW/SAS', 0.40))" ] }, { @@ -402,106 +695,98 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 22, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Warriors vs Rockets win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Warriors vs Blazers win this round: ( 91% 96% 98%) win through here: ( 91% 96% 98%)\n", - "Warriors vs Spurs win this round: ( 39% 71% 83%) win through here: ( 36% 68% 82%)\n", - "Warriors vs Cavs win this round: ( 29% 61% 83%) win through here: ( 10% 42% 68%)\n" + "Warriors vs Rockets 100%; through here: 100%\n", + "Warriors vs Blazers 96%; through here: 96%\n", + "Warriors vs Spurs 71%; through here: 68%\n", + "Warriors vs Cavs 61%; through here: 42%\n" ] } ], "source": [ "playoffs('Warriors',\n", - " [('Rockets', (0.50, 0.70, 0.80), 4, 1),\n", - " ('Blazers', (0.55, 0.67, 0.75), 3, 1),\n", - " ('Spurs', (0.45, 0.60, 0.67)),\n", - " ('Cavs', (0.40, 0.55, 0.67))])" + " ('Rockets', 0.70, 4, 1),\n", + " ('Blazers', 0.67, 3, 1),\n", + " ('Spurs', 0.60),\n", + " ('Cavs', 0.55))" ] }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 23, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Spurs vs Memphis win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Spurs vs Thunder win this round: ( 16% 36% 49%) win through here: ( 16% 36% 49%)\n", - "Spurs vs Warriors win this round: ( 17% 29% 61%) win through here: ( 3% 10% 30%)\n", - "Spurs vs Cavs win this round: ( 29% 50% 87%) win through here: ( 1% 5% 26%)\n" + "Spurs vs Memphis 100%; through here: 100%\n", + "Spurs vs Thunder 36%; through here: 36%\n", + "Spurs vs Warriors 29%; through here: 10%\n", + "Spurs vs Cavs 50%; through here: 5%\n" ] } ], "source": [ "playoffs('Spurs',\n", - " [('Memphis', (0.75, 0.83, 0.85), 4, 0),\n", - " ('Thunder', (0.40, 0.60, 0.70), 2, 3),\n", - " ('Warriors', (0.33, 0.40, 0.55)),\n", - " ('Cavs', (0.40, 0.50, 0.70))])" + " ('Memphis', 0.83, 4, 0),\n", + " ('Thunder', 0.60, 2, 3),\n", + " ('Warriors', 0.40),\n", + " ('Cavs', 0.50))" ] }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 24, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Thunder vs Dallas win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Thunder vs Spurs win this round: ( 51% 64% 84%) win through here: ( 51% 64% 84%)\n", - "Thunder vs Warriors win this round: ( 17% 29% 61%) win through here: ( 9% 19% 51%)\n", - "Thunder vs Cavs win this round: ( 20% 39% 71%) win through here: ( 2% 7% 36%)\n" + "Thunder vs Dallas 100%; through here: 100%\n", + "Thunder vs Spurs 64%; through here: 64%\n", + "Thunder vs Warriors 29%; through here: 19%\n", + "Thunder vs Cavs 39%; through here: 7%\n" ] } ], "source": [ "playoffs('Thunder',\n", - " [('Dallas', (0.75, 0.83, 0.85), 4, 1),\n", - " ('Spurs', (0.30, 0.40, 0.60), 3, 2),\n", - " ('Warriors', (0.33, 0.40, 0.55)),\n", - " ('Cavs', (0.35, 0.45, 0.60))])" + " ('Dallas', 0.83, 4, 1),\n", + " ('Spurs', 0.40, 3, 2),\n", + " ('Warriors', 0.40),\n", + " ('Cavs', 0.45))" ] }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 25, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Cavs vs Pistons win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Cavs vs Hawks win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Cavs vs Raptors win this round: ( 50% 80% 93%) win through here: ( 50% 80% 93%)\n", - "Cavs vs GS/SA/OK win this round: ( 17% 39% 61%) win through here: ( 8% 31% 57%)\n" + "Cavs vs Pistons 100%; through here: 100%\n", + "Cavs vs Hawks 100%; through here: 100%\n", + "Cavs vs Raptors 80%; through here: 80%\n", + "Cavs vs GS/SA/OK 39%; through here: 31%\n" ] } ], "source": [ "playoffs('Cavs',\n", - " [('Pistons', (0.75, 0.83, 0.85), 4, 0),\n", - " ('Hawks', (0.45, 0.60, 0.75), 4, 0),\n", - " ('Raptors', (0.50, 0.65, 0.75)),\n", - " ('GS/SA/OK', (0.33, 0.45, 0.55))])" + " ('Pistons', 0.83, 4, 0),\n", + " ('Hawks', 0.60, 4, 0),\n", + " ('Raptors', 0.65),\n", + " ('GS/SA/OK', 0.45))" ] }, { @@ -515,104 +800,37 @@ "- **Thunder:** Increased to 7%.\n", "- **Cavs:** Increased to 31%.\n", "\n", - "# Time to Panic?\n", + "# Time to Panic Yet?\n", "\n", "## 17 May 2016\n", "\n", - "The Thunder finished off the Spurs and beat the Warriors in game 1. Are the Thunder, like the Cavs, peaking at just the right time, after an inconsistent regular season? Is it time for Warriors fans to panic?\n", + "The Thunder finished off the Spurs and beat the Warriors in game 1. Are the Thunder, like the Cavs, peaking at just the right time, after an inconsistant regular season? Is it time for Warriors fans to panic?\n", "\n", "Sure, the Warriors were down a game twice in last year's playoffs and came back to win both times. Sure, the Warriors are still 3-1 against the Thunder this year, and only lost two games all season to elite teams (Spurs, Thunder, Cavs, Clippers, Raptors). But the Thunder are playing at a top level. Here's my update, showing that the loss cost the Warriors 5%:" ] }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 26, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Warriors vs Rockets win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Warriors vs Blazers win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Warriors vs Thunder win this round: ( 26% 61% 74%) win through here: ( 26% 61% 74%)\n", - "Warriors vs Cavs win this round: ( 29% 61% 80%) win through here: ( 7% 37% 60%)\n" + "Warriors vs Rockets 100%; through here: 100%\n", + "Warriors vs Blazers 100%; through here: 100%\n", + "Warriors vs Thunder 61%; through here: 61%\n", + "Warriors vs Cavs 61%; through here: 37%\n" ] } ], "source": [ "playoffs('Warriors',\n", - " [('Rockets', (0.50, 0.70, 0.80), 4, 1),\n", - " ('Blazers', (0.55, 0.67, 0.75), 4, 1),\n", - " ('Thunder', (0.45, 0.63, 0.70), 0, 1),\n", - " ('Cavs', (0.40, 0.55, 0.65))])" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "# Not Yet?\n", - "\n", - "## 18 May 2016\n", - "\n", - "The Warriors won game two of the series, so now they're back up to 45%, with the Cavs at 35%. At this time, [fivethirtyeight](http://projects.fivethirtyeight.com/2016-nba-picks/) has the Warriors at 45%, Cavs at 28% and Thunder at 24%" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Warriors vs Rockets win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Warriors vs Blazers win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Warriors vs Thunder win this round: ( 41% 73% 84%) win through here: ( 41% 73% 84%)\n", - "Warriors vs Cavs win this round: ( 29% 61% 80%) win through here: ( 12% 45% 67%)\n" - ] - } - ], - "source": [ - "playoffs('Warriors',\n", - " [('Rockets', (0.50, 0.70, 0.80), 4, 1),\n", - " ('Blazers', (0.55, 0.67, 0.75), 4, 1),\n", - " ('Thunder', (0.45, 0.63, 0.70), 1, 1),\n", - " ('Cavs', (0.40, 0.55, 0.65))])" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Cavs vs Pistons win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Cavs vs Hawks win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Cavs vs Raptors win this round: ( 66% 88% 96%) win through here: ( 66% 88% 96%)\n", - "Cavs vs GSW win this round: ( 20% 39% 71%) win through here: ( 13% 35% 68%)\n" - ] - } - ], - "source": [ - "playoffs('Cavs',\n", - " [('Pistons', (0.75, 0.83, 0.85), 4, 0),\n", - " ('Hawks', (0.45, 0.60, 0.75), 4, 0),\n", - " ('Raptors', (0.50, 0.65, 0.75), 1, 0),\n", - " ('GSW', (0.35, 0.45, 0.60))])" + " ('Rockets', 0.70, 4, 1),\n", + " ('Blazers', 0.67, 4, 1),\n", + " ('Thunder', 0.63, 0, 1),\n", + " ('Cavs', 0.55))" ] }, { @@ -628,223 +846,153 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 27, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Warriors vs Rockets win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Warriors vs Blazers win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Warriors vs Thunder win this round: ( 2% 17% 27%) win through here: ( 2% 17% 27%)\n", - "Warriors vs Cavs win this round: ( 29% 61% 80%) win through here: ( 0% 10% 22%)\n" + "Warriors vs Rockets 100%; through here: 100%\n", + "Warriors vs Blazers 100%; through here: 100%\n", + "Warriors vs Thunder 17%; through here: 17%\n", + "Warriors vs Cavs 61%; through here: 10%\n" ] } ], "source": [ "playoffs('Warriors',\n", - " [('Rockets', (0.50, 0.70, 0.80), 4, 1),\n", - " ('Blazers', (0.55, 0.67, 0.75), 4, 1),\n", - " ('Thunder', (0.25, 0.55, 0.65), 1, 3),\n", - " ('Cavs', (0.40, 0.55, 0.65))])" + " ('Rockets', 0.70, 4, 1),\n", + " ('Blazers', 0.67, 4, 1),\n", + " ('Thunder', 0.55, 1, 3),\n", + " ('Cavs', 0.55))" ] }, { "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, + "execution_count": 28, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Cavs vs Pistons win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Cavs vs Hawks win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Cavs vs Raptors win this round: ( 50% 57% 78%) win through here: ( 50% 57% 78%)\n", - "Cavs vs Thunder win this round: ( 20% 39% 71%) win through here: ( 10% 23% 56%)\n" + "Cavs vs Pistons 100%; through here: 100%\n", + "Cavs vs Hawks 100%; through here: 100%\n", + "Cavs vs Raptors 57%; through here: 57%\n", + "Cavs vs Thunder 39%; through here: 23%\n" ] } ], "source": [ "playoffs('Cavs',\n", - " [('Pistons', (0.75, 0.83, 0.85), 4, 0),\n", - " ('Hawks', (0.45, 0.60, 0.75), 4, 0),\n", - " ('Raptors', (0.50, 0.55, 0.70), 2, 2),\n", - " ('Thunder', (0.35, 0.45, 0.60))])" + " ('Pistons', 0.83, 4, 0),\n", + " ('Hawks', 0.60, 4, 0),\n", + " ('Raptors', 0.55, 2, 2),\n", + " ('Thunder', 0.45))" ] }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, + "execution_count": 29, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Thunder vs Dallas win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Thunder vs Spurs win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Thunder vs Warriors win this round: ( 73% 83% 98%) win through here: ( 73% 83% 98%)\n", - "Thunder vs Cavs win this round: ( 29% 61% 80%) win through here: ( 21% 51% 79%)\n" + "Thunder vs Dallas 100%; through here: 100%\n", + "Thunder vs Spurs 100%; through here: 100%\n", + "Thunder vs Warriors 83%; through here: 83%\n", + "Thunder vs Cavs 61%; through here: 51%\n" ] } ], "source": [ "playoffs('Thunder',\n", - " [('Dallas', (0.75, 0.83, 0.85), 4, 1),\n", - " ('Spurs', (0.30, 0.40, 0.60), 4, 2),\n", - " ('Warriors', (0.35, 0.45, 0.75), 3, 1),\n", - " ('Cavs', (0.40, 0.55, 0.65))])" + " ('Dallas', 0.83, 4, 1),\n", + " ('Spurs', 0.40, 4, 2),\n", + " ('Warriors', 0.45, 3, 1),\n", + " ('Cavs', 0.55))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# But Not Done Yet\n", - "\n", - "## 26 May 2016\n", - "\n", - "The Warriors won game 5, bringing them up from a 10% to an 18% chance of winning it all:" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Warriors vs Rockets win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Warriors vs Blazers win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Warriors vs Thunder win this round: ( 12% 30% 42%) win through here: ( 12% 30% 42%)\n", - "Warriors vs Cavs win this round: ( 29% 61% 80%) win through here: ( 4% 18% 34%)\n" - ] - } - ], - "source": [ - "playoffs('Warriors',\n", - " [('Rockets', (0.50, 0.70, 0.80), 4, 1),\n", - " ('Blazers', (0.55, 0.67, 0.75), 4, 1),\n", - " ('Thunder', (0.35, 0.55, 0.65), 2, 3),\n", - " ('Cavs', (0.40, 0.55, 0.65))])" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Cavs vs Pistons win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Cavs vs Hawks win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Cavs vs Raptors win this round: ( 75% 80% 91%) win through here: ( 75% 80% 91%)\n", - "Cavs vs Thunder win this round: ( 20% 39% 71%) win through here: ( 15% 31% 65%)\n" - ] - } - ], - "source": [ - "playoffs('Cavs',\n", - " [('Pistons', (0.75, 0.83, 0.85), 4, 0),\n", - " ('Hawks', (0.45, 0.60, 0.75), 4, 0),\n", - " ('Raptors', (0.50, 0.55, 0.70), 3, 2),\n", - " ('Thunder', (0.35, 0.45, 0.60))])" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Thunder vs Dallas win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Thunder vs Spurs win this round: (100% 100% 100%) win through here: (100% 100% 100%)\n", - "Thunder vs Warriors win this round: ( 58% 70% 94%) win through here: ( 58% 70% 94%)\n", - "Thunder vs Cavs win this round: ( 29% 61% 80%) win through here: ( 17% 42% 75%)\n" - ] - } - ], - "source": [ - "playoffs('Thunder',\n", - " [('Dallas', (0.75, 0.83, 0.85), 4, 1),\n", - " ('Spurs', (0.30, 0.40, 0.60), 4, 2),\n", - " ('Warriors', (0.35, 0.45, 0.75), 3, 2),\n", - " ('Cavs', (0.40, 0.55, 0.65))])" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "# The Finals\n", + "# The 2016 Finals\n", "\n", "## 1 June 2016\n", "\n", - "The Warriors completed their comeback against the Thunder, putting them in a great position to win this year (and they are already established as [favorites for next year](http://www.foxsports.com/nba/story/golden-state-warriors-title-favorites-cleveland-cavaliers-odds-2016-17-053016)). Rather than update the odds after each game 0f the finals, I'll just repeat the table (with the note that I think the Warriors are somewhere in the 60% range for each game):\n" + "The Warriors completed their comeback against the Thunder, putting them in a great position to win this year (and they are already established as [favorites for next year](http://www.foxsports.com/nba/story/golden-state-warriors-title-favorites-cleveland-cavaliers-odds-2016-17-053016)). Rather than update the odds after each game of the finals, I'll just repeat the table (with the note that I think the Warriors are somewhere in the 60% range for each game and thus about 70% to win the finals):\n" ] }, { "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, + "execution_count": 30, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "W-L | Singe Game Win Percentage\n", - " | 20% 25% 30% 35% 40% 45% 50% 55% 60% 65% 70% 75% 80%\n", - "----+-----------------------------------------------------------------\n", - "0-3 | 0% 0% 1% 2% 3% 4% 6% 9% 13% 18% 24% 32% 41%\n", - "0-2 | 1% 2% 3% 5% 9% 13% 19% 26% 34% 43% 53% 63% 74%\n", - "0-1 | 2% 4% 7% 12% 18% 26% 34% 44% 54% 65% 74% 83% 90%\n", - "0-0 | 3% 7% 13% 20% 29% 39% 50% 61% 71% 80% 87% 93% 97%\n", - "----+-----------------------------------------------------------------\n", - "1-3 | 1% 2% 3% 4% 6% 9% 12% 17% 22% 27% 34% 42% 51%\n", - "1-2 | 3% 5% 8% 13% 18% 24% 31% 39% 48% 56% 65% 74% 82%\n", - "1-1 | 6% 10% 16% 24% 32% 41% 50% 59% 68% 76% 84% 90% 94%\n", - "1-0 | 10% 17% 26% 35% 46% 56% 66% 74% 82% 88% 93% 96% 98%\n", - "----+-----------------------------------------------------------------\n", - "2-3 | 4% 6% 9% 12% 16% 20% 25% 30% 36% 42% 49% 56% 64%\n", - "2-2 | 10% 16% 22% 28% 35% 43% 50% 57% 65% 72% 78% 84% 90%\n", - "2-1 | 18% 26% 35% 44% 52% 61% 69% 76% 82% 87% 92% 95% 97%\n", - "2-0 | 26% 37% 47% 57% 66% 74% 81% 87% 91% 95% 97% 98% 99%\n", - "----+-----------------------------------------------------------------\n", - "3-3 | 20% 25% 30% 35% 40% 45% 50% 55% 60% 65% 70% 75% 80%\n", - "3-2 | 36% 44% 51% 58% 64% 70% 75% 80% 84% 88% 91% 94% 96%\n", - "3-1 | 49% 58% 66% 73% 78% 83% 88% 91% 94% 96% 97% 98% 99%\n", - "3-0 | 59% 68% 76% 82% 87% 91% 94% 96% 97% 98% 99% 100% 100%\n" + "W-L | Game Win Percentage\n", + " | 15% 20% 25% 30% 35% 40% 45% 50% 55% 60% 65% 70% 75% 80% 85%\n", + "----+---------------------------------------------------------------------------\n", + "0-0 | 1% 3% 7% 13% 20% 29% 39% 50% 61% 71% 80% 87% 93% 97% 99%\n", + "0-1 | 1% 2% 4% 7% 12% 18% 26% 34% 44% 54% 65% 74% 83% 90% 95%\n", + "0-2 | 0% 1% 2% 3% 5% 9% 13% 19% 26% 34% 43% 53% 63% 74% 84%\n", + "0-3 | 0% 0% 0% 1% 2% 3% 4% 6% 9% 13% 18% 24% 32% 41% 52%\n", + "----+---------------------------------------------------------------------------\n", + "1-0 | 5% 10% 17% 26% 35% 46% 56% 66% 74% 82% 88% 93% 96% 98% 99%\n", + "1-1 | 3% 6% 10% 16% 24% 32% 41% 50% 59% 68% 76% 84% 90% 94% 97%\n", + "1-2 | 1% 3% 5% 8% 13% 18% 24% 31% 39% 48% 56% 65% 74% 82% 89%\n", + "1-3 | 0% 1% 2% 3% 4% 6% 9% 12% 17% 22% 27% 34% 42% 51% 61%\n", + "----+---------------------------------------------------------------------------\n", + "2-0 | 16% 26% 37% 47% 57% 66% 74% 81% 87% 91% 95% 97% 98% 99% 100%\n", + "2-1 | 11% 18% 26% 35% 44% 52% 61% 69% 76% 82% 87% 92% 95% 97% 99%\n", + "2-2 | 6% 10% 16% 22% 28% 35% 43% 50% 57% 65% 72% 78% 84% 90% 94%\n", + "2-3 | 2% 4% 6% 9% 12% 16% 20% 25% 30% 36% 42% 49% 56% 64% 72%\n", + "----+---------------------------------------------------------------------------\n", + "3-0 | 48% 59% 68% 76% 82% 87% 91% 94% 96% 97% 98% 99% 100% 100% 100%\n", + "3-1 | 39% 49% 58% 66% 73% 78% 83% 88% 91% 94% 96% 97% 98% 99% 100%\n", + "3-2 | 28% 36% 44% 51% 58% 64% 70% 75% 80% 84% 88% 91% 94% 96% 98%\n", + "3-3 | 15% 20% 25% 30% 35% 40% 45% 50% 55% 60% 65% 70% 75% 80% 85%\n" ] } ], "source": [ "series_table()" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 20 June 2016 \n", + "\n", + "Congratulations to LeBron and the Cavs for overcoming long odds to win a championship for Cleveland. My model says the Warriors were at 94% when they were up 3-1, and if you go by point differential, almost 97%:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.968211263722248" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "win_series(simulate(10.38 - 5.45), W=3, L=1)" + ] } ], "metadata": { @@ -863,9 +1011,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.1" + "version": "3.5.3" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 2 } diff --git a/ipynb/xkcd-Name-Dominoes.ipynb b/ipynb/xkcd-Name-Dominoes.ipynb new file mode 100644 index 0000000..e344460 --- /dev/null +++ b/ipynb/xkcd-Name-Dominoes.ipynb @@ -0,0 +1,462 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
Peter Norvig
21 March 2018
\n", + "\n", + "# `xkcd` Name Dominoes\n", + "\n", + "The March 21, 2018 `xkcd` comic (#1970) was [Name Dominoes](https://xkcd.com/1970/): domino tiles laid out as if in a game, but the tiles contain names of famous poeple rather than numbers. \n", + "In [dominoes](https://en.wikipedia.org/wiki/Dominoes) each tile has two halves, and a tile can be legally placed only if one half is adjacent to another tile half with the same number/name, and neither half is adjacent to a tile half with a different number/name. (Exception: the very first tile can be placed anywhere.) \n", + "\n", + "I will write a function to lay out tiles in a random, legal array. First, the key data structures:\n", + "\n", + "- **`Tile`**: a tile is a 2-element tuple of names, like `('TIM', 'COOK')`.\n", + "The tile `('FRANK LLOYD', 'WRIGHT')` has a space in the first name.\n", + "- **`Name`**: a name (first name or last name) is a string.\n", + "- **`Board(width, height)`**: a `Board` represents\n", + "a width × height array of squares, initially `empty`, but when we put a tile on the board,\n", + "the first name covers one location and the last name covers an adjacent location, e.g. `board[0, 0], board[0, 1] = ('TIM', 'COOK')`. Implemented as a subtype of `dict` that keeps track of `width` and `height`.\n", + "- **`Location`**: a location is an `(x, y)` pair of coordinates for a square on the board.\n", + "\n", + "Now I need a strategy to fill the board with tiles. I will randomly place tiles one at a time, and to make things easier I will *not* consider removing a tile from the board and backtracking. Some more concepts and functions:\n", + "\n", + "- **`frontier`**: I'll maintain a *frontier*, a set of locations that are adjacent to tiles on the board, and thus are candidates for placing new tiles.\n", + "- **`dominoes(tiles)`**: makes a board and places tiles on it, one at a time, until no more can be placed. Chooses a random tile for the first tile, then repeatedly calls `try_one` to legally place an additional tile, stopping when either there is no `frontier` left (meaning no place to legally place a tile) or no `tiles` left to place.\n", + "- **`try_one(tiles, board, frontier)`**: pop a location off the frontier, and try to find some tile that can legally put one of its halves there; when found, `put` the tile there, and remove it from `tiles`.\n", + "- **`legal(name, loc, board)`**: a name can be placed if the location is empty, and there are no conflicts with any neighboring location.\n", + "- **`neighbors(loc, board)`**: returns the (up to 4) neighbors of a location that are on the board.\n", + "- **`put_tile(board, loc0, loc1, tile, frontier)`**: places a tile on the board across `loc0` and `loc1`; update the `frontier` to say that the just-covered locations are no longer in the frontier, but the empty neighbors of the tile are.\n", + "- **`shuffle(items)`**: used to randomize lists; calls `random.shuffle` and returns the result.\n", + "\n", + "# The Code" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "\n", + "empty = None # An empty square\n", + "\n", + "class Board(dict):\n", + " \"A mapping from location to name.\"\n", + " def __init__(self, width, height): self.width, self.height = width, height\n", + " def __missing__(self, loc): return empty\n", + "\n", + "def dominoes(tiles, width=16, height=24):\n", + " \"Place as many tiles on board as possible (legally and randomly).\"\n", + " tiles = shuffle(list(tiles))\n", + " board = Board(width, height)\n", + " frontier = set()\n", + " m = min(width, height) // 2\n", + " put_tile(board, (m, m), (m, m + 1), tiles.pop(), frontier) # Place first tile\n", + " while tiles and frontier:\n", + " try_one(tiles, board, frontier)\n", + " return board\n", + " \n", + "def try_one(tiles, board, frontier):\n", + " \"Pop a frontier location, and try to place a tile on that location.\"\n", + " loc0 = frontier.pop()\n", + " for tile in shuffle(tiles):\n", + " for (name0, name1) in [tile, tile[::-1]]:\n", + " if legal(name0, loc0, board):\n", + " for loc1 in shuffle(neighbors(loc0, board)):\n", + " if legal(name1, loc1, board):\n", + " put_tile(board, loc0, loc1, (name0, name1), frontier)\n", + " tiles.remove(tile)\n", + " return tile\n", + " \n", + "def legal(name, loc, board):\n", + " \"Is it legal to place this name on this location on board?\"\n", + " return (board[loc] is empty and\n", + " all(board[nbr] is empty or board[nbr] == name\n", + " for nbr in neighbors(loc, board)))\n", + "\n", + "def neighbors(loc, board):\n", + " \"Neighbors of this location on the board.\"\n", + " x, y = loc\n", + " return [(x+dx, y+dy) for (dx, dy) in ((0, 1), (1, 0), (0, -1), (-1, 0))\n", + " if 0 <= x+dx < board.width and 0 <= y+dy < board.height]\n", + "\n", + "def put_tile(board, loc0, loc1, tile, frontier): \n", + " \"Place the tile across the two locations, and update frontier.\"\n", + " board[loc0], board[loc1] = tile\n", + " frontier -= {loc0, loc1}\n", + " frontier |= {loc for loc in neighbors(loc0, board) + neighbors(loc1, board)\n", + " if board[loc] is empty}\n", + " \n", + "def shuffle(items): random.shuffle(items); return items" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{(0, 0): 'RY',\n", + " (1, 0): 'KE',\n", + " (1, 1): 'KE',\n", + " (2, 1): 'JO',\n", + " (2, 2): 'JO',\n", + " (3, 2): 'GR',\n", + " (3, 3): 'GR',\n", + " (3, 4): 'KE',\n", + " (4, 4): 'KE',\n", + " (4, 5): 'JA'}" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tiles8 = [('BO', 'JA'), ('JA', 'PO'), ('JA', 'RY'), ('RY', 'KE'), \n", + " ('GR', 'KE'), ('GR', 'JO'), ('JA', 'KE'), ('KE', 'JO')]\n", + "\n", + "dominoes(tiles8, 6, 6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pretty Output\n", + "\n", + "Technically, this is a legal solution, but there are two problems with it: One, it is not visual. Two, it doesn't say where each tile is: when three names come together, which of the outside names goes with the middle name? To fix those two problems I will:\n", + "\n", + "- Define `plot_board(board)` to use `matplotlib` to plot the board, the names, and the tiles.\n", + "- Modify the `Board` class and the `put` function so that the board maintains a list of `boxes` that surround each two-location rectangle that a tile occupies: `[loc0, loc1]`. The constant ϵ is the distance between two adjacent tiles; we want them to not-quite touch (as in the xkcd comic)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "\n", + "ϵ = 0.06 # A small amount; the space between adjacent lines\n", + "\n", + "class Board(dict):\n", + " \"A mapping from location to name.\"\n", + " def __init__(self, width=16, height=24): \n", + " self.width, self.height, self.boxes = width, height, []\n", + " def __missing__(self, loc): return empty\n", + " \n", + "def plot_board(board):\n", + " \"Plot the box and name for every tile, plus a big box around the board.\"\n", + " plt.figure(figsize=(board.width, board.height))\n", + " plt.subplots_adjust(left=ϵ, right=1-ϵ, top=1-ϵ, bottom=ϵ)\n", + " plt.axis('off') \n", + " plt.axis('equal')\n", + " for box in board.boxes:\n", + " plot_box(box)\n", + " plot_box([(-2*ϵ, -2*ϵ), (board.width - 1 + 2*ϵ, board.height - 1 + 2*ϵ)])\n", + " for (x, y) in board:\n", + " plt.text(x + 0.5, y + 0.5, board[x, y], \n", + " va='center', ha='center', fontsize=8)\n", + "\n", + "def plot_box(box):\n", + " \"Plot a box, which is a [loc0, loc1] pair.\"\n", + " Xs, Ys = {loc[0] for loc in box}, {loc[1] for loc in box}\n", + " x0, x1 = min(Xs), max(Xs) + 1 - ϵ\n", + " y0, y1 = min(Ys), max(Ys) + 1 - ϵ\n", + " plt.plot([x0, x1, x1, x0, x0], \n", + " [y0, y0, y1, y1, y0], 'k-')\n", + "\n", + "def put_tile(board, loc0, loc1, tile, frontier): \n", + " \"Place the tile across the two locations, and update frontier and boxes.\"\n", + " board[loc0], board[loc1] = tile\n", + " frontier -= {loc0, loc1}\n", + " frontier |= {loc for loc in neighbors(loc0, board) + neighbors(loc1, board)\n", + " if board[loc] is empty}\n", + " board.boxes.append([loc0, loc1]) " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAEFdJREFUeJzt3X/I7nV9x/HXW06bISjnZLa0tQ0nk6g/GkjtCDqUapkQ5bJlev4Yts1ibP9sI4SonX8CSdpgk5BFM0a0qS0o4eT0aDtr0f4xGTKChWNrMhce2xDW+vHeH/d17O4sPfdt59zv+3vdjwfceJ/rluPrvu7L63l/P/cNV3V3AGCnnTU9AIC9SYAAGCFAAIwQIABGCBAAIwQIgBECBMAIAQJghAABMEKAABghQACMECAARggQACMECIARAgTACAECYIQAATBCgAAYIUAAjBAgAEYIEAAjBAiAEQIEwAgBAmCEAAEwQoAAGCFAAIwQIABGCBAAIwQIgBECBMAIAQJghAABMEKAABghQACMECAARggQACMECIARAgTACAECYIQAATBCgAAYIUAAjBAgAEYIEAAjBAiAEQIEwAgBAmCEAAEwQoAAGCFAAIwQIABGCBAAIwQIgBECBMCIfdMDdpuqeirJ/ukdACvHu/vA9Igzobp7esOuUlXd3TW9AyBZ7+ckR3AAjBAgAEYIEAAjBAiAEQIEwAgBAmCEAAEwQoAAGCFAAIwQIABGCBAAIwQIgBECBMAIAQJghAABMEKAABghQACMECAARggQACMECIARAgTACAECYIQAATBCgAAYIUAAjBAgAEYIEAAjBAiAEQIEwAgBAmCEAAEwQoAAGCFAAIwQIABGCBAAIwQIgBECBMAIAQJghAABMEKAABghQACMECAARggQACMECIARAgTACAECYIQAATBCgAAYIUAAjBAgAEYIEAAjBAiAEfumByxBVT2VZP/0jj3meHcfmB7x41roY+fZ+36h+5dsLR73W1XdPb1hV6mq7u461W2cWetyny/x89i8eYn7l2yvPf84ggNghAABMEKAABghQACMECAARggQACMECIARAgTACAECYIQAATBCgAAYIUAAjBAgAEYIEAAjBAiAEQI0pKqurKrDq/fvrKo7pjdtxWr341X1YFX9bVX9QlW9uKo+XlVHq+qBqvrF6Z3r6sTjpqp+rqruW30d/qqqXjK9bSuWvP+k/2evq6q7q+rJ1efwYFXdPL1xabwi6qyuqrOSvDzL+mbgru7+QFW9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yW1J0t3fS/JHSd4xOYqdJ0DsVZXkbUnuXr29fXbOtix1+4mXJr8yyf8meWLTx/4tyU/t+CJG7ZseAEMqG0c/l6zev2B2zrYsdftNVXUwyWNJ/iLJhUn+efWxV+SHg8Qe4AqIveq1Se7t7mu6+81JjlTVq6dHbdFSt9/V3Vd3928nuSfJ7yVJVe1L8rtJ7p0cx84TIPaiSvJIkoc23fZwNo61drslb39Wd9+X5F+q6otJHkxyT3c/NjyLHVbdPb1hV6mq7u469b/JTjndX5OqujHJOd39sdP1d5709z+7d2nbl24d//9dx8/pBFdA7ClVdX2S92TjCGhRlrwdfhRXQCdZ5+82lmppX5MzeQXE81vH+3sdP6cTXAEBMEKAABghQACMECAARggQACMECIARAgTACAECYIQAATBCgAAYIUAAjBAgAEYIEAAjBAiAEQIEwAgBAmCEAAEwYt/0ANiKqlrSS/ce3/yHhW1fuuOn/lfYLQSIXW/JL0e85O1wpjmCA2CEAAEwQoAAGCFAAIzwSwg/gt9aAnaRtf3Nvur2XAvAznMEB8AIAQJghAABMEKAABghQACMECAARggQACMECIARAgTACAECYIQAATBCgAAYIUAAjBAgAEYIEAAjBAiAEQIEwAgBAmCEAAEwQoAAGCFAAIwQIABGCBAAIwQIgBECBMAIAQJghAABMEKAABghQACMECAARggQACMECIARAgTACAECYIQAATBCgAAYIUAAjBAgAEYIEAAjBAiAEQIEwAgBAmCEAAEwQoAAGCFAAIwQIABGCBAAIwQIgBECBMAIAQJghAABMEKAABghQACMECAARggQACMECIARAgTACAECYIQAATBCgAAYIUAAjPg/Iw0BSE0gbhAAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_board(dominoes(tiles8, 6, 6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# All the Names\n", + "\n", + "Now let's try all the names from the comic, courtesy of \n", + " [explainxkcd](http://www.explainxkcd.com/wiki/index.php/1970:_Name_Dominoes), with a few typos corrected:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def name_tiles(text):\n", + " \"For each line of text, create a tile of ('First Name(s)', 'Lastname').\"\n", + " return [name.strip().rpartition(' ')[0::2]\n", + " for name in text.upper().split(',')]\n", + " \n", + "xkcdtiles = name_tiles(\"\"\"Christian Campbell, Neve Campbell, Joe McCarthy, Eugene McCarthy, \n", + " Gene Vincent, Gene Kelly, Kate Hudson, Rock Hudson, Gordon Brown, James Brown, Jon Brown, \n", + " John Howard, Columbo, Chris Columbus, Christopher Columbus, Naomi Campbell, Joseph Campbell, \n", + " Joseph Smith, Frank Vincent, John Kelly, Katherine Johnson, The Rock, Chris Rock, Chris Isaac, \n", + " James Newton Howard, John Wayne, Howard Stern, Howard Hunt, Chris Hughes, Naomi Watts, \n", + " Naomi Klein, Kevin Kline, Francis Bacon, Francis Drake, Lyndon Johnson, Oscar The Grouch, \n", + " Oscar Isaac, Isaac Hayes, Isaac Newton, Wayne Newton, Wayne Knight, Helen Hunt, Helen Hughes, \n", + " James Watt, James Watt, Kevin Costner, Kevin Bacon, Kevin Love, Lisa Frank, Frank Drake, Drake, \n", + " Oscar de la Renta, Oscar de la Hoya, Sean Hayes, Wallace Shawn, Wayne Howard, Wayne Brady, \n", + " James Brady, Tom Brady, Helen Thomas, Tom Hanks, Hank Aaron, Aaron Carter, Stephen James, \n", + " Will Smith, Kevin Smith, Kevin James, Garfield, James Garfield, Warren Buffett, Jimmy Buffett, \n", + " Warren Beatty, Elizabeth Warren, Earl Warren, Elizabeth Kolbert, Stephen Colbert, \n", + " Charles Wallace, James Monroe, Marilyn Monroe, Hank Williams, William C. Williams, Steve Harvey,\n", + " Domino Harvey, Harvey Milk, James Saint James, Etta James, Jim Jones, James Earl Jones, \n", + " Charlie Parker, Ray Parker, Ray Charles, Charles Manson, Marilyn Manson, Robin Williams, \n", + " Billy D. Williams, Will Wright, Fats Domino, Bill Clinton, Jimmy John, Tom Jones, Tommy John, \n", + " Quincy Jones, James Earl Ray, Man Ray, Rachel Ray, Ray Allen, Tim Allen, Tim Cook, Tim Howard, \n", + " Robin Wright, Wilbur Wright, Fatty Arbuckle, Fat Joe, George Clinton, John Kerry, \n", + " Kerry Washington, John Irving, John Quincy Adams, John Adams, Amy Adams, Aimee Mann, Super Man, \n", + " Bat Man, Ayn Rand, Lily Allen, Paul Allen, Ron Howard, Howard Hughes, Joe Kennedy, George Bush, \n", + " George Washington, Washington Irving, Martha Washington, Ma Rainey, Jack Ma, Super Grover, \n", + " Jack Black, Rand Paul, Paul Ryan, Paul Simon, Ron Paul, John Hughes, Langston Hughes, \n", + " John F. Kennedy, Little Richard, Rich Little, Martha Stewart, Yo Yo Ma, Ma Bell, \n", + " Grover Cleveland Alexander, Grover Cleveland, Jack White, Jack Ryan, Debby Ryan, Carly Simon, \n", + " Carly Hughes, Charles Evans Hughes, John Williams, Little John, Stuart Little, Potter Stewart, \n", + " Kristen Stewart, Kristen Bell, Kristen Hooks, Alexander Graham Bell, Franklin Graham, \n", + " Lloyd Alexander, Meg White, Meg Ryan, Debbie Reynolds, John Reynolds, Carly Fiorina, \n", + " Grace Lee Boggs, Wade Boggs, William Safire, Prince William, Little Prince, Harry Potter, \n", + " James Potter, James Hook, James Dean, Aretha Franklin, Frank Lloyd Wright, Barry White, \n", + " Walter White, Walt Whitman, John Kelly, Grace Lee, Nancy Grace, Garnet, Prince, Prince Fielder, \n", + " Prince Harry, Harry Styles, John Dean, Benjamin Franklin, Harold Lloyd, Harold Ford, \n", + " Betty White, Meg Whitman, Christine Todd Whitman, Megyn Kelly, Grace Kelly, Grace Jones, \n", + " Jack Nicholson, Jack Ruby, Jack Russell, Harry Fielder, Harry Truman, Harry Jon Benjamin, \n", + " John Edward, Benjamin Harrison, Harrison Ford, Henry Ford, Betty Ford, Betty Friedan, \n", + " Chris Christie, Chris Pratt, Maggie Grace, Grace Hopper, Russell Crowe, Russ Smith, John Smith, \n", + " Justin Long, John Bel Edwards, John Candy, John Henry, Henry James, Bill James, Chris Cooper, \n", + " Chris Hemsworth, Chris Evans, Topher Grace, Van Morrison, Sheryl Crow, Sheryl Sandberg, \n", + " Cameron Crowe, Long John Silver, Olivia Newton John, Huey Long, John Edwards, Candy Crowley, \n", + " Aleister Crowley, James Fenimore Cooper, James Cook, Robert Frost, Bob Evans, Evan Taylor Jones,\n", + " James Cameron, Cam Newton, Cameron Diaz, Huey Newton, Huey Lewis, John Lewis, Jenny Lewis, \n", + " Ryan Lewis, Burt Reynolds, Alistair Cooke, Alistair Cookie, Cokie Roberts, John Roberts, \n", + " Robert Johnson, Robert E. Lee, Tommy Lee, Tommy Lee Jones, Etta James, John Oliver, \n", + " Ryan Reynolds, Alastair Reynolds, George Wallace\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "270" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(xkcdtiles)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[('JAMES EARL', 'RAY'),\n", + " ('BURT', 'REYNOLDS'),\n", + " ('CHRISTOPHER', 'COLUMBUS'),\n", + " ('KRISTEN', 'STEWART'),\n", + " ('FAT', 'JOE'),\n", + " ('HAROLD', 'LLOYD'),\n", + " ('ISAAC', 'HAYES'),\n", + " ('PAUL', 'RYAN'),\n", + " ('GENE', 'KELLY'),\n", + " ('MEGYN', 'KELLY')]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random.sample(xkcdtiles, 10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Approximate and Partial Matches\n", + "\n", + "Two tile halves match if they are an exact match, like \"ADAMS\" and \"ADAMS\", or if they are an **approximate match**, like \"AMY\" and \"AIMEE\". To accomodate this, you can manually define allowable approximate matches by making the global variable `synsets` (synonym sets) be a mapping from a name to the set of approximate matches it should match, which can be done like this:\n", + "\n", + " synsets = synonyms(\"AMY=AIMEE, COOK=COOKE=COOKIE=COKIE, ...\")\n", + "\n", + "Another issue is a **partial match**: in the comic, some tiles, like \"FRANK LLOYD WRIGHT\" are 3 squares wide, and some, like \"PRINCE\" are only one square wide. For simplicity, I chose to have all my tiles be 2 squares wide, but I still want `'LLOYD'` to match the first name of `('FRANK LLOYD', 'WRIGHT')`. To accomplish this, the second argument to `synonyms` is a list of tiles; the function will go through these and add synset entries for parts of first names,\n", + "so that both `'FRANK'` and `'LLOYD'` will match `'FRANK LLOYD'`. As for \"PRINCE\", he gets represented as the tile `('', 'PRINCE')`. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "import collections\n", + "\n", + "def synonyms(text='', tiles=()): \n", + " \"synonyms('AMY=AIMEE') => dict(AMY={'AMY', 'AIMEE'}, AIMEE={'AMY', 'AIMEE'})\"\n", + " synsets = collections.defaultdict(set)\n", + " # Process `text`\n", + " for text1 in text.upper().split(','):\n", + " synset = set(text1.strip().split('='))\n", + " for s in synset:\n", + " synsets[s] |= synset\n", + " # Process `tiles`\n", + " for (first, last) in tiles:\n", + " for part in first.split():\n", + " synsets[part].add(first)\n", + " synsets[first].add(part)\n", + " return synsets\n", + "\n", + "synsets = synonyms(\"\"\"AMY=AIMEE, COOK=COOKE=COOKIE=COKIE, ALASTAIR=ALISTAIR, \n", + " COLUMBO=COLUMBUS, SAFIRE=SAPPHIRE=GARNET, GARNET=RUBY, CHARLIE=CHARLES, SEAN=SHAWN,\n", + " JIMMY=JAMES, MAN=MANN, JACK=JOHN, TOM=TOMMY, WILL=WILLIAM=WILLIAMS, ROBERT=ROBERTS=BOB, \n", + " CAM=CAMERON, OLIVER=OLIVIA, EDWARD=EDWARDS, RICH=RICHARD, CHRIS=CHRISTOPHER=TOPHER, \n", + " FAT=FATS=FATTY, WALT=WALTER, HANK=HANKS, CROW=CROWE, COLBERT=KOLBERT\"\"\", xkcdtiles)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "To make this work, I update `legal` to consult the `synsets` global variable for an approximate or partial matches, and while I'm changing `legal`, I'll also disallow a match between the empty first name of \"PRINCE\" with the empty first name of \"DRAKE\"." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def legal(name, loc, board):\n", + " \"Is it legal to place this value on this location on board?\"\n", + " return (board[loc] is empty and \n", + " all(board[nbr] is empty \n", + " or board[nbr] == name != '' \n", + " or board[nbr] in synsets[name]\n", + " for nbr in neighbors(loc, board)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Final Result (with Random Restart)\n", + "\n", + "The program sometimes gets stuck after placing relatively few tiles. I could modify the program to *back up* in this case, but it will be easier to just *give up* and restart with an empty board. I can restart multiple times, and accept the best board (the one on which the most tiles were placed):" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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ADaxAAAAAGxiAQAAANjEAgAAALCJBQAAAGATCwAAAMAmFgAAAIBNLAAAAACbWAAAAAA2sQAAAABsYgEAAADYxAIAAACwiQUAAABgEwsAAADAJhYAAACATSwAAAAAm1gAAAAANrEAAAAAbGIBAAAA2MQCAAAAsIkFAAAAYBMLAAAAwCYWAAAAgE0sAAAAAJtYAAAAADaxAAAAAGxiAQAAANjEAgAAALCJBQAAAGATCwAAAMAmFgAAAIBNLAAAAACbWAAAAAA2sQAAAABsYgEAAADYxAIAAACwiQUAAABgEwsAAADAJhYAAACATSwAAAAAm1gAAAAANrEAAAAAbGIBAAAA2MQCAAAAsIkFAAAAYBMLAAAAwCYWAAAAgE0sAAAAAJtYAAAAADaxAAAAAGxiAQAAANjEAgAAALCJBQAAAGATCwAAAMAmFgAAAIBNLAAAAACbWAAAAAA2sQAAAABsYgEAAADYxAIAAACwiQUAAABgEwsAAADAJhYAAACATSwAAAAAm1gAAAAANrEAAAAAbGIBAAAA2MQCAAAAsIkFAAAAYBMLAAAAwCYWAAAAgE0sAAAAAJtYAAAAADaxAAAAAGxiAQAAANjEAgAAALCJBQAAAGATCwAAAMAmFgAAAIBNLAAAAACbWAAAAAA2sQAAAABsYgEAAADYxAIAAACwiQUAAABgEwsAAADAJhYAAACATSwAAAAAm1gAAAAANrEAAAAAbGIBAAAA2MQCAAAAsIkFAAAAYBMLAAAAwCYWAAAAgE0sAAAAAJtYAAAAADaxAAAAAGxiAQAAANjEAgAAALCJBQAAAGATCwAAAMAmFgAAAIBNLAAAAACbWAAAAAA2sQAAAABsYgEAAADYxAIAAACwiQUAAABgEwsAAADAJhYAAACATSwAAAAAm1gAAAAANrEAAAAAbGIBAAAA2MQCAAAAsIkFAAAAYBMLAAAAwCYWAAAAgE0sAAAAAJtYAAAAADaxAAAAAGxiAQAAANjEAgAAALCJBQAAAGATCwAAAMAmFgAAAIBNLAAAAACbWAAAAAA2sQAAAABsYgEAAADYxAIAAACwiQUAAABgEwsAAADAJhYAAACATSwAAAAAm1gAAAAANrEAAAAAbGIBAAAA2MQCAAAAsIkFAAAAYBMLAAAAwCYWAAAAgE0sAAAAAJtYAAAAADaxAAAAAGxiAQAAANjEAgAAALCJBQAAAGATCwAAAMAmFgAAAIBNLAAAAACbWAAAAAA2sQAAAABsYgEAAADYxAIAAACwiQUAAABgEwsAAADAJhYAAACATSwAAAAAm1gAAAAANrEAAAAAbGIBAAAA2MQCAAAAsIkFAAAAYBMLAAAAwCYWAAAAgE0sAAAAAJtYAAAAADaxAAAAAGxiAQAAANjEAgAAALCJBQAAAGATCwAAAMAmFgAAAIBNLAAAAACbWAAAAAA2sQAAAABsYgEAAADYxAIAAACwiQUAAABgEwsAAADAJhYAAACATSwAAAAAm1gAAAAANrEAAAAAbGIBAAAA2MQCAAAAsIkFAAAAYBMLAAAAwCYWAAAAgE0sAAAAAJtYAAAAADaxAAAAAGxiAQAAANjEAgAAALCJBQAAAGATCwAAAMAmFgAAAIBNLAAAAACbWAAAAAA2sQAAAABsYgEAAADYxAIAAACwiQUAAABgEwsAAADAJhYAAACATSwAAAAAm1gAAAAANrEAAAAAbGIBAAAA2MQCAAAAsIkFAAAAYBMLAAAAwCYWAAAAgE0sAAAAAJtYAAAAADaxAAAAAGxiAQAAANjEAgAAALCJBQAAAGATCwAAAMAmFgAAAIBNLAAAAACbWAAAAAA2sQAAAABsYgEAAADYxAIAAACwiQUAAABgEwsAAADAJhYAAACATSwAAAAAm1gAAAAANrEAAAAAbGIBAAAA2MQCAAAAsIkFAAAAYBMLAAAAwCYWAAAAgE0sAAAAAJtYAAAAADaxAAAAAGxiAQAAANjEAgAAALCJBQAAAGATCwAAAMAmFgAAAIBNLAAAAACbWAAAAAA2sQAAAABsYgEAAADYxAIAAACwiQUAAABgEwsAAADAJhYAAACALVla6AGKNKkCAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def best(boards): return max(boards, key=lambda board: len(board.boxes))\n", + "\n", + "plot_board(best(dominoes(xkcdtiles) for _ in range(100)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Note:* I used a 16×24 square board while the xkcd comic used 27×35, but if I tried to fit 27 squares across then each tile would be smaller, and many names would overflow the sides of the dominoes too much. Here is the original xkcd comic:\n", + "\n", + "[![](https://imgs.xkcd.com/comics/name_dominoes_2x.png)](https://xkcd.com/1970/)\n", + "\n", + "# What's Next?\n", + "\n", + "I'm happy with the results, but here are some ideas for improvements, if you want something to work on:\n", + "- Allow tiles that are 1 or 3 squares wide, like `('PRINCE',)` or `('FRANK', 'LLOYD', 'WRIGHT')`.\n", + "- Print names vertically in tiles that are placed vertically, and upside down for tiles that are placed horizontally, but with the first name on the right.\n", + "- Print shorter names with a bigger font and longer names with a smaller font.\n", + "- Download a bunch of names from Wikipedia and fill a 200 × 300 board.\n", + "- If you like xkcd try [regex golf](https://github.com/norvig/pytudes/blob/master/ipynb/xkcd1313.ipynb), and [part 2](https://github.com/norvig/pytudes/blob/master/ipynb/xkcd1313-part2.ipynb).\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/ipynb/xkcd1313-part2.ipynb b/ipynb/xkcd1313-part2.ipynb index 63302a6..6401ae5 100644 --- a/ipynb/xkcd1313-part2.ipynb +++ b/ipynb/xkcd1313-part2.ipynb @@ -1592,7 +1592,7 @@ } }, "source": [ - "An *exhaustive search* considers *every* possible choice of parts, and selects the best solution. On each iteration exhaustive search picks a part (just like greedy search), but then it considers *both* using the part and not using the part. You can see that exhaustive search is almost identical to greedy search, except that it has *two* recursive calls (on lines 7 and 8) instead of *one* (on line 7). (*If you are viewing this in a iPython notebook, not just a web page, you can toggle line numbers by pressing 'ctrl-M L' within a cell.*) How do we choose between the results of the two calls? We need a cost function that we are trying to minimize. (For regex golf the cost of a solution is the length of the string.)" + "An *exhaustive search* considers *every* possible choice of parts, and selects the best solution. On each iteration exhaustive search picks a part (just like greedy search), but then it considers *both* using the part and not using the part. You can see that exhaustive search is almost identical to greedy search, except that it has *two* recursive calls (on lines 7 and 8) instead of *one* (on line 7). (*If you are viewing this in a IPython notebook, not just a web page, you can toggle line numbers by pressing 'ctrl-M L' within a cell.*) How do we choose between the results of the two calls? We need a cost function that we are trying to minimize. (For regex golf the cost of a solution is the length of the string.)" ] }, { diff --git a/ipynb/xkxd-part3.ipynb b/ipynb/xkxd-part3.ipynb deleted file mode 100644 index e2388b4..0000000 --- a/ipynb/xkxd-part3.ipynb +++ /dev/null @@ -1,428 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def partition(covers):\n", - " # covers: {w: {r,...}}\n", - " # invcovers: {r: {w,...}}\n", - " pass\n", - "\n", - "def connected(w, covers, invcovers, result):\n", - " if w not in result:\n", - " result.add(w)\n", - " for r in covers[w]:\n", - " for w2 in invcovers[r]:\n", - " connected(w2, covers, invcovers, result)\n", - " return result\n", - "\n", - "for (W, L, legend) in ALL:\n", - " covers = eliminate_dominated(regex_covers(W, L))\n", - " invcovers = invert_multimap(covers)\n", - " start = list(covers)[2]\n", - " P = connected(start, covers, invcovers, set())\n", - " print legend, len(P), len(covers), len(covers)-len(P)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finding Shorter Regexes: Trying Multiple Times\n", - "----\n", - " \n", - "Why run just two versions of `findregex`? Why not run 1000 variations, and then pick the best solution? Of course, I don't want to write 1000 different functions by hand; I want an automated way of varying each run. I can think of three easy things to vary:\n", - " \n", - "* The number '4' in the `score` function. That is, vary the tradeoff between number of winners matched and number of characters.\n", - "* The tie-breaker. In case of a tie, Python's `max` function always picks the first one. Let's make it choose a different 'best' regex from among all those that tie.\n", - "* The greediness. Don't be so greedy (picking the best) every time. Occasionally pick a not-quite-best component, and see if that works out better.\n", - " \n", - "The first of these is easy; we just use the `random.choice` function to choose an integer, `K`, to serve as the tradeoff factor. \n", - "\n", - "The second is easy too. We could write an alternative to the `max` function, say `max_random_tiebreaker`. That would work, but an easier approach is to build the tiebreaker into the `score` function. In addition to awarding points for matching winners and the number of characters, we will have add in a tiebreaker: a random number between 0 and 1. Since all the scores are otherwise integers, this will not change the order of the scores, but it will break ties.\n", - "\n", - "The third we can accomplish by allowing the random factor to be larger than 1 (allowing us to pick a component that is not the shortest) or even larger than `K` (allowing us to pick a component that does not cover the most winners). \n", - " \n", - "I will factor out the function `greedy_search` to do a single computation oof a covering regex, while keeping the name `findregex` for the top level function that now calls `greedy_search` 1000 times and chooses the best (shortest length) result." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "def findregex(winners, losers, tries=1000):\n", - " \"Find a regex that matches all winners but no losers (sets of strings).\"\n", - " # Repeatedly call 'findregex1' the given number of tries; pick the shortest result\n", - " covers = regex_covers(winners, losers)\n", - " results = [greedy_search(winners, covers) for _ in range(tries)]\n", - " return min(results, key=len)\n", - "\n", - "def greedy_search(winners, covers):\n", - " # On each iteration, add the 'best' component in covers to 'result',\n", - " # remove winners covered by best, and remove from 'pool' any components\n", - " # that no longer match any remaining winners.\n", - " winners = set(winners) # Copy input so as not to modify it.\n", - " pool = set(covers)\n", - " result = []\n", - " \n", - " def matches(regex, strings): return {w for w in covers[regex] if w in strings}\n", - " \n", - " K = random.choice((2, 3, 4, 4, 5, 6))\n", - " T = random.choice((1., 1.5, 2., K+1., K+2.))\n", - " def score(c): \n", - " return K * len(matches(c, winners)) - len(c) + random.uniform(0., T)\n", - " \n", - " while winners:\n", - " best = max(pool, key=score)\n", - " result.append(best)\n", - " winners -= covers[best]\n", - " pool -= {c for c in pool if covers[c].isdisjoint(winners)}\n", - " return OR(result)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def factorial1(n):\n", - " if (n <= 1):\n", - " return 1\n", - " else:\n", - " return n * factorial1(n-1)\n", - "\n", - "def factorial2(n, partial_solution=1):\n", - " if (n <= 1):\n", - " return partial_solution\n", - " else:\n", - " return factorial2(n-1, n * partial_solution)\n", - " \n", - "assert factorial1(6) == factorial2(6) == 720" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def findregex(winners, losers, calls=100000):\n", - " \"Find the shortest disjunction of regex components that covers winners but not losers.\"\n", - " covers = regex_covers(winners, losers)\n", - " best = '^(' + OR(winners) + ')$'\n", - " state = Struct(best=best, calls=calls)\n", - " return bb_search('', covers, state).best\n", - "\n", - "def bb_search(regex, covers, state):\n", - " \"\"\"Recursively build a shortest regex from the components in covers.\"\"\"\n", - " if state.calls > 0:\n", - " state.calls -= 1\n", - " regex, covers = simplify_covers(regex, covers)\n", - " if not covers:\n", - " state.best = min(regex, state.best, key=len)\n", - " elif len(OR2(regex, min(covers, key=len))) < len(state.best):\n", - " # Try with and without the greedy-best component\n", - " def score(c): return 4 * len(covers[c]) - len(c)\n", - " best = max(covers, key=score)\n", - " covered = covers[best]\n", - " covers.pop(best)\n", - " bb_search(OR2(regex, best), {c:covers[c]-covered for c in covers}, state)\n", - " bb_search(regex, covers, state)\n", - " return state\n", - "\n", - "class Struct(object):\n", - " \"A mutable structure with specified fields and values.\"\n", - " def __init__(self, **kwds): vars(self).update(kwds)\n", - " def __repr__(self): return '<%s>' % vars(self)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def findregex(winners, losers, calls=100000):\n", - " \"Find the shortest disjunction of regex components that covers winners but not losers.\"\n", - " covers = regex_covers(winners, losers)\n", - " solution = '^(' + OR(winners) + ')$'\n", - " solution, calls = bb_search('', covers, solution, calls)\n", - " return solution\n", - "\n", - "def bb_search(regex, covers, solution, calls):\n", - " \"\"\"Recursively build a shortest regex from the components in covers.\"\"\"\n", - " if calls > 0:\n", - " calls -= 1\n", - " regex, covers = simplify_covers(regex, covers)\n", - " if not covers: # Solution is complete\n", - " solution = min(regex, solution, key=len)\n", - " elif len(OR2(regex, min(covers, key=len))) < len(solution):\n", - " # Try with and without the greedy-best component\n", - " def score(c): return 4 * len(covers[c]) - len(c)\n", - " r = max(covers, key=score) # Best component\n", - " covered = covers[r] # Set of winners covered by r\n", - " covers.pop(r)\n", - " solution, calls = bb_search(OR2(regex, r), \n", - " {c:covers[c]-covered for c in covers}, \n", - " solution, calls)\n", - " solution, calls = bb_search(regex, covers, solution, calls)\n", - " return solution, calls" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def findregex(winners, losers, calls=100000):\n", - " \"Find the shortest disjunction of regex components that covers winners but not losers.\"\n", - " global SOLUTION, CALLS\n", - " SOLUTION = '^(' + OR(winners) + ')$'\n", - " CALLS = calls\n", - " return bb_search(None, regex_covers(winners, losers))\n", - "\n", - "def bb_search(regex, covers):\n", - " \"\"\"Recursively build a shortest regex from the components in covers.\"\"\"\n", - " global SOLUTION, CALLS\n", - " CALLS -= 1\n", - " regex, covers = simplify_covers(regex, covers)\n", - " if not covers: # Solution is complete\n", - " SOLUTION = min(regex, SOLUTION, key=len)\n", - " elif CALLS >= 0 and len(OR(regex, min(covers, key=len))) < len(SOLUTION):\n", - " # Try with and without the greedy-best component\n", - " def score(c): return 4 * len(covers[c]) - len(c)\n", - " r = max(covers, key=score) # Best component\n", - " covered = covers[r] # Set of winners covered by r\n", - " covers.pop(r)\n", - " bb_search(OR(regex, r), {c:covers[c]-covered for c in covers})\n", - " bb_search(regex, covers)\n", - " return SOLUTION\n", - " \n", - "def OR(*regexes):\n", - " \"OR together regexes. Ignore 'None' components.\"\n", - " return '|'.join(r for r in regexes if r is not None)\n", - "\n", - "\n", - "def invert_multimap(multimap):\n", - " result = collections.defaultdict(list)\n", - " for key in multimap:\n", - " for val in multimap[key]:\n", - " result[val].append(key)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "## For debugging\n", - "\n", - "def findregex(winners, losers, calls=100000):\n", - " \"Find the shortest disjunction of regex components that covers winners but not losers.\"\n", - " solution = '^(' + OR(winners) + ')$'\n", - " covers = regex_covers(winners, losers)\n", - " b = BranchBound(solution, calls)\n", - " b.search(None, covers)\n", - " print b.calls, 'calls', len(b.solution), 'len'\n", - " return b.solution\n", - "\n", - "\n", - "def triage_covers(partial, covers):\n", - " \"Simplify covers by eliminating dominated regexes, and picking ones that uniquely cover a winner.\"\n", - " previous = None\n", - " while covers != previous:\n", - " previous = covers\n", - " # Eliminate regexes that are dominated by another regex\n", - " covers = eliminate_dominated(covers) # covers = {regex: {winner,...}}\n", - " coverers = invert_multimap(covers) # coverers = {winner: {regex,...}}\n", - " # For winners covered by only one component, move winner from covers to regex\n", - " singletons = {coverers[w][0] for w in coverers if len(coverers[w]) == 1}\n", - " if singletons:\n", - " partial = OR(partial, OR(singletons))\n", - " covered = {w for c in singletons for w in covers[c]}\n", - " covers = {c:covers[c]-covered for c in covers if c not in singletons}\n", - " return partial, covers\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - ", and to , who suggested looking at [WFSTs](http://www.openfst.org/twiki/bin/view/FST/WebHome)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def regex_covers(winners, losers):\n", - " \"\"\"Generate regex components and return a dict of {regex: {winner...}}.\n", - " Each regex matches at least one winner and no loser.\"\"\"\n", - " losers_str = '\\n'.join(losers)\n", - " wholes = {'^'+winner+'$' for winner in winners}\n", - " parts = {d for w in wholes for p in subparts(w) for d in dotify(p)}\n", - " chars = set(cat(winners))\n", - " pairs = {A+'.'+rep_char+B for A in chars for B in chars for rep_char in '+*?'}\n", - " reps = {r for p in parts for r in repetitions(p)}\n", - " pool = wholes | parts | pairs | reps \n", - " searchers = [re.compile(c, re.MULTILINE).search for c in pool]\n", - " covers = {r: set(filter(searcher, winners)) \n", - " for (r, searcher) in zip(pool, searchers)\n", - " if not searcher(losers_str)}\n", - " covers = eliminate_dominated(covers)\n", - " return covers\n", - " return add_character_class_components(covers)\n", - "\n", - "def add_character_class_components(covers):\n", - " for (B, Ms, E) in combine_splits(covers):\n", - " N = len(Ms)\n", - " or_size = N*len(B+'.'+E) + N-1 # N=3 => 'B1E|B2E|B3E'\n", - " class_size = len(B+'[]'+E) + N # N=3 => 'B[123]E'\n", - " winners = {w for m in Ms for w in Ms[m]}\n", - " if class_size < or_size:\n", - " covers[B + make_char_class(Ms) + E] = winners\n", - " return covers\n", - "\n", - "def split3(word):\n", - " \"Splits a word into 3 parts, all ways, with middle part having 0 or 1 character.\"\n", - " return [(word[:i], word[i:i+L], word[i+L:]) \n", - " for i in range(len(word)+1) for L in (0, 1)\n", - " if not word[i:i+L].startswith(('.', '+', '*', '?'))]\n", - "\n", - "def combine_splits(covers):\n", - " \"Convert covers = {BME: {w...}} into a list of [(B, {M...}, E, {w...}].\"\n", - " table = collections.defaultdict(dict) # table = {(B, E): {M: {w...}}}\n", - " for r in covers:\n", - " for (B, M, E) in split3(r):\n", - " table[B, E][M] = covers[r]\n", - " return [(B, Ms, E) for ((B, E), Ms) in table.items()\n", - " if len(Ms) > 1]\n", - "\n", - "def make_char_class(chars):\n", - " chars = set(chars)\n", - " return '[%s]%s' % (cat(chars), ('?' if '' in chars else ''))\n", - "\n", - "covers = regex_covers(boys, girls)\n", - "old = set(covers)\n", - "print len(covers)\n", - "covers = add_character_class_components(covers)\n", - "print len(covers)\n", - "print set(covers) - old\n", - "\n", - "print dict(combine_splits({'..a': {1,2,3}, '..b': {4,5,6}, '..c':{7}}))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Consider the two components `'..a'` and `'..b'`. If we wanted to cover all the winners that both of these match, we could use `'..a|..b'`, or we could share the common prefix and introduce a *character class* to get `'..[ab]'`. Since the former is 7 characters and the later is only 6, the later would be preferred. It would be an even bigger win to replace `'..az|..bz|..cz'` with `'..[abc]z'`; that reduces the count from 14 to 8. Similarly, replacing `'..az|..bz|..z'` with `'..[ab]?z'` saves 5 characters.\n", - "\n", - "There seems to be potential savings with character classes. But how do we know which characters from which components to combine into classes? To keep things from getting out of control, I'm going to only look at components that are left after we eliminate dominated. That is not an ideal approach—there may well be some components that are dominated on their own, but could be part of an optimal solution when combined with other components into a character class. But I'm going to keep it simple." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "Searching: Better Bounds\n", - "----\n", - "\n", - "Branch and bound prunes the search tree whenever it is on a branch that is guaranteed to result in a solution that is no better than the best solution found so far. Currently we estimate the best possible solution along the current branch by taking the length of the partial solution and adding the length of the shortest component in `covers`. We do that because we know for sure that we need at least one component, but we don't know for sure how many components we'll need (nor how long each of them will be. So our estimate is often severely underestimates the true answer, which means we don't cut off search some places where we could, if only we had a better estimate.\n", - " \n", - "Here's one way to get a better bound. We'll define the following quantities:\n", - "\n", - "+ *P* = the length of the partial solution, plus the \"|\", if needed. So if the partial solution is `None`, then *P* will be zero, otherwise *P* is the length plus 1.\n", - "+ *S* = the length of the shortest regex component in `covers`.\n", - "+ *W* = the number of winners still in `covers`.\n", - "+ *C* = the largest number of winners covered by any regex in `covers`.\n", - "\n", - "If we assume The current estimate is *P* + *S*. We can see that a better estimate is *P* + *S* × ceil(*W* / *C*)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import math\n", - "\n", - "class BranchBound(object):\n", - " \"Hold state information for a branch and bound search.\"\n", - " def __init__(self, solution, calls):\n", - " self.solution, self.calls = solution, calls\n", - " \n", - " def search(self, covers, partial=None):\n", - " \"Recursively extend partial regex until it matches all winners in covers.\"\n", - " if self.calls <= 0: \n", - " return self.solution\n", - " self.calls -= 1\n", - " covers, partial = simplify_covers(covers, partial)\n", - " if not covers: # Nothing left to cover; solution is complete\n", - " self.solution = min(partial, self.solution, key=len)\n", - " else:\n", - " P = 0 if not partial else len(partial) + 1\n", - " S = len(min(covers, key=len))\n", - " C = max(len(covers[r]) for r in covers)\n", - " W = len(set(w for r in covers for w in covers[r]))\n", - " if P + S * math.ceil(W / C) < len(self.solution):\n", - " # Try with and without the greedy-best component\n", - " def score(r): return 4 * len(covers[r]) - len(r)\n", - " r = max(covers, key=score) # Best component\n", - " covered = covers[r] # Set of winners covered by r\n", - " covers.pop(r)\n", - " self.search({c:covers[c]-covered for c in covers}, OR(partial, r))\n", - " self.search(covers, partial)\n", - " return self.solution" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.0" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/py/lis.py b/py/lis.py index 2d031ad..525f982 100644 --- a/py/lis.py +++ b/py/lis.py @@ -57,7 +57,7 @@ def standard_env(): '>':op.gt, '<':op.lt, '>=':op.ge, '<=':op.le, '=':op.eq, 'abs': abs, 'append': op.add, - 'apply': apply, + 'apply': lambda proc, args: proc(*args), 'begin': lambda *x: x[-1], 'car': lambda x: x[0], 'cdr': lambda x: x[1:], @@ -142,4 +142,4 @@ def eval(x, env=global_env): else: # (proc arg...) proc = eval(x[0], env) args = [eval(exp, env) for exp in x[1:]] - return proc(*args) \ No newline at end of file + return proc(*args) diff --git a/py/ngrams.py b/py/ngrams.py new file mode 100644 index 0000000..6b04c29 --- /dev/null +++ b/py/ngrams.py @@ -0,0 +1,258 @@ +""" +Code to accompany the chapter "Natural Language Corpus Data" +from the book "Beautiful Data" (Segaran and Hammerbacher, 2009) +http://oreilly.com/catalog/9780596157111/ + +Code copyright (c) 2008-2009 by Peter Norvig + +You are free to use this code under the MIT licencse: +http://www.opensource.org/licenses/mit-license.php +""" + +import re, string, random, glob, operator, heapq +from collections import defaultdict +from math import log10 + +def memo(f): + "Memoize function f." + table = {} + def fmemo(*args): + if args not in table: + table[args] = f(*args) + return table[args] + fmemo.memo = table + return fmemo + +def test(verbose=None): + """Run some tests, taken from the chapter. + Since the hillclimbing algorithm is randomized, some tests may fail.""" + import doctest + print 'Running tests...' + doctest.testfile('ngrams-test.txt', verbose=verbose) + +################ Word Segmentation (p. 223) + +@memo +def segment(text): + "Return a list of words that is the best segmentation of text." + if not text: return [] + candidates = ([first]+segment(rem) for first,rem in splits(text)) + return max(candidates, key=Pwords) + +def splits(text, L=20): + "Return a list of all possible (first, rem) pairs, len(first)<=L." + return [(text[:i+1], text[i+1:]) + for i in range(min(len(text), L))] + +def Pwords(words): + "The Naive Bayes probability of a sequence of words." + return product(Pw(w) for w in words) + +#### Support functions (p. 224) + +def product(nums): + "Return the product of a sequence of numbers." + return reduce(operator.mul, nums, 1) + +class Pdist(dict): + "A probability distribution estimated from counts in datafile." + def __init__(self, data=[], N=None, missingfn=None): + for key,count in data: + self[key] = self.get(key, 0) + int(count) + self.N = float(N or sum(self.itervalues())) + self.missingfn = missingfn or (lambda k, N: 1./N) + def __call__(self, key): + if key in self: return self[key]/self.N + else: return self.missingfn(key, self.N) + +def datafile(name, sep='\t'): + "Read key,value pairs from file." + for line in file(name): + yield line.split(sep) + +def avoid_long_words(key, N): + "Estimate the probability of an unknown word." + return 10./(N * 10**len(key)) + +N = 1024908267229 ## Number of tokens + +Pw = Pdist(datafile('count_1w.txt'), N, avoid_long_words) + +#### segment2: second version, with bigram counts, (p. 226-227) + +def cPw(word, prev): + "Conditional probability of word, given previous word." + try: + return P2w[prev + ' ' + word]/float(Pw[prev]) + except KeyError: + return Pw(word) + +P2w = Pdist(datafile('count_2w.txt'), N) + +@memo +def segment2(text, prev=''): + "Return (log P(words), words), where words is the best segmentation." + if not text: return 0.0, [] + candidates = [combine(log10(cPw(first, prev)), first, segment2(rem, first)) + for first,rem in splits(text)] + return max(candidates) + +def combine(Pfirst, first, (Prem, rem)): + "Combine first and rem results into one (probability, words) pair." + return Pfirst+Prem, [first]+rem + +################ Secret Codes (p. 228-230) + +def encode(msg, key): + "Encode a message with a substitution cipher." + return msg.translate(string.maketrans(ul(alphabet), ul(key))) + +def ul(text): return text.upper() + text.lower() + +alphabet = 'abcdefghijklmnopqrstuvwxyz' + +def shift(msg, n=13): + "Encode a message with a shift (Caesar) cipher." + return encode(msg, alphabet[n:]+alphabet[:n]) + +def logPwords(words): + "The Naive Bayes probability of a string or sequence of words." + if isinstance(words, str): words = allwords(words) + return sum(log10(Pw(w)) for w in words) + +def allwords(text): + "Return a list of alphabetic words in text, lowercase." + return re.findall('[a-z]+', text.lower()) + +def decode_shift(msg): + "Find the best decoding of a message encoded with a shift cipher." + candidates = [shift(msg, n) for n in range(len(alphabet))] + return max(candidates, key=logPwords) + +def shift2(msg, n=13): + "Encode with a shift (Caesar) cipher, yielding only letters [a-z]." + return shift(just_letters(msg), n) + +def just_letters(text): + "Lowercase text and remove all characters except [a-z]." + return re.sub('[^a-z]', '', text.lower()) + +def decode_shift2(msg): + "Decode a message encoded with a shift cipher, with no spaces." + candidates = [segment2(shift(msg, n)) for n in range(len(alphabet))] + p, words = max(candidates) + return ' '.join(words) + +#### General substitution cipher (p. 231-233) + +def logP3letters(text): + "The log-probability of text using a letter 3-gram model." + return sum(log10(P3l(g)) for g in ngrams(text, 3)) + +def ngrams(seq, n): + "List all the (overlapping) ngrams in a sequence." + return [seq[i:i+n] for i in range(1+len(seq)-n)] + +P3l = Pdist(datafile('count_3l.txt')) +P2l = Pdist(datafile('count_2l.txt')) ## We'll need it later + +def hillclimb(x, f, neighbors, steps=10000): + "Search for an x that maximizes f(x), considering neighbors(x)." + fx = f(x) + neighborhood = iter(neighbors(x)) + for i in range(steps): + x2 = neighborhood.next() + fx2 = f(x2) + if fx2 > fx: + x, fx = x2, fx2 + neighborhood = iter(neighbors(x)) + if debugging: print 'hillclimb:', x, int(fx) + return x + +debugging = False + +def decode_subst(msg, steps=4000, restarts=90): + "Decode a substitution cipher with random restart hillclimbing." + msg = cat(allwords(msg)) + candidates = [hillclimb(encode(msg, key=cat(shuffled(alphabet))), + logP3letters, neighboring_msgs, steps) + for _ in range(restarts)] + p, words = max(segment2(c) for c in candidates) + return ' '.join(words) + +def shuffled(seq): + "Return a randomly shuffled copy of the input sequence." + seq = list(seq) + random.shuffle(seq) + return seq + +cat = ''.join + +def neighboring_msgs(msg): + "Generate nearby keys, hopefully better ones." + def swap(a,b): return msg.translate(string.maketrans(a+b, b+a)) + for bigram in heapq.nsmallest(20, set(ngrams(msg, 2)), P2l): + b1,b2 = bigram + for c in alphabet: + if b1==b2: + if P2l(c+c) > P2l(bigram): yield swap(c,b1) + else: + if P2l(c+b2) > P2l(bigram): yield swap(c,b1) + if P2l(b1+c) > P2l(bigram): yield swap(c,b2) + while True: + yield swap(random.choice(alphabet), random.choice(alphabet)) + +################ Spelling Correction (p. 236-) + +def corrections(text): + "Spell-correct all words in text." + return re.sub('[a-zA-Z]+', lambda m: correct(m.group(0)), text) + +def correct(w): + "Return the word that is the most likely spell correction of w." + candidates = edits(w).items() + c, edit = max(candidates, key=lambda (c,e): Pedit(e) * Pw(c)) + return c + +def Pedit(edit): + "The probability of an edit; can be '' or 'a|b' or 'a|b+c|d'." + if edit == '': return (1. - p_spell_error) + return p_spell_error*product(P1edit(e) for e in edit.split('+')) + +p_spell_error = 1./20. + +P1edit = Pdist(datafile('count_1edit.txt')) ## Probabilities of single edits + +def edits(word, d=2): + "Return a dict of {correct: edit} pairs within d edits of word." + results = {} + def editsR(hd, tl, d, edits): + def ed(L,R): return edits+[R+'|'+L] + C = hd+tl + if C in Pw: + e = '+'.join(edits) + if C not in results: results[C] = e + else: results[C] = max(results[C], e, key=Pedit) + if d <= 0: return + extensions = [hd+c for c in alphabet if hd+c in PREFIXES] + p = (hd[-1] if hd else '<') ## previous character + ## Insertion + for h in extensions: + editsR(h, tl, d-1, ed(p+h[-1], p)) + if not tl: return + ## Deletion + editsR(hd, tl[1:], d-1, ed(p, p+tl[0])) + for h in extensions: + if h[-1] == tl[0]: ## Match + editsR(h, tl[1:], d, edits) + else: ## Replacement + editsR(h, tl[1:], d-1, ed(h[-1], tl[0])) + ## Transpose + if len(tl)>=2 and tl[0]!=tl[1] and hd+tl[1] in PREFIXES: + editsR(hd+tl[1], tl[0]+tl[2:], d-1, + ed(tl[1]+tl[0], tl[0:2])) + ## Body of edits: + editsR('', word, d, []) + return results + +PREFIXES = set(w[:i] for w in Pw for i in range(len(w) + 1)) diff --git a/requirements.txt b/requirements.txt index 24ce15a..aa094d9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ numpy +matplotlib