From 096e8eedbffffbfae92eb7ff3cdd3771e07a059f Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 14 Oct 2019 23:48:32 +0300 Subject: [PATCH 1/7] Fix video Closes #16 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 005400b..669b1c4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ # Different implementation of iterations as a code abstraction -[![Массивы, объекты, классы, прототипы](https://img.youtube.com/vi/VBMGnAPfmsY/0.jpg)](https://www.youtube.com/watch?v=/VBMGnAPfmsY) +[![Массивы, объекты, классы, прототипы](https://img.youtube.com/vi/VBMGnAPfmsY/0.jpg)](https://www.youtube.com/watch?v=VBMGnAPfmsY) [![Итерирование, циклы и итераторы](https://img.youtube.com/vi/lq3b5_UGJas/0.jpg)](https://www.youtube.com/watch?v=lq3b5_UGJas) From 9c7edda86fa583dd1f94e9b4c5ff56337addc125 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 15 Oct 2019 12:16:04 +0300 Subject: [PATCH 2/7] Add nested loops task --- Exercises/6-matrix.js | 9 +++++++++ Exercises/6-matrix.test | 13 +++++++++++++ Solutions/6-matrix.js | 15 +++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 Exercises/6-matrix.js create mode 100644 Exercises/6-matrix.test create mode 100644 Solutions/6-matrix.js diff --git a/Exercises/6-matrix.js b/Exercises/6-matrix.js new file mode 100644 index 0000000..b768c0a --- /dev/null +++ b/Exercises/6-matrix.js @@ -0,0 +1,9 @@ +'use strict'; + +const max = matrix => { + // Use nested for loop to find max value in 2d matrix + // For example max([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) + // should return 9 +}; + +module.exports = { max }; diff --git a/Exercises/6-matrix.test b/Exercises/6-matrix.test new file mode 100644 index 0000000..aedfec3 --- /dev/null +++ b/Exercises/6-matrix.test @@ -0,0 +1,13 @@ +({ + name: 'max', + length: [220, 300], + cases: [ + [[[10]], 10], + [[[1, 2], [3, 4], [5, 6]], 6], + [[[-1, 1], [2, -1], [-1, 0]], 2], + ], + test: max => { + const src = max.toString(); + if (!src.includes('for (')) throw new Error('Use for loop'); + } +}) diff --git a/Solutions/6-matrix.js b/Solutions/6-matrix.js new file mode 100644 index 0000000..78369e8 --- /dev/null +++ b/Solutions/6-matrix.js @@ -0,0 +1,15 @@ +'use strict'; + +const max = matrix => { + let value = matrix[0][0]; + for (let i = 0; i < matrix.length; i++) { + const row = matrix[i]; + for (let j = 0; j < row.length; j++) { + const cell = row[j]; + if (value < cell) value = cell; + } + } + return value; +}; + +module.exports = { max }; From d20b5b6b0fa8d6d9ca680ae225a2188b117fb31d Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 15 Oct 2019 13:04:11 +0300 Subject: [PATCH 3/7] Add for..in task --- Exercises/7-ages.js | 19 +++++++++++++++++++ Exercises/7-ages.test | 24 ++++++++++++++++++++++++ Solutions/7-ages.js | 12 ++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 Exercises/7-ages.js create mode 100644 Exercises/7-ages.test create mode 100644 Solutions/7-ages.js diff --git a/Exercises/7-ages.js b/Exercises/7-ages.js new file mode 100644 index 0000000..fc8089b --- /dev/null +++ b/Exercises/7-ages.js @@ -0,0 +1,19 @@ +'use strict'; + +const ages = persons => { + // Use for..in to calculate age for each person + // For example ages({ + // lenin: { born: 1870, died: 1924 }, + // mao: { born: 1893, died: 1976 }, + // gandhi: { born: 1869, died: 1948 }, + // hirohito: { born: 1901, died: 1989 }, + // }) + // should return { + // lenin: 54, + // mao: 83, + // gandhi: 79, + // hirohito: 88, + // } +}; + +module.exports = { ages }; diff --git a/Exercises/7-ages.test b/Exercises/7-ages.test new file mode 100644 index 0000000..9802861 --- /dev/null +++ b/Exercises/7-ages.test @@ -0,0 +1,24 @@ +({ + name: 'ages', + length: [150, 190], + cases: [ + [ + { + lenin: { born: 1870, died: 1924 }, + mao: { born: 1893, died: 1976 }, + gandhi: { born: 1869, died: 1948 }, + hirohito: { born: 1901, died: 1989 }, + }, { + lenin: 54, + mao: 83, + gandhi: 79, + hirohito: 88, + } + ] + ], + test: ages => { + const src = ages.toString(); + if (!src.includes('for (')) throw new Error('Use for..in loop'); + if (!src.includes(' in ')) throw new Error('Use for..in loop'); + } +}) diff --git a/Solutions/7-ages.js b/Solutions/7-ages.js new file mode 100644 index 0000000..ccd520f --- /dev/null +++ b/Solutions/7-ages.js @@ -0,0 +1,12 @@ +'use strict'; + +const ages = persons => { + const data = {}; + for (const name in persons) { + const person = persons[name]; + data[name] = person.died - person.born; + } + return data; +}; + +module.exports = { ages }; From bebe19a84c4baa9ec3904128b3fd6659a4f95dc4 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 15 Oct 2019 13:30:55 +0300 Subject: [PATCH 4/7] Add exercises description --- Exercises.ru.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Exercises.ru.md diff --git a/Exercises.ru.md b/Exercises.ru.md new file mode 100644 index 0000000..5ad702f --- /dev/null +++ b/Exercises.ru.md @@ -0,0 +1,47 @@ +# Упражнения + +## Итерирование циклами + +Руализуйте функцию `sum(...args)`, которая суммирует все свои аргументы, пятью +разными способами. Примеры вызовов с результатами: +```js +const a = sum(1, 2, 3) // a === 6 +const b = sum(0) // b === 0 +const c = sum() // c === 0 +const d = sum(1, -1, 1) // d === 1 +const e = sum(10, -1, -1, -1) // e === 7 +``` + +1. Цикл `for` +2. Цикл `for..of` +3. Цикл `while` +4. Цикл `do..while` +5. Метод `Array.prototype.reduce()` + +## Итерирование по двумерному массиву + +6. Найдите максимальный элемент в двумерном массиве +```js +const m = max([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); +console.log(m); // 9 +``` + +## Итерирование объектов-справочников + +7. При помощи цикла `for..in` перебрать объект-справочник с датами рождения и +смерти людей и вернуть справочник с продолжительностью их жизни. Например: +```js +const persons = { + lenin: { born: 1870, died: 1924 }, + mao: { born: 1893, died: 1976 }, + gandhi: { born: 1869, died: 1948 }, + hirohito: { born: 1901, died: 1989 }, +}; +console.log(ages(persons)); +// { +// lenin: 54, +// mao: 83, +// gandhi: 79, +// hirohito: 88, +// } +``` From 3fd6be562f0d2db75d8f27d1e570e8e39807d202 Mon Sep 17 00:00:00 2001 From: Vladyslav Tkachenko Date: Tue, 15 Oct 2019 14:47:02 +0000 Subject: [PATCH 5/7] Done all tasks --- Exercises/1-for.js | 8 +++++--- Exercises/2-for-of.js | 6 +++--- Exercises/3-while.js | 10 +++++++--- Exercises/4-do-while.js | 12 +++++++++--- Exercises/5-reduce.js | 5 +---- Exercises/6-matrix.js | 12 +++++++++--- Exercises/7-ages.js | 18 +++++------------- 7 files changed, 39 insertions(+), 32 deletions(-) diff --git a/Exercises/1-for.js b/Exercises/1-for.js index 62e6ab8..7dcca00 100644 --- a/Exercises/1-for.js +++ b/Exercises/1-for.js @@ -1,9 +1,11 @@ 'use strict'; const sum = (...args) => { - // Use for loop and accumulator variable - // to calculate sum of all given arguments - // For example sum(1, 2, 3) should return 6 + let sum = 0; + for (let i = 0; i < args.length; i++) { + sum += args[i]; + } + return sum; }; module.exports = { sum }; diff --git a/Exercises/2-for-of.js b/Exercises/2-for-of.js index 9965f25..c9ac0c0 100644 --- a/Exercises/2-for-of.js +++ b/Exercises/2-for-of.js @@ -1,9 +1,9 @@ 'use strict'; const sum = (...args) => { - // Use for..of loop and accumulator variable - // to calculate sum of all given arguments - // For example sum(1, 2, 3) should return 6 + let sum = 0; + for (const i of args) sum += i; + return sum; }; module.exports = { sum }; diff --git a/Exercises/3-while.js b/Exercises/3-while.js index 6110b9f..7a330a4 100644 --- a/Exercises/3-while.js +++ b/Exercises/3-while.js @@ -1,9 +1,13 @@ 'use strict'; const sum = (...args) => { - // Use while loop and accumulator variable - // to calculate sum of all given arguments - // For example sum(1, 2, 3) should return 6 + let sum = 0; + let i = 0; + while (i < args.length) { + sum += args[i]; + i++; + } + return sum; }; module.exports = { sum }; diff --git a/Exercises/4-do-while.js b/Exercises/4-do-while.js index 22d4464..61409e1 100644 --- a/Exercises/4-do-while.js +++ b/Exercises/4-do-while.js @@ -1,9 +1,15 @@ 'use strict'; const sum = (...args) => { - // Use do..while loop and accumulator variable - // to calculate sum of all given arguments - // For example sum(1, 2, 3) should return 6 + if (args.length < 1) return 0; + let sum = 0; + let i = 0; + do { + sum += args[i]; + i++; + } + while (i < args.length); + return sum; }; module.exports = { sum }; diff --git a/Exercises/5-reduce.js b/Exercises/5-reduce.js index a9cb44c..a1dcdf3 100644 --- a/Exercises/5-reduce.js +++ b/Exercises/5-reduce.js @@ -1,8 +1,5 @@ 'use strict'; -const sum = (...args) => 0; -// Use Array.prototype.reduce method -// to calculate sum of all given arguments -// For example sum(1, 2, 3) should return 6 +const sum = (...args) => args.reduce((result, val) => result + val, 0); module.exports = { sum }; diff --git a/Exercises/6-matrix.js b/Exercises/6-matrix.js index b768c0a..5ee8101 100644 --- a/Exercises/6-matrix.js +++ b/Exercises/6-matrix.js @@ -1,9 +1,15 @@ 'use strict'; const max = matrix => { - // Use nested for loop to find max value in 2d matrix - // For example max([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) - // should return 9 + let max = 0; + for (let i = 0; i < matrix.length; i++) { + for (let j = 0; j < matrix[i].length; j++) { + //max = max < matrix[i][j] ? matrix[i][j] : max; + if (max < matrix[i][j]) max = matrix[i][j]; + } + } + return max; }; + module.exports = { max }; diff --git a/Exercises/7-ages.js b/Exercises/7-ages.js index fc8089b..21badb8 100644 --- a/Exercises/7-ages.js +++ b/Exercises/7-ages.js @@ -1,19 +1,11 @@ 'use strict'; const ages = persons => { - // Use for..in to calculate age for each person - // For example ages({ - // lenin: { born: 1870, died: 1924 }, - // mao: { born: 1893, died: 1976 }, - // gandhi: { born: 1869, died: 1948 }, - // hirohito: { born: 1901, died: 1989 }, - // }) - // should return { - // lenin: 54, - // mao: 83, - // gandhi: 79, - // hirohito: 88, - // } + const ages = {}; + for (const element in persons) { + ages[element] = persons[element]['died'] - persons[element]['born']; + } + return ages; }; module.exports = { ages }; From 0e3260b9fc0f6dba5dd79da568b15254aa24c808 Mon Sep 17 00:00:00 2001 From: Vladyslav Tkachenko Date: Wed, 16 Oct 2019 15:44:13 +0300 Subject: [PATCH 6/7] Fixed tasks: 2, 3, 4, 6, 7 --- Exercises/2-for-of.js | 6 +++--- Exercises/3-while.js | 10 ++++------ Exercises/4-do-while.js | 13 +++++-------- Exercises/6-matrix.js | 12 ++++++------ Exercises/7-ages.js | 9 +++++---- 5 files changed, 23 insertions(+), 27 deletions(-) diff --git a/Exercises/2-for-of.js b/Exercises/2-for-of.js index c9ac0c0..e18aa25 100644 --- a/Exercises/2-for-of.js +++ b/Exercises/2-for-of.js @@ -1,9 +1,9 @@ 'use strict'; const sum = (...args) => { - let sum = 0; - for (const i of args) sum += i; - return sum; + let result = 0; + for (const i of args) result += i; + return result; }; module.exports = { sum }; diff --git a/Exercises/3-while.js b/Exercises/3-while.js index 7a330a4..16410fc 100644 --- a/Exercises/3-while.js +++ b/Exercises/3-while.js @@ -1,13 +1,11 @@ 'use strict'; const sum = (...args) => { - let sum = 0; - let i = 0; - while (i < args.length) { - sum += args[i]; - i++; + let result = 0; + while (args.length > 0) { + result += args.pop(); } - return sum; + return result; }; module.exports = { sum }; diff --git a/Exercises/4-do-while.js b/Exercises/4-do-while.js index 61409e1..0776836 100644 --- a/Exercises/4-do-while.js +++ b/Exercises/4-do-while.js @@ -1,15 +1,12 @@ 'use strict'; const sum = (...args) => { - if (args.length < 1) return 0; - let sum = 0; - let i = 0; + if (args.length === 0) return 0; + let result = 0; do { - sum += args[i]; - i++; - } - while (i < args.length); - return sum; + result += args.pop(); + } while (args.length > 0); + return result; }; module.exports = { sum }; diff --git a/Exercises/6-matrix.js b/Exercises/6-matrix.js index 5ee8101..ccf7973 100644 --- a/Exercises/6-matrix.js +++ b/Exercises/6-matrix.js @@ -1,15 +1,15 @@ 'use strict'; const max = matrix => { - let max = 0; + let result = matrix[0][0]; for (let i = 0; i < matrix.length; i++) { - for (let j = 0; j < matrix[i].length; j++) { - //max = max < matrix[i][j] ? matrix[i][j] : max; - if (max < matrix[i][j]) max = matrix[i][j]; + const row = matrix[i]; + for (let j = 0; j < row.length; j++) { + const cell = row[j]; + if (result < cell) result = cell; } } - return max; + return result; }; - module.exports = { max }; diff --git a/Exercises/7-ages.js b/Exercises/7-ages.js index 21badb8..8c267c5 100644 --- a/Exercises/7-ages.js +++ b/Exercises/7-ages.js @@ -1,11 +1,12 @@ 'use strict'; const ages = persons => { - const ages = {}; - for (const element in persons) { - ages[element] = persons[element]['died'] - persons[element]['born']; + const data = {}; + for (const name in persons) { + const person = persons[name]; + ages[name] = person.died - persons.born; } - return ages; + return data; }; module.exports = { ages }; From f432fb3e12c80bef973de1f22be2e07f3e656b71 Mon Sep 17 00:00:00 2001 From: Vladyslav Tkachenko Date: Wed, 16 Oct 2019 12:48:04 +0000 Subject: [PATCH 7/7] Fixed task 7 --- Exercises/7-ages.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Exercises/7-ages.js b/Exercises/7-ages.js index 8c267c5..ccd520f 100644 --- a/Exercises/7-ages.js +++ b/Exercises/7-ages.js @@ -4,7 +4,7 @@ const ages = persons => { const data = {}; for (const name in persons) { const person = persons[name]; - ages[name] = person.died - persons.born; + data[name] = person.died - person.born; } return data; };