Skip to content

Commit c047438

Browse files
committed
✨🔗 Add episode 29 links
1 parent 765c36b commit c047438

File tree

5 files changed

+184
-0
lines changed

5 files changed

+184
-0
lines changed

episode_029/README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Episode 29
2+
3+
## 7 kyu
4+
5+
* https://www.codewars.com/kata/playing-with-sets-sup-slash-sub/train/javascript
6+
7+
## 6 kyu
8+
9+
* https://www.codewars.com/kata/the-supermarket-queue/train/javascript
10+
* https://www.codewars.com/kata/count-characters-in-your-string/train/javascript
11+
* https://www.codewars.com/kata/weird-string-case/train/javascript
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
function count (string) {
2+
// an object to store the counts
3+
const counts = {};
4+
// iterate over the letters in the string
5+
for (let i = 0; i < string.length; i++) {
6+
const letter = string[i];
7+
// if the current letter is not a property in the object
8+
// set it 0
9+
counts[letter] = counts[letter] || 0;
10+
// increment the current letter in the object by 1
11+
counts[letter]++;
12+
}
13+
return counts;
14+
}
15+
16+
function count (string) {
17+
return Array.prototype.reduce.call(string, (counts, letter) => {
18+
counts[letter] = counts[letter] || 0;
19+
counts[letter]++;
20+
return counts;
21+
}, {});
22+
}
23+
24+
function count (string) {
25+
return string.split('').reduce((counts, letter) => {
26+
counts[letter] = counts[letter] || 0;
27+
counts[letter]++;
28+
return counts;
29+
}, {});
30+
}
31+
32+
function count (string) {
33+
return [].reduce.call(string, (counts, letter) => {
34+
counts[letter] = counts[letter] || 0;
35+
counts[letter]++;
36+
return counts;
37+
}, {});
38+
}
39+
40+
console.log(count('aba'), { a: 2, b: 1 });
41+
console.log(count(''), {});
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// return true if s1 is a subset of s2
2+
function isSubsetOf(s1, s2){
3+
// iterate over s1
4+
for (let item of s1) {
5+
// check if current value is in s2
6+
// if not
7+
if (!s2.has(item)) {
8+
return false;
9+
}
10+
}
11+
12+
return true;
13+
}
14+
15+
function isSubsetOf(s1, s2) {
16+
return [...s1].every(item => s2.has(item));
17+
}
18+
19+
function isSubsetOf(s1, s2) {
20+
return Array.from(s1).every(item => s2.has(item));
21+
}
22+
23+
// function isSubsetOf(s1, s2) {
24+
// return Array.prototype.every.call(s1, item => s2.has(item));
25+
// }
26+
27+
function isSupersetOf(s1, s2){
28+
return isSubsetOf(s2, s1);
29+
}
30+
31+
32+
let A1 = new Set([1,2,3]), A2 = new Set([3,2,1]), B = new Set([1,2,3,4,5]), X = new Set([1,2,4,5,6,7]);
33+
34+
// console.log( isSubsetOf(A1,A1), 'A is contained in A' );
35+
// console.log( isSubsetOf(A1,A2), '{1,2,3} is contained in {3,2,1}' );
36+
// console.log( isSubsetOf(A1,B), '{1,2,3} is contained in {1,2,3,4,5}' );
37+
// console.log( isSubsetOf(A1,X), '{1,2,3} is not contained in {1,2,4,5,6,7}' );
38+
39+
console.log( isSupersetOf(A1,A1), 'A includes A' );
40+
console.log( isSupersetOf(A1,A2), '{1,2,3} includes {3,2,1}' );
41+
console.log( isSupersetOf(B,A1), '{1,2,3} includes {1,2,3,4,5}' );
42+
console.log( isSupersetOf(A1,X), '{1,2,3} doesnt include {1,2,4,5,6,7}' );

episode_029/the-supermarket-queue.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
function queueTime(customers, n) {
2+
// a place to store the total amount of time, initialized to 0
3+
let totalTime = 0;
4+
// a place to store the current wait time for each cashier
5+
let tills = Array(n).fill(0);
6+
7+
while (customers.length || tills.some(till => till > 0)) {
8+
// find an open cashier
9+
let tillIndex = tills.indexOf(0);
10+
while (tillIndex !== -1) {
11+
// if open cashier - remove first customer from queue and set at cashier
12+
// advance queue to open cashiers (open cashier is 0)
13+
const currentCustomer = customers.shift();
14+
tills[tillIndex] = currentCustomer;
15+
tillIndex = tills.indexOf(0);
16+
}
17+
18+
// move total time forward by 1
19+
totalTime += 1;
20+
// decrease the time remaining at all cashiers by 1
21+
tills.forEach((till, index) => {
22+
if (till > 0) {
23+
tills[index] -= 1;
24+
}
25+
});
26+
}
27+
28+
// return total amount of time
29+
return totalTime;
30+
}
31+
32+
console.log(queueTime([], 1), 0);
33+
console.log(queueTime([1,2,3,4], 1), 10);
34+
console.log(queueTime([2,2,3,3,4,4], 2), 9);
35+
console.log(queueTime([1,2,3,4,5], 100), 5);

episode_029/weird-string-case.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
function toWeirdCase(string, isUpperCase = true){
2+
return string.split('').reduce((weirdCase, letter) => {
3+
if (letter !== ' ') {
4+
if (isUpperCase) {
5+
weirdCase += letter.toUpperCase();
6+
} else {
7+
weirdCase += letter.toLowerCase();
8+
}
9+
isUpperCase = !isUpperCase;
10+
} else {
11+
weirdCase += ' ';
12+
isUpperCase = true;
13+
}
14+
15+
return weirdCase;
16+
}, '');
17+
}
18+
19+
function toWeirdCase(string, isUpperCase = true){
20+
return string.split('').reduce((weirdCase, letter) => {
21+
if (letter !== ' ') {
22+
if (isUpperCase) {
23+
isUpperCase = !isUpperCase;
24+
return weirdCase + letter.toUpperCase();
25+
} else {
26+
isUpperCase = !isUpperCase;
27+
return weirdCase + letter.toLowerCase();
28+
}
29+
} else {
30+
isUpperCase = true;
31+
return weirdCase + ' ';
32+
}
33+
}, '');
34+
}
35+
36+
function toWeirdCase(string, isUpperCase = true){
37+
return string.split('').reduce((weirdCase, letter) => {
38+
if (letter !== ' ') {
39+
if (isUpperCase) {
40+
isUpperCase = !isUpperCase;
41+
return weirdCase + letter.toUpperCase();
42+
} else {
43+
isUpperCase = !isUpperCase;
44+
return weirdCase + letter.toLowerCase();
45+
}
46+
} else {
47+
isUpperCase = true;
48+
return weirdCase + ' ';
49+
}
50+
}, '');
51+
}
52+
53+
console.log(toWeirdCase('This'), 'ThIs');
54+
console.log(toWeirdCase('is'), 'Is');
55+
console.log(toWeirdCase('This is a test'), 'ThIs Is A TeSt');

0 commit comments

Comments
 (0)