···11import fileinput
22-import itertools
32import re
44-import sys
5364REPLACEMENTS = []
75ELECTRONS = []
···1816 else:
1917 MOLECULE = line.strip()
20182121-print "Elements:", len(re.findall(r'[A-Z]', MOLECULE))
2222-print "Rn/Ar:", len(re.findall(r'Rn', MOLECULE)), "* 2"
2323-print "Y:", len(re.findall(r'Y', MOLECULE))
2424-2525-# molecule = MOLECULE
2626-2727-# reps = {m[1][::-1]: m[0][::-1]
2828-# for m in REPLACEMENTS}
2929-3030-# def rep(x):
3131-# return reps[x.group()]
3232-3333-# count = 0
3434-# while molecule != 'e':
3535-# molecule = re.sub('|'.join(reps.keys()), rep, molecule, 1)
3636-# count += 1
3737-3838-# print(count)
3939-4040-sys.exit()
4141-4242-4343-outs = set()
4444-4545-def molefy(mole):
4646- for old, new in REPLACEMENTS:
4747- for pos in (m.start() for m in re.finditer(old, mole)):
4848- new_string = mole[:pos] + new + mole[pos+len(old):]
4949- yield new_string
5050-5151-def delete(mole):
5252- for old, new in REPLACEMENTS:
5353- for pos in (m.start() for m in re.finditer(new, mole)):
5454- new_string = mole[:pos] + old + mole[pos+len(new):]
5555- yield new_string
56195720def replace(old, new, s):
5858- for pos in (m.start() for m in re.finditer(new, s)):
5959- yield "{}{}{}".format(s[:pos], old, s[pos+len(new):])
2121+ for pos in (m.start() for m in re.finditer(old, s)):
2222+ yield "{}{}{}".format(s[:pos], new, s[pos+len(old):])
602361246262-LOWEST = 100000
2525+single_replacements = set()
63266464-def submol(m, i=1,):
6565- if m in ELECTRONS:
6666- LOWEST = min(LOWEST, i)
2727+for old, new in REPLACEMENTS:
2828+ if old in MOLECULE:
2929+ for new_mol in replace(old, new, MOLECULE):
3030+ single_replacements.add(new_mol)
67316868- for r in REPLACEMENTS:
6969- if r[1] in m:
7070- for x in replace(r[0], r[1], m):
7171- submol(x, i+1)
3232+print "Distinct molecules after one replacement:", len(single_replacements)
723373347474-submol(MOLECULE)
7575-print LOWEST
7676-7777-sys.exit()
3535+elements = len(re.findall(r'[A-Z]', MOLECULE))
3636+radon = len(re.findall(r'Rn', MOLECULE))
3737+yttrium = len(re.findall(r'Y', MOLECULE))
78387979-iterations = 1
8080-mols = set()
8181-mols.add(MOLECULE)
8282-new_mols = set()
8383-# seen = set()
3939+# print "Elements:", elements
4040+# print "Rn/Ar:", radon, "* 2"
4141+# print "Y:", yttrium
4242+# print "|E| - (Rn + Ar) - 2*Y - 1 = n"
84438585-while True:
8686- iterations += 1
8787- for m in mols:
8888- for r in REPLACEMENTS:
8989- if r[1] in m:
9090- for x in replace(r[0], r[1], m):
9191- if x in ELECTRONS:
9292- print iterations
9393- sys.exit()
9494-9595- # if x not in seen:
9696- new_mols.add(x)
9797- # seen.add(x)
9898-9999- if len(new_mols) == 0:
100100- sys.exit("BLALALLA")
101101-102102- mols = new_mols
103103- new_mols = set()
104104-105105-106106-107107-# print len(outs)
4444+print "Fewest steps from e to medicine:", elements - (2 * radon) - (2 * yttrium) - 1