|
| 1 | +# Упражнения: Функции |
| 2 | + |
| 3 | +1. Реализуйте функцию `random(min, max)`, возвращающую псевдо-случайное |
| 4 | +значение от `min` до `max`. Используйте `Math.random()` и `Math.floor()` |
| 5 | +2. Реализуйте функцию `generateKey(length, characters)`, возвращающую строку |
| 6 | +случайных символов из набора `characters` длиной `length`. Например: |
| 7 | +```js |
| 8 | +const characters = 'abcdefghijklmnopqrstuvwxyz0123456789'; |
| 9 | +const key = generateKey(16, characters); |
| 10 | +console.log(key); // eg599gb60q926j8i |
| 11 | +``` |
| 12 | +3. Преобразуйте IP адрес (IPv4) в число, содержащее 4 байта адреса, |
| 13 | +сдвинутые битовым сдвигом, по такой схеме: |
| 14 | +- 1 байт сдвинут 3 раза на 8 бит влево |
| 15 | +- 2 байт сдвинут 2 раза на 8 бит влево |
| 16 | +- 3 байт сдвинут 1 раз на 8 бит влево |
| 17 | +- 1 байт не сдвинут |
| 18 | +Например: '10.0.0.1': |
| 19 | +- Преобразовываем строку `'10.0.0.1'` в массив `['10', '0', '0', '1']` |
| 20 | +- Преобразовываем массив `['10', '0', '0', '1']` в массив `[10, 0, 0, 1]` |
| 21 | +- Сдвигаем все элементы по приведенной схеме при помощи цикла: |
| 22 | +`[10 << 8 << 8 << 8, 0 << 8 << 8, 0 << 8, 1]` и получаем `[167772160, 0, 0, 1]` |
| 23 | +- Суммируем все элементы и получаем `167772161` |
| 24 | +- Оптимизируем код через использование `Array.prototype.reduce` |
| 25 | +Используйте значение аргумента функции по умолчанию '127.0.0.1'. |
| 26 | +Еще примеры: |
| 27 | +``` |
| 28 | +127.0.0.1 -> 2130706433 |
| 29 | +10.0.0.1 -> 167772161 |
| 30 | +192.168.1.10 -> -1062731510 |
| 31 | +165.225.133.150 -> -1511946858 |
| 32 | +0.0.0.0 -> 0 |
| 33 | +8.8.8.8 -> 0x08080808 |
| 34 | +``` |
| 35 | +4. Реализуйте интроспекцию объекта: |
| 36 | +- Проитериуйте все ключи объекта `iface` |
| 37 | +- Возьмите ключи функционального типа |
| 38 | +- Для каждой функции возьмите длину |
| 39 | +- Сохраните результаты в двумерный массив |
| 40 | + |
| 41 | +Например, из: |
| 42 | +```js |
| 43 | +{ |
| 44 | + m1: x => [x], |
| 45 | + m2: function (x, y) { |
| 46 | + return [x, y]; |
| 47 | + }, |
| 48 | + m3(x, y, z) { |
| 49 | + return [x, y, z]; |
| 50 | + } |
| 51 | +} |
| 52 | +``` |
| 53 | +нужно получить: |
| 54 | +```js |
| 55 | +[ |
| 56 | + ['m1', 1], |
| 57 | + ['m2', 2], |
| 58 | + ['m3', 3] |
| 59 | +] |
| 60 | +``` |
0 commit comments