325 changed files with 85 additions and 0 deletions
@ -0,0 +1,28 @@ |
|||||
|
#!/bin/env python3 |
||||
|
import sys |
||||
|
import string |
||||
|
from collections import Counter |
||||
|
|
||||
|
def isSmall(node): return all(c in string.ascii_lowercase for c in node) |
||||
|
|
||||
|
def ext(path, ns, visits=1): |
||||
|
if path[-1] == 'end': return (yield path) |
||||
|
for n in ns[path[-1]]: |
||||
|
if n == 'start': continue |
||||
|
ext = path + (n,) |
||||
|
m = list(map(lambda x: x[1], Counter(n for n in ext if isSmall(n)).most_common(2))) |
||||
|
if m[0] > visits or len(m) > 1 and m[1] > 1: continue |
||||
|
yield ext |
||||
|
|
||||
|
if __name__ == '__main__': |
||||
|
edges = [line.strip().split('-') for line in open(sys.argv[1])] |
||||
|
ns = { n: set() for e in edges for n in e } |
||||
|
for a,b in edges: ns[a].add(b); ns[b].add(a) |
||||
|
|
||||
|
ps = set([('start',)]) |
||||
|
while (n := set(np for p in ps for np in ext(p, ns))) != ps: ps = n |
||||
|
print(len(ps)) |
||||
|
|
||||
|
ps = set([('start',)]) |
||||
|
while (n := set(np for p in ps for np in ext(p, ns, visits=2))) != ps: ps = n |
||||
|
print(len(ps)) |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue