Created
June 7, 2019 15:31
-
-
Save nicktimko/b55fd014fe665a58675e978f3d88b022 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"sboard = \"\"\"\n", | |
"53.|.7.|...\n", | |
"6..|195|...\n", | |
".98|...|.6.\n", | |
"-----------\n", | |
"8..|.6.|..3\n", | |
"4..|8.3|..1\n", | |
"7..|.2.|..6\n", | |
"-----------\n", | |
".6.|...|28.\n", | |
"...|419|..5\n", | |
"...|.8.|.79\n", | |
"\"\"\"\n", | |
"\n", | |
"board = []\n", | |
"for line in sboard.splitlines():\n", | |
" if not line.strip():\n", | |
" continue\n", | |
" if \"---\" in line:\n", | |
" continue\n", | |
" board.append(list(c for c in line if c != '|'))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[['5', '3', '.', '.', '7', '.', '.', '.', '.'],\n", | |
" ['6', '.', '.', '1', '9', '5', '.', '.', '.'],\n", | |
" ['.', '9', '8', '.', '.', '.', '.', '6', '.'],\n", | |
" ['8', '.', '.', '.', '6', '.', '.', '.', '3'],\n", | |
" ['4', '.', '.', '8', '.', '3', '.', '.', '1'],\n", | |
" ['7', '.', '.', '.', '2', '.', '.', '.', '6'],\n", | |
" ['.', '6', '.', '.', '.', '.', '2', '8', '.'],\n", | |
" ['.', '.', '.', '4', '1', '9', '.', '.', '5'],\n", | |
" ['.', '.', '.', '.', '8', '.', '.', '7', '9']]" | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"board" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def lr(*args):\n", | |
" return list(range(*args))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# elements = [0 for _ in range(9 * 9)]\n", | |
"boxes = [lr(0, 3) + lr(9, 12) + lr(18, 21) for x in range(9)]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[[0, 1, 2, 3, 4, 5, 6, 7, 8],\n", | |
" [9, 10, 11, 12, 13, 14, 15, 16, 17],\n", | |
" [18, 19, 20, 21, 22, 23, 24, 25, 26],\n", | |
" [27, 28, 29, 30, 31, 32, 33, 34, 35],\n", | |
" [36, 37, 38, 39, 40, 41, 42, 43, 44],\n", | |
" [45, 46, 47, 48, 49, 50, 51, 52, 53],\n", | |
" [54, 55, 56, 57, 58, 59, 60, 61, 62],\n", | |
" [63, 64, 65, 66, 67, 68, 69, 70, 71],\n", | |
" [72, 73, 74, 75, 76, 77, 78, 79, 80]]" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"rows = [list(range(9*x, 9*x+9)) for x in range(9)]\n", | |
"rows" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[[0, 9, 18, 27, 36, 45, 54, 63, 72],\n", | |
" [1, 10, 19, 28, 37, 46, 55, 64, 73],\n", | |
" [2, 11, 20, 29, 38, 47, 56, 65, 74],\n", | |
" [3, 12, 21, 30, 39, 48, 57, 66, 75],\n", | |
" [4, 13, 22, 31, 40, 49, 58, 67, 76],\n", | |
" [5, 14, 23, 32, 41, 50, 59, 68, 77],\n", | |
" [6, 15, 24, 33, 42, 51, 60, 69, 78],\n", | |
" [7, 16, 25, 34, 43, 52, 61, 70, 79],\n", | |
" [8, 17, 26, 35, 44, 53, 62, 71, 80]]" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"cols = [list(range(x, 81, 9)) for x in range(9)]\n", | |
"cols" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"vbg = [set().union(*[rows[i] for i in range(3*j, 3*j+3)]) for j in range(3)]\n", | |
"hbg = [set().union(*[cols[i] for i in range(3*j, 3*j+3)]) for j in range(3)]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"boxes = [sorted(vbg[i] & hbg[j])\n", | |
" for i in range(3) \n", | |
" for j in range(3)]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[[0, 1, 2, 9, 10, 11, 18, 19, 20],\n", | |
" [3, 4, 5, 12, 13, 14, 21, 22, 23],\n", | |
" [6, 7, 8, 15, 16, 17, 24, 25, 26],\n", | |
" [27, 28, 29, 36, 37, 38, 45, 46, 47],\n", | |
" [30, 31, 32, 39, 40, 41, 48, 49, 50],\n", | |
" [33, 34, 35, 42, 43, 44, 51, 52, 53],\n", | |
" [54, 55, 56, 63, 64, 65, 72, 73, 74],\n", | |
" [57, 58, 59, 66, 67, 68, 75, 76, 77],\n", | |
" [60, 61, 62, 69, 70, 71, 78, 79, 80]]" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"boxes" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table><tr><td><b>5</b></td><td><b>3</b></td><td>-</td><td>-</td><td><b>7</b></td><td>-</td><td>-</td><td>-</td><td>-</td></tr><tr><td><b>6</b></td><td>-</td><td>-</td><td><b>1</b></td><td><b>9</b></td><td><b>5</b></td><td>-</td><td>-</td><td>-</td></tr><tr><td>-</td><td><b>9</b></td><td><b>8</b></td><td>-</td><td>-</td><td>-</td><td>-</td><td><b>6</b></td><td>-</td></tr><tr><td><b>8</b></td><td>-</td><td>-</td><td>-</td><td><b>6</b></td><td>-</td><td>-</td><td>-</td><td><b>3</b></td></tr><tr><td><b>4</b></td><td>-</td><td>-</td><td><b>8</b></td><td>-</td><td><b>3</b></td><td>-</td><td>-</td><td><b>1</b></td></tr><tr><td><b>7</b></td><td>-</td><td>-</td><td>-</td><td><b>2</b></td><td>-</td><td>-</td><td>-</td><td><b>6</b></td></tr><tr><td>-</td><td><b>6</b></td><td>-</td><td>-</td><td>-</td><td>-</td><td><b>2</b></td><td><b>8</b></td><td>-</td></tr><tr><td>-</td><td>-</td><td>-</td><td><b>4</b></td><td><b>1</b></td><td><b>9</b></td><td>-</td><td>-</td><td><b>5</b></td></tr><tr><td>-</td><td>-</td><td>-</td><td>-</td><td><b>8</b></td><td>-</td><td>-</td><td><b>7</b></td><td><b>9</b></td></tr></table>" | |
], | |
"text/plain": [ | |
"[<5>,\n", | |
" <3>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <7>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" <5>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <9>,\n", | |
" <8>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" <8>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <3>,\n", | |
" <4>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <8>,\n", | |
" 0 ,\n", | |
" <3>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <1>,\n", | |
" <7>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <2>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <2>,\n", | |
" <8>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <4>,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <5>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <8>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <7>,\n", | |
" <9>]" | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"givens = [int(c) if c != '.' else 0 for c in sboard if c in '123456789.']\n", | |
"len(givens)\n", | |
"\n", | |
"class Cell(object):\n", | |
" def __init__(self, grid, index, given: int = 0):\n", | |
" self.given = bool(given) # hard truth\n", | |
" self.solution = given # (possible) solution\n", | |
" self.grid = grid\n", | |
" self.index = index\n", | |
" self.candidates = []\n", | |
" \n", | |
" self.constraints = [c for c in self.grid.constraints if index in c]\n", | |
"# self.constraints = \n", | |
" \n", | |
" def __repr__(self) -> str:\n", | |
"# return f\"<{self.__class__.__name__} given={self.given} solution={self.solution}>\"\n", | |
" if self.given:\n", | |
" return f\"<{self.solution}>\"\n", | |
" return f\" {self.solution} \"\n", | |
" \n", | |
" def compute_candidates(self):\n", | |
" if self.solution:\n", | |
" self.candidates = {self.solution}\n", | |
" return\n", | |
" \n", | |
" candidates = set(range(1, 10))\n", | |
" for const_set in self.constraints: # row/col/box\n", | |
" for const in const_set:\n", | |
" target_cell = self.grid[const]\n", | |
" candidates.discard(target_cell.solution) # if empty, try to drop 0 (do nothing)\n", | |
" self.candidates = candidates\n", | |
"# for n in self.grid\n", | |
"# def this_box(self):\n", | |
"# return []\n", | |
"\n", | |
"class Grid(list):\n", | |
" \n", | |
" rows = [list(range(9*x, 9*x+9)) for x in range(9)]\n", | |
" cols = [list(range(x, 81, 9)) for x in range(9)]\n", | |
" vbg = [set().union(*[rows[i] for i in range(3*j, 3*j+3)]) for j in range(3)]\n", | |
" hbg = [set().union(*[cols[i] for i in range(3*j, 3*j+3)]) for j in range(3)]\n", | |
" boxes = [sorted(vbg[i] & hbg[j])\n", | |
" for i in range(3) \n", | |
" for j in range(3)]\n", | |
" \n", | |
" constraints = rows + cols + boxes\n", | |
"\n", | |
" @classmethod\n", | |
" def from_asciiboard(cls, asciiboard):\n", | |
" givens = [int(c) if c != '.' else 0 for c in sboard if c in '123456789.']\n", | |
" self = cls()\n", | |
" for n, g in enumerate(givens):\n", | |
" self.append(Cell(self, n, g))\n", | |
" return self\n", | |
" \n", | |
" def fill_candidates(self):\n", | |
" for cell in self:\n", | |
" cell.compute_candidates()\n", | |
" \n", | |
" def show(self):\n", | |
" showrows = []\n", | |
" i = iter(self)\n", | |
" for r in range(9):\n", | |
" showrows.append(\"\".join(str(next(i)) for _ in range(9)))\n", | |
" if r in (2, 5):\n", | |
" showrows.append(\"-\" * 27)\n", | |
" print(\"\\n\".join(showrows))\n", | |
" \n", | |
" def _repr_html_(self):\n", | |
" showrows = []\n", | |
" i = ((c.solution if c.solution else \"-\") if not c.given else f\"<b>{c.solution}</b>\" for c in self)\n", | |
" for r in range(9):\n", | |
" showrows.append(\"\".join(f\"<td>{next(i)}</td>\" for _ in range(9)))\n", | |
" return f\"<table>{''.join(f'<tr>{r}</tr>' for r in showrows)}</table>\"\n", | |
" \n", | |
"# elements = Grid([Cell(g) for g in givens])\n", | |
"grid = Grid.from_asciiboard(givens)\n", | |
"grid" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def fill_forced():\n", | |
" grid.fill_candidates()\n", | |
"\n", | |
" immediate_solutions = []\n", | |
" for cell in grid:\n", | |
" assert len(cell.candidates) > 0\n", | |
" if len(cell.candidates) == 1 and not cell.solution:\n", | |
" immediate_solutions.append(cell)\n", | |
"\n", | |
" for x in immediate_solutions:\n", | |
" solution = next(iter(x.candidates))\n", | |
" yield x.index, solution\n", | |
" grid[x.index].solution = solution" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{23: 2, 38: 6, 42: 7, 54: 9, 64: 8, 72: 3}\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table><tr><td><b>5</b></td><td><b>3</b></td><td>-</td><td>-</td><td><b>7</b></td><td>-</td><td>-</td><td>-</td><td>-</td></tr><tr><td><b>6</b></td><td>-</td><td>-</td><td><b>1</b></td><td><b>9</b></td><td><b>5</b></td><td>-</td><td>-</td><td>-</td></tr><tr><td>1</td><td><b>9</b></td><td><b>8</b></td><td>-</td><td>4</td><td>2</td><td>-</td><td><b>6</b></td><td>-</td></tr><tr><td><b>8</b></td><td>-</td><td>-</td><td>7</td><td><b>6</b></td><td>-</td><td>-</td><td>-</td><td><b>3</b></td></tr><tr><td><b>4</b></td><td>2</td><td>6</td><td><b>8</b></td><td>5</td><td><b>3</b></td><td>7</td><td>9</td><td><b>1</b></td></tr><tr><td><b>7</b></td><td>-</td><td>-</td><td>9</td><td><b>2</b></td><td>-</td><td>-</td><td>-</td><td><b>6</b></td></tr><tr><td>9</td><td><b>6</b></td><td>-</td><td>5</td><td>3</td><td>7</td><td><b>2</b></td><td><b>8</b></td><td>4</td></tr><tr><td>2</td><td>8</td><td>7</td><td><b>4</b></td><td><b>1</b></td><td><b>9</b></td><td>6</td><td>3</td><td><b>5</b></td></tr><tr><td>3</td><td>-</td><td>-</td><td>-</td><td><b>8</b></td><td>-</td><td>1</td><td><b>7</b></td><td><b>9</b></td></tr></table>" | |
], | |
"text/plain": [ | |
"[<5>,\n", | |
" <3>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <7>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" <5>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 1 ,\n", | |
" <9>,\n", | |
" <8>,\n", | |
" 0 ,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" <8>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 7 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <3>,\n", | |
" <4>,\n", | |
" 2 ,\n", | |
" 6 ,\n", | |
" <8>,\n", | |
" 5 ,\n", | |
" <3>,\n", | |
" 7 ,\n", | |
" 9 ,\n", | |
" <1>,\n", | |
" <7>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 9 ,\n", | |
" <2>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 9 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" 5 ,\n", | |
" 3 ,\n", | |
" 7 ,\n", | |
" <2>,\n", | |
" <8>,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 8 ,\n", | |
" 7 ,\n", | |
" <4>,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" 6 ,\n", | |
" 3 ,\n", | |
" <5>,\n", | |
" 3 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <8>,\n", | |
" 0 ,\n", | |
" 1 ,\n", | |
" <7>,\n", | |
" <9>]" | |
] | |
}, | |
"execution_count": 14, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"print(dict(fill_forced()))\n", | |
"grid" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{3: 6, 21: 3, 26: 7, 56: 1, 77: 6}\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table><tr><td><b>5</b></td><td><b>3</b></td><td>-</td><td>6</td><td><b>7</b></td><td>-</td><td>-</td><td>-</td><td>-</td></tr><tr><td><b>6</b></td><td>-</td><td>-</td><td><b>1</b></td><td><b>9</b></td><td><b>5</b></td><td>-</td><td>-</td><td>-</td></tr><tr><td>1</td><td><b>9</b></td><td><b>8</b></td><td>3</td><td>4</td><td>2</td><td>-</td><td><b>6</b></td><td>7</td></tr><tr><td><b>8</b></td><td>-</td><td>-</td><td>7</td><td><b>6</b></td><td>-</td><td>-</td><td>-</td><td><b>3</b></td></tr><tr><td><b>4</b></td><td>2</td><td>6</td><td><b>8</b></td><td>5</td><td><b>3</b></td><td>7</td><td>9</td><td><b>1</b></td></tr><tr><td><b>7</b></td><td>-</td><td>-</td><td>9</td><td><b>2</b></td><td>-</td><td>-</td><td>-</td><td><b>6</b></td></tr><tr><td>9</td><td><b>6</b></td><td>1</td><td>5</td><td>3</td><td>7</td><td><b>2</b></td><td><b>8</b></td><td>4</td></tr><tr><td>2</td><td>8</td><td>7</td><td><b>4</b></td><td><b>1</b></td><td><b>9</b></td><td>6</td><td>3</td><td><b>5</b></td></tr><tr><td>3</td><td>-</td><td>-</td><td>-</td><td><b>8</b></td><td>6</td><td>1</td><td><b>7</b></td><td><b>9</b></td></tr></table>" | |
], | |
"text/plain": [ | |
"[<5>,\n", | |
" <3>,\n", | |
" 0 ,\n", | |
" 6 ,\n", | |
" <7>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" <5>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 1 ,\n", | |
" <9>,\n", | |
" <8>,\n", | |
" 3 ,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 7 ,\n", | |
" <8>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 7 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <3>,\n", | |
" <4>,\n", | |
" 2 ,\n", | |
" 6 ,\n", | |
" <8>,\n", | |
" 5 ,\n", | |
" <3>,\n", | |
" 7 ,\n", | |
" 9 ,\n", | |
" <1>,\n", | |
" <7>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 9 ,\n", | |
" <2>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 9 ,\n", | |
" <6>,\n", | |
" 1 ,\n", | |
" 5 ,\n", | |
" 3 ,\n", | |
" 7 ,\n", | |
" <2>,\n", | |
" <8>,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 8 ,\n", | |
" 7 ,\n", | |
" <4>,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" 6 ,\n", | |
" 3 ,\n", | |
" <5>,\n", | |
" 3 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <8>,\n", | |
" 6 ,\n", | |
" 1 ,\n", | |
" <7>,\n", | |
" <9>]" | |
] | |
}, | |
"execution_count": 15, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"print(dict(fill_forced()))\n", | |
"grid" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{5: 8, 24: 5, 75: 2}\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table><tr><td><b>5</b></td><td><b>3</b></td><td>-</td><td>6</td><td><b>7</b></td><td>8</td><td>-</td><td>-</td><td>-</td></tr><tr><td><b>6</b></td><td>-</td><td>-</td><td><b>1</b></td><td><b>9</b></td><td><b>5</b></td><td>-</td><td>-</td><td>-</td></tr><tr><td>1</td><td><b>9</b></td><td><b>8</b></td><td>3</td><td>4</td><td>2</td><td>5</td><td><b>6</b></td><td>7</td></tr><tr><td><b>8</b></td><td>-</td><td>-</td><td>7</td><td><b>6</b></td><td>-</td><td>-</td><td>-</td><td><b>3</b></td></tr><tr><td><b>4</b></td><td>2</td><td>6</td><td><b>8</b></td><td>5</td><td><b>3</b></td><td>7</td><td>9</td><td><b>1</b></td></tr><tr><td><b>7</b></td><td>-</td><td>-</td><td>9</td><td><b>2</b></td><td>-</td><td>-</td><td>-</td><td><b>6</b></td></tr><tr><td>9</td><td><b>6</b></td><td>1</td><td>5</td><td>3</td><td>7</td><td><b>2</b></td><td><b>8</b></td><td>4</td></tr><tr><td>2</td><td>8</td><td>7</td><td><b>4</b></td><td><b>1</b></td><td><b>9</b></td><td>6</td><td>3</td><td><b>5</b></td></tr><tr><td>3</td><td>-</td><td>-</td><td>2</td><td><b>8</b></td><td>6</td><td>1</td><td><b>7</b></td><td><b>9</b></td></tr></table>" | |
], | |
"text/plain": [ | |
"[<5>,\n", | |
" <3>,\n", | |
" 0 ,\n", | |
" 6 ,\n", | |
" <7>,\n", | |
" 8 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" <5>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 1 ,\n", | |
" <9>,\n", | |
" <8>,\n", | |
" 3 ,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 5 ,\n", | |
" <6>,\n", | |
" 7 ,\n", | |
" <8>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 7 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <3>,\n", | |
" <4>,\n", | |
" 2 ,\n", | |
" 6 ,\n", | |
" <8>,\n", | |
" 5 ,\n", | |
" <3>,\n", | |
" 7 ,\n", | |
" 9 ,\n", | |
" <1>,\n", | |
" <7>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 9 ,\n", | |
" <2>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 9 ,\n", | |
" <6>,\n", | |
" 1 ,\n", | |
" 5 ,\n", | |
" 3 ,\n", | |
" 7 ,\n", | |
" <2>,\n", | |
" <8>,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 8 ,\n", | |
" 7 ,\n", | |
" <4>,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" 6 ,\n", | |
" 3 ,\n", | |
" <5>,\n", | |
" 3 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 2 ,\n", | |
" <8>,\n", | |
" 6 ,\n", | |
" 1 ,\n", | |
" <7>,\n", | |
" <9>]" | |
] | |
}, | |
"execution_count": 16, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"print(dict(fill_forced()))\n", | |
"grid" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{8: 2, 33: 4}\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table><tr><td><b>5</b></td><td><b>3</b></td><td>-</td><td>6</td><td><b>7</b></td><td>8</td><td>-</td><td>-</td><td>2</td></tr><tr><td><b>6</b></td><td>-</td><td>-</td><td><b>1</b></td><td><b>9</b></td><td><b>5</b></td><td>-</td><td>-</td><td>-</td></tr><tr><td>1</td><td><b>9</b></td><td><b>8</b></td><td>3</td><td>4</td><td>2</td><td>5</td><td><b>6</b></td><td>7</td></tr><tr><td><b>8</b></td><td>-</td><td>-</td><td>7</td><td><b>6</b></td><td>-</td><td>4</td><td>-</td><td><b>3</b></td></tr><tr><td><b>4</b></td><td>2</td><td>6</td><td><b>8</b></td><td>5</td><td><b>3</b></td><td>7</td><td>9</td><td><b>1</b></td></tr><tr><td><b>7</b></td><td>-</td><td>-</td><td>9</td><td><b>2</b></td><td>-</td><td>-</td><td>-</td><td><b>6</b></td></tr><tr><td>9</td><td><b>6</b></td><td>1</td><td>5</td><td>3</td><td>7</td><td><b>2</b></td><td><b>8</b></td><td>4</td></tr><tr><td>2</td><td>8</td><td>7</td><td><b>4</b></td><td><b>1</b></td><td><b>9</b></td><td>6</td><td>3</td><td><b>5</b></td></tr><tr><td>3</td><td>-</td><td>-</td><td>2</td><td><b>8</b></td><td>6</td><td>1</td><td><b>7</b></td><td><b>9</b></td></tr></table>" | |
], | |
"text/plain": [ | |
"[<5>,\n", | |
" <3>,\n", | |
" 0 ,\n", | |
" 6 ,\n", | |
" <7>,\n", | |
" 8 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 2 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" <5>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 1 ,\n", | |
" <9>,\n", | |
" <8>,\n", | |
" 3 ,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 5 ,\n", | |
" <6>,\n", | |
" 7 ,\n", | |
" <8>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 7 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" 4 ,\n", | |
" 0 ,\n", | |
" <3>,\n", | |
" <4>,\n", | |
" 2 ,\n", | |
" 6 ,\n", | |
" <8>,\n", | |
" 5 ,\n", | |
" <3>,\n", | |
" 7 ,\n", | |
" 9 ,\n", | |
" <1>,\n", | |
" <7>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 9 ,\n", | |
" <2>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <6>,\n", | |
" 9 ,\n", | |
" <6>,\n", | |
" 1 ,\n", | |
" 5 ,\n", | |
" 3 ,\n", | |
" 7 ,\n", | |
" <2>,\n", | |
" <8>,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 8 ,\n", | |
" 7 ,\n", | |
" <4>,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" 6 ,\n", | |
" 3 ,\n", | |
" <5>,\n", | |
" 3 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 2 ,\n", | |
" <8>,\n", | |
" 6 ,\n", | |
" 1 ,\n", | |
" <7>,\n", | |
" <9>]" | |
] | |
}, | |
"execution_count": 17, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"print(dict(fill_forced()))\n", | |
"grid" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{2: 4, 6: 9, 16: 4, 17: 8, 32: 1, 51: 8, 52: 5}\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table><tr><td><b>5</b></td><td><b>3</b></td><td>4</td><td>6</td><td><b>7</b></td><td>8</td><td>9</td><td>-</td><td>2</td></tr><tr><td><b>6</b></td><td>-</td><td>-</td><td><b>1</b></td><td><b>9</b></td><td><b>5</b></td><td>-</td><td>4</td><td>8</td></tr><tr><td>1</td><td><b>9</b></td><td><b>8</b></td><td>3</td><td>4</td><td>2</td><td>5</td><td><b>6</b></td><td>7</td></tr><tr><td><b>8</b></td><td>-</td><td>-</td><td>7</td><td><b>6</b></td><td>1</td><td>4</td><td>-</td><td><b>3</b></td></tr><tr><td><b>4</b></td><td>2</td><td>6</td><td><b>8</b></td><td>5</td><td><b>3</b></td><td>7</td><td>9</td><td><b>1</b></td></tr><tr><td><b>7</b></td><td>-</td><td>-</td><td>9</td><td><b>2</b></td><td>-</td><td>8</td><td>5</td><td><b>6</b></td></tr><tr><td>9</td><td><b>6</b></td><td>1</td><td>5</td><td>3</td><td>7</td><td><b>2</b></td><td><b>8</b></td><td>4</td></tr><tr><td>2</td><td>8</td><td>7</td><td><b>4</b></td><td><b>1</b></td><td><b>9</b></td><td>6</td><td>3</td><td><b>5</b></td></tr><tr><td>3</td><td>-</td><td>-</td><td>2</td><td><b>8</b></td><td>6</td><td>1</td><td><b>7</b></td><td><b>9</b></td></tr></table>" | |
], | |
"text/plain": [ | |
"[<5>,\n", | |
" <3>,\n", | |
" 4 ,\n", | |
" 6 ,\n", | |
" <7>,\n", | |
" 8 ,\n", | |
" 9 ,\n", | |
" 0 ,\n", | |
" 2 ,\n", | |
" <6>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" <5>,\n", | |
" 0 ,\n", | |
" 4 ,\n", | |
" 8 ,\n", | |
" 1 ,\n", | |
" <9>,\n", | |
" <8>,\n", | |
" 3 ,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 5 ,\n", | |
" <6>,\n", | |
" 7 ,\n", | |
" <8>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 7 ,\n", | |
" <6>,\n", | |
" 1 ,\n", | |
" 4 ,\n", | |
" 0 ,\n", | |
" <3>,\n", | |
" <4>,\n", | |
" 2 ,\n", | |
" 6 ,\n", | |
" <8>,\n", | |
" 5 ,\n", | |
" <3>,\n", | |
" 7 ,\n", | |
" 9 ,\n", | |
" <1>,\n", | |
" <7>,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 9 ,\n", | |
" <2>,\n", | |
" 0 ,\n", | |
" 8 ,\n", | |
" 5 ,\n", | |
" <6>,\n", | |
" 9 ,\n", | |
" <6>,\n", | |
" 1 ,\n", | |
" 5 ,\n", | |
" 3 ,\n", | |
" 7 ,\n", | |
" <2>,\n", | |
" <8>,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 8 ,\n", | |
" 7 ,\n", | |
" <4>,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" 6 ,\n", | |
" 3 ,\n", | |
" <5>,\n", | |
" 3 ,\n", | |
" 0 ,\n", | |
" 0 ,\n", | |
" 2 ,\n", | |
" <8>,\n", | |
" 6 ,\n", | |
" 1 ,\n", | |
" <7>,\n", | |
" <9>]" | |
] | |
}, | |
"execution_count": 18, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"print(dict(fill_forced()))\n", | |
"grid" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{7: 1, 10: 7, 11: 2, 15: 3, 28: 5, 34: 2, 46: 1, 47: 3, 50: 4, 74: 5}\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table><tr><td><b>5</b></td><td><b>3</b></td><td>4</td><td>6</td><td><b>7</b></td><td>8</td><td>9</td><td>1</td><td>2</td></tr><tr><td><b>6</b></td><td>7</td><td>2</td><td><b>1</b></td><td><b>9</b></td><td><b>5</b></td><td>3</td><td>4</td><td>8</td></tr><tr><td>1</td><td><b>9</b></td><td><b>8</b></td><td>3</td><td>4</td><td>2</td><td>5</td><td><b>6</b></td><td>7</td></tr><tr><td><b>8</b></td><td>5</td><td>-</td><td>7</td><td><b>6</b></td><td>1</td><td>4</td><td>2</td><td><b>3</b></td></tr><tr><td><b>4</b></td><td>2</td><td>6</td><td><b>8</b></td><td>5</td><td><b>3</b></td><td>7</td><td>9</td><td><b>1</b></td></tr><tr><td><b>7</b></td><td>1</td><td>3</td><td>9</td><td><b>2</b></td><td>4</td><td>8</td><td>5</td><td><b>6</b></td></tr><tr><td>9</td><td><b>6</b></td><td>1</td><td>5</td><td>3</td><td>7</td><td><b>2</b></td><td><b>8</b></td><td>4</td></tr><tr><td>2</td><td>8</td><td>7</td><td><b>4</b></td><td><b>1</b></td><td><b>9</b></td><td>6</td><td>3</td><td><b>5</b></td></tr><tr><td>3</td><td>-</td><td>5</td><td>2</td><td><b>8</b></td><td>6</td><td>1</td><td><b>7</b></td><td><b>9</b></td></tr></table>" | |
], | |
"text/plain": [ | |
"[<5>,\n", | |
" <3>,\n", | |
" 4 ,\n", | |
" 6 ,\n", | |
" <7>,\n", | |
" 8 ,\n", | |
" 9 ,\n", | |
" 1 ,\n", | |
" 2 ,\n", | |
" <6>,\n", | |
" 7 ,\n", | |
" 2 ,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" <5>,\n", | |
" 3 ,\n", | |
" 4 ,\n", | |
" 8 ,\n", | |
" 1 ,\n", | |
" <9>,\n", | |
" <8>,\n", | |
" 3 ,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 5 ,\n", | |
" <6>,\n", | |
" 7 ,\n", | |
" <8>,\n", | |
" 5 ,\n", | |
" 0 ,\n", | |
" 7 ,\n", | |
" <6>,\n", | |
" 1 ,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" <3>,\n", | |
" <4>,\n", | |
" 2 ,\n", | |
" 6 ,\n", | |
" <8>,\n", | |
" 5 ,\n", | |
" <3>,\n", | |
" 7 ,\n", | |
" 9 ,\n", | |
" <1>,\n", | |
" <7>,\n", | |
" 1 ,\n", | |
" 3 ,\n", | |
" 9 ,\n", | |
" <2>,\n", | |
" 4 ,\n", | |
" 8 ,\n", | |
" 5 ,\n", | |
" <6>,\n", | |
" 9 ,\n", | |
" <6>,\n", | |
" 1 ,\n", | |
" 5 ,\n", | |
" 3 ,\n", | |
" 7 ,\n", | |
" <2>,\n", | |
" <8>,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 8 ,\n", | |
" 7 ,\n", | |
" <4>,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" 6 ,\n", | |
" 3 ,\n", | |
" <5>,\n", | |
" 3 ,\n", | |
" 0 ,\n", | |
" 5 ,\n", | |
" 2 ,\n", | |
" <8>,\n", | |
" 6 ,\n", | |
" 1 ,\n", | |
" <7>,\n", | |
" <9>]" | |
] | |
}, | |
"execution_count": 19, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"print(dict(fill_forced()))\n", | |
"grid" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{29: 9, 73: 4}\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table><tr><td><b>5</b></td><td><b>3</b></td><td>4</td><td>6</td><td><b>7</b></td><td>8</td><td>9</td><td>1</td><td>2</td></tr><tr><td><b>6</b></td><td>7</td><td>2</td><td><b>1</b></td><td><b>9</b></td><td><b>5</b></td><td>3</td><td>4</td><td>8</td></tr><tr><td>1</td><td><b>9</b></td><td><b>8</b></td><td>3</td><td>4</td><td>2</td><td>5</td><td><b>6</b></td><td>7</td></tr><tr><td><b>8</b></td><td>5</td><td>9</td><td>7</td><td><b>6</b></td><td>1</td><td>4</td><td>2</td><td><b>3</b></td></tr><tr><td><b>4</b></td><td>2</td><td>6</td><td><b>8</b></td><td>5</td><td><b>3</b></td><td>7</td><td>9</td><td><b>1</b></td></tr><tr><td><b>7</b></td><td>1</td><td>3</td><td>9</td><td><b>2</b></td><td>4</td><td>8</td><td>5</td><td><b>6</b></td></tr><tr><td>9</td><td><b>6</b></td><td>1</td><td>5</td><td>3</td><td>7</td><td><b>2</b></td><td><b>8</b></td><td>4</td></tr><tr><td>2</td><td>8</td><td>7</td><td><b>4</b></td><td><b>1</b></td><td><b>9</b></td><td>6</td><td>3</td><td><b>5</b></td></tr><tr><td>3</td><td>4</td><td>5</td><td>2</td><td><b>8</b></td><td>6</td><td>1</td><td><b>7</b></td><td><b>9</b></td></tr></table>" | |
], | |
"text/plain": [ | |
"[<5>,\n", | |
" <3>,\n", | |
" 4 ,\n", | |
" 6 ,\n", | |
" <7>,\n", | |
" 8 ,\n", | |
" 9 ,\n", | |
" 1 ,\n", | |
" 2 ,\n", | |
" <6>,\n", | |
" 7 ,\n", | |
" 2 ,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" <5>,\n", | |
" 3 ,\n", | |
" 4 ,\n", | |
" 8 ,\n", | |
" 1 ,\n", | |
" <9>,\n", | |
" <8>,\n", | |
" 3 ,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 5 ,\n", | |
" <6>,\n", | |
" 7 ,\n", | |
" <8>,\n", | |
" 5 ,\n", | |
" 9 ,\n", | |
" 7 ,\n", | |
" <6>,\n", | |
" 1 ,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" <3>,\n", | |
" <4>,\n", | |
" 2 ,\n", | |
" 6 ,\n", | |
" <8>,\n", | |
" 5 ,\n", | |
" <3>,\n", | |
" 7 ,\n", | |
" 9 ,\n", | |
" <1>,\n", | |
" <7>,\n", | |
" 1 ,\n", | |
" 3 ,\n", | |
" 9 ,\n", | |
" <2>,\n", | |
" 4 ,\n", | |
" 8 ,\n", | |
" 5 ,\n", | |
" <6>,\n", | |
" 9 ,\n", | |
" <6>,\n", | |
" 1 ,\n", | |
" 5 ,\n", | |
" 3 ,\n", | |
" 7 ,\n", | |
" <2>,\n", | |
" <8>,\n", | |
" 4 ,\n", | |
" 2 ,\n", | |
" 8 ,\n", | |
" 7 ,\n", | |
" <4>,\n", | |
" <1>,\n", | |
" <9>,\n", | |
" 6 ,\n", | |
" 3 ,\n", | |
" <5>,\n", | |
" 3 ,\n", | |
" 4 ,\n", | |
" 5 ,\n", | |
" 2 ,\n", | |
" <8>,\n", | |
" 6 ,\n", | |
" 1 ,\n", | |
" <7>,\n", | |
" <9>]" | |
] | |
}, | |
"execution_count": 20, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"print(dict(fill_forced()))\n", | |
"grid" | |
] | |
}, | |
{ | |
"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.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Some hacky solution that only sometimes works banged out in an hour at a ChiPy Algo SIG