Skip to content

Commit 9390c3a

Browse files
committed
add all code template and solutions
1 parent 7bb478e commit 9390c3a

File tree

136 files changed

+5325
-84
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

136 files changed

+5325
-84
lines changed

Makefile

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
install:
2+
npm install
3+
lint:
4+
npx eslint .
5+
prettier:
6+
npx prettier --write .
Binary file not shown.

build/Chapter02/Chessboard.js

+4-5
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
// используя для разделения строк символы новой строки. В каждой позиции
33
// сетки стоит либо пробел, либо символ"#".
44
// Эти символы должны располагаться в шахматном порядке.
5-
var size = 8;
6-
var symbol = "";
7-
for (var y = 0; y < size; y++) {
8-
for (var x = 0; x < size; x++) {
5+
const size = 8;
6+
let symbol = "";
7+
for (let y = 0; y < size; y++) {
8+
for (let x = 0; x < size; x++) {
99
if ((x + y) % 2 == 0) {
1010
symbol += " ";
1111
} else {
@@ -15,4 +15,3 @@ for (var y = 0; y < size; y++) {
1515
symbol += "\n";
1616
}
1717
console.log(symbol);
18-

build/Chapter02/FizzBuzz.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
for (var i = 1; i <= 100; i++) {
2-
var result = "";
1+
for (let i = 1; i <= 100; i++) {
2+
let result = "";
33
if (i % 3 == 0) result += "Fizz";
44
else if (i % 5 == 0) result += "Buzz";
55
console.log(result || i);

build/Chapter02/Looping a triangle.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var char = "#";
2-
for (var i = char; char.length < 8; char += "#") {
1+
let char = "#";
2+
for (let i = char; char.length < 8; char += "#") {
33
console.log(char);
44
}

build/Chapter03/Minimum.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
function min(num1, num2) {
55
return num1 < num2 ? num1 : num2;
66
}
7-
let result = min(0, 10);
7+
const result = min(0, 10);
88
console.log(result);
99

10-
module.exports=min;
10+
module.exports = min;

build/Chapter03/Recursion.js

+7-11
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,13 @@
22
// санию. Функция должна принимать один параметр (положительное целое
33
// число) и возвращать логическое значение.
44
function isEven(num1) {
5-
if (num1 == 0)
6-
return true;
7-
else if (num1 == 1)
8-
return false;
9-
else if (num1 < 0)
10-
return isEven(-num1);
11-
else
12-
return isEven(num1 - 2);
5+
if (num1 == 0) return true;
6+
if (num1 == 1) return false;
7+
if (num1 < 0) return isEven(-num1);
8+
return isEven(num1 - 2);
139
}
14-
var result = isEven(50);
15-
var resultForNum = isEven(75);
10+
const result = isEven(50);
11+
const resultForNum = isEven(75);
1612
console.log(result, resultForNum);
1713

18-
module.exports=isEven;
14+
module.exports = isEven;

build/Chapter03/bean_counting.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
function countChar(word, letter) {
2-
var count = 0;
3-
for (var i = 0; i < word.length; i++) {
4-
if (word.charAt(i) == letter) {
5-
count++;
6-
}
2+
let count = 0;
3+
for (let i = 0; i < word.length; i++) {
4+
if (word.charAt(i) == letter) {
5+
count++;
76
}
8-
return count;
7+
}
8+
return count;
99
}
1010
function countBs(string) {
11-
return countChar(string, "B");
11+
return countChar(string, "B");
1212
}
13-
var result = countBs('Bdcd');
13+
const result = countBs("Bdcd");
1414
console.log(result);
15-
module.exports=countBs();
16-
module.exports=countChar();
15+
module.exports = countBs();
16+
module.exports = countChar();

build/Chapter04/range.js

+15-15
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
//Сумма диапазона
2-
//Напишите функцию range, котрая принимает два аргумента start и end
1+
// Сумма диапазона
2+
// Напишите функцию range, котрая принимает два аргумента start и end
33
// возвращает массив содержащий все числа от start до end
4-
var range = function (start, end) {
5-
var arr = [];
6-
for (var i = start; i <= end; i++) {
7-
arr.push(i);
8-
}
9-
return arr;
4+
const range = function (start, end) {
5+
const arr = [];
6+
for (let i = start; i <= end; i++) {
7+
arr.push(i);
8+
}
9+
return arr;
1010
};
1111
function sum(array) {
12-
var total = 0;
13-
for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
14-
var value = array_1[_i];
15-
total += value;
16-
}
17-
return total;
12+
let total = 0;
13+
for (let _i = 0, array_1 = array; _i < array_1.length; _i++) {
14+
const value = array_1[_i];
15+
total += value;
16+
}
17+
return total;
1818
}
1919
console.log(sum(range(1, 10)));
20-
//console.log()
20+
// console.log()

build/Chapter04/reversing_array.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
//Напишите две функции reverseArray и reverseArrayInPlace
1+
// Напишите две функции reverseArray и reverseArrayInPlace
22
// Первая функция reverseArray принимает массив в качестве аргумента и создает новый массив, содержащий те же элементы в обратном порядке.
3-
//Вторая reverseArrayInPlace делает то же самое что и метод reverse.
4-
var reverseArray = function (array) {
5-
const newArr = [];
6-
for (let i = array.length - 1; i < 0; i--) {
7-
newArr.push(i);
8-
}
9-
return newArr;
3+
// Вторая reverseArrayInPlace делает то же самое что и метод reverse.
4+
const reverseArray = function (array) {
5+
const newArr = [];
6+
for (let i = array.length - 1; i < 0; i--) {
7+
newArr.push(i);
8+
}
9+
return newArr;
1010
};
1111
console.log(reverseArray([1002, 2232, 22323, 34]));

solution/Chapter03/solution3.1.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
function min(a, b) {
2+
if (a < b) return a;
3+
else return b;
4+
}
5+
6+
console.log(min(0, 10));
7+
// → 0
8+
console.log(min(0, -10));
9+
// → -10

solution/Chapter03/solution3.2.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
function isEven(n) {
2+
if (n == 0) return true;
3+
else if (n == 1) return false;
4+
else if (n < 0) return isEven(-n);
5+
else return isEven(n - 2);
6+
}
7+
8+
console.log(isEven(50));
9+
// → true
10+
console.log(isEven(75));
11+
// → false
12+
console.log(isEven(-1));
13+
// → false

solution/Chapter03/solution3.3.js

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
function countChar(string, ch) {
2+
let counted = 0;
3+
for (let i = 0; i < string.length; i++) {
4+
if (string[i] == ch) {
5+
counted += 1;
6+
}
7+
}
8+
return counted;
9+
}
10+
11+
function countBs(string) {
12+
return countChar(string, "B");
13+
}
14+
15+
console.log(countBs("BBC"));
16+
// → 2
17+
console.log(countChar("kakkerlak", "k"));
18+
// → 4

solution/Chapter04/solution4.1.js

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
function range(start, end, step = start < end ? 1 : -1) {
2+
let array = [];
3+
4+
if (step > 0) {
5+
for (let i = start; i <= end; i += step) array.push(i);
6+
} else {
7+
for (let i = start; i >= end; i += step) array.push(i);
8+
}
9+
return array;
10+
}
11+
12+
function sum(array) {
13+
let total = 0;
14+
for (let value of array) {
15+
total += value;
16+
}
17+
return total;
18+
}
19+
20+
console.log(range(1, 10));
21+
// → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
22+
console.log(range(5, 2, -1));
23+
// → [5, 4, 3, 2]
24+
console.log(sum(range(1, 10)));
25+
// → 55

solution/Chapter04/solution4.2.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
function reverseArray(array) {
2+
let output = [];
3+
for (let i = array.length - 1; i >= 0; i--) {
4+
output.push(array[i]);
5+
}
6+
return output;
7+
}
8+
9+
function reverseArrayInPlace(array) {
10+
for (let i = 0; i < Math.floor(array.length / 2); i++) {
11+
let old = array[i];
12+
array[i] = array[array.length - 1 - i];
13+
array[array.length - 1 - i] = old;
14+
}
15+
return array;
16+
}
17+
18+
console.log(reverseArray(["A", "B", "C"]));
19+
// → ["C", "B", "A"];
20+
let arrayValue = [1, 2, 3, 4, 5];
21+
reverseArrayInPlace(arrayValue);
22+
console.log(arrayValue);
23+
// → [5, 4, 3, 2, 1]

solution/Chapter04/solution4.3.js

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
function arrayToList(array) {
2+
let list = null;
3+
for (let i = array.length - 1; i >= 0; i--) {
4+
list = { value: array[i], rest: list };
5+
}
6+
return list;
7+
}
8+
9+
function listToArray(list) {
10+
let array = [];
11+
for (let node = list; node; node = node.rest) {
12+
array.push(node.value);
13+
}
14+
return array;
15+
}
16+
17+
function prepend(value, list) {
18+
return { value, rest: list };
19+
}
20+
21+
function nth(list, n) {
22+
if (!list) return undefined;
23+
else if (n == 0) return list.value;
24+
else return nth(list.rest, n - 1);
25+
}
26+
27+
console.log(arrayToList([10, 20]));
28+
// → {value: 10, rest: {value: 20, rest: null}}
29+
console.log(listToArray(arrayToList([10, 20, 30])));
30+
// → [10, 20, 30]
31+
console.log(prepend(10, prepend(20, null)));
32+
// → {value: 10, rest: {value: 20, rest: null}}
33+
console.log(nth(arrayToList([10, 20, 30]), 1));
34+
// → 20

solution/Chapter04/solution4.4.js

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
function deepEqual(a, b) {
2+
if (a === b) return true;
3+
4+
if (a == null || typeof a != "object" || b == null || typeof b != "object")
5+
return false;
6+
7+
let keysA = Object.keys(a),
8+
keysB = Object.keys(b);
9+
10+
if (keysA.length != keysB.length) return false;
11+
12+
for (let key of keysA) {
13+
if (!keysB.includes(key) || !deepEqual(a[key], b[key])) return false;
14+
}
15+
16+
return true;
17+
}
18+
19+
let obj = { here: { is: "an" }, object: 2 };
20+
console.log(deepEqual(obj, obj));
21+
// → true
22+
console.log(deepEqual(obj, { here: 1, object: 2 }));
23+
// → false
24+
console.log(deepEqual(obj, { here: { is: "an" }, object: 2 }));
25+
// → true

solution/Chapter05/solution5.1.js

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
let arrays = [[1, 2, 3], [4, 5], [6]];
2+
3+
console.log(arrays.reduce((flat, current) => flat.concat(current), []));
4+
// → [1, 2, 3, 4, 5, 6]

solution/Chapter05/solution5.2.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
function loop(start, test, update, body) {
2+
for (let value = start; test(value); value = update(value)) {
3+
body(value);
4+
}
5+
}
6+
7+
loop(
8+
3,
9+
(n) => n > 0,
10+
(n) => n - 1,
11+
console.log
12+
);
13+
// → 3
14+
// → 2
15+
// → 1

solution/Chapter05/solution5.3.js

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
function every(array, predicate) {
2+
for (let element of array) {
3+
if (!predicate(element)) return false;
4+
}
5+
return true;
6+
}
7+
8+
function every2(array, predicate) {
9+
return !array.some((element) => !predicate(element));
10+
}
11+
12+
console.log(every([1, 3, 5], (n) => n < 10));
13+
// → true
14+
console.log(every([2, 4, 16], (n) => n < 10));
15+
// → false
16+
console.log(every([], (n) => n < 10));
17+
// → true

solution/Chapter05/solution5.4.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
function dominantDirection(text) {
2+
let counted = countBy(text, (char) => {
3+
let script = characterScript(char.codePointAt(0));
4+
return script ? script.direction : "none";
5+
}).filter(({ name }) => name != "none");
6+
7+
if (counted.length == 0) return "ltr";
8+
9+
return counted.reduce((a, b) => (a.count > b.count ? a : b)).name;
10+
}
11+
12+
console.log(dominantDirection("Hello!"));
13+
// → ltr
14+
console.log(dominantDirection("Hey, مساء الخير"));
15+
// → rtl

solution/Chapter06/solution6.1.js

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Vec {
2+
constructor(x, y) {
3+
this.x = x;
4+
this.y = y;
5+
}
6+
7+
plus(other) {
8+
return new Vec(this.x + other.x, this.y + other.y);
9+
}
10+
11+
minus(other) {
12+
return new Vec(this.x - other.x, this.y - other.y);
13+
}
14+
15+
get length() {
16+
return Math.sqrt(this.x * this.x + this.y * this.y);
17+
}
18+
}
19+
20+
console.log(new Vec(1, 2).plus(new Vec(2, 3)));
21+
// → Vec{x: 3, y: 5}
22+
console.log(new Vec(1, 2).minus(new Vec(2, 3)));
23+
// → Vec{x: -1, y: -1}
24+
console.log(new Vec(3, 4).length);
25+
// → 5

0 commit comments

Comments
 (0)