isundil 7 years ago
parent
commit
07349f6c7d
2 changed files with 68 additions and 0 deletions
  1. 0 0
      d5/input
  2. 68 0
      d5/main.js

File diff suppressed because it is too large
+ 0 - 0
d5/input


+ 68 - 0
d5/main.js

@@ -0,0 +1,68 @@
+
+function Poly(str) {
+    this.str = str;
+    this.units = [];
+    for (var i =0, len= str.length; i < len; ++i)
+        if (this.units.indexOf(str[i].toLowerCase()) == -1)
+            this.units.push(str[i].toLowerCase());
+    this.units = this.units.sort();
+}
+
+Poly.checkReact = function(a, b) {
+    return a.toLowerCase() == b.toLowerCase() && a !== b;
+}
+
+Poly.prototype.doReact = function() {
+    for (var i =0, len= this.str.length -1; i < len; ++i)
+        if (Poly.checkReact(this.str[i], this.str[i +1])) {
+            this.str = this.str.substr(0, i) +this.str.substr(i +2);
+            return true;
+        }
+    return false;
+}
+
+Poly.prototype.react = function() {
+    var i = 0;
+    while (this.doReact())
+        ++i;
+    return i;
+}
+
+function read(cb) {
+    require("fs").readFile('./input', 'utf8', (err, data) => {
+        var line = data.split("\n")[0];
+        cb(line);
+    });
+}
+
+function ex1() {
+    read((polymereStr) => {
+        var polymere = new Poly(polymereStr);
+        polymere.react();
+        console.log(polymere.str.length);
+    });
+}
+
+function ex2() {
+    read((polymereStr) => {
+        var minPoly = null,
+            minValue = 0,
+            pos =0,
+            poly = new Poly(polymereStr);
+        poly.units.forEach((i) => {
+            var p = new Poly(polymereStr.replace(new RegExp(i, "ig"), ""));
+            p.react();
+            if (minPoly ===null || minValue > p.str.length) {
+                minPoly = i;
+                minValue = p.str.length;
+            }
+            process.stdout.write('' +(++pos) +"/" +poly.units.length +"\r");
+        });
+        process.stdout.write("\n");
+        console.log(minPoly, minValue);
+    });
+}
+
+//ex1();
+ex2();
+

Some files were not shown because too many files changed in this diff