From 7e6b05ac089cfa3a37b3b5a07d744ff936b98e28 Mon Sep 17 00:00:00 2001 From: Peter Norvig Date: Mon, 6 Dec 2021 16:28:18 -0800 Subject: [PATCH] Add files via upload --- Advent-2021.ipynb | 716 ++++++++++++++++++++ Konane.ipynb | 1642 +++++++++++++++++++++++++++++++++++++++++++++ README.md | 56 +- konane.jpg | Bin 0 -> 203447 bytes 4 files changed, 2395 insertions(+), 19 deletions(-) create mode 100644 Advent-2021.ipynb create mode 100644 Konane.ipynb create mode 100644 konane.jpg diff --git a/Advent-2021.ipynb b/Advent-2021.ipynb new file mode 100644 index 0000000..0b45b6d --- /dev/null +++ b/Advent-2021.ipynb @@ -0,0 +1,716 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
Peter Norvig, 1–25 Dec 2021
\n", + "\n", + "# Advent of Code 2021\n", + "\n", + "I'm going to solve some [Advent of Code 2021](https://adventofcode.com/) (AoC) puzzles, but I won't be competing for time. \n", + "\n", + "I also won't explain each puzzle here; you'll have to click on each day's link (e.g. [Day 1](https://adventofcode.com/2021/day/1)) to understand the puzzle. \n", + "\n", + "Part of the idea of AoC is that you have to make some design choices to solve part 1 before you get to see the description of part 2. So there is a tension of wanting the solution to part 1 to provide general components that might be re-used in part 2, without falling victim to [YAGNI](https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it). Except for errors, I will show the code as I developed it; I won't go back and refactor the code for part 1 when I see part 2." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Day 0: Imports and Utilities\n", + "\n", + "Below are the imports and utility functions that I found to be generally useful for these kinds of problems. But first two functions that I will use each day, `parse` and `answer`. I will start by writing something like this for part 1 of Day 1:\n", + "\n", + " in1 = parse(1, int)\n", + " def solve_it(numbers): return ...\n", + " solve(in1)\n", + " \n", + "That is, `parse(1, int)` will parse the data file for day 1 in the format of one integer per line; then some function (here `solve_it`) will (hopefully) compute the correct answer. I'll then submit the answer to AoC and verify it is correct. If it is, I'll move on to solve part 2. When I get them both done, I'll use the function `answers` to assert the correct answers. So it will look like this:\n", + "\n", + " in1 = parse(1, int)\n", + " \n", + " def solve_it(numbers): return ...\n", + " answer(1.1, solve_it(in1), ...)\n", + " \n", + " def solve_it2(numbers): return ...\n", + " answer(1.2, solve_it2(in1), ...)\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "def parse(day, parser=str, sep='\\n') -> tuple:\n", + " \"Split the day's input file into sections separated by `sep`, and apply `parser` to each.\"\n", + " sections = open(f'AOC2021/input{day}.txt').read().rstrip().split(sep)\n", + " return mapt(parser, sections)\n", + "\n", + "def answer(puzzle_number, got, expected) -> bool:\n", + " \"\"\"Verify the answer we got was expected.\"\"\"\n", + " assert got == expected, f'For {puzzle_number}, expected {expected} but got {got}.'\n", + " return True" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from __future__ import annotations\n", + "from collections import Counter, defaultdict, namedtuple, deque\n", + "from itertools import permutations, combinations, chain, count as count_from, product as cross_product\n", + "from functools import lru_cache\n", + "from typing import Dict, Tuple, Set, List, Iterator, Optional, Union\n", + "\n", + "import operator\n", + "import math\n", + "import ast\n", + "import sys\n", + "import re\n", + "\n", + "Char = str # Type used to indicate a single character\n", + "cat = ''.join\n", + "flatten = chain.from_iterable\n", + "cache = lru_cache(None)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def quantify(iterable, pred=bool) -> int:\n", + " \"Count the number of items in iterable for which pred is true.\"\n", + " return sum(1 for item in iterable if pred(item))\n", + "\n", + "def first(iterable, default=None) -> object:\n", + " \"Return first item in iterable, or default.\"\n", + " return next(iter(iterable), default)\n", + "\n", + "def rest(sequence) -> object: return sequence[1:]\n", + "\n", + "def multimap(items: Iterable[Tuple]) -> dict:\n", + " \"Given (key, val) pairs, return {key: [val, ....], ...}.\"\n", + " result = defaultdict(list)\n", + " for (key, val) in items:\n", + " result[key].append(val)\n", + " return result\n", + "\n", + "def prod(numbers) -> float: # Will be math.prod in Python 3.8, but I'm in 3.7\n", + " \"The product of an iterable of numbers.\" \n", + " result = 1\n", + " for n in numbers:\n", + " result *= n\n", + " return result\n", + "\n", + "def ints(text: str) -> Tuple[int]:\n", + " \"Return a tuple of all the integers in text, ignoring non-numbers.\"\n", + " return tuple(map(int, re.findall('-?[0-9]+', text)))\n", + "\n", + "def sign(x) -> int:\n", + " \"\"\"The sign of a number: +1, 0, or -1.\"\"\"\n", + " return (0 if x == 0 else +1 if x > 0 else -1)\n", + "\n", + "Atom = Union[float, int, str]\n", + "\n", + "def atoms(text: str, sep=None) -> Tuple[Atom]:\n", + " \"Parse text into atoms (numbers or strs).\"\n", + " return tuple(map(atom, text.split(sep)))\n", + "\n", + "def atom(text: str) -> Atom:\n", + " \"Parse text into a single float or int or str.\"\n", + " try:\n", + " val = float(text)\n", + " return round(val) if round(val) == val else val\n", + " except ValueError:\n", + " return text\n", + " \n", + "def dotproduct(A, B) -> float: return sum(a * b for a, b in zip(A, B))\n", + "\n", + "def mapt(fn, *args):\n", + " \"map(fn, *args) and return the result as a tuple.\"\n", + " return tuple(map(fn, *args))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Day 1](https://adventofcode.com/2021/day/1): Sonar Sweep\n", + "\n", + "The input is a list of integers.\n", + "\n", + "1. How many numbers increase from the previous number?\n", + "2. How many sliding windows of 3 numbers increase from the previous window?" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "in1 = parse(1, int)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def increases(nums: List[int]) -> int:\n", + " \"\"\"How many numbers are bigger than the previous one?\"\"\"\n", + " return quantify(nums[i] > nums[i - 1] \n", + " for i in range(1, len(nums)))\n", + "\n", + "answer(1.1, increases(in1), 1400)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def window_increases(nums: List[int], w=3) -> int:\n", + " \"\"\"How many sliding windows of w numbers have a sum bigger than the previous window?\"\"\"\n", + " return quantify(sum(nums[i:i+w]) > sum(nums[i-1:i-1+w])\n", + " for i in range(1, len(nums) + 1 - w))\n", + "\n", + "answer(1.2, window_increases(in1), 1429)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Day 2](https://adventofcode.com/2021/day/2): Dive! \n", + "\n", + "The input is a list of instructions, such as \"`forward 10`\".\n", + "\n", + "1. Follow instructions and report the product of your final horizontal position and depth.\n", + "1. Follow *revised* instructions and report the product of your final horizontal position and depth. (There is an \"aim\" which is increased by down and up instructions. Depth is changed not by down and up, but by going forward *n* units, which changes depth by aim × *n* units" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "in2 = parse(2, atoms)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def drive(instructions) -> int:\n", + " \"\"\"What is the product of position and depth after following instructions?\"\"\"\n", + " pos = depth = 0\n", + " for (op, n) in instructions:\n", + " if op == 'forward': pos += n\n", + " if op == 'down': depth += n\n", + " if op == 'up': depth -= n\n", + " return pos * depth\n", + "\n", + "answer(2.1, drive(in2), 1670340)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def drive2(instructions) -> int:\n", + " \"\"\"What is rthe product of position and depth after following instructions?\n", + " This time we have to keep track of `aim` as well.\"\"\"\n", + " pos = depth = aim = 0\n", + " for (op, n) in instructions:\n", + " if op == 'forward': pos += n; depth += aim * n\n", + " if op == 'down': aim += n\n", + " if op == 'up': aim -= n\n", + " return pos * depth\n", + "\n", + "answer(2.2, drive2(in2), 1954293920)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Day 3](https://adventofcode.com/2021/day/3): Binary Diagnostic\n", + "\n", + "The input is a list of bit strings.\n", + "\n", + "1. What is the power consumption (product of gamma and epsilon rates)?\n", + "2. What is the life support rating (product of oxygen and CO2)?" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "in3 = parse(3, str) # Parse into bit strings, (e.g. '1110'), not binary ints (e.g. 14)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def common(strs, i) -> str: \n", + " \"\"\"The bit that is most common in position i.\"\"\"\n", + " bits = [s[i] for s in strs]\n", + " return '1' if bits.count('1') >= bits.count('0') else '0'\n", + "\n", + "def uncommon(strs, i) -> str: return '1' if common(strs, i) == '0' else '0'\n", + "\n", + "def epsilon(strs) -> str:\n", + " \"\"\"The bit string formed from most common bit at each position.\"\"\"\n", + " return cat(common(strs, i) for i in range(len(strs[0])))\n", + "\n", + "def gamma(strs) -> str:\n", + " \"\"\"The bit string formed from most uncommon bit at each position.\"\"\"\n", + " return cat(uncommon(strs, i) for i in range(len(strs[0])))\n", + "\n", + "def power(strs) -> int: \n", + " return int(epsilon(strs), 2) * int(gamma(strs), 2)\n", + " \n", + "answer(3.1, power(in3), 2261546)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def select(strs, common_fn, i=0) -> str:\n", + " \"\"\"Select a str from strs according to common_fn.\"\"\"\n", + " if len(strs) == 1:\n", + " return strs[0]\n", + " else:\n", + " bit = common_fn(strs, i)\n", + " selected = [s for s in strs if s[i] == bit]\n", + " return select(selected, common_fn, i + 1)\n", + "\n", + "def life(strs) -> int: \n", + " return int(select(strs, common), 2) * int(select(strs, uncommon), 2)\n", + " \n", + "answer(3.2, life(in3), 6775520)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Day 4](https://adventofcode.com/2021/day/4): Giant Squid\n", + "\n", + "The first line of the input is a permutation of the integers 0-99. That is followed by 5 × 5 bingo boards, each separated by two newlines.\n", + "\n", + "1. What will your final score be if you choose the first bingo board to win?\n", + "2. What will your final score be if you choose the last bingo board to win?\n", + "\n", + "I'll represent a board as a tuple of 25 ints; that makes `parse` easy: the permutation of integers and the bingo boards can both be parsed by `ints`. \n", + "\n", + "I'm worried about an ambiguity: what if two boards win at the same time? I'll have to assume Eric arranged it so that can't happen. I'll define `bingo_winners` to return a list of boards that win when a number has just been called, and I'll arbitrarily choose the first of them." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "order, *boards = in4 = parse(4, ints, sep='\\n\\n')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Board = Tuple[int]\n", + "Line = List[int]\n", + "B = 5\n", + "def sq(x, y) -> int: return x + B * y\n", + "\n", + "def lines(square) -> Tuple[Line, Line]:\n", + " \"\"\"The two lines through square number `square`.\"\"\"\n", + " x, y = square % B, square // B\n", + " return [sq(x, y) for x in range(B)], [sq(x, y) for y in range(B)]\n", + "\n", + "def bingo_winners(boards, drawn, just_called) -> List[Board]:\n", + " \"\"\"Are any boards winners due to the number just called (and previously drawn numbers)?\"\"\"\n", + " return [board for board in boards\n", + " if just_called in board\n", + " and any(quantify(board[n] in drawn for n in line) == B \n", + " for line in lines(board.index(just_called)))]\n", + "\n", + "def bingo_score(board, drawn, just_called) -> int:\n", + " \"\"\"Sum of unmarked numbers multiplied by the number just called.\"\"\"\n", + " return sum(n for n in board if n not in drawn) * just_called\n", + "\n", + "def bingo(boards, order) -> int: \n", + " \"\"\"What is the score of the first winning board?\"\"\"\n", + " drawn = set()\n", + " for num in order:\n", + " drawn.add(num)\n", + " winners = bingo_winners(boards, drawn, num)\n", + " if winners:\n", + " return bingo_score(winners[0], drawn, num)\n", + "\n", + "answer(4.1, bingo(boards, order), 39902)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def bingo_last(boards, order) -> int: \n", + " \"\"\"What is the score of the last winning board?\"\"\"\n", + " boards = set(boards)\n", + " drawn = set()\n", + " for num in order:\n", + " drawn.add(num)\n", + " winners = bingo_winners(boards, drawn, num)\n", + " boards -= set(winners)\n", + " if not boards:\n", + " return bingo_score(winners[-1], drawn, num)\n", + " \n", + "answer(4.2, bingo_last(boards, order), 26936)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Day 5](https://adventofcode.com/2021/day/5): Hydrothermal Venture\n", + "\n", + "The input is a list of \"lines\" denoted by start and end points, e.g. \"`0,9 -> 5,9`\". I'll represent that line as the tuple `(0, 9, 5, 9)`.\n", + "\n", + "1. Consider only horizontal and vertical lines. At how many points do at least two lines overlap?\n", + "2. Consider all of the lines (including diagonals). At how many points do at least two lines overlap?" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "in5 = parse(5, ints)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def points(line) -> bool:\n", + " \"\"\"All the (integer) points on a line.\"\"\"\n", + " x1, y1, x2, y2 = line\n", + " if x1 == x2:\n", + " return [(x1, y) for y in cover(y1, y2)]\n", + " elif y1 == y2:\n", + " return [(x, y1) for x in cover(x1, x2)]\n", + " else: # non-orthogonal lines not allowed\n", + " return []\n", + " \n", + "def cover(x1, x2) -> range:\n", + " \"\"\"All the ints from x1 to x2, inclusive, with x1, x2 in either order.\"\"\"\n", + " return range(min(x1, x2), max(x1, x2) + 1)\n", + "\n", + "def overlaps(lines) -> int:\n", + " \"\"\"How many points overlap 2 or more lines?\"\"\"\n", + " counts = Counter(flatten(map(points, lines)))\n", + " return quantify(counts[p] >= 2 for p in counts)\n", + "\n", + "answer(5.1, overlaps(in5), 7436)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def overlaps(lines, diagonal=False) -> int:\n", + " \"\"\"How many points overlap 2 or more lines?\"\"\"\n", + " counts = Counter(flatten(points(line, diagonal) for line in lines))\n", + " return quantify(counts[p] >= 2 for p in counts)\n", + "\n", + "def points(line, diagonal=False) -> bool:\n", + " \"\"\"All the (integer) points on a line; optionally allow diagonal lines.\"\"\"\n", + " x1, y1, x2, y2 = line\n", + " if diagonal or x1 == x2 or y1 == y2:\n", + " dx, dy = sign(x2 - x1), sign(y2 - y1)\n", + " length = max(abs(x2 - x1), abs(y2 - y1))\n", + " return [(x1 + k * dx, y1 + k * dy) for k in range(length + 1)]\n", + " else: # non-orthogonal lines not allowed when diagonal is False\n", + " return []\n", + "\n", + "assert points((1, 1, 1, 3), False) == [(1, 1), (1, 2), (1, 3)]\n", + "assert points((1, 1, 3, 3), True) == [(1, 1), (2, 2), (3, 3)]\n", + "assert points((9, 7, 7, 9), True) == [(9, 7), (8, 8), (7, 9)]\n", + "\n", + "answer(5.2, overlaps(in5, True), 21104)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Day 6](https://adventofcode.com/2021/day/6): Lanternfish\n", + "\n", + "The input is a single line of ints, each describing the age of a lanternfish. Over time, they age and reproduce in a specified way.\n", + "\n", + "1. Find a way to simulate lanternfish. How many lanternfish would there be after 80 days?\n", + "2. How many lanternfish would there be after 256 days?" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "in6 = parse(6, ints)[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Although the puzzle description treats each fish individually, I won't take the bait (pun intended). Instead, I'll use a Counter of fish, and treat all the fish of each age group together. I have a hunch that part 2 will involve a ton-o'-fish." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Fish = Counter # Represent a school of fish as a Counter of their timers\n", + "\n", + "def simulate(fish, days=1) -> Tuple[Fish, int]:\n", + " \"\"\"Simulate the aging and birth of fish over `days`;\n", + " return the Counter of fish and the total number of fish.\"\"\"\n", + " for day in range(days):\n", + " fish = Fish({t - 1: fish[t] for t in fish})\n", + " if -1 in fish: # births\n", + " fish[6] += fish[-1]\n", + " fish[8] = fish[-1]\n", + " del fish[-1]\n", + " return fish, sum(fish.values())\n", + " \n", + "assert simulate(Fish((3, 4, 3, 1, 2))) == (Fish((2, 3, 2, 0, 1)), 5)\n", + "assert simulate(Fish((2, 3, 2, 0, 1))) == (Fish((1, 2, 1, 6, 0, 8)), 6)\n", + "\n", + "answer(6.1, simulate(Fish(in6), 80)[1], 350917)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "My hunch was right, so part 2 is easy:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "answer(6.2, simulate(Fish(in6), 256)[1], 1592918715629)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# [Day 7](https://adventofcode.com/2021/day/7):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Konane.ipynb b/Konane.ipynb new file mode 100644 index 0000000..ef96a74 --- /dev/null +++ b/Konane.ipynb @@ -0,0 +1,1642 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
Peter Norvig, 1 Dec 2021
\n", + "\n", + "# Mel's Konane Board\n", + "\n", + "My friend and former NASA colleague [Mel Montemerlo](https://www.linkedin.com/in/mel-montemerlo-a2040b205/) made this beautiful Konane set for me:\n", + "\n", + "![Wooden Konane Board](konane.jpg)\n", + "\n", + "I don't have the woodworking skills to make anything nearly as nice as that, so instead I thought I'd use my coding skills to make a nice program to solve the game. It's the least I can do to return the favor to Mel. \n", + "\n", + "# Konane Rules\n", + "\n", + "Konane (or Kōnane) is a two-player board game from Hawaii. To set up the game, fill each space with a marble, alternating between black and white marbles in a checkerboard pattern. To complete the set-up, remove two adjacent marbles (one black, one white) from the board. \n", + "\n", + "From there on, the players take turns, with black moving first. A move consists of jumping a marble of your color over an adjacent opponent marble, removing that marble, and landing on the empty space beyond it. If there is another opponent marble followed by another empty space in the same direction, the player may optionally make a double (or more) jump. Jumps may not be diagonal, and a multiple jump may not change directions.\n", + "\n", + "When one player is unable to jump, that player loses.\n", + "\n", + "(Some rules say the removed marbles must be either in a corner or in the very center; others say the two can be anywhere on the board. If you accept that they must be in a corner or the center, then there are only two distinct starting positions; the others ten are equivalent under rotation and reflection.)\n", + "\n", + "# Approach to Solving Konane\n", + "\n", + "A game is said to be **solved** if, for any state of the game that occurs during play, you can instantly say whether the player to move can force a win from that state. \n", + "\n", + "The first thing to consider is whether a 6 by 6 board is small enough that we can solve the game by exhaustive search of the graph of possible states of the game. By **state** I mean an indication of everything that matters: whose turn it is to play, and what marbles are in what spaces. The player to move is either black or white, and each of the 36 spaces can either hold a marble or not, so an upper bound is 237 ≈ 137 billion game states. However, the rules for jumping constrain the possible states of the game; most of those theoretical states are unreachable from the start state. As a wild guess, I estimate that maybe 100 million to a billion states are rechable. That's few enough that I should be able to solve the game with exhaustive search. I'm lucky that Mel chose 6 by 6; even a 7 by 7 board would be far too large for exhaustive search.\n", + "\n", + "\n", + "I will define a function `winner(state)` that will return the player who can force a win from that state, regardless of what the other player does. (There must be one such player, because ties are not allowed and there is no randomness.) Once I have cached the values of `winner`, the optimal strategy is easy: \n", + "\n", + "- Play a move that leads to a game state where you are the winner.\n", + "- If there is no such move, then you're doomed (against an optimal player); play anything." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Implementation of Basic Types\n", + "\n", + "\n", + "The number of states for the 6 by 6 board puts us right on the edge: small enough that I'm confident I can get the program to work; big enough to require some judicious implementation choices to save time and space. For example, a straightforward way to implement a game state would be a structure with two fields, player and board, where the board is a 6 by 6 array where each element is either black, white, or empty. But a billion of those structures would consume a lot of memory. A more efficient encoding is to represent the board as a bit string: a binary integer where bit *s* is a 1 if there is a marble in space *s*, according to the following numbering scheme:\n", + "\n", + "\n", + " 0 1 2 3 4 5\n", + " 6 7 8 9 10 11\n", + " 12 13 14 15 16 17\n", + " 18 19 20 21 22 23\n", + " 24 25 26 27 28 29\n", + " 30 31 32 33 34 35\n", + " \n", + "The bit representation for a board doesn't have to say whether a marble is black or white; black marbles can only be in spaces numbered 0, 2, 4, 7, 9, 11, ... (spaces where the x coordinates plus y coordinate is even) and white only in spaces 1, 3, 5, 6, 8, 10, ... (spaces where the x coordinate plus y coordinate is odd).\n", + "\n", + "The representation of a state can also be a single `int`, with the low-order bit being 1 for black, 0 for white, and the other bits being a board shifted left a bit.\n", + " \n", + "Given this, the implementation choices are as follows:\n", + "- **N**: the size of the board: a global variable, defined as 6.\n", + "- **Board**: a bit string (`int`) indicating which spaces hold marbles.\n", + " - The function `get(board space)` returns the player on that space, or `empty`.\n", + " - The function `remove(board, spaces)` returns a new board with the marbles on `spaces` removed.\n", + "- **State**: a bit string (`int`) indicating both the board and the player whose turn it is.\n", + " - The function `start_state(removed)` returns a state with a full board except for `removed` spaces.\n", + " - The functions `encode_state` and `decode_state` join and split a board/player pair.\n", + "- **Space**: an integer from 0 to 35 (or in general, 0 to N2 - 1). \n", + " - The function `space(x, y)` returns an integer representing the space with given `x` and `y` coordinates. \n", + " - The functions `x_(space)` and `y_(space)` invert that.\n", + "- **Player**: a one-character string, `'*'` for black and `'o'` for white.\n", + " - The function `other(player)` gives the opponent player.\n", + "- **Direction**: a direction of movement is an integer giving the difference between adjacent spaces.\n", + " - This is +1 for right; -1 for left; -6 for up (or in general, -N); +6 for down (or in general, +N).\n", + " - The function `go(space, direction, k)` gives the space that is `k` steps in `direction` from `space`.\n", + "\n", + "\n", + "Here is the code:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from typing import *\n", + "from dataclasses import dataclass\n", + "from functools import lru_cache\n", + "from collections import Counter, defaultdict\n", + "from itertools import takewhile\n", + "import random" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "################ Types\n", + "\n", + "Board = int # A board is a bit string with a 1 bit for each space with a marble\n", + "State = int # A state is a board shifted left, with a bit indicated whose turn it is\n", + "Space = int # A space is an integer from 0 to N**2 - 1\n", + "Player = str # A character, '*' or 'o'\n", + "Direction = int # Direction of movement (left, right, up, down)\n", + "\n", + "################ Constants\n", + "\n", + "N = 6\n", + "black = '*'\n", + "white = 'o'\n", + "empty = '·'\n", + "\n", + "################ Boards\n", + "\n", + "def get(board, space) -> str:\n", + " \"\"\"Get the contents of space on board: black, white, or empty.\"\"\"\n", + " return (empty if board & (1 << space) == 0 else\n", + " black if (x_(space) + y_(space)) % 2 == 0 else\n", + " white)\n", + "\n", + "def remove(board, spaces) -> Board: \n", + " \"\"\"Return a new board with the marbles on spaces removed.\"\"\"\n", + " return board - sum(1 << s for s in spaces)\n", + "\n", + "################ States\n", + "\n", + "def start_state(removed=(0, 1)) -> State:\n", + " \"\"\"A new NxN board with a marble in all spaces, except `removed`,\n", + " which should be a tuple of two spaces (default upper-left corner).\"\"\"\n", + " full = sum(1 << s for s in range(N * N))\n", + " return encode_state(remove(full, removed), black)\n", + "\n", + "def encode_state(board, player) -> State:\n", + " \"\"\"Combine the board and the player into a single int.\"\"\"\n", + " return board * 2 + (player == black)\n", + "\n", + "def decode_state(state) -> Tuple[Board, Player]:\n", + " \"\"\"Split the state into board and player components.\"\"\"\n", + " return state // 2, (black if state & 1 else white)\n", + "\n", + "################ Spaces\n", + "\n", + "def space(x, y) -> int: return N * y + x\n", + "def x_(space) -> int: return space % N\n", + "def y_(space) -> int: return space // N\n", + "\n", + "def center() -> Tuple[Space, Space]:\n", + " \"\"\"Two spaces in the center of the board.\"\"\"\n", + " m = N // 2\n", + " return space(m, m), space(m - 1, m)\n", + "\n", + "################ Players\n", + "\n", + "def other(player) -> Player: return white if player == black else black\n", + "\n", + "################ Directions\n", + "\n", + "L, R, U, D = directions = (-1, +1, -N, +N)\n", + "\n", + "def go(space, direction, steps=1) -> Optional[Space]:\n", + " \"\"\"The space that is `steps` in `direction` from `space`,\n", + " or `None` if going in that direction ends up off the board.\"\"\"\n", + " x, y = x_(space), y_(space)\n", + " return (space + steps * direction \n", + " if (direction == L and steps <= x)\n", + " or (direction == R and steps < N - x)\n", + " or (direction == U and steps <= y)\n", + " or (direction == D and steps < N - y)\n", + " else None)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Displaying Game States\n", + "\n", + "The representation of a state is not very informative to look at, neither in decimal nor binary notation:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "137438953465" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "start_state()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'0b1111111111111111111111111111111111001'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bin(_)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I'll define a function, `state_str`, to create better-looking output for a state:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def state_str(state) -> str:\n", + " \"\"\"A string depicting the given state of the game.\"\"\"\n", + " board, player = decode_state(state)\n", + " def row(y): return f'{y + 1} | {\" \".join(get(board, space(x, y)) for x in range(N))}'\n", + " return (f' {\" \".join(columns[:N])} ({player} to move)\\n +{\"--\" * N}\\n' +\n", + " '\\n'.join(row(y) for y in range(N)))\n", + "\n", + "columns = 'abcdefghijklmnopqrstuvwxyz'" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " a b c d e f (* to move)\n", + " +------------\n", + "1 | · · * o * o\n", + "2 | o * o * o *\n", + "3 | * o * o * o\n", + "4 | o * o * o *\n", + "5 | * o * o * o\n", + "6 | o * o * o *\n" + ] + } + ], + "source": [ + "print(state_str(start_state()))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o * o * o\n", + "2 | o * o * o *\n", + "3 | * o * o * o\n", + "4 | o * · · o *\n", + "5 | * o * o * o\n", + "6 | o * o * o *\n" + ] + } + ], + "source": [ + "print(state_str(start_state(removed=center())))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Making Moves\n", + "\n", + "The next step is to define `legal_moves(state)` which returns a list of the available legal moves from a state, and `make_move(state, move)` which returns a new state that is the result of the chosen move. \n", + "\n", + "A move is a structure with fields for the starting space, the ending space, and the space(s) of the opponent marble(s) that were jumped. I'll divide the task of finding legal moves into two phases: first define all the `potential_moves` that start at a given square and go in a given direction. In that direction there can be a single jump, a double jump, etc.; as long as the jump doesn't go off the edge of the board. The jumps are processed in that order, so when we get to, say, a triple jump, we know that the single- and double-jumps were legal; that makes checking each jump for legality easier. The function `potential_moves` doesn't consider what marbles are on the board; the function `legal_moves` does. \n", + "\n", + "I have these two separate functions and put a `@lru_cache` on `potential_moves` so that `Move` objects are created only once (for each of the 36 spaces and 4 directions), not millions of times for each state. Because `Move`s are not created millions of times, I'm not worried about trying to make them be efficient bit strings." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "@dataclass\n", + "class Move:\n", + " \"\"\"A jumping move.\"\"\"\n", + " start: Space\n", + " jumped: List[Space]\n", + " end: Space\n", + " \n", + " def __str__(self):\n", + " start, end, *jumped = [f'{columns[x_(s)]}{y_(s) + 1}'\n", + " for s in (self.start, self.end, *self.jumped)]\n", + " return f'{start} → {end} jumping {\" and \".join(jumped)}'\n", + "\n", + "def legal_moves(state) -> List[Move]:\n", + " \"\"\"All possible moves for player from this state.\"\"\"\n", + " board, player = decode_state(state)\n", + " opponent = other(player)\n", + " def legal(move) -> bool:\n", + " return get(board, move.jumped[-1]) == opponent and get(board, move.end) == empty\n", + " return [move for start in range(N * N) if get(board, start) == player\n", + " for d in directions\n", + " for move in takewhile(legal, potential_moves(start, d))]\n", + " \n", + "@lru_cache(None)\n", + "def potential_moves(start: Space, d: Direction) -> List[Move]:\n", + " \"\"\"All potential moves starting from space and going in direction, shortest first.\"\"\"\n", + " moves = []\n", + " for steps in range(2, N, 2):\n", + " end = go(start, d, steps)\n", + " if end is not None:\n", + " moves.append(Move(start, list(range(start + d, end, 2 * d)), end))\n", + " return moves\n", + " \n", + "def make_move(state, move) -> State:\n", + " \"\"\"Make a move from this state to yield a new state.\"\"\"\n", + " board, player = decode_state(state)\n", + " board2 = remove(board | 1 << move.end, [move.start, *move.jumped])\n", + " return encode_state(board2, other(player))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are some examples of how these functions work:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "state1 = start_state()\n", + "state2 = make_move(state1, Move(start=12, jumped=[6], end=0))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " a b c d e f (* to move)\n", + " +------------\n", + "1 | · · * o * o\n", + "2 | o * o * o *\n", + "3 | * o * o * o\n", + "4 | o * o * o *\n", + "5 | * o * o * o\n", + "6 | o * o * o *\n" + ] + }, + { + "data": { + "text/plain": [ + "{'a3 → a1 jumping a2': Move(start=12, jumped=[6], end=0)}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(state_str(state1))\n", + "{str(m): m for m in legal_moves(state1)}" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * · * o * o\n", + "2 | · * o * o *\n", + "3 | · o * o * o\n", + "4 | o * o * o *\n", + "5 | * o * o * o\n", + "6 | o * o * o *\n" + ] + }, + { + "data": { + "text/plain": [ + "{'d1 → b1 jumping c1': Move(start=3, jumped=[2], end=1),\n", + " 'c2 → a2 jumping b2': Move(start=8, jumped=[7], end=6),\n", + " 'b3 → b1 jumping b2': Move(start=13, jumped=[7], end=1)}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(state_str(state2))\n", + "{str(m): m for m in legal_moves(state2)}" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Move(start=0, jumped=[6], end=12), Move(start=0, jumped=[6, 18], end=24)]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "potential_moves(space(0, 0), D)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Strategies and Playing Games\n", + "\n", + "We're now ready to play a game. The function `play_game` takes as input a dictionary with two keys, black and white, each mapped to a strategy for that player. A **strategy** is a function that takes a state as input and returns a move." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "Strategy = Callable[[State], Move]\n", + "\n", + "def play_game(strategies: Dict[Player, Strategy], start=None, verbose=True) -> Player:\n", + " \"\"\"Play a game between black and white, using their respective strategies.\n", + " Return the player that wins the game.\"\"\"\n", + " state = start or start_state()\n", + " while True:\n", + " board, player = decode_state(state)\n", + " if verbose: print(state_str(state))\n", + " moves = legal_moves(state)\n", + " if not moves:\n", + " if verbose: print(f'\\n{player} has no moves and loses')\n", + " return other(player)\n", + " else:\n", + " move = strategies[player](state)\n", + " if verbose: print(f'\\n{player} moves {move}\\n')\n", + " assert move in moves\n", + " state = make_move(state, move)\n", + " \n", + "def play_games(strategies, k, start=None) -> Counter:\n", + " \"\"\"Play k games silently; return a count of winning players.\"\"\"\n", + " return Counter(play_game(strategies, start, False) for _ in range(k))\n", + " \n", + "def random_strategy(state) -> Move:\n", + " \"\"\"Pick a random legal move.\"\"\"\n", + " return random.choice(legal_moves(state))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below black and white each play randomly:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " a b c d e f (* to move)\n", + " +------------\n", + "1 | · · * o * o\n", + "2 | o * o * o *\n", + "3 | * o * o * o\n", + "4 | o * o * o *\n", + "5 | * o * o * o\n", + "6 | o * o * o *\n", + "\n", + "* moves a3 → a1 jumping a2\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * · * o * o\n", + "2 | · * o * o *\n", + "3 | · o * o * o\n", + "4 | o * o * o *\n", + "5 | * o * o * o\n", + "6 | o * o * o *\n", + "\n", + "o moves d1 → b1 jumping c1\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o · · * o\n", + "2 | · * o * o *\n", + "3 | · o * o * o\n", + "4 | o * o * o *\n", + "5 | * o * o * o\n", + "6 | o * o * o *\n", + "\n", + "* moves c3 → c1 jumping c2\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o * · * o\n", + "2 | · * · * o *\n", + "3 | · o · o * o\n", + "4 | o * o * o *\n", + "5 | * o * o * o\n", + "6 | o * o * o *\n", + "\n", + "o moves e2 → a2 jumping d2 and b2\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o * · * o\n", + "2 | o · · · · *\n", + "3 | · o · o * o\n", + "4 | o * o * o *\n", + "5 | * o * o * o\n", + "6 | o * o * o *\n", + "\n", + "* moves a5 → a3 jumping a4\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o * · * o\n", + "2 | o · · · · *\n", + "3 | * o · o * o\n", + "4 | · * o * o *\n", + "5 | · o * o * o\n", + "6 | o * o * o *\n", + "\n", + "o moves e4 → e2 jumping e3\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o * · * o\n", + "2 | o · · · o *\n", + "3 | * o · o · o\n", + "4 | · * o * · *\n", + "5 | · o * o * o\n", + "6 | o * o * o *\n", + "\n", + "* moves b4 → b2 jumping b3\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o * · * o\n", + "2 | o * · · o *\n", + "3 | * · · o · o\n", + "4 | · · o * · *\n", + "5 | · o * o * o\n", + "6 | o * o * o *\n", + "\n", + "o moves c4 → e4 jumping d4\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o * · * o\n", + "2 | o * · · o *\n", + "3 | * · · o · o\n", + "4 | · · · · o *\n", + "5 | · o * o * o\n", + "6 | o * o * o *\n", + "\n", + "* moves b6 → b4 jumping b5\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o * · * o\n", + "2 | o * · · o *\n", + "3 | * · · o · o\n", + "4 | · * · · o *\n", + "5 | · · * o * o\n", + "6 | o · o * o *\n", + "\n", + "o moves b1 → b3 jumping b2\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * · * · * o\n", + "2 | o · · · o *\n", + "3 | * o · o · o\n", + "4 | · * · · o *\n", + "5 | · · * o * o\n", + "6 | o · o * o *\n", + "\n", + "* moves b4 → b2 jumping b3\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * · * · * o\n", + "2 | o * · · o *\n", + "3 | * · · o · o\n", + "4 | · · · · o *\n", + "5 | · · * o * o\n", + "6 | o · o * o *\n", + "\n", + "o moves d5 → b5 jumping c5\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * · * · * o\n", + "2 | o * · · o *\n", + "3 | * · · o · o\n", + "4 | · · · · o *\n", + "5 | · o · · * o\n", + "6 | o · o * o *\n", + "\n", + "* moves f2 → d2 jumping e2\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * · * · * o\n", + "2 | o * · * · ·\n", + "3 | * · · o · o\n", + "4 | · · · · o *\n", + "5 | · o · · * o\n", + "6 | o · o * o *\n", + "\n", + "o moves f1 → b1 jumping e1 and c1\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o · · · ·\n", + "2 | o * · * · ·\n", + "3 | * · · o · o\n", + "4 | · · · · o *\n", + "5 | · o · · * o\n", + "6 | o · o * o *\n", + "\n", + "* moves e5 → e3 jumping e4\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o · · · ·\n", + "2 | o * · * · ·\n", + "3 | * · · o * o\n", + "4 | · · · · · *\n", + "5 | · o · · · o\n", + "6 | o · o * o *\n", + "\n", + "o moves b1 → b3 jumping b2\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * · · · · ·\n", + "2 | o · · * · ·\n", + "3 | * o · o * o\n", + "4 | · · · · · *\n", + "5 | · o · · · o\n", + "6 | o · o * o *\n", + "\n", + "* moves d6 → b6 jumping c6\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * · · · · ·\n", + "2 | o · · * · ·\n", + "3 | * o · o * o\n", + "4 | · · · · · *\n", + "5 | · o · · · o\n", + "6 | o * · · o *\n", + "\n", + "o moves a2 → a4 jumping a3\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * · · · · ·\n", + "2 | · · · * · ·\n", + "3 | · o · o * o\n", + "4 | o · · · · *\n", + "5 | · o · · · o\n", + "6 | o * · · o *\n", + "\n", + "* moves b6 → b4 jumping b5\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * · · · · ·\n", + "2 | · · · * · ·\n", + "3 | · o · o * o\n", + "4 | o * · · · *\n", + "5 | · · · · · o\n", + "6 | o · · · o *\n", + "\n", + "o moves d3 → d1 jumping d2\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * · · o · ·\n", + "2 | · · · · · ·\n", + "3 | · o · · * o\n", + "4 | o * · · · *\n", + "5 | · · · · · o\n", + "6 | o · · · o *\n", + "\n", + "* moves b4 → b2 jumping b3\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * · · o · ·\n", + "2 | · * · · · ·\n", + "3 | · · · · * o\n", + "4 | o · · · · *\n", + "5 | · · · · · o\n", + "6 | o · · · o *\n", + "\n", + "o moves f3 → d3 jumping e3\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * · · o · ·\n", + "2 | · * · · · ·\n", + "3 | · · · o · ·\n", + "4 | o · · · · *\n", + "5 | · · · · · o\n", + "6 | o · · · o *\n", + "\n", + "* moves f6 → d6 jumping e6\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * · · o · ·\n", + "2 | · * · · · ·\n", + "3 | · · · o · ·\n", + "4 | o · · · · *\n", + "5 | · · · · · o\n", + "6 | o · · * · ·\n", + "\n", + "o moves f5 → f3 jumping f4\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * · · o · ·\n", + "2 | · * · · · ·\n", + "3 | · · · o · o\n", + "4 | o · · · · ·\n", + "5 | · · · · · ·\n", + "6 | o · · * · ·\n", + "\n", + "* has no moves and loses\n" + ] + }, + { + "data": { + "text/plain": [ + "'o'" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "randomly = {black: random_strategy, white: random_strategy}\n", + "\n", + "play_game(randomly)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can play 1000 random games and see who has an advantage:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Counter({'o': 512, '*': 488})" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "play_games(randomly, 1000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It looks like white has a slight advantage if both players play randomly. But what if they are more clever?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Playing Optimally\n", + "\n", + "As promised, here I define:\n", + "- `winner` to determine which player can force a win from a given state.\n", + "- `optimal_strategy` to play perfectly, taking advantage of the knowledge cached in `winner`." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "@lru_cache(None)\n", + "def winner(state) -> Player:\n", + " \"\"\"The player that can force a win from this state.\"\"\"\n", + " _, player = decode_state(state)\n", + " return (player if any(winner(make_move(state, move)) == player \n", + " for move in legal_moves(state))\n", + " else other(player))\n", + "\n", + "def optimal_strategy(state) -> Move:\n", + " \"\"\"Make a winning move if there is one.\"\"\"\n", + " _, player = decode_state(state)\n", + " for move in legal_moves(state):\n", + " if winner(make_move(state, move)) == player:\n", + " return move\n", + " return move" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Solving a Smaller Board: 4 by 4\n", + "\n", + "Before starting a time-consuming computation of the winner for a 6 by 6 board, I'd like to quickly validate the program on a smaller board; let's say 4 by 4. But I can't simply execute the statement `N = 4`, because other parts of the program depend on the value of `N`: the \"up\" and \"down\" directions `U` and `D`, as well as the caches for `potential_moves` and `winner`. So I'll introduce the function `set_N`:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "def set_N(n):\n", + " \"\"\"Use an n x n board; set global variables accordingly.\"\"\"\n", + " global N, R, L, U, D, directions\n", + " if n != N:\n", + " N = n\n", + " L, R, U, D = directions = (-1, +1, -N, +N)\n", + " potential_moves.cache_clear()\n", + " winner.cache_clear()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can solve 4 by 4 Konane:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "('o', 'o')" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set_N(4)\n", + "\n", + "winner(start_state()), winner(start_state(removed=center()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That says that **white is the winner on a 4 by 4 board, from either starting position**.\n", + "\n", + "Here's an optimally-played 4 by 4 game:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " a b c d (* to move)\n", + " +--------\n", + "1 | · · * o\n", + "2 | o * o *\n", + "3 | * o * o\n", + "4 | o * o *\n", + "\n", + "* moves a3 → a1 jumping a2\n", + "\n", + " a b c d (o to move)\n", + " +--------\n", + "1 | * · * o\n", + "2 | · * o *\n", + "3 | · o * o\n", + "4 | o * o *\n", + "\n", + "o moves d1 → b1 jumping c1\n", + "\n", + " a b c d (* to move)\n", + " +--------\n", + "1 | * o · ·\n", + "2 | · * o *\n", + "3 | · o * o\n", + "4 | o * o *\n", + "\n", + "* moves c3 → c1 jumping c2\n", + "\n", + " a b c d (o to move)\n", + " +--------\n", + "1 | * o * ·\n", + "2 | · * · *\n", + "3 | · o · o\n", + "4 | o * o *\n", + "\n", + "o moves b1 → d1 jumping c1\n", + "\n", + " a b c d (* to move)\n", + " +--------\n", + "1 | * · · o\n", + "2 | · * · *\n", + "3 | · o · o\n", + "4 | o * o *\n", + "\n", + "* has no moves and loses\n" + ] + }, + { + "data": { + "text/plain": [ + "'o'" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "optimally = {black: optimal_strategy, white: optimal_strategy}\n", + "\n", + "play_game(optimally)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As expected, white wins.\n", + "\n", + "Although white will win every game with optimal play, if white plays randomly, an optimal black player can win a majority of games:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Counter({'*': 541, 'o': 459})" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "play_games({black: optimal_strategy, white: random_strategy}, 1000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Solving a 5 by 5 Board\n", + "\n", + "We can repeat the exercise on a 5 by 5 board. This time I will check how long it takes to solve:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 668 ms, sys: 3.7 ms, total: 671 ms\n", + "Wall time: 671 ms\n" + ] + }, + { + "data": { + "text/plain": [ + "('*', '*')" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set_N(5)\n", + "\n", + "%time winner(start_state()), winner(start_state(removed=center()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With a **5 by 5 board, black wins from either starting position**. The computation takes about 2/3 of a second." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Solving Mel's 6 by 6 Board\n", + "\n", + "Finally we are ready to solve the 6 by 6 board. A 6 by 6 board has 211 = 2048 times more states than a 5 by 5 board, and each state is bigger and thus will take more time to process. So I estimate it will take about a half hour to fill the `winner` cache for a 6 by 6 board. Let's find out (one starting position at a time):" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 3min 55s, sys: 439 ms, total: 3min 55s\n", + "Wall time: 3min 58s\n" + ] + }, + { + "data": { + "text/plain": [ + "'o'" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set_N(6)\n", + "\n", + "%time winner(start_state())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So **white wins a 6 by 6 game** when we start with corner marbles removed. And the computation was a **lot faster** than I guessed! \n", + "\n", + "How many states were explored? The `cache_info` method will tell us:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "CacheInfo(hits=8397349, misses=10071659, maxsize=None, currsize=10071659)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "winner.cache_info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `currsize` field is the number of states in the cache; about 10 million. \n", + "\n", + "Now let's see who wins if we start with the center marbles removed:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1h 10min 59s, sys: 7.85 s, total: 1h 11min 7s\n", + "Wall time: 1h 13min 34s\n" + ] + }, + { + "data": { + "text/plain": [ + "'o'" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time winner(start_state(removed=center()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**White wins there too**, but my celebration over the speed of the program was a bit premature–that took a full hour, double my estimate. We can count the total number of states from both starting positions:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "CacheInfo(hits=188641148, misses=145177949, maxsize=None, currsize=145177949)" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "winner.cache_info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That's 145 million states. I guess it makes sense that there would be more reachable states starting from a position with the center pieces removed, because we can spread to any corner. It also makes sense that the corner-removed board leads to a search space that is more tree-like (the ratio of hits/misses–that is, the ratio of paths that lead to a state a second time to total states–is 0.8) and the center-removed board leads to a search space that is more graph-like (the ratio is 1.3).\n", + "\n", + "Here's an optimally-played game (which we expect white to win):" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " a b c d e f (* to move)\n", + " +------------\n", + "1 | · · * o * o\n", + "2 | o * o * o *\n", + "3 | * o * o * o\n", + "4 | o * o * o *\n", + "5 | * o * o * o\n", + "6 | o * o * o *\n", + "\n", + "* moves a3 → a1 jumping a2\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * · * o * o\n", + "2 | · * o * o *\n", + "3 | · o * o * o\n", + "4 | o * o * o *\n", + "5 | * o * o * o\n", + "6 | o * o * o *\n", + "\n", + "o moves d1 → b1 jumping c1\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o · · * o\n", + "2 | · * o * o *\n", + "3 | · o * o * o\n", + "4 | o * o * o *\n", + "5 | * o * o * o\n", + "6 | o * o * o *\n", + "\n", + "* moves a5 → a3 jumping a4\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o · · * o\n", + "2 | · * o * o *\n", + "3 | * o * o * o\n", + "4 | · * o * o *\n", + "5 | · o * o * o\n", + "6 | o * o * o *\n", + "\n", + "o moves f1 → d1 jumping e1\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o · o · ·\n", + "2 | · * o * o *\n", + "3 | * o * o * o\n", + "4 | · * o * o *\n", + "5 | · o * o * o\n", + "6 | o * o * o *\n", + "\n", + "* moves c5 → a5 jumping b5\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o · o · ·\n", + "2 | · * o * o *\n", + "3 | * o * o * o\n", + "4 | · * o * o *\n", + "5 | * · · o * o\n", + "6 | o * o * o *\n", + "\n", + "o moves c2 → a2 jumping b2\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o · o · ·\n", + "2 | o · · * o *\n", + "3 | * o * o * o\n", + "4 | · * o * o *\n", + "5 | * · · o * o\n", + "6 | o * o * o *\n", + "\n", + "* moves e5 → c5 jumping d5\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o · o · ·\n", + "2 | o · · * o *\n", + "3 | * o * o * o\n", + "4 | · * o * o *\n", + "5 | * · * · · o\n", + "6 | o * o * o *\n", + "\n", + "o moves a2 → a4 jumping a3\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o · o · ·\n", + "2 | · · · * o *\n", + "3 | · o * o * o\n", + "4 | o * o * o *\n", + "5 | * · * · · o\n", + "6 | o * o * o *\n", + "\n", + "* moves a5 → a3 jumping a4\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o · o · ·\n", + "2 | · · · * o *\n", + "3 | * o * o * o\n", + "4 | · * o * o *\n", + "5 | · · * · · o\n", + "6 | o * o * o *\n", + "\n", + "o moves e2 → c2 jumping d2\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o · o · ·\n", + "2 | · · o · · *\n", + "3 | * o * o * o\n", + "4 | · * o * o *\n", + "5 | · · * · · o\n", + "6 | o * o * o *\n", + "\n", + "* moves d4 → d2 jumping d3\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o · o · ·\n", + "2 | · · o * · *\n", + "3 | * o * · * o\n", + "4 | · * o · o *\n", + "5 | · · * · · o\n", + "6 | o * o * o *\n", + "\n", + "o moves f3 → f1 jumping f2\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o · o · o\n", + "2 | · · o * · ·\n", + "3 | * o * · * ·\n", + "4 | · * o · o *\n", + "5 | · · * · · o\n", + "6 | o * o * o *\n", + "\n", + "* moves f4 → d4 jumping e4\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o · o · o\n", + "2 | · · o * · ·\n", + "3 | * o * · * ·\n", + "4 | · * o * · ·\n", + "5 | · · * · · o\n", + "6 | o * o * o *\n", + "\n", + "o moves c4 → a4 jumping b4\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o · o · o\n", + "2 | · · o * · ·\n", + "3 | * o * · * ·\n", + "4 | o · · * · ·\n", + "5 | · · * · · o\n", + "6 | o * o * o *\n", + "\n", + "* moves f6 → f4 jumping f5\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o · o · o\n", + "2 | · · o * · ·\n", + "3 | * o * · * ·\n", + "4 | o · · * · *\n", + "5 | · · * · · ·\n", + "6 | o * o * o ·\n", + "\n", + "o moves c2 → e2 jumping d2\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o · o · o\n", + "2 | · · · · o ·\n", + "3 | * o * · * ·\n", + "4 | o · · * · *\n", + "5 | · · * · · ·\n", + "6 | o * o * o ·\n", + "\n", + "* moves d6 → f6 jumping e6\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o · o · o\n", + "2 | · · · · o ·\n", + "3 | * o * · * ·\n", + "4 | o · · * · *\n", + "5 | · · * · · ·\n", + "6 | o * o · · *\n", + "\n", + "o moves e2 → e4 jumping e3\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o · o · o\n", + "2 | · · · · · ·\n", + "3 | * o * · · ·\n", + "4 | o · · * o *\n", + "5 | · · * · · ·\n", + "6 | o * o · · *\n", + "\n", + "* moves b6 → d6 jumping c6\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o · o · o\n", + "2 | · · · · · ·\n", + "3 | * o * · · ·\n", + "4 | o · · * o *\n", + "5 | · · * · · ·\n", + "6 | o · · * · *\n", + "\n", + "o moves a4 → a2 jumping a3\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o · o · o\n", + "2 | o · · · · ·\n", + "3 | · o * · · ·\n", + "4 | · · · * o *\n", + "5 | · · * · · ·\n", + "6 | o · · * · *\n", + "\n", + "* moves c3 → a3 jumping b3\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | * o · o · o\n", + "2 | o · · · · ·\n", + "3 | * · · · · ·\n", + "4 | · · · * o *\n", + "5 | · · * · · ·\n", + "6 | o · · * · *\n", + "\n", + "o moves a2 → a4 jumping a3\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | * o · o · o\n", + "2 | · · · · · ·\n", + "3 | · · · · · ·\n", + "4 | o · · * o *\n", + "5 | · · * · · ·\n", + "6 | o · · * · *\n", + "\n", + "* moves a1 → e1 jumping b1 and d1\n", + "\n", + " a b c d e f (o to move)\n", + " +------------\n", + "1 | · · · · * o\n", + "2 | · · · · · ·\n", + "3 | · · · · · ·\n", + "4 | o · · * o *\n", + "5 | · · * · · ·\n", + "6 | o · · * · *\n", + "\n", + "o moves f1 → d1 jumping e1\n", + "\n", + " a b c d e f (* to move)\n", + " +------------\n", + "1 | · · · o · ·\n", + "2 | · · · · · ·\n", + "3 | · · · · · ·\n", + "4 | o · · * o *\n", + "5 | · · * · · ·\n", + "6 | o · · * · *\n", + "\n", + "* has no moves and loses\n" + ] + }, + { + "data": { + "text/plain": [ + "'o'" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "play_game(optimally)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Summary\n", + "\n", + "Here's a chart of who has a forced win for various values of **N**, in the cases where the two marbles are removed from the corner and from the center:\n", + "\n", + "|N|Corner|Center|\n", + "|-|------|------|\n", + "|4|white|white|\n", + "|5|black|black|\n", + "|6|white|white|\n", + "|7+|?????|?????|\n", + "\n", + "# Further Work\n", + "\n", + "I'll stop here, but here are some things that you could look into if you are interested:\n", + "\n", + "- **Make it prettier**: Use graphics for the output, e.g. ⚪️ and ⚫️ instead of 'o' and '*'.\n", + "- **Make it interactive**: allow players to click on the board to make moves and set up positions. An interactive web page would be great, but loading 145 million positions into it would take a while. But you could trim that down: the 145 million states include the exploration of multiple paths for the optimal player, until a winning path is found. You could eliminate all branches of the tree except for one winning choice at each choice point for the optimal player (and all responses for the opponent).\n", + "- **Use a faster language**: Statically-typed languages like Java or C++ or Go can typically execute faster than Python. Of particular interest for this program, in Python 3 the `int` returned by `start_state()` uses 32 bytes of memory. There is overhead to store the reference count, the type of the object, etc. Other languages can represent a state in just 8 bytes, as a 64-bit integer.\n", + "- **Use concurrency**: Python is not a convenient language for taking advantage of multiple CPUs, so I didn't try to parallelize the search. But you could.\n", + "- **Find heuristics for good but non-optimal play**: No matter how clever we get, there will be some value of **N** beyond which solving the game is impractical. But we could still achieve good play by doing alpha-beta search to a certain cut-off level and using an evaluation function to rank the resulting game states. The evaluation function could be hand-crafted from features or learned with machine learning. Alternatively, Monte Carlo tree search could be used; this does not require an evaluation function.\n", + "- **Explore the computational complexity**: My friend Bob Hearn has a nice [paper](https://www.semanticscholar.org/paper/Amazons%2C-Konane%2C-and-Cross-Purposes-are-Hearn/89f291d89c09de98a14bb265e996cd008ddd4e92) proving that Konane is PSPACE-complete. What else can be said?\n", + "- **Apply combinatorial game theory**: A [paper](https://www.cs.cmu.edu/~sleator/papers/Sprouts.htm) by several authors including my friend Danny Sleator shows how to use combinatorial game theory to break a game state into components that can be analyzed separately and then combined. Using these techniques allowed them to solve the game of Sprouts for much larger sizes than had been done before; I suspect the same approach would work for Konane. Whether combinatorial game theory would work for Konane or not, it is a fascinating piece of mathematics to know about. As Bob Hearn said in [a review](http://webdocs.cs.ualberta.ca/~hayward/cgt/asn/hearn-WW.pdf) of the classic [Winning Ways for Your Mathematical Plays](https://www.amazon.com/Elwyn-R-Berlekamp/e/B001HQ1K5A/ref=dp_byline_cont_pop_book_1), \"The theory hinges on an amazing discovery of [John] Conway. In a nutshell, the natural unification of Cantor’s construction of the ordinals with Dedekind’s construction of the reals yields, in one stroke, not only the fabulous number system that Donald Knuth dubbed the surreal numbers, but also a natural framework for combinatorial games. It’s as if the the mathematics we all know, that underpins all of science, were suddenly revealed to be a just special case of games: the universe is telling us that ultimately, it’s all about play.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Appendix: Tests\n", + "\n", + "Some simple tests of the low-level functions:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def test():\n", + " set_N(6)\n", + " state = start_state()\n", + " board, player = decode_state(state)\n", + " assert state == encode_state(board, player)\n", + " assert player == black\n", + " assert get(board, 0) == empty and get(board, 2) == black and get(board, 3) == white\n", + " \n", + " board2 = remove(board, [3, 4])\n", + " assert get(board2, 3) == empty\n", + " \n", + " s = space(0, 0)\n", + " assert (go(s, R), go(s, L), go(s, U), go(s, D)) == (1, None, None, 6)\n", + " \n", + " s = space(2, 1)\n", + " assert s == 8 and x_(s) == 2 and y_(s) == 1\n", + " assert go(s, R) == space(3, 1)\n", + " assert go(s, L) == space(1, 1)\n", + " assert go(s, U) == space(2, 0)\n", + " assert go(s, D) == space(2, 2)\n", + " assert go(s, L, 2) == space(0, 1)\n", + " assert go(s, L, 3) == None\n", + " \n", + " assert other(black) == white and other(white) == black\n", + " \n", + " assert potential_moves(0, R) == [Move(start=0, jumped=[1], end=2), \n", + " Move(start=0, jumped=[1, 3], end=4)]\n", + " return True\n", + "\n", + "test()" + ] + } + ], + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/README.md b/README.md index c11c480..d0f000d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -
Peter Norvig
MIT License
2015-2020
@@ -26,23 +25,38 @@ For each notebook you can: - Hover over the title to **view** a description. + +|Run|Year|Recent (2021)| +|---|---|---| +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Advent-2020.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FAdvent-2020.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FAdvent-2020.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Advent-2020.ipynb) | 2021 | Advent of Code 2021 | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Konane.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FKonane.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FKonane.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Konane.ipynb) | 2021 | Mel's Konane Board | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/KenKen.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FKenKen.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FKenKen.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/KenKen.ipynb) | 2021 | KenKen (Sudoku-like Puzzle) | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/StarBattle.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FStarBattle.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FStarBattle.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/StarBattle.ipynb) | 2021 | Star Battle (Sudoku-like Puzzle) | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/SudokuJava.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FSudokuJava.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FSudokuJava.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/SudokuJava.ipynb) | 2021 | Sudoku: 100,000 puzzles/second in Java | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/CrossProduct.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FCrossProduct.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FCrossProduct.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/CrossProduct.ipynb) | 2021 | CrossProduct | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/SplitStates.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FSplitStates.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FSplitStates.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/SplitStates.ipynb) | 2021 | Split the States | + + |Run|Year|Programming Examples| |---|---|---| -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Advent-2020.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FAdvent-2020.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FAdvent-2020.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Advent-2020.ipynb) | 2020 | Advent of Code 2020 | -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Advent-2018.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FAdvent-2018.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FAdvent-2018.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Advent-2018.ipynb) | 2018 | Advent of Code 2018 | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Advent-2020.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FAdvent-2020.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FAdvent-2020.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Advent-2020.ipynb) | 2021 | Advent of Code 2021 | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Advent-2020.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FAdvent-2020.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FAdvent-2020.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Advent-2020.ipynb) | 2020 | Advent of Code 2020 | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Advent-2018.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FAdvent-2018.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FAdvent-2018.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Advent-2018.ipynb) | 2018 | Advent of Code 2018 | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Advent%202017.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FAdvent%202017.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FAdvent%202017.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Advent%202017.ipynb) | 2017 | Advent of Code 2017 | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Advent%20of%20Code.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FAdvent%20of%20Code.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FAdvent%20of%20Code.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Advent%20of%20Code.ipynb) | 2016 | Advent of Code 2016 | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Beal.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FBeal.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FBeal.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Beal.ipynb) | 2018 | Beal's Conjecture Revisited | -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Bike%20Speed%20versus%20Grade.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FBike%20Speed%20versus%20Grade.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FBike%20Speed%20versus%20Grade.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Bike%20Speed%20versus%20Grade.ipynb) | 2020 | Bicycling Statistics | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Bike-Stats.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FBike-Stats.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FBike-Stats.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Bike-Stats.ipynb) | 2020 | Bicycling Statistics | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Cant-Stop.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FCant-Stop.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FCant-Stop.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Cant-Stop.ipynb) | 2018 | Can't Stop | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Sierpinski.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FSierpinski.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FSierpinski.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Sierpinski.ipynb) | 2019 | Chaos with Triangles | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Life.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FLife.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FLife.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Life.ipynb) | 2017 | Conway's Game of Life | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Maze.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FMaze.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FMaze.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Maze.ipynb) | 2020 | Generating and Solving Mazes | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Konane.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FKonane.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FKonane.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Konane.ipynb) | 2021 | Mel's Konane Board | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/PhotoFocalLengths.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FPhotoFocalLengths.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FPhotoFocalLengths.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/PhotoFocalLengths.ipynb) | 2020 | Photo Focal Lengths | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Pickleball.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FPickleball.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FPickleball.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Pickleball.ipynb) | 2018 | Pickleball Tournament | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Project%20Euler%20Utils.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FProject%20Euler%20Utils.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FProject%20Euler%20Utils.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Project%20Euler%20Utils.ipynb) | 2017 | Project Euler Utilities | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Electoral%20Votes.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FElectoral%20Votes.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FElectoral%20Votes.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Electoral%20Votes.ipynb) | 2020 | Tracking Trump: Electoral Votes | + |Run|Year|Logic and Number Puzzles| |---|---|---| | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Cryptarithmetic.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FCryptarithmetic.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FCryptarithmetic.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Cryptarithmetic.ipynb) | 2014 | Cryptarithmetic | @@ -61,19 +75,6 @@ For each notebook you can: | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/xkcd1313.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2Fxkcd1313.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2Fxkcd1313.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/xkcd1313.ipynb) | 2015 | xkcd 1313: Regex Golf | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/xkcd1313-part2.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2Fxkcd1313-part2.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2Fxkcd1313-part2.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/xkcd1313-part2.ipynb) | 2015 | xkcd 1313: Regex Golf (Part 2: Infinite Problems) | -|Run|Year|The Riddler (from 538)| -|---|---|---| -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Riddler%20Battle%20Royale.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FRiddler%20Battle%20Royale.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FRiddler%20Battle%20Royale.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Riddler%20Battle%20Royale.ipynb) | 2017 | Battle Royale | -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/CrossProduct.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FCrossProduct.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FCrossProduct.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/CrossProduct.ipynb) | 2021 | CrossProduct | -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/flipping.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2Fflipping.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2Fflipping.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/flipping.ipynb) | 2020 | Flipping Cards; A Guessing Game | -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/RiddlerLottery.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FRiddlerLottery.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FRiddlerLottery.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/RiddlerLottery.ipynb) | 2019 | Lottery | -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/NightKing.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FNightKing.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FNightKing.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/NightKing.ipynb) | 2019 | How Many Soldiers to Beat the Night King? | -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Mean%20Misanthrope%20Density.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FMean%20Misanthrope%20Density.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FMean%20Misanthrope%20Density.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Mean%20Misanthrope%20Density.ipynb) | 2017 | Misanthropic Neighbors | -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Orderable%20Cards.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FOrderable%20Cards.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FOrderable%20Cards.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Orderable%20Cards.ipynb) | 2018 | Properly Ordered Card Hands | -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/SplitStates.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FSplitStates.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FSplitStates.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/SplitStates.ipynb) | 2021 | Split the States | -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/TourDe538.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FTourDe538.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FTourDe538.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/TourDe538.ipynb) | 2020 | Tour de 538 | -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/TwelveBalls.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FTwelveBalls.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FTwelveBalls.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/TwelveBalls.ipynb) | 2020 | Weighing Twelve Balls | -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/war.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2Fwar.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2Fwar.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/war.ipynb) | 2020 | War. What is it Good For? | |Run|Year|Word Puzzles| |---|---|---| @@ -92,6 +93,7 @@ For each notebook you can: | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Portmantout.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FPortmantout.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FPortmantout.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Portmantout.ipynb) | 2020 | World's Shortest Portmantout Word | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/xkcd-Name-Dominoes.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2Fxkcd-Name-Dominoes.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2Fxkcd-Name-Dominoes.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/xkcd-Name-Dominoes.ipynb) | 2018 | xkcd 1970: Name Dominoes | + |Run|Year|Probability and Uncertainty| |---|---|---| | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Probability.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FProbability.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FProbability.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Probability.ipynb) | 2018 | A Concrete Introduction to Probability | @@ -105,19 +107,35 @@ For each notebook you can: | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/WWW.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FWWW.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FWWW.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/WWW.ipynb) | 2019 | WWW: Who Will Win (NBA Title)? | +|Run|Year|The Riddler (from 538)| +|---|---|---| +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Riddler%20Battle%20Royale.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FRiddler%20Battle%20Royale.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FRiddler%20Battle%20Royale.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Riddler%20Battle%20Royale.ipynb) | 2017 | Battle Royale | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/CrossProduct.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FCrossProduct.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FCrossProduct.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/CrossProduct.ipynb) | 2021 | CrossProduct | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/flipping.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2Fflipping.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2Fflipping.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/flipping.ipynb) | 2020 | Flipping Cards; A Guessing Game | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/RiddlerLottery.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FRiddlerLottery.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FRiddlerLottery.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/RiddlerLottery.ipynb) | 2019 | Lottery | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/NightKing.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FNightKing.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FNightKing.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/NightKing.ipynb) | 2019 | How Many Soldiers to Beat the Night King? | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Mean%20Misanthrope%20Density.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FMean%20Misanthrope%20Density.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FMean%20Misanthrope%20Density.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Mean%20Misanthrope%20Density.ipynb) | 2017 | Misanthropic Neighbors | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Orderable%20Cards.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FOrderable%20Cards.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FOrderable%20Cards.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Orderable%20Cards.ipynb) | 2018 | Properly Ordered Card Hands | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/SplitStates.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FSplitStates.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FSplitStates.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/SplitStates.ipynb) | 2021 | Split the States | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/TourDe538.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FTourDe538.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FTourDe538.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/TourDe538.ipynb) | 2020 | Tour de 538 | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/TwelveBalls.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FTwelveBalls.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FTwelveBalls.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/TwelveBalls.ipynb) | 2020 | Weighing Twelve Balls | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/war.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2Fwar.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2Fwar.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/war.ipynb) | 2020 | War. What is it Good For? | + + |Run|Year|Computer Science Algorithms and Concepts| |---|---|---| -| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Snobol.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FSnobol.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FSnobol.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Snobol.ipynb) | 2017 | Bad Grade, Good Experience | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/BASIC.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FBASIC.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FBASIC.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/BASIC.ipynb) | 2017 | BASIC Interpreter | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Convex%20Hull.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FConvex%20Hull.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FConvex%20Hull.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Convex%20Hull.ipynb) | 2017 | Convex Hull Problem | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/How%20To%20Count%20Things.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FHow%20To%20Count%20Things.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FHow%20To%20Count%20Things.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/How%20To%20Count%20Things.ipynb) | 2020 | How to Count Things | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/StableMatching.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FStableMatching.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FStableMatching.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/StableMatching.ipynb) | 2020 | Stable Matching Problem | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Differentiation.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FDifferentiation.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FDifferentiation.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Differentiation.ipynb) | 2017 | Symbolic Algebra, Simplification, and Differentiation | +| [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/Snobol.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FSnobol.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FSnobol.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/Snobol.ipynb) | 2017 | Snobol: Bad Grade, Good Experience | | [c](https://colab.research.google.com/github/norvig/pytudes/blob/main/ipynb/TSP.ipynb) [d](https://beta.deepnote.org/launch?template=python_3.6&url=https%3A%2F%2Fgithub.com%2Fnorvig%2Fpytudes%2Fblob%2Fmain%2Fipynb%2FTSP.ipynb) [m](https://mybinder.org/v2/gh/norvig/pytudes/main?filepath=ipynb%2FTSP.ipynb) [n](https://nbviewer.jupyter.org/github/norvig/pytudes/blob/main/ipynb/TSP.ipynb) | 2018 | Traveling Salesperson Problem | - # Index of Python Files + + |File|Description|Documentation| |---|---|---| |[beal.py](/py/beal.py)|*Search for counterexamples to Beal's Conjecture*|[documentation](http://norvig.com/beal.html)| diff --git a/konane.jpg b/konane.jpg new file mode 100644 index 0000000000000000000000000000000000000000..49db431f0d1d0991f07160e875390f1728ab1543 GIT binary patch literal 203447 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%0D@VPDqD>_&wqg7#C> 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%0Dqe$Nv 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