|
|
@@ -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();
|
|
|
+
|