Заметки по javascript (nodejs)
Разберем задачи для самопроверки по javascript, которые будем запускать на платформе Node.js установленной на нашем ПК в роли сервера.
2. Равномерно разложить в ряд число Х с количеством элементов У
3. Выборка последней (более поздней) даты из таблицы mysql
Предварительные действия:
1Node.js - это платформа на которой можно выполнять запросы javascript, необходимо установить LTS версию программы, доступную по ссылке https://nodejs.org/en/download/
После скачивания, запустить установочный файл и пройти по шагам, нажимая на "Next" -> "Next" -> "Finish".
2Исходный код javascript будем запускать из "блокнота", сохраненного в расширении *.js. Будет более удобно использовать программу Notepad++, доступную по ссылке https://notepad-plus-plus.org/downloads/
Установка так же простая: "Далее" -> "Далее" до финиша.
3В некоторых заданиях нужно выполнить выборку из таблиц. Node.js может взаимодействовать с базами данных, например с mysql. Для этого установим mysql, доступный по ссылке https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.12.0.msi
Установка через "Next" -> "Next", чекбоксы все оставляем по-умолчанию и проходим до финиша установки.
Дано 2 числа Х и У. Как разложить в ряд число Х с количеством элементов У, чтобы они были размещены равномерно.
При Х = 8, У = 3.
При Х = 7, У = 3.
При Х = 13, У = 4.
Решение задания №1
В блокноте создать файл с именем summands.js со следующим кодом:
// summands.js: function closest_summands(x, y) { var div = x / y, rem = x % y, res = []; for (var i=0; i<rem; i++) res.push( Math.ceil(div) ); for ( ; i<y; i++) // continue res.push( Math.floor(div) ); return res; } x = 13; // задать значение x y = 4; // задать значение y console.log(closest_summands(x,y)); // вывести в консоль ряд
Для x, y присваиваем значения из задания. Получаем результат в консоли Командной строки Windows (cmd). Через команду cd перейти в папку с сохраненным файлом summands.js и запустить его через команду node:
При x=13, y=4 ряд равен 4+3+3+3, т.е. сумма (x)=13 разложилась на количество элементов (y)=4 равномерно по значениям в порядке убывания значения элемента до тех пор, пока хватает суммы 13 для равномерного разложения на слагаемые. Равномерное - здесь ключевое слово, программа раскладывает так, чтобы было задействовано как можно меньше чисел слагаемых, чтобы было более равномерное разложение. Если рассматривать ряд = [ 4, 4, 3, 2 ] (в котором сумма тоже равна 13), то он уступает ряду [ 4, 3, 3, 3 ] по равномерности, т.к. задействовано три разных значения (4,3,2), а в результате ряда [ 4, 3, 3, 3 ] условие выполняется более равномерно, т.к. задействовано два числа (4,3).
- При Х = 8, У = 3. Ряд имеет вид -> [ 3, 3, 2 ];
- При Х = 7, У = 3. Ряд имеет вид -> [ 3, 2, 2 ].
Ниже ситуация отражающая периоды действия цен на товар в виде случайно пересекающихся периодов. Актуальной считается цена с более поздней датой создания.
Цена | Дата "с" | Дата "по" | Дата создания |
100 | 01.01.2018 | 15.05.2018 | 31.12.2017 |
150 | 10.01.2018 | 15.01.2018 | 07.01.2018 |
120 | 01.02.2018 | 01.03.2018 | 10.01.2018 |
110 | 16.05.2018 | 01.06.2018 | 10.05.2018 |
130 | 28.08.2018 | 01.07.2018 | 01.06.2018 |
Напишите алгоритм по избавлению данных от пересечений. Каков будет его результат? Написать решение на javascript (nodejs).
Решение задания №2
Необходимо создать таблицу в mysql как описано в моей статье.
В блокноте создать файл с именем maxdata.js со следующим кодом:
// maxdata.js: const mysql = require("mysql2"); const connection = mysql.createConnection({ host: "localhost", user: "root", database: "sorso", password: "123456", timezone : "+00:00" }); const sql = 'SELECT cena, data_sozdanyia FROM price t JOIN (SELECT MAX(data_sozdanyia) max FROM price) m ON m.max = t.data_sozdanyia;'; connection.query(sql, function(err, results) { if(err) console.log(err); console.log(results); }); connection.end();
Согласно коду, мы подключаемся к базе mysql используя данные авторизации и названия базы. Далее будет выполняться sql запрос последней даты из таблицы "price".
Проверяем результат запроса в консоли Командной строки Windows (cmd) через команду node:
Как результат мы получили цену соответствующую последней "Дата создания" после выборки из таблицы mysql.
Написать результат всех возможных объединений двух таблиц.
Таблица 1 | Таблица 2 |
1 | 1 |
1 | 1 |
2 | 2 |
null | 2 |
4 | 2 |
null | |
null | |
3 |
Решение задания №3
Необходимо создать таблицу в mysql как описано в моей статье. При заполнении значения null в таблице через команду INSERT INTO пишем 'null'.
В блокноте создать файл с именем innerjoin.js со следующим кодом:
// innerjoin.js: const mysql = require("mysql2"); const connection = mysql.createConnection({ host: "localhost", user: "root", database: "sorso", password: "123456", timezone : "+00:00" }); const sql = 'SELECT * FROM table1 INNER JOIN table2 ON table1.number1 = table2.number2'; connection.query(sql, function(err, results) { if(err) console.log(err); console.log(results); }); connection.end();
Согласно коду, мы подключаемся к базе mysql используя данные авторизации и названия базы. Далее будет выполняться sql запрос слияния 2-х таблиц через INNER JOIN.
Проверяем результат запроса в консоли Командной строки Windows (cmd) через команду node:
Т.е. можно сказать, что получили таблицу после слияния:
+---------+---------+
| number1 | number2 |
+---------+---------+
| 1 | 1 |
| 1 | 1 |
| 1 | 1 |
| 1 | 1 |
| 2 | 2 |
| 2 | 2 |
| 2 | 2 |
+---------+---------+
Палиндром — слово, предложение или последовательность символов, которая абсолютно одинаково читается как в привычном направлении, так и в обратном. К примеру, “Anna” — это палиндром, а “table” и “John” — нет.
Постановка:
Дана строка; нужно написать функцию, которая позволяет вернуть значение true, если строка является палиндромом, и false — если нет. При этом нужно учитывать пробелы и знаки препинания.
Решение задания №4
Следует заметить, что согласно заданию паллиндром должен проверяться без учета регистра (заглавные или прописные буквы). В блокноте создать файл с именем palindrome.js: со следующим кодом:
// palindrome.js: function isPalindrome(str) { str = str.toLowerCase() // преобразование в нижний регистр var strLen = str.length, strReverse = str.split('').reverse().join(''); //Разбиваем строку посимвольно и превращаем ее в массив с помощью split(''), потом применяем к нему метод reverse() и собираем все символы в строку с помощью join('') if (strReverse == str) { return 'is palindrome'; } else { return 'is not palindrome'; } } test = isPalindrome('Anna'); // тестовые палиндромы test2 = isPalindrome('John'); test3 = isPalindrome('table'); console.log('Anna',test); // вывод результата истинности палиндрома console.log('John',test2); console.log('table',test3);
Проверяем результат запроса в консоли Командной строки Windows (cmd) через команду node: