-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchallenges.js
129 lines (108 loc) · 3.27 KB
/
challenges.js
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*global module: true, require:true, console: true*/
module.exports = (function () {
'use strict';
var gengo = require('gengo-node')
, self;
function getEqualSumSubstring(s) {
s = s || '';
var len = s.length
, maxLen = 0
, substr
, left
, right;
try {
parseInt(s, 10);
if (s.split('').some(function (digit) { return digit === '0'; })) {
throw new Error('Input string cannot contain any zeros');
}
if (s.length < 2) {
throw new Error('Input string must be at least 2 chars long');
}
} catch (e) {
self.log('Error: Input string is invalid\n' + e.message);
return 0;
}
function sum(digitsStr) {
return digitsStr.split('').reduce(function (i, num) { return parseInt(i, 10) + parseInt(num, 10); });
}
for (var i = 0; i + 1 < len; i++) {
for (var j = 0; i - j >= 0 && i + j <= len; j++) {
substr = s.substring(i - j, i + 2 + j);
left = substr.substring(0, substr.length / 2);
right = substr.substring(substr.length / 2, substr.length);
if (sum(left) === sum(right)) {
if (substr.length > maxLen) {
maxLen = substr.length;
}
}
}
}
return maxLen;
}
function getLongestPalindrome(s) {
s = s || '';
var maxPalindrome = ''
, palindromeType = 'unknown'
, substr
, len = s.length;
if (s.length < 2) {
return '';
}
for (var i = 0; i < len; i++) {
for (var j = 0; i - j >= 0 && i + 1 + j < len; j++) {
if (palindromeType !== 'even' && i + j + 2 < len && s.charAt(i - j) === s.charAt(i + 2 + j)) {
substr = s.substring(i - j, i + 3 + j);
palindromeType = 'odd';
}
else if (palindromeType !== 'odd' && i + j + 1 < len && s.charAt(i - j) === s.charAt(i + 1 + j)) {
substr = s.substring(i - j, i + 2 + j);
palindromeType = 'even';
}
else {
substr = null;
palindromeType = 'unknown';
break;
}
if (substr.length > maxPalindrome.length) {
maxPalindrome = substr;
}
}
}
return maxPalindrome;
}
function getNextNWhereOnesCountInRangeOneToNEqualsN() {
var n = 2
, onesCount = 1;
for (;;++n) {
onesCount += n.toString().split('').reduce(function (i, j) {
return parseInt(j, 10) === 1 ? i + 1 : i;
}, 0);
if (onesCount === n) {
self.log('n=' + n + ' f(n)=' + onesCount);
return n;
}
}
}
function gengoPostTranslationJobs(data, cb) {
var creds = {
publicKey: ')dDWI-{4K-UV16|^f}bYJwTSrGKLZNc4X[en25]Eyqd$ZHZLyC^^spg|YS5J|Y^d',
privateKey: 'aE=5GK9FFK@^Z4~LN[Z^IAMduH6s1jr5xUoMi[lMciv6iMELp2yGBy$SJjFmmQ1h'
};
var gengoClient = new gengo.Gengo({
'public': creds.publicKey,
'private': creds.privateKey
});
gengoClient.postJobs(data, function (res) {
self.log(res);
cb(res);
});
}
self = {
getEqualSumSubstring: getEqualSumSubstring,
getLongestPalindrome: getLongestPalindrome,
getNextNWhereOnesCountInRangeOneToNEqualsN: getNextNWhereOnesCountInRangeOneToNEqualsN,
gengoPostTranslationJobs: gengoPostTranslationJobs,
log: console.log
};
return self;
}());