## [Math] Android lock screen (9 dots) has exactly 140240 possible ways to (un)lock it

This is simple graph theory. We just enumerate all paths over nodes/vertices, using networkx Python library.

And there are 140240 paths. Way too many to enumerate manually, of course.

#!/usr/bin/env python3
# you may need to run: pip3 install networkx
import networkx as nx
G = nx.Graph()

"""
1 2 3
4 5 6
7 8 9

lines like these are also counted:
* . .
. . *
. * .
"""

# start vertex and a list of neighbour vertices
edges={1: [2, 4, 5, 6, 8],
2: [1, 3, 4, 5, 6, 7, 9],
3: [2, 5, 6, 4, 8],
4: [1, 2, 5, 7, 8, 3, 9],
5: [1, 2, 3, 4, 6, 7, 8, 9],
6: [2, 3, 5, 8, 9, 1, 7],
7: [4, 5, 8, 2, 6],
8: [4, 5, 6, 7, 9, 1, 3],
9: [5, 6, 8, 4, 2]}

for x in range(1, 9+1):
for y in edges[x]:

for start in range(1, 9+1):
for stop in range(1, 9+1):
if start==stop:
continue
for x in nx.all_simple_paths(G, start, stop):
print (x)

[1, 2]
[1, 4, 2]
[1, 4, 5, 2]
[1, 4, 5, 3, 2]
[1, 4, 5, 3, 6, 2]
[1, 4, 5, 3, 6, 8, 7, 2]
[1, 4, 5, 3, 6, 8, 9, 2]
[1, 4, 5, 3, 6, 9, 8, 7, 2]
[1, 4, 5, 3, 6, 9, 2]
[1, 4, 5, 3, 6, 7, 8, 9, 2]

...

[9, 2, 7, 6, 1, 4, 5, 8]
[9, 2, 7, 6, 1, 4, 8]
[9, 2, 7, 6, 1, 4, 3, 5, 8]
[9, 2, 7, 6, 1, 4, 3, 8]
[9, 2, 7, 6, 1, 5, 3, 4, 8]
[9, 2, 7, 6, 1, 5, 3, 8]
[9, 2, 7, 6, 1, 5, 4, 8]
[9, 2, 7, 6, 1, 5, 4, 3, 8]
[9, 2, 7, 6, 1, 5, 8]
[9, 2, 7, 6, 1, 8]


Thanks to @mztropics who once pointed to a bug.

###### (the post first published at 20220416.)

Yes, I know about these lousy Disqus ads. Please use adblocker. I would consider to subscribe to 'pro' version of Disqus if the signal/noise ratio in comments would be good enough.