-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday5.js
More file actions
69 lines (66 loc) · 1.67 KB
/
Copy pathday5.js
File metadata and controls
69 lines (66 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// problem: http://adventofcode.com/day/5
// input: http://adventofcode.com/day/5/input
function isNice(s) {
var prevLetter = '';
var vowels = 0;
var doubleLetter = false;
for (j = 0; j < s.length; j++) {
if ((prevLetter == 'a' && s[j] == 'b')
||(prevLetter == 'c' && s[j] == 'd')
||(prevLetter == 'p' && s[j] == 'q')
||(prevLetter == 'x' && s[j] == 'y')) {
return false;
}
if (!doubleLetter && prevLetter == s[j]) {
doubleLetter = true;
}
if (s[j] == 'a' || s[j] == 'e' || s[j] == 'i' || s[j] == 'o' || s[j] == 'u') {
vowels++;
}
prevLetter = s[j];
}
return doubleLetter && vowels >= 3;
}
function isNice2(s) {
if (s.length < 3) { return false; }
var prevLetter;
var curLetter;
var nextLetter;
var seenPairs = {};
var hasSplitSingle = false;
var hasDuplicatePair = false;
for (k = 2; k < s.length; k++) {
prevLetter = s[k-2];
curLetter = s[k-1];
nextLetter = s[k];
if (!hasSplitSingle && prevLetter == nextLetter) {
hasSplitSingle = true;
}
if (!hasDuplicatePair) {
if (seenPairs[curLetter + nextLetter] === undefined) {
// insert trailing pair to prevent overlapped pair detection
seenPairs[prevLetter + curLetter] = 1;
} else {
hasDuplicatePair = true;
seenPairs = null;
}
}
if (hasSplitSingle && hasDuplicatePair) {
return true;
}
}
return false;
}
var input = document.body.innerText.split('\n');
var niceCount = 0;
var nice2Count = 0;
for (i = 0; i < 100; i++) {
if (isNice(input[i])) {
niceCount++;
}
if (isNice2(input[i])) {
nice2Count++;
}
}
console.log(niceCount);
console.log(nice2Count);