Skip to content

Commit da4a836

Browse files
committed
Solve chapter 5 problems
1 parent 5c856a7 commit da4a836

File tree

9 files changed

+84
-50
lines changed

9 files changed

+84
-50
lines changed

08_calculator/calculator.js

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,29 @@
1-
const add = function() {
2-
1+
const add = function(a, b) {
2+
return a+b;
33
};
44

5-
const subtract = function() {
6-
5+
const subtract = function(a, b) {
6+
return a-b;
77
};
88

9-
const sum = function() {
10-
9+
const sum = function(a) {
10+
return a.reduce(((accum, current) => accum + current), 0);
1111
};
1212

13-
const multiply = function() {
14-
13+
const multiply = function(a) {
14+
return a.reduce(((accum, current) => accum * current), 1);
1515
};
1616

17-
const power = function() {
18-
17+
const power = function(a, b) {
18+
return Math.pow(a, b);
1919
};
2020

21-
const factorial = function() {
22-
21+
const factorial = function(a) {
22+
let total = 1;
23+
for(let i = 1; i <= a; i++){
24+
total = total * i;
25+
}
26+
return total;
2327
};
2428

2529
// Do not edit below this line

08_calculator/calculator.spec.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,73 +5,73 @@ describe('add', () => {
55
expect(calculator.add(0,0)).toBe(0);
66
});
77

8-
test.skip('adds 2 and 2', () => {
8+
test('adds 2 and 2', () => {
99
expect(calculator.add(2,2)).toBe(4);
1010
});
1111

12-
test.skip('adds positive numbers', () => {
12+
test('adds positive numbers', () => {
1313
expect(calculator.add(2,6)).toBe(8);
1414
});
1515
});
1616

1717
describe('subtract', () => {
18-
test.skip('subtracts numbers', () => {
18+
test('subtracts numbers', () => {
1919
expect(calculator.subtract(10,4)).toBe(6);
2020
});
2121
});
2222

2323
describe('sum', () => {
24-
test.skip('computes the sum of an empty array', () => {
24+
test('computes the sum of an empty array', () => {
2525
expect(calculator.sum([])).toBe(0);
2626
});
2727

28-
test.skip('computes the sum of an array of one number', () => {
28+
test('computes the sum of an array of one number', () => {
2929
expect(calculator.sum([7])).toBe(7);
3030
});
3131

32-
test.skip('computes the sum of an array of two numbers', () => {
32+
test('computes the sum of an array of two numbers', () => {
3333
expect(calculator.sum([7,11])).toBe(18);
3434
});
3535

36-
test.skip('computes the sum of an array of many numbers', () => {
36+
test('computes the sum of an array of many numbers', () => {
3737
expect(calculator.sum([1,3,5,7,9])).toBe(25);
3838
});
3939
});
4040

4141
describe('multiply', () => {
42-
test.skip('multiplies two numbers', () => {
42+
test('multiplies two numbers', () => {
4343
expect(calculator.multiply([2,4])).toBe(8);
4444
});
4545

46-
test.skip('multiplies several numbers', () => {
46+
test('multiplies several numbers', () => {
4747
expect(calculator.multiply([2,4,6,8,10,12,14])).toBe(645120);
4848
});
4949
});
5050

5151
describe('power', () => {
52-
test.skip('raises one number to the power of another number', () => {
52+
test('raises one number to the power of another number', () => {
5353
expect(calculator.power(4,3)).toBe(64); // 4 to third power is 64
5454
});
5555
});
5656

5757
describe('factorial', () => {
58-
test.skip('computes the factorial of 0', () => {
58+
test('computes the factorial of 0', () => {
5959
expect(calculator.factorial(0)).toBe(1); // 0! = 1
6060
});
6161

62-
test.skip('computes the factorial of 1', () => {
62+
test('computes the factorial of 1', () => {
6363
expect(calculator.factorial(1)).toBe(1);
6464
});
6565

66-
test.skip('computes the factorial of 2', () => {
66+
test('computes the factorial of 2', () => {
6767
expect(calculator.factorial(2)).toBe(2);
6868
});
6969

70-
test.skip('computes the factorial of 5', () => {
70+
test('computes the factorial of 5', () => {
7171
expect(calculator.factorial(5)).toBe(120);
7272
});
7373

74-
test.skip('computes the factorial of 10', () => {
74+
test('computes the factorial of 10', () => {
7575
expect(calculator.factorial(10)).toBe(3628800);
7676
});
7777
});

09_palindromes/palindromes.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
const palindromes = function () {
2-
1+
const palindromes = function (input) {
2+
return input.toLowerCase().split(/\W+/).join("").split('').reverse().join("") === input.toLowerCase().split(/\W+/).join("");
33
};
44

55
// Do not edit below this line

09_palindromes/palindromes.spec.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ describe('palindromes', () => {
44
test('works with single words', () => {
55
expect(palindromes('racecar')).toBe(true);
66
});
7-
test.skip('works with punctuation ', () => {
7+
test('works with punctuation ', () => {
88
expect(palindromes('racecar!')).toBe(true);
99
});
10-
test.skip('works with upper-case letters ', () => {
10+
test('works with upper-case letters ', () => {
1111
expect(palindromes('Racecar!')).toBe(true);
1212
});
13-
test.skip('works with multiple words', () => {
13+
test('works with multiple words', () => {
1414
expect(palindromes('A car, a man, a maraca.')).toBe(true);
1515
});
16-
test.skip('works with multiple words', () => {
16+
test('works with multiple words', () => {
1717
expect(palindromes('Animal loots foliated detail of stool lamina.')).toBe(true);
1818
});
19-
test.skip('doesn\'t just always return true', () => {
19+
test('doesn\'t just always return true', () => {
2020
expect(palindromes('ZZZZ car, a man, a maracaz.')).toBe(false);
2121
});
2222
});

10_fibonacci/fibonacci.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
1-
const fibonacci = function() {
2-
1+
const fibonacci = function(fibN) {
2+
if(fibN < 1){
3+
return "OOPS";
4+
}
5+
if(fibN < 3){
6+
return 1;
7+
}
8+
let fibA, fibB;
9+
fibA = fibB = 1;
10+
for(let i = 2;i < fibN; i++){
11+
fibA = fibA + fibB;
12+
fibB = fibA - fibB;
13+
}
14+
return fibA;
315
};
416

517
// Do not edit below this line

10_fibonacci/fibonacci.spec.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,28 @@ describe('fibonacci', () => {
44
test('4th fibonacci number is 3', () => {
55
expect(fibonacci(4)).toBe(3);
66
});
7-
test.skip('6th fibonacci number is 8', () => {
7+
test('6th fibonacci number is 8', () => {
88
expect(fibonacci(6)).toBe(8);
99
});
10-
test.skip('10th fibonacci number is 55', () => {
10+
test('10th fibonacci number is 55', () => {
1111
expect(fibonacci(10)).toBe(55);
1212
});
13-
test.skip('15th fibonacci number is 610', () => {
13+
test('15th fibonacci number is 610', () => {
1414
expect(fibonacci(15)).toBe(610);
1515
});
16-
test.skip('25th fibonacci number is 75025', () => {
16+
test('25th fibonacci number is 75025', () => {
1717
expect(fibonacci(25)).toBe(75025);
1818
});
19-
test.skip('doesn\'t accept negatives', () => {
19+
test('doesn\'t accept negatives', () => {
2020
expect(fibonacci(-25)).toBe("OOPS");
2121
});
22-
test.skip('DOES accept strings', () => {
22+
test('DOES accept strings', () => {
2323
expect(fibonacci("1")).toBe(1);
2424
});
25-
test.skip('DOES accept strings', () => {
25+
test('DOES accept strings', () => {
2626
expect(fibonacci("2")).toBe(1);
2727
});
28-
test.skip('DOES accept strings', () => {
28+
test('DOES accept strings', () => {
2929
expect(fibonacci("8")).toBe(21);
3030
});
3131
});

11_getTheTitles/getTheTitles.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
const getTheTitles = function() {
2-
1+
const getTheTitles = function(books) {
2+
return books.map(book => book.title);
33
};
44

55
// Do not edit below this line

12_findTheOldest/findTheOldest.js

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
1-
const findTheOldest = function() {
2-
1+
const findTheOldest = function(people) {
2+
return people.reduce((oldest, nextPerson) => {
3+
let age, oldestAge;
4+
if (!("yearOfDeath" in nextPerson)){
5+
age = (new Date()).getFullYear() - nextPerson.yearOfBirth;
6+
}
7+
else{
8+
age = nextPerson.yearOfDeath - nextPerson.yearOfBirth;
9+
}
10+
if (!("yearOfDeath" in oldest)){
11+
oldestAge = (new Date()).getFullYear() - oldest.yearOfBirth;
12+
}
13+
else{
14+
oldestAge = oldest.yearOfDeath - oldest.yearOfBirth;
15+
}
16+
if(age > oldestAge){
17+
oldest = nextPerson;
18+
}
19+
return oldest;
20+
})
321
};
422

523
// Do not edit below this line

12_findTheOldest/findTheOldest.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ describe('findTheOldest', () => {
2121
]
2222
expect(findTheOldest(people).name).toBe('Ray');
2323
});
24-
test.skip('finds the oldest person if someone is still living', () => {
24+
test('finds the oldest person if someone is still living', () => {
2525
const people = [
2626
{
2727
name: "Carly",
@@ -40,7 +40,7 @@ describe('findTheOldest', () => {
4040
]
4141
expect(findTheOldest(people).name).toBe('Ray');
4242
});
43-
test.skip('finds the oldest person if the OLDEST is still living', () => {
43+
test('finds the oldest person if the OLDEST is still living', () => {
4444
const people = [
4545
{
4646
name: "Carly",

0 commit comments

Comments
 (0)