add solution for hw4:4749
All checks were successful
Fast Reverse Tests / test (push) Successful in 14s
Reverse Tests / test (push) Successful in 9s
Sum Tests / test (push) Successful in 8s
Word Stat Tests / test (push) Successful in 8s

This commit is contained in:
2026-02-02 12:02:40 +05:00
parent 29c361725e
commit b3dd5ae4c7
2 changed files with 81 additions and 2 deletions

View File

@@ -360,7 +360,7 @@ include_toc: true
середины слов, встречающихся во входном файле, середины слов, встречающихся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению). упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLengthMiddle` * Класс должен иметь имя `WordStatLengthMiddle`
* *3839* * *3839*
* Назовём _аффиксами слова_ * Назовём _аффиксами слова_
его префикс и суффикс длины `n / 2`, где `n` — длина слова. его префикс и суффикс длины `n / 2`, где `n` — длина слова.
Слова длины один игнорируются. Слова длины один игнорируются.
@@ -381,7 +381,7 @@ include_toc: true
слова встречающиеся во входном файле, слова встречающиеся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению). упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLength` * Класс должен иметь имя `WordStatLength`
* *4142* * *4142*
* Назовём _серединой слова_ подстроку, полученную удалением * Назовём _серединой слова_ подстроку, полученную удалением
первых и последних 3 символов слова. первых и последних 3 символов слова.
Слова длины меньшей 7 игнорируются. Слова длины меньшей 7 игнорируются.

View File

@@ -0,0 +1,79 @@
import java.io.*;
import java.util.*;
public class WordStatLengthPrefix {
public static void main(String[] args) {
if (args.length != 2) {
System.err.println("incorrect input!");
System.err.println("usage: java WordStat inputFile outputFile");
}
String inputFileName = args[0];
String outputFileName = args[1];
try {
BufferedReader r = new BufferedReader(new FileReader(inputFileName));
Map<String, WordInfo> wordMap = new HashMap<>();
StringBuilder sb = new StringBuilder();
int wordIndex = 0;
int data = r.read();
while (data != -1) {
char c = (char) data;
if (Character.getType(c) == Character.DASH_PUNCTUATION ||
Character.isLetter(c) || c == '\'') {
sb.append(c);
} else {
if (sb.length() > 0) {
String word = sb.toString().toLowerCase();
if (word.length() != 1) {
String prefix = word.substring(0, word.length() / 2);
if (wordMap.containsKey(prefix)) {
wordMap.get(prefix).count++;
} else {
wordMap.put(prefix, new WordInfo(prefix, 1, wordIndex));
wordIndex++;
}
}
sb.setLength(0);
}
}
data = r.read();
}
if (sb.length() > 0) {
String word = sb.toString().toLowerCase();
if (word.length() != 1) {
String prefix = word.substring(0, word.length() / 2);
if (wordMap.containsKey(prefix)) {
wordMap.get(prefix).count++;
} else {
wordMap.put(prefix, new WordInfo(prefix, 1, wordIndex));
wordIndex++;
}
}
}
r.close();
List<WordInfo> sortedWords = new ArrayList<>(wordMap.values());
sortedWords.sort(Comparator.comparingInt((WordInfo w) -> w.word.length())
.thenComparingInt(w -> w.firstIndex));
PrintWriter writer = new PrintWriter(outputFileName, "UTF-8");
for (WordInfo info : sortedWords) {
writer.println(info.word + " " + info.count);
}
writer.close();
} catch (Exception ex) {
System.err.println("An error occured: " + ex.getMessage());
}
}
}