add solution for hw4:3435
Some checks failed
Fast Reverse Tests / test (push) Failing after 4s
Reverse Tests / test (push) Failing after 4s
Sum Tests / test (push) Failing after 4s
Word Stat Tests / test (push) Failing after 4s

This commit is contained in:
2026-01-31 15:37:58 +05:00
parent ab51c1a3dc
commit 971119da82
2 changed files with 74 additions and 1 deletions

View File

@@ -376,7 +376,7 @@ include_toc: true
суффиксы слов, встречающихся во входном файле, суффиксы слов, встречающихся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению). упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLengthSuffix` * Класс должен иметь имя `WordStatLengthSuffix`
* *3233* * *3233*
* Выходной файл должен содержать все различные * Выходной файл должен содержать все различные
слова встречающиеся во входном файле, слова встречающиеся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению). упорядоченные по возрастанию длины (при равенстве по первому вхождению).

View File

@@ -0,0 +1,73 @@
import java.io.*;
import java.util.*;
public class WordStatLengthSuffix {
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 (wordMap.containsKey(word)) {
wordMap.get(word).count++;
} else {
wordMap.put(word, new WordInfo(word, 1, wordIndex));
wordIndex++;
}
sb.setLength(0);
}
}
data = r.read();
}
if (sb.length() > 0) {
String word = sb.toString().toLowerCase();
if (wordMap.containsKey(word)) {
wordMap.get(word).count++;
} else {
wordMap.put(word, new WordInfo(word, 1, 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) {
if (info.word.length != 1) {
writer.println(info.word.substring(info.word.length / 2) + " " + info.count);
}
}
writer.close();
} catch (Exception ex) {
System.err.println("An error occured: " + ex.getMessage());
}
}
}