forked from mrdavidlaing/javascript-koans
-
Notifications
You must be signed in to change notification settings - Fork 482
Expand file tree
/
Copy pathAboutApplyingWhatWeHaveLearnt.js
More file actions
107 lines (77 loc) · 3.55 KB
/
AboutApplyingWhatWeHaveLearnt.js
File metadata and controls
107 lines (77 loc) · 3.55 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
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
let _ // globals
describe('About Applying What We Have Learnt', function () {
let products
beforeEach(function () {
products = [
{ name: 'Sonoma', ingredients: ['artichoke', 'sundried tomatoes', 'mushrooms'], containsNuts: false },
{ name: 'Pizza Primavera', ingredients: ['roma', 'sundried tomatoes', 'goats cheese', 'rosemary'], containsNuts: false },
{ name: 'South Of The Border', ingredients: ['black beans', 'jalapenos', 'mushrooms'], containsNuts: false },
{ name: 'Blue Moon', ingredients: ['blue cheese', 'garlic', 'walnuts'], containsNuts: true },
{ name: 'Taste Of Athens', ingredients: ['spinach', 'kalamata olives', 'sesame seeds'], containsNuts: true }
]
})
/*********************************************************************************/
it("given I'm allergic to nuts and hate mushrooms, it should find a pizza I can eat (imperative)", function () {
let i; let j; let hasMushrooms; const productsICanEat = []
for (i = 0; i < products.length; i += 1) {
if (products[i].containsNuts === false) {
hasMushrooms = false
for (j = 0; j < products[i].ingredients.length; j += 1) {
if (products[i].ingredients[j] === 'mushrooms') {
hasMushrooms = true
}
}
if (!hasMushrooms) productsICanEat.push(products[i])
}
}
expect(productsICanEat.length).toBe(FILL_ME_IN)
})
it("given I'm allergic to nuts and hate mushrooms, it should find a pizza I can eat (functional)", function () {
const productsICanEat = []
/* solve using filter() & all() / any() */
expect(productsICanEat.length).toBe(FILL_ME_IN)
})
/*********************************************************************************/
it('should add all the natural numbers below 1000 that are multiples of 3 or 5 (imperative)', function () {
let sum = 0
for (let i = 1; i < 1000; i += 1) {
if (i % 3 === 0 || i % 5 === 0) {
sum += i
}
}
expect(sum).toBe(FILL_ME_IN)
})
it('should add all the natural numbers below 1000 that are multiples of 3 or 5 (functional)', function () {
const sum = FILL_ME_IN /* try chaining range() and reduce() */
expect(233168).toBe(FILL_ME_IN)
})
/*********************************************************************************/
it('should count the ingredient occurrence (imperative)', function () {
const ingredientCount = { '{ingredient name}': 0 }
for (i = 0; i < products.length; i += 1) {
for (j = 0; j < products[i].ingredients.length; j += 1) {
ingredientCount[products[i].ingredients[j]] = (ingredientCount[products[i].ingredients[j]] || 0) + 1
}
}
expect(ingredientCount.mushrooms).toBe(FILL_ME_IN)
})
it('should count the ingredient occurrence (functional)', function () {
const ingredientCount = { '{ingredient name}': 0 }
/* chain() together map(), flatten() and reduce() */
expect(ingredientCount.mushrooms).toBe(FILL_ME_IN)
})
/*********************************************************************************/
/* UNCOMMENT FOR EXTRA CREDIT */
/*
it("should find the largest prime factor of a composite number", function () {
});
it("should find the largest palindrome made from the product of two 3 digit numbers", function () {
});
it("should find the smallest number divisible by each of the numbers 1 to 20", function () {
});
it("should find the difference between the sum of the squares and the square of the sums", function () {
});
it("should find the 10001st prime", function () {
});
*/
})