From 6c5544de4e19c6c80d1dcb012f22eb705d0aaa66 Mon Sep 17 00:00:00 2001 From: parfen01 Date: Fri, 7 Oct 2022 20:07:59 +0300 Subject: [PATCH 01/12] All abstract classes Made all abstract classes + pullTaskGenerator + two specific tasks --- lab-01/lab-01/.idea/.gitignore | 8 ++ lab-01/lab-01/.idea/misc.xml | 6 + lab-01/lab-01/.idea/modules.xml | 8 ++ lab-01/lab-01/.idea/uiDesigner.xml | 124 ++++++++++++++++++ lab-01/lab-01/.idea/vcs.xml | 6 + lab-01/lab-01/lab-01.iml | 11 ++ lab-01/lab-01/src/Main.java | 17 +++ .../lab-01/src/by/parfen01/quiser/Quiz.java | 95 ++++++++++++++ .../lab-01/src/by/parfen01/quiser/Result.java | 10 ++ .../lab-01/src/by/parfen01/quiser/Task.java | 21 +++ .../src/by/parfen01/quiser/TaskGenerator.java | 14 ++ .../task_generators/GroupTaskGenerator.java | 34 +++++ .../task_generators/PoolTaskGenerator.java | 75 +++++++++++ .../AbstractMathTaskGenerator.java | 41 ++++++ .../EquationTaskGenerator.java | 29 ++++ .../ExpressionTaskGenerator.java | 29 ++++ .../MathTaskGenerator.java | 30 +++++ .../by/parfen01/quiser/tasks/TextTask.java | 39 ++++++ .../tasks/math_tasks/AbstractMathTask.java | 13 ++ .../quiser/tasks/math_tasks/EquationTask.java | 6 + .../tasks/math_tasks/ExpressionTask.java | 32 +++++ .../quiser/tasks/math_tasks/MathTask.java | 90 +++++++++++++ 22 files changed, 738 insertions(+) create mode 100644 lab-01/lab-01/.idea/.gitignore create mode 100644 lab-01/lab-01/.idea/misc.xml create mode 100644 lab-01/lab-01/.idea/modules.xml create mode 100644 lab-01/lab-01/.idea/uiDesigner.xml create mode 100644 lab-01/lab-01/.idea/vcs.xml create mode 100644 lab-01/lab-01/lab-01.iml create mode 100644 lab-01/lab-01/src/Main.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/Quiz.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/Result.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/Task.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/TaskGenerator.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java create mode 100644 lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java diff --git a/lab-01/lab-01/.idea/.gitignore b/lab-01/lab-01/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/lab-01/lab-01/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/lab-01/lab-01/.idea/misc.xml b/lab-01/lab-01/.idea/misc.xml new file mode 100644 index 0000000..d15472f --- /dev/null +++ b/lab-01/lab-01/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/lab-01/lab-01/.idea/modules.xml b/lab-01/lab-01/.idea/modules.xml new file mode 100644 index 0000000..1e89cde --- /dev/null +++ b/lab-01/lab-01/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/lab-01/lab-01/.idea/uiDesigner.xml b/lab-01/lab-01/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/lab-01/lab-01/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lab-01/lab-01/.idea/vcs.xml b/lab-01/lab-01/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/lab-01/lab-01/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/lab-01/lab-01/lab-01.iml b/lab-01/lab-01/lab-01.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/lab-01/lab-01/lab-01.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/lab-01/lab-01/src/Main.java b/lab-01/lab-01/src/Main.java new file mode 100644 index 0000000..36e3709 --- /dev/null +++ b/lab-01/lab-01/src/Main.java @@ -0,0 +1,17 @@ +import by.parfen01.*; +import java.util.Map; + +public class Main { +// /** +// * @return тесты в {@link Map}, где +// * ключ - название теста {@link String} +// * значение - сам тест {@link Quiz} +// */ +// static Map getQuizMap() { +// // ... +// } + + public static void main() { + System.out.println("Hello world!"); + } +} \ No newline at end of file diff --git a/lab-01/lab-01/src/by/parfen01/quiser/Quiz.java b/lab-01/lab-01/src/by/parfen01/quiser/Quiz.java new file mode 100644 index 0000000..69aabb7 --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/Quiz.java @@ -0,0 +1,95 @@ +package by.parfen01.quiser; + +/** + * Class, который описывает один тест + */ +class Quiz { + TaskGenerator generator; + int taskCount; + int correctAnswerNumber = 0; + int wrongAnswerNumber = 0; + int incorrectInputCount = 0; + Task currentTask; + boolean isLastInputIncorrect = false; + /** + * @param generator генератор заданий + * @param taskCount количество заданий в тесте + */ + Quiz(TaskGenerator generator, int taskCount) { + this.generator = generator; + this.taskCount = taskCount; + currentTask = generator.generate(); + } + + /** + * @return задание, повторный вызов вернет слелующее + * @see Task + */ + Task nextTask() { + if (!isLastInputIncorrect) { + currentTask = generator.generate(); + } + return currentTask; + } + + /** + * Предоставить ответ ученика. Если результат {@link Result#INCORRECT_INPUT}, то счетчик неправильных + * ответов не увеличивается, а {@link #nextTask()} в следующий раз вернет тот же самый объект {@link Task}. + */ + Result provideAnswer(String answer) { + Result result = currentTask.validate(answer); + switch (result) { + case INCORRECT_INPUT -> { + isLastInputIncorrect = true; + } + case OK -> { + ++correctAnswerNumber; + --taskCount; + isLastInputIncorrect = false; + } + case WRONG -> { + ++wrongAnswerNumber; + --taskCount; + isLastInputIncorrect = false; + } + } + + return result; + } + + /** + * @return завершен ли тест + */ + boolean isFinished() { + return taskCount == 0; + } + + /** + * @return количество правильных ответов + */ + int getCorrectAnswerNumber() { + return this.correctAnswerNumber; + } + + /** + * @return количество неправильных ответов + */ + int getWrongAnswerNumber() { + return this.wrongAnswerNumber; + } + + /** + * @return количество раз, когда был предоставлен неправильный ввод + */ + int getIncorrectInputNumber() { + return this.incorrectInputCount; + } + + /** + * @return оценка, которая является отношением количества правильных ответов к количеству всех вопросов. + * Оценка выставляется только в конце! + */ + double getMark() { + return (double)correctAnswerNumber / (correctAnswerNumber + wrongAnswerNumber); + } +} \ No newline at end of file diff --git a/lab-01/lab-01/src/by/parfen01/quiser/Result.java b/lab-01/lab-01/src/by/parfen01/quiser/Result.java new file mode 100644 index 0000000..ce06467 --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/Result.java @@ -0,0 +1,10 @@ +package by.parfen01.quiser; + +/** + * Enum, который описывает результат ответа на задание + */ +public enum Result { + OK, // Получен правильный ответ + WRONG, // Получен неправильный ответ + INCORRECT_INPUT // Некорректный ввод. Например, текст, когда ожидалось число +} \ No newline at end of file diff --git a/lab-01/lab-01/src/by/parfen01/quiser/Task.java b/lab-01/lab-01/src/by/parfen01/quiser/Task.java new file mode 100644 index 0000000..1f4da89 --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/Task.java @@ -0,0 +1,21 @@ +package by.parfen01.quiser; + +/** + * Interface, который описывает одно задание + */ +public interface Task { + /* + @return текст задания + */ + + String getText(); + + /* + * Проверяет ответ на задание и возвращает результат + * + * @param answer ответ на задание + * @return результат ответа + * @see Result + */ + Result validate(String answer); +} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/TaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/TaskGenerator.java new file mode 100644 index 0000000..93c5264 --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/TaskGenerator.java @@ -0,0 +1,14 @@ +package by.parfen01.quiser; + +/** + * Interface, который описывает один генератор заданий + */ +public interface TaskGenerator { + /* + * Возвращает задание. При этом новый объект может не создаваться, если класс задания иммутабельный + * + * @return задание + * @see Task + */ + Task generate(); +} \ No newline at end of file diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java new file mode 100644 index 0000000..623046b --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java @@ -0,0 +1,34 @@ +//package by.parfen01.quiser.task_generators; +// +//import by.parfen01.quiser.Task; +//import by.parfen01.quiser.TaskGenerator; +//import java.util.Collection; +// +//class GroupTaskGenerator implements TaskGenerator { +// /** +// * Конструктор с переменным числом аргументов +// * +// * @param generators генераторы, которые в конструктор передаются через запятую +// */ +// GroupTaskGenerator(TaskGenerator... generators) { +// // ... +// } +// +// /** +// * Конструктор, который принимает коллекцию генераторов +// * +// * @param generators генераторы, которые передаются в конструктор в Collection (например, {@link ArrayList}) +// */ +// GroupTaskGenerator(Collection generators) { +// // ... +// } +// +// /** +// * @return результат метода generate() случайного генератора из списка. +// * Если этот генератор выбросил исключение в методе generate(), выбирается другой. +// * Если все генераторы выбрасывают исключение, то и тут выбрасывается исключение. +// */ +// Task generate() { +// // ... +// } +//} \ No newline at end of file diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java new file mode 100644 index 0000000..cfd9b1d --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java @@ -0,0 +1,75 @@ +package by.parfen01.quiser.task_generators; + +import by.parfen01.quiser.Task; +import by.parfen01.quiser.TaskGenerator; + +import java.util.*; + +public class PoolTaskGenerator implements TaskGenerator { + private ArrayList tasks; + private LinkedHashSet usedTextsOfTasks; + private boolean isAllowedDuplicate; + private int numberOfUsedTasks = 0; + + /** + * Конструктор с переменным числом аргументов + * + * @param allowDuplicate разрешить повторения + * @param tasks задания, которые в конструктор передаются через запятую + */ + public PoolTaskGenerator(boolean allowDuplicate, Task... tasks) { + this.tasks = new ArrayList<>(); + if (tasks == null) { + return; + } + for (Task task : tasks) { + if (task != null) { + this.tasks.add(task); + } + } + isAllowedDuplicate = allowDuplicate; + } + + /** + * Конструктор, который принимает коллекцию заданий + * + * @param allowDuplicate разрешить повторения + * @param tasks задания, которые передаются в конструктор в Collection (например, {@link LinkedList}) + */ + public PoolTaskGenerator(boolean allowDuplicate, Collection tasks) { + this.tasks = new ArrayList<>(); + if (tasks == null) { + return; + } + LinkedHashSet uniqueTexts = new LinkedHashSet<>(); + for (Task task : tasks) { + if (task != null && !uniqueTexts.contains(task.getText())) { + this.tasks.add(task); + uniqueTexts.add(task.getText()); + } + } + isAllowedDuplicate = allowDuplicate; + } + + /** + * @return случайная задача из списка + */ + @Override + public Task generate() { + if (isAllowedDuplicate) { + int numberOfTest = (int) (Math.random() * tasks.size()); + return tasks.get(numberOfTest); + } + if (numberOfUsedTasks == tasks.size()) { + throw new EmptyStackException(); + } + + while(true) { + int numberOfTest = (int) (Math.random() * tasks.size()); + if (!usedTextsOfTasks.contains(tasks.get(numberOfTest).getText())) { + usedTextsOfTasks.add(tasks.get(numberOfTest).getText()); + return tasks.get(numberOfTest); + } + } + } +} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java new file mode 100644 index 0000000..4b7f3a7 --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java @@ -0,0 +1,41 @@ +package by.parfen01.quiser.task_generators.math_task_generators; + +import by.parfen01.quiser.tasks.math_tasks.AbstractMathTask; +import by.parfen01.quiser.tasks.math_tasks.MathTask; + +import java.security.InvalidParameterException; +import java.util.Collections; +import java.util.EnumSet; + +public abstract class AbstractMathTaskGenerator implements MathTaskGenerator { + private final int minNumber; + private final int maxNumber; + private final EnumSet operations; + + AbstractMathTaskGenerator(int minNumber, int maxNumber, EnumSet operations) { + this.minNumber = minNumber; + this.maxNumber = maxNumber; + this.operations = operations.clone(); + if (operations.equals(EnumSet.allOf(MathTask.Operation.class))) { + throw new InvalidParameterException(); + } + if (maxNumber < minNumber) { + throw new InvalidParameterException(); + } + } + + @Override + public int getMaxNumber() { + return maxNumber; + } + + @Override + public int getMinNumber() { + return minNumber; + } + + @Override + public EnumSet getOperations() { + return operations; + } +} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java new file mode 100644 index 0000000..e7b8026 --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java @@ -0,0 +1,29 @@ +//package by.parfen01.quiser.task_generators; +// +//import by.parfen01.quiser.TaskGenerator; +//import by.parfen01.quiser.tasks.math_tasks.EquationTask; +// +//class EquationTaskGenerator implements TaskGenerator { +// /** +// * @param minNumber минимальное число +// * @param maxNumber максимальное число +// * @param generateSum разрешить генерацию с оператором + +// * @param generateDifference разрешить генерацию с оператором - +// * @param generateMultiplication разрешить генерацию с оператором * +// * @param generateDivision разрешить генерацию с оператором / +// */ +// EquationTaskGenerator( +// int minNumber, +// int maxNumber, +// EnumSet +// ) { +// // ... +// } +// +// /** +// * return задание типа {@link EquationTask} +// */ +// EquationTask generate() { +// // ... +// } +//} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java new file mode 100644 index 0000000..09896fd --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java @@ -0,0 +1,29 @@ +//package by.parfen01.quiser.task_generators; +// +//import by.parfen01.quiser.TaskGenerator; +//import by.parfen01.quiser.tasks.math_tasks.ExpressionTask; +// +//class ExpressionTaskGenerator implements TaskGenerator { +// /** +// * @param minNumber минимальное число +// * @param maxNumber максимальное число +// * @param generateSum разрешить генерацию с оператором + +// * @param generateDifference разрешить генерацию с оператором - +// * @param generateMultiplication разрешить генерацию с оператором * +// * @param generateDivision разрешить генерацию с оператором / +// */ +// ExpressionTaskGenerator( +// int minNumber, +// int maxNumber, +// EnumSet +// ) { +// // ... +// } +// +// /** +// * return задание типа {@link ExpressionTask} +// */ +// ExpressionTask generate() { +// // ... +// } +//} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java new file mode 100644 index 0000000..08231c5 --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java @@ -0,0 +1,30 @@ +package by.parfen01.quiser.task_generators.math_task_generators; + +import by.parfen01.quiser.TaskGenerator; +import by.parfen01.quiser.tasks.math_tasks.MathTask; +import java.util.EnumSet; + +public interface MathTaskGenerator extends TaskGenerator { + int getMinNumber(); // получить минимальное число + int getMaxNumber(); // получить максимальное число + EnumSet getOperations(); + /** + * @return разница между максимальным и минимальным возможным числом + */ + default int getDiffNumber() { + return getMaxNumber() - getMinNumber(); + } + + default int getRandomNumberForTask() { + return (int)(Math.random() * getDiffNumber() + getMinNumber()); + } + + default MathTask.Operation getRandomOperationFromSet() { + while (true) { + MathTask.Operation operationToUse = MathTask.Operation.fromInt((int)(Math.random() * 4)); + if (getOperations().contains(operationToUse)) { + return operationToUse; + } + } + } +} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java new file mode 100644 index 0000000..60ff8eb --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java @@ -0,0 +1,39 @@ +package by.parfen01.quiser.tasks; + +import by.parfen01.quiser.Result; +import by.parfen01.quiser.Task; +import by.parfen01.quiser.task_generators.PoolTaskGenerator; + +import java.util.Objects; + + +/** + * Задание с заранее заготовленным текстом. + * Можно использовать {@link PoolTaskGenerator}, чтобы задавать задания такого типа. + */ +public class TextTask implements Task { + private final String text; + private final String answer; + /** + * @param text текст задания + * @param answer ответ на задание + */ + TextTask(String text, String answer) { + this.text = text; + this.answer = answer; + } + + @Override + public String getText() { + return text; + } + + @Override + public Result validate(String answer) { + if (Objects.equals(answer, this.answer)) { + return Result.OK; + } + + return Result.WRONG; + } +} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java new file mode 100644 index 0000000..6add1c4 --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java @@ -0,0 +1,13 @@ +package by.parfen01.quiser.tasks.math_tasks; + +public abstract class AbstractMathTask implements MathTask { + private int firstNumber; + private int secondNumber; + private Operation operation; + + AbstractMathTask(int firstNumber, int secondNumber, Operation operation) { + this.firstNumber = firstNumber; + this.secondNumber = secondNumber; + this.operation = operation; + } +} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java new file mode 100644 index 0000000..1d4dff8 --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java @@ -0,0 +1,6 @@ +//package by.parfen01.quiser.tasks.math_tasks; +// +//public class EquationTask extends AbstractMathTask { +// +// +//} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java new file mode 100644 index 0000000..8e223c0 --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java @@ -0,0 +1,32 @@ +package by.parfen01.quiser.tasks.math_tasks; + +import by.parfen01.quiser.Result; + +import java.util.EnumSet; + +public class ExpressionTask extends AbstractMathTask { + private final String text; + private final String answer; + + ExpressionTask(int firstNumber, int secondNumber, Operation operation) { + super(firstNumber, secondNumber, operation); + text = firstNumber + Operation.getCharRepresentationOfOperation(operation) + secondNumber + "=?"; + answer = String.valueOf(calculate(firstNumber, secondNumber, operation)); + } + + @Override + public String getText() { + return text; + } + + @Override + public Result validate(String answer) { + if (!answer.matches("^[-]?[0-9]+$")) { + return Result.INCORRECT_INPUT; + } + if (answer.equals("-0") && this.answer.equals("0")) { + return Result.OK; + } + return this.answer.equals(answer) ? Result.OK : Result.WRONG; + } +} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java new file mode 100644 index 0000000..704f3a7 --- /dev/null +++ b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java @@ -0,0 +1,90 @@ +package by.parfen01.quiser.tasks.math_tasks; + +import by.parfen01.quiser.Task; + +import java.security.InvalidParameterException; + +public interface MathTask extends Task { + enum Operation { + ADDITION, // Операция сложения(+) + SUBTRACTION, // Операция вычитания(-) + MULTIPLICATION, // Операция умножения(*) + DIVISION; // Операция деления(/) + + public static Operation fromInt(int number) { + switch (number) { + case 0 -> { + return ADDITION; + } + case 1 -> { + return SUBTRACTION; + } + case 2 -> { + return MULTIPLICATION; + } + case 3 -> { + return DIVISION; + } + } + + throw new InvalidParameterException(); + } + + static char getCharRepresentationOfOperation(Operation operation) { + switch (operation) { + case ADDITION -> { + return '+'; + } + case SUBTRACTION -> { + return '-'; + } + case MULTIPLICATION -> { + return '*'; + } + case DIVISION -> { + return '/'; + } + } + + throw new InvalidParameterException(); + } + } + + default int calculate(int firstValue, int secondValue, Operation operation) { + switch (operation) { + case ADDITION -> { + return firstValue + secondValue; + } + case SUBTRACTION -> { + return firstValue - secondValue; + } + case MULTIPLICATION -> { + return firstValue * secondValue; + } + case DIVISION -> { + return firstValue / secondValue; + } + } + + throw new InvalidParameterException(); + } + + default Operation getReverseOperation(Operation operation) { + switch (operation) { + case ADDITION -> { + return Operation.SUBTRACTION; + } + case SUBTRACTION -> { + return Operation.ADDITION; + } + case MULTIPLICATION -> { + return Operation.DIVISION; + } + case DIVISION -> { + return Operation.MULTIPLICATION; + } + } + + throw new InvalidParameterException(); + } +} From 2987e108bfaccddd69c62cc66262b3e96ff9f392 Mon Sep 17 00:00:00 2001 From: parfen01 Date: Fri, 7 Oct 2022 21:27:17 +0300 Subject: [PATCH 02/12] Lab1: made classes and interfaces Made all necessary classes and interfaces + some system exceptions --- .../task_generators/GroupTaskGenerator.java | 103 ++++++++++++------ .../task_generators/PoolTaskGenerator.java | 13 ++- .../AbstractMathTaskGenerator.java | 4 +- .../EquationTaskGenerator.java | 58 +++++----- .../ExpressionTaskGenerator.java | 53 ++++----- .../by/parfen01/quiser/tasks/TextTask.java | 4 +- .../quiser/tasks/math_tasks/EquationTask.java | 63 ++++++++++- .../tasks/math_tasks/ExpressionTask.java | 15 ++- .../quiser/tasks/math_tasks/MathTask.java | 40 +++---- 9 files changed, 222 insertions(+), 131 deletions(-) diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java index 623046b..7e1c4f1 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java @@ -1,34 +1,69 @@ -//package by.parfen01.quiser.task_generators; -// -//import by.parfen01.quiser.Task; -//import by.parfen01.quiser.TaskGenerator; -//import java.util.Collection; -// -//class GroupTaskGenerator implements TaskGenerator { -// /** -// * Конструктор с переменным числом аргументов -// * -// * @param generators генераторы, которые в конструктор передаются через запятую -// */ -// GroupTaskGenerator(TaskGenerator... generators) { -// // ... -// } -// -// /** -// * Конструктор, который принимает коллекцию генераторов -// * -// * @param generators генераторы, которые передаются в конструктор в Collection (например, {@link ArrayList}) -// */ -// GroupTaskGenerator(Collection generators) { -// // ... -// } -// -// /** -// * @return результат метода generate() случайного генератора из списка. -// * Если этот генератор выбросил исключение в методе generate(), выбирается другой. -// * Если все генераторы выбрасывают исключение, то и тут выбрасывается исключение. -// */ -// Task generate() { -// // ... -// } -//} \ No newline at end of file +package by.parfen01.quiser.task_generators; + +import by.parfen01.quiser.Task; +import by.parfen01.quiser.TaskGenerator; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + +class GroupTaskGenerator implements TaskGenerator { + private final ArrayList generators = new ArrayList<>(); + /** + * Конструктор с переменным числом аргументов + * + * @param generators генераторы, которые в конструктор передаются через запятую + */ + GroupTaskGenerator(TaskGenerator... generators) { + if (generators == null) { + throw new NullPointerException(); + } + for (TaskGenerator generator : generators) { + if (generator != null) { + this.generators.add(generator); + } + } + if (this.generators.isEmpty()) { + throw new IllegalArgumentException(); + } + } + + /** + * Конструктор, который принимает коллекцию генераторов + * + * @param generators генераторы, которые передаются в конструктор в Collection (например, {@link ArrayList}) + */ + GroupTaskGenerator(Collection generators) { + if (generators == null) { + throw new NullPointerException(); + } + for (TaskGenerator generator : generators) { + if (generator != null) { + this.generators.add(generator); + } + } + if (this.generators.isEmpty()) { + throw new IllegalArgumentException(); + } + } + + /** + * @return результат метода generate() случайного генератора из списка. + * Если этот генератор выбросил исключение в методе generate(), выбирается другой. + * Если все генераторы выбрасывают исключение, то и тут выбрасывается исключение. + */ + public Task generate() { + Collections.shuffle(generators); + for (int i = 0; i < generators.size(); ++i) { + try { + return generators.get(i).generate(); + } + catch (Exception e) { + if (i == generators.size()) { + throw e; + } + } + } + + throw new RuntimeException(); + } +} \ No newline at end of file diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java index cfd9b1d..2c7d0c0 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java @@ -6,7 +6,7 @@ import java.util.*; public class PoolTaskGenerator implements TaskGenerator { - private ArrayList tasks; + private final ArrayList tasks = new ArrayList<>(); private LinkedHashSet usedTextsOfTasks; private boolean isAllowedDuplicate; private int numberOfUsedTasks = 0; @@ -18,15 +18,17 @@ public class PoolTaskGenerator implements TaskGenerator { * @param tasks задания, которые в конструктор передаются через запятую */ public PoolTaskGenerator(boolean allowDuplicate, Task... tasks) { - this.tasks = new ArrayList<>(); if (tasks == null) { - return; + throw new NullPointerException(); } for (Task task : tasks) { if (task != null) { this.tasks.add(task); } } + if (this.tasks.isEmpty()) { + throw new IllegalArgumentException(); + } isAllowedDuplicate = allowDuplicate; } @@ -37,7 +39,6 @@ public PoolTaskGenerator(boolean allowDuplicate, Task... tasks) { * @param tasks задания, которые передаются в конструктор в Collection (например, {@link LinkedList}) */ public PoolTaskGenerator(boolean allowDuplicate, Collection tasks) { - this.tasks = new ArrayList<>(); if (tasks == null) { return; } @@ -48,6 +49,9 @@ public PoolTaskGenerator(boolean allowDuplicate, Collection tasks) { uniqueTexts.add(task.getText()); } } + if (this.tasks.isEmpty()) { + throw new IllegalArgumentException(); + } isAllowedDuplicate = allowDuplicate; } @@ -67,6 +71,7 @@ public Task generate() { while(true) { int numberOfTest = (int) (Math.random() * tasks.size()); if (!usedTextsOfTasks.contains(tasks.get(numberOfTest).getText())) { + ++numberOfUsedTasks; usedTextsOfTasks.add(tasks.get(numberOfTest).getText()); return tasks.get(numberOfTest); } diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java index 4b7f3a7..52ada0c 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java @@ -1,10 +1,8 @@ package by.parfen01.quiser.task_generators.math_task_generators; -import by.parfen01.quiser.tasks.math_tasks.AbstractMathTask; import by.parfen01.quiser.tasks.math_tasks.MathTask; import java.security.InvalidParameterException; -import java.util.Collections; import java.util.EnumSet; public abstract class AbstractMathTaskGenerator implements MathTaskGenerator { @@ -20,7 +18,7 @@ public abstract class AbstractMathTaskGenerator implements MathTaskGenerator { throw new InvalidParameterException(); } if (maxNumber < minNumber) { - throw new InvalidParameterException(); + throw new IllegalArgumentException(); } } diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java index e7b8026..f44c599 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java @@ -1,29 +1,29 @@ -//package by.parfen01.quiser.task_generators; -// -//import by.parfen01.quiser.TaskGenerator; -//import by.parfen01.quiser.tasks.math_tasks.EquationTask; -// -//class EquationTaskGenerator implements TaskGenerator { -// /** -// * @param minNumber минимальное число -// * @param maxNumber максимальное число -// * @param generateSum разрешить генерацию с оператором + -// * @param generateDifference разрешить генерацию с оператором - -// * @param generateMultiplication разрешить генерацию с оператором * -// * @param generateDivision разрешить генерацию с оператором / -// */ -// EquationTaskGenerator( -// int minNumber, -// int maxNumber, -// EnumSet -// ) { -// // ... -// } -// -// /** -// * return задание типа {@link EquationTask} -// */ -// EquationTask generate() { -// // ... -// } -//} +package by.parfen01.quiser.task_generators.math_task_generators; + +import by.parfen01.quiser.tasks.math_tasks.EquationTask; +import by.parfen01.quiser.tasks.math_tasks.MathTask; + +import java.util.EnumSet; + +class EquationTaskGenerator extends AbstractMathTaskGenerator { + private final int[] possiblePositionsOfX; + /** + * @param minNumber минимальное число + * @param maxNumber максимальное число + */ + EquationTaskGenerator(int minNumber, + int maxNumber, + EnumSet operations, + int[] possiblePositionsOfX) { + super(minNumber, maxNumber, operations); + this.possiblePositionsOfX = possiblePositionsOfX.clone(); + } + + /** + * return задание типа {@link EquationTask} + */ + public EquationTask generate() { + int xPos = possiblePositionsOfX[(int)(Math.random() * possiblePositionsOfX.length)]; + return new EquationTask(getRandomNumberForTask(), getRandomNumberForTask(), xPos, getRandomOperationFromSet()); + } +} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java index 09896fd..6417325 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java @@ -1,29 +1,24 @@ -//package by.parfen01.quiser.task_generators; -// -//import by.parfen01.quiser.TaskGenerator; -//import by.parfen01.quiser.tasks.math_tasks.ExpressionTask; -// -//class ExpressionTaskGenerator implements TaskGenerator { -// /** -// * @param minNumber минимальное число -// * @param maxNumber максимальное число -// * @param generateSum разрешить генерацию с оператором + -// * @param generateDifference разрешить генерацию с оператором - -// * @param generateMultiplication разрешить генерацию с оператором * -// * @param generateDivision разрешить генерацию с оператором / -// */ -// ExpressionTaskGenerator( -// int minNumber, -// int maxNumber, -// EnumSet -// ) { -// // ... -// } -// -// /** -// * return задание типа {@link ExpressionTask} -// */ -// ExpressionTask generate() { -// // ... -// } -//} +package by.parfen01.quiser.task_generators.math_task_generators; + +import by.parfen01.quiser.tasks.math_tasks.ExpressionTask; +import by.parfen01.quiser.tasks.math_tasks.MathTask; +import java.util.EnumSet; + +class ExpressionTaskGenerator extends AbstractMathTaskGenerator { + /** + * @param minNumber минимальное число + * @param maxNumber максимальное число + */ + ExpressionTaskGenerator(int minNumber, + int maxNumber, + EnumSet operations) { + super(minNumber, maxNumber, operations); + } + + /** + * return задание типа {@link ExpressionTask} + */ + public ExpressionTask generate() { + return new ExpressionTask(getRandomNumberForTask(), getRandomNumberForTask(), getRandomOperationFromSet()); + } +} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java index 60ff8eb..28fff37 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java @@ -30,10 +30,12 @@ public String getText() { @Override public Result validate(String answer) { + if (answer == null) { + throw new NullPointerException(); + } if (Objects.equals(answer, this.answer)) { return Result.OK; } - return Result.WRONG; } } diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java index 1d4dff8..2676a7d 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java @@ -1,6 +1,57 @@ -//package by.parfen01.quiser.tasks.math_tasks; -// -//public class EquationTask extends AbstractMathTask { -// -// -//} +package by.parfen01.quiser.tasks.math_tasks; + +import by.parfen01.quiser.Result; + +public class EquationTask extends AbstractMathTask { + int positionOfX; + String text; + String answer; + public EquationTask(int firstNumber, int secondNumber, int positionOfX, Operation operation) { + super(firstNumber, secondNumber, operation); + this.positionOfX = positionOfX; + if (positionOfX != 0 && positionOfX != 1) { + throw new IllegalArgumentException(); + } + if (positionOfX == 0) { + text = "X" + Operation.toChar(operation) + firstNumber + "=" + secondNumber; + if (firstNumber == 0 && operation == Operation.ADDITION) { + answer = "invalid operation"; + return; + } + answer = String.valueOf(calculate(secondNumber, firstNumber, Operation.getReverseOperation(operation))); + } else { + text = firstNumber + Operation.toChar(operation) + "X" + "=" + secondNumber; + if (firstNumber == 0 && secondNumber != 0 && operation == Operation.ADDITION) { + answer = "no right answer"; + return; + } + if (operation == Operation.ADDITION || operation == Operation.MULTIPLICATION) { + answer = String.valueOf(calculate(secondNumber, firstNumber, Operation.getReverseOperation(operation))); + } else { + answer = String.valueOf(calculate(firstNumber, secondNumber, operation)); + } + } + } + + + @Override + public String getText() { + return text; + } + + @Override + public Result validate(String answer) { + if (answer == null) { + throw new NullPointerException(); + } + if (!answer.matches("^-?[0-9]+$") && + !answer.equalsIgnoreCase("invalid operation") && + !answer.equalsIgnoreCase("no right answer")) { + return Result.INCORRECT_INPUT; + } + if (answer.equals("-0") && this.answer.equals("0")) { + return Result.OK; + } + return this.answer.equals(answer) ? Result.OK : Result.WRONG; + } +} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java index 8e223c0..10e5ea7 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java @@ -2,15 +2,17 @@ import by.parfen01.quiser.Result; -import java.util.EnumSet; - public class ExpressionTask extends AbstractMathTask { private final String text; private final String answer; - ExpressionTask(int firstNumber, int secondNumber, Operation operation) { + public ExpressionTask(int firstNumber, int secondNumber, Operation operation) { super(firstNumber, secondNumber, operation); - text = firstNumber + Operation.getCharRepresentationOfOperation(operation) + secondNumber + "=?"; + text = firstNumber + Operation.toChar(operation) + secondNumber + "=?"; + if (secondNumber == 0 && operation == Operation.DIVISION) { + answer = "invalid operation"; + return; + } answer = String.valueOf(calculate(firstNumber, secondNumber, operation)); } @@ -21,7 +23,10 @@ public String getText() { @Override public Result validate(String answer) { - if (!answer.matches("^[-]?[0-9]+$")) { + if (answer == null) { + throw new NullPointerException(); + } + if (!answer.matches("^-?[0-9]+$") && !answer.equalsIgnoreCase("invalid operation")) { return Result.INCORRECT_INPUT; } if (answer.equals("-0") && this.answer.equals("0")) { diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java index 704f3a7..4af7fc9 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java @@ -30,7 +30,7 @@ public static Operation fromInt(int number) { throw new InvalidParameterException(); } - static char getCharRepresentationOfOperation(Operation operation) { + static char toChar(Operation operation) { switch (operation) { case ADDITION -> { return '+'; @@ -46,6 +46,25 @@ static char getCharRepresentationOfOperation(Operation operation) { } } + throw new InvalidParameterException(); + } + + static Operation getReverseOperation(Operation operation) { + switch (operation) { + case ADDITION -> { + return Operation.SUBTRACTION; + } + case SUBTRACTION -> { + return Operation.ADDITION; + } + case MULTIPLICATION -> { + return Operation.DIVISION; + } + case DIVISION -> { + return Operation.MULTIPLICATION; + } + } + throw new InvalidParameterException(); } } @@ -68,23 +87,4 @@ default int calculate(int firstValue, int secondValue, Operation operation) { throw new InvalidParameterException(); } - - default Operation getReverseOperation(Operation operation) { - switch (operation) { - case ADDITION -> { - return Operation.SUBTRACTION; - } - case SUBTRACTION -> { - return Operation.ADDITION; - } - case MULTIPLICATION -> { - return Operation.DIVISION; - } - case DIVISION -> { - return Operation.MULTIPLICATION; - } - } - - throw new InvalidParameterException(); - } } From bf2ecb9e85ce143439e563750705cf61d3bc34ca Mon Sep 17 00:00:00 2001 From: parfen01 Date: Fri, 7 Oct 2022 22:34:27 +0300 Subject: [PATCH 03/12] Lab1: made tests Created 5 Quisez and test system for them --- lab-01/lab-01/src/Main.java | 97 +++++++++++++++++-- .../lab-01/src/by/parfen01/quiser/Quiz.java | 18 ++-- .../task_generators/GroupTaskGenerator.java | 4 +- .../EquationTaskGenerator.java | 10 +- .../ExpressionTaskGenerator.java | 8 +- .../by/parfen01/quiser/tasks/TextTask.java | 2 +- 6 files changed, 108 insertions(+), 31 deletions(-) diff --git a/lab-01/lab-01/src/Main.java b/lab-01/lab-01/src/Main.java index 36e3709..66c05b8 100644 --- a/lab-01/lab-01/src/Main.java +++ b/lab-01/lab-01/src/Main.java @@ -1,17 +1,94 @@ -import by.parfen01.*; +import by.parfen01.quiser.Quiz; +import by.parfen01.quiser.Result; +import by.parfen01.quiser.task_generators.GroupTaskGenerator; +import by.parfen01.quiser.task_generators.PoolTaskGenerator; +import by.parfen01.quiser.task_generators.math_task_generators.EquationTaskGenerator; +import by.parfen01.quiser.task_generators.math_task_generators.ExpressionTaskGenerator; +import by.parfen01.quiser.tasks.TextTask; +import by.parfen01.quiser.tasks.math_tasks.MathTask; +import java.util.EnumSet; import java.util.Map; +import java.util.Scanner; +import java.util.TreeMap; public class Main { -// /** -// * @return тесты в {@link Map}, где -// * ключ - название теста {@link String} -// * значение - сам тест {@link Quiz} -// */ -// static Map getQuizMap() { -// // ... -// } + /** + * @return тесты в {@link Map}, где + * ключ - название теста {@link String} + * значение - сам тест {@link Quiz} + */ + static Map getQuizMap() { + Map result = new TreeMap<>(); + ExpressionTaskGenerator firstTaskGenerator = new ExpressionTaskGenerator( + 1, 100, EnumSet.allOf(MathTask.Operation.class)); + Quiz firstQuiz = new Quiz(firstTaskGenerator, 10); + result.put("Expression Test", firstQuiz); + EquationTaskGenerator secondTaskGenerator = new EquationTaskGenerator( + 1, 100, EnumSet.allOf(MathTask.Operation.class), new int[]{1, 2}); + Quiz secondQuiz = new Quiz(secondTaskGenerator, 10); + result.put("Equation Test", secondQuiz); + TextTask firstTextTask = new TextTask("what the highest mountain in the world?", "Everest"); + TextTask secondTextTask = new TextTask("what the fastest mammal in the world?", "Cheetah"); + TextTask thirdTextTask = new TextTask("Лектор расписался в журнале." + + " Там было 3 н-ки." + + " Сколько студентов было на паре?", "Один"); + TextTask foursTextTask = new TextTask("what the fastest mammal in the world?", "Cheetah"); + PoolTaskGenerator thirdTaskGenerator = new PoolTaskGenerator( + false, + secondTextTask, + thirdTextTask, + foursTextTask, + firstTextTask); + PoolTaskGenerator foursTaskGenerator = new PoolTaskGenerator( + true, + secondTextTask, + thirdTextTask, + foursTextTask, + firstTextTask); + Quiz thirdQuiz = new Quiz(thirdTaskGenerator, 2); + result.put("Text Test", thirdQuiz); + Quiz foursQuiz = new Quiz(new GroupTaskGenerator( + firstTaskGenerator, + secondTaskGenerator, + thirdTaskGenerator), + 3); + result.put("Mixed Test Without Repeat", foursQuiz); + Quiz fifthQuiz = new Quiz(foursTaskGenerator, 3); + result.put("Mixed Test With Repeat", fifthQuiz); + return result; + } public static void main() { - System.out.println("Hello world!"); + Map givenQuizes = getQuizMap(); + System.out.println("Enter test name..."); + Scanner scanner = new Scanner(System.in); + Quiz currentQuiz; + while(true) { + String nameOfQuiz = scanner.nextLine(); + if (!givenQuizes.containsKey(nameOfQuiz)) { + System.out.println("Test not found. Please try another name..."); + nameOfQuiz = scanner.nextLine(); + } else { + currentQuiz = givenQuizes.get(nameOfQuiz); + break; + } + } + while (!currentQuiz.isFinished()) { + System.out.println(currentQuiz.nextTask().getText()); + String answer = scanner.nextLine(); + if (currentQuiz.provideAnswer(answer) == Result.OK) { + System.out.println("Right"); + } + if (currentQuiz.provideAnswer(answer) == Result.WRONG) { + System.out.println("Wrong"); + } + if (currentQuiz.provideAnswer(answer) == Result.INCORRECT_INPUT) { + System.out.println("Incorrect input. Try once more"); + } + } + System.out.println("total correct answer number: " + currentQuiz.getCorrectAnswerNumber()); + System.out.println("total wrong answer number: " + currentQuiz.getWrongAnswerNumber()); + System.out.println("total incorrect input number: " + currentQuiz.getIncorrectInputNumber()); + System.out.println("your final mark is: " + currentQuiz.getMark()); } } \ No newline at end of file diff --git a/lab-01/lab-01/src/by/parfen01/quiser/Quiz.java b/lab-01/lab-01/src/by/parfen01/quiser/Quiz.java index 69aabb7..fe7795e 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/Quiz.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/Quiz.java @@ -3,7 +3,7 @@ /** * Class, который описывает один тест */ -class Quiz { +public class Quiz { TaskGenerator generator; int taskCount; int correctAnswerNumber = 0; @@ -15,7 +15,7 @@ class Quiz { * @param generator генератор заданий * @param taskCount количество заданий в тесте */ - Quiz(TaskGenerator generator, int taskCount) { + public Quiz(TaskGenerator generator, int taskCount) { this.generator = generator; this.taskCount = taskCount; currentTask = generator.generate(); @@ -25,7 +25,7 @@ class Quiz { * @return задание, повторный вызов вернет слелующее * @see Task */ - Task nextTask() { + public Task nextTask() { if (!isLastInputIncorrect) { currentTask = generator.generate(); } @@ -36,7 +36,7 @@ Task nextTask() { * Предоставить ответ ученика. Если результат {@link Result#INCORRECT_INPUT}, то счетчик неправильных * ответов не увеличивается, а {@link #nextTask()} в следующий раз вернет тот же самый объект {@link Task}. */ - Result provideAnswer(String answer) { + public Result provideAnswer(String answer) { Result result = currentTask.validate(answer); switch (result) { case INCORRECT_INPUT -> { @@ -60,28 +60,28 @@ Result provideAnswer(String answer) { /** * @return завершен ли тест */ - boolean isFinished() { + public boolean isFinished() { return taskCount == 0; } /** * @return количество правильных ответов */ - int getCorrectAnswerNumber() { + public int getCorrectAnswerNumber() { return this.correctAnswerNumber; } /** * @return количество неправильных ответов */ - int getWrongAnswerNumber() { + public int getWrongAnswerNumber() { return this.wrongAnswerNumber; } /** * @return количество раз, когда был предоставлен неправильный ввод */ - int getIncorrectInputNumber() { + public int getIncorrectInputNumber() { return this.incorrectInputCount; } @@ -89,7 +89,7 @@ int getIncorrectInputNumber() { * @return оценка, которая является отношением количества правильных ответов к количеству всех вопросов. * Оценка выставляется только в конце! */ - double getMark() { + public double getMark() { return (double)correctAnswerNumber / (correctAnswerNumber + wrongAnswerNumber); } } \ No newline at end of file diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java index 7e1c4f1..ec20bf0 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java @@ -6,14 +6,14 @@ import java.util.Collection; import java.util.Collections; -class GroupTaskGenerator implements TaskGenerator { +public class GroupTaskGenerator implements TaskGenerator { private final ArrayList generators = new ArrayList<>(); /** * Конструктор с переменным числом аргументов * * @param generators генераторы, которые в конструктор передаются через запятую */ - GroupTaskGenerator(TaskGenerator... generators) { + public GroupTaskGenerator(TaskGenerator... generators) { if (generators == null) { throw new NullPointerException(); } diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java index f44c599..c08ba06 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java @@ -5,16 +5,16 @@ import java.util.EnumSet; -class EquationTaskGenerator extends AbstractMathTaskGenerator { +public class EquationTaskGenerator extends AbstractMathTaskGenerator { private final int[] possiblePositionsOfX; /** * @param minNumber минимальное число * @param maxNumber максимальное число */ - EquationTaskGenerator(int minNumber, - int maxNumber, - EnumSet operations, - int[] possiblePositionsOfX) { + public EquationTaskGenerator(int minNumber, + int maxNumber, + EnumSet operations, + int[] possiblePositionsOfX) { super(minNumber, maxNumber, operations); this.possiblePositionsOfX = possiblePositionsOfX.clone(); } diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java index 6417325..11870d0 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java @@ -4,14 +4,14 @@ import by.parfen01.quiser.tasks.math_tasks.MathTask; import java.util.EnumSet; -class ExpressionTaskGenerator extends AbstractMathTaskGenerator { +public class ExpressionTaskGenerator extends AbstractMathTaskGenerator { /** * @param minNumber минимальное число * @param maxNumber максимальное число */ - ExpressionTaskGenerator(int minNumber, - int maxNumber, - EnumSet operations) { + public ExpressionTaskGenerator(int minNumber, + int maxNumber, + EnumSet operations) { super(minNumber, maxNumber, operations); } diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java index 28fff37..048b11a 100644 --- a/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java +++ b/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java @@ -18,7 +18,7 @@ public class TextTask implements Task { * @param text текст задания * @param answer ответ на задание */ - TextTask(String text, String answer) { + public TextTask(String text, String answer) { this.text = text; this.answer = answer; } From 9a34500d98fc4efe5beb08ed71dc5de76202a94b Mon Sep 17 00:00:00 2001 From: parfen01 Date: Fri, 7 Oct 2022 23:28:13 +0300 Subject: [PATCH 04/12] Particulary tested --- lab-01/.idea/.gitignore | 8 ++ lab-01/.idea/misc.xml | 6 + lab-01/.idea/modules.xml | 8 ++ lab-01/.idea/uiDesigner.xml | 124 ++++++++++++++++++ lab-01/.idea/vcs.xml | 6 + lab-01/{lab-01 => }/lab-01.iml | 0 lab-01/out/production/lab-01/Main.class | Bin 0 -> 5271 bytes .../lab-01/by/parfen01/quiser/Quiz$1.class | Bin 0 -> 738 bytes .../lab-01/by/parfen01/quiser/Quiz.class | Bin 0 -> 2017 bytes .../lab-01/by/parfen01/quiser/Result.class | Bin 0 -> 1082 bytes .../lab-01/by/parfen01/quiser/Task.class | Bin 0 -> 218 bytes .../by/parfen01/quiser/TaskGenerator.class | Bin 0 -> 175 bytes .../task_generators/GroupTaskGenerator.class | Bin 0 -> 2128 bytes .../task_generators/PoolTaskGenerator.class | Bin 0 -> 2673 bytes .../AbstractMathTaskGenerator.class | Bin 0 -> 1767 bytes .../EquationTaskGenerator.class | Bin 0 -> 1710 bytes .../ExpressionTaskGenerator.class | Bin 0 -> 1488 bytes .../MathTaskGenerator.class | Bin 0 -> 1428 bytes .../by/parfen01/quiser/tasks/TextTask.class | Bin 0 -> 981 bytes .../tasks/math_tasks/AbstractMathTask.class | Bin 0 -> 783 bytes .../tasks/math_tasks/EquationTask.class | Bin 0 -> 2929 bytes .../tasks/math_tasks/ExpressionTask.class | Bin 0 -> 2298 bytes .../quiser/tasks/math_tasks/MathTask$1.class | Bin 0 -> 980 bytes .../tasks/math_tasks/MathTask$Operation.class | Bin 0 -> 2430 bytes .../quiser/tasks/math_tasks/MathTask.class | Bin 0 -> 1011 bytes lab-01/src/Main.java | 96 ++++++++++++++ lab-01/src/by/parfen01/quiser/Quiz.java | 98 ++++++++++++++ lab-01/src/by/parfen01/quiser/Result.java | 10 ++ lab-01/src/by/parfen01/quiser/Task.java | 21 +++ .../src/by/parfen01/quiser/TaskGenerator.java | 14 ++ .../task_generators/GroupTaskGenerator.java | 69 ++++++++++ .../task_generators/PoolTaskGenerator.java | 82 ++++++++++++ .../AbstractMathTaskGenerator.java | 39 ++++++ .../EquationTaskGenerator.java | 29 ++++ .../ExpressionTaskGenerator.java | 24 ++++ .../MathTaskGenerator.java | 30 +++++ .../by/parfen01/quiser/tasks/TextTask.java | 41 ++++++ .../tasks/math_tasks/AbstractMathTask.java | 13 ++ .../quiser/tasks/math_tasks/EquationTask.java | 57 ++++++++ .../tasks/math_tasks/ExpressionTask.java | 37 ++++++ .../quiser/tasks/math_tasks/MathTask.java | 90 +++++++++++++ 41 files changed, 902 insertions(+) create mode 100644 lab-01/.idea/.gitignore create mode 100644 lab-01/.idea/misc.xml create mode 100644 lab-01/.idea/modules.xml create mode 100644 lab-01/.idea/uiDesigner.xml create mode 100644 lab-01/.idea/vcs.xml rename lab-01/{lab-01 => }/lab-01.iml (100%) create mode 100644 lab-01/out/production/lab-01/Main.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/Quiz$1.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/Quiz.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/Result.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/Task.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/TaskGenerator.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/GroupTaskGenerator.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/PoolTaskGenerator.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/TextTask.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/EquationTask.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask$1.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask$Operation.class create mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask.class create mode 100644 lab-01/src/Main.java create mode 100644 lab-01/src/by/parfen01/quiser/Quiz.java create mode 100644 lab-01/src/by/parfen01/quiser/Result.java create mode 100644 lab-01/src/by/parfen01/quiser/Task.java create mode 100644 lab-01/src/by/parfen01/quiser/TaskGenerator.java create mode 100644 lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java create mode 100644 lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java create mode 100644 lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java create mode 100644 lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java create mode 100644 lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java create mode 100644 lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java create mode 100644 lab-01/src/by/parfen01/quiser/tasks/TextTask.java create mode 100644 lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java create mode 100644 lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java create mode 100644 lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java create mode 100644 lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java diff --git a/lab-01/.idea/.gitignore b/lab-01/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/lab-01/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/lab-01/.idea/misc.xml b/lab-01/.idea/misc.xml new file mode 100644 index 0000000..d15472f --- /dev/null +++ b/lab-01/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/lab-01/.idea/modules.xml b/lab-01/.idea/modules.xml new file mode 100644 index 0000000..1e89cde --- /dev/null +++ b/lab-01/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/lab-01/.idea/uiDesigner.xml b/lab-01/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/lab-01/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lab-01/.idea/vcs.xml b/lab-01/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/lab-01/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/lab-01/lab-01/lab-01.iml b/lab-01/lab-01.iml similarity index 100% rename from lab-01/lab-01/lab-01.iml rename to lab-01/lab-01.iml diff --git a/lab-01/out/production/lab-01/Main.class b/lab-01/out/production/lab-01/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..e7eb9ed03c1afb4aef166834a059505228164f3a GIT binary patch literal 5271 zcmbVQd3;pW75;8A$(u}GSOx?JTpof#0?D{UstMu}0;FVtB!&)D=_7eb9?ZNM=e+@9 z7uVWaty=A3wY9~zpj|9dA&?mCs@86k+Scy1wQ3h@cf0)hEB)?!Gs&AU@z?f`dGFqH z&pqedbG~!lx%2eDM~(wngMWljf>H$m6=f(Fn6*>itw-a!H4yFCvD4^v1j<*Nmg%e! zC|zFN6G9Lb3PLI>p$Y`rbkhtul5xyXX>M1qZdpcJT70^SGoT5S z$P-SQ)?%eHdDB8zgfpe*mIy4!$)^Q=7U{A@I7`LZSSAp(jJ-~)X&C}@^KSARREcWT zC|IFlC29q#CJl34TiKhm9D3Z|Xbep`kr%DT>a9UU1!}roMazs3=S7%Jy zNJk|SLa4{a2`*J| znTpG$AB(B=geW{hH=QhXtX0vBb#!AYo!o8q8JAi19wRLf^&c<~g<`5Z4LcKeh~Eup zQSf>d8__BdDPp9@Nw9QmvlgI11pgoh=AsxYtZV9svT%}?=-bA-1^j$_1W$4Zp(;4K*c67_JCDvMU zS?!0bRI)=wuT(OZN?gnRD#8%BN^+{?Sb_=YUMyOAe%@XJg%B@Q~Qc@8Gg|HVx3a(M{X1t}q>}D&I z=#oiTrpMzQ{Zo>$DX!agqrbf7_!~p8@itkBu9cOjrNvi)^DMFw)#G}}bb~9mi0uU@ zY;39S3F0Q=Z_)*tEG)8Q+^pgqcqgMn=m}it&!}8|IJsi@!!}Vw-X+jh#FD8|C?1-t zGp;`i%nsoe+$K-?Zh?ixU9rtQ*&VD5%{d9~xfHxdVDU7@*il(lq^2P57Ff1tPVszLp)U&5mS`a%msm z$GP=3`PL}mhVdJ-k5b8)R3e4tcS(5~l^vw$!}P;PS?sg-llN$LOu+*J_0xFTpOKrA z$@rA$?!(8W3qQdUxP0rjVx?AY;I}=90|FH?YPsk>Byhohp>usYnMoBWRq!bRt;p5_ zt`Hu?XQXKl%k-MovWW`fns|`klQwg&(dXKz$+F8{Nb59GhVBG$h}C<_a&C>yS5vZ& zjl@jZPk2?dTi+2UCES|q)#E*S+LZGgG2jfEEac^_vSn-J?u6UA&7+}im*KDL)jed? zb6?Bw$?M#$rw3U7<`mg1P&r`kHZ0i&7}Pk^+dt6_5~8-(WpTf6E!TR{w94KLKWvuU zQqn!eLM(-oGbEdsj($0#qY95bl*%7{wNDGb3Aw5Nz|*Q&LnT#Rj^4YA8(mK-AbOuJ z>|)(+k}hM8vtM8U`pvZM){2Q>3v4c?#35AucrRY&ihqG*2zR9vMx_19otFksWyYvpwFIJj^{)8C0xyy)p z9}KT~Tc`K3pWzkZ9{)!s$LI;&pj&-$!(Q5&Ozz608c)t~AEjVpH}k3pyT1?=xijQM zG_kAcG981Lx?i(?J4uJ%uzVZq6&#Hn5S!BmO$6~oZ)ep zh3&AP>Gy0Jhv;mr-?XSN!M0K}ZE6ruTjX`m?W+u1!Jh`g~Jk1cSb*If8^c zmEH-s-r0$T9M9rxHoX(Ze9XmZ{3l^KN9SMxF5-GKZ|oazIy(3Vz*W$wVKJ`}XR>Ku z!iN1UHoj-$4lKi6?1S$|4fgZ4{t#;E-8wwUuzZh_Uck9-1lG{YeY~`eV3eVwzwsEx zTx))T<9M9Wn2&GKhhJdynz0XG#FrSE)9_V%nL7gb3VCG|1CabraP%Z87eYBfrZNRj zDX3OxufiQzbb@i8Br2$P$^XK6e9!wQ=9Cah{NskYh=G!IM8phYp?(yp*f7!?M`6bT zv--lBqu4Wyx3-R=KDJ_3Xc*VE)r4#~LamN8q(MLeiW_MH$U+sH_R^k5uN(sgI4~!C3hiJ{c=r zLE*Jhb_Kvk)(7&i6tWvjV>&as__lK3{g9uiy_{mskD_{)j(c8o^)i JD*lehe*hKyCl3Gs literal 0 HcmV?d00001 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/Quiz$1.class b/lab-01/out/production/lab-01/by/parfen01/quiser/Quiz$1.class new file mode 100644 index 0000000000000000000000000000000000000000..b4fe4df664634170f8446a011c4b8b9d98ca26ac GIT binary patch literal 738 zcmaJfgc5Ph3Caco?gmO|1N+5)B|fG|Zu96-H9DMU?dNJ4w)0d1V6*<$SCkD~Ge z_$!L9%z|jc4XP&+N}%-;V&S$yx$JiW1S?r4qsVWRLySs{$`n5wph!Pp@_Cz{~#yXk|wKF!OYDktVlJsem zkV2~yh9YhSJV``SU7?L#q5Ht9b+t3)QDhk_WUmtXfFgOo!*5_mKg=)CKdWczD`qtB zBecyN)(DnP;R3;O4nI-3fjQK05p`V0D%qR3j|XInxJHf3dHW`P0}UCl>77A&Tc?cP d-vb(MrT5Ow2O$}5EgNlDxk`=bZ4eoBhdISC8 z9rOm6ahy>*MW_AY1$ZG|h2!|VXOqI^%+(5!a z8`>4Ro?81>p=P<;g~wY@?Mk4~e%o=KU_l|Cn_N$#14#oZ6KR+V16$7udzSaL?as~> zzHK~bw(?;E^I<8gIGgnfW$ejhp@zs?k*A)`QdX@d2D?6?o&fJ={RpU-ixn8kq>z3!p zy1AJMb{zimb%yru4d;$!n6Q2LkzbmCy=DvPoojUL+F}c8$V>+41FoIB+?4CZW`nY+Y zdBfKKqMNk7E790nE{3I-n3?_!S7(0Y{yIMiB4>v9jq|&cPY{zs+{}OZ3Pxg6@Z#Ta zqACChUWXWwos8Hrr)<;5HDA$plOtS{1ZWC#lvm071jqwbL6OKg~=h2BcZOu3ek0PBjr=3?Koj;9q z?mF%KMWl0?sD@?Fb6}|Lg{}zJIfSvPb2``@9lH4iLS_gWA^`&oL;PS0cC$+43dfff(*X;3x?(Df3bNE4yg!paNt#=UVF|x3o2CZiB@W*dZSS;wcb=}FArKg zc1=YTF$Q_P{j_>eZZf1^&mmBt;f9QuibdQcj-EYmOoqjDrh06g7`kmZM|!<`Z1zTZ z1##Sxkx-GuGBI5O%8u73$`ix(%=#h2UV0|GWE;a_e#X%pxt4R3pJm_$MEw;NtGLY& zELe^;Dl#n1mYQZ(GVKro3QfBbLO2AK|K3;e02_R8(Z-NrHJzC^I+6TAN~OVDnmSsw z9JA*2yQbSRx;AtRN7DQ6$I#{ z?Gh*L6c9`D{UJnv{Ap|uK10?To%~V8hI&5ksN-0TF#q|?!*nDRwv46B40)XA<`yHO$BMXNt=(cOE@3)egn)L*F^vT literal 0 HcmV?d00001 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/Task.class b/lab-01/out/production/lab-01/by/parfen01/quiser/Task.class new file mode 100644 index 0000000000000000000000000000000000000000..b251bc91527607b6d04ad98ef45037172cb6dfb0 GIT binary patch literal 218 zcmZvWJr05}9K~NzDdOT_;uT=AI-58;k(dY3RhG{K(DU@tVvCC^J3xgFQQEX3qS7=bSzJ+q)Mp0gT}* z4;)ZbI5oIXB2e)_|5gvh^+YUmckO`@wFOE>%!Fx=2`K)+qKZ<1>f=pm+l+_CElb~- zHdD3-Dik-o&{ULZD8~hXfwi5`wr*`0i7Wk~Z_;MUutK(;diZtBNEnuGC#_Uy%1WlU z7igTy+5|lLb%EOHBDaNAR0=fb#m=VV@wud#unlYSQPkMB&1AxZ3Mf)njfPs(5kOyG zr$hgV#{$T3U`6ixKtnwm1XMFMxwUQY93!u&XcTD6UlobRjhG%Ew_@onBViX@=Y!%! z3tClN($I!>fttMbi6qZOr7nR|lR728K%GBO02s;G!(McvOT}dkeyOM`?U$;qkkdvFE)Dz0j{hU<)0{^mSEikGK0(;FLc zgVm6U=W#vAQV0hYWi)SS7{pCVN}1nr8>=TG&BGeP7~wo-P-v|`lHo5@>P0WcG<=AU z7^_S%(1njw?~%`fxRou;V^6uXsJJcAkWb&ebiy{bjNG~h6Ho-)^JXle+i8pU3>9P~ zSKuS>yE<36;jyqlmw)x_je$jmWg@xGyDm(d31c?BwPsig`kIVq)pRnd#}{?Wl=FkoI$M2$ap+di3Fp&R3XXRm=(07uG|*W>^)h_JYV3 zEXjpa&^y~%@Zq8-&Y6tS;!@6aTFMnnN2dRrE-J=HnEXZ9tmczxD{9;^W$rHix1IIL z(!(WoMh67znhBQOk>ee9UiE0Y-p#~u~%j>A)$Dszd*$`*ZfJHRoQ|@l%*${V6V}_C` zlB;()%BOP75#cjFH^Oy9R}K|k759L5P&o?G@DE&-Tz6rf;1c$4`g3wz{y*4#Gz-iG z_t7En1WkMh2)sh?Z0~DmlCW0-KRf!fIIXjQwmn1JLE27Ayo>=h*dYXPi~VyFLDKY+ zC6uEbK-n>^B30&Smr1)o+Rtg#ILfthM(KpVp^(1?c#9Ghoh@(RsLUjNi96Zd_%EZd zC%?fQ$0fio2q`1J6O@6c@XIIPE`|uak5Pf=Gug!-;0hi-7R>YS2bf@XClBec1|38j z&m_4GrF1;VzI&4^!(16b7e>*~^j@QFh}|!n*e;?j<37c>`3+dXD!oxu23jVz9L~3J Ti&YilWp9{9fiGxv;LCpjDdz~0 literal 0 HcmV?d00001 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/PoolTaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/PoolTaskGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..378f5512d4d40bd98d6f9f9957d1b7102cb3f498 GIT binary patch literal 2673 zcma);+fx)r6vn@1F9W+H0=npmB3=?%E-r|ovV;T?685UJPR6pMQ<+S9 zhPLxXlYme9*aD$=m2+YW8U=QhSK@}btS2vM_R_S@EE@7z>{Jm#GwaFOdU8g;0Tb4;ecTSXXq1RBlU%7Si9E?$-a@;k+tg1rK*WkwUZbb2adn2v6Z-bv_L z$HrVqcB?pwC=WC2(Uq*T>fYtNf?k1xEiq z74Vu>I2Papa2^*FjH$SYO9J)fs>d~Fi6XZ&GnrX&!JL)I##KyUl0j|bLsm!ak4f{} zD&D~~=e#y~4P%veRya$+Wr2O=tX<^Oj+R)iKsqB|-Ma#9TPUOAJ=9GbDN}QD7W3$- z5O3-24aTDRAYq}_iSB&Krm+-w{p7M z6sW=Hb6(9B^WNs(*tnK;>rlY@_O#Deuq=x@CaE-6UlQo8y71~dJF&${ui7P(s4a9> zCfmZtwKa0J*xqJzn?epuXL43TKWE5mY<{UHAC+Rp0k+2)2+YBYCfVURzQV6a4dyv# zyDiPH(#B5VuCbf)uLqy-19OcY?*Ssoc`dEqbUcLUcnsyrL)5J!z+nT2P3zdv;aSJ7 zuHO)Rj24>qJuNIvbPagJ-Y5M&PrpCp5Ba{w>99BCKQ^F*m1j889abKpRbT^$zeTv? zM+Cyk2HNM!_RhIa{o>x{Gr6{buDkMt9-eUQX-CUC`W`SXFW%?x8Fo)#CuemmHNY}d zHuVq=vCvNJMjt;Eaayml-y7JA9Ooa=<1@73OSb*5>3N+Ij>u!jeJ*d`i@be#-bH)o z+`Y|T|0nFu7hrc0VK)vViZ1l9bN8~AV?@&joBFyqd2LV*TQ)F7lJ_~@Rap8?s&R&DoPGL||Bi}1W#+vdSGe7K zgRh0_ReU<;Rzi^o@w>YhV^)Ikrec1p2 literal 0 HcmV?d00001 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..909c44e0c0361b27202578c067b440218c608fb3 GIT binary patch literal 1767 zcmbtVTTc^F5dKatEG=6uRc?X^$fd2of_E(E@1J)`Zox-Bft;r8~sf-r@} zoswm1Mec0AJFQ&E*^b5Y&N3aYlEd?=Jwv3Zn=jmAPFM^qBLQ1gv`Mr`k-zs(qUb-wZLJ#4$V&A}$@Hp<0bHX@n#5>jgJCS;qj-6KYH-_5*CQ!?hg1yXI{Atn zmm5T|v)0$IQ9Ain!6?JH7pE=quBAJBTE^VvhQ9uiTf8V7VJ*JTi?R$eiV<1!1jF!2 zxif|#3fx$*3T{!DPL1)nG`_)*X^??)i(So1ZIQEj!Q_r>QH7SzrhIm(0oFO$PS2$o zdJ>t;*(=k@HHOgB(mElwE$OE4U(zbi8Kj9XmGazJ6=lfT)G6cHMr6(nyx}V+ zmR)AnQJyqkjBJkIG38;UUMF3E z2X$VyNIIfbYVM~Fz*2qtP*VN-h@~dKp?x1+lkqFx(fBX15ccG%zdQEtX*lRW%Fz9CH0cMK8w#%R|{QX75S(M2skOiWTV*fezF9=b6@ zRw*A7H*t%0gzj->o+McZJW28n;x@@D@t0OT#6O5TB*zi>Bd<}=%$PzjWaCG8mu&Bm zE%V~jXqCR<)K|nlkr436HhIcEkBonLxI%{EL0xC%wDVwH=Z6%fpV?aEuFt2CN9#EI Y^wZ=%>sddd9~uxPrdRM73-i5y0RXVQNB{r; literal 0 HcmV?d00001 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..58345fe118ae79fcc4b5f485bfd8dfd9d6aa6e9e GIT binary patch literal 1710 zcmbtVTTc^F5dKbS*>+vZtst~`K@r;uEFhxNT0sQU1gr`n8WPEAS;|7Y3%gqbZ@&5F zZ_z}-XhMAUM;YgAFBU8j@u6qW%$fP-J2P{pKYo5a0+7NZ86GrA@G9`3nc;bMU)|x> zhGvY8skkq(#1;Yrn=p*g7=x|3q) ziKf#FTl@`IOO9Sp=ZsQuNpljh6&Zd6B*+RbKwf@x?Bp=hk^Q{YBk&1AQ< zoRbJ3h*k-03fdtvES{J3+-`|Gx@nwX9NIB$ThA7>XQr)-b33!~Qbs3261o(0<03=Q zy@*Rn+?lRvabw*qGBibFk0tanjGjWPE`_#QPeG<@MHKYm5<_=hb6&WJPfNwDX3d+H zVCllAh2a$iSJBVVTQkh;h!PRqdCL@;WtgJmorOfTY6CThgp3|s7hN&HkfOq+&kH2V z8^oZ3n}{;_D~&{zoj4=8`V1u)!i~FVH62@F@Xng+1l_uz8(KMU%be=S(6M0VcwvQG zx{xbMud}J!44Koe_Sdejr&jBD;ut9EMmanKqh<~i`Ce6)&1#t_bZ3M2K(#+kc7LZz zc=1p3J#TQQWKo8e8|L*t;42l`qesLLX8d>s^ixlJXoON{i5Wz@CffTD zBW;|dxA2k#gyNCD;X|-^ulE4bclbY}<)dqTi`F1{fe<8`Ei_#)MAAgr55pKCi4dS- zl(5BajCLYw2;;cz`i9)-Uh)Eziq$yo(AgwuJh)3bdU&)7REWt0lXc68yM;Mg`pvF=x5sq_`B jeS~)7H&nB$^t&)+!oCWO2UBjq1d?t@h6i|vnd#nNr*+Mm literal 0 HcmV?d00001 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..7bcf0676164d9351fc11fb2da7892d81c81e1a30 GIT binary patch literal 1488 zcmbtUU2hUm5IvW#rRyr#A{N1q)~bMQxAnmXsl=u!hJ@N!8WNwH3%#YQu#5X)+JB`l zHqpc%;EyuSWfuY!QpId`_s;ChIp@yI-Jid{{QywLriu{43L+Y!h%vlvp6fksp9phf zQ~&50j<9u?J0FhP!W1@lE!)w%+&w+I?A&fTuFYHS9(_Edgx7<3hS-*28g7|kF<-6L z-t$jf_gtf+@0wn>F5FU~p&-uiYzp-Vp`-7f^=#odhGj|;6)LVN&@^1f4Tk+G2v>?9 zM;(!#ZVUH-o5xo7jn{1oyJFdrmm!=lR3&>-!%fUHWQKwJJy|CbSg|d+J%$(gLT!q& zvAqpSw=#q%sZfxTt+~bUQdVz9oI*p2y{%yp8HRY!Ou_K{FSU(VsKgN2v5qM}Q8P^8 z*XEEnJLH+KSuNgaaNCe};EcGZhC|aeP5-PNA|Z2K!}J9(u&T8A*}zt9Fr~xZ?;%!5WRpY;&hTXITB0T&mM>`msba8=~J75C)U~C$jF4 zb%F?8K)jgEtzCe9=|^Pg>BlGN)FhE3yXeQ^F7A;<8Mu!Jge6x?w36s?EaM?Dtk7Bu zzAfVsc^;D|geT;qV?$5LT_zneKlL5TyW&^O1$W{C3!nS(Qb(*GlkRKqF;l*VC4H=NOCmTKnR6CMG;Twty1zT*0J#_^BZt-olXD% literal 0 HcmV?d00001 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..3f66a48f980946c22c29a08f451e1fbc9546bdf4 GIT binary patch literal 1428 zcmbW1-BQy)6vzKtN&_W)+e!fu6}1H<;0GdQlo=4GW04t)UU1!Bt%#c^~%*U+h>3*7=;+wz?>YSOM43M>$FrM>CY1In_Z^y=tS zlujC1w#wxY6I<+ISbXA0;$rh2f!-4u0&OM7 z_N8S9j1UndY^}I$mi%nyjfPtSJ^wNp3N)kzMo$Uk*y*(wtcorDhHDC}o#x}hMYHiZ zD-d0BHVN*|TecY<-MTE+xYL(+O0xD^x|UiWY)1Vpi(x)L%i{T~lP)A#IWL2%3LRK+ zT$KWWR8!DArxjKKk40dfnK&hPK7agAEzx3^b68mG&MS|>&Rv|jSSpFh6Wuta%78tWv)RT=HR*Y#r(s@T@;uQ9v^P`2-izQS1a7n4Vo{0^132>@ z31(J1r5Q>i80Qz;mE#20bKDV}yT-pk2yoN{Ha`cNlN^;E(2YAB^-vR2Ft`$!Zc?5g z8psm+h!fExuv-mLyQRJ3u>K>kL=!fHyF@6Lwg`)G9wF=!`m1~UNaRTyqWCMWenjiU zmrs9wQKJRQ#Xjl-19UH?ZWs(dy7nV)f%p!h@e}R-p zl~(DaReqFZ&+aOrj4$0iJw4}~?&+VuzI+3)i=8Aw2y2Mwh$6<2J>;j{u(&-m+WkW@ zkPNX$rfteyhH$0YOCXMfhNO-;=nQN9_r{nzZ-l+QW1P6=L^y`zlcR~z6=$+b5ko{$ z$dGGZLwBTO+QWtdOY6ueq!_m+?}Ve_7Q@PQWy`g!mm|}b!g+Ew5MybM>?E=XCozw_ zhJubF7H;VF!3j~ExZIjBjaii(y*-K4ptZzXLPbBCay)&L+$4brRIMt zsF5YC>R3}i(N}xz)-w(348<8Q{F!V_OA4kjB{IlVdo;brqXWT^X_~fZxyOCsba~&R zOs+W^aI421Q=NlkM7}ktlwic1Er<5Km1dKJ{lkw$xYC;NrA~40p-q)Mn9c=G0!04^uvhdt~p^ zXLaB>ctAFX2-!T@0ur;M1& literal 0 HcmV?d00001 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.class b/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.class new file mode 100644 index 0000000000000000000000000000000000000000..bb518c0c30a39b2302dd334df984cb13fb5bcf1b GIT binary patch literal 783 zcmbVKTT9$P6#h;&8aJk1SL^*!e9+J~7K#X7Py}INs}IV)$|R0;G$wXtR`6%}uoU{x zAJ88qp4qJmKB)|u?_B15-{hS6cmL-vfNgvV;h_@1kI;i&!qA1d5lJqJpUGi*Au~(p z-Bg9L+l0#UO0$YSR0D(&`VkSnr?<(q&}Xt({g(V{DI;}ag}F4zm9Xb0U2``zR*TI3 z;LtHA3H@hE8+*{YN~I=H-LVct7<818ky%-sc9SkK9AN~bglc&$wXmuz2Y~`Hy8Ef%xP(0m65YM#nA^y_F&>hD;Oz=L=6<}^3 yRbC+mn0u62Cpj8->oJ9C_L!-o>r`qTWv^p7ZFi>`_B_mDjxppr%=4+moyiAu`NN3- literal 0 HcmV?d00001 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/EquationTask.class b/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/EquationTask.class new file mode 100644 index 0000000000000000000000000000000000000000..75715b8315a195c158c3c4637d93733ab53f44e5 GIT binary patch literal 2929 zcmbtW-BS}+6#rdF*d#0v0w@tsq^OX9L2La&L=0G01ECO6v}%`dNmiEKxVu5^_s2}1 z+V{##r%%;aWhy#$TBp8rrhio1b9VzqlLrSMcJH}o&pG#ZKJWhX@AE$aoW^${)Sy;^ zPlg|L3`Z93B?_vw#EqdtiQ7fZ=2pT{?PWW$qB{AT9yzvPJC>StCW)1yj|_FEG(&Sv zGmP{pO6qNFZ0h!=3*1s2%`}Gl=Yj|zC?O=H9x}tw+ZdX-U3AqwAoT^))`Ye6(iH}# zNN8l}xuveE30*aE2}Rd=PSwY(TycdP&cxj;F9`7v8W0vSXlAJG>z@mu1+5a=WbD9B zhNEwTq|zk{jAJJAs>Lwex9zYbLx^IRgbo><=wb-Ja%a}DG$Y3#t*UyFr>t8GYzy2#k%7D;Xs{#c+JPkqIEq(5xBcytdeFZWfXNGbrPr08^(L_8o4C zbPmZlgu@IiIquBxRc_gQtM(YI?dNB^@I!?2h>Q<#lp&Z^^=wgB9sZ6zq(ndw6{$WU z5?YyrDk-j#&;W)Rnhdks(sFsH+l!*e--t|8gYwrnc`21qrc+9COk`2Q8HU}j>Tas2 z>(i!YINU1hu~CErNHT8gxt0#8l)qS#)SaYJnV zmuJ#bprEhUF)Y1S-SS$<9vPB)ihJ}AnOD&?$cI^x1AOmZi0F4|3XxE+E8TY@7R zrO43xs&Z+Zn9DrjO;&GAo};_YwC*wdRF1AB=ovk)8jCu&dsC*lTr3P%wp|(LHO0)m z0IqXEldYjozV}y29893xI(78M`vVC`*cAa4V^+w#~`i&lv`) z^hHJHH*YeUOIssS!dDFYD&kbleF@*ZHVj^KxD+YsAum?gOJlHx?x$LM=-Q_@#6{w+ zG{b4FrIF^xO?rOg-}mFBI2i`fxtGQ2VopX zGsfxr1)9DW(MB=YiB+`Ydzwc-U>AO*zk;99g>~$~U!<`>mX3H4LKcg(qga8HRpwGl zM2UF6bfYbz{t`L#!-qW4?U4SXqx}*Bj4_GM#6asnQ)?q>Yq;g*00~-!HGk|k^gJS> z2EvUxmwCX2;2q~LL10*hUQ+&pqy>Qa_}?O3qm-_(7xBp14UDfL8jr*_aDENpc;uu@ zNb9)xC?5G}1GD$hLI(~+F1s{+n13Ypad#V}?L*Y9<6{A+)&;a5L81r9w?XncLEa5f zy&b{<97dd?bcSxuK@emSl@R>$?)LCmiAH!WR)|vr117DFL={MC a)qUT^r^Jg8uLYmsi!)JtiLdc3qW=Q{R|&iT literal 0 HcmV?d00001 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.class b/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.class new file mode 100644 index 0000000000000000000000000000000000000000..6b56bf2f7d4a1290c16f5bf62e0f28fb258698d0 GIT binary patch literal 2298 zcmbtVT~`xV6x}z3OcDkOK?DRT2-bWUf|jZ@;s+6QDkKylRH)LMa3KT3Oq`im_$Mtt zpnd5BWhuJsTJ2-k>W^xBZW0ho9$fSxbMHBG=AOOJ+4tn{f8PHA;4aJ{JZMtjRnZI| z!&rVdS>pD(Fh{Q^UzT-8*h!Z=TTXJDyT#S&_CelpZC-F^$(5s*48A+Msk?U>CL)?P z^C@Q>eLI{j37fmRWu~HwLHH3+5LD3ul_9jrU-6{D&5h)OYwP9)gYt?SWszNH=!|I5 znU4cfL7YRIf{==Kgc)w04GIx*t#pyw45`SO>7>I{;`1sxae<+0n{SDy zMxktQSNur*;aWBsCaB3<-G^Mi`nR(M3N-8GH$|qrofmeF z=MD0NXDsT|BDZyE*PLFrs8e;u8lkP5DW`RrVrW^{ZO5%WG46t{u4o#}Z;_ zU2u6}YnGR4sg(`k<|@KIA8BxLNYE7(R#cU2)V)TSYZWFzELdf`Af|Omz2h|U5h*Zg z_@rgIa!QtFgvEc@(jZtv`DwY+7h)XSDg~mG+-@zm*K~g_-cXG zLmzW<%@EG;jAd<=OR4%Re8O|;!`yC3Gzecg5r3qP6Rz43X>J$`x+_R(Ya|WE*aS&V z)l5^^X@fhCa1_v}zScm~b!|WT8=#AR{70Z*li^BTaT;+}V4S+sr&!j?L;9~42!k|N zJT#L%2+N5{yRe))v^Ig5z(>y+vR>2POY20ew=eM)EY|xDO5z<_`)GZS4&V*C`u5PC zIKZW!5sZZg-(cvsm<&I}=M*H(%CWQb?1w_nAU#_snTo4uMS_Ow2tsuG+mWHSv1&qO zF-I1q#y6NJIC8f@I|+LNISdfgr?hVe`%$nY(mkw?=1m7-<7x%gjb`5m!mZ*lFw5^r!-I$Tau3P@ zZtus#cMoy@Cv;Grq42}Xo?cAvOFLdM17!XJ-vKmjNu3Pqm1Vka53=4&I)+4RSj~>aC&hd1!ksL*j@#BM~rc6pFj`%VpU}A&HcV zw1!D&45bUDSz{>c?GJWn4H|r?_m1`RM)cE0^hmuvZbbiIBe7jGMKhVwFpVrjvRtj2 z9kbPBczW5k7kSddGZKH!J1yPq#GOj>K2ZuGyw|6?Yi2<2tS0 zzOX{-?wRG-t{rYha=Hvk#p?@(>ALNT=IF2|{0{Fq#N_Ip#hotqZHdpwOgrS(0Zsc1 zr`z7hw?xgBe`L<5TatAt=ay?ZUSPX>4G|8!zKRuwm5W?4>1~Q2-1Y*Ju9>bY{EEYa zK(1Zt?=EH+X^R$VyID3b_egrgEa5I$ozO?b$pdQN!A^drze4>Y-^@2$QCgp%yo}%+ z!HF?kAeb1#n*`Meeujb+W-y0q$Wx8`WFO!$o{(Kf8C9}z+@pGlsOl0$fUXY|1!tJ z`cSub4Qp;b{X^Sq8Ft#yTTff*1KrvGzVmmT{+4M_DIFTN?wCz01O}fBKLQNF{OYP& zR!bWUOU3@oWw^bdj1adspl#nPZ{-WzBp)A;A@lJ|>)XY$x>-~U`HQJbG6n_0s#;Ms zSO2n%Aq+D}N+n<1Ueg%vJnok(j4K$GFf8K}e9GXjH=35gFcOOwpXf(=x}jTp=~C^9 zQFk(7jNvm0*JO<2I^lK|)~xmc@f_)mwo%$;Sd8_oE;RI3E7LQeIksu-WqNnu288_y z8J}a4A&@mK(^+8{?KS1DRO1y13d6J@Xc_gkZ92zk)gl0MXH&QJ1H&=wwV&$7ArEF4 zQ@F_uPcwL9@k$7BBqStd%wU!w^-(dMXUHqskET=KU)K+n+OcwxUP>pu6p>R(H@%ei z(~H6LSPfI`(=z5jCZ(pmV_JGc0IEUw`Q$_pp&;ZS2D!8(;|`X2*oB{444GKG@4%Cb zFU1n@w(% z=>j_YCLJ@RnR}M*v~ALpcJ1bYYB~Jy>i=K~P{Pqc8JNlt(Hy=0l%nY}1)OGKU#H1T ztl!hd3&h>Ls3r`rs!_`4!CeYjq{V5Z0P) zyKdY!dFn(iaz4f5N}FyNE$3mgAglq80`^bUwQu0Kv+ zlaBrZJYqCF#1b!X^)(pR_q?V5HI2v}E##0F^HkGFi|;rOFZ}>1k-T<}8^4R`-tD@} zCEVlaCrrhhA@4D{!dYxrj|T|_w)=BwJ^2F=_^cC&+)}y zH0KrAV`7g%OyDvUj37o|f*Eq^9Im6wvV{A1Kx-aSli;85(nG#f@yG@G#RbZqA(nWK zRI0;8rno-=AGHZ;9PB2wcrQ@&k_YTw?0rWyCB*&=DbUej977-r%0N5gF-=?E2lb7xiR1QlNn=V-H z9Wd^#XqcC87i>}Z0~nY70IPZ_NLtlLn`>1+1xl+12ta#36@%CyXLM4r?wZKFA`3%b zde8CIGkArt;1hx*ghjs)!a}$e5JKbyZa+hmCtoMmN9p!}5-bA#ksqKJTza{|-5@<2MV@;Z?=hmIQ@ zNMARf%Si4kqoSuDJ=IR~D58v!63$~(Apb}Q+AO6gbqf~+s{LeS;gY~e%InMEowM24 zRi3eMMd0!oI7ux93ZC@6jxUW8cwBMawKGn3>wj8K=l^mp&bR`(m9R;e;WZtojm~~U zMccCB(=)mjlBO;ro!C8R&a`yQ-uK10C{WzdQEckc?+{s#c8FCDgJ#cD2v1wQ&={aZc)pm qzT0HX;tq8S1C=ZX&AT)+m`)SPQ_Juh&CoZR>QqJs=^4Z9^7vng!UjtK literal 0 HcmV?d00001 diff --git a/lab-01/src/Main.java b/lab-01/src/Main.java new file mode 100644 index 0000000..54e07b4 --- /dev/null +++ b/lab-01/src/Main.java @@ -0,0 +1,96 @@ +import by.parfen01.quiser.Quiz; +import by.parfen01.quiser.Result; +import by.parfen01.quiser.task_generators.GroupTaskGenerator; +import by.parfen01.quiser.task_generators.PoolTaskGenerator; +import by.parfen01.quiser.task_generators.math_task_generators.EquationTaskGenerator; +import by.parfen01.quiser.task_generators.math_task_generators.ExpressionTaskGenerator; +import by.parfen01.quiser.tasks.TextTask; +import by.parfen01.quiser.tasks.math_tasks.MathTask; +import java.util.EnumSet; +import java.util.Map; +import java.util.Scanner; +import java.util.TreeMap; + +public class Main { + public static void main(String[] argv) { + Map givenQuizes = getQuizMap(); + System.out.println("Enter test name..."); + Scanner scanner = new Scanner(System.in); + Quiz currentQuiz; + String nameOfQuiz = scanner.nextLine(); + while(true) { + if (!givenQuizes.containsKey(nameOfQuiz)) { + System.out.println("Test not found. Please try another name..."); + nameOfQuiz = scanner.nextLine(); + } else { + currentQuiz = givenQuizes.get(nameOfQuiz); + break; + } + } + while (!currentQuiz.isFinished()) { + System.out.println(currentQuiz.nextTask().getText()); + String answer = scanner.nextLine(); + if (currentQuiz.provideAnswer(answer) == Result.OK) { + System.out.println("Right"); + continue; + } + if (currentQuiz.provideAnswer(answer) == Result.WRONG) { + System.out.println("Wrong"); + continue; + } + if (currentQuiz.provideAnswer(answer) == Result.INCORRECT_INPUT) { + System.out.println("Incorrect input. Try once more"); + } + } + System.out.println("total correct answer number: " + currentQuiz.getCorrectAnswerNumber()); + System.out.println("total wrong answer number: " + currentQuiz.getWrongAnswerNumber()); + System.out.println("total incorrect input number: " + currentQuiz.getIncorrectInputNumber()); + System.out.println("your final mark is: " + currentQuiz.getMark()); + } + + /** + * @return тесты в {@link Map}, где + * ключ - название теста {@link String} + * значение - сам тест {@link Quiz} + */ + static Map getQuizMap() { + Map result = new TreeMap<>(); + ExpressionTaskGenerator firstTaskGenerator = new ExpressionTaskGenerator( + 1, 100, EnumSet.allOf(MathTask.Operation.class)); + Quiz firstQuiz = new Quiz(firstTaskGenerator, 10); + result.put("Expression Test", firstQuiz); + EquationTaskGenerator secondTaskGenerator = new EquationTaskGenerator( + 1, 100, EnumSet.allOf(MathTask.Operation.class), new int[]{0, 1}); + Quiz secondQuiz = new Quiz(secondTaskGenerator, 10); + result.put("Equation Test", secondQuiz); + TextTask firstTextTask = new TextTask("what the highest mountain in the world?", "Everest"); + TextTask secondTextTask = new TextTask("what the fastest mammal in the world?", "Cheetah"); + TextTask thirdTextTask = new TextTask("Лектор расписался в журнале." + + " Там было 3 н-ки." + + " Сколько студентов было на паре?", "Один"); + TextTask foursTextTask = new TextTask("what the fastest mammal in the world?", "Cheetah"); + PoolTaskGenerator thirdTaskGenerator = new PoolTaskGenerator( + false, + secondTextTask, + thirdTextTask, + foursTextTask, + firstTextTask); + PoolTaskGenerator foursTaskGenerator = new PoolTaskGenerator( + true, + secondTextTask, + thirdTextTask, + foursTextTask, + firstTextTask); + Quiz thirdQuiz = new Quiz(thirdTaskGenerator, 2); + result.put("Text Test", thirdQuiz); + Quiz foursQuiz = new Quiz(new GroupTaskGenerator( + firstTaskGenerator, + secondTaskGenerator, + thirdTaskGenerator), + 3); + result.put("Mixed Test Without Repeat", foursQuiz); + Quiz fifthQuiz = new Quiz(foursTaskGenerator, 3); + result.put("Mixed Test With Repeat", fifthQuiz); + return result; + } +} \ No newline at end of file diff --git a/lab-01/src/by/parfen01/quiser/Quiz.java b/lab-01/src/by/parfen01/quiser/Quiz.java new file mode 100644 index 0000000..92e5173 --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/Quiz.java @@ -0,0 +1,98 @@ +package by.parfen01.quiser; + +/** + * Class, который описывает один тест + */ +public class Quiz { + TaskGenerator generator; + int taskCount; + int correctAnswerNumber = 0; + int wrongAnswerNumber = 0; + int incorrectInputCount = 0; + Task currentTask; + boolean isLastInputIncorrect = false; + /** + * @param generator генератор заданий + * @param taskCount количество заданий в тесте + */ + public Quiz(TaskGenerator generator, int taskCount) { + this.generator = generator; + this.taskCount = taskCount; + currentTask = generator.generate(); + } + + /** + * @return задание, повторный вызов вернет слелующее + * @see Task + */ + public Task nextTask() { + if (!isLastInputIncorrect) { + currentTask = generator.generate(); + } + return currentTask; + } + + /** + * Предоставить ответ ученика. Если результат {@link Result#INCORRECT_INPUT}, то счетчик неправильных + * ответов не увеличивается, а {@link #nextTask()} в следующий раз вернет тот же самый объект {@link Task}. + */ + public Result provideAnswer(String answer) { + Result result = currentTask.validate(answer); + switch (result) { + case INCORRECT_INPUT -> { + isLastInputIncorrect = true; + break; + } + case OK -> { + ++correctAnswerNumber; + --taskCount; + isLastInputIncorrect = false; + break; + } + case WRONG -> { + ++wrongAnswerNumber; + --taskCount; + isLastInputIncorrect = false; + break; + } + } + + return result; + } + + /** + * @return завершен ли тест + */ + public boolean isFinished() { + return taskCount == 0; + } + + /** + * @return количество правильных ответов + */ + public int getCorrectAnswerNumber() { + return this.correctAnswerNumber; + } + + /** + * @return количество неправильных ответов + */ + public int getWrongAnswerNumber() { + return this.wrongAnswerNumber; + } + + /** + * @return количество раз, когда был предоставлен неправильный ввод + */ + public int getIncorrectInputNumber() { + return this.incorrectInputCount; + } + + /** + * @return оценка, которая является отношением количества правильных ответов к количеству всех вопросов. + * Оценка выставляется только в конце! + */ + public double getMark() { + return (double)correctAnswerNumber / (correctAnswerNumber + wrongAnswerNumber); + } +} \ No newline at end of file diff --git a/lab-01/src/by/parfen01/quiser/Result.java b/lab-01/src/by/parfen01/quiser/Result.java new file mode 100644 index 0000000..ce06467 --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/Result.java @@ -0,0 +1,10 @@ +package by.parfen01.quiser; + +/** + * Enum, который описывает результат ответа на задание + */ +public enum Result { + OK, // Получен правильный ответ + WRONG, // Получен неправильный ответ + INCORRECT_INPUT // Некорректный ввод. Например, текст, когда ожидалось число +} \ No newline at end of file diff --git a/lab-01/src/by/parfen01/quiser/Task.java b/lab-01/src/by/parfen01/quiser/Task.java new file mode 100644 index 0000000..1f4da89 --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/Task.java @@ -0,0 +1,21 @@ +package by.parfen01.quiser; + +/** + * Interface, который описывает одно задание + */ +public interface Task { + /* + @return текст задания + */ + + String getText(); + + /* + * Проверяет ответ на задание и возвращает результат + * + * @param answer ответ на задание + * @return результат ответа + * @see Result + */ + Result validate(String answer); +} diff --git a/lab-01/src/by/parfen01/quiser/TaskGenerator.java b/lab-01/src/by/parfen01/quiser/TaskGenerator.java new file mode 100644 index 0000000..93c5264 --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/TaskGenerator.java @@ -0,0 +1,14 @@ +package by.parfen01.quiser; + +/** + * Interface, который описывает один генератор заданий + */ +public interface TaskGenerator { + /* + * Возвращает задание. При этом новый объект может не создаваться, если класс задания иммутабельный + * + * @return задание + * @see Task + */ + Task generate(); +} \ No newline at end of file diff --git a/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java new file mode 100644 index 0000000..ec20bf0 --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java @@ -0,0 +1,69 @@ +package by.parfen01.quiser.task_generators; + +import by.parfen01.quiser.Task; +import by.parfen01.quiser.TaskGenerator; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + +public class GroupTaskGenerator implements TaskGenerator { + private final ArrayList generators = new ArrayList<>(); + /** + * Конструктор с переменным числом аргументов + * + * @param generators генераторы, которые в конструктор передаются через запятую + */ + public GroupTaskGenerator(TaskGenerator... generators) { + if (generators == null) { + throw new NullPointerException(); + } + for (TaskGenerator generator : generators) { + if (generator != null) { + this.generators.add(generator); + } + } + if (this.generators.isEmpty()) { + throw new IllegalArgumentException(); + } + } + + /** + * Конструктор, который принимает коллекцию генераторов + * + * @param generators генераторы, которые передаются в конструктор в Collection (например, {@link ArrayList}) + */ + GroupTaskGenerator(Collection generators) { + if (generators == null) { + throw new NullPointerException(); + } + for (TaskGenerator generator : generators) { + if (generator != null) { + this.generators.add(generator); + } + } + if (this.generators.isEmpty()) { + throw new IllegalArgumentException(); + } + } + + /** + * @return результат метода generate() случайного генератора из списка. + * Если этот генератор выбросил исключение в методе generate(), выбирается другой. + * Если все генераторы выбрасывают исключение, то и тут выбрасывается исключение. + */ + public Task generate() { + Collections.shuffle(generators); + for (int i = 0; i < generators.size(); ++i) { + try { + return generators.get(i).generate(); + } + catch (Exception e) { + if (i == generators.size()) { + throw e; + } + } + } + + throw new RuntimeException(); + } +} \ No newline at end of file diff --git a/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java new file mode 100644 index 0000000..c59f109 --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java @@ -0,0 +1,82 @@ +package by.parfen01.quiser.task_generators; + +import by.parfen01.quiser.Task; +import by.parfen01.quiser.TaskGenerator; + +import java.util.*; + +public class PoolTaskGenerator implements TaskGenerator { + private final ArrayList tasks = new ArrayList<>(); + private final LinkedHashSet usedTextsOfTasks = new LinkedHashSet<>(); + private boolean isAllowedDuplicate; + private int numberOfUsedTasks = 0; + + /** + * Конструктор с переменным числом аргументов + * + * @param allowDuplicate разрешить повторения + * @param tasks задания, которые в конструктор передаются через запятую + */ + public PoolTaskGenerator(boolean allowDuplicate, Task... tasks) { + if (tasks == null) { + throw new NullPointerException(); + } + LinkedHashSet uniqueTexts = new LinkedHashSet<>(); + for (Task task : tasks) { + if (task != null && !uniqueTexts.contains(task.getText())) { + this.tasks.add(task); + uniqueTexts.add(task.getText()); + } + } + if (this.tasks.isEmpty()) { + throw new IllegalArgumentException(); + } + isAllowedDuplicate = allowDuplicate; + } + + /** + * Конструктор, который принимает коллекцию заданий + * + * @param allowDuplicate разрешить повторения + * @param tasks задания, которые передаются в конструктор в Collection (например, {@link LinkedList}) + */ + public PoolTaskGenerator(boolean allowDuplicate, Collection tasks) { + if (tasks == null) { + return; + } + LinkedHashSet uniqueTexts = new LinkedHashSet<>(); + for (Task task : tasks) { + if (task != null && !uniqueTexts.contains(task.getText())) { + this.tasks.add(task); + uniqueTexts.add(task.getText()); + } + } + if (this.tasks.isEmpty()) { + throw new IllegalArgumentException(); + } + isAllowedDuplicate = allowDuplicate; + } + + /** + * @return случайная задача из списка + */ + @Override + public Task generate() { + if (isAllowedDuplicate) { + int numberOfTest = (int) (Math.random() * tasks.size()); + return tasks.get(numberOfTest); + } + if (numberOfUsedTasks == tasks.size()) { + throw new EmptyStackException(); + } + + while(true) { + int numberOfTest = (int) (Math.random() * tasks.size()); + if (!usedTextsOfTasks.contains(tasks.get(numberOfTest).getText())) { + ++numberOfUsedTasks; + usedTextsOfTasks.add(tasks.get(numberOfTest).getText()); + return tasks.get(numberOfTest); + } + } + } +} diff --git a/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java new file mode 100644 index 0000000..17738c2 --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java @@ -0,0 +1,39 @@ +package by.parfen01.quiser.task_generators.math_task_generators; + +import by.parfen01.quiser.tasks.math_tasks.MathTask; + +import java.security.InvalidParameterException; +import java.util.EnumSet; + +public abstract class AbstractMathTaskGenerator implements MathTaskGenerator { + private final int minNumber; + private final int maxNumber; + private final EnumSet operations; + + AbstractMathTaskGenerator(int minNumber, int maxNumber, EnumSet operations) { + this.minNumber = minNumber; + this.maxNumber = maxNumber; + this.operations = operations.clone(); + if (operations.equals(EnumSet.noneOf(MathTask.Operation.class))) { + throw new InvalidParameterException(); + } + if (maxNumber < minNumber) { + throw new IllegalArgumentException(); + } + } + + @Override + public int getMaxNumber() { + return maxNumber; + } + + @Override + public int getMinNumber() { + return minNumber; + } + + @Override + public EnumSet getOperations() { + return operations; + } +} diff --git a/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java new file mode 100644 index 0000000..c08ba06 --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java @@ -0,0 +1,29 @@ +package by.parfen01.quiser.task_generators.math_task_generators; + +import by.parfen01.quiser.tasks.math_tasks.EquationTask; +import by.parfen01.quiser.tasks.math_tasks.MathTask; + +import java.util.EnumSet; + +public class EquationTaskGenerator extends AbstractMathTaskGenerator { + private final int[] possiblePositionsOfX; + /** + * @param minNumber минимальное число + * @param maxNumber максимальное число + */ + public EquationTaskGenerator(int minNumber, + int maxNumber, + EnumSet operations, + int[] possiblePositionsOfX) { + super(minNumber, maxNumber, operations); + this.possiblePositionsOfX = possiblePositionsOfX.clone(); + } + + /** + * return задание типа {@link EquationTask} + */ + public EquationTask generate() { + int xPos = possiblePositionsOfX[(int)(Math.random() * possiblePositionsOfX.length)]; + return new EquationTask(getRandomNumberForTask(), getRandomNumberForTask(), xPos, getRandomOperationFromSet()); + } +} diff --git a/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java new file mode 100644 index 0000000..11870d0 --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java @@ -0,0 +1,24 @@ +package by.parfen01.quiser.task_generators.math_task_generators; + +import by.parfen01.quiser.tasks.math_tasks.ExpressionTask; +import by.parfen01.quiser.tasks.math_tasks.MathTask; +import java.util.EnumSet; + +public class ExpressionTaskGenerator extends AbstractMathTaskGenerator { + /** + * @param minNumber минимальное число + * @param maxNumber максимальное число + */ + public ExpressionTaskGenerator(int minNumber, + int maxNumber, + EnumSet operations) { + super(minNumber, maxNumber, operations); + } + + /** + * return задание типа {@link ExpressionTask} + */ + public ExpressionTask generate() { + return new ExpressionTask(getRandomNumberForTask(), getRandomNumberForTask(), getRandomOperationFromSet()); + } +} diff --git a/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java new file mode 100644 index 0000000..08231c5 --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java @@ -0,0 +1,30 @@ +package by.parfen01.quiser.task_generators.math_task_generators; + +import by.parfen01.quiser.TaskGenerator; +import by.parfen01.quiser.tasks.math_tasks.MathTask; +import java.util.EnumSet; + +public interface MathTaskGenerator extends TaskGenerator { + int getMinNumber(); // получить минимальное число + int getMaxNumber(); // получить максимальное число + EnumSet getOperations(); + /** + * @return разница между максимальным и минимальным возможным числом + */ + default int getDiffNumber() { + return getMaxNumber() - getMinNumber(); + } + + default int getRandomNumberForTask() { + return (int)(Math.random() * getDiffNumber() + getMinNumber()); + } + + default MathTask.Operation getRandomOperationFromSet() { + while (true) { + MathTask.Operation operationToUse = MathTask.Operation.fromInt((int)(Math.random() * 4)); + if (getOperations().contains(operationToUse)) { + return operationToUse; + } + } + } +} diff --git a/lab-01/src/by/parfen01/quiser/tasks/TextTask.java b/lab-01/src/by/parfen01/quiser/tasks/TextTask.java new file mode 100644 index 0000000..fac084f --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/tasks/TextTask.java @@ -0,0 +1,41 @@ +package by.parfen01.quiser.tasks; + +import by.parfen01.quiser.Result; +import by.parfen01.quiser.Task; +import by.parfen01.quiser.task_generators.PoolTaskGenerator; + +import java.util.Objects; + + +/** + * Задание с заранее заготовленным текстом. + * Можно использовать {@link PoolTaskGenerator}, чтобы задавать задания такого типа. + */ +public class TextTask implements Task { + private final String text; + private final String answer; + /** + * @param text текст задания + * @param answer ответ на задание + */ + public TextTask(String text, String answer) { + this.text = text; + this.answer = answer; + } + + @Override + public String getText() { + return text; + } + + @Override + public Result validate(String answer) { + if (answer == null) { + throw new NullPointerException(); + } + if (answer.equals(this.answer)) { + return Result.OK; + } + return Result.WRONG; + } +} diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java new file mode 100644 index 0000000..6add1c4 --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java @@ -0,0 +1,13 @@ +package by.parfen01.quiser.tasks.math_tasks; + +public abstract class AbstractMathTask implements MathTask { + private int firstNumber; + private int secondNumber; + private Operation operation; + + AbstractMathTask(int firstNumber, int secondNumber, Operation operation) { + this.firstNumber = firstNumber; + this.secondNumber = secondNumber; + this.operation = operation; + } +} diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java new file mode 100644 index 0000000..be9bfd9 --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java @@ -0,0 +1,57 @@ +package by.parfen01.quiser.tasks.math_tasks; + +import by.parfen01.quiser.Result; + +public class EquationTask extends AbstractMathTask { + int positionOfX; + String text; + String answer; + public EquationTask(int firstNumber, int secondNumber, int positionOfX, Operation operation) { + super(firstNumber, secondNumber, operation); + this.positionOfX = positionOfX; + if (positionOfX != 0 && positionOfX != 1) { + throw new IllegalArgumentException(); + } + if (positionOfX == 0) { + text = "X" + Operation.toChar(operation) + String.valueOf(firstNumber) + "=" + String.valueOf(secondNumber); + if (firstNumber == 0 && operation == Operation.ADDITION) { + answer = "invalid operation"; + return; + } + answer = String.valueOf(calculate(secondNumber, firstNumber, Operation.getReverseOperation(operation))); + } else { + text = String.valueOf(firstNumber) + Operation.toChar(operation) + "X" + "=" + String.valueOf(secondNumber); + if (firstNumber == 0 && secondNumber != 0 && operation == Operation.ADDITION) { + answer = "no right answer"; + return; + } + if (operation == Operation.ADDITION || operation == Operation.MULTIPLICATION) { + answer = String.valueOf(calculate(secondNumber, firstNumber, Operation.getReverseOperation(operation))); + } else { + answer = String.valueOf(calculate(firstNumber, secondNumber, operation)); + } + } + } + + + @Override + public String getText() { + return text; + } + + @Override + public Result validate(String answer) { + if (answer == null) { + throw new NullPointerException(); + } + if (!answer.matches("^-?[0-9]+$") && + !answer.equalsIgnoreCase("invalid operation") && + !answer.equalsIgnoreCase("no right answer")) { + return Result.INCORRECT_INPUT; + } + if (answer.equals("-0") && this.answer.equals("0")) { + return Result.OK; + } + return this.answer.equals(answer) ? Result.OK : Result.WRONG; + } +} diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java new file mode 100644 index 0000000..03c455e --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java @@ -0,0 +1,37 @@ +package by.parfen01.quiser.tasks.math_tasks; + +import by.parfen01.quiser.Result; + +public class ExpressionTask extends AbstractMathTask { + private final String text; + private final String answer; + + public ExpressionTask(int firstNumber, int secondNumber, Operation operation) { + super(firstNumber, secondNumber, operation); + text = String.valueOf(firstNumber) + Operation.toChar(operation) + String.valueOf(secondNumber) + "=?"; + if (secondNumber == 0 && operation == Operation.DIVISION) { + answer = "invalid operation"; + return; + } + answer = String.valueOf(calculate(firstNumber, secondNumber, operation)); + } + + @Override + public String getText() { + return text; + } + + @Override + public Result validate(String answer) { + if (answer == null) { + throw new NullPointerException(); + } + if (!answer.matches("^-?[0-9]+$") && !answer.equalsIgnoreCase("invalid operation")) { + return Result.INCORRECT_INPUT; + } + if (answer.equals("-0") && this.answer.equals("0")) { + return Result.OK; + } + return this.answer.equals(answer) ? Result.OK : Result.WRONG; + } +} diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java new file mode 100644 index 0000000..4af7fc9 --- /dev/null +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java @@ -0,0 +1,90 @@ +package by.parfen01.quiser.tasks.math_tasks; + +import by.parfen01.quiser.Task; + +import java.security.InvalidParameterException; + +public interface MathTask extends Task { + enum Operation { + ADDITION, // Операция сложения(+) + SUBTRACTION, // Операция вычитания(-) + MULTIPLICATION, // Операция умножения(*) + DIVISION; // Операция деления(/) + + public static Operation fromInt(int number) { + switch (number) { + case 0 -> { + return ADDITION; + } + case 1 -> { + return SUBTRACTION; + } + case 2 -> { + return MULTIPLICATION; + } + case 3 -> { + return DIVISION; + } + } + + throw new InvalidParameterException(); + } + + static char toChar(Operation operation) { + switch (operation) { + case ADDITION -> { + return '+'; + } + case SUBTRACTION -> { + return '-'; + } + case MULTIPLICATION -> { + return '*'; + } + case DIVISION -> { + return '/'; + } + } + + throw new InvalidParameterException(); + } + + static Operation getReverseOperation(Operation operation) { + switch (operation) { + case ADDITION -> { + return Operation.SUBTRACTION; + } + case SUBTRACTION -> { + return Operation.ADDITION; + } + case MULTIPLICATION -> { + return Operation.DIVISION; + } + case DIVISION -> { + return Operation.MULTIPLICATION; + } + } + + throw new InvalidParameterException(); + } + } + + default int calculate(int firstValue, int secondValue, Operation operation) { + switch (operation) { + case ADDITION -> { + return firstValue + secondValue; + } + case SUBTRACTION -> { + return firstValue - secondValue; + } + case MULTIPLICATION -> { + return firstValue * secondValue; + } + case DIVISION -> { + return firstValue / secondValue; + } + } + + throw new InvalidParameterException(); + } +} From 8d96440f0510cfb19f86e5512597dbaa3a687304 Mon Sep 17 00:00:00 2001 From: parfen01 Date: Sat, 8 Oct 2022 21:01:10 +0300 Subject: [PATCH 05/12] Lab1 Tested + Nested classes All made tests are passed. All generators are nested in tasks. --- lab-01/lab-01/.idea/.gitignore | 8 -- lab-01/lab-01/.idea/misc.xml | 6 - lab-01/lab-01/.idea/modules.xml | 8 -- lab-01/lab-01/.idea/uiDesigner.xml | 124 ------------------ lab-01/lab-01/.idea/vcs.xml | 6 - lab-01/lab-01/src/Main.java | 94 ------------- .../lab-01/src/by/parfen01/quiser/Quiz.java | 95 -------------- .../lab-01/src/by/parfen01/quiser/Result.java | 10 -- .../lab-01/src/by/parfen01/quiser/Task.java | 21 --- .../src/by/parfen01/quiser/TaskGenerator.java | 14 -- .../task_generators/GroupTaskGenerator.java | 69 ---------- .../task_generators/PoolTaskGenerator.java | 80 ----------- .../AbstractMathTaskGenerator.java | 39 ------ .../EquationTaskGenerator.java | 29 ---- .../ExpressionTaskGenerator.java | 24 ---- .../MathTaskGenerator.java | 30 ----- .../by/parfen01/quiser/tasks/TextTask.java | 41 ------ .../tasks/math_tasks/AbstractMathTask.java | 13 -- .../quiser/tasks/math_tasks/EquationTask.java | 57 -------- .../tasks/math_tasks/ExpressionTask.java | 37 ------ .../quiser/tasks/math_tasks/MathTask.java | 90 ------------- lab-01/out/production/lab-01/Main.class | Bin 5271 -> 5718 bytes .../lab-01/by/parfen01/quiser/Quiz$1.class | Bin 738 -> 738 bytes .../lab-01/by/parfen01/quiser/Quiz.class | Bin 2017 -> 2140 bytes .../lab-01/by/parfen01/quiser/Task.class | Bin 218 -> 324 bytes .../by/parfen01/quiser/TaskGenerator.class | Bin 175 -> 0 bytes .../task_generators/GroupTaskGenerator.class | Bin 2128 -> 2207 bytes .../task_generators/PoolTaskGenerator.class | Bin 2673 -> 3002 bytes .../AbstractMathTaskGenerator.class | Bin 1767 -> 0 bytes .../EquationTaskGenerator.class | Bin 1710 -> 0 bytes .../ExpressionTaskGenerator.class | Bin 1488 -> 0 bytes .../MathTaskGenerator.class | Bin 1428 -> 0 bytes .../by/parfen01/quiser/tasks/TextTask.class | Bin 981 -> 991 bytes .../tasks/math_tasks/AbstractMathTask.class | Bin 783 -> 895 bytes .../tasks/math_tasks/EquationTask.class | Bin 2929 -> 3043 bytes .../tasks/math_tasks/ExpressionTask.class | Bin 2298 -> 2387 bytes .../quiser/tasks/math_tasks/MathTask$1.class | Bin 980 -> 980 bytes .../tasks/math_tasks/MathTask$Operation.class | Bin 2430 -> 2430 bytes .../quiser/tasks/math_tasks/MathTask.class | Bin 1011 -> 1093 bytes lab-01/src/Main.java | 36 ++--- lab-01/src/by/parfen01/quiser/Quiz.java | 24 ++-- lab-01/src/by/parfen01/quiser/Task.java | 13 ++ .../src/by/parfen01/quiser/TaskGenerator.java | 14 -- .../task_generators/GroupTaskGenerator.java | 13 +- .../task_generators/PoolTaskGenerator.java | 14 +- .../AbstractMathTaskGenerator.java | 39 ------ .../EquationTaskGenerator.java | 29 ---- .../ExpressionTaskGenerator.java | 24 ---- .../MathTaskGenerator.java | 30 ----- .../by/parfen01/quiser/tasks/TextTask.java | 4 +- .../tasks/math_tasks/AbstractMathTask.java | 42 +++++- .../quiser/tasks/math_tasks/EquationTask.java | 39 +++++- .../tasks/math_tasks/ExpressionTask.java | 23 +++- .../quiser/tasks/math_tasks/MathTask.java | 26 ++++ 54 files changed, 186 insertions(+), 1079 deletions(-) delete mode 100644 lab-01/lab-01/.idea/.gitignore delete mode 100644 lab-01/lab-01/.idea/misc.xml delete mode 100644 lab-01/lab-01/.idea/modules.xml delete mode 100644 lab-01/lab-01/.idea/uiDesigner.xml delete mode 100644 lab-01/lab-01/.idea/vcs.xml delete mode 100644 lab-01/lab-01/src/Main.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/Quiz.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/Result.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/Task.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/TaskGenerator.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java delete mode 100644 lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/TaskGenerator.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.class delete mode 100644 lab-01/src/by/parfen01/quiser/TaskGenerator.java delete mode 100644 lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java delete mode 100644 lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java delete mode 100644 lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java delete mode 100644 lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java diff --git a/lab-01/lab-01/.idea/.gitignore b/lab-01/lab-01/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/lab-01/lab-01/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/lab-01/lab-01/.idea/misc.xml b/lab-01/lab-01/.idea/misc.xml deleted file mode 100644 index d15472f..0000000 --- a/lab-01/lab-01/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/lab-01/lab-01/.idea/modules.xml b/lab-01/lab-01/.idea/modules.xml deleted file mode 100644 index 1e89cde..0000000 --- a/lab-01/lab-01/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/lab-01/lab-01/.idea/uiDesigner.xml b/lab-01/lab-01/.idea/uiDesigner.xml deleted file mode 100644 index 2b63946..0000000 --- a/lab-01/lab-01/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/lab-01/lab-01/.idea/vcs.xml b/lab-01/lab-01/.idea/vcs.xml deleted file mode 100644 index b2bdec2..0000000 --- a/lab-01/lab-01/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/lab-01/lab-01/src/Main.java b/lab-01/lab-01/src/Main.java deleted file mode 100644 index 66c05b8..0000000 --- a/lab-01/lab-01/src/Main.java +++ /dev/null @@ -1,94 +0,0 @@ -import by.parfen01.quiser.Quiz; -import by.parfen01.quiser.Result; -import by.parfen01.quiser.task_generators.GroupTaskGenerator; -import by.parfen01.quiser.task_generators.PoolTaskGenerator; -import by.parfen01.quiser.task_generators.math_task_generators.EquationTaskGenerator; -import by.parfen01.quiser.task_generators.math_task_generators.ExpressionTaskGenerator; -import by.parfen01.quiser.tasks.TextTask; -import by.parfen01.quiser.tasks.math_tasks.MathTask; -import java.util.EnumSet; -import java.util.Map; -import java.util.Scanner; -import java.util.TreeMap; - -public class Main { - /** - * @return тесты в {@link Map}, где - * ключ - название теста {@link String} - * значение - сам тест {@link Quiz} - */ - static Map getQuizMap() { - Map result = new TreeMap<>(); - ExpressionTaskGenerator firstTaskGenerator = new ExpressionTaskGenerator( - 1, 100, EnumSet.allOf(MathTask.Operation.class)); - Quiz firstQuiz = new Quiz(firstTaskGenerator, 10); - result.put("Expression Test", firstQuiz); - EquationTaskGenerator secondTaskGenerator = new EquationTaskGenerator( - 1, 100, EnumSet.allOf(MathTask.Operation.class), new int[]{1, 2}); - Quiz secondQuiz = new Quiz(secondTaskGenerator, 10); - result.put("Equation Test", secondQuiz); - TextTask firstTextTask = new TextTask("what the highest mountain in the world?", "Everest"); - TextTask secondTextTask = new TextTask("what the fastest mammal in the world?", "Cheetah"); - TextTask thirdTextTask = new TextTask("Лектор расписался в журнале." + - " Там было 3 н-ки." + - " Сколько студентов было на паре?", "Один"); - TextTask foursTextTask = new TextTask("what the fastest mammal in the world?", "Cheetah"); - PoolTaskGenerator thirdTaskGenerator = new PoolTaskGenerator( - false, - secondTextTask, - thirdTextTask, - foursTextTask, - firstTextTask); - PoolTaskGenerator foursTaskGenerator = new PoolTaskGenerator( - true, - secondTextTask, - thirdTextTask, - foursTextTask, - firstTextTask); - Quiz thirdQuiz = new Quiz(thirdTaskGenerator, 2); - result.put("Text Test", thirdQuiz); - Quiz foursQuiz = new Quiz(new GroupTaskGenerator( - firstTaskGenerator, - secondTaskGenerator, - thirdTaskGenerator), - 3); - result.put("Mixed Test Without Repeat", foursQuiz); - Quiz fifthQuiz = new Quiz(foursTaskGenerator, 3); - result.put("Mixed Test With Repeat", fifthQuiz); - return result; - } - - public static void main() { - Map givenQuizes = getQuizMap(); - System.out.println("Enter test name..."); - Scanner scanner = new Scanner(System.in); - Quiz currentQuiz; - while(true) { - String nameOfQuiz = scanner.nextLine(); - if (!givenQuizes.containsKey(nameOfQuiz)) { - System.out.println("Test not found. Please try another name..."); - nameOfQuiz = scanner.nextLine(); - } else { - currentQuiz = givenQuizes.get(nameOfQuiz); - break; - } - } - while (!currentQuiz.isFinished()) { - System.out.println(currentQuiz.nextTask().getText()); - String answer = scanner.nextLine(); - if (currentQuiz.provideAnswer(answer) == Result.OK) { - System.out.println("Right"); - } - if (currentQuiz.provideAnswer(answer) == Result.WRONG) { - System.out.println("Wrong"); - } - if (currentQuiz.provideAnswer(answer) == Result.INCORRECT_INPUT) { - System.out.println("Incorrect input. Try once more"); - } - } - System.out.println("total correct answer number: " + currentQuiz.getCorrectAnswerNumber()); - System.out.println("total wrong answer number: " + currentQuiz.getWrongAnswerNumber()); - System.out.println("total incorrect input number: " + currentQuiz.getIncorrectInputNumber()); - System.out.println("your final mark is: " + currentQuiz.getMark()); - } -} \ No newline at end of file diff --git a/lab-01/lab-01/src/by/parfen01/quiser/Quiz.java b/lab-01/lab-01/src/by/parfen01/quiser/Quiz.java deleted file mode 100644 index fe7795e..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/Quiz.java +++ /dev/null @@ -1,95 +0,0 @@ -package by.parfen01.quiser; - -/** - * Class, который описывает один тест - */ -public class Quiz { - TaskGenerator generator; - int taskCount; - int correctAnswerNumber = 0; - int wrongAnswerNumber = 0; - int incorrectInputCount = 0; - Task currentTask; - boolean isLastInputIncorrect = false; - /** - * @param generator генератор заданий - * @param taskCount количество заданий в тесте - */ - public Quiz(TaskGenerator generator, int taskCount) { - this.generator = generator; - this.taskCount = taskCount; - currentTask = generator.generate(); - } - - /** - * @return задание, повторный вызов вернет слелующее - * @see Task - */ - public Task nextTask() { - if (!isLastInputIncorrect) { - currentTask = generator.generate(); - } - return currentTask; - } - - /** - * Предоставить ответ ученика. Если результат {@link Result#INCORRECT_INPUT}, то счетчик неправильных - * ответов не увеличивается, а {@link #nextTask()} в следующий раз вернет тот же самый объект {@link Task}. - */ - public Result provideAnswer(String answer) { - Result result = currentTask.validate(answer); - switch (result) { - case INCORRECT_INPUT -> { - isLastInputIncorrect = true; - } - case OK -> { - ++correctAnswerNumber; - --taskCount; - isLastInputIncorrect = false; - } - case WRONG -> { - ++wrongAnswerNumber; - --taskCount; - isLastInputIncorrect = false; - } - } - - return result; - } - - /** - * @return завершен ли тест - */ - public boolean isFinished() { - return taskCount == 0; - } - - /** - * @return количество правильных ответов - */ - public int getCorrectAnswerNumber() { - return this.correctAnswerNumber; - } - - /** - * @return количество неправильных ответов - */ - public int getWrongAnswerNumber() { - return this.wrongAnswerNumber; - } - - /** - * @return количество раз, когда был предоставлен неправильный ввод - */ - public int getIncorrectInputNumber() { - return this.incorrectInputCount; - } - - /** - * @return оценка, которая является отношением количества правильных ответов к количеству всех вопросов. - * Оценка выставляется только в конце! - */ - public double getMark() { - return (double)correctAnswerNumber / (correctAnswerNumber + wrongAnswerNumber); - } -} \ No newline at end of file diff --git a/lab-01/lab-01/src/by/parfen01/quiser/Result.java b/lab-01/lab-01/src/by/parfen01/quiser/Result.java deleted file mode 100644 index ce06467..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/Result.java +++ /dev/null @@ -1,10 +0,0 @@ -package by.parfen01.quiser; - -/** - * Enum, который описывает результат ответа на задание - */ -public enum Result { - OK, // Получен правильный ответ - WRONG, // Получен неправильный ответ - INCORRECT_INPUT // Некорректный ввод. Например, текст, когда ожидалось число -} \ No newline at end of file diff --git a/lab-01/lab-01/src/by/parfen01/quiser/Task.java b/lab-01/lab-01/src/by/parfen01/quiser/Task.java deleted file mode 100644 index 1f4da89..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/Task.java +++ /dev/null @@ -1,21 +0,0 @@ -package by.parfen01.quiser; - -/** - * Interface, который описывает одно задание - */ -public interface Task { - /* - @return текст задания - */ - - String getText(); - - /* - * Проверяет ответ на задание и возвращает результат - * - * @param answer ответ на задание - * @return результат ответа - * @see Result - */ - Result validate(String answer); -} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/TaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/TaskGenerator.java deleted file mode 100644 index 93c5264..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/TaskGenerator.java +++ /dev/null @@ -1,14 +0,0 @@ -package by.parfen01.quiser; - -/** - * Interface, который описывает один генератор заданий - */ -public interface TaskGenerator { - /* - * Возвращает задание. При этом новый объект может не создаваться, если класс задания иммутабельный - * - * @return задание - * @see Task - */ - Task generate(); -} \ No newline at end of file diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java deleted file mode 100644 index ec20bf0..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java +++ /dev/null @@ -1,69 +0,0 @@ -package by.parfen01.quiser.task_generators; - -import by.parfen01.quiser.Task; -import by.parfen01.quiser.TaskGenerator; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; - -public class GroupTaskGenerator implements TaskGenerator { - private final ArrayList generators = new ArrayList<>(); - /** - * Конструктор с переменным числом аргументов - * - * @param generators генераторы, которые в конструктор передаются через запятую - */ - public GroupTaskGenerator(TaskGenerator... generators) { - if (generators == null) { - throw new NullPointerException(); - } - for (TaskGenerator generator : generators) { - if (generator != null) { - this.generators.add(generator); - } - } - if (this.generators.isEmpty()) { - throw new IllegalArgumentException(); - } - } - - /** - * Конструктор, который принимает коллекцию генераторов - * - * @param generators генераторы, которые передаются в конструктор в Collection (например, {@link ArrayList}) - */ - GroupTaskGenerator(Collection generators) { - if (generators == null) { - throw new NullPointerException(); - } - for (TaskGenerator generator : generators) { - if (generator != null) { - this.generators.add(generator); - } - } - if (this.generators.isEmpty()) { - throw new IllegalArgumentException(); - } - } - - /** - * @return результат метода generate() случайного генератора из списка. - * Если этот генератор выбросил исключение в методе generate(), выбирается другой. - * Если все генераторы выбрасывают исключение, то и тут выбрасывается исключение. - */ - public Task generate() { - Collections.shuffle(generators); - for (int i = 0; i < generators.size(); ++i) { - try { - return generators.get(i).generate(); - } - catch (Exception e) { - if (i == generators.size()) { - throw e; - } - } - } - - throw new RuntimeException(); - } -} \ No newline at end of file diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java deleted file mode 100644 index 2c7d0c0..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java +++ /dev/null @@ -1,80 +0,0 @@ -package by.parfen01.quiser.task_generators; - -import by.parfen01.quiser.Task; -import by.parfen01.quiser.TaskGenerator; - -import java.util.*; - -public class PoolTaskGenerator implements TaskGenerator { - private final ArrayList tasks = new ArrayList<>(); - private LinkedHashSet usedTextsOfTasks; - private boolean isAllowedDuplicate; - private int numberOfUsedTasks = 0; - - /** - * Конструктор с переменным числом аргументов - * - * @param allowDuplicate разрешить повторения - * @param tasks задания, которые в конструктор передаются через запятую - */ - public PoolTaskGenerator(boolean allowDuplicate, Task... tasks) { - if (tasks == null) { - throw new NullPointerException(); - } - for (Task task : tasks) { - if (task != null) { - this.tasks.add(task); - } - } - if (this.tasks.isEmpty()) { - throw new IllegalArgumentException(); - } - isAllowedDuplicate = allowDuplicate; - } - - /** - * Конструктор, который принимает коллекцию заданий - * - * @param allowDuplicate разрешить повторения - * @param tasks задания, которые передаются в конструктор в Collection (например, {@link LinkedList}) - */ - public PoolTaskGenerator(boolean allowDuplicate, Collection tasks) { - if (tasks == null) { - return; - } - LinkedHashSet uniqueTexts = new LinkedHashSet<>(); - for (Task task : tasks) { - if (task != null && !uniqueTexts.contains(task.getText())) { - this.tasks.add(task); - uniqueTexts.add(task.getText()); - } - } - if (this.tasks.isEmpty()) { - throw new IllegalArgumentException(); - } - isAllowedDuplicate = allowDuplicate; - } - - /** - * @return случайная задача из списка - */ - @Override - public Task generate() { - if (isAllowedDuplicate) { - int numberOfTest = (int) (Math.random() * tasks.size()); - return tasks.get(numberOfTest); - } - if (numberOfUsedTasks == tasks.size()) { - throw new EmptyStackException(); - } - - while(true) { - int numberOfTest = (int) (Math.random() * tasks.size()); - if (!usedTextsOfTasks.contains(tasks.get(numberOfTest).getText())) { - ++numberOfUsedTasks; - usedTextsOfTasks.add(tasks.get(numberOfTest).getText()); - return tasks.get(numberOfTest); - } - } - } -} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java deleted file mode 100644 index 52ada0c..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java +++ /dev/null @@ -1,39 +0,0 @@ -package by.parfen01.quiser.task_generators.math_task_generators; - -import by.parfen01.quiser.tasks.math_tasks.MathTask; - -import java.security.InvalidParameterException; -import java.util.EnumSet; - -public abstract class AbstractMathTaskGenerator implements MathTaskGenerator { - private final int minNumber; - private final int maxNumber; - private final EnumSet operations; - - AbstractMathTaskGenerator(int minNumber, int maxNumber, EnumSet operations) { - this.minNumber = minNumber; - this.maxNumber = maxNumber; - this.operations = operations.clone(); - if (operations.equals(EnumSet.allOf(MathTask.Operation.class))) { - throw new InvalidParameterException(); - } - if (maxNumber < minNumber) { - throw new IllegalArgumentException(); - } - } - - @Override - public int getMaxNumber() { - return maxNumber; - } - - @Override - public int getMinNumber() { - return minNumber; - } - - @Override - public EnumSet getOperations() { - return operations; - } -} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java deleted file mode 100644 index c08ba06..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java +++ /dev/null @@ -1,29 +0,0 @@ -package by.parfen01.quiser.task_generators.math_task_generators; - -import by.parfen01.quiser.tasks.math_tasks.EquationTask; -import by.parfen01.quiser.tasks.math_tasks.MathTask; - -import java.util.EnumSet; - -public class EquationTaskGenerator extends AbstractMathTaskGenerator { - private final int[] possiblePositionsOfX; - /** - * @param minNumber минимальное число - * @param maxNumber максимальное число - */ - public EquationTaskGenerator(int minNumber, - int maxNumber, - EnumSet operations, - int[] possiblePositionsOfX) { - super(minNumber, maxNumber, operations); - this.possiblePositionsOfX = possiblePositionsOfX.clone(); - } - - /** - * return задание типа {@link EquationTask} - */ - public EquationTask generate() { - int xPos = possiblePositionsOfX[(int)(Math.random() * possiblePositionsOfX.length)]; - return new EquationTask(getRandomNumberForTask(), getRandomNumberForTask(), xPos, getRandomOperationFromSet()); - } -} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java deleted file mode 100644 index 11870d0..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java +++ /dev/null @@ -1,24 +0,0 @@ -package by.parfen01.quiser.task_generators.math_task_generators; - -import by.parfen01.quiser.tasks.math_tasks.ExpressionTask; -import by.parfen01.quiser.tasks.math_tasks.MathTask; -import java.util.EnumSet; - -public class ExpressionTaskGenerator extends AbstractMathTaskGenerator { - /** - * @param minNumber минимальное число - * @param maxNumber максимальное число - */ - public ExpressionTaskGenerator(int minNumber, - int maxNumber, - EnumSet operations) { - super(minNumber, maxNumber, operations); - } - - /** - * return задание типа {@link ExpressionTask} - */ - public ExpressionTask generate() { - return new ExpressionTask(getRandomNumberForTask(), getRandomNumberForTask(), getRandomOperationFromSet()); - } -} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java b/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java deleted file mode 100644 index 08231c5..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java +++ /dev/null @@ -1,30 +0,0 @@ -package by.parfen01.quiser.task_generators.math_task_generators; - -import by.parfen01.quiser.TaskGenerator; -import by.parfen01.quiser.tasks.math_tasks.MathTask; -import java.util.EnumSet; - -public interface MathTaskGenerator extends TaskGenerator { - int getMinNumber(); // получить минимальное число - int getMaxNumber(); // получить максимальное число - EnumSet getOperations(); - /** - * @return разница между максимальным и минимальным возможным числом - */ - default int getDiffNumber() { - return getMaxNumber() - getMinNumber(); - } - - default int getRandomNumberForTask() { - return (int)(Math.random() * getDiffNumber() + getMinNumber()); - } - - default MathTask.Operation getRandomOperationFromSet() { - while (true) { - MathTask.Operation operationToUse = MathTask.Operation.fromInt((int)(Math.random() * 4)); - if (getOperations().contains(operationToUse)) { - return operationToUse; - } - } - } -} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java deleted file mode 100644 index 048b11a..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/tasks/TextTask.java +++ /dev/null @@ -1,41 +0,0 @@ -package by.parfen01.quiser.tasks; - -import by.parfen01.quiser.Result; -import by.parfen01.quiser.Task; -import by.parfen01.quiser.task_generators.PoolTaskGenerator; - -import java.util.Objects; - - -/** - * Задание с заранее заготовленным текстом. - * Можно использовать {@link PoolTaskGenerator}, чтобы задавать задания такого типа. - */ -public class TextTask implements Task { - private final String text; - private final String answer; - /** - * @param text текст задания - * @param answer ответ на задание - */ - public TextTask(String text, String answer) { - this.text = text; - this.answer = answer; - } - - @Override - public String getText() { - return text; - } - - @Override - public Result validate(String answer) { - if (answer == null) { - throw new NullPointerException(); - } - if (Objects.equals(answer, this.answer)) { - return Result.OK; - } - return Result.WRONG; - } -} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java deleted file mode 100644 index 6add1c4..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java +++ /dev/null @@ -1,13 +0,0 @@ -package by.parfen01.quiser.tasks.math_tasks; - -public abstract class AbstractMathTask implements MathTask { - private int firstNumber; - private int secondNumber; - private Operation operation; - - AbstractMathTask(int firstNumber, int secondNumber, Operation operation) { - this.firstNumber = firstNumber; - this.secondNumber = secondNumber; - this.operation = operation; - } -} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java deleted file mode 100644 index 2676a7d..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java +++ /dev/null @@ -1,57 +0,0 @@ -package by.parfen01.quiser.tasks.math_tasks; - -import by.parfen01.quiser.Result; - -public class EquationTask extends AbstractMathTask { - int positionOfX; - String text; - String answer; - public EquationTask(int firstNumber, int secondNumber, int positionOfX, Operation operation) { - super(firstNumber, secondNumber, operation); - this.positionOfX = positionOfX; - if (positionOfX != 0 && positionOfX != 1) { - throw new IllegalArgumentException(); - } - if (positionOfX == 0) { - text = "X" + Operation.toChar(operation) + firstNumber + "=" + secondNumber; - if (firstNumber == 0 && operation == Operation.ADDITION) { - answer = "invalid operation"; - return; - } - answer = String.valueOf(calculate(secondNumber, firstNumber, Operation.getReverseOperation(operation))); - } else { - text = firstNumber + Operation.toChar(operation) + "X" + "=" + secondNumber; - if (firstNumber == 0 && secondNumber != 0 && operation == Operation.ADDITION) { - answer = "no right answer"; - return; - } - if (operation == Operation.ADDITION || operation == Operation.MULTIPLICATION) { - answer = String.valueOf(calculate(secondNumber, firstNumber, Operation.getReverseOperation(operation))); - } else { - answer = String.valueOf(calculate(firstNumber, secondNumber, operation)); - } - } - } - - - @Override - public String getText() { - return text; - } - - @Override - public Result validate(String answer) { - if (answer == null) { - throw new NullPointerException(); - } - if (!answer.matches("^-?[0-9]+$") && - !answer.equalsIgnoreCase("invalid operation") && - !answer.equalsIgnoreCase("no right answer")) { - return Result.INCORRECT_INPUT; - } - if (answer.equals("-0") && this.answer.equals("0")) { - return Result.OK; - } - return this.answer.equals(answer) ? Result.OK : Result.WRONG; - } -} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java deleted file mode 100644 index 10e5ea7..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java +++ /dev/null @@ -1,37 +0,0 @@ -package by.parfen01.quiser.tasks.math_tasks; - -import by.parfen01.quiser.Result; - -public class ExpressionTask extends AbstractMathTask { - private final String text; - private final String answer; - - public ExpressionTask(int firstNumber, int secondNumber, Operation operation) { - super(firstNumber, secondNumber, operation); - text = firstNumber + Operation.toChar(operation) + secondNumber + "=?"; - if (secondNumber == 0 && operation == Operation.DIVISION) { - answer = "invalid operation"; - return; - } - answer = String.valueOf(calculate(firstNumber, secondNumber, operation)); - } - - @Override - public String getText() { - return text; - } - - @Override - public Result validate(String answer) { - if (answer == null) { - throw new NullPointerException(); - } - if (!answer.matches("^-?[0-9]+$") && !answer.equalsIgnoreCase("invalid operation")) { - return Result.INCORRECT_INPUT; - } - if (answer.equals("-0") && this.answer.equals("0")) { - return Result.OK; - } - return this.answer.equals(answer) ? Result.OK : Result.WRONG; - } -} diff --git a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java b/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java deleted file mode 100644 index 4af7fc9..0000000 --- a/lab-01/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java +++ /dev/null @@ -1,90 +0,0 @@ -package by.parfen01.quiser.tasks.math_tasks; - -import by.parfen01.quiser.Task; - -import java.security.InvalidParameterException; - -public interface MathTask extends Task { - enum Operation { - ADDITION, // Операция сложения(+) - SUBTRACTION, // Операция вычитания(-) - MULTIPLICATION, // Операция умножения(*) - DIVISION; // Операция деления(/) - - public static Operation fromInt(int number) { - switch (number) { - case 0 -> { - return ADDITION; - } - case 1 -> { - return SUBTRACTION; - } - case 2 -> { - return MULTIPLICATION; - } - case 3 -> { - return DIVISION; - } - } - - throw new InvalidParameterException(); - } - - static char toChar(Operation operation) { - switch (operation) { - case ADDITION -> { - return '+'; - } - case SUBTRACTION -> { - return '-'; - } - case MULTIPLICATION -> { - return '*'; - } - case DIVISION -> { - return '/'; - } - } - - throw new InvalidParameterException(); - } - - static Operation getReverseOperation(Operation operation) { - switch (operation) { - case ADDITION -> { - return Operation.SUBTRACTION; - } - case SUBTRACTION -> { - return Operation.ADDITION; - } - case MULTIPLICATION -> { - return Operation.DIVISION; - } - case DIVISION -> { - return Operation.MULTIPLICATION; - } - } - - throw new InvalidParameterException(); - } - } - - default int calculate(int firstValue, int secondValue, Operation operation) { - switch (operation) { - case ADDITION -> { - return firstValue + secondValue; - } - case SUBTRACTION -> { - return firstValue - secondValue; - } - case MULTIPLICATION -> { - return firstValue * secondValue; - } - case DIVISION -> { - return firstValue / secondValue; - } - } - - throw new InvalidParameterException(); - } -} diff --git a/lab-01/out/production/lab-01/Main.class b/lab-01/out/production/lab-01/Main.class index e7eb9ed03c1afb4aef166834a059505228164f3a..f3ce7188bd0bdd89c8b5c78fdf9239f74a58adaf 100644 GIT binary patch delta 2371 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 delta 66 zcmX@Ybc<2o)W2Q(7#JAr7`WLPm>3zvCpHRCRGz5D#>l|PzzmdNU|?clWME}rV_*Q% Q>}1kT?Su0JdQWGXMYp diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/TaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/TaskGenerator.class deleted file mode 100644 index 497893a4c164f54bb791b0439bfa4806d2667fd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmX^0Z`VEs1_nC@PId++Mh1nXO8tVwqO{aJ14I47(#+!2BK?rW;%xWSywsw^lKdie z1{OvJfvm)`ME#t^ymWp4q^#8B5=I7&bcl*nMh0mOO&=V_STizk1?QI*C8xS&<^Yun jp_r`)GM0^zfsuh3=p+UPMxa%!3~V4413QppV&DJ(600rW diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/GroupTaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/GroupTaskGenerator.class index f837ff7d3579effe711ce1a8e8e08cdb73725fdb..921165e4a32f3c27e9b05937bf57877c928a6664 100644 GIT binary patch delta 319 zcmZ9I%Ps?96vuyOI&HO?q&H35G$PfZEn1PfWQ@+D2o~58aUIF*C~0{S-_FJZSc#p5 z#KOixtUQM&5TB$hY|c6Ppa13LyeDr{@z<}%C&1(6KK?0Ex(?^Wen=aZ$buRU)zkKB z&;D)W OaHxA6q0SM0B=!xEGCe*3 delta 254 zcmbO)ctL>c)W2Q(7#JAr7~(c^ePCo%n4G{YzFC-whmp~8vI4WNpnGawYEfcIev!4E zH6w$XM)c%^%o39;m^~Pkz^q%$zD&vxK_`}6MytsiSo8!?HQ8!_1SiX}MowPOI!jZ4 zfrWvKfuBK;L6|{^L7G8?L7zdC!Gu8!=m-%87Y0cNKL#m=Fb0{)MQlekm7%ItfT~r2 zs?`}x88jFy88jK37_=E&8FU!@8FU%K8T2P7u%DAPXJBWr0GeV2RBOYa#$d}}2sG6g WC}zpvJlUJWnv;Jh0@m=Or*>xw^cGJI8nH=MYMSpg-TE95nSfx}__r=?AQXX&u2m=_4@OTsTg zAK#c?3X#(%mG6D=m9$o@EEMu(754=~i^*y-noH)h(IHu6yil21E*1-=ik4}n>Mmke56!*U@O$uq%o0{rPO?B>IiQOYeNlgbEntX)h1s6)qprKBW z*g8E4#!PH0P~kx3Iuf>ZgL*I53!LW&<6Pziu6r0!jNmvf5gF$iCP?Bk7dc6qQwB}h z)5|GVxjezF;f4jgXb_e&RbdW#|KbW$_>yH)f`goq+>HAx9BVV(pAh3`|AK4p37Q}u zh}B4#Haf{oF?p-1`z#B^nI#KF8Idui`!lZZyzJO^S!qzZ$7I=ig#{kaHo;TFDh)fq KIX<+9R@;AolZcQ2 delta 638 zcmZ9Jy-yTT6vcmUhhbnK3mA4+P~+kf60(b^s~9Xyz-Y+2sEy%sJNv6P({#G9 zHNx cH5qjcgc0n9f`gfQIBkhPJXOnz(im_50gI7QK>z>% diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.class deleted file mode 100644 index 909c44e0c0361b27202578c067b440218c608fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1767 zcmbtVTTc^F5dKatEG=6uRc?X^$fd2of_E(E@1J)`Zox-Bft;r8~sf-r@} zoswm1Mec0AJFQ&E*^b5Y&N3aYlEd?=Jwv3Zn=jmAPFM^qBLQ1gv`Mr`k-zs(qUb-wZLJ#4$V&A}$@Hp<0bHX@n#5>jgJCS;qj-6KYH-_5*CQ!?hg1yXI{Atn zmm5T|v)0$IQ9Ain!6?JH7pE=quBAJBTE^VvhQ9uiTf8V7VJ*JTi?R$eiV<1!1jF!2 zxif|#3fx$*3T{!DPL1)nG`_)*X^??)i(So1ZIQEj!Q_r>QH7SzrhIm(0oFO$PS2$o zdJ>t;*(=k@HHOgB(mElwE$OE4U(zbi8Kj9XmGazJ6=lfT)G6cHMr6(nyx}V+ zmR)AnQJyqkjBJkIG38;UUMF3E z2X$VyNIIfbYVM~Fz*2qtP*VN-h@~dKp?x1+lkqFx(fBX15ccG%zdQEtX*lRW%Fz9CH0cMK8w#%R|{QX75S(M2skOiWTV*fezF9=b6@ zRw*A7H*t%0gzj->o+McZJW28n;x@@D@t0OT#6O5TB*zi>Bd<}=%$PzjWaCG8mu&Bm zE%V~jXqCR<)K|nlkr436HhIcEkBonLxI%{EL0xC%wDVwH=Z6%fpV?aEuFt2CN9#EI Y^wZ=%>sddd9~uxPrdRM73-i5y0RXVQNB{r; diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.class deleted file mode 100644 index 58345fe118ae79fcc4b5f485bfd8dfd9d6aa6e9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1710 zcmbtVTTc^F5dKbS*>+vZtst~`K@r;uEFhxNT0sQU1gr`n8WPEAS;|7Y3%gqbZ@&5F zZ_z}-XhMAUM;YgAFBU8j@u6qW%$fP-J2P{pKYo5a0+7NZ86GrA@G9`3nc;bMU)|x> zhGvY8skkq(#1;Yrn=p*g7=x|3q) ziKf#FTl@`IOO9Sp=ZsQuNpljh6&Zd6B*+RbKwf@x?Bp=hk^Q{YBk&1AQ< zoRbJ3h*k-03fdtvES{J3+-`|Gx@nwX9NIB$ThA7>XQr)-b33!~Qbs3261o(0<03=Q zy@*Rn+?lRvabw*qGBibFk0tanjGjWPE`_#QPeG<@MHKYm5<_=hb6&WJPfNwDX3d+H zVCllAh2a$iSJBVVTQkh;h!PRqdCL@;WtgJmorOfTY6CThgp3|s7hN&HkfOq+&kH2V z8^oZ3n}{;_D~&{zoj4=8`V1u)!i~FVH62@F@Xng+1l_uz8(KMU%be=S(6M0VcwvQG zx{xbMud}J!44Koe_Sdejr&jBD;ut9EMmanKqh<~i`Ce6)&1#t_bZ3M2K(#+kc7LZz zc=1p3J#TQQWKo8e8|L*t;42l`qesLLX8d>s^ixlJXoON{i5Wz@CffTD zBW;|dxA2k#gyNCD;X|-^ulE4bclbY}<)dqTi`F1{fe<8`Ei_#)MAAgr55pKCi4dS- zl(5BajCLYw2;;cz`i9)-Uh)Eziq$yo(AgwuJh)3bdU&)7REWt0lXc68yM;Mg`pvF=x5sq_`B jeS~)7H&nB$^t&)+!oCWO2UBjq1d?t@h6i|vnd#nNr*+Mm diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.class deleted file mode 100644 index 7bcf0676164d9351fc11fb2da7892d81c81e1a30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1488 zcmbtUU2hUm5IvW#rRyr#A{N1q)~bMQxAnmXsl=u!hJ@N!8WNwH3%#YQu#5X)+JB`l zHqpc%;EyuSWfuY!QpId`_s;ChIp@yI-Jid{{QywLriu{43L+Y!h%vlvp6fksp9phf zQ~&50j<9u?J0FhP!W1@lE!)w%+&w+I?A&fTuFYHS9(_Edgx7<3hS-*28g7|kF<-6L z-t$jf_gtf+@0wn>F5FU~p&-uiYzp-Vp`-7f^=#odhGj|;6)LVN&@^1f4Tk+G2v>?9 zM;(!#ZVUH-o5xo7jn{1oyJFdrmm!=lR3&>-!%fUHWQKwJJy|CbSg|d+J%$(gLT!q& zvAqpSw=#q%sZfxTt+~bUQdVz9oI*p2y{%yp8HRY!Ou_K{FSU(VsKgN2v5qM}Q8P^8 z*XEEnJLH+KSuNgaaNCe};EcGZhC|aeP5-PNA|Z2K!}J9(u&T8A*}zt9Fr~xZ?;%!5WRpY;&hTXITB0T&mM>`msba8=~J75C)U~C$jF4 zb%F?8K)jgEtzCe9=|^Pg>BlGN)FhE3yXeQ^F7A;<8Mu!Jge6x?w36s?EaM?Dtk7Bu zzAfVsc^;D|geT;qV?$5LT_zneKlL5TyW&^O1$W{C3!nS(Qb(*GlkRKqF;l*VC4H=NOCmTKnR6CMG;Twty1zT*0J#_^BZt-olXD% diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.class deleted file mode 100644 index 3f66a48f980946c22c29a08f451e1fbc9546bdf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1428 zcmbW1-BQy)6vzKtN&_W)+e!fu6}1H<;0GdQlo=4GW04t)UU1!Bt%#c^~%*U+h>3*7=;+wz?>YSOM43M>$FrM>CY1In_Z^y=tS zlujC1w#wxY6I<+ISbXA0;$rh2f!-4u0&OM7 z_N8S9j1UndY^}I$mi%nyjfPtSJ^wNp3N)kzMo$Uk*y*(wtcorDhHDC}o#x}hMYHiZ zD-d0BHVN*|TecY<-MTE+xYL(+O0xD^x|UiWY)1Vpi(x)L%i{T~lP)A#IWL2%3LRK+ zT$KWWR8!DArxjKKk40dfnK&hPK7agAEzx3^b68mG&MS|>&Rv|jSSpFh6Wuta%78tWv)RT=HR*Y#r(s@T@;uQ9v^P`2-izQS1a7n4Vo{0^132>@ z31(J1r5Q>i80Qz;mE#20bKDV}yT-pk2yoN{Ha`cNlN^;E(2YAB^-vR2Ft`$!Zc?5g z8psm+h!fExuv-mLyQRJ3u>K>kL=!fHyF@6Lwg`)G9wF=!`m1~UNaRTyqWCMWenjiU zmrs9wQKJRQ#Xjl-19UH?ZWs(Ao*^W6(P#!3*z`($cff$?3=9l*3~C#>zA*}M`=u6__@?G2r4|*lGbk`J*iHPeGBH;`M#Vif zFSRJKB)^D}fyXls$ac<2EG|w3s#2aTz~rjM$iN9#!lKB)!NA18$RNVN%pkff$?3=9l*3`!fhzA*~(c;@A$7CGl678j=$vok0#GMG*LuQTx-*W}qu zJaR0G3>*wh42%pS49q~9n}G+Ym5G5LLQlTPPsJvFJ<{sZ+!(S*wrpC54v>u2lUD1TK)oG`=IVKY4OFCwNAdhXP<9>`!e&F|IcRk zFMr?r7Qiq*+H`-;+!|qBMJodQ0Sh{syCzJN580ZXZ7M?8&(GV!P3^35JGZDO@frE>*+zcsIrOs7T@ve_*@eJgnjfj`AD!^d2|*&@bb- ziUADr`>fByFeC~XX6WL#q{hUA*`2MMRn>RG4^@e=J3mKBQGllJUK?&y&F!8BeJ=i!A>` zn)1ys*b+%`<7pM=Fvo`-9ie#!mUJP5iz+T5OCg!l!hBXm4%s_3#|qOtQ~64DGQV;; zU#`fgG7NC$OdgD!$`?f|OJxS%c&SvaRLi;5$$WLGv`}eq;;I`j;}sdNin3qhUik<0 z4F<#Ic21i=1toGF*rKy zAWmGS^ErU66LygIH~yp2UOQ{((p_kQ;61be+Xx2Mq3O~V!e7E|XpwD1H_7D>-mJU3 zEq7eF4I>y3mk;is_b!f+>oy8TfS^T5jE_HJ4AJ#g!P@-=JpZxBw`;^B?2(6lqHp;> zUd=E9L0#I-v}u*KK<6y>(W%m+?xCL-el*a!@1;H0&`YZ_j3%Tg<^-BCLp9Dr#{~rN zBHHjCY9V}rFg`^)K0^oYAcCI}#jof_o@kHMJB8=5NEY=BOO%RPs6fbOArB$Dg{}~X zgck_6!u1d7aL7;?V=@Ur)Zb({8=Aaye;F(FY1Gg|KoB~NuMpfIV1p>jX*m;?ih4%J zLlq1~l+r?2xCP`bOl`!p=^f18 zL?b1P*0l4MK~FAh2uI8^U1Z*da|_Q1MRrS36fVNORNrB$_b9dU7uw?@|M*7+vh aB3~;BX~f%jcT}e+g{J4i`?!t|q5lhG80<&@ delta 1253 zcmZWo+jA3T6#spjY<9C<+OU+8B^T1t(snm7p;p^+>m>n9o6;&pC>3ec1E;&e`w$&h`6i&);pz z@Bcpd3BWPjSW~`ZI~3^HDH+O47oy$tebCX=1XPMu;Hbp8|u`(>C6JBy{7wOE{w*-QDdRV~^j zKV&3SynrqSpH-?{%a;}GLQ2I!^f|u@U;6r0yo8sXIZv*xf!KI5LkvSbxl2~fN-kQZ zLUJpe^mbG4c9V?53@s%)RxTD6sFjAb)k)TC8LXCA*wYTa~;Y zIZR48rD6)x47&5RPj~+C_61&J5E3a)G^64SUUy>R{^&Udmf|kwRm}1G!qfy;FQ~YP z=^rfd3hM}r*><&3En7>I`Ral_Uup5-s)8~q5~{pa%g!Nq=)7p;!Too0jx$? zBj7TQEGOy2`Uf&1tPtw7Vg>o{-+ilG_z5nnTmaERYcZs0|_Nv6A) zH@KtA(C{93=G_*)^?!y#oWUjh9!>l_atA?TtZ$>#3?mfQz0ZTJxdm7x$Dxr_Xak$D z11j1`M$v)}1Tcu5$k6|B+KUP7rb73ih9GXzh(5<&d_nKyHX>NZK0GFmw~48r+EAxH z;2q49%2A$ZnTy^fB)F)FkjF&@^umh;!a+#?QEX9y%ovj>DB`X0meywSF5*(7(@4_E z*+k{?ewI((Fc%B_2M?)(KT&;t@OnRnhZXU=nG<{Hj$V`VF{2z3IP}E4JyR z?64GUUPj_R0d0o%7zvWi_m}OuTyXj?j@ozfQoOzXNJ=EIWoJNj!+9pb-f!orB+rb8 zjoqQuJI<@mXQjuomMip?wkk-n}8XBG+#U zvC*oYy}eawG(u%P5(ZCL>5R}iv2z64tX0*YQVmu6wx#Iq2s!&9nzMgeE@eIu#npF~ ziju2o*tV#9!_h%lPy}=rp6P} F{{S=jTMYmJ delta 453 zcmX9(%PvDv6kWU5?YX(CFKMD$^{hvwnh-?l6(S<>u9A3PR9os+dK)7mk%*zlnM!7pRmgTZzRmU3E1q=s#*pScaOJIwj5>ej(!7*lVj7a2qP^-CDoQvGi(n2SZd7&I7s7<3r?84MVL7)%&K87vqgCwDOWXmT(xGcYk| fGH@_x1Fez*^MDKi4xorIgN}nFP)?XZmyHtu>PH{| delta 85 zcmX@g@tK|L)W2Q(7#JAr7_>KX-DaAs$SghCgSlALlR<;Qn?Z-ckHLT;kimo@gu#L# hV)6xMA9*$gCLrWs&;;rd0<(b(0S=&uFoTwZBmjA24)Op1 diff --git a/lab-01/src/Main.java b/lab-01/src/Main.java index 54e07b4..a84048c 100644 --- a/lab-01/src/Main.java +++ b/lab-01/src/Main.java @@ -2,50 +2,54 @@ import by.parfen01.quiser.Result; import by.parfen01.quiser.task_generators.GroupTaskGenerator; import by.parfen01.quiser.task_generators.PoolTaskGenerator; -import by.parfen01.quiser.task_generators.math_task_generators.EquationTaskGenerator; -import by.parfen01.quiser.task_generators.math_task_generators.ExpressionTaskGenerator; import by.parfen01.quiser.tasks.TextTask; +import by.parfen01.quiser.tasks.math_tasks.EquationTask; +import by.parfen01.quiser.tasks.math_tasks.ExpressionTask; import by.parfen01.quiser.tasks.math_tasks.MathTask; import java.util.EnumSet; import java.util.Map; import java.util.Scanner; import java.util.TreeMap; +import java.util.Formatter; public class Main { public static void main(String[] argv) { - Map givenQuizes = getQuizMap(); + Map givenQuizzes = getQuizMap(); System.out.println("Enter test name..."); Scanner scanner = new Scanner(System.in); Quiz currentQuiz; String nameOfQuiz = scanner.nextLine(); while(true) { - if (!givenQuizes.containsKey(nameOfQuiz)) { + if (!givenQuizzes.containsKey(nameOfQuiz)) { System.out.println("Test not found. Please try another name..."); nameOfQuiz = scanner.nextLine(); } else { - currentQuiz = givenQuizes.get(nameOfQuiz); + currentQuiz = givenQuizzes.get(nameOfQuiz); break; } } while (!currentQuiz.isFinished()) { System.out.println(currentQuiz.nextTask().getText()); String answer = scanner.nextLine(); - if (currentQuiz.provideAnswer(answer) == Result.OK) { + Result result = currentQuiz.provideAnswer(answer); + if (result == Result.OK) { System.out.println("Right"); continue; } - if (currentQuiz.provideAnswer(answer) == Result.WRONG) { + if (result == Result.WRONG) { System.out.println("Wrong"); continue; } - if (currentQuiz.provideAnswer(answer) == Result.INCORRECT_INPUT) { + if (result == Result.INCORRECT_INPUT) { System.out.println("Incorrect input. Try once more"); } } + Formatter formatter = new Formatter(); + formatter.format("%.1f", currentQuiz.getMark()); System.out.println("total correct answer number: " + currentQuiz.getCorrectAnswerNumber()); System.out.println("total wrong answer number: " + currentQuiz.getWrongAnswerNumber()); System.out.println("total incorrect input number: " + currentQuiz.getIncorrectInputNumber()); - System.out.println("your final mark is: " + currentQuiz.getMark()); + System.out.println("your final mark is: " + formatter); } /** @@ -55,11 +59,11 @@ public static void main(String[] argv) { */ static Map getQuizMap() { Map result = new TreeMap<>(); - ExpressionTaskGenerator firstTaskGenerator = new ExpressionTaskGenerator( + ExpressionTask.Generator firstTaskGenerator = new ExpressionTask.Generator( 1, 100, EnumSet.allOf(MathTask.Operation.class)); Quiz firstQuiz = new Quiz(firstTaskGenerator, 10); result.put("Expression Test", firstQuiz); - EquationTaskGenerator secondTaskGenerator = new EquationTaskGenerator( + EquationTask.Generator secondTaskGenerator = new EquationTask.Generator( 1, 100, EnumSet.allOf(MathTask.Operation.class), new int[]{0, 1}); Quiz secondQuiz = new Quiz(secondTaskGenerator, 10); result.put("Equation Test", secondQuiz); @@ -81,16 +85,16 @@ static Map getQuizMap() { thirdTextTask, foursTextTask, firstTextTask); - Quiz thirdQuiz = new Quiz(thirdTaskGenerator, 2); + Quiz thirdQuiz = new Quiz(thirdTaskGenerator, 3); result.put("Text Test", thirdQuiz); Quiz foursQuiz = new Quiz(new GroupTaskGenerator( firstTaskGenerator, secondTaskGenerator, - thirdTaskGenerator), - 3); - result.put("Mixed Test Without Repeat", foursQuiz); + thirdTaskGenerator.clone()), + 10); + result.put("Mixed Test", foursQuiz); Quiz fifthQuiz = new Quiz(foursTaskGenerator, 3); - result.put("Mixed Test With Repeat", fifthQuiz); + result.put("Text Test With Repeat", fifthQuiz); return result; } } \ No newline at end of file diff --git a/lab-01/src/by/parfen01/quiser/Quiz.java b/lab-01/src/by/parfen01/quiser/Quiz.java index 92e5173..1865f22 100644 --- a/lab-01/src/by/parfen01/quiser/Quiz.java +++ b/lab-01/src/by/parfen01/quiser/Quiz.java @@ -4,21 +4,22 @@ * Class, который описывает один тест */ public class Quiz { - TaskGenerator generator; + Task.Generator generator; int taskCount; int correctAnswerNumber = 0; int wrongAnswerNumber = 0; int incorrectInputCount = 0; Task currentTask; + Task nextTask; boolean isLastInputIncorrect = false; /** * @param generator генератор заданий * @param taskCount количество заданий в тесте */ - public Quiz(TaskGenerator generator, int taskCount) { + public Quiz(Task.Generator generator, int taskCount) { this.generator = generator; this.taskCount = taskCount; - currentTask = generator.generate(); + nextTask = generator.generate(); } /** @@ -26,10 +27,15 @@ public Quiz(TaskGenerator generator, int taskCount) { * @see Task */ public Task nextTask() { - if (!isLastInputIncorrect) { - currentTask = generator.generate(); + if (isLastInputIncorrect) { + return currentTask; } - return currentTask; + Task result = nextTask; + currentTask = nextTask; + if (taskCount > 1) { + nextTask = generator.generate(); + } + return result; } /** @@ -41,19 +47,17 @@ public Result provideAnswer(String answer) { switch (result) { case INCORRECT_INPUT -> { isLastInputIncorrect = true; - break; + ++incorrectInputCount; } case OK -> { ++correctAnswerNumber; --taskCount; isLastInputIncorrect = false; - break; } case WRONG -> { ++wrongAnswerNumber; --taskCount; isLastInputIncorrect = false; - break; } } @@ -93,6 +97,6 @@ public int getIncorrectInputNumber() { * Оценка выставляется только в конце! */ public double getMark() { - return (double)correctAnswerNumber / (correctAnswerNumber + wrongAnswerNumber); + return (double)correctAnswerNumber / (correctAnswerNumber + wrongAnswerNumber) * 10; } } \ No newline at end of file diff --git a/lab-01/src/by/parfen01/quiser/Task.java b/lab-01/src/by/parfen01/quiser/Task.java index 1f4da89..afb214d 100644 --- a/lab-01/src/by/parfen01/quiser/Task.java +++ b/lab-01/src/by/parfen01/quiser/Task.java @@ -18,4 +18,17 @@ public interface Task { * @see Result */ Result validate(String answer); + + /** + * Interface, который описывает один генератор заданий + */ + interface Generator { + /* + * Возвращает задание. При этом новый объект может не создаваться, если класс задания иммутабельный + * + * @return задание + * @see Task + */ + Task generate(); + } } diff --git a/lab-01/src/by/parfen01/quiser/TaskGenerator.java b/lab-01/src/by/parfen01/quiser/TaskGenerator.java deleted file mode 100644 index 93c5264..0000000 --- a/lab-01/src/by/parfen01/quiser/TaskGenerator.java +++ /dev/null @@ -1,14 +0,0 @@ -package by.parfen01.quiser; - -/** - * Interface, который описывает один генератор заданий - */ -public interface TaskGenerator { - /* - * Возвращает задание. При этом новый объект может не создаваться, если класс задания иммутабельный - * - * @return задание - * @see Task - */ - Task generate(); -} \ No newline at end of file diff --git a/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java index ec20bf0..a12b495 100644 --- a/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java +++ b/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java @@ -1,23 +1,22 @@ package by.parfen01.quiser.task_generators; import by.parfen01.quiser.Task; -import by.parfen01.quiser.TaskGenerator; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -public class GroupTaskGenerator implements TaskGenerator { - private final ArrayList generators = new ArrayList<>(); +public class GroupTaskGenerator implements Task.Generator { + private final ArrayList generators = new ArrayList<>(); /** * Конструктор с переменным числом аргументов * * @param generators генераторы, которые в конструктор передаются через запятую */ - public GroupTaskGenerator(TaskGenerator... generators) { + public GroupTaskGenerator(Task.Generator... generators) { if (generators == null) { throw new NullPointerException(); } - for (TaskGenerator generator : generators) { + for (Task.Generator generator : generators) { if (generator != null) { this.generators.add(generator); } @@ -32,11 +31,11 @@ public GroupTaskGenerator(TaskGenerator... generators) { * * @param generators генераторы, которые передаются в конструктор в Collection (например, {@link ArrayList}) */ - GroupTaskGenerator(Collection generators) { + GroupTaskGenerator(Collection generators) { if (generators == null) { throw new NullPointerException(); } - for (TaskGenerator generator : generators) { + for (Task.Generator generator : generators) { if (generator != null) { this.generators.add(generator); } diff --git a/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java index c59f109..6cfd55f 100644 --- a/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java +++ b/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java @@ -1,11 +1,14 @@ package by.parfen01.quiser.task_generators; import by.parfen01.quiser.Task; -import by.parfen01.quiser.TaskGenerator; - import java.util.*; -public class PoolTaskGenerator implements TaskGenerator { +/** + * Генератор заданий инициализирующийся перечнем доступных заданий. + * Одноразовый. Если хотите использовать один и тот же генератор в разных + * квизах передавайте его копию + */ +public class PoolTaskGenerator implements Task.Generator { private final ArrayList tasks = new ArrayList<>(); private final LinkedHashSet usedTextsOfTasks = new LinkedHashSet<>(); private boolean isAllowedDuplicate; @@ -79,4 +82,9 @@ public Task generate() { } } } + + @Override + public PoolTaskGenerator clone() { + return new PoolTaskGenerator(isAllowedDuplicate, tasks); + } } diff --git a/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java deleted file mode 100644 index 17738c2..0000000 --- a/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/AbstractMathTaskGenerator.java +++ /dev/null @@ -1,39 +0,0 @@ -package by.parfen01.quiser.task_generators.math_task_generators; - -import by.parfen01.quiser.tasks.math_tasks.MathTask; - -import java.security.InvalidParameterException; -import java.util.EnumSet; - -public abstract class AbstractMathTaskGenerator implements MathTaskGenerator { - private final int minNumber; - private final int maxNumber; - private final EnumSet operations; - - AbstractMathTaskGenerator(int minNumber, int maxNumber, EnumSet operations) { - this.minNumber = minNumber; - this.maxNumber = maxNumber; - this.operations = operations.clone(); - if (operations.equals(EnumSet.noneOf(MathTask.Operation.class))) { - throw new InvalidParameterException(); - } - if (maxNumber < minNumber) { - throw new IllegalArgumentException(); - } - } - - @Override - public int getMaxNumber() { - return maxNumber; - } - - @Override - public int getMinNumber() { - return minNumber; - } - - @Override - public EnumSet getOperations() { - return operations; - } -} diff --git a/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java deleted file mode 100644 index c08ba06..0000000 --- a/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/EquationTaskGenerator.java +++ /dev/null @@ -1,29 +0,0 @@ -package by.parfen01.quiser.task_generators.math_task_generators; - -import by.parfen01.quiser.tasks.math_tasks.EquationTask; -import by.parfen01.quiser.tasks.math_tasks.MathTask; - -import java.util.EnumSet; - -public class EquationTaskGenerator extends AbstractMathTaskGenerator { - private final int[] possiblePositionsOfX; - /** - * @param minNumber минимальное число - * @param maxNumber максимальное число - */ - public EquationTaskGenerator(int minNumber, - int maxNumber, - EnumSet operations, - int[] possiblePositionsOfX) { - super(minNumber, maxNumber, operations); - this.possiblePositionsOfX = possiblePositionsOfX.clone(); - } - - /** - * return задание типа {@link EquationTask} - */ - public EquationTask generate() { - int xPos = possiblePositionsOfX[(int)(Math.random() * possiblePositionsOfX.length)]; - return new EquationTask(getRandomNumberForTask(), getRandomNumberForTask(), xPos, getRandomOperationFromSet()); - } -} diff --git a/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java deleted file mode 100644 index 11870d0..0000000 --- a/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/ExpressionTaskGenerator.java +++ /dev/null @@ -1,24 +0,0 @@ -package by.parfen01.quiser.task_generators.math_task_generators; - -import by.parfen01.quiser.tasks.math_tasks.ExpressionTask; -import by.parfen01.quiser.tasks.math_tasks.MathTask; -import java.util.EnumSet; - -public class ExpressionTaskGenerator extends AbstractMathTaskGenerator { - /** - * @param minNumber минимальное число - * @param maxNumber максимальное число - */ - public ExpressionTaskGenerator(int minNumber, - int maxNumber, - EnumSet operations) { - super(minNumber, maxNumber, operations); - } - - /** - * return задание типа {@link ExpressionTask} - */ - public ExpressionTask generate() { - return new ExpressionTask(getRandomNumberForTask(), getRandomNumberForTask(), getRandomOperationFromSet()); - } -} diff --git a/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java deleted file mode 100644 index 08231c5..0000000 --- a/lab-01/src/by/parfen01/quiser/task_generators/math_task_generators/MathTaskGenerator.java +++ /dev/null @@ -1,30 +0,0 @@ -package by.parfen01.quiser.task_generators.math_task_generators; - -import by.parfen01.quiser.TaskGenerator; -import by.parfen01.quiser.tasks.math_tasks.MathTask; -import java.util.EnumSet; - -public interface MathTaskGenerator extends TaskGenerator { - int getMinNumber(); // получить минимальное число - int getMaxNumber(); // получить максимальное число - EnumSet getOperations(); - /** - * @return разница между максимальным и минимальным возможным числом - */ - default int getDiffNumber() { - return getMaxNumber() - getMinNumber(); - } - - default int getRandomNumberForTask() { - return (int)(Math.random() * getDiffNumber() + getMinNumber()); - } - - default MathTask.Operation getRandomOperationFromSet() { - while (true) { - MathTask.Operation operationToUse = MathTask.Operation.fromInt((int)(Math.random() * 4)); - if (getOperations().contains(operationToUse)) { - return operationToUse; - } - } - } -} diff --git a/lab-01/src/by/parfen01/quiser/tasks/TextTask.java b/lab-01/src/by/parfen01/quiser/tasks/TextTask.java index fac084f..d24375a 100644 --- a/lab-01/src/by/parfen01/quiser/tasks/TextTask.java +++ b/lab-01/src/by/parfen01/quiser/tasks/TextTask.java @@ -4,8 +4,6 @@ import by.parfen01.quiser.Task; import by.parfen01.quiser.task_generators.PoolTaskGenerator; -import java.util.Objects; - /** * Задание с заранее заготовленным текстом. @@ -33,7 +31,7 @@ public Result validate(String answer) { if (answer == null) { throw new NullPointerException(); } - if (answer.equals(this.answer)) { + if (answer.equalsIgnoreCase(this.answer)) { return Result.OK; } return Result.WRONG; diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java index 6add1c4..dc6a299 100644 --- a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java @@ -1,13 +1,49 @@ package by.parfen01.quiser.tasks.math_tasks; +import java.security.InvalidParameterException; +import java.util.EnumSet; + public abstract class AbstractMathTask implements MathTask { - private int firstNumber; - private int secondNumber; - private Operation operation; + private final int firstNumber; + private final int secondNumber; + private final Operation operation; AbstractMathTask(int firstNumber, int secondNumber, Operation operation) { this.firstNumber = firstNumber; this.secondNumber = secondNumber; this.operation = operation; } + + public abstract static class Generator implements MathTask.Generator { + private final int minNumber; + private final int maxNumber; + private final EnumSet operations; + + protected Generator(int minNumber, int maxNumber, EnumSet operations) { + this.minNumber = minNumber; + this.maxNumber = maxNumber; + this.operations = operations.clone(); + if (operations.equals(EnumSet.noneOf(MathTask.Operation.class))) { + throw new InvalidParameterException(); + } + if (maxNumber < minNumber) { + throw new IllegalArgumentException(); + } + } + + @Override + public int getMaxNumber() { + return maxNumber; + } + + @Override + public int getMinNumber() { + return minNumber; + } + + @Override + public EnumSet getOperations() { + return operations; + } + } } diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java index be9bfd9..1d01e84 100644 --- a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java @@ -2,6 +2,8 @@ import by.parfen01.quiser.Result; +import java.util.EnumSet; + public class EquationTask extends AbstractMathTask { int positionOfX; String text; @@ -13,15 +15,20 @@ public EquationTask(int firstNumber, int secondNumber, int positionOfX, Operatio throw new IllegalArgumentException(); } if (positionOfX == 0) { - text = "X" + Operation.toChar(operation) + String.valueOf(firstNumber) + "=" + String.valueOf(secondNumber); - if (firstNumber == 0 && operation == Operation.ADDITION) { + text = "X" + Operation.toChar(operation) + firstNumber + "=" + secondNumber; + if (firstNumber == 0 && operation == Operation.DIVISION) { answer = "invalid operation"; return; } + if (firstNumber == 0 && secondNumber != 0 && operation == Operation.MULTIPLICATION) { + answer = "no right answer"; + return; + } answer = String.valueOf(calculate(secondNumber, firstNumber, Operation.getReverseOperation(operation))); } else { - text = String.valueOf(firstNumber) + Operation.toChar(operation) + "X" + "=" + String.valueOf(secondNumber); - if (firstNumber == 0 && secondNumber != 0 && operation == Operation.ADDITION) { + text = String.valueOf(firstNumber) + Operation.toChar(operation) + "X" + "=" + secondNumber; + if (firstNumber == 0 && secondNumber != 0 && + (operation == Operation.MULTIPLICATION || operation == Operation.DIVISION)) { answer = "no right answer"; return; } @@ -33,7 +40,6 @@ public EquationTask(int firstNumber, int secondNumber, int positionOfX, Operatio } } - @Override public String getText() { return text; @@ -54,4 +60,27 @@ public Result validate(String answer) { } return this.answer.equals(answer) ? Result.OK : Result.WRONG; } + + public static class Generator extends AbstractMathTask.Generator { + private final int[] possiblePositionsOfX; + /** + * @param minNumber минимальное число + * @param maxNumber максимальное число + */ + public Generator(int minNumber, + int maxNumber, + EnumSet operations, + int[] possiblePositionsOfX) { + super(minNumber, maxNumber, operations); + this.possiblePositionsOfX = possiblePositionsOfX.clone(); + } + + /** + * return задание типа {@link EquationTask} + */ + public EquationTask generate() { + int xPos = possiblePositionsOfX[(int)(Math.random() * possiblePositionsOfX.length)]; + return new EquationTask(getRandomNumberForTask(), getRandomNumberForTask(), xPos, getRandomOperationFromSet()); + } + } } diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java index 03c455e..ae0ee5e 100644 --- a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java @@ -2,13 +2,15 @@ import by.parfen01.quiser.Result; +import java.util.EnumSet; + public class ExpressionTask extends AbstractMathTask { private final String text; private final String answer; public ExpressionTask(int firstNumber, int secondNumber, Operation operation) { super(firstNumber, secondNumber, operation); - text = String.valueOf(firstNumber) + Operation.toChar(operation) + String.valueOf(secondNumber) + "=?"; + text = firstNumber + Operation.toChar(operation) + String.valueOf(secondNumber) + "=?"; if (secondNumber == 0 && operation == Operation.DIVISION) { answer = "invalid operation"; return; @@ -34,4 +36,23 @@ public Result validate(String answer) { } return this.answer.equals(answer) ? Result.OK : Result.WRONG; } + + public static class Generator extends AbstractMathTask.Generator { + /** + * @param minNumber минимальное число + * @param maxNumber максимальное число + */ + public Generator(int minNumber, + int maxNumber, + EnumSet operations) { + super(minNumber, maxNumber, operations); + } + + /** + * return задание типа {@link ExpressionTask} + */ + public ExpressionTask generate() { + return new ExpressionTask(getRandomNumberForTask(), getRandomNumberForTask(), getRandomOperationFromSet()); + } + } } diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java index 4af7fc9..8425495 100644 --- a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java @@ -3,6 +3,7 @@ import by.parfen01.quiser.Task; import java.security.InvalidParameterException; +import java.util.EnumSet; public interface MathTask extends Task { enum Operation { @@ -87,4 +88,29 @@ default int calculate(int firstValue, int secondValue, Operation operation) { throw new InvalidParameterException(); } + + interface Generator extends Task.Generator { + int getMinNumber(); // получить минимальное число + int getMaxNumber(); // получить максимальное число + EnumSet getOperations(); + /** + * @return разница между максимальным и минимальным возможным числом + */ + default int getDiffNumber() { + return getMaxNumber() - getMinNumber(); + } + + default int getRandomNumberForTask() { + return (int)(Math.random() * getDiffNumber() + getMinNumber()); + } + + default MathTask.Operation getRandomOperationFromSet() { + while (true) { + MathTask.Operation operationToUse = MathTask.Operation.fromInt((int)(Math.random() * 4)); + if (getOperations().contains(operationToUse)) { + return operationToUse; + } + } + } + } } From 26dd3e538fc97b265e94e200362351650daaa73a Mon Sep 17 00:00:00 2001 From: parfen01 Date: Fri, 25 Nov 2022 19:56:59 +0300 Subject: [PATCH 06/12] Lab1 Fixed issues + MathTasks with doubles --- lab-01/out/production/lab-01/Main.class | Bin 5718 -> 5732 bytes lab-01/src/Main.java | 14 ++-- lab-01/src/by/parfen01/quiser/Quiz.java | 15 ++-- .../task_generators/GroupTaskGenerator.java | 11 ++- .../task_generators/PoolTaskGenerator.java | 22 +++--- .../tasks/math_tasks/AbstractMathTask.java | 20 +++--- .../quiser/tasks/math_tasks/EquationTask.java | 29 ++++---- .../tasks/math_tasks/ExpressionTask.java | 15 ++-- .../quiser/tasks/math_tasks/MathTask.java | 64 ++++++++++-------- 9 files changed, 92 insertions(+), 98 deletions(-) diff --git a/lab-01/out/production/lab-01/Main.class b/lab-01/out/production/lab-01/Main.class index f3ce7188bd0bdd89c8b5c78fdf9239f74a58adaf..83100e8a07727117382778ee20a8841e7c0b9816 100644 GIT binary patch delta 1533 zcmaJ=X>b%p6#m}s?DXvH?2$uEDxN)*YwbbQKLdp&`KA@QpPBhikCmR~L_PnXdhExDWc+kK@ zcvz~UOnHP*+}kE7jbPtW9V_sd!_Y$L$CQ(9u9{ahtT8ov&agyHt2w+=SO0s_lgH2ThmT)IxcyuH?Ky z&?nDsO3rdgHN4f11K>Pr{SO&C?fd@NzRNZ74yBHfi3-C7H;mD77 z@g8S(w9U+k5bcx==KQp?>}qJ3g%Z4vPClPG7=;foiHU%2e2CrrR(N|KVGkGQ<2&rd z$J{J|cI-nJycmE3_=IZ}tie_I6rVB6=UnBq@2T9+=nKw_f#~MtK7lUz4TfOqe?l5q&2;w;j32DeSjVu2mb!yV?rjaZby zl1W*Nvu?%#k8rry@G0V8I< zZW(6^EZyY^#>_V@{t}$Ch^+Lun!BAX^(I~^^7>7!} z@+w@08jQz$Ou!;cL^B&D!v^ZYG#rABqqvSVTu*&*BNbo<4M7!+#!T0ZOZdVx8o}n; z!@Vq?{~GCo?2ITcKg1LsZgUjh;9C||iG%F4F7{6ioA-PCz@D1VpYmZwDz|RMkBkHh zScM~uG?sBYe!|ae^DdTol#$M?*Wee91Kc5sUl|!JDTv<~1s#vpxhCyVwVze}&VLX7 zU;)Qm^e6t}cR!YKoP~BfBau6L-O)#a=VL5x0coUj^Mw?kV5x;H#*(i3v4TQQo+4yY H9<2WWK!~1!jN7q8xVwFzIK+|-JW9euZDOxLKC@|2fERJG2jYAb%O;ZN+ zM@B?^AtIlTg7WZzZ?Vuq3ZWE4iy~?(N_`-r;#*V{QADVBQ>*;(N51dgyZ4-XZoYFk zv_GWnIlXl|fbn$J2JN^@R&WQQR2Y9F4i}aZhK-&y zsp|U3yhw3#ynb$RMMLwA)zSF4f-5wXV428uAoDshAh#S#b?(@U+eKj2Nqi=s8iV27NE^_wqT>Xgo4U z#Y1VYY|@<~qJ=Vc5wt1w^P_cX z8Wpd#t=4vs)T`i7Tdh8ZWbbv2&9Nr2!aH-6kq&JE6Qd2$SR~#UV-4{+^|89?&Gol% zJkXo%TjKje!wLMU;G~Wi{u1rJT@IWU3;cNmvC5xI4$WoDlSe(R?suW7B z!hn{<{ZoR*^3WDM=){#NwEWxT+NN2~gmaoDNz;;8In@Rfr2%0nXsj}&LC6}*c-(k0 ziFILD3YQ8k;!=JtmBz5O_VKJ?Gy*e@~a}Nv3XYM}eEXj+b9C-&E+Q7yfP<4P+{lY&7eq{m2($Q}? z&UZG;_?`PsrO$r*Bubx7a`E>di(5!CsXTlUxyduZ#1@p1D!b7_x?Lw91;~K;H=z)C A82|tP diff --git a/lab-01/src/Main.java b/lab-01/src/Main.java index a84048c..3e1ba7f 100644 --- a/lab-01/src/Main.java +++ b/lab-01/src/Main.java @@ -72,28 +72,28 @@ static Map getQuizMap() { TextTask thirdTextTask = new TextTask("Лектор расписался в журнале." + " Там было 3 н-ки." + " Сколько студентов было на паре?", "Один"); - TextTask foursTextTask = new TextTask("what the fastest mammal in the world?", "Cheetah"); + TextTask fourthTextTask = new TextTask("what the fastest mammal in the world?", "Cheetah"); PoolTaskGenerator thirdTaskGenerator = new PoolTaskGenerator( false, secondTextTask, thirdTextTask, - foursTextTask, + fourthTextTask, firstTextTask); - PoolTaskGenerator foursTaskGenerator = new PoolTaskGenerator( + PoolTaskGenerator fourthTaskGenerator = new PoolTaskGenerator( true, secondTextTask, thirdTextTask, - foursTextTask, + fourthTextTask, firstTextTask); Quiz thirdQuiz = new Quiz(thirdTaskGenerator, 3); result.put("Text Test", thirdQuiz); - Quiz foursQuiz = new Quiz(new GroupTaskGenerator( + Quiz fourthQuiz = new Quiz(new GroupTaskGenerator( firstTaskGenerator, secondTaskGenerator, thirdTaskGenerator.clone()), 10); - result.put("Mixed Test", foursQuiz); - Quiz fifthQuiz = new Quiz(foursTaskGenerator, 3); + result.put("Mixed Test", fourthQuiz); + Quiz fifthQuiz = new Quiz(fourthTaskGenerator, 3); result.put("Text Test With Repeat", fifthQuiz); return result; } diff --git a/lab-01/src/by/parfen01/quiser/Quiz.java b/lab-01/src/by/parfen01/quiser/Quiz.java index 1865f22..ae89f59 100644 --- a/lab-01/src/by/parfen01/quiser/Quiz.java +++ b/lab-01/src/by/parfen01/quiser/Quiz.java @@ -4,11 +4,11 @@ * Class, который описывает один тест */ public class Quiz { - Task.Generator generator; - int taskCount; - int correctAnswerNumber = 0; - int wrongAnswerNumber = 0; - int incorrectInputCount = 0; + private final Task.Generator generator; + private int taskCount; + private int correctAnswerNumber = 0; + private int wrongAnswerNumber = 0; + private int incorrectInputCount = 0; Task currentTask; Task nextTask; boolean isLastInputIncorrect = false; @@ -19,7 +19,7 @@ public class Quiz { public Quiz(Task.Generator generator, int taskCount) { this.generator = generator; this.taskCount = taskCount; - nextTask = generator.generate(); + this.nextTask = null; } /** @@ -30,6 +30,9 @@ public Task nextTask() { if (isLastInputIncorrect) { return currentTask; } + if (nextTask == null) { + nextTask = generator.generate(); + } Task result = nextTask; currentTask = nextTask; if (taskCount > 1) { diff --git a/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java index a12b495..a3b232a 100644 --- a/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java +++ b/lab-01/src/by/parfen01/quiser/task_generators/GroupTaskGenerator.java @@ -52,14 +52,11 @@ public GroupTaskGenerator(Task.Generator... generators) { */ public Task generate() { Collections.shuffle(generators); - for (int i = 0; i < generators.size(); ++i) { + for (Task.Generator generator : generators) { try { - return generators.get(i).generate(); - } - catch (Exception e) { - if (i == generators.size()) { - throw e; - } + return generator.generate(); + } catch (Exception ignored) { + } } diff --git a/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java b/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java index 6cfd55f..5cd3c8d 100644 --- a/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java +++ b/lab-01/src/by/parfen01/quiser/task_generators/PoolTaskGenerator.java @@ -9,10 +9,8 @@ * квизах передавайте его копию */ public class PoolTaskGenerator implements Task.Generator { - private final ArrayList tasks = new ArrayList<>(); - private final LinkedHashSet usedTextsOfTasks = new LinkedHashSet<>(); + private final LinkedHashSet tasks = new LinkedHashSet<>(); private boolean isAllowedDuplicate; - private int numberOfUsedTasks = 0; /** * Конструктор с переменным числом аргументов @@ -67,20 +65,16 @@ public PoolTaskGenerator(boolean allowDuplicate, Collection tasks) { public Task generate() { if (isAllowedDuplicate) { int numberOfTest = (int) (Math.random() * tasks.size()); - return tasks.get(numberOfTest); - } - if (numberOfUsedTasks == tasks.size()) { - throw new EmptyStackException(); + return tasks.stream().skip(numberOfTest).limit(1).findFirst().get(); } - while(true) { - int numberOfTest = (int) (Math.random() * tasks.size()); - if (!usedTextsOfTasks.contains(tasks.get(numberOfTest).getText())) { - ++numberOfUsedTasks; - usedTextsOfTasks.add(tasks.get(numberOfTest).getText()); - return tasks.get(numberOfTest); - } + if (tasks.isEmpty()) { + throw new EmptyStackException(); } + int numberOfTest = (int) (Math.random() * tasks.size()); + Task result = tasks.stream().skip(numberOfTest).limit(1).findFirst().get(); + tasks.remove(result); + return result; } @Override diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java index dc6a299..ceff99a 100644 --- a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java @@ -4,22 +4,22 @@ import java.util.EnumSet; public abstract class AbstractMathTask implements MathTask { - private final int firstNumber; - private final int secondNumber; - private final Operation operation; + protected final double firstNumber; + protected final double secondNumber; + protected final Operation operation; - AbstractMathTask(int firstNumber, int secondNumber, Operation operation) { + public AbstractMathTask(double firstNumber, double secondNumber, Operation operation) { this.firstNumber = firstNumber; this.secondNumber = secondNumber; this.operation = operation; } public abstract static class Generator implements MathTask.Generator { - private final int minNumber; - private final int maxNumber; - private final EnumSet operations; + protected final double minNumber; + protected final double maxNumber; + protected final EnumSet operations; - protected Generator(int minNumber, int maxNumber, EnumSet operations) { + public Generator(double minNumber, double maxNumber, EnumSet operations) { this.minNumber = minNumber; this.maxNumber = maxNumber; this.operations = operations.clone(); @@ -32,12 +32,12 @@ protected Generator(int minNumber, int maxNumber, EnumSet op } @Override - public int getMaxNumber() { + public double getMaxNumber() { return maxNumber; } @Override - public int getMinNumber() { + public double getMinNumber() { return minNumber; } diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java index 1d01e84..55d3d63 100644 --- a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java @@ -5,29 +5,30 @@ import java.util.EnumSet; public class EquationTask extends AbstractMathTask { - int positionOfX; - String text; - String answer; - public EquationTask(int firstNumber, int secondNumber, int positionOfX, Operation operation) { + private final String text; + private final String answer; + public EquationTask(double firstNumber, double secondNumber, int positionOfX, Operation operation) { super(firstNumber, secondNumber, operation); - this.positionOfX = positionOfX; if (positionOfX != 0 && positionOfX != 1) { throw new IllegalArgumentException(); } if (positionOfX == 0) { text = "X" + Operation.toChar(operation) + firstNumber + "=" + secondNumber; - if (firstNumber == 0 && operation == Operation.DIVISION) { + if (MathTask.doubleEqual(firstNumber, 0.0) && operation == Operation.DIVISION) { answer = "invalid operation"; return; } - if (firstNumber == 0 && secondNumber != 0 && operation == Operation.MULTIPLICATION) { + if (MathTask.doubleEqual(firstNumber, 0.0) && + !MathTask.doubleEqual(secondNumber, 0.0) && + operation == Operation.MULTIPLICATION) { answer = "no right answer"; return; } answer = String.valueOf(calculate(secondNumber, firstNumber, Operation.getReverseOperation(operation))); } else { text = String.valueOf(firstNumber) + Operation.toChar(operation) + "X" + "=" + secondNumber; - if (firstNumber == 0 && secondNumber != 0 && + if (MathTask.doubleEqual(firstNumber, 0) && + MathTask.doubleEqual(secondNumber, 0.0) && (operation == Operation.MULTIPLICATION || operation == Operation.DIVISION)) { answer = "no right answer"; return; @@ -50,15 +51,13 @@ public Result validate(String answer) { if (answer == null) { throw new NullPointerException(); } - if (!answer.matches("^-?[0-9]+$") && + if (!answer.matches("^-?[0-9]+(\\.[0-9]+)?$") && !answer.equalsIgnoreCase("invalid operation") && !answer.equalsIgnoreCase("no right answer")) { return Result.INCORRECT_INPUT; } - if (answer.equals("-0") && this.answer.equals("0")) { - return Result.OK; - } - return this.answer.equals(answer) ? Result.OK : Result.WRONG; + + return MathTask.checkAnswer(this.answer, answer); } public static class Generator extends AbstractMathTask.Generator { @@ -67,8 +66,8 @@ public static class Generator extends AbstractMathTask.Generator { * @param minNumber минимальное число * @param maxNumber максимальное число */ - public Generator(int minNumber, - int maxNumber, + public Generator(double minNumber, + double maxNumber, EnumSet operations, int[] possiblePositionsOfX) { super(minNumber, maxNumber, operations); diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java index ae0ee5e..e075917 100644 --- a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java @@ -8,9 +8,9 @@ public class ExpressionTask extends AbstractMathTask { private final String text; private final String answer; - public ExpressionTask(int firstNumber, int secondNumber, Operation operation) { + public ExpressionTask(double firstNumber, double secondNumber, Operation operation) { super(firstNumber, secondNumber, operation); - text = firstNumber + Operation.toChar(operation) + String.valueOf(secondNumber) + "=?"; + text = String.valueOf(firstNumber) + Operation.toChar(operation) + secondNumber + "=?"; if (secondNumber == 0 && operation == Operation.DIVISION) { answer = "invalid operation"; return; @@ -28,13 +28,10 @@ public Result validate(String answer) { if (answer == null) { throw new NullPointerException(); } - if (!answer.matches("^-?[0-9]+$") && !answer.equalsIgnoreCase("invalid operation")) { + if (!answer.matches("^-?[0-9]+(\\.[0-9]+)?$") && !answer.equalsIgnoreCase("invalid operation")) { return Result.INCORRECT_INPUT; } - if (answer.equals("-0") && this.answer.equals("0")) { - return Result.OK; - } - return this.answer.equals(answer) ? Result.OK : Result.WRONG; + return MathTask.checkAnswer(answer, this.answer); } public static class Generator extends AbstractMathTask.Generator { @@ -42,8 +39,8 @@ public static class Generator extends AbstractMathTask.Generator { * @param minNumber минимальное число * @param maxNumber максимальное число */ - public Generator(int minNumber, - int maxNumber, + public Generator(double minNumber, + double maxNumber, EnumSet operations) { super(minNumber, maxNumber, operations); } diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java index 8425495..209f21b 100644 --- a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java @@ -1,5 +1,6 @@ package by.parfen01.quiser.tasks.math_tasks; +import by.parfen01.quiser.Result; import by.parfen01.quiser.Task; import java.security.InvalidParameterException; @@ -12,24 +13,6 @@ enum Operation { MULTIPLICATION, // Операция умножения(*) DIVISION; // Операция деления(/) - public static Operation fromInt(int number) { - switch (number) { - case 0 -> { - return ADDITION; - } - case 1 -> { - return SUBTRACTION; - } - case 2 -> { - return MULTIPLICATION; - } - case 3 -> { - return DIVISION; - } - } - - throw new InvalidParameterException(); - } static char toChar(Operation operation) { switch (operation) { @@ -70,7 +53,12 @@ static Operation getReverseOperation(Operation operation) { } } - default int calculate(int firstValue, int secondValue, Operation operation) { + static boolean doubleEqual(double first, double second) { + final double K_EPS = 0.001; + return Math.abs(first - second) <= K_EPS; + } + + default double calculate(double firstValue, double secondValue, Operation operation) { switch (operation) { case ADDITION -> { return firstValue + secondValue; @@ -89,28 +77,44 @@ default int calculate(int firstValue, int secondValue, Operation operation) { throw new InvalidParameterException(); } + static Result checkAnswer(String answer, String providedAnswer) { + if (answer.equals(providedAnswer)) { + return Result.OK; + } else { + double doubleAnswer = Double.parseDouble(answer); + double doubleProvidedAnswer = Double.parseDouble(providedAnswer); + if (MathTask.doubleEqual(doubleAnswer, doubleProvidedAnswer)) { + return Result.OK; + } else { + return Result.WRONG; + } + } + } + interface Generator extends Task.Generator { - int getMinNumber(); // получить минимальное число - int getMaxNumber(); // получить максимальное число + double getMinNumber(); // получить минимальное число + double getMaxNumber(); // получить максимальное число EnumSet getOperations(); /** * @return разница между максимальным и минимальным возможным числом */ - default int getDiffNumber() { + default double getDiffNumber() { return getMaxNumber() - getMinNumber(); } - default int getRandomNumberForTask() { - return (int)(Math.random() * getDiffNumber() + getMinNumber()); + default double getRandomNumberForTask() { + double result = Math.random() * getDiffNumber() + getMinNumber(); + return (long) (result * 1000) / 1000.0; } default MathTask.Operation getRandomOperationFromSet() { - while (true) { - MathTask.Operation operationToUse = MathTask.Operation.fromInt((int)(Math.random() * 4)); - if (getOperations().contains(operationToUse)) { - return operationToUse; - } - } + int pos = (int)(Math.random() * getOperations().size()); + return getOperations() + .stream() + .skip(pos) + .limit(1) + .findFirst() + .orElse(Operation.ADDITION); } } } From d7c4911e3108158add47de5b9f942d77a770c4c5 Mon Sep 17 00:00:00 2001 From: parfen01 Date: Sun, 27 Nov 2022 16:07:45 +0300 Subject: [PATCH 07/12] Lab1 Fixed issues + Made precision --- lab-01/out/production/lab-01/Main.class | Bin 5732 -> 5736 bytes .../lab-01/by/parfen01/quiser/Quiz$1.class | Bin 738 -> 738 bytes .../lab-01/by/parfen01/quiser/Quiz.class | Bin 2140 -> 2164 bytes .../task_generators/GroupTaskGenerator.class | Bin 2207 -> 2099 bytes .../task_generators/PoolTaskGenerator.class | Bin 3002 -> 3018 bytes .../tasks/math_tasks/AbstractMathTask.class | Bin 895 -> 2075 bytes .../tasks/math_tasks/EquationTask.class | Bin 3043 -> 3213 bytes .../tasks/math_tasks/ExpressionTask.class | Bin 2387 -> 2466 bytes .../quiser/tasks/math_tasks/MathTask$1.class | Bin 980 -> 980 bytes .../tasks/math_tasks/MathTask$Operation.class | Bin 2430 -> 2200 bytes .../quiser/tasks/math_tasks/MathTask.class | Bin 1093 -> 1093 bytes lab-01/src/Main.java | 30 ++++------- .../tasks/math_tasks/AbstractMathTask.java | 48 +++++++++++++++++- .../quiser/tasks/math_tasks/EquationTask.java | 35 ++++++++----- .../tasks/math_tasks/ExpressionTask.java | 21 +++++--- .../quiser/tasks/math_tasks/MathTask.java | 24 ++------- 16 files changed, 97 insertions(+), 61 deletions(-) diff --git a/lab-01/out/production/lab-01/Main.class b/lab-01/out/production/lab-01/Main.class index 83100e8a07727117382778ee20a8841e7c0b9816..caeb2c4f3fac97406572d57c6b2e01a82b0dccb9 100644 GIT binary patch delta 326 zcmXAjyDvj=7>1u8&N)@5M2?`fp<-y##nedL>Xw?CNE}H+`3L+1(zr|pO9!h(+7 zbg(xTgP{=?MO|CB-7AJKdB5*Vp7*K5s-HoJiX$3P} zBMK?7;(l)Fu@#27MNs}Db|=~of&pWv8T@& zX|DBs#OISm6C`80Su%Yrn>bmMV1*K}tL}gq;*u+E5!1^Z6%0|+#XV&j#H#a<6R1(R z3RNAORCmD>&sZuw=S9g@^$D*^jsy;QQwm69i+5@?OC~E&ji5;Le2CH_p?=AgaitXE VODV*SG+YV%OWkVw*5sYe%rETfPF4T_ delta 321 zcmXAjJugFH7>2KxqdoMLP-z^S!6osPRejCL?1 zW%7QB?QEGHzoVPI!gZp**hsi0-^C~{V|a`+!~|(3nIpq8Qv^)2$qZY}vQL&n<|(nr z9V=Ausk3Tqawf@|>0{jt5|}g_TmlCY+h&*>ZZ)~Oe2*a3O|sN^%JWRKWFb{8 zE$Oa!;guFiFL)D0q(0|e6jgx}K18-^?D9#CR{aVTRHIF?OMGdLN#XG=a#ShKk0{Q) SYB(zJU+O_qL#Gf+=KcW4yiIrj diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/Quiz$1.class b/lab-01/out/production/lab-01/by/parfen01/quiser/Quiz$1.class index bfee6408224bb137b3b2d7bd446cdce446cfcebb..e55c77110370977586d404583fd44d524c76a149 100644 GIT binary patch delta 13 UcmaFF`iOPIG$ux)$ih-PX#@+;JhyQk+;iV~_nvd+uyj-!Oj$lhmWh}%RGqV4eKMv_ z)hMiNuCKpXd-rI0<8^^1t%!C^hpuVxtySD{%ey7(d_Az8V0M%-#({v-#2yPnEDmwh zBdNIF@qQn|vD~(HGP<|j_i!?_JregTJipbV!fik1ADLr5-Jr#_Z#J1vVz(`CHXc0X z(+k}1WAFQY3QTKshQ2JWa*^v?;vScI$Q7Q5dB!zX#jbIK4d&dZkym!#6{7`v;C@CY g+?%LnPkr}A-E(z|_R=NUsbW*Qk4JLS*H_B^1ztN%GXMYp delta 460 zcmXv~yG{Z@6g_uYciHS37heR8EC>qn6b;}54L-3@3*#d(78 zQ?hr=Kmsv>etcQ4pVTh4j~ZuBA9N?>fdB?zuOS!?>n?Y>-0d<8IC)$1K@MoQkl^7+ zTD-{-E%|~Vp@pdUk~3E+__4^jP`d(4Say2TjvLusj-LeL86%8kj@gP5^LXMJJ@@c3 z#hVP#^@NQr#F+-=N0|2A|L>S=a*qcKj6tY2&M{d$b{IbXkpLTn5k-cr?4kPGChkx^ zu3X`#5mq^;K{CX5hedH=DA&0RbYzi2j`sv+F^PHPv4#S+P{balu#Xv3Ia5Ok4V1;J qa!M5uQ!BJ7&eam_F!qUeHAV-{=~pdMRTRA0E{k<{6^(UynchG2-9ixn diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/GroupTaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/GroupTaskGenerator.class index 921165e4a32f3c27e9b05937bf57877c928a6664..089363dd238f8787ba82836ff44098dc35fb97f4 100644 GIT binary patch delta 498 zcmX|-J5N+m6otQY@7y^$gN%fP$7leFBs?6aATuz?a}WgNArA#&p%Y>hV}ODXI>K)_ zl{6FK;Xo-As^; z+&5Ia$9}bY6;Ug7sh&0psf!G1*P(G3wZ#(3=;UzUHS`6PvP24yn zYj`*Ly7=QW-HZG5eifvVW?Jad4-X2HB&suur9)1xc)`x z4bIj?F6xl>8qtSr=0#o77lTqD~;lHmwP zIBFKH{W4-6Sv%yId1ZCU=<-*qC^Bi{!B5?y+>ZaQ7w*ng7aR3k3t2(xx;*neI2gPp zbebir(-iDI+m36C7AFX>gw06=&)l9P-x?8mrZHzOa88FRhifVl?%B0?y zQhyirCNV6B7KbyifumMr=Q?(~>NaP!j%Tii>dO8cN@tqvK3adX1DaL($1W-RoU+er zG@{nmqFnH+nVi%0;7{Mvde*V%?rFxVR`4nLeJ^oelM3WwzPCc(Qxd)xTOsp--`d9rCR|bT$^3G-`2~D{5WMPjZz?DEtfP C{bN7? diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/PoolTaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/PoolTaskGenerator.class index 6dcf6479f803fd32e8cba42e6b836b08d84af10c..51a662f3cedab6225714f4ccfafe112f86537b9f 100644 GIT binary patch literal 3018 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 HizWUA%!1D6 delta 268 zcmXX>;Ll<@w-Plj)#1J7duypIf z9~GQXJ>A*Q^0T+z@0oKretiQdkk`(esOtB;{wZY-mnM=c`TS6swcMG#dQ>xk!Xz>? ziM^mi>J(AmYX(3`^SDnxLz;I@Xp;PRz~16bVt$mExAnr*=nw M_A;T;$GsZ-0skl+9{>OV diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/EquationTask.class b/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/EquationTask.class index 5d9427607dff19fe0a2672b54f7f10a5a463639d..04f5facaa4a18239228b6a0740aaf0aa6506a16b 100644 GIT binary patch literal 3213 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 OlW2M}KEQQ+1ouB@xeVL@ diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.class b/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.class index 8ffe9c229e4f4f87cf64fc4e0402fe413af44fd6..3a81d3b7db7ef8b55cc57e0688e2c9dfe1fc7137 100644 GIT binary patch delta 1099 zcmX|9-E$LF6#tzhyPJk34I2X83SmQAnvZ@#O9izpAwdXKK!GX()ops4hHf`Co8XK- z^lzwlMrZos=!0+06b1r=GdhmWIQq&nk390~qk485`>=a{_wK#Fk8}2g@qIG(*FVpH z1~3bED|Stt&6dlRd1)(yvX>5SeVvfM(dh}ZCR*2hUX&|zLhWPLQdxdSsb~~^I!yG-zbPG!Yt5qPkWLq7aJN`TO<*d)%?z+W3uDv+mYpQBBIYl9oe}FRd~`_e8bfE?;f0 zFNr2c-uQnI1gglL$dB}~TvTqw@5Qi)Pc(e0BL!Rjs{DSrN|?I2Dy+RLR%6B5?V`2b z_FC4Gu-t~_2+y-xtHQM?Mnp4nELw40(JVQ(=Lt{4iu_isMD7!Yjc%}Uu0D~He~iOB3_^i3KR3`9sO!52y6S|RxWzkuSH56nzk4Hv zKd|p7jNN{UiC+rFWCy3Wkti6)Iyk!x?GfJD$ro54)4_Sx*zCqX6xcnA2;0?R@jJsU z83;rV?Go=r9tp-mL8u5qdWvr?1a?2fM_eOp={D{#iZZ&(&k~k-)z4aS2-MD*{5^_Q M^gyd)4eK!f17iTh`~Uy| delta 1092 zcmZuvT~8B16g|^!*>)YEECL0}cfr!KfQSNC{V@E4evsCO3pNHm+7xo79jx%ZrzC;6XM<>UA5cL0tf^-zgQ zok3lkq6cKl=Ra-rd zLd}N&N39^qG7{ZIUh{Y&o4Z!4NbK7aAFy!TJ$5 zni-TSt!tuL>zE7&gz6TKLuj?eoPl5tj&QW0mBDM?TsGoqeJ+tqnSDmu^q>PrWkfiR zq0@Tm9Gq~Yi@~8a3yvO+Ui49WyT=#`f`3Vi&McU*Or(C?jgt(lS#b4p44{(;qGtp= z&2dIR*Xa4^P``Cny6e>$c-o956SG6hH)hO~^+kFqO)(tX^RY39m=avB1zk2OF$*xkO4Z)LQrDawRaBOfD`j$yl=P$=Zq! z4tggJsN%*bQibWXIzgQwi{?Q>>l910Mna{2?G0F{RNI0)?cYN7Hu8ZD6!}+?r>&#x z8I+J(wSk&fA(6a^I!Y4ICOu1YIb@nS&DmHfAuDTFuEt8iB@sg6?%=LH3}RMtz@m( ze~avrd^cmSB*SHl(H|lI1*MCE!{HCu_ZFeCH)z-it4*6YxC(Drt=h!lRmkgTUkj_p zH_`nV`BbPzJz>YRacWKAunj!~pCfA>`WjY*(|=6ylj<_Erh-hWL^XYFs3D!Tc7uhx zP5ky`*uE=f>sR371wL=DOfO5qxUFykS7?<;#3Zg#>Ag_y@;cQGaS N5Qhghki<; diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask$1.class b/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask$1.class index 74aeda173e5f710b8297a912f673feac30db342c..63574c5b678d7a6154280a332d916e7538ecf3fc 100644 GIT binary patch delta 13 Ucmcb@euaHQH8Z2o@h)EDiMNu}RjXFaiEzAVVvhq(ELG7l05J^R}j&?4h)oanR zuTVlki`=wo*GFjCmyj-#(x$sO_j2C5?|0yJ!uJEAkIw5GfE?-^5<^C~zRY9sf$4pi zM2urfg8@_6(p4m(VHy?#Kf5?MK6M)mJ~Lk8NQrM|1(UEfjKlHV?bf>#WuhS0gL?ha z-9IV2=UeVxrAdOSOl`fr@z9u7*o<6mN@Uc5ibX7eAxi<9kZ1z3 zPnbwNBQBaeeU#jJLAp(@5A&o^D5PPS7^I{_NRi`U1hbTDfljpF7f|%>EtA9HHzg`U zt)SFJ-E>j;9%@*f$^DCp5z2st1Z*S;V`Gl=50&qs#I0K90ivwJ5nt+Vp&vTMiIN%! i(oO&}3KU4f8rHpDM#bw@Y)}t-nX1^#N9bRuLh27b20=Ff delta 675 zcmZuv&ubGw7=5$5$zZ#fg4m`K>P_gu zgPP|%Af{S*9C3dQHTg&g|9dmpp&&AvBp_rs;LRPxu^*Y5yoSdq{K zN-EGxpXWXbT_U62YWZs}ZdkaEtbp!~wM~p+Tq0*7j|qVS$0wAlHHV89ZemhE?shky zb%O11+&})QIl`7tySqDnXHTHw`RctX8jDho(1@hoMN;)hs_;JpIz||Z!JZ~EYC$@+3q6#mUgk9`JXE9p6j!r-9_r^F z)S+xhlk!bu)u~*Y8GwyJre-l;n04U*TWIN+$jS DnF?GC diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask.class b/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask.class index e829da0bb8ced1f352b75d328e17cca17fcaaaa5..fcdd32c52ccf9cac894faf58b864462fdc578e29 100644 GIT binary patch delta 156 zcmX@gag<}jB1UEx7oUj>&6uqLj5r{!@3P7v^#2P@XBQ2A#Mp`BXh%Qi_2MNO}QP m`!MJ*_ybJ}VlZI{Ww2m~oP2>%gE4G?94{iz@(bYa0Rp diff --git a/lab-01/src/Main.java b/lab-01/src/Main.java index 3e1ba7f..2eb46ff 100644 --- a/lab-01/src/Main.java +++ b/lab-01/src/Main.java @@ -60,38 +60,26 @@ public static void main(String[] argv) { static Map getQuizMap() { Map result = new TreeMap<>(); ExpressionTask.Generator firstTaskGenerator = new ExpressionTask.Generator( - 1, 100, EnumSet.allOf(MathTask.Operation.class)); + 1, 100, 2, EnumSet.allOf(MathTask.Operation.class)); Quiz firstQuiz = new Quiz(firstTaskGenerator, 10); result.put("Expression Test", firstQuiz); EquationTask.Generator secondTaskGenerator = new EquationTask.Generator( - 1, 100, EnumSet.allOf(MathTask.Operation.class), new int[]{0, 1}); + 1, 100, 3, EnumSet.allOf(MathTask.Operation.class), new int[]{0, 1}); Quiz secondQuiz = new Quiz(secondTaskGenerator, 10); result.put("Equation Test", secondQuiz); TextTask firstTextTask = new TextTask("what the highest mountain in the world?", "Everest"); TextTask secondTextTask = new TextTask("what the fastest mammal in the world?", "Cheetah"); TextTask thirdTextTask = new TextTask("Лектор расписался в журнале." + - " Там было 3 н-ки." + - " Сколько студентов было на паре?", "Один"); + " Там было 3 н-ки." + " Сколько студентов было на паре?", "Один"); TextTask fourthTextTask = new TextTask("what the fastest mammal in the world?", "Cheetah"); - PoolTaskGenerator thirdTaskGenerator = new PoolTaskGenerator( - false, - secondTextTask, - thirdTextTask, - fourthTextTask, - firstTextTask); - PoolTaskGenerator fourthTaskGenerator = new PoolTaskGenerator( - true, - secondTextTask, - thirdTextTask, - fourthTextTask, - firstTextTask); + PoolTaskGenerator thirdTaskGenerator = new PoolTaskGenerator(false, secondTextTask, + thirdTextTask, fourthTextTask, firstTextTask); + PoolTaskGenerator fourthTaskGenerator = new PoolTaskGenerator(true, secondTextTask, + thirdTextTask, fourthTextTask, firstTextTask); Quiz thirdQuiz = new Quiz(thirdTaskGenerator, 3); result.put("Text Test", thirdQuiz); - Quiz fourthQuiz = new Quiz(new GroupTaskGenerator( - firstTaskGenerator, - secondTaskGenerator, - thirdTaskGenerator.clone()), - 10); + Quiz fourthQuiz = new Quiz(new GroupTaskGenerator(firstTaskGenerator, secondTaskGenerator, + thirdTaskGenerator.clone()), 10); result.put("Mixed Test", fourthQuiz); Quiz fifthQuiz = new Quiz(fourthTaskGenerator, 3); result.put("Text Test With Repeat", fifthQuiz); diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java index ceff99a..7d767e5 100644 --- a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.java @@ -1,5 +1,7 @@ package by.parfen01.quiser.tasks.math_tasks; +import by.parfen01.quiser.Result; + import java.security.InvalidParameterException; import java.util.EnumSet; @@ -7,19 +9,58 @@ public abstract class AbstractMathTask implements MathTask { protected final double firstNumber; protected final double secondNumber; protected final Operation operation; + protected final int precision; - public AbstractMathTask(double firstNumber, double secondNumber, Operation operation) { + public AbstractMathTask(double firstNumber, double secondNumber, int precision, Operation operation) { this.firstNumber = firstNumber; this.secondNumber = secondNumber; + this.precision = precision; this.operation = operation; } + public int getPrecision() { + return precision; + } + + public double getPrecisionAsDoubleValue() { + if (operation == Operation.ADDITION || operation == Operation.SUBTRACTION) { + return Math.pow(10, -getPrecision() - 1); + } else { + return Math.pow(10, -2 * getPrecision()); + } + } + + public boolean doubleEqual(double first, double second) { + return Math.abs(first - second) < getPrecisionAsDoubleValue(); + } + + public Result checkAnswer(String answer, String providedAnswer) { + if (answer.equals(providedAnswer)) { + return Result.OK; + } else { + double doubleAnswer = Double.parseDouble(answer); + double doubleProvidedAnswer = Double.parseDouble(providedAnswer); + if (doubleEqual(doubleAnswer, doubleProvidedAnswer)) { + return Result.OK; + } else { + return Result.WRONG; + } + } + } + public abstract static class Generator implements MathTask.Generator { protected final double minNumber; protected final double maxNumber; + + protected final int precision; protected final EnumSet operations; public Generator(double minNumber, double maxNumber, EnumSet operations) { + this(minNumber, maxNumber, 0, operations); + } + + public Generator(double minNumber, double maxNumber, int precision, EnumSet operations) { + this.precision = precision; this.minNumber = minNumber; this.maxNumber = maxNumber; this.operations = operations.clone(); @@ -41,6 +82,11 @@ public double getMinNumber() { return minNumber; } + @Override + public int getPrecision() { + return precision; + } + @Override public EnumSet getOperations() { return operations; diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java index 55d3d63..ce04c14 100644 --- a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/EquationTask.java @@ -7,28 +7,30 @@ public class EquationTask extends AbstractMathTask { private final String text; private final String answer; - public EquationTask(double firstNumber, double secondNumber, int positionOfX, Operation operation) { - super(firstNumber, secondNumber, operation); + public EquationTask(double firstNumber, double secondNumber, int precision, int positionOfX, Operation operation) { + super(firstNumber, secondNumber, precision, operation); if (positionOfX != 0 && positionOfX != 1) { throw new IllegalArgumentException(); } if (positionOfX == 0) { - text = "X" + Operation.toChar(operation) + firstNumber + "=" + secondNumber; - if (MathTask.doubleEqual(firstNumber, 0.0) && operation == Operation.DIVISION) { + text = "The precision of answer must be no less then " + getPrecisionAsDoubleValue() + "\n" + + "X" + Operation.toChar(operation) + firstNumber + "=" + secondNumber; + if (doubleEqual(firstNumber, 0.0) && operation == Operation.DIVISION) { answer = "invalid operation"; return; } - if (MathTask.doubleEqual(firstNumber, 0.0) && - !MathTask.doubleEqual(secondNumber, 0.0) && + if (doubleEqual(firstNumber, 0.0) && + doubleEqual(secondNumber, 0.0) && operation == Operation.MULTIPLICATION) { answer = "no right answer"; return; } answer = String.valueOf(calculate(secondNumber, firstNumber, Operation.getReverseOperation(operation))); } else { - text = String.valueOf(firstNumber) + Operation.toChar(operation) + "X" + "=" + secondNumber; - if (MathTask.doubleEqual(firstNumber, 0) && - MathTask.doubleEqual(secondNumber, 0.0) && + text = "The precision of answer must be no less then " + getPrecisionAsDoubleValue() + "\n" + + firstNumber + Operation.toChar(operation) + "X" + "=" + secondNumber; + if (doubleEqual(firstNumber, 0) && + doubleEqual(secondNumber, 0.0) && (operation == Operation.MULTIPLICATION || operation == Operation.DIVISION)) { answer = "no right answer"; return; @@ -57,7 +59,7 @@ public Result validate(String answer) { return Result.INCORRECT_INPUT; } - return MathTask.checkAnswer(this.answer, answer); + return checkAnswer(this.answer, answer); } public static class Generator extends AbstractMathTask.Generator { @@ -66,11 +68,19 @@ public static class Generator extends AbstractMathTask.Generator { * @param minNumber минимальное число * @param maxNumber максимальное число */ + + public Generator(double minNumber, + double maxNumber, + EnumSet operations, + int[] possiblePositionsOfX) { + this(minNumber, maxNumber, 0, operations, possiblePositionsOfX); + } public Generator(double minNumber, double maxNumber, + int precision, EnumSet operations, int[] possiblePositionsOfX) { - super(minNumber, maxNumber, operations); + super(minNumber, maxNumber, precision, operations); this.possiblePositionsOfX = possiblePositionsOfX.clone(); } @@ -79,7 +89,8 @@ public Generator(double minNumber, */ public EquationTask generate() { int xPos = possiblePositionsOfX[(int)(Math.random() * possiblePositionsOfX.length)]; - return new EquationTask(getRandomNumberForTask(), getRandomNumberForTask(), xPos, getRandomOperationFromSet()); + return new EquationTask(getRandomNumberForTask(), getRandomNumberForTask(), + getPrecision(), xPos, getRandomOperationFromSet()); } } } diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java index e075917..b547c78 100644 --- a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.java @@ -8,9 +8,10 @@ public class ExpressionTask extends AbstractMathTask { private final String text; private final String answer; - public ExpressionTask(double firstNumber, double secondNumber, Operation operation) { - super(firstNumber, secondNumber, operation); - text = String.valueOf(firstNumber) + Operation.toChar(operation) + secondNumber + "=?"; + public ExpressionTask(double firstNumber, double secondNumber, int precision, Operation operation) { + super(firstNumber, secondNumber, precision, operation); + text = "The precision of answer must be no less then " + getPrecisionAsDoubleValue() + "\n" + + firstNumber + Operation.toChar(operation) + secondNumber + "=?"; if (secondNumber == 0 && operation == Operation.DIVISION) { answer = "invalid operation"; return; @@ -31,7 +32,7 @@ public Result validate(String answer) { if (!answer.matches("^-?[0-9]+(\\.[0-9]+)?$") && !answer.equalsIgnoreCase("invalid operation")) { return Result.INCORRECT_INPUT; } - return MathTask.checkAnswer(answer, this.answer); + return checkAnswer(answer, this.answer); } public static class Generator extends AbstractMathTask.Generator { @@ -41,15 +42,23 @@ public static class Generator extends AbstractMathTask.Generator { */ public Generator(double minNumber, double maxNumber, + int precision, EnumSet operations) { - super(minNumber, maxNumber, operations); + super(minNumber, maxNumber, precision, operations); + } + + public Generator(double minNumber, + double maxNumber, + EnumSet operations) { + this(minNumber, maxNumber, 0, operations); } /** * return задание типа {@link ExpressionTask} */ public ExpressionTask generate() { - return new ExpressionTask(getRandomNumberForTask(), getRandomNumberForTask(), getRandomOperationFromSet()); + return new ExpressionTask(getRandomNumberForTask(), getRandomNumberForTask(), + getPrecision(), getRandomOperationFromSet()); } } } diff --git a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java index 209f21b..83fd602 100644 --- a/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java +++ b/lab-01/src/by/parfen01/quiser/tasks/math_tasks/MathTask.java @@ -1,6 +1,5 @@ package by.parfen01.quiser.tasks.math_tasks; -import by.parfen01.quiser.Result; import by.parfen01.quiser.Task; import java.security.InvalidParameterException; @@ -53,11 +52,6 @@ static Operation getReverseOperation(Operation operation) { } } - static boolean doubleEqual(double first, double second) { - final double K_EPS = 0.001; - return Math.abs(first - second) <= K_EPS; - } - default double calculate(double firstValue, double secondValue, Operation operation) { switch (operation) { case ADDITION -> { @@ -77,23 +71,10 @@ default double calculate(double firstValue, double secondValue, Operation operat throw new InvalidParameterException(); } - static Result checkAnswer(String answer, String providedAnswer) { - if (answer.equals(providedAnswer)) { - return Result.OK; - } else { - double doubleAnswer = Double.parseDouble(answer); - double doubleProvidedAnswer = Double.parseDouble(providedAnswer); - if (MathTask.doubleEqual(doubleAnswer, doubleProvidedAnswer)) { - return Result.OK; - } else { - return Result.WRONG; - } - } - } - interface Generator extends Task.Generator { double getMinNumber(); // получить минимальное число double getMaxNumber(); // получить максимальное число + int getPrecision(); EnumSet getOperations(); /** * @return разница между максимальным и минимальным возможным числом @@ -104,7 +85,8 @@ default double getDiffNumber() { default double getRandomNumberForTask() { double result = Math.random() * getDiffNumber() + getMinNumber(); - return (long) (result * 1000) / 1000.0; + result = (long)(result * Math.pow(10, getPrecision())) / Math.pow(10, getPrecision()); + return result; } default MathTask.Operation getRandomOperationFromSet() { From e5bf20fe3acd34706d09e6db32a5f7d1b68ad172 Mon Sep 17 00:00:00 2001 From: parfen01 Date: Sun, 27 Nov 2022 16:35:31 +0300 Subject: [PATCH 08/12] Lab1 Update .gitignore --- lab-01/{.idea => }/.gitignore | 3 +++ 1 file changed, 3 insertions(+) rename lab-01/{.idea => }/.gitignore (88%) diff --git a/lab-01/.idea/.gitignore b/lab-01/.gitignore similarity index 88% rename from lab-01/.idea/.gitignore rename to lab-01/.gitignore index 13566b8..73e1ef9 100644 --- a/lab-01/.idea/.gitignore +++ b/lab-01/.gitignore @@ -6,3 +6,6 @@ # Datasource local storage ignored files /dataSources/ /dataSources.local.xml +# other +/out/ +/.idea/ From 761c109599ec96c6f08112d99d72b2fc6a99217b Mon Sep 17 00:00:00 2001 From: parfen01 Date: Sun, 27 Nov 2022 16:40:49 +0300 Subject: [PATCH 09/12] Lab1 Update .gitignore --- lab-01/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/lab-01/.gitignore b/lab-01/.gitignore index 73e1ef9..5403ba9 100644 --- a/lab-01/.gitignore +++ b/lab-01/.gitignore @@ -9,3 +9,4 @@ # other /out/ /.idea/ +/lab-01.iml \ No newline at end of file From 24e93094af43a0609f34751219ded0df17b95089 Mon Sep 17 00:00:00 2001 From: parfen01 Date: Sun, 27 Nov 2022 16:41:37 +0300 Subject: [PATCH 10/12] Lab1 Update .gitignore --- lab-01/.gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lab-01/.gitignore b/lab-01/.gitignore index 5403ba9..2a1491c 100644 --- a/lab-01/.gitignore +++ b/lab-01/.gitignore @@ -8,5 +8,4 @@ /dataSources.local.xml # other /out/ -/.idea/ -/lab-01.iml \ No newline at end of file +/.idea/ \ No newline at end of file From 39310cc35d44dee476310f48b9f9a6d7ef296708 Mon Sep 17 00:00:00 2001 From: parfen01 <99528469+parfen01@users.noreply.github.com> Date: Sun, 27 Nov 2022 17:02:46 +0300 Subject: [PATCH 11/12] Delete lab-01/.idea directory --- lab-01/.idea/misc.xml | 6 -- lab-01/.idea/modules.xml | 8 --- lab-01/.idea/uiDesigner.xml | 124 ------------------------------------ lab-01/.idea/vcs.xml | 6 -- 4 files changed, 144 deletions(-) delete mode 100644 lab-01/.idea/misc.xml delete mode 100644 lab-01/.idea/modules.xml delete mode 100644 lab-01/.idea/uiDesigner.xml delete mode 100644 lab-01/.idea/vcs.xml diff --git a/lab-01/.idea/misc.xml b/lab-01/.idea/misc.xml deleted file mode 100644 index d15472f..0000000 --- a/lab-01/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/lab-01/.idea/modules.xml b/lab-01/.idea/modules.xml deleted file mode 100644 index 1e89cde..0000000 --- a/lab-01/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/lab-01/.idea/uiDesigner.xml b/lab-01/.idea/uiDesigner.xml deleted file mode 100644 index 2b63946..0000000 --- a/lab-01/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/lab-01/.idea/vcs.xml b/lab-01/.idea/vcs.xml deleted file mode 100644 index 6c0b863..0000000 --- a/lab-01/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From 1d559702393cdfe70e4547188b9aef41cbaec7f5 Mon Sep 17 00:00:00 2001 From: parfen01 <99528469+parfen01@users.noreply.github.com> Date: Sun, 27 Nov 2022 17:03:02 +0300 Subject: [PATCH 12/12] Delete lab-01/out/production/lab-01 directory --- lab-01/out/production/lab-01/Main.class | Bin 5736 -> 0 bytes .../lab-01/by/parfen01/quiser/Quiz$1.class | Bin 738 -> 0 bytes .../lab-01/by/parfen01/quiser/Quiz.class | Bin 2164 -> 0 bytes .../lab-01/by/parfen01/quiser/Result.class | Bin 1082 -> 0 bytes .../lab-01/by/parfen01/quiser/Task.class | Bin 324 -> 0 bytes .../task_generators/GroupTaskGenerator.class | Bin 2099 -> 0 bytes .../task_generators/PoolTaskGenerator.class | Bin 3018 -> 0 bytes .../by/parfen01/quiser/tasks/TextTask.class | Bin 991 -> 0 bytes .../tasks/math_tasks/AbstractMathTask.class | Bin 2075 -> 0 bytes .../quiser/tasks/math_tasks/EquationTask.class | Bin 3213 -> 0 bytes .../quiser/tasks/math_tasks/ExpressionTask.class | Bin 2466 -> 0 bytes .../quiser/tasks/math_tasks/MathTask$1.class | Bin 980 -> 0 bytes .../tasks/math_tasks/MathTask$Operation.class | Bin 2200 -> 0 bytes .../quiser/tasks/math_tasks/MathTask.class | Bin 1093 -> 0 bytes 14 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 lab-01/out/production/lab-01/Main.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/Quiz$1.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/Quiz.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/Result.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/Task.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/GroupTaskGenerator.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/PoolTaskGenerator.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/TextTask.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/AbstractMathTask.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/EquationTask.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/ExpressionTask.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask$1.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask$Operation.class delete mode 100644 lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask.class diff --git a/lab-01/out/production/lab-01/Main.class b/lab-01/out/production/lab-01/Main.class deleted file mode 100644 index caeb2c4f3fac97406572d57c6b2e01a82b0dccb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5736 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 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/Quiz$1.class b/lab-01/out/production/lab-01/by/parfen01/quiser/Quiz$1.class deleted file mode 100644 index e55c77110370977586d404583fd44d524c76a149..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 738 zcmaJfgc5Ph3Cb`o6bmO|1NN&!<6K$uoS96-H9DMU?dNJ4w)0d1V6*<$SCkD~Ge z_$!L9%z|jc4XP&+N}%-;V&S<8BoN6b)!5O3)eRM~BWnk6(%K z{;KmflZl9(zDTklWzY|Jkcot0snOi&{xk7W1!YtWR85?Nd3MX^nS5`rGT8RuolN~n zkMG-~L;Hl;{=;maFc)?@71DX$#5631>5kj-`u%om__E_Zdog5K{Er;EbQ?E?gTvCb=+u>`I8MPf^j>JqgZj)P0TCKg14#QqKV52mbUwz z`^3N!gLT@#8|?|7CRKjy2QrlDdd{=OptYj0AmLpZ3O9Q*67i6a0*cIbBcBIbJeCR{ z2d4%p_g~XYj&XGmWw9?dq^hW>+1*o|)UO@-L6pdFwcFcfhs;7KA9Yne87h3*5h>S|}oqsUb(lf6dh1B&DU55IvO{iuF{@mW1nUooS3 zAE9mLutuTuUR>;yN|f^Y&}>4K!rHrgsMVwm})a dzXvqj%oA3q9E2Kl-p(Tp+#y@db(3S2e*ehvE%rh&GIrBMwq>4?>YCJ^PF?;v-#_v-~Rw`9~*TDA*>;y zqXxAK^?SylktrJXPUi9Uo|*R)YVTUM<=s~Z4-Bry5JgNwosKwkh1Tt-nFGW5+_Xo> zGGCT0*K{%~W$SB&WWMA$^nYl(N2aq}{$ks76jW9MT+wk=yc>?3lD%{OgjgGNG>SE8 z*+Gn~eNgu1N@d#n?D@x7+wZ2=JTXgf`NT}KzX6{5EJl_y>b?Ux1g!`#r35{G!c%ud+8PaJ*d z*D#=C5NU<({{_T+K?SBl$H3sF8RHnnO${SDG8nBsmT=WlB(R1R3)H7 z=+kT+rf^%s9UarSTRrH>X|3cGEZZphS20^Vlj0TTpF;n@Wqmm}+U(%ELS(K~VC7eH zmTgup<(jcwq^2=f${WRX!?9!^C?npk4AwpuDXd2_*%w#1~&5dqALyllGOk||7PQ}nD&X3Z51*EP9~opK1> zTqmC|~lc;Y;%0mt;C6gekrx#e7MIQ${)48a&`S!`(OXsiGW6{|1!~ zA48KRAxph1$@I`MTGQ8#(UDfi==_;yLwLxw4>7JuL?~mZ!xetLl3d%+L}bnAVYYs> zVwR`6DmgHRdG46auR-~5QbmYpx{wYq{lLA{I-h=pOwb zCz{S<^iXs}zQ1r{=q2NX&*ANahU?7OO{_i4nL;oBZ?c*RqMhX@MDVs$@&|Z(>G2*t z6c%W!Ls(C~LAS<_gTf+41Jr*rk94w3AU#8`F%-hmFBlvC74MF`pni*wR4ixO`3&({ zOh=@}pS(hSWQ!etjw#t_veD$NBT|sg%OIZPnrISYOI)xGpOra@1Otz87~=$Zi*FPB z2u$*4X$tS-HlE-PHmKReJrt<5c@6ps&$P#oMdu+fXHboi`N8}BLHB2>h zw9)thazO`XDW$@MjN&_1@f?xxk5p6!Q0p5X`I+>}!61`FtwAV0BmPUc%XNmT45h@Y zVLVOZR4!g6&dRwsH9;JO<*Lq!i_RZcb$(pcx&ET_XH}g)#7Y4B0VyG{n+5hWS@|Lg{}zJIfSvPb2``@9lH4iLS_gWA^`&oL;PS0cC$+43dfff(*X;3x?(Df3bNE4yg!paNt#=UVF|x3o2CZiB@W*dZSS;wcb=}FArKg zc1=YTF$Q_P{j_>eZZf1^&mmBt;f9QuibdQcj-EYmOoqjDrh06g7`kmZM|!<`Z1zTZ z1##Sxkx-GuGBI5O%8u73$`ix(%=#h2UV0|GWE;a_e#X%pxt4R3pJm_$MEw;NtGLY& zELe^;Dl#n1mYQZ(GVKro3QfBbLO2AK|K3;e02_R8(Z-NrHJzC^I+6TAN~OVDnmSsw z9JA*2yQbSRx;AtRN7DQ6$I#{ z?Gh*L6c9`D{UJnv{Ap|uK10?To%~V8hI&5ksN-0TF#q|?!*nDRwv46B40)XA<`yHO$BMXNt=(cOE@3)egn)L*F^vT diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/Task.class b/lab-01/out/production/lab-01/by/parfen01/quiser/Task.class deleted file mode 100644 index e6ca5b6fcc33732a152a945c08363510e4b3720d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmZuty-or_5dH@6mOD@=OsGjLpmDV}u`$t@peDi#?BRGhTo>KlBl>Cw)93lp9cI)vfMY>c+XRr;=6@iG!r z#c{!Jf(|Fs+24E~eeJ3qAj`MjVp0A8 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/GroupTaskGenerator.class b/lab-01/out/production/lab-01/by/parfen01/quiser/task_generators/GroupTaskGenerator.class deleted file mode 100644 index 089363dd238f8787ba82836ff44098dc35fb97f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2099 zcma)-%TF6u6vn^nu^DU+??-rqHw63uCux9!iBm!dr8Q0(s7cdBHJAY=F=IM2uEMfX z|A}n7LEW`dn@5pCSEBFTidZa8xM_)D^N3MTBe&2P{u-O6}18_1*5!cW@GcVt?wsI z#|=P*;ztmgiaHJTXb_m(*pKb$_LgB?z7qR1Z#sq@b9Lv@C)w}Fj#iAoXr~BdUoF4&hHwQTj8!7N)UbM zS23Vr5JLj3W$g<&p36vG0<|V}N`8U%u}}rza&bK##0V~_7}YQ)6*ZUdIW?io9o-4u6*3g$I_T3-d}rRb`-F3?rZ!o9rZ zn!846KY%$X0{&HV+tS^+?Xc;+c5a{y5%Xi}m0gDEOS+ zb)G9Xx$-mLYdEflpFxBVp?>rX{_hZo{D|No8u`|I6j_PBOej;{HgC_D=#92{ug>~9 zeXmd#{uY5w-&3@#f8iAe$G^(=r?~J$9_{AQo}+JgwSomcCnyON;)S2jMzo*_-F(K- zifinM3C?e!11WaBGOtNqavu{ec%mL zjzV<(0bdjMeMk~q!v4IQ{DAS)_$z3Va9jc(9RE_C z)>}b4Sfm{y+b|_w!X!p9!!CLgVNykK2T`(2lxQbWSD;m-$`b8;(yov;#Z`@?+^gr= z6aKDB{yyL}YE+E${RK}`G3j?{$-c*@jKWuphK$0b1bB|v3CCnIQbg|HxIfiFoK9ms20Hs%Ebyo#kM*mLl_xm;$)&?tMyvj zm%iJ_zWAzZRV;NaZC~tK{d4-%)wNpsok<`;LEDEUXZG1=pS^$Q+h_9oKR>?!a0uUq zPz0X>zls2Y0_B&qD_YdltYma#>XIIJ1%f?>Ww?g~d`->c3W^0bdrleGFr$NpHLE91 zXz7_z-3>v3uLNPJ3O1-HMVUb7)O<9hIn%ner#*T(W2AK_>T2oP3rXG59nH0!bo8`s zn`5*cUp5H@q)%EPGPurOF$Eh1w&c?t&Y0$D+pt{SIeIOwr(DCfLMVqXj7n4~s8+EV z?=kr`5|Wz>C`sKN)334Q%BJS*z8;8C*Dr#rx9PrzH~dd7Fyu*ui~_^wGJLJMR&lRPceo_Iw=!rl}`2v)4&x=5)&~sHGtb zw@F1aS_CSLbgyaJSM@}HCS@9N&D90OWEibzQ?Oe_6nj`oo?oBM&~eFy1sLQc=?hdZ z7waA9K+YZuqXT;tbgI}Vldj0eS$1J1Gg^9>#H8!k+WM^h;#DDvqF!LDR-{R!0R6Nb^w@$8enfY1h#;`q!?iA#08D z+&IZX25?frDHVelS|#39esYspBPCGRbTW7P9*|W|Ua%1rr)8voY0Md{eE?@vjABfn zWZJM2#|$S;4XwsH;^|Q{siJXADELIhIZ3Mk>#_^Wq!1OH7pTue_Y^bgYVp|uMNGmc zaeS`gf)rZN(dXtZAtD&H=OGb^PrMVf0yLA?%w(273St|({DRwBvrf-@&zpg{`I1jSVPB45K zW9q}1xhdTl)22*XDhBPiW{zu)A)j+bzpPH)H0xx~9sTZ%!B+2D%jMl{D0EFWYC)UU ztY3gYIAa-?GrGKrxM}t3oaa-^dAF@kFW*<}0eN>xY#TiF3~4E^ZUs`K1tAKwA<(|& z#M_T$-#Suz+bVfl#kn^D&qucL`lp~;-dT=JkLj|(#DJ&xbjIXEXr(LC3hoIsD9kBSW>NB-;TIY$BtjHPL*h57S zNbC4P8Ka~!~Jer7pi0%8z86w`XQfw|4s@{uf;VUstdySQYpI2P6KfU`MwSQC^|3Eut)9lfVKZ-y_oUBSH~n0reAk zd;P?{pm?qEIi19#Z@vZeMZ8lNx?Kj!$|&D4P^KB+9B8k_j4tVIMnP=g+h zMo`D=s-Aa64GYe+D53m z`A=jIQMMC!2Zpd06GRtB7pAeF=nfD-H^IhMpmyh=24r0;P;ah4y~%^S&id;}ArG~h z7U^G#FIMK3@otfLE0^)M0)L~-quO!kFBEOesrO5gy}<~cX7LAW@G;^o*4+3I?LVPA zTm455X20vn4*P5GFXDs`p+yY)u!xVPFwc_e<3doARNtpB|JV8>)qpn!(Mn)*T*- zk;@Q!qMN$A%@D3P1_{KGP>@tH2bE!Y_(7X+`>ilHHno$f?g(3RxpU-beR1aYDPoAY z6f)%6*U&xJ*3I#j1WT*PNTe7yo%h04aED>(y0SAhj9p7NU12{x8;OalTV@hjgp92Zf*Qj@zzcsms{xV%L=I?gwkBQMCuczLU=?rhX~nuvUwy>KpI7?Ql{!ZLmdq|5r9X-yhsvB z`X*X48jZZXi#9()Ij6t}k9otsR@s}UYK4ai+Slxc>n${<e>;l9ygPbaYCW zx+}^xrxF~>gKixuoK}#iH$>TX?V7_Y1$ok=;|-kQNv$p#mgk>bn>z`l7L>ta>t;5A zKJ;rC(DA19Ir;zGC}_*&^M#c{aX~sfr{gW@t$q34&6TCxjMT@c2U&W4Nv3c~#~|Kj z*6YGs+|Q4tE+jF8VGX8^G)5G3>@y?Lla6}rxdL@KpEvW;_8lE#$WU*UTm`XVU)_eQ zI>zy?g1&S(P@->i8H1+E@I9Z^;zGs`-fT>X?&o)%#1ug;@;?3Pz7X{#sMFI!M73 z87Lf=%YWWE&~@f2shX)(NJ8hF?TDc5S1fX)AT?JjTh&#oVat7}jCmV2IhZ_A#G_9y ztKihKXO%bSt$OHB_1_}d4c;9qRo)Qg&79*tmya`dkn6Cr2iR}b`ZzQpmu&8!_AQr2 zuw87_p4k;qX{qB@7&7&`f3|=9hIRAe8PV};{10oNGB5L zqSVbWDe6ySi6;|uOjlUO3RfvfD2gvhFi~HUFakRXEY5R|q!3PqtF%|szoY9H3PE6L z1P)&rBygyPK@>S{!pjbUNxN}gHn!0Ff_eDT*`JUya6Y|*i(ahq?Jh3=%5B#xso3zh zycP9R?C?SMGpzw!!r226$HR#CXd6Ss=wK{9^)U8B>SR*Jkh#8#QF^}e-4D=WKO+{E zc?8~rJTCfP&-;;#yLDBbcNwO$tVE0i&c~%*Q23>_#sh_!!QR z-p?t?+{`_!CceN!!jZZ!DMcW$vIq5l&>M|1vq#)V@D(hsl9duFlv337u}j5tA2n@Q HizWUA%!1D6 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/EquationTask.class b/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/EquationTask.class deleted file mode 100644 index 04f5facaa4a18239228b6a0740aaf0aa6506a16b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3213 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 diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask$1.class b/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask$1.class deleted file mode 100644 index 63574c5b678d7a6154280a332d916e7538ecf3fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 980 zcmbVKZBNrs6n^eD)@^h!C&Iut)T*1{3MLX03~_EOHtxmPF+cFZ+;vx0DD7-J41dQj zepVA>jNu3Pqm1Vk=3?R(XqtP@^Yrwb=bU?f{r+(RU<+#*#1L1IP%(uh!$$8|A9DYl zaM#xL_ai$Hz8>=6AkYtaICy*NHp%S}skMi~=b`Pn49O$zj6}e&SuE`~E|z68jTF)f zGAgE_GL+AiW}Ts;nIG)X8Z`M(>m6(3MzqsLv`D=+X+-;9Be7j0O*5HMF^e2Ss#2>N z9i!c1cyiIU5!W5=?&&Sh99e_9Eu8+g?|Z&f zQc$rdl}wvE&pWRxRVhaDS5;h-{7iGF(J@{%jA~{4>4u7%k@%X?HB5?EaEl=~snhQ5 z3oE4Vo?4FW+Tm6tr^}G2dVRq#+pt~H8Xfk8-{C!nn0&*txYOmnE%6zdHA8M4(6rBR z#`H$MCF-{PBRigMS=ObT+pgt!f$i=!ML6*K3RW3b&vV73w zaB2dV2qq`+Izc6ZpOHWsb6CI?6sX2MviI=_kI8PJf*RR4?oz#ER5ec#pz8xg0rN<` oQ7EGM??E|>QB(;J$R@Bt=fj9uL78lxGQ^10pDj{v^yE^1085YXj{pDw diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask$Operation.class b/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask$Operation.class deleted file mode 100644 index 05c5c61e63ecd5ec541e0524b88e7bb7b59544de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2200 zcmbVMUsD=a6#rfREv$=DG^Vk!waF#|DoCrT3DiQ+G@GJW7nx!5&{=S!o8V%X#nw;I zhklce57x}YOfzls+z-|1xtAr-qoO?OvoU61ukIF0+$EQfDNwk4d~2^<)pp8Ssn|anS1=(UY-lx2_w+wd z5XU5gq}Gb%y-l6r?&DE$$+&`P36l!0;zNdDv(>guhN(od{M0xxGA+YC$W$6n&8C}^ zF@ujJTvsrQj|uKTVbks&5uOvH)ioEwn4y6af>L2ft#cOd-FDfkpO z7(#i=w%m1w>0wu%rIxHkpyHN<+Y089U`W4LS+Wd8RsX?qn}=J*vD!FQ`yHb8Iz$z1 zp$^H5x6Fl>a05$x%CvAzp4bjaJQYEbiWm5wIy2{A|!oUX|$q zx`!5BGoo7uw&8Xi(hIrm(xKt-yN?PaSt6J1{zGSo>aNjzMvdShnmjPwUGv0rI_8^k zz~GD?Z&aW(G4jop_YNKnC5XS4{HR{na}2WH?mA8LfyJvF?e}(?mwjO zVOV^hm&KrHwrx7%$(y`%Z!%cOQVY+}U=9|p@v#cfPUBGQH2%a+vkr*O@bN~P5}oI8 zkL>cq-JqR+@&#fqF!dT&&WU6AlGczolSzM;27ga~1-_m%&QdRN?KK$J_x(%%E0QRl zZ2?7bPUDBPc*HFH^dlUph3l92h%x- z(BG|m7>_6oy~;N|7r9sDA^w^F5}!YZUoa~H!AOEx4GKmU%$<;6qA&5qbHsS9d#yE1 u%?gYmN{uo@>paHkLNbNu)%qKh>D-4cY>T~uZ)uN<^j5G-P0mw@Soj}HG5t>f diff --git a/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask.class b/lab-01/out/production/lab-01/by/parfen01/quiser/tasks/math_tasks/MathTask.class deleted file mode 100644 index fcdd32c52ccf9cac894faf58b864462fdc578e29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1093 zcmb7DTTc@~6#k|yU0PZ}@CM#>wJl&55@RqZDWRfGxR^jlj1OkI9bjPDt-Di{pQJA& zK4_wezWbw$-!7$?$V)dlJLfXzJ7>O`^ZU>Dp8yt6%^`)fg-ihh$O=@OM^0OY+sdDr zb>4S$q(aBYXg_ieq}hFUqOMZiq|=@iShP1jXyfj#%C_A+vQKmElUzGVu+MVsUhaBZ zh0^H27f8Kr!@@4l~!^8)#89Y$tLdL1GQmK`F?f#2$Sa>3aZ&-I0E z_imI`iW^3{`+Q&BZu1*KCv?@aj?Ys(C7>F!%?{R7WL8yt;>f~ezc1;f^5a(-gaU(v*J*u123fAPFA(DcUtv{0(*hidpkyew zDfcNQ%2cW19+xURlzmEY`~$@|-!S}(u{3V*Kat=)MH%y$=IqX35sy*F9A4ojmFNO={I}k6N00YOH5-)E`i{Fi=kOW8fjp6x%3s9i*K?h3gcpiNvBZGDy!D NrfcJjjp0!?_ZPX~AB+G1