Skip to content

Commit fbbcb24

Browse files
author
Seralius
committed
Part2 today with Bruteforce Solution, and with Algorithm, took me way too long...
1 parent bf91ae3 commit fbbcb24

File tree

3 files changed

+185
-2
lines changed

3 files changed

+185
-2
lines changed

Diff for: 14/Part1.js

+59-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,66 @@ const fs = require('fs')
33
var Rawinput = fs.readFileSync("input.txt").toString('utf-8')
44
input = Rawinput.split("\r\n");
55
function Run() {
6-
6+
var Polymer = input[0]
7+
var Rules = []
8+
input.slice(2).forEach(function (line) {
9+
var Rule = line.split(" -> ")
10+
var Insertion = {
11+
Pattern: Rule[0],
12+
Insert: Rule[1]
13+
}
14+
Rules.push(Insertion)
15+
})
16+
var Steps = 10
17+
for (let i = 0; i < Steps; i++) {
18+
Polymer = ApplyRuleset(Polymer, Rules)
19+
console.log(Polymer.length)
20+
}
21+
var Chars = Polymer.split("").filter(function(i,pos,self){ return self.indexOf(i) == pos}).join("")
22+
var CharsCount = []
23+
Chars.split("").forEach(function (char) {
24+
var Count = Polymer.match(new RegExp(char, "g")).length
25+
CharsCount.push({
26+
Char: char,
27+
Count: Count
28+
})
29+
})
30+
CharsCount.sort(function (a, b) {
31+
return a.Count - b.Count
32+
})
33+
var Sum = CharsCount[CharsCount.length - 1].Count - CharsCount[0].Count
34+
console.log("Answer: " + Sum)
735
}
36+
37+
function ApplyRuleset(Polymer, Rules) {
38+
var Pairs = []
39+
for (let i = 0; i < Polymer.split("").length - 1; i++) {
40+
const e1 = Polymer.split("")[i];
41+
const e2 = Polymer.split("")[i + 1];
42+
Pairs.push(e1 + e2)
43+
}
44+
var InsertAfters = []
45+
for (let i = 0; i < Pairs.length; i++) {
46+
const pair = Pairs[i];
47+
Rules.forEach(function (rule) {
48+
if (pair == rule.Pattern) {
49+
InsertAfters.push({
50+
Position: i,
51+
Insert: rule.Insert
52+
})
53+
}
54+
})
55+
}
56+
InsertAfters.sort(function (a, b) {
57+
return b.Position - a.Position
58+
})
59+
InsertAfters.forEach(function (insert) {
60+
Polymer = Polymer.slice(0, insert.Position + 1) + insert.Insert + Polymer.slice(insert.Position + 1)
61+
})
62+
return Polymer
63+
}
64+
65+
866
module.exports = Run;
967
//Start timer
1068
var startTime = new Date().getTime();

Diff for: 14/Part2.js

+59-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,66 @@ const fs = require('fs')
33
var Rawinput = fs.readFileSync("input.txt").toString('utf-8')
44
input = Rawinput.split("\r\n");
55
function Run() {
6-
6+
var Polymer = input[0]
7+
var Rules = []
8+
input.slice(2).forEach(function (line) {
9+
var Rule = line.split(" -> ")
10+
var Insertion = {
11+
Pattern: Rule[0],
12+
Insert: Rule[1]
13+
}
14+
Rules.push(Insertion)
15+
})
16+
var Steps = 40
17+
for (let i = 0; i < Steps; i++) {
18+
Polymer = ApplyRuleset(Polymer, Rules)
19+
console.log(`(${i}) Length: ${Polymer.length}`)
20+
}
21+
var Chars = Polymer.split("").filter(function(i,pos,self){ return self.indexOf(i) == pos}).join("")
22+
var CharsCount = []
23+
Chars.split("").forEach(function (char) {
24+
var Count = Polymer.match(new RegExp(char, "g")).length
25+
CharsCount.push({
26+
Char: char,
27+
Count: Count
28+
})
29+
})
30+
CharsCount.sort(function (a, b) {
31+
return a.Count - b.Count
32+
})
33+
var Sum = CharsCount[CharsCount.length - 1].Count - CharsCount[0].Count
34+
console.log("Answer: " + Sum)
735
}
36+
37+
function ApplyRuleset(Polymer, Rules) {
38+
var Pairs = []
39+
for (let i = 0; i < Polymer.split("").length - 1; i++) {
40+
const e1 = Polymer.split("")[i];
41+
const e2 = Polymer.split("")[i + 1];
42+
Pairs.push(e1 + e2)
43+
}
44+
var InsertAfters = []
45+
for (let i = 0; i < Pairs.length; i++) {
46+
const pair = Pairs[i];
47+
Rules.forEach(function (rule) {
48+
if (pair == rule.Pattern) {
49+
InsertAfters.push({
50+
Position: i,
51+
Insert: rule.Insert
52+
})
53+
}
54+
})
55+
}
56+
InsertAfters.sort(function (a, b) {
57+
return b.Position - a.Position
58+
})
59+
InsertAfters.forEach(function (insert) {
60+
Polymer = Polymer.slice(0, insert.Position + 1) + insert.Insert + Polymer.slice(insert.Position + 1)
61+
})
62+
return Polymer
63+
}
64+
65+
866
module.exports = Run;
967
//Start timer
1068
var startTime = new Date().getTime();

Diff for: 14/Part2_Adv.js

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
const fs = require('fs')
2+
3+
var Rawinput = fs.readFileSync("input.txt").toString('utf-8')
4+
input = Rawinput.split("\r\n");
5+
function Run() {
6+
var Rules = input.slice(2).map(function (line) {
7+
const [a, b] = line.split(" -> ")
8+
return { a, b }
9+
})
10+
const Count = (string) => {
11+
var letters = {}
12+
for (letter of string){
13+
if (letters[letter]){
14+
letters[letter]++
15+
} else {
16+
letters[letter] = 1
17+
}
18+
}
19+
return letters
20+
}
21+
const steps = 40;
22+
23+
var Pairs = {}
24+
var letters = Count(input[0])
25+
26+
for (let i = 0; i < input[0].length - 1; i++) {
27+
const element = input[0][i] + input[0][i + 1]
28+
Pairs[element] = 1
29+
}
30+
31+
for (let i = 0; i < steps; i++) {
32+
var newPairs = {}
33+
for(var pair of Object.keys(Pairs)){
34+
var now = Pairs[pair]
35+
36+
var Rule = Rules.find(function (rule) {
37+
return pair == rule.a
38+
})
39+
var [a,b] = pair.split("")
40+
newPairs[a+Rule.b] = newPairs[a+Rule.b] ? newPairs[a+Rule.b] + now : now
41+
newPairs[Rule.b+b] = newPairs[Rule.b+b] ? newPairs[Rule.b+b] + now : now
42+
letters[Rule.b] = letters[Rule.b] ? letters[Rule.b] + now : now
43+
}
44+
Pairs = newPairs
45+
console.log("Step: " + i)
46+
}
47+
var min = Object.values(letters).sort(function (a, b) {
48+
return a - b
49+
})[0]
50+
var max = Object.values(letters).sort(function (a, b) {
51+
return b - a
52+
})[0]
53+
console.log(max-min)
54+
}
55+
56+
function CalcStep(input, Rules){
57+
58+
}
59+
60+
module.exports = Run;
61+
//Start timer
62+
var startTime = new Date().getTime();
63+
Run();
64+
//End timer
65+
var endTime = new Date().getTime();
66+
var timeTaken = endTime - startTime;
67+
console.log("Time taken: " + timeTaken + "ms");

0 commit comments

Comments
 (0)