Browse Source

Some kind of mess that somehow solves day 19.

master
Chris Smith 8 years ago
parent
commit
3268dfe99f
2 changed files with 89 additions and 0 deletions
  1. 44
    0
      19.py
  2. 45
    0
      19.txt

+ 44
- 0
19.py View File

@@ -0,0 +1,44 @@
1
+#!/usr/bin/python
2
+
3
+from collections import defaultdict
4
+import re
5
+
6
+subs = defaultdict(list)
7
+
8
+with open('19.txt', 'r') as f:
9
+    lines = f.read().splitlines()
10
+    gen = set()
11
+    long = lines[-1]
12
+    for search, replace in [line.split(' => ') for line in lines[0:-2]]:
13
+        for start, end in [(i.start(), i.end()) for i in re.finditer(search, long)]:
14
+            gen.add(long[0:start] + replace + long[end:])
15
+    print(len(gen))
16
+
17
+# --- This is ugly as sin, and I've no idea why it seems to work. ¯\_(ツ)_/¯
18
+
19
+with open('19.txt', 'r') as f:
20
+    lines = f.read().splitlines()
21
+    long = lines[-1]
22
+    for search, replace in [line.split(' => ') for line in lines[0:-2]]:
23
+        subs[search].append(replace)
24
+    results = set([long])
25
+    previous = set([long])
26
+    step = 0
27
+    while True:
28
+        step += 1
29
+        new_results = set()
30
+        for candidate in results:
31
+            for search, replacements in subs.iteritems():
32
+                for replacement in replacements:
33
+                    for start, end in [(i.start(), i.end()) for i in re.finditer(replacement, candidate)]:
34
+                        r = candidate[0:start] + search + candidate[end:]
35
+                        if r not in previous:
36
+                            new_results.add(r)
37
+                            previous.add(r)
38
+        shortest = min(len(x) for x in new_results)
39
+        new_results = set(list({r for r in new_results if len(r) == shortest})[:1])
40
+        print("%s (%s)" % (step, len(new_results)))
41
+        if 'e' in new_results:
42
+            print("*** %s" % step)
43
+            break
44
+        results = new_results

+ 45
- 0
19.txt View File

@@ -0,0 +1,45 @@
1
+Al => ThF
2
+Al => ThRnFAr
3
+B => BCa
4
+B => TiB
5
+B => TiRnFAr
6
+Ca => CaCa
7
+Ca => PB
8
+Ca => PRnFAr
9
+Ca => SiRnFYFAr
10
+Ca => SiRnMgAr
11
+Ca => SiTh
12
+F => CaF
13
+F => PMg
14
+F => SiAl
15
+H => CRnAlAr
16
+H => CRnFYFYFAr
17
+H => CRnFYMgAr
18
+H => CRnMgYFAr
19
+H => HCa
20
+H => NRnFYFAr
21
+H => NRnMgAr
22
+H => NTh
23
+H => OB
24
+H => ORnFAr
25
+Mg => BF
26
+Mg => TiMg
27
+N => CRnFAr
28
+N => HSi
29
+O => CRnFYFAr
30
+O => CRnMgAr
31
+O => HP
32
+O => NRnFAr
33
+O => OTi
34
+P => CaP
35
+P => PTi
36
+P => SiRnFAr
37
+Si => CaSi
38
+Th => ThCa
39
+Ti => BP
40
+Ti => TiTi
41
+e => HF
42
+e => NAl
43
+e => OMg
44
+
45
+CRnSiRnCaPTiMgYCaPTiRnFArSiThFArCaSiThSiThPBCaCaSiRnSiRnTiTiMgArPBCaPMgYPTiRnFArFArCaSiRnBPMgArPRnCaPTiRnFArCaSiThCaCaFArPBCaCaPTiTiRnFArCaSiRnSiAlYSiThRnFArArCaSiRnBFArCaCaSiRnSiThCaCaCaFYCaPTiBCaSiThCaSiThPMgArSiRnCaPBFYCaCaFArCaCaCaCaSiThCaSiRnPRnFArPBSiThPRnFArSiRnMgArCaFYFArCaSiRnSiAlArTiTiTiTiTiTiTiRnPMgArPTiTiTiBSiRnSiAlArTiTiRnPMgArCaFYBPBPTiRnSiRnMgArSiThCaFArCaSiThFArPRnFArCaSiRnTiBSiThSiRnSiAlYCaFArPRnFArSiThCaFArCaCaSiThCaCaCaSiRnPRnCaFArFYPMgArCaPBCaPBSiRnFYPBCaFArCaSiAl

Loading…
Cancel
Save