From 491b387aecc3523eb7964c193e2881ff930cca05 Mon Sep 17 00:00:00 2001 From: RenatZubakin Date: Fri, 8 Oct 2021 04:35:22 +0500 Subject: [PATCH 1/2] 1-6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit выполнены задания 1-6 --- README.md | 10 ++-- index.html | 12 +++++ index.js | 134 +++++++++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 141 insertions(+), 15 deletions(-) create mode 100644 index.html diff --git a/README.md b/README.md index 0c641fb..e3b0505 100644 --- a/README.md +++ b/README.md @@ -8,13 +8,13 @@ Сейчас он знает только команду `exit`, остальные нужно дописать тебе. -1. Получи из всех файлов все однострочные комментарии, начинающиеся с `TODO`. Все комментарии имеют одинаковое начало: два слеша, пробел, слово `TODO` капсом, снова пробел и дальше текст комментария. Например: +-1. Получи из всех файлов все однострочные комментарии, начинающиеся с `TODO`. Все комментарии имеют одинаковое начало: два слеша, пробел, слово `TODO` капсом, снова пробел и дальше текст комментария. Например: ``` // TODO Переделать это! ``` -2. Сейчас метод `processCommand` обрабатывает только команду `exit` и завершает процесс в node. Научись обрабатывать еще одну команду из консоли: +-2. Сейчас метод `processCommand` обрабатывает только команду `exit` и завершает процесс в node. Научись обрабатывать еще одну команду из консоли: ``` show : показать все todo @@ -22,13 +22,13 @@ Выводить нужно стандартным выводом в консоль `console.log`. Можешь выводить как угодно твоим эстетическим чувствам: можно выводить просто массив в консоль, можно каждый элемент на новой строчке. -3. В комментарии может присутствовать восклицательный знак (!), что означает, что это задача с высоким приоритетом. Научись обрабатывать команду из консоли: +-3. В комментарии может присутствовать восклицательный знак (!), что означает, что это задача с высоким приоритетом. Научись обрабатывать команду из консоли: ``` important : показывать только todo, в которых есть восклицательный знак ``` -4. Текст в todo может быть представлен обычным текстом. +-4. Текст в todo может быть представлен обычным текстом. Или же использовать специальную разметку: `// TODO {Имя автора}; {Дата комментария}; {текст комментария}` После имени и даты обязательно ставится точка с запятой, а вот пробел между ними не обязателен. Научись обрабатывать еще одну команду из консоли: @@ -40,7 +40,7 @@ Причем имя пользователя должно быть регистронезависимо. Пример команды: `user veronika` -5. Научись обрабатывать команды +-5. Научись обрабатывать команды ``` sort {importance | user | date} : выводит отсортированные todo diff --git a/index.html b/index.html new file mode 100644 index 0000000..44f2d35 --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + + + + + + + Document + + + + + \ No newline at end of file diff --git a/index.js b/index.js index 8635050..55a1c95 100644 --- a/index.js +++ b/index.js @@ -1,25 +1,139 @@ -const {getAllFilePathsWithExtension, readFile} = require('./fileSystem'); -const {readLine} = require('./console'); - +const { getAllFilePathsWithExtension, readFile } = require('./fileSystem'); +const { readLine } = require('./console'); +const { count } = require('console'); + const files = getFiles(); - + console.log('Please, write your command!'); readLine(processCommand); - + function getFiles() { const filePaths = getAllFilePathsWithExtension(process.cwd(), 'js'); return filePaths.map(path => readFile(path)); -} - +}; + function processCommand(command) { - switch (command) { + let commands = command.split(" "); + switch (commands[0]) { case 'exit': process.exit(0); break; - default: - console.log('wrong command'); + case 'show': + console.log(toShow()); + break; + case 'important': + console.log(important()); + break; + case 'user': + console.log(user(commands[1])); + break; + case 'sort': + switch (commands[1]){ + case 'importance': + console.log(sortImportance()); + break; + case 'user': + console.log(sortUser()); + case 'date': + console.log(sortDate()); + break; + }; + case 'date': + console.log(doDate(commands[1])); break; + default: + console.log('wrong command'); + break; + } +}; + +function toShow(){ + let lines = []; + for (let file of files) + lines.push(...file.split('\r\n')); + lines = lines.flat(Infinity); + const matches = []; + for (let line of lines) { + let search = line.indexOf(`// TODO`); + if (search != -1) + + matches.push(line.substring(search)); } + return matches; +}; + +function important(){ + let importantLines = []; + for (let line of toShow()){ + if (line.includes('!')){ + importantLines.push(line); + } + } + return importantLines; +}; + +function user(name){ + return toShow().filter(line => line.toLowerCase().includes(name.toLowerCase())); +}; + +function sortImportance(){ + return toShow().sort((line1, line2) => line2.split('!').length - line1.split('!').length); +}; + +function sortUser() { + return toShow().sort((x, y) => { + let name1=x.toLowerCase(), name2=y.toLowerCase() + if (x.split(";").length !== 1) { + if (name1 < name2) + return -1 + if (name1 > name2) + return 1 + return 0; + } else if (y.split(";").length === 1) { + return -1; + } else { + return 0; + } + }); } +function sortDate() { + return toShow().sort((x, y) => { + let line1 = x.split('; '), line2 = y.split('; '); + if (line1.length === 3) { + if (line1[1] > line2[1]) + return -1; + if (line1[1] < line2[1]) + return 1; + return 0; + } + else if (line2.length === 1) { + return -1; + } + else { + return 0; + } + }); +} + +function doDate(date1){ + let res =[]; + let inputDate=date1.split('-'); + listDates= toShow().filter(line=> line.split('; ').length>=2); + for(let line of listDates){ + let flag = true; + lineDate= line.split('; ')[1].split('-'); + for(let i=0;ilineDate[i]){ + flag=false; + } + } + if(flag) { + res.push(line); + } + } + return res; +}; + // TODO you can do it! + \ No newline at end of file From 218bedf35ca883fdc3ffaff2b97bc0a2698be238 Mon Sep 17 00:00:00 2001 From: RenatZubakin Date: Fri, 15 Oct 2021 03:19:48 +0500 Subject: [PATCH 2/2] final --- README.md | 4 ++-- index.js | 67 ++++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 53 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index e3b0505..effeb3c 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Примеры команд: `sort importance`, `sort user`, `sort date` -6. \* Научись обрабатывать команду: +-6. \* Научись обрабатывать команду: ``` date {yyyy[-mm[-dd]]}: показывает все комментарии, созданные после переданной даты. @@ -66,7 +66,7 @@ Примеры команд: `date 2015`, `date 2016-02`, `date 2018-03-02`. -7. \* Научись выводить результаты в консоль в виде таблицы: +-7. \* Научись выводить результаты в консоль в виде таблицы: - каждая строка отображает один комментарий - у таблицы должно быть четыре колонки: важность, пользователь, дата, комментарий diff --git a/index.js b/index.js index 55a1c95..658f855 100644 --- a/index.js +++ b/index.js @@ -19,27 +19,27 @@ function processCommand(command) { process.exit(0); break; case 'show': - console.log(toShow()); + console.log(doHeader(toShow())); break; case 'important': - console.log(important()); + console.log(doHeader(important())); break; case 'user': - console.log(user(commands[1])); + console.log(doHeader(user(commands[1]))); break; case 'sort': switch (commands[1]){ case 'importance': - console.log(sortImportance()); + console.log(doHeader(sortImportance())); break; case 'user': console.log(sortUser()); case 'date': - console.log(sortDate()); + console.log(doHeader(sortDate())); break; }; case 'date': - console.log(doDate(commands[1])); + console.log(doHeader(doDate(commands[1]))); break; default: console.log('wrong command'); @@ -59,7 +59,7 @@ function toShow(){ matches.push(line.substring(search)); } - return matches; + return doTable(matches); }; function important(){ @@ -83,13 +83,13 @@ function sortImportance(){ function sortUser() { return toShow().sort((x, y) => { let name1=x.toLowerCase(), name2=y.toLowerCase() - if (x.split(";").length !== 1) { + if (x.split("|").length !== 1) { if (name1 < name2) return -1 if (name1 > name2) return 1 return 0; - } else if (y.split(";").length === 1) { + } else if (y.split("|").length === 1) { return -1; } else { return 0; @@ -99,15 +99,15 @@ function sortUser() { function sortDate() { return toShow().sort((x, y) => { - let line1 = x.split('; '), line2 = y.split('; '); - if (line1.length === 3) { - if (line1[1] > line2[1]) + let line1 = x.split('|'), line2 = y.split('|'); + if (line1[2].includes('-')&& line2[2].includes('-')) { + if (line1[2] > line2[2]) return -1; - if (line1[1] < line2[1]) + if (line1[2] < line2[2]) return 1; return 0; } - else if (line2.length === 1) { + else if (line2[2].indexOf('-')==-1) { return -1; } else { @@ -119,10 +119,10 @@ function sortDate() { function doDate(date1){ let res =[]; let inputDate=date1.split('-'); - listDates= toShow().filter(line=> line.split('; ').length>=2); + listDates= toShow().filter(line=> line.split('|').length>=2); for(let line of listDates){ let flag = true; - lineDate= line.split('; ')[1].split('-'); + lineDate= line.split(' | ')[2].split('-'); for(let i=0;ilineDate[i]){ flag=false; @@ -135,5 +135,40 @@ function doDate(date1){ return res; }; +function doTable(lines){ + let res=[]; + for (let line of lines){ + let strArr =[]; + let lineSplit = line.split(';'); + if(line.includes('!')) + strArr.push('!'); + else strArr.push(' '); + if (lineSplit.length!=3){ + let a=' '; + strArr.push(a.padEnd(10,' ')); + strArr.push(a.padEnd(11,' ')); + strArr.push(lineSplit[0].split('TODO')[1].substring(0,50).padEnd(50,' ')) + } + if (lineSplit.length==3){ + + strArr.push(lineSplit[0].split('TODO')[1].substring(0,10).padEnd(10,' ')); + strArr.push(lineSplit[1].padEnd(10,' ')); + strArr.push(lineSplit[2].substring(0,50).padEnd(50,' ')); + } + + res.push(strArr.join(' |')); + } + return res; +} + +function doHeader(lines){ + let res = ['!','user'.padEnd(10,' '),' date '.padEnd(11,' '),'comment'.padEnd(50,' ')].join(' |'); + let line = ''.padEnd(res.length,'-'); + lines.unshift(line); + lines.push(line); + lines.unshift(res); + return lines; +} + // TODO you can do it! \ No newline at end of file