diff --git a/pom.xml b/pom.xml
index 3abccea2f..4ba02204e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -81,6 +81,7 @@
students/23K0186
students/23K0755
students/23K1292
+ students/23K0342
@@ -147,7 +148,7 @@
com.puppycrawl.tools
checkstyle
- 10.20.1
+ 10.19.0
diff --git a/students/23K0342/23K0342-p21/pom.xml b/students/23K0342/23K0342-p21/pom.xml
new file mode 100644
index 000000000..fb9c1f7d7
--- /dev/null
+++ b/students/23K0342/23K0342-p21/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0342
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0342-p21
+ Массивы
+
diff --git a/students/23K0342/23K0342-p21/src/main/java/ru/mirea/practice/s0000001/Converter.java b/students/23K0342/23K0342-p21/src/main/java/ru/mirea/practice/s0000001/Converter.java
new file mode 100644
index 000000000..338e888f0
--- /dev/null
+++ b/students/23K0342/23K0342-p21/src/main/java/ru/mirea/practice/s0000001/Converter.java
@@ -0,0 +1,21 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.Arrays;
+import java.util.List;
+
+public abstract class Converter {
+ public static List convertArrayToList(T[] array) {
+ return Arrays.asList(array);
+ }
+
+ public static void main(String[] args) {
+ String[] stringArray = {"a", "b", "c"};
+ List stringList = convertArrayToList(stringArray);
+ System.out.println("Список строк: " + stringList);
+
+ Integer[] intArray = {1, 2, 3};
+ List intList = convertArrayToList(intArray);
+ System.out.println("Список чисел: " + intList);
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p21/src/main/java/t2/Array.java b/students/23K0342/23K0342-p21/src/main/java/t2/Array.java
new file mode 100644
index 000000000..8b8ff02f6
--- /dev/null
+++ b/students/23K0342/23K0342-p21/src/main/java/t2/Array.java
@@ -0,0 +1,53 @@
+package ru.mirea.practice.s0000001.t2;
+
+public class Array {
+ private T[] elements;
+
+ public Array(T[] elements) {
+ this.elements = elements;
+ }
+
+ public T get(int index) {
+ if (index >= 0 && index < elements.length) {
+ return elements[index];
+ } else {
+ throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + elements.length);
+ }
+ }
+
+ public void set(int index, T element) {
+ if (index >= 0 && index < elements.length) {
+ elements[index] = element;
+ } else {
+ throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + elements.length);
+ }
+ }
+
+ public int size() {
+ return elements.length;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder("[");
+ for (int i = 0; i < elements.length; i++) {
+ sb.append(elements[i]);
+ if (i < elements.length - 1) {
+ sb.append(", ");
+ }
+ }
+ sb.append("]");
+ return sb.toString();
+ }
+
+ public static void main(String[] args) {
+ Integer[] intArray = {1, 2, 3, 4, 5};
+ Array intStorage = new Array<>(intArray);
+ System.out.println("Integer array: " + intStorage);
+
+ String[] stringArray = {"СТОЛ", "СТУЛ", "ЗОНТ"};
+ Array stringStorage = new Array<>(stringArray);
+ System.out.println("String array: " + stringStorage);
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p22/pom.xml b/students/23K0342/23K0342-p22/pom.xml
new file mode 100644
index 000000000..851a05274
--- /dev/null
+++ b/students/23K0342/23K0342-p22/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0342
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0342-p22
+ Массивы
+
diff --git a/students/23K0342/23K0342-p22/src/main/java/ru/mirea/practice/s0000001/Calculator.java b/students/23K0342/23K0342-p22/src/main/java/ru/mirea/practice/s0000001/Calculator.java
new file mode 100644
index 000000000..f7dd2a217
--- /dev/null
+++ b/students/23K0342/23K0342-p22/src/main/java/ru/mirea/practice/s0000001/Calculator.java
@@ -0,0 +1,63 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.Stack;
+
+public class Calculator {
+ private Stack stack;
+
+ public Calculator() {
+ stack = new Stack<>();
+ }
+
+ public double evaluate(String expression) {
+ stack.clear();
+ String[] tokens = expression.split(" ");
+ for (String token : tokens) {
+ if (isOperator(token)) {
+ if (stack.size() < 2) {
+ throw new ArrayIndexOutOfBoundsException("Ошибка: недостаточно данных для операции");
+ }
+ double b = stack.pop();
+ double a = stack.pop();
+ stack.push(applyOperator(a, b, token));
+ } else {
+ try {
+ stack.push(Double.parseDouble(token));
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException("Ошибка: неверный формат числа", e);
+ }
+ }
+ }
+ if (stack.size() != 1) {
+ throw new IllegalStateException("Ошибка: выражение некорректно");
+ }
+ return stack.pop();
+ }
+
+ private boolean isOperator(String token) {
+ return "+".equals(token) || "-".equals(token) || "*".equals(token) || "/".equals(token);
+ }
+
+ private double applyOperator(double a, double b, String operator) {
+ try {
+ switch (operator) {
+ case "+":
+ return a + b;
+ case "-":
+ return a - b;
+ case "*":
+ return a * b;
+ case "/":
+ if (b == 0) {
+ throw new ArithmeticException("Ошибка: деление на ноль");
+ }
+ return a / b;
+ default:
+ throw new IllegalArgumentException("Ошибка: неизвестная операция " + operator);
+ }
+ } catch (ArithmeticException | IllegalArgumentException e) {
+ throw e;
+ }
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p22/src/main/java/ru/mirea/practice/s0000001/Rpn.java b/students/23K0342/23K0342-p22/src/main/java/ru/mirea/practice/s0000001/Rpn.java
new file mode 100644
index 000000000..7e145a54c
--- /dev/null
+++ b/students/23K0342/23K0342-p22/src/main/java/ru/mirea/practice/s0000001/Rpn.java
@@ -0,0 +1,94 @@
+package ru.mirea.practice.s0000001;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.SwingUtilities;
+
+public class Rpn extends JFrame {
+ private JTextField display;
+ private Calculator calculator;
+
+ public Rpn() {
+ calculator = new Calculator();
+ display = new JTextField();
+ display.setEditable(false);
+ display.setFont(new Font("Arial", Font.PLAIN, 24));
+ setLayout(new BorderLayout());
+ add(display, BorderLayout.NORTH);
+
+ JPanel panel = new JPanel(new GridLayout(5, 4, 5, 5));
+ String[] buttons = {
+ "7", "8", "9", "/",
+ "4", "5", "6", "*",
+ "1", "2", "3", "-",
+ "0", ".", "=", "+",
+ "C", "Space", "", ""
+ };
+
+ for (String text : buttons) {
+ JButton button = new JButton(text);
+ button.setFont(new Font("Arial", Font.PLAIN, 18));
+ if ("Space".equals(text)) { // Литерал теперь идет первым
+ button.setPreferredSize(new Dimension(80, 50));
+ }
+ button.addActionListener(new ButtonClickListener());
+ panel.add(button);
+ }
+ add(panel, BorderLayout.CENTER);
+
+ setTitle("RPN Calculator");
+ setSize(400, 500);
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ setLocationRelativeTo(null);
+ }
+
+ private class ButtonClickListener implements ActionListener {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ String command = e.getActionCommand();
+ switch (command) {
+ case "=":
+ try {
+ double result = calculator.evaluate(display.getText().trim());
+ display.setText(String.valueOf(result));
+ } catch (ArithmeticException ex) {
+ display.setText("Ошибка: деление на ноль");
+ } catch (NumberFormatException ex) {
+ display.setText("Ошибка: неверный формат числа");
+ } catch (ArrayIndexOutOfBoundsException ex) {
+ display.setText("Ошибка: недостаточно данных для операции");
+ } catch (IllegalStateException ex) {
+ display.setText("Ошибка: выражение некорректно");
+ } catch (Exception ex) {
+ display.setText("Неизвестная ошибка: " + ex.getMessage());
+ }
+ break;
+ case "C":
+ display.setText("");
+ break;
+ case "Space":
+ display.setText(display.getText() + " ");
+ break;
+ default:
+ display.setText(display.getText() + command);
+ break;
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(() -> {
+ Rpn calc = new Rpn();
+ calc.setVisible(true);
+ });
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p23/pom.xml b/students/23K0342/23K0342-p23/pom.xml
new file mode 100644
index 000000000..e2c90628c
--- /dev/null
+++ b/students/23K0342/23K0342-p23/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0342
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0342-p23
+ Массивы
+
diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueue.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueue.java
new file mode 100644
index 000000000..83afade3a
--- /dev/null
+++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueue.java
@@ -0,0 +1,56 @@
+package ru.mirea.practice.s0000001.task1;
+
+public class ArrayQueue {
+ private Object[] elements;
+ private int size;
+ private int front;
+ private int rear;
+
+ public ArrayQueue() {
+ elements = new Object[10];
+ size = 0;
+ front = 0;
+ rear = 0;
+ }
+
+ public void enqueue(Object element) {
+ if (size == elements.length) {
+ throw new IllegalStateException("Queue is full");
+ }
+ elements[rear] = element;
+ rear = (rear + 1) % elements.length;
+ size++;
+ }
+
+ public Object element() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+ return elements[front];
+ }
+
+ public Object dequeue() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+ Object result = elements[front];
+ front = (front + 1) % elements.length;
+ size--;
+ return result;
+ }
+
+ public int size() {
+ return size;
+ }
+
+ public boolean isEmpty() {
+ return size == 0;
+ }
+
+ public void clear() {
+ size = 0;
+ front = 0;
+ rear = 0;
+ }
+}
+
diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdT.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdT.java
new file mode 100644
index 000000000..8ce6985cc
--- /dev/null
+++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdT.java
@@ -0,0 +1,57 @@
+package ru.mirea.practice.s0000001.task1;
+
+public class ArrayQueueAdT {
+ private Object[] elements;
+ private int size;
+ private int front;
+ private int rear;
+
+ public ArrayQueueAdT() {
+ elements = new Object[10];
+ size = 0;
+ front = 0;
+ rear = 0;
+ }
+
+ public void enqueue(Object element) {
+ if (size == elements.length) {
+ throw new IllegalStateException("Queue is full");
+ }
+ elements[rear] = element;
+ rear = (rear + 1) % elements.length;
+ size++;
+ }
+
+ public Object element() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+ return elements[front];
+ }
+
+ public Object dequeue() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+ Object result = elements[front];
+ front = (front + 1) % elements.length;
+ size--;
+ return result;
+ }
+
+ public int size() {
+ return size;
+ }
+
+ public boolean isEmpty() {
+ return size == 0;
+ }
+
+ public void clear() {
+ size = 0;
+ front = 0;
+ rear = 0;
+ }
+}
+//
+
diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdTtest.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdTtest.java
new file mode 100644
index 000000000..41af58adb
--- /dev/null
+++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdTtest.java
@@ -0,0 +1,21 @@
+package ru.mirea.practice.s0000001.task1;
+
+public abstract class ArrayQueueAdTtest {
+ public static void main(String[] args) {
+ ArrayQueueAdT queue = new ArrayQueueAdT();
+
+ queue.enqueue(1);
+ queue.enqueue(2);
+ queue.enqueue(3);
+
+ System.out.println(queue.dequeue());
+ System.out.println(queue.element());
+ System.out.println(queue.size());
+
+ queue.clear();
+ System.out.println(queue.isEmpty());
+ }
+}
+
+//
+
diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModule.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModule.java
new file mode 100644
index 000000000..657bde07e
--- /dev/null
+++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModule.java
@@ -0,0 +1,58 @@
+package ru.mirea.practice.s0000001.task1;
+
+public abstract class ArrayQueueModule {
+ private static final int DEFAULT_CAPACITY = 10;
+ private static Object[] elements;
+ private static int size;
+ private static int front;
+ private static int rear;
+
+ static {
+ elements = new Object[DEFAULT_CAPACITY];
+ size = 0;
+ front = 0;
+ rear = 0;
+ }
+
+ public static void enqueue(Object element) {
+ if (size == elements.length) {
+ throw new IllegalStateException("Queue is full");
+ }
+ elements[rear] = element;
+ rear = (rear + 1) % elements.length;
+ size++;
+ }
+
+ public static Object element() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+ return elements[front];
+ }
+
+ public static Object dequeue() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+ Object result = elements[front];
+ front = (front + 1) % elements.length;
+ size--;
+ return result;
+ }
+
+ public static int size() {
+ return size;
+ }
+
+ public static boolean isEmpty() {
+ return size == 0;
+ }
+
+ public static void clear() {
+ size = 0;
+ front = 0;
+ rear = 0;
+ }
+}
+//
+
diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModuleTest.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModuleTest.java
new file mode 100644
index 000000000..d29a9568e
--- /dev/null
+++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModuleTest.java
@@ -0,0 +1,18 @@
+package ru.mirea.practice.s0000001.task1;
+
+public abstract class ArrayQueueModuleTest {
+ public static void main(String[] args) {
+ ArrayQueueModule.enqueue(1);
+ ArrayQueueModule.enqueue(2);
+ ArrayQueueModule.enqueue(3);
+
+ System.out.println(ArrayQueueModule.dequeue()); // 1
+ System.out.println(ArrayQueueModule.element()); // 2
+ System.out.println(ArrayQueueModule.size()); // 2
+
+ ArrayQueueModule.clear();
+ System.out.println(ArrayQueueModule.isEmpty()); // true
+ }
+}
+//
+
diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueTest.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueTest.java
new file mode 100644
index 000000000..687725b63
--- /dev/null
+++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueTest.java
@@ -0,0 +1,20 @@
+package ru.mirea.practice.s0000001.task1;
+
+public abstract class ArrayQueueTest {
+ public static void main(String[] args) {
+ ArrayQueue queue = new ArrayQueue();
+
+ queue.enqueue(1);
+ queue.enqueue(2);
+ queue.enqueue(3);
+
+ System.out.println(queue.dequeue()); // 1
+ System.out.println(queue.element()); // 2
+ System.out.println(queue.size()); // 2
+
+ queue.clear();
+ System.out.println(queue.isEmpty()); // true
+ }
+}
+//
+
diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/AbstractQueue.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/AbstractQueue.java
new file mode 100644
index 000000000..2b0db4d59
--- /dev/null
+++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/AbstractQueue.java
@@ -0,0 +1,22 @@
+package ru.mirea.practice.s0000001.task2;
+
+public abstract class AbstractQueue implements Queue {
+ protected int size;
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return size == 0;
+ }
+
+ @Override
+ public void clear() {
+ size = 0;
+ }
+}
+//
+
diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/ArrayQueue.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/ArrayQueue.java
new file mode 100644
index 000000000..b1954112b
--- /dev/null
+++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/ArrayQueue.java
@@ -0,0 +1,47 @@
+package ru.mirea.practice.s0000001.task2;
+
+public class ArrayQueue extends AbstractQueue {
+ private Object[] elements;
+ private int front;
+ private int rear;
+
+ private static final int DEFAULT_CAPACITY = 10;
+
+ public ArrayQueue() {
+ elements = new Object[DEFAULT_CAPACITY];
+ size = 0;
+ front = 0;
+ rear = 0;
+ }
+
+ @Override
+ public void enqueue(Object element) {
+ if (size == elements.length) {
+ throw new IllegalStateException("Queue is full");
+ }
+ elements[rear] = element;
+ rear = (rear + 1) % elements.length;
+ size++;
+ }
+
+ @Override
+ public Object dequeue() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+
+ final Object result = elements[front];
+ front = (front + 1) % elements.length;
+ size--;
+ return result;
+ }
+
+ @Override
+ public Object element() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+ return elements[front];
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/ArrayQueueTest.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/ArrayQueueTest.java
new file mode 100644
index 000000000..27a5baf3c
--- /dev/null
+++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/ArrayQueueTest.java
@@ -0,0 +1,20 @@
+package ru.mirea.practice.s0000001.task2;
+
+public abstract class ArrayQueueTest {
+ public static void main(String[] args) {
+ ArrayQueue queue = new ArrayQueue();
+
+ queue.enqueue(1);
+ queue.enqueue(2);
+ queue.enqueue(3);
+
+ System.out.println(queue.dequeue());
+ System.out.println(queue.element());
+ System.out.println(queue.size());
+
+ queue.clear();
+ System.out.println(queue.isEmpty());
+ }
+}
+//
+
diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueue.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueue.java
new file mode 100644
index 000000000..7230f3f4f
--- /dev/null
+++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueue.java
@@ -0,0 +1,53 @@
+package ru.mirea.practice.s0000001.task2;
+
+public class LinkedQueue extends AbstractQueue {
+ private Node head;
+ private Node tail;
+
+ private static class Node {
+ Object value;
+ Node next;
+
+ Node(Object value) {
+ this.value = value;
+ }
+ }
+
+ @Override
+ public void enqueue(Object element) {
+ Node newNode = new Node(element);
+ if (tail == null) {
+ head = newNode;
+ tail = newNode;
+ } else {
+ tail.next = newNode;
+ tail = newNode;
+ }
+ size++;
+ }
+
+ @Override
+ public Object dequeue() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+
+ final Object result = head.value;
+ head = head.next;
+
+ if (head == null) {
+ tail = null;
+ }
+ size--;
+ return result;
+ }
+
+ @Override
+ public Object element() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+ return head.value;
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueueTest.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueueTest.java
new file mode 100644
index 000000000..9fd9e6bb9
--- /dev/null
+++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueueTest.java
@@ -0,0 +1,20 @@
+package ru.mirea.practice.s0000001.task2;
+
+public abstract class LinkedQueueTest {
+ public static void main(String[] args) {
+ LinkedQueue queue = new LinkedQueue();
+
+ queue.enqueue(1);
+ queue.enqueue(2);
+ queue.enqueue(3);
+
+ System.out.println(queue.dequeue());
+ System.out.println(queue.element());
+ System.out.println(queue.size());
+
+ queue.clear();
+ System.out.println(queue.isEmpty());
+ }
+}
+//
+
diff --git a/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/Queue.java b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/Queue.java
new file mode 100644
index 000000000..7afe843d0
--- /dev/null
+++ b/students/23K0342/23K0342-p23/src/main/java/ru/mirea/practice/s0000001/task2/Queue.java
@@ -0,0 +1,16 @@
+package ru.mirea.practice.s0000001.task2;
+
+public interface Queue {
+ void enqueue(Object element);
+
+ Object dequeue();
+
+ Object element();
+
+ int size();
+
+ boolean isEmpty();
+
+ void clear();
+}
+//
diff --git a/students/23K0342/23K0342-p24/pom.xml b/students/23K0342/23K0342-p24/pom.xml
new file mode 100644
index 000000000..f06f2d003
--- /dev/null
+++ b/students/23K0342/23K0342-p24/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0342
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0342-p24
+ Массивы
+
diff --git a/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/Complex.java b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/Complex.java
new file mode 100644
index 000000000..3a9ae3136
--- /dev/null
+++ b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/Complex.java
@@ -0,0 +1,26 @@
+package ru.mirea.practice.s0000001.task1;
+
+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/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/ComplexAbstractFactory.java b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/ComplexAbstractFactory.java
new file mode 100644
index 000000000..bb04879bc
--- /dev/null
+++ b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/ComplexAbstractFactory.java
@@ -0,0 +1,10 @@
+package ru.mirea.practice.s0000001.task1;
+
+public interface ComplexAbstractFactory {
+
+ Complex createComplex();
+
+ Complex createComplex(int real, int imaginary);
+}
+//
+
diff --git a/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/ConcreteFactory.java b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/ConcreteFactory.java
new file mode 100644
index 000000000..64ce90854
--- /dev/null
+++ b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/ConcreteFactory.java
@@ -0,0 +1,15 @@
+package ru.mirea.practice.s0000001.task1;
+
+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/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/Use.java b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/Use.java
new file mode 100644
index 000000000..fdfae3273
--- /dev/null
+++ b/students/23K0342/23K0342-p24/src/main/java/ru/mirea/practice/s0000001/task1/Use.java
@@ -0,0 +1,15 @@
+package ru.mirea.practice.s0000001.task1;
+
+public abstract class Use {
+ public static void main(String[] args) {
+ ComplexAbstractFactory factory = new ConcreteFactory();
+
+ Complex defaultComplex = factory.createComplex();
+ System.out.println("Default complex number: " + defaultComplex);
+
+ Complex customComplex = factory.createComplex(5, 3);
+ System.out.println("Custom complex number: " + customComplex);
+ }
+}
+//
+
diff --git a/students/23K0342/23K0342-p25/pom.xml b/students/23K0342/23K0342-p25/pom.xml
new file mode 100644
index 000000000..b5df35f91
--- /dev/null
+++ b/students/23K0342/23K0342-p25/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0342
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0342-p25
+ Массивы
+
diff --git a/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/DateValidator.java b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/DateValidator.java
new file mode 100644
index 000000000..42357f407
--- /dev/null
+++ b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/DateValidator.java
@@ -0,0 +1,23 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public abstract class DateValidator {
+ public static void main(String[] args) {
+ String[] dates = {
+ "29/02/2000", "30/04/2003", "01/01/2003",
+ "29/02/2001", "30-04-2003", "1/1/1899"
+ };
+
+ String dateRegex = "^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/(19|20)\\d{2}$";
+ Pattern pattern = Pattern.compile(dateRegex);
+
+ System.out.println("Проверка дат в формате dd/mm/yyyy:");
+ for (String date : dates) {
+ Matcher matcher = pattern.matcher(date);
+ System.out.println(date + ": " + matcher.matches());
+ }
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/EmailChecker.java b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/EmailChecker.java
new file mode 100644
index 000000000..3845ea36c
--- /dev/null
+++ b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/EmailChecker.java
@@ -0,0 +1,30 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.regex.Pattern;
+
+public abstract class EmailChecker {
+ private static final String EMAIL_REGEX =
+ "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
+
+ private static final Pattern EMAIL_PATTERN = Pattern.compile(EMAIL_REGEX);
+
+ public static boolean isValidEmail(String email) {
+ if (email == null) {
+ return false;
+ }
+ return EMAIL_PATTERN.matcher(email).matches();
+ }
+
+ public static void main(String[] args) {
+ String[] testEmails = {
+ "test@mail.ru",
+ "name.test@gmail.com",
+ "invalid-email@"
+ };
+
+ for (String email : testEmails) {
+ System.out.printf("Email: %s подходит ли: %b%n", email, isValidEmail(email));
+ }
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/Main.java b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/Main.java
new file mode 100644
index 000000000..6d75ba81e
--- /dev/null
+++ b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/Main.java
@@ -0,0 +1,13 @@
+package ru.mirea.practice.s0000001;
+
+public final class Main {
+
+ private Main() {
+
+ }
+
+ public static void main(String[] args) {
+ System.out.println("первая практическая работа!");
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/PriceExtractor.java b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/PriceExtractor.java
new file mode 100644
index 000000000..d4a142b5c
--- /dev/null
+++ b/students/23K0342/23K0342-p25/src/main/java/ru/mirea/practice/s0000001/PriceExtractor.java
@@ -0,0 +1,18 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public abstract class PriceExtractor {
+ public static void main(String[] args) {
+ String text = "Цены: 25.98 USD, 44 ERR, 0.004 EU, 10.00 RUB, 99.95 EUR";
+ Pattern pattern = Pattern.compile("\\b\\d{1,3}(\\.\\d{1,2})? (USD|RUB|EUR)\\b");
+ Matcher matcher = pattern.matcher(text);
+
+ System.out.println("Цены в USD, RUB, EUR:");
+ while (matcher.find()) {
+ System.out.println(matcher.group());
+ }
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p26/pom.xml b/students/23K0342/23K0342-p26/pom.xml
new file mode 100644
index 000000000..b67daa6bf
--- /dev/null
+++ b/students/23K0342/23K0342-p26/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0342
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0342-p26
+ Массивы
+
diff --git a/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/ArrayInverter.java b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/ArrayInverter.java
new file mode 100644
index 000000000..21fad10ec
--- /dev/null
+++ b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/ArrayInverter.java
@@ -0,0 +1,34 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.Stack;
+
+public abstract class ArrayInverter {
+ public static void invertArray(int[] array) {
+ Stack stack = new Stack<>();
+
+ for (int element : array) {
+ stack.push(element);
+ }
+
+ for (int i = 0; i < array.length; i++) {
+ array[i] = stack.pop();
+ }
+ }
+
+ public static void main(String[] args) {
+ int[] array = {1, 2, 3, 4, 5};
+
+ System.out.println("Исходный массив:");
+ for (int num : array) {
+ System.out.print(num + " ");
+ }
+
+ invertArray(array);
+
+ System.out.println("\nИнвертированный массив:");
+ for (int num : array) {
+ System.out.print(num + " ");
+ }
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/CustomList.java b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/CustomList.java
new file mode 100644
index 000000000..293cc2e51
--- /dev/null
+++ b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/CustomList.java
@@ -0,0 +1,53 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+public class CustomList implements Iterable {
+ private Object[] elements;
+ private int size;
+
+ public CustomList() {
+ elements = new Object[10];
+ size = 0;
+ }
+
+ public void add(T element) {
+ if (size == elements.length) {
+ resize();
+ }
+ elements[size++] = element;
+ }
+
+ private void resize() {
+ elements = Arrays.copyOf(elements, elements.length * 2);
+ }
+
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public Iterator iterator() {
+ return new CustomIterator();
+ }
+
+ private class CustomIterator implements Iterator {
+ private int currentIndex = 0;
+
+ @Override
+ public boolean hasNext() {
+ return currentIndex < size;
+ }
+
+ @Override
+ public T next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException("Нет больше элементов в итераторе.");
+ }
+ return (T) elements[currentIndex++];
+ }
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/Main.java b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/Main.java
new file mode 100644
index 000000000..6d75ba81e
--- /dev/null
+++ b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/Main.java
@@ -0,0 +1,13 @@
+package ru.mirea.practice.s0000001;
+
+public final class Main {
+
+ private Main() {
+
+ }
+
+ public static void main(String[] args) {
+ System.out.println("первая практическая работа!");
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/TestCustomList.java b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/TestCustomList.java
new file mode 100644
index 000000000..2b837d87d
--- /dev/null
+++ b/students/23K0342/23K0342-p26/src/main/java/ru/mirea/practice/s0000001/TestCustomList.java
@@ -0,0 +1,16 @@
+package ru.mirea.practice.s0000001;
+
+public abstract class TestCustomList {
+ public static void main(String[] args) {
+ CustomList list = new CustomList<>();
+ list.add("Первый");
+ list.add("Второй");
+ list.add("Третий");
+
+ System.out.println("Элементы списка:");
+ for (String item : list) {
+ System.out.println(item);
+ }
+ }
+}
+//
diff --git a/students/23K0342/23K0342-p27/pom.xml b/students/23K0342/23K0342-p27/pom.xml
new file mode 100644
index 000000000..d79f3e7ca
--- /dev/null
+++ b/students/23K0342/23K0342-p27/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0342
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0342-p27
+ Массивы
+
diff --git a/students/23K0342/23K0342-p27/src/main/java/ru/mirea/practice/s0000001/HashTab.java b/students/23K0342/23K0342-p27/src/main/java/ru/mirea/practice/s0000001/HashTab.java
new file mode 100644
index 000000000..3b99861e6
--- /dev/null
+++ b/students/23K0342/23K0342-p27/src/main/java/ru/mirea/practice/s0000001/HashTab.java
@@ -0,0 +1,67 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.LinkedList;
+
+public class HashTab {
+ private static final int SIZE = 10;
+ private LinkedList[] table;
+
+ private static class Entry {
+ String key;
+ String value;
+
+ Entry(String key, String value) {
+ this.key = key;
+ this.value = value;
+ }
+ }
+
+ public void hashtabInit() {
+ table = new LinkedList[SIZE];
+ for (int i = 0; i < SIZE; i++) {
+ table[i] = new LinkedList<>();
+ }
+ }
+
+ private int hashtabHash(String key) {
+ return Math.abs(key.hashCode() % SIZE);
+ }
+
+ 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));
+ }
+
+ 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);
+ table[index].removeIf(entry -> entry.key.equals(key));
+ }
+
+ public void printTable() {
+ for (int i = 0; i < SIZE; i++) {
+ System.out.print("Index " + i + ": ");
+ for (Entry entry : table[i]) {
+ System.out.print("[" + entry.key + " -> " + entry.value + "] ");
+ }
+ System.out.println();
+ }
+ }
+}
+//
+
diff --git a/students/23K0342/23K0342-p27/src/main/java/ru/mirea/practice/s0000001/Main.java b/students/23K0342/23K0342-p27/src/main/java/ru/mirea/practice/s0000001/Main.java
new file mode 100644
index 000000000..266fe472d
--- /dev/null
+++ b/students/23K0342/23K0342-p27/src/main/java/ru/mirea/practice/s0000001/Main.java
@@ -0,0 +1,24 @@
+package ru.mirea.practice.s0000001;
+
+public abstract class Main {
+ public static void main(String[] args) {
+ HashTab hashtable = new HashTab();
+ hashtable.hashtabInit();
+
+ hashtable.hashtabAdd("апельсин", "фрукты");
+ hashtable.hashtabAdd("огурец", "овощи");
+ hashtable.hashtabAdd("мандарин", "фрукты");
+
+ System.out.println("Поиск 'апельсин': " + hashtable.hashtabLookup("апельсин"));
+ System.out.println("Поиск 'огурец': " + hashtable.hashtabLookup("огурец"));
+ System.out.println("Поиск 'мандарин': " + hashtable.hashtabLookup("мандарин"));
+
+ hashtable.printTable();
+
+ hashtable.hashtabDelete("огурец");
+ System.out.println("После удаления 'огурец':");
+ hashtable.printTable();
+ }
+}
+//
+
diff --git a/students/23K0342/23K0342-p28/pom.xml b/students/23K0342/23K0342-p28/pom.xml
new file mode 100644
index 000000000..231991c57
--- /dev/null
+++ b/students/23K0342/23K0342-p28/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0342
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0342-p28
+ Массивы
+
diff --git a/students/23K0342/23K0342-p28/src/main/java/ru/mirea/practice/s0000001/Main.java b/students/23K0342/23K0342-p28/src/main/java/ru/mirea/practice/s0000001/Main.java
new file mode 100644
index 000000000..499aa4a80
--- /dev/null
+++ b/students/23K0342/23K0342-p28/src/main/java/ru/mirea/practice/s0000001/Main.java
@@ -0,0 +1,23 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.HashSet;
+import java.util.TreeSet;
+
+public abstract class Main {
+ public static void main(String[] args) {
+ HashSet hashSet = new HashSet<>();
+ hashSet.add("апельсин");
+ hashSet.add("манадрин");
+ hashSet.add("груша");
+ hashSet.add("лимон");
+
+ TreeSet treeSet = new TreeSet<>(hashSet);
+
+ System.out.println("Элементы TreeSet (упорядочены):");
+ for (String item : treeSet) {
+ System.out.println(item);
+ }
+ }
+}
+//
+
diff --git a/students/23K0342/23K0342-p29/pom.xml b/students/23K0342/23K0342-p29/pom.xml
new file mode 100644
index 000000000..28880901c
--- /dev/null
+++ b/students/23K0342/23K0342-p29/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0342
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0342-p29
+ Массивы
+
diff --git a/students/23K0342/23K0342-p29/src/main/java/ru/mirea/practice/s0000001/Milky.java b/students/23K0342/23K0342-p29/src/main/java/ru/mirea/practice/s0000001/Milky.java
new file mode 100644
index 000000000..41c50173f
--- /dev/null
+++ b/students/23K0342/23K0342-p29/src/main/java/ru/mirea/practice/s0000001/Milky.java
@@ -0,0 +1,37 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.Scanner;
+
+public abstract class Milky {
+ public static void main(String[] args) {
+ try (Scanner scanner = new Scanner(System.in)) {
+ int n = scanner.nextInt();
+
+ if (n == 0) {
+ System.out.println(0);
+ return;
+ }
+
+ int[][] matrix = new int[n][n];
+
+ for (int i = 0; i < n; i++) {
+ for (int j = 0; j < n; j++) {
+ matrix[i][j] = scanner.nextInt();
+ }
+ }
+
+ int roadCount = 0;
+ for (int i = 0; i < n; i++) {
+ for (int j = i + 1; j < n; j++) {
+ if (matrix[i][j] == 1) {
+ roadCount++;
+ }
+ }
+ }
+
+ System.out.println(roadCount);
+ }
+ }
+}
+//
+
diff --git a/students/23K0342/23K0342-p30_1/pom.xml b/students/23K0342/23K0342-p30_1/pom.xml
new file mode 100644
index 000000000..caa68a471
--- /dev/null
+++ b/students/23K0342/23K0342-p30_1/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0342
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0342-p30_1
+ Массивы
+
diff --git a/students/23K0342/23K0342-p30_1/src/main/java/ru/mirea/practice/s0000001/BinaryTree.java b/students/23K0342/23K0342-p30_1/src/main/java/ru/mirea/practice/s0000001/BinaryTree.java
new file mode 100644
index 000000000..bcd210977
--- /dev/null
+++ b/students/23K0342/23K0342-p30_1/src/main/java/ru/mirea/practice/s0000001/BinaryTree.java
@@ -0,0 +1,56 @@
+package ru.mirea.practice.s0000001;
+
+class BinaryTree {
+ TreeNode root;
+
+ public int height(TreeNode node) {
+ if (node == null) {
+ return 0;
+ } else {
+ int leftHeight = height(node.left);
+ int rightHeight = height(node.right);
+ return Math.max(leftHeight, rightHeight) + 1;
+ }
+ }
+
+ public void reverse(TreeNode node) {
+ if (node == null) {
+ return;
+ }
+ TreeNode temp = node.left;
+ node.left = node.right;
+ node.right = temp;
+
+ reverse(node.left);
+ reverse(node.right);
+ }
+
+ public boolean lookup(TreeNode node, int target) {
+ if (node == null) {
+ return false;
+ }
+ if (node.data == target) {
+ return true;
+ }
+ return target < node.data ? lookup(node.left, target) : lookup(node.right, target);
+ }
+
+ public int size(TreeNode node) {
+ if (node == null) {
+ return 0;
+ }
+ return size(node.left) + 1 + size(node.right);
+ }
+
+ public boolean sameTree(TreeNode a, TreeNode b) {
+ if (a == null && b == null) {
+ return true;
+ }
+ if (a == null || b == null) {
+ return false;
+ }
+ return a.data == b.data && sameTree(a.left, b.left) && sameTree(a.right, b.right);
+ }
+}
+//
+
diff --git a/students/23K0342/23K0342-p30_1/src/main/java/ru/mirea/practice/s0000001/TreeNode.java b/students/23K0342/23K0342-p30_1/src/main/java/ru/mirea/practice/s0000001/TreeNode.java
new file mode 100644
index 000000000..65d58fc9c
--- /dev/null
+++ b/students/23K0342/23K0342-p30_1/src/main/java/ru/mirea/practice/s0000001/TreeNode.java
@@ -0,0 +1,14 @@
+package ru.mirea.practice.s0000001;
+
+class TreeNode {
+ int data;
+ TreeNode left;
+ TreeNode right;
+
+ public TreeNode(int item) {
+ data = item;
+ left = right = null;
+ }
+}
+
+//
diff --git a/students/23K0342/pom.xml b/students/23K0342/pom.xml
index 8a36aecc5..cb27256fa 100644
--- a/students/23K0342/pom.xml
+++ b/students/23K0342/pom.xml
@@ -33,6 +33,17 @@
23K0342-p18
23K0342-p19
23K0342-p20
+ 23K0342-p22
+ 23K0342-p21
+ 23K0342-p23
+ 23K0342-p24
+ 23K0342-p25
+ 23K0342-p26
+ 23K0342-p27
+ 23K0342-p28
+ 23K0342-p29
+ 23K0342-p30_1
+