From e481c6abd317ae5a116e16345f0ee330fe69c096 Mon Sep 17 00:00:00 2001 From: banbanovich Date: Thu, 12 Dec 2024 22:38:21 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=201-32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- students/23K0690/23K0690-p21/pom.xml | 13 ++ .../ru/mirea/practice/s23k0690/Task1.java | 30 ++++ .../ru/mirea/practice/s23k0690/Task2.java | 62 +++++++ students/23K0690/23K0690-p22/pom.xml | 13 ++ .../ru/mirea/practice/s23k0690/Task1.java | 72 ++++++++ .../ru/mirea/practice/s23k0690/Task2.java | 156 ++++++++++++++++++ students/23K0690/23K0690-p23/pom.xml | 13 ++ .../practice/s23k0690/AbstractQueue.java | 20 +++ .../mirea/practice/s23k0690/ArrayQueue.java | 41 +++++ .../practice/s23k0690/ArrayQueueModule.java | 35 ++++ .../practice/s23k0690/ArrayqueueAdt.java | 41 +++++ .../mirea/practice/s23k0690/LinkedQueue.java | 56 +++++++ .../ru/mirea/practice/s23k0690/Queue.java | 16 ++ .../ru/mirea/practice/s23k0690/Task1.java | 60 +++++++ .../ru/mirea/practice/s23k0690/Task2.java | 30 ++++ students/23K0690/23K0690-p24/pom.xml | 13 ++ .../ru/mirea/practice/s23k0690/Chair.java | 5 + .../mirea/practice/s23k0690/ChairFactory.java | 5 + .../ru/mirea/practice/s23k0690/Client.java | 13 ++ .../ru/mirea/practice/s23k0690/Complex.java | 24 +++ .../s23k0690/ComplexAbstractFactory.java | 8 + .../practice/s23k0690/ConcreteFactory.java | 14 ++ .../mirea/practice/s23k0690/MagicalChair.java | 8 + .../s23k0690/MagicalChairFactory.java | 8 + .../s23k0690/MultifunctionalChair.java | 8 + .../s23k0690/MultifunctionalChairFactory.java | 8 + .../ru/mirea/practice/s23k0690/Task1.java | 15 ++ .../ru/mirea/practice/s23k0690/Task2.java | 18 ++ .../practice/s23k0690/VictorianChair.java | 8 + .../s23k0690/VictorianChairFactory.java | 8 + students/23K0690/23K0690-p25/pom.xml | 13 ++ .../ru/mirea/practice/s23k0690/Task1.java | 57 +++++++ .../ru/mirea/practice/s23k0690/Task4.java | 26 +++ students/23K0690/23K0690-p26/pom.xml | 13 ++ .../mirea/practice/s23k0690/MyArrayList.java | 43 +++++ .../ru/mirea/practice/s23k0690/MyList.java | 12 ++ .../practice/s23k0690/MyListIterator.java | 24 +++ .../ru/mirea/practice/s23k0690/Task1.java | 36 ++++ .../ru/mirea/practice/s23k0690/Task2.java | 18 ++ students/23K0690/23K0690-p27/pom.xml | 13 ++ .../ru/mirea/practice/s23k0690/HashTable.java | 71 ++++++++ .../ru/mirea/practice/s23k0690/Task1and2.java | 34 ++++ students/23K0690/23K0690-p28/pom.xml | 13 ++ .../java/ru/mirea/practice/s23k0690/Main.java | 18 ++ students/23K0690/23K0690-p29/pom.xml | 13 ++ .../java/ru/mirea/practice/s23k0690/Main.java | 22 +++ students/23K0690/23K0690-p30/pom.xml | 13 ++ .../mirea/practice/s23k0690/HuffmanNode.java | 14 ++ .../ru/mirea/practice/s23k0690/Task1.java | 127 ++++++++++++++ .../ru/mirea/practice/s23k0690/Task2.java | 71 ++++++++ students/23K0690/23K0690-p30p2/pom.xml | 13 ++ .../ru/mirea/practice/s23k0690/Task1.java | 103 ++++++++++++ students/23K0690/23K0690-p31/pom.xml | 13 ++ .../java/ru/mirea/practice/s23k0690/Node.java | 15 ++ .../ru/mirea/practice/s23k0690/Task1.java | 33 ++++ students/23K0690/23K0690-p32/pom.xml | 13 ++ .../ru/mirea/practice/s23k0690/Task1.java | 63 +++++++ students/23K0690/pom.xml | 13 ++ 58 files changed, 1738 insertions(+) create mode 100644 students/23K0690/23K0690-p21/pom.xml create mode 100644 students/23K0690/23K0690-p21/src/main/java/ru/mirea/practice/s23k0690/Task1.java create mode 100644 students/23K0690/23K0690-p21/src/main/java/ru/mirea/practice/s23k0690/Task2.java create mode 100644 students/23K0690/23K0690-p22/pom.xml create mode 100644 students/23K0690/23K0690-p22/src/main/java/ru/mirea/practice/s23k0690/Task1.java create mode 100644 students/23K0690/23K0690-p22/src/main/java/ru/mirea/practice/s23k0690/Task2.java create mode 100644 students/23K0690/23K0690-p23/pom.xml create mode 100644 students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/AbstractQueue.java create mode 100644 students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/ArrayQueue.java create mode 100644 students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/ArrayQueueModule.java create mode 100644 students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/ArrayqueueAdt.java create mode 100644 students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/LinkedQueue.java create mode 100644 students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/Queue.java create mode 100644 students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/Task1.java create mode 100644 students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/Task2.java create mode 100644 students/23K0690/23K0690-p24/pom.xml create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Chair.java create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/ChairFactory.java create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Client.java create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Complex.java create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/ComplexAbstractFactory.java create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/ConcreteFactory.java create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MagicalChair.java create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MagicalChairFactory.java create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MultifunctionalChair.java create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MultifunctionalChairFactory.java create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Task1.java create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Task2.java create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/VictorianChair.java create mode 100644 students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/VictorianChairFactory.java create mode 100644 students/23K0690/23K0690-p25/pom.xml create mode 100644 students/23K0690/23K0690-p25/src/main/java/ru/mirea/practice/s23k0690/Task1.java create mode 100644 students/23K0690/23K0690-p25/src/main/java/ru/mirea/practice/s23k0690/Task4.java create mode 100644 students/23K0690/23K0690-p26/pom.xml create mode 100644 students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/MyArrayList.java create mode 100644 students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/MyList.java create mode 100644 students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/MyListIterator.java create mode 100644 students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/Task1.java create mode 100644 students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/Task2.java create mode 100644 students/23K0690/23K0690-p27/pom.xml create mode 100644 students/23K0690/23K0690-p27/src/main/java/ru/mirea/practice/s23k0690/HashTable.java create mode 100644 students/23K0690/23K0690-p27/src/main/java/ru/mirea/practice/s23k0690/Task1and2.java create mode 100644 students/23K0690/23K0690-p28/pom.xml create mode 100644 students/23K0690/23K0690-p28/src/main/java/ru/mirea/practice/s23k0690/Main.java create mode 100644 students/23K0690/23K0690-p29/pom.xml create mode 100644 students/23K0690/23K0690-p29/src/main/java/ru/mirea/practice/s23k0690/Main.java create mode 100644 students/23K0690/23K0690-p30/pom.xml create mode 100644 students/23K0690/23K0690-p30/src/main/java/ru/mirea/practice/s23k0690/HuffmanNode.java create mode 100644 students/23K0690/23K0690-p30/src/main/java/ru/mirea/practice/s23k0690/Task1.java create mode 100644 students/23K0690/23K0690-p30/src/main/java/ru/mirea/practice/s23k0690/Task2.java create mode 100644 students/23K0690/23K0690-p30p2/pom.xml create mode 100644 students/23K0690/23K0690-p30p2/src/main/java/ru/mirea/practice/s23k0690/Task1.java create mode 100644 students/23K0690/23K0690-p31/pom.xml create mode 100644 students/23K0690/23K0690-p31/src/main/java/ru/mirea/practice/s23k0690/Node.java create mode 100644 students/23K0690/23K0690-p31/src/main/java/ru/mirea/practice/s23k0690/Task1.java create mode 100644 students/23K0690/23K0690-p32/pom.xml create mode 100644 students/23K0690/23K0690-p32/src/main/java/ru/mirea/practice/s23k0690/Task1.java diff --git a/students/23K0690/23K0690-p21/pom.xml b/students/23K0690/23K0690-p21/pom.xml new file mode 100644 index 000000000..8b206bf61 --- /dev/null +++ b/students/23K0690/23K0690-p21/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0690 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0690-p21 + 21 работа + diff --git a/students/23K0690/23K0690-p21/src/main/java/ru/mirea/practice/s23k0690/Task1.java b/students/23K0690/23K0690-p21/src/main/java/ru/mirea/practice/s23k0690/Task1.java new file mode 100644 index 000000000..d081524cc --- /dev/null +++ b/students/23K0690/23K0690-p21/src/main/java/ru/mirea/practice/s23k0690/Task1.java @@ -0,0 +1,30 @@ +package ru.mirea.practice.s23k0690; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public abstract class Task1 { + + public static List convertArrayToList(T[] array) { + return new ArrayList<>(Arrays.asList(array)); + } + + public static void main(String[] args) { + + String[] names = {"Сигарета", + "Пафнутий", + "Мемема"}; + List nameList = convertArrayToList(names); + System.out.println("Список Имена: " + nameList); + + Integer[] numbers = {1, + 35, + 228, + 93, + 1488}; + List numberList = convertArrayToList(numbers); + System.out.println("Список Числа: " + numberList); + + } +} diff --git a/students/23K0690/23K0690-p21/src/main/java/ru/mirea/practice/s23k0690/Task2.java b/students/23K0690/23K0690-p21/src/main/java/ru/mirea/practice/s23k0690/Task2.java new file mode 100644 index 000000000..1878b4bbf --- /dev/null +++ b/students/23K0690/23K0690-p21/src/main/java/ru/mirea/practice/s23k0690/Task2.java @@ -0,0 +1,62 @@ +package ru.mirea.practice.s23k0690; + +import java.util.Arrays; + +public class Task2 { + private T[] array; + private int size; + + @SuppressWarnings("unchecked") + public Task2(int capacity) { + array = (T[]) new Object[capacity]; + size = 0; + } + + public void add(T element) { + if (size >= array.length) { + resize(); + } + array[size++] = element; + } + + public T get(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException("Вне диапазона: " + index); + } + return array[index]; + } + + public int size() { + return size; + } + + @SuppressWarnings("unchecked") + private void resize() { + T[] newArray = (T[]) new Object[array.length * 2]; + System.arraycopy(array, 0, newArray, 0, size); + array = newArray; + } + + @Override + public String toString() { + return Arrays.toString(Arrays.copyOf(array, size)); + } + + public static void main(String[] args) { + Task2 intArray = new Task2<>(5); + intArray.add(1); + intArray.add(2); + intArray.add(3); + System.out.println("Integer массив: " + intArray); + + Task2 stringArray = new Task2<>(5); + stringArray.add("Hello"); + stringArray.add("Сигарета!"); + System.out.println("String массив: " + stringArray); + + Task2 doubleArray = new Task2<>(5); + doubleArray.add(1.1); + doubleArray.add(2.2); + System.out.println("Double массив: " + doubleArray); + } +} diff --git a/students/23K0690/23K0690-p22/pom.xml b/students/23K0690/23K0690-p22/pom.xml new file mode 100644 index 000000000..2d4eb97d1 --- /dev/null +++ b/students/23K0690/23K0690-p22/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0690 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0690-p22 + 22 работа + diff --git a/students/23K0690/23K0690-p22/src/main/java/ru/mirea/practice/s23k0690/Task1.java b/students/23K0690/23K0690-p22/src/main/java/ru/mirea/practice/s23k0690/Task1.java new file mode 100644 index 000000000..89e5f116e --- /dev/null +++ b/students/23K0690/23K0690-p22/src/main/java/ru/mirea/practice/s23k0690/Task1.java @@ -0,0 +1,72 @@ +package ru.mirea.practice.s23k0690; + +import java.util.Stack; + +public final class Task1 { + + private Task1() { + throw new UnsupportedOperationException("Utility class"); + } + + public static double evaluaterpn(String expression) throws Exception { + Stack stack = new Stack<>(); + String[] tokens = expression.split(" "); + + for (String token : tokens) { + if (isOperator(token)) { + if (stack.size() < 2) { + throw new Exception("Недостаточно операндов"); + } + double b = stack.pop(); + double a = stack.pop(); + double result = applyOperator(token, a, b); + stack.push(result); + } else { + try { + double number = Double.parseDouble(token); + stack.push(number); + } catch (NumberFormatException e) { + throw new Exception("Неверный формат числа: " + token, e); + } + } + } + + if (stack.size() != 1) { + throw new Exception("Некорректное выражение"); + } + + return stack.pop(); + } + + private static boolean isOperator(String token) { + return "+".equals(token) || "-".equals(token) || "*".equals(token) || "/".equals(token); + } + + private static double applyOperator(String operator, double a, double b) throws Exception { + switch (operator) { + case "+": + return a + b; + case "-": + return a - b; + case "*": + return a * b; + case "/": + if (b == 0) { + throw new Exception("Деление на ноль"); + } + return a / b; + default: + throw new Exception("Неверный оператор: " + operator); + } + } + + public static void main(String[] args) { + String expression = "3 4 + 2 * 7 /"; + try { + double result = evaluaterpn(expression); + System.out.println("Результат: " + result); + } catch (Exception e) { + System.out.println("Ошибка: " + e.getMessage()); + } + } +} diff --git a/students/23K0690/23K0690-p22/src/main/java/ru/mirea/practice/s23k0690/Task2.java b/students/23K0690/23K0690-p22/src/main/java/ru/mirea/practice/s23k0690/Task2.java new file mode 100644 index 000000000..fa6578517 --- /dev/null +++ b/students/23K0690/23K0690-p22/src/main/java/ru/mirea/practice/s23k0690/Task2.java @@ -0,0 +1,156 @@ +package ru.mirea.practice.s23k0690; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.WindowConstants; +import java.awt.BorderLayout; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Stack; + +public class Task2 extends JFrame { + private JTextField displayField; + + public Task2() { + setTitle("Калькулятор"); + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + setSize(500, 500); + + displayField = new JTextField(); + add(displayField, BorderLayout.NORTH); + + JPanel buttonPanel = new JPanel(); + buttonPanel.setLayout(new GridLayout(4, 4)); + + String[] buttonLabels = {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "+", "="}; + for (String label : buttonLabels) { + JButton button = new JButton(label); + button.addActionListener(new ButtonClickHandler()); + buttonPanel.add(button); + } + + add(buttonPanel, BorderLayout.CENTER); + setVisible(true); + } + + private class ButtonClickHandler implements ActionListener { + @Override + public void actionPerformed(ActionEvent e) { + String command = e.getActionCommand(); + if ("=".equals(command)) { + try { + String expression = displayField.getText().replaceAll("\\s+", ""); + String postfixExpression = convertToPostfix(expression); + System.out.println("Постфиксное выражение: " + postfixExpression); + + double calculationResult = evaluatePostfix(postfixExpression); + displayField.setText(String.valueOf(calculationResult)); + } catch (Exception ex) { + displayField.setText("Ошибка"); + System.out.println("Ошибка: " + ex.getMessage()); + } + } else { + String currentText = displayField.getText(); + displayField.setText(currentText + " " + command); + } + } + } + + public static double evaluatePostfix(String expression) { + Stack numberStack = new Stack<>(); + String[] tokens = expression.trim().split(" "); + System.out.println("Токены: " + String.join(", ", tokens)); + + for (String token : tokens) { + if (isNumeric(token)) { + double number = Double.parseDouble(token); + numberStack.push(number); + } else { + if (numberStack.size() < 2) { + throw new IllegalArgumentException("Недостаточно операндов для операции"); + } + double secondOperand = numberStack.pop(); + double firstOperand = numberStack.pop(); + double operationResult = 0; + if ("+".equals(token)) { + operationResult = firstOperand + secondOperand; + } else if ("-".equals(token)) { + operationResult = firstOperand - secondOperand; + } else if ("*".equals(token)) { + operationResult = firstOperand * secondOperand; + } else if ("/".equals(token)) { + operationResult = firstOperand / secondOperand; + } else { + throw new IllegalArgumentException("Недопустимая операция: " + token); + } + numberStack.push(operationResult); + } + } + + if (numberStack.size() != 1) { + throw new IllegalArgumentException("Недопустимое выражение"); + } + return numberStack.pop(); + } + + private static boolean isNumeric(String str) { + try { + Double.parseDouble(str); + return true; + } catch (NumberFormatException e) { + return false; + } + } + + private String convertToPostfix(String expression) { + StringBuilder result = new StringBuilder(); + Stack operatorStack = new Stack<>(); + + for (int i = 0; i < expression.length(); i++) { + char character = expression.charAt(i); + + if (Character.isDigit(character)) { + result.append(character).append(" "); + } else if (character == '(') { + operatorStack.push(character); + } else if (character == ')') { + while (!operatorStack.isEmpty() && operatorStack.peek() != '(') { + result.append(operatorStack.pop()).append(" "); + } + operatorStack.pop(); + } else if (isOperator(character)) { + while (!operatorStack.isEmpty() && precedence(operatorStack.peek()) >= precedence(character)) { + result.append(operatorStack.pop()).append(" "); + } + operatorStack.push(character); + } + } + + while (!operatorStack.isEmpty()) { + result.append(operatorStack.pop()).append(" "); + } + + return result.toString().trim(); + } + + private boolean isOperator(char character) { + return character == '+' || character == '-' || character == '*' || character == '/'; + } + + private int precedence(char operator) { + if (operator == '+' || operator == '-') { + return 1; + } + if (operator == '*' || operator == '/') { + return 2; + } + return -1; + } + + public static void main(String[] args) { + new Task2(); + } +} diff --git a/students/23K0690/23K0690-p23/pom.xml b/students/23K0690/23K0690-p23/pom.xml new file mode 100644 index 000000000..6d6037ded --- /dev/null +++ b/students/23K0690/23K0690-p23/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0690 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0690-p23 + 23 работа + diff --git a/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/AbstractQueue.java b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/AbstractQueue.java new file mode 100644 index 000000000..6ff55212a --- /dev/null +++ b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/AbstractQueue.java @@ -0,0 +1,20 @@ +package ru.mirea.practice.s23k0690; + +public abstract class AbstractQueue implements Queue { + protected int size; // Размер очереди + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public int size() { + return size; + } + + @Override + public void clear() { + size = 0; + } +} diff --git a/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/ArrayQueue.java b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/ArrayQueue.java new file mode 100644 index 000000000..487a0fbc4 --- /dev/null +++ b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/ArrayQueue.java @@ -0,0 +1,41 @@ +package ru.mirea.practice.s23k0690; + +public class ArrayQueue { + private Object[] elements; + private int head; + private int tail; + + public ArrayQueue(int capacity) { + elements = new Object[capacity]; + head = 0; + tail = 0; + } + + public void enqueue(Object element) { + elements[tail] = element; + tail = (tail + 1) % elements.length; + } + + public Object dequeue() { + Object element = elements[head]; + head = (head + 1) % elements.length; + return element; + } + + public Object element() { + return elements[head]; + } + + public int size() { + return (tail - head + elements.length) % elements.length; + } + + public boolean isEmpty() { + return head == tail; + } + + public void clear() { + head = 0; + tail = 0; + } +} diff --git a/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/ArrayQueueModule.java b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/ArrayQueueModule.java new file mode 100644 index 000000000..b1a6d629c --- /dev/null +++ b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/ArrayQueueModule.java @@ -0,0 +1,35 @@ +package ru.mirea.practice.s23k0690; + +abstract class ArrayQueueModule { + private static Object[] elements = new Object[10]; + private static int head = 0; + private static int tail = 0; + + public static void enqueue(Object element) { + elements[tail] = element; + tail = (tail + 1) % elements.length; + } + + public static Object dequeue() { + Object element = elements[head]; + head = (head + 1) % elements.length; + return element; + } + + public static Object element() { + return elements[head]; + } + + public static int size() { + return (tail - head + elements.length) % elements.length; + } + + public static boolean isEmpty() { + return head == tail; + } + + public static void clear() { + head = 0; + tail = 0; + } +} diff --git a/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/ArrayqueueAdt.java b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/ArrayqueueAdt.java new file mode 100644 index 000000000..280c4b96d --- /dev/null +++ b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/ArrayqueueAdt.java @@ -0,0 +1,41 @@ +package ru.mirea.practice.s23k0690; + +public class ArrayqueueAdt { + private Object[] elements; + private int head; + private int tail; + + public ArrayqueueAdt(int capacity) { + elements = new Object[capacity]; + head = 0; + tail = 0; + } + + public void enqueue(Object element) { + elements[tail] = element; + tail = (tail + 1) % elements.length; + } + + public Object dequeue() { + Object element = elements[head]; + head = (head + 1) % elements.length; + return element; + } + + public Object element() { + return elements[head]; + } + + public int size() { + return (tail - head + elements.length) % elements.length; + } + + public boolean isEmpty() { + return head == tail; + } + + public void clear() { + head = 0; + tail = 0; + } +} diff --git a/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/LinkedQueue.java b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/LinkedQueue.java new file mode 100644 index 000000000..25e6fdcd1 --- /dev/null +++ b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/LinkedQueue.java @@ -0,0 +1,56 @@ +package ru.mirea.practice.s23k0690; + +public class LinkedQueue extends AbstractQueue { + private static class Node { + E value; + Node next; + + Node(E value) { + this.value = value; + } + } + + private Node head; + private Node tail; + + public LinkedQueue() { + head = null; + tail = null; + size = 0; + } + + @Override + public void enqueue(E element) { + Node newNode = new Node<>(element); + if (tail != null) { + tail.next = newNode; + } + tail = newNode; + if (head == null) { + head = tail; + } + size++; + } + + @Override + public E dequeue() { + if (isEmpty()) { + throw new IllegalStateException("Queue is empty"); + } + final E value = head.value; // Declare value as final here + head = head.next; + if (head == null) { + tail = null; + } + size--; + return value; + } + + @Override + public E element() { + if (isEmpty()) { + throw new IllegalStateException("Queue is empty"); + } + return head.value; + } +} diff --git a/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/Queue.java b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/Queue.java new file mode 100644 index 000000000..ba4d3145c --- /dev/null +++ b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/Queue.java @@ -0,0 +1,16 @@ +package ru.mirea.practice.s23k0690; + +public interface Queue { + + void enqueue(E element); + + E dequeue(); + + E element(); + + int size(); + + boolean isEmpty(); + + void clear(); +} diff --git a/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/Task1.java b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/Task1.java new file mode 100644 index 000000000..98fc7867f --- /dev/null +++ b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/Task1.java @@ -0,0 +1,60 @@ +package ru.mirea.practice.s23k0690; + +public final class Task1 { + + private Task1() {} + + public static void main(String[] args) { + ArrayQueue queue = new ArrayQueue(10); + + if (queue.isEmpty()) { + System.out.println("Тест 1 пройден: Очередь пуста."); + } else { + System.out.println("Тест 1 не пройден: Очередь не пуста."); + } + + queue.enqueue(1); + queue.enqueue(2); + + if (queue.size() == 2) { + System.out.println("Тест 2 пройден: Размер очереди равен 2."); + } else { + System.out.println("Тест 2 не пройден: Размер очереди не равен 2."); + } + + if (queue.element().equals(1)) { + System.out.println("Тест 3 пройден: Первый элемент равен 1."); + } else { + System.out.println("Тест 3 не пройден: Первый элемент не равен 1."); + } + + if (queue.dequeue().equals(1)) { + System.out.println("Тест 4 пройден: Удаленный элемент равен 1."); + } else { + System.out.println("Тест 4 не пройден: Удаленный элемент не равен 1."); + } + + if (queue.size() == 1) { + System.out.println("Тест 5 пройден: Размер очереди равен 1 после удаления."); + } else { + System.out.println("Тест 5 не пройден: Размер очереди не равен 1 после удаления."); + } + + queue.clear(); + + if (queue.isEmpty()) { + System.out.println("Тест 6 пройден: Очередь пуста после очистки."); + } else { + System.out.println("Тест 6 не пройден: Очередь не пуста после очистки."); + } + } +} + + + + + + + + + diff --git a/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/Task2.java b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/Task2.java new file mode 100644 index 000000000..2d3c9a428 --- /dev/null +++ b/students/23K0690/23K0690-p23/src/main/java/ru/mirea/practice/s23k0690/Task2.java @@ -0,0 +1,30 @@ +package ru.mirea.practice.s23k0690; + + +public final class Task2 { + + private Task2() {} + + public static void main(String[] args) { + + LinkedQueue queue = new LinkedQueue<>(); + + System.out.println("Тест 1: Очередь пуста? " + (queue.isEmpty() ? "Да" : "Нет")); + + queue.enqueue(1); + queue.enqueue(2); + queue.enqueue(3); + System.out.println("Тест 2: Добавлено 3 элемента. Текущий размер очереди: " + queue.size()); + + System.out.println("Тест 3: Первый элемент очереди: " + queue.element()); + + System.out.println("Тест 4: Удаленный элемент: " + queue.dequeue()); + System.out.println("Текущий размер очереди после удаления: " + queue.size()); + + System.out.println("Тест 5: Очередь пуста? " + (queue.isEmpty() ? "Да" : "Нет")); + + queue.clear(); + System.out.println("Тест 6: Очередь очищена. Текущий размер очереди: " + queue.size()); + System.out.println("Тест 7: Очередь пуста? " + (queue.isEmpty() ? "Да" : "Нет")); + } +} diff --git a/students/23K0690/23K0690-p24/pom.xml b/students/23K0690/23K0690-p24/pom.xml new file mode 100644 index 000000000..0d7fb6fa2 --- /dev/null +++ b/students/23K0690/23K0690-p24/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0690 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0690-p24 + 24 задание + diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Chair.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Chair.java new file mode 100644 index 000000000..866dc0f9c --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Chair.java @@ -0,0 +1,5 @@ +package ru.mirea.practice.s23k0690; + +interface Chair { + void sit(); +} diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/ChairFactory.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/ChairFactory.java new file mode 100644 index 000000000..f1136b2ec --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/ChairFactory.java @@ -0,0 +1,5 @@ +package ru.mirea.practice.s23k0690; + +abstract class ChairFactory { + public abstract Chair createChair(); +} diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Client.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Client.java new file mode 100644 index 000000000..38b0f6f06 --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Client.java @@ -0,0 +1,13 @@ +package ru.mirea.practice.s23k0690; + +class Client { + private Chair chair; + + public Client(ChairFactory factory) { + this.chair = factory.createChair(); + } + + public void sit() { + chair.sit(); + } +} diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Complex.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Complex.java new file mode 100644 index 000000000..5a7f83569 --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Complex.java @@ -0,0 +1,24 @@ +package ru.mirea.practice.s23k0690; + +public class Complex { + private int real; + private int imaginary; + + public Complex(int real, int imaginary) { + this.real = real; + this.imaginary = imaginary; + } + + public int getReal() { + return real; + } + + public int getImaginary() { + return imaginary; + } + + @Override + public String toString() { + return real + " + " + imaginary + "i"; + } +} diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/ComplexAbstractFactory.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/ComplexAbstractFactory.java new file mode 100644 index 000000000..a91edbde1 --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/ComplexAbstractFactory.java @@ -0,0 +1,8 @@ +package ru.mirea.practice.s23k0690; + +public interface ComplexAbstractFactory { + + Complex createComplex(); + + Complex createComplex(int real, int imaginary); +} diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/ConcreteFactory.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/ConcreteFactory.java new file mode 100644 index 000000000..bcc1e1ee4 --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/ConcreteFactory.java @@ -0,0 +1,14 @@ +package ru.mirea.practice.s23k0690; + +public class ConcreteFactory implements ComplexAbstractFactory { + + @Override + public Complex createComplex() { + return new Complex(0, 0); + } + + @Override + public Complex createComplex(int real, int imaginary) { + return new Complex(real, imaginary); + } +} diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MagicalChair.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MagicalChair.java new file mode 100644 index 000000000..9bf6770e7 --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MagicalChair.java @@ -0,0 +1,8 @@ +package ru.mirea.practice.s23k0690; + +class MagicalChair implements Chair { + @Override + public void sit() { + System.out.println("Сидите на магическом стуле."); + } +} diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MagicalChairFactory.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MagicalChairFactory.java new file mode 100644 index 000000000..5c6256ef5 --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MagicalChairFactory.java @@ -0,0 +1,8 @@ +package ru.mirea.practice.s23k0690; + +class MagicalChairFactory extends ChairFactory { + @Override + public Chair createChair() { + return new MagicalChair(); + } +} diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MultifunctionalChair.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MultifunctionalChair.java new file mode 100644 index 000000000..f7feda88d --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MultifunctionalChair.java @@ -0,0 +1,8 @@ +package ru.mirea.practice.s23k0690; + +class MultifunctionalChair implements Chair { + @Override + public void sit() { + System.out.println("Сидите на многофункциональном стуле."); + } +} diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MultifunctionalChairFactory.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MultifunctionalChairFactory.java new file mode 100644 index 000000000..688c8a144 --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/MultifunctionalChairFactory.java @@ -0,0 +1,8 @@ +package ru.mirea.practice.s23k0690; + +class MultifunctionalChairFactory extends ChairFactory { + @Override + public Chair createChair() { + return new MultifunctionalChair(); + } +} diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Task1.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Task1.java new file mode 100644 index 000000000..89700c46d --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Task1.java @@ -0,0 +1,15 @@ +package ru.mirea.practice.s23k0690; + + +public abstract class Task1 { + public static void main(String[] args) { + ComplexAbstractFactory factory = new ConcreteFactory(); + + Complex defaultComplex = factory.createComplex(); + System.out.println("Def n: " + defaultComplex); + + Complex customComplex = factory.createComplex(2, 2); + System.out.println("Cut n: " + customComplex); + } +} + diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Task2.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Task2.java new file mode 100644 index 000000000..2db44193c --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/Task2.java @@ -0,0 +1,18 @@ +package ru.mirea.practice.s23k0690; + +public final class Task2 { + + private Task2() {} + + public static void main(String[] args) { + ChairFactory victorianFactory = new VictorianChairFactory(); + Client client1 = new Client(victorianFactory); + client1.sit(); + ChairFactory multifunctionalFactory = new MultifunctionalChairFactory(); + Client client2 = new Client(multifunctionalFactory); + client2.sit(); + ChairFactory magicalFactory = new MagicalChairFactory(); + Client client3 = new Client(magicalFactory); + client3.sit(); + } +} diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/VictorianChair.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/VictorianChair.java new file mode 100644 index 000000000..e6d641087 --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/VictorianChair.java @@ -0,0 +1,8 @@ +package ru.mirea.practice.s23k0690; + +class VictorianChair implements Chair { + @Override + public void sit() { + System.out.println("Сидите на викторианском стуле."); + } +} diff --git a/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/VictorianChairFactory.java b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/VictorianChairFactory.java new file mode 100644 index 000000000..670a33dc4 --- /dev/null +++ b/students/23K0690/23K0690-p24/src/main/java/ru/mirea/practice/s23k0690/VictorianChairFactory.java @@ -0,0 +1,8 @@ +package ru.mirea.practice.s23k0690; + +class VictorianChairFactory extends ChairFactory { + @Override + public Chair createChair() { + return new VictorianChair(); + } +} diff --git a/students/23K0690/23K0690-p25/pom.xml b/students/23K0690/23K0690-p25/pom.xml new file mode 100644 index 000000000..2dc887bec --- /dev/null +++ b/students/23K0690/23K0690-p25/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0690 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0690-p25 + 25 задание + diff --git a/students/23K0690/23K0690-p25/src/main/java/ru/mirea/practice/s23k0690/Task1.java b/students/23K0690/23K0690-p25/src/main/java/ru/mirea/practice/s23k0690/Task1.java new file mode 100644 index 000000000..8f83b587a --- /dev/null +++ b/students/23K0690/23K0690-p25/src/main/java/ru/mirea/practice/s23k0690/Task1.java @@ -0,0 +1,57 @@ +package ru.mirea.practice.s23k0690; + +import java.util.Scanner; +import java.util.regex.Pattern; + +public final class Task1 { + + private Task1() {} + + private String inputString; + + public void inputString() { + try (Scanner scanner = new Scanner(System.in)) { + System.out.print("Введите строку: "); + this.inputString = scanner.nextLine(); + } + } + + public String[] splitString(String regex) { + return inputString.split(regex); + } + + public void printElements(String[] elements) { + System.out.println("Разделенные элементы:"); + for (String element : elements) { + System.out.println(element); + } + } + + public void findMatches(String regex) { + Pattern pattern = Pattern.compile(regex); + String[] elements = splitString("\\s+"); + + System.out.println("Найденные совпадения:"); + for (String element : elements) { + if (pattern.matcher(element).matches()) { + System.out.println(element); + } + } + } + + public static void main(String[] args) { + Task1 stringManipulator = new Task1(); + + stringManipulator.inputString(); + + String[] elements = stringManipulator.splitString("\\s+"); + stringManipulator.printElements(elements); + + try (Scanner scanner = new Scanner(System.in)) { + System.out.print("Введите регулярное выражение для поиска совпадений: "); + String regex = scanner.nextLine(); + stringManipulator.findMatches(regex); + + } + } +} diff --git a/students/23K0690/23K0690-p25/src/main/java/ru/mirea/practice/s23k0690/Task4.java b/students/23K0690/23K0690-p25/src/main/java/ru/mirea/practice/s23k0690/Task4.java new file mode 100644 index 000000000..8c5abde55 --- /dev/null +++ b/students/23K0690/23K0690-p25/src/main/java/ru/mirea/practice/s23k0690/Task4.java @@ -0,0 +1,26 @@ +package ru.mirea.practice.s23k0690; + +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public final class Task4 { + + private Task4() {} + + public static void main(String[] args) { + try (Scanner scanner = new Scanner(System.in)) { + System.out.print("Введите текст: "); + String inputText = scanner.nextLine(); + String regex = "\\b\\d+\\b(?!\\s*\\+)"; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(inputText); + if (matcher.find()) { + System.out.println("В тексте есть цифры, за которыми не стоит знак «+»."); + } else { + System.out.println("Все цифры в тексте корректны."); + } + + } + } +} diff --git a/students/23K0690/23K0690-p26/pom.xml b/students/23K0690/23K0690-p26/pom.xml new file mode 100644 index 000000000..8d58eb8ed --- /dev/null +++ b/students/23K0690/23K0690-p26/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0690 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0690-p26 + 26 задание + diff --git a/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/MyArrayList.java b/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/MyArrayList.java new file mode 100644 index 000000000..e237e8b8d --- /dev/null +++ b/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/MyArrayList.java @@ -0,0 +1,43 @@ +package ru.mirea.practice.s23k0690; + +class MyArrayList implements MyList { + private Object[] elements; + private int size; + + public MyArrayList() { + elements = new Object[10]; + size = 0; + } + + @Override + public void add(T element) { + if (size >= elements.length) { + resize(); + } + elements[size++] = element; + } + + @Override + public T get(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); + } + return (T) elements[index]; + } + + @Override + public int size() { + return size; + } + + @Override + public MyListIterator iterator() { + return new MyListIterator<>(this); + } + + private void resize() { + Object[] newArray = new Object[elements.length * 2]; + System.arraycopy(elements, 0, newArray, 0, elements.length); + elements = newArray; + } +} diff --git a/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/MyList.java b/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/MyList.java new file mode 100644 index 000000000..1da9726d2 --- /dev/null +++ b/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/MyList.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s23k0690; + +interface MyList { + + void add(T element); + + T get(int index); + + int size(); + + MyListIterator iterator(); +} diff --git a/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/MyListIterator.java b/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/MyListIterator.java new file mode 100644 index 000000000..b62f83f81 --- /dev/null +++ b/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/MyListIterator.java @@ -0,0 +1,24 @@ +package ru.mirea.practice.s23k0690; + +import java.util.NoSuchElementException; + +class MyListIterator { + private MyArrayList list; + private int currentIndex; + + public MyListIterator(MyArrayList list) { + this.list = list; + this.currentIndex = 0; + } + + public boolean hasNext() { + return currentIndex < list.size(); + } + + public T next() { + if (!hasNext()) { + throw new NoSuchElementException("No more elements in the list."); + } + return list.get(currentIndex++); + } +} diff --git a/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/Task1.java b/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/Task1.java new file mode 100644 index 000000000..7bbf624fd --- /dev/null +++ b/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/Task1.java @@ -0,0 +1,36 @@ +package ru.mirea.practice.s23k0690; + +import java.util.Stack; + +public final class Task1 { + + private Task1() {} + + public static int[] invertArray(int[] array) { + Stack stack = new Stack<>(); + + for (int num : array) { + stack.push(num); + } + + for (int i = 0; i < array.length; i++) { + array[i] = stack.pop(); + } + + return array; + } + + public static void main(String[] args) { + int[] originalArray = {1, 2, 3, 4, 5}; + System.out.println("Исходный массив:"); + for (int num : originalArray) { + System.out.print(num + " "); + } + + int[] invertedArray = invertArray(originalArray); + System.out.println("\nИнвертированный массив:"); + for (int num : invertedArray) { + System.out.print(num + " "); + } + } +} diff --git a/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/Task2.java b/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/Task2.java new file mode 100644 index 000000000..d9059e3a9 --- /dev/null +++ b/students/23K0690/23K0690-p26/src/main/java/ru/mirea/practice/s23k0690/Task2.java @@ -0,0 +1,18 @@ +package ru.mirea.practice.s23k0690; + + +public final class Task2 { + + private Task2() {} + + public static void main(String[] args) { + MyArrayList myList = new MyArrayList<>(); + myList.add("Сигарета"); + myList.add("Банан"); + myList.add("Камень"); + MyListIterator iterator = myList.iterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + } +} diff --git a/students/23K0690/23K0690-p27/pom.xml b/students/23K0690/23K0690-p27/pom.xml new file mode 100644 index 000000000..dc359d1e8 --- /dev/null +++ b/students/23K0690/23K0690-p27/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0690 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0690-p27 + 27 задание + diff --git a/students/23K0690/23K0690-p27/src/main/java/ru/mirea/practice/s23k0690/HashTable.java b/students/23K0690/23K0690-p27/src/main/java/ru/mirea/practice/s23k0690/HashTable.java new file mode 100644 index 000000000..33a0deab3 --- /dev/null +++ b/students/23K0690/23K0690-p27/src/main/java/ru/mirea/practice/s23k0690/HashTable.java @@ -0,0 +1,71 @@ +package ru.mirea.practice.s23k0690; + +import java.util.LinkedList; + +class HashTable { + private static class Entry { + String key; + String value; + + Entry(String key, String value) { + this.key = key; + this.value = value; + } + } + + private LinkedList[] table; + private int size; + + public void hashtabInit(int capacity) { + table = new LinkedList[capacity]; + for (int i = 0; i < capacity; i++) { + table[i] = new LinkedList<>(); + } + size = 0; + } + + private int hashtabHash(String key) { + return Math.abs(key.hashCode() % table.length); + } + + public void hashtabAdd(String key, String value) { + int index = hashtabHash(key); + for (Entry entry : table[index]) { + if (entry.key.equals(key)) { + entry.value = value; + return; + } + } + table[index].add(new Entry(key, value)); + size++; + } + + public String hashtabLookup(String key) { + int index = hashtabHash(key); + for (Entry entry : table[index]) { + if (entry.key.equals(key)) { + return entry.value; + } + } + return null; + } + + public void hashtabDelete(String key) { + int index = hashtabHash(key); + Entry toRemove = null; + for (Entry entry : table[index]) { + if (entry.key.equals(key)) { + toRemove = entry; + break; + } + } + if (toRemove != null) { + table[index].remove(toRemove); + size--; + } + } + + public int size() { + return size; + } +} diff --git a/students/23K0690/23K0690-p27/src/main/java/ru/mirea/practice/s23k0690/Task1and2.java b/students/23K0690/23K0690-p27/src/main/java/ru/mirea/practice/s23k0690/Task1and2.java new file mode 100644 index 000000000..75bfa5e45 --- /dev/null +++ b/students/23K0690/23K0690-p27/src/main/java/ru/mirea/practice/s23k0690/Task1and2.java @@ -0,0 +1,34 @@ +package ru.mirea.practice.s23k0690; + +public final class Task1and2 { + + private Task1and2() {} + + public static void main(String[] args) { + HashTable hashTable = new HashTable(); + hashTable.hashtabInit(10); + hashTable.hashtabAdd("key1", "value1"); + hashTable.hashtabAdd("key2", "value2"); + hashTable.hashtabAdd("key3", "value3"); + hashTable.hashtabAdd("key4", "value4"); + hashTable.hashtabAdd("key5", "value5"); + hashTable.hashtabAdd("key6", "value6"); + hashTable.hashtabAdd("key7", "value7"); + hashTable.hashtabAdd("key8", "value8"); + hashTable.hashtabAdd("key9", "value9"); + hashTable.hashtabAdd("key10", "value10"); + + System.out.println("Проверка добавленных элементов:"); + for (int i = 1; i <= 10; i++) { + String key = "key" + i; + System.out.println(key + " : " + hashTable.hashtabLookup(key)); + } + + System.out.println("\nУдаление key5..."); + hashTable.hashtabDelete("key5"); + + System.out.println("Проверка значения для key5 после удаления: " + hashTable.hashtabLookup("key5")); //должно вернуть null + + System.out.println("Текущий размер хеш-таблицы: " + hashTable.size()); + } +} diff --git a/students/23K0690/23K0690-p28/pom.xml b/students/23K0690/23K0690-p28/pom.xml new file mode 100644 index 000000000..7ff0733d0 --- /dev/null +++ b/students/23K0690/23K0690-p28/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0690 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0690-p28 + 28 задание + diff --git a/students/23K0690/23K0690-p28/src/main/java/ru/mirea/practice/s23k0690/Main.java b/students/23K0690/23K0690-p28/src/main/java/ru/mirea/practice/s23k0690/Main.java new file mode 100644 index 000000000..e4323ce52 --- /dev/null +++ b/students/23K0690/23K0690-p28/src/main/java/ru/mirea/practice/s23k0690/Main.java @@ -0,0 +1,18 @@ +package ru.mirea.practice.s23k0690; + +import java.util.HashSet; +import java.util.TreeSet; + +public final class Main { + + private Main() {} + + public static void main(String[] args) { + HashSet hashSet = new HashSet<>(); + hashSet.add("Сигарета"); + hashSet.add("Банан"); + hashSet.add("Камень"); + TreeSet treeSet = new TreeSet<>(hashSet); + System.out.println("TreeSet: " + treeSet); + } +} diff --git a/students/23K0690/23K0690-p29/pom.xml b/students/23K0690/23K0690-p29/pom.xml new file mode 100644 index 000000000..1b4f0f66e --- /dev/null +++ b/students/23K0690/23K0690-p29/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0690 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0690-p29 + 29 задание + diff --git a/students/23K0690/23K0690-p29/src/main/java/ru/mirea/practice/s23k0690/Main.java b/students/23K0690/23K0690-p29/src/main/java/ru/mirea/practice/s23k0690/Main.java new file mode 100644 index 000000000..29aa2320c --- /dev/null +++ b/students/23K0690/23K0690-p29/src/main/java/ru/mirea/practice/s23k0690/Main.java @@ -0,0 +1,22 @@ +package ru.mirea.practice.s23k0690; + +import java.util.Scanner; + +public final class Main { + + private Main() {} + + public static void main(String[] args) { + try (Scanner con = new Scanner(System.in)) { + int n = con.nextInt(); + int res = 0; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + res += con.nextInt(); + } + } + res /= 2; + System.out.println(res); + } + } +} diff --git a/students/23K0690/23K0690-p30/pom.xml b/students/23K0690/23K0690-p30/pom.xml new file mode 100644 index 000000000..65dd159d4 --- /dev/null +++ b/students/23K0690/23K0690-p30/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0690 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0690-p30 + 30 задание + diff --git a/students/23K0690/23K0690-p30/src/main/java/ru/mirea/practice/s23k0690/HuffmanNode.java b/students/23K0690/23K0690-p30/src/main/java/ru/mirea/practice/s23k0690/HuffmanNode.java new file mode 100644 index 000000000..17cb00c97 --- /dev/null +++ b/students/23K0690/23K0690-p30/src/main/java/ru/mirea/practice/s23k0690/HuffmanNode.java @@ -0,0 +1,14 @@ +package ru.mirea.practice.s23k0690; + +public class HuffmanNode { + char ch; + int frequency; + HuffmanNode left; + HuffmanNode right; + + public HuffmanNode(char ch, int frequency) { + this.ch = ch; + this.frequency = frequency; + this.left = this.right = null; + } +} diff --git a/students/23K0690/23K0690-p30/src/main/java/ru/mirea/practice/s23k0690/Task1.java b/students/23K0690/23K0690-p30/src/main/java/ru/mirea/practice/s23k0690/Task1.java new file mode 100644 index 000000000..cbb3845b5 --- /dev/null +++ b/students/23K0690/23K0690-p30/src/main/java/ru/mirea/practice/s23k0690/Task1.java @@ -0,0 +1,127 @@ +package ru.mirea.practice.s23k0690; + +public final class Task1 { + + static class TreeNode { + int value; + TreeNode leftChild; + TreeNode rightChild; + + public TreeNode(int value) { + this.value = value; + leftChild = rightChild = null; + } + } + + private TreeNode rootNode; + + public Task1() { + rootNode = null; + } + + public void addNode(int value) { + rootNode = addNodeRecursively(rootNode, value); + } + + private TreeNode addNodeRecursively(TreeNode rootNode, int value) { + if (rootNode == null) { + rootNode = new TreeNode(value); + return rootNode; + } + + if (value < rootNode.value) { + rootNode.leftChild = addNodeRecursively(rootNode.leftChild, value); + } else if (value > rootNode.value) { + rootNode.rightChild = addNodeRecursively(rootNode.rightChild, value); + } + + return rootNode; + } + + public boolean contains(int value) { + return containsRecursively(rootNode, value); + } + + private boolean containsRecursively(TreeNode rootNode, int value) { + if (rootNode == null) { + return false; + } + if (value == rootNode.value) { + return true; + } + if (value < rootNode.value) { + return containsRecursively(rootNode.leftChild, value); + } else { + return containsRecursively(rootNode.rightChild, value); + } + } + + public void removeNode(int value) { + rootNode = removeNodeRecursively(rootNode, value); + } + + private TreeNode removeNodeRecursively(TreeNode rootNode, int value) { + if (rootNode == null) { + return rootNode; + } + + if (value < rootNode.value) { + rootNode.leftChild = removeNodeRecursively(rootNode.leftChild, value); + } else if (value > rootNode.value) { + rootNode.rightChild = removeNodeRecursively(rootNode.rightChild, value); + } else { + if (rootNode.leftChild == null) { + return rootNode.rightChild; + } else if (rootNode.rightChild == null) { + return rootNode.leftChild; + } + + rootNode.value = findMinValue(rootNode.rightChild); + rootNode.rightChild = removeNodeRecursively(rootNode.rightChild, rootNode.value); + } + + return rootNode; + } + + private int findMinValue(TreeNode rootNode) { + int minValue = rootNode.value; + while (rootNode.leftChild != null) { + rootNode = rootNode.leftChild; + minValue = rootNode.value; + } + return minValue; + } + + public void printInOrder() { + printInOrderRecursively(rootNode); + } + + private void printInOrderRecursively(TreeNode rootNode) { + if (rootNode != null) { + printInOrderRecursively(rootNode.leftChild); + System.out.print(rootNode.value + " "); + printInOrderRecursively(rootNode.rightChild); + } + } + + public static void main(String[] args) { + Task1 tree = new Task1(); + tree.addNode(10); + tree.addNode(20); + tree.addNode(30); + tree.addNode(40); + tree.addNode(50); + tree.addNode(60); + tree.addNode(70); + tree.addNode(80); + tree.addNode(90); + tree.addNode(100); + System.out.println("В порядке возрастания:"); + tree.printInOrder(); + System.out.println("\nЕсть ли 10?: " + tree.contains(10)); + System.out.println("Есть ли 0?: " + tree.contains(0)); + tree.removeNode(100); + System.out.println("После удаления 100:"); + tree.printInOrder(); + } +} diff --git a/students/23K0690/23K0690-p30/src/main/java/ru/mirea/practice/s23k0690/Task2.java b/students/23K0690/23K0690-p30/src/main/java/ru/mirea/practice/s23k0690/Task2.java new file mode 100644 index 000000000..93a4e8cfc --- /dev/null +++ b/students/23K0690/23K0690-p30/src/main/java/ru/mirea/practice/s23k0690/Task2.java @@ -0,0 +1,71 @@ +package ru.mirea.practice.s23k0690; + +import java.util.PriorityQueue; +import java.util.HashMap; +import java.util.Map; + +public final class Task2 { + + private Task2() {} + + public static void buildHuffmanTree(String text) { + Map frequencyMap = new HashMap<>(); + for (char ch : text.toCharArray()) { + frequencyMap.put(ch, frequencyMap.getOrDefault(ch, 0) + 1); + } + PriorityQueue priorityQueue = new PriorityQueue<>( + (a, b) -> a.frequency - b.frequency + ); + + for (Map.Entry entry : frequencyMap.entrySet()) { + priorityQueue.offer(new HuffmanNode(entry.getKey(), entry.getValue())); + } + + while (priorityQueue.size() > 1) { + HuffmanNode left = priorityQueue.poll(); + HuffmanNode right = priorityQueue.poll(); + + assert right != null; + HuffmanNode newNode = new HuffmanNode('\0', left.frequency + right.frequency); + newNode.left = left; + newNode.right = right; + + priorityQueue.offer(newNode); + } + + HuffmanNode root = priorityQueue.poll(); + + Map huffmanCodeMap = new HashMap<>(); + generateHuffmanCodes(root, "", huffmanCodeMap); + + for (Map.Entry entry : huffmanCodeMap.entrySet()) { + System.out.println(entry.getKey() + ": " + entry.getValue()); + } + + StringBuilder compressedText = new StringBuilder(); + for (char ch : text.toCharArray()) { + compressedText.append(huffmanCodeMap.get(ch)); + } + + System.out.println("Сжатый текст: " + compressedText.toString()); + } + + private static void generateHuffmanCodes(HuffmanNode root, String code, Map huffmanCodeMap) { + if (root == null) { + return; + } + + if (root.left == null && root.right == null) { + huffmanCodeMap.put(root.ch, code); + } + + generateHuffmanCodes(root.left, code + "0", huffmanCodeMap); + generateHuffmanCodes(root.right, code + "1", huffmanCodeMap); + } + + public static void main(String[] args) { + String text = "Hello, world!"; + buildHuffmanTree(text); + } +} + diff --git a/students/23K0690/23K0690-p30p2/pom.xml b/students/23K0690/23K0690-p30p2/pom.xml new file mode 100644 index 000000000..5d10f5161 --- /dev/null +++ b/students/23K0690/23K0690-p30p2/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0690 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0690-p30p2 + 30 задание 2 часть + diff --git a/students/23K0690/23K0690-p30p2/src/main/java/ru/mirea/practice/s23k0690/Task1.java b/students/23K0690/23K0690-p30p2/src/main/java/ru/mirea/practice/s23k0690/Task1.java new file mode 100644 index 000000000..256b35b55 --- /dev/null +++ b/students/23K0690/23K0690-p30p2/src/main/java/ru/mirea/practice/s23k0690/Task1.java @@ -0,0 +1,103 @@ +package ru.mirea.practice.s23k0690; + +public class Task1 { + + static class TreeNode { + int key; + + TreeNode leftChild; + + TreeNode rightChild; + + public TreeNode(int key) { + this.key = key; + leftChild = rightChild = null; + } + } + + private TreeNode root; + + public Task1() { + root = null; + } + + public void add(int key) { + root = addRecursively(root, key); + } + + private TreeNode addRecursively(TreeNode current, int key) { + if (current == null) { + return new TreeNode(key); + } + + if (key < current.key) { + current.leftChild = addRecursively(current.leftChild, key); + } else if (key > current.key) { + current.rightChild = addRecursively(current.rightChild, key); + } + return current; + } + + public void traverseInOrder() { + traverseInOrderRecursively(root); + } + + private void traverseInOrderRecursively(TreeNode current) { + if (current != null) { + traverseInOrderRecursively(current.leftChild); + System.out.print(current.key + " "); + traverseInOrderRecursively(current.rightChild); + } + } + + public void remove(int key) { + root = removeRecursively(root, key); + } + + private TreeNode removeRecursively(TreeNode current, int key) { + if (current == null) { + return current; + } + if (key < current.key) { + current.leftChild = removeRecursively(current.leftChild, key); + } else if (key > current.key) { + current.rightChild = removeRecursively(current.rightChild, key); + } else { + if (current.leftChild == null) { + return current.rightChild; + } else if (current.rightChild == null) { + return current.leftChild; + } + current.key = findMinValue(current.rightChild); + current.rightChild = removeRecursively(current.rightChild, current.key); + } + return current; + } + + private int findMinValue(TreeNode current) { + int minValue = current.key; + while (current.leftChild != null) { + minValue = current.leftChild.key; + current = current.leftChild; + } + return minValue; + } + + public void clear() { + root = null; + } + + public static void main(String[] args) { + Task1 tree = new Task1(); + int[] values = {10, 30, 20, 40, 60, 50, 80, 70, 90, 100}; + for (int value : values) { + tree.add(value); + } + tree.traverseInOrder(); + System.out.println(); + tree.remove(100); + tree.traverseInOrder(); + System.out.println(); + tree.clear(); + } +} diff --git a/students/23K0690/23K0690-p31/pom.xml b/students/23K0690/23K0690-p31/pom.xml new file mode 100644 index 000000000..5913b9f7d --- /dev/null +++ b/students/23K0690/23K0690-p31/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0690 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0690-p31 + 31 задание + diff --git a/students/23K0690/23K0690-p31/src/main/java/ru/mirea/practice/s23k0690/Node.java b/students/23K0690/23K0690-p31/src/main/java/ru/mirea/practice/s23k0690/Node.java new file mode 100644 index 000000000..ba9a79feb --- /dev/null +++ b/students/23K0690/23K0690-p31/src/main/java/ru/mirea/practice/s23k0690/Node.java @@ -0,0 +1,15 @@ +package ru.mirea.practice.s23k0690; + +public class Node { + int value; + Node left; + Node middle; + Node right; + + public Node(int value) { + this.value = value; + this.left = null; + this.middle = null; + this.right = null; + } +} diff --git a/students/23K0690/23K0690-p31/src/main/java/ru/mirea/practice/s23k0690/Task1.java b/students/23K0690/23K0690-p31/src/main/java/ru/mirea/practice/s23k0690/Task1.java new file mode 100644 index 000000000..6d494e226 --- /dev/null +++ b/students/23K0690/23K0690-p31/src/main/java/ru/mirea/practice/s23k0690/Task1.java @@ -0,0 +1,33 @@ +package ru.mirea.practice.s23k0690; + +public final class Task1 { + + private Task1() {} + + public static void printTree(Node node, int level) { + if (node == null) { + return; + } + + printTree(node.left, level + 1); + printTree(node.middle, level + 1); + printTree(node.right, level + 1); + + System.out.println("Знач: " + node.value + ", Ур: " + level); + } + + public static void main(String[] args) { + final Node root = new Node(1); + final Node node2 = new Node(3); + final Node node3 = new Node(2); + final Node node4 = new Node(4); + final Node node5 = new Node(6); + final Node node6 = new Node(5); + root.left = node2; + root.middle = node3; + root.right = node4; + node2.left = node5; + node2.right = node6; + printTree(root, 0); + } +} diff --git a/students/23K0690/23K0690-p32/pom.xml b/students/23K0690/23K0690-p32/pom.xml new file mode 100644 index 000000000..af06adb3e --- /dev/null +++ b/students/23K0690/23K0690-p32/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + 23K0690 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0690-p32 + 32 задание + diff --git a/students/23K0690/23K0690-p32/src/main/java/ru/mirea/practice/s23k0690/Task1.java b/students/23K0690/23K0690-p32/src/main/java/ru/mirea/practice/s23k0690/Task1.java new file mode 100644 index 000000000..c857dad95 --- /dev/null +++ b/students/23K0690/23K0690-p32/src/main/java/ru/mirea/practice/s23k0690/Task1.java @@ -0,0 +1,63 @@ +package ru.mirea.practice.s23k0690; + +import java.util.Arrays; + +public final class Task1 { + + private Task1() {} + + public static void generatePermutations(int n) { + int[] pA = new int[n]; + int[] dA = new int[n]; + + for (int i = 0; i < n; i++) { + pA[i] = i + 1; + dA[i] = -1; + } + + printPermutation(pA); + + while (true) { + int max = -1; + int maxIdx = -1; + + for (int i = 0; i < n; i++) { + if (dA[i] == -1 && i > 0 && pA[i] > pA[i - 1] || dA[i] == 1 && i < n - 1 && pA[i] < pA[i + 1]) { + if (pA[i] > max) { + max = pA[i]; + maxIdx = i; + } + } + } + + if (max == -1) { + break; + } + + dA[maxIdx] = -dA[maxIdx]; + + if (dA[maxIdx] == -1 && maxIdx > 0) { + swap(pA, maxIdx, maxIdx - 1); + } else if (dA[maxIdx] == 1 && maxIdx < n - 1) { + swap(pA, maxIdx, maxIdx + 1); + } + + printPermutation(pA); + } + } + + private static void swap(int[] permutationArray, int i, int j) { + int temp = permutationArray[i]; + permutationArray[i] = permutationArray[j]; + permutationArray[j] = temp; + } + + private static void printPermutation(int[] permutationArray) { + System.out.println(Arrays.toString(permutationArray)); + } + + public static void main(String[] args) { + int n = 3; + generatePermutations(n); + } +} diff --git a/students/23K0690/pom.xml b/students/23K0690/pom.xml index fd813f76f..d4e8a0762 100644 --- a/students/23K0690/pom.xml +++ b/students/23K0690/pom.xml @@ -34,5 +34,18 @@ 23K0690-p18 23K0690-p19 23K0690-p20 + 23K0690-p21 + 23K0690-p22 + 23K0690-p23 + 23K0690-p24 + 23K0690-p25 + 23K0690-p26 + 23K0690-p27 + 23K0690-p28 + 23K0690-p29 + 23K0690-p30 + 23K0690-p30p2 + 23K0690-p31 + 23K0690-p32