Skip to content

Commit e82f05c

Browse files
committed
Merge remote-tracking branch 'careercup/master'
2 parents c30b5e4 + e2d6653 commit e82f05c

File tree

7 files changed

+82
-25
lines changed

7 files changed

+82
-25
lines changed

.gitignore

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
node_modules
2+
3+
# Logs
4+
logs
5+
*.log
6+
7+
# Mac specific
8+
DS_Store

README.md

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
1-
####Run the code and test
2-
This project uses Mocha and Chai for testing:
1+
# Cracking the Coding Interview 6th Edition - JavaScript
32

43
<br>
5-
#####Install dependencies:
4+
5+
## Install dependencies:
66
```bash
77
npm install
8-
npm install -g mocha
9-
npm install -g chai
108
```
119

1210
<br>
13-
#####Run tests:
11+
12+
## Test
13+
1414
```bash
15-
mocha --recursive
15+
npm test
1616
```
1717

18-
<br>
19-
#####Add new npm modules:
18+
If you just want to lint
2019
```bash
21-
npm install --save <package name>
20+
npm run lint
2221
```
22+
23+
<br>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
module.exports = Strings1_4 = (function() {
2+
return{
3+
// Checks if a string is a permutation of a palindrome
4+
// Solution #4 from the book. Assumes ascii character set
5+
// @param {String} str - Word or phrase
6+
// @retuns {Boolean} - true if a permutation of palindrome exists, false if it does not
7+
palindromePermutation: function(str){
8+
var distinct = 0;
9+
var s_array = Array.apply(null, Array(256)).map(Number.prototype.valueOf, 0);
10+
str = str.toLowerCase();
11+
for(var i = 0; i < str.length; i++){
12+
if(str[i] == ' '){
13+
continue;
14+
}
15+
s_array[str[i].charCodeAt(0)]++;
16+
if(s_array[str[i].charCodeAt(0)] % 2){
17+
distinct++;
18+
}else{
19+
distinct--;
20+
}
21+
}
22+
return (distinct < 2);
23+
}
24+
};
25+
}());
Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
module.exports = Strings_1_8 = (function() {
2-
var _isSubstring = function(str1, str2) {
3-
return str1.indexOf(str2) != -1
4-
}
5-
var _sameLengthAndNotBlank = function(str1, str2) {
2+
var isSubstring = function(str1, str2) {
3+
return str1.indexOf(str2) != -1;
4+
};
5+
6+
var sameLengthAndNotBlank = function(str1, str2) {
67
var len = str1.length;
7-
return len === str2.length && len > 0
8-
}
8+
return len === str2.length && len > 0;
9+
};
10+
911
return {
1012
isRotation: function(str1, str2) {
11-
if(!_sameLengthAndNotBlank(str1, str2)) return false;
12-
if(_isSubstring(str1+str1, str2)) return true;
13+
if(!sameLengthAndNotBlank(str1, str2)) {
14+
return false;
15+
}
16+
if(isSubstring(str1+str1, str2)) {
17+
return true;
18+
}
1319
}
14-
}
20+
};
1521
}());

package.json

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
{
22
"name": "CrackingJS",
3-
"version": "0.0.1",
3+
"version": "0.0.2",
44
"description": "Data Structures and Algorithms in Javascript",
5+
"scripts": {
6+
"lint": "eslint lib/**/*.js test/**/*.js",
7+
"test": "npm run lint && mocha --recursive"
8+
},
59
"dependencies": {
6-
"mocha": "*",
710
"chai": "*",
11+
"eslint": "^2.2.0",
12+
"mocha": "*",
813
"require-directory": "*",
914
"sinon": "*"
1015
},
11-
"devDependencies": {
12-
}
16+
"devDependencies": {}
1317
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
require('../../test_helper');
2+
describe('1.4 #palindromePermutation', function () {
3+
it('returns true if a string is a permutation of a palindrom', function () {
4+
expect(Strings1_4.palindromePermutation('Tact Coa')).to.be.true;
5+
expect(Strings1_4.palindromePermutation('jhsabckuj ahjsbckj')).to.be.true;
6+
expect(Strings1_4.palindromePermutation('Able was I ere I saw Elba')).to.be.true;
7+
});
8+
it('returns false if a string is not a permutation of a palindrome', function () {
9+
expect(Strings1_4.palindromePermutation('So patient a nurse to nurse a patient so')).to.be.false;
10+
expect(Strings1_4.palindromePermutation('Random Words')).to.be.false;
11+
expect(Strings1_4.palindromePermutation('Not a Palindrome')).to.be.false;
12+
});
13+
});

test/test_helper.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
require('../lib');
2-
module.exports = sinon = require("sinon");
3-
module.exports = expect = require("chai").expect
2+
module.exports = sinon = require('sinon');
3+
module.exports = expect = require('chai').expect;

0 commit comments

Comments
 (0)