From 206753d7cd078f19a309f2d18ef65acdd640777a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A5=D0=BB=D0=B5=D0=B1=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=90=D0=BB=D0=B5=D0=BA?= =?UTF-8?q?=D1=81=D0=B0=D0=BD=D0=B4=D1=80=D0=BE=D0=B2=D0=B8=D1=87?= Date: Thu, 26 Dec 2024 14:23:53 +0300 Subject: [PATCH] Hippopotamus --- .gitignore | 4 + checkstyle.xml | 4 +- .../practice/vol8/process/Information.java | 27 ++++--- .../mifi/practice/vol8/process/Questions.java | 74 +++++++++++++++++++ 4 files changed, 98 insertions(+), 11 deletions(-) create mode 100644 vol8/src/main/java/ru/mifi/practice/vol8/process/Questions.java diff --git a/.gitignore b/.gitignore index f50a728..2a2f439 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,7 @@ vol8/5.fsm.utext vol8/5.rgx.utext duplicate.csv .output +questions.adoc +questions.pdf +questions.docx +questions.html diff --git a/checkstyle.xml b/checkstyle.xml index dfd671f..2baeab8 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -240,12 +240,12 @@ LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_WHILE, METHOD_CALL, METHOD_DEF, QUESTION, RESOURCE_SPECIFICATION, SUPER_CTOR_CALL, LAMBDA"/> - + ACCEPTING = Set.of("КАБО-01-23", "КАБО-02-23", "КВБО-01-23"); - private record Student(String code, String group, String fio) implements Comparable { + public record Student(String code, String group, String fio) implements Comparable { @Override public int compareTo(Student o) { return code.compareTo(o.code); } } - public static void main(String[] args) throws IOException { - String fileName = "C:\\Users\\Pastor\\Downloads\\courseid_9687_participants.csv"; - String output = ".output"; - Statistics statistics = new Statistics.Default("E:\\GitHub\\algorithms-and-data-structures-2024\\students"); - final Map scanned = statistics.scan(); + static Map> parseStudents(String fileName) throws IOException { + return parseStudents(fileName, ACCEPTING); + } + + static Map> parseStudents(String fileName, Set accepting) throws IOException { Map> students = new HashMap<>(); try (BufferedReader br = new BufferedReader(new FileReader(fileName))) { String line; @@ -39,6 +39,9 @@ public static void main(String[] args) throws IOException { String code = values[2].trim().toUpperCase(Locale.ROOT).replaceAll("\"", "") .replace('К', 'K').replace('Л', 'L').replace('Р', 'R'); String group = values[4].trim().toUpperCase(Locale.ROOT).replaceAll("\"", ""); + if (!accepting.contains(group)) { + continue; + } if (!code.isEmpty()) { String reduced = String.join(".", io.chars().filter(Character::isUpperCase).mapToObj(Character::toString).reduce("", (a, b) -> a + b, (a, b) -> a + b).split("")) + "."; @@ -48,12 +51,18 @@ public static void main(String[] args) throws IOException { } } students.forEach((k, v) -> v.sort(Student::compareTo)); + return students; + } + + public static void main(String[] args) throws IOException { + String fileName = "C:\\Users\\Pastor\\Downloads\\courseid_9687_participants.csv"; + String output = ".output"; + Statistics statistics = new Statistics.Default("E:\\GitHub\\algorithms-and-data-structures-2024\\students"); + final Map scanned = statistics.scan(); + Map> students = parseStudents(fileName, ACCEPTING); File outputFile = new File(output); outputFile.mkdirs(); for (Map.Entry> entry : students.entrySet()) { - if (!ACCEPTING.contains(entry.getKey())) { - continue; - } try (BufferedWriter bw = new BufferedWriter(new FileWriter(new File(outputFile, entry.getKey() + ".adoc")))) { bw.append(":stem: latexmath").append("\n\n"); bw.append("= `").append(entry.getKey()).append("`\n").append("\n"); diff --git a/vol8/src/main/java/ru/mifi/practice/vol8/process/Questions.java b/vol8/src/main/java/ru/mifi/practice/vol8/process/Questions.java new file mode 100644 index 0000000..ea3b374 --- /dev/null +++ b/vol8/src/main/java/ru/mifi/practice/vol8/process/Questions.java @@ -0,0 +1,74 @@ +package ru.mifi.practice.vol8.process; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import static ru.mifi.practice.vol8.process.Information.parseStudents; + +public abstract class Questions { + private static final String[][] QUESTIONS = new String[][]{ + {"Двусвязный циклический", ""}, + {"Двусвязный список", ""}, + {"Односвязный список", ""}, + {"Стек на списке", ""}, + {"Стек на массиве", ""}, + {"Очередь на списке", ""}, + {"Очередь на массиве", ""}, + {"Очередь на куче", ""}, + {"BST", ""}, + {"2-3", ""}, + {"AVL", ""}, + {"Хеш таблица", ""}, + {"Обход в глубину", ""}, + {"Обход в ширину", ""}, + {"Кратчайший путь", ""}, + {"Алгоритм Дейкстры", ""}, + {"Бинарный поиск", ""}, + {"Сортировка слиянием", ""}, + {"Сортировка быстрая", ""}, + {"Джонсона-Троттера", ""}, + {"Алгоритм Хаффмана", ""}, + }; + + @SuppressWarnings("checkstyle:OperatorWrap") + static final String PREAMBLE = "" + + "[small]#*Нельзя*:\n" + + "1. Использовать стандартные классы входяще в `JDK` реализующие алгоритмы или структуры данных;\n" + + "2. Пользоваться помощью `ИИ`;\n" + + "3. Пользоваться любыми ресурсами из сети интернет.#\n" + + "[small]#*Необходимо*:\n" + + "1. Рассказать устно об алгоритме и/или структуре данных в задании. Дать асимптотические характеристики " + + "алгоритму(-ам) используемым в задании;\n" + + "2. Реализовать при помощи ЯПВУ `Java`;\n" + + "3. Привести примеры данных позволяющие проверить работоспособность реализации и рассмотреть граничные характеристики алгоритма;\n" + + "4. Для структуры данных реализовать набор базовых алгоритмов для нее и дать описание им в соответствии с п.1.#"; + + public static void main(String[] args) throws IOException { + var students = parseStudents("C:\\Users\\Pastor\\Downloads\\courseid_9687_participants.csv"); + var output = new File(".output/questions"); + output.mkdirs(); + for (Map.Entry> entry : students.entrySet()) { + try (BufferedWriter w = new BufferedWriter(new FileWriter(new File(output, entry.getKey() + ".adoc")))) { + w.append("= `").append(entry.getKey()).append("`").append("\n").append(":hardbreaks-option:").append("\n").append("\n"); + w.append(PREAMBLE).append("\n").append("\n"); + w.append("[cols=\"^5%m,25%m,^40%m,^25%m,^5%m\"]").append("\n"); + w.append("|===").append("\n"); + w.append("|№|Алгоритм/Структура|Ф.И.О.|Примечание|Оц.").append("\n"); + int count = 0; + for (String[] question : QUESTIONS) { + w.append("\n"); + w.append("|").append(String.valueOf(count++)).append("\n"); + w.append("|**").append(question[0]).append("**\n"); + w.append("|").append(question[1]).append("\n"); + w.append("|").append("\n"); + w.append("|").append("\n"); + } + w.append("|===").append("\n"); + } + } + } +}