Skip to content

Instantly share code, notes, and snippets.

@nicktimko
Created June 7, 2019 15:31
Show Gist options
  • Save nicktimko/b55fd014fe665a58675e978f3d88b022 to your computer and use it in GitHub Desktop.
Save nicktimko/b55fd014fe665a58675e978f3d88b022 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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
}
@nicktimko
Copy link
Author

Some hacky solution that only sometimes works banged out in an hour at a ChiPy Algo SIG

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment