-
Notifications
You must be signed in to change notification settings - Fork 0
/
3f-changing-words.js
85 lines (65 loc) · 3.59 KB
/
3f-changing-words.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
F. Замена слов
Ограничение времени 1 секунда (фактическое использование на тестах – до 337ms)
Ограничение памяти 64Mb (фактическое использование на тестах – до 29.85Mb)
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
С целью экономии чернил в картридже принтера было принято решение укоротить некоторые слова в тексте. Для этого был составлен словарь слов, до которых можно сокращать более длинные слова. Слово из текста можно сократить, если в словаре найдется слово, являющееся началом слова из текста. Например, если в списке есть слово "лом", то слова из текста "ломбард", "ломоносов" и другие слова, начинающиеся на "лом", можно сократить до "лом".
Если слово из текста можно сократить до нескольких слов из словаря, то следует сокращать его до самого короткого слова.
Формат ввода
В первой строке через пробел вводятся слова из словаря, слова состоят из маленьких латинских букв. Гарантируется, что словарь не пуст и количество слов в словаре не превышет 1000, а длина слов — 100 символов.
Во второй строке через пробел вводятся слова текста (они также состоят только из маленьких латинских букв). Количество слов в тексте не превосходит 10^5, а суммарное количество букв в них — 10^6.
Формат вывода
Выведите текст, в котором осуществлены замены.
Пример 1
Ввод
a b
abdafb basrt casds dsasa a
Вывод
a b casds dsasa a
Пример 2
Ввод
aa bc aaa
a aa aaa bcd abcd
Вывод
a aa aa bc abcd
*/
const fs = require('fs');
const input = fs.readFileSync('input.txt', 'utf8').toString().trim().split('\n');
const dictionaryInput = input[0] + ' ';
const dictionaryInputLength = dictionaryInput.length;
const dictionaryMap = new Map();
const textInput = (input[1] || '') + ' ';
const textInputLength = textInput.length;
let valueString = '';
for (let pos = 0; pos < dictionaryInputLength; ++pos) {
if (dictionaryInput[pos] === ' ') {
if (!dictionaryMap.has(valueString)) {
dictionaryMap.set(valueString, true);
}
valueString = '';
} else {
valueString += dictionaryInput[pos];
}
}
let resultText = '';
let skipWord = false;
valueString = '';
for (let pos = 0; pos < textInputLength; ++pos) {
if (textInput[pos] === ' ') {
if (!skipWord) {
resultText += ' ' + valueString;
}
valueString = '';
skipWord = false;
} else {
if (!skipWord) {
valueString += textInput[pos];
if (dictionaryMap.has(valueString)) {
skipWord = true;
resultText += ' ' + valueString;
}
}
}
}
fs.writeFileSync('output.txt', `${resultText.trim()}`);