diff --git a/students/23K9901/23K9901-p21/pom.xml b/students/23K9901/23K9901-p21/pom.xml
new file mode 100644
index 000000000..ad9023eba
--- /dev/null
+++ b/students/23K9901/23K9901-p21/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K9901
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K9901-p21
+ Второе задание
+
diff --git a/students/23K9901/23K9901-p21/src/main/java/ru/mirea/practice/s0000001/ArrayElementGetter.java b/students/23K9901/23K9901-p21/src/main/java/ru/mirea/practice/s0000001/ArrayElementGetter.java
new file mode 100644
index 000000000..6e3388f15
--- /dev/null
+++ b/students/23K9901/23K9901-p21/src/main/java/ru/mirea/practice/s0000001/ArrayElementGetter.java
@@ -0,0 +1,16 @@
+package ru.mirea.practice.s0000001;
+
+public class ArrayElementGetter {
+ private T[] array;
+
+ public ArrayElementGetter(T[] array) {
+ this.array = array;
+ }
+
+ public T getElementByIndex(int index) {
+ if (index < 0 || index >= array.length) {
+ throw new IndexOutOfBoundsException("Invalid index: " + index);
+ }
+ return array[index];
+ }
+}
diff --git a/students/23K9901/23K9901-p21/src/main/java/ru/mirea/practice/s0000001/Main.java b/students/23K9901/23K9901-p21/src/main/java/ru/mirea/practice/s0000001/Main.java
new file mode 100644
index 000000000..0630592f0
--- /dev/null
+++ b/students/23K9901/23K9901-p21/src/main/java/ru/mirea/practice/s0000001/Main.java
@@ -0,0 +1,13 @@
+package ru.mirea.practice.s0000001;
+
+abstract class Main {
+ public static void main(String[] args) {
+ Integer[] numbers = {10, 20, 30, 40, 50};
+ ArrayElementGetter intGetter = new ArrayElementGetter<>(numbers);
+ System.out.println("Элемент по индексу 2: " + intGetter.getElementByIndex(2));
+
+ String[] words = {"apple", "banana", "cherry"};
+ ArrayElementGetter stringGetter = new ArrayElementGetter<>(words);
+ System.out.println("Элемент по индексу 1: " + stringGetter.getElementByIndex(1));
+ }
+}
diff --git a/students/23K9901/23K9901-p22/pom.xml b/students/23K9901/23K9901-p22/pom.xml
new file mode 100644
index 000000000..95d6c0920
--- /dev/null
+++ b/students/23K9901/23K9901-p22/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K9901
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K9901-p22
+ Второе задание
+
diff --git a/students/23K9901/23K9901-p22/src/main/java/ru/mirea/practice/s0000001/ArrayElementGetter.java b/students/23K9901/23K9901-p22/src/main/java/ru/mirea/practice/s0000001/ArrayElementGetter.java
new file mode 100644
index 000000000..6e3388f15
--- /dev/null
+++ b/students/23K9901/23K9901-p22/src/main/java/ru/mirea/practice/s0000001/ArrayElementGetter.java
@@ -0,0 +1,16 @@
+package ru.mirea.practice.s0000001;
+
+public class ArrayElementGetter {
+ private T[] array;
+
+ public ArrayElementGetter(T[] array) {
+ this.array = array;
+ }
+
+ public T getElementByIndex(int index) {
+ if (index < 0 || index >= array.length) {
+ throw new IndexOutOfBoundsException("Invalid index: " + index);
+ }
+ return array[index];
+ }
+}
diff --git a/students/23K9901/23K9901-p22/src/main/java/ru/mirea/practice/s0000001/Main3.java b/students/23K9901/23K9901-p22/src/main/java/ru/mirea/practice/s0000001/Main3.java
new file mode 100644
index 000000000..f722d2b5f
--- /dev/null
+++ b/students/23K9901/23K9901-p22/src/main/java/ru/mirea/practice/s0000001/Main3.java
@@ -0,0 +1,13 @@
+package ru.mirea.practice.s0000001;
+
+abstract class Main3 {
+ public static void main(String[] args) {
+ Integer[] numbers = {10, 20, 30, 40, 50};
+ ArrayElementGetter intGetter = new ArrayElementGetter<>(numbers);
+ System.out.println("Элемент по индексу 2: " + intGetter.getElementByIndex(2));
+
+ String[] words = {"apple", "banana", "cherry"};
+ ArrayElementGetter stringGetter = new ArrayElementGetter<>(words);
+ System.out.println("Элемент по индексу 1: " + stringGetter.getElementByIndex(1));
+ }
+}
diff --git a/students/23K9901/23K9901-p23/pom.xml b/students/23K9901/23K9901-p23/pom.xml
new file mode 100644
index 000000000..f289dd42f
--- /dev/null
+++ b/students/23K9901/23K9901-p23/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K9901
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K9901-p23
+ Второе задание
+
diff --git a/students/23K9901/23K9901-p23/src/main/java/ru/mirea/practice/s0000001/Main.java b/students/23K9901/23K9901-p23/src/main/java/ru/mirea/practice/s0000001/Main.java
new file mode 100644
index 000000000..464ad6012
--- /dev/null
+++ b/students/23K9901/23K9901-p23/src/main/java/ru/mirea/practice/s0000001/Main.java
@@ -0,0 +1,9 @@
+package ru.mirea.practice.s0000001;
+
+abstract class Main {
+ public static void main(String[] args) {
+ String rpnExpression = "3 4 + 2 * 7 /";
+ double result = RpnCalculator.calculate(rpnExpression);
+ System.out.println("Результат: " + result);
+ }
+}
diff --git a/students/23K9901/23K9901-p23/src/main/java/ru/mirea/practice/s0000001/RpnCalculator.java b/students/23K9901/23K9901-p23/src/main/java/ru/mirea/practice/s0000001/RpnCalculator.java
new file mode 100644
index 000000000..75a82db17
--- /dev/null
+++ b/students/23K9901/23K9901-p23/src/main/java/ru/mirea/practice/s0000001/RpnCalculator.java
@@ -0,0 +1,47 @@
+package ru.mirea.practice.s0000001;
+
+
+
+import java.util.Stack;
+
+abstract class RpnCalculator {
+ public static double calculate(String expression) {
+ Stack stack = new Stack<>();
+ String[] tokens = expression.split("\\s+");
+
+ for (String token : tokens) {
+ if (isOperator(token)) {
+ double b = stack.pop();
+ double a = stack.pop();
+ stack.push(applyOperation(a, b, token));
+ } else {
+ stack.push(Double.parseDouble(token));
+ }
+ }
+
+ return stack.pop();
+ }
+
+ private static boolean isOperator(String token) {
+ return "+".equals(token) || "-".equals(token) || "*".equals(token) || "/".equals(token);
+ }
+
+ private static double applyOperation(double a, double b, String operator) {
+ 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);
+ }
+ }
+}
+
diff --git a/students/23K9901/23K9901-p24/pom.xml b/students/23K9901/23K9901-p24/pom.xml
new file mode 100644
index 000000000..f1a72bbdb
--- /dev/null
+++ b/students/23K9901/23K9901-p24/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K9901
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K9901-p24
+ Второе задание
+
diff --git a/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/AbstractQueue.java b/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/AbstractQueue.java
new file mode 100644
index 000000000..1d8676f8b
--- /dev/null
+++ b/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/AbstractQueue.java
@@ -0,0 +1,15 @@
+package ru.mirea.practice.s0000001;
+
+public abstract class AbstractQueue implements Queue {
+ protected int size = 0;
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return size == 0;
+ }
+}
diff --git a/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/ArrayQueue.java b/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/ArrayQueue.java
new file mode 100644
index 000000000..cd41b3a79
--- /dev/null
+++ b/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/ArrayQueue.java
@@ -0,0 +1,58 @@
+package ru.mirea.practice.s0000001;
+
+public class ArrayQueue extends AbstractQueue {
+ private Object[] elements = new Object[10];
+ private int head = 0;
+ private int tail = 0;
+
+ @Override
+ public void enqueue(Object element) {
+ if (element == null) {
+ throw new IllegalArgumentException("Null elements are not allowed");
+ }
+ ensureCapacity(size + 1);
+ elements[tail] = element;
+ tail = (tail + 1) % elements.length;
+ size++;
+ }
+
+ @Override
+ public Object element() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+ return elements[head];
+ }
+
+ @Override
+ public Object dequeue() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+ final Object result = elements[head];
+ elements[head] = null;
+ head = (head + 1) % elements.length;
+ size--;
+ return result;
+ }
+
+ @Override
+ public void clear() {
+ elements = new Object[10];
+ head = 0;
+ tail = 0;
+ size = 0;
+ }
+
+ private void ensureCapacity(int capacity) {
+ if (capacity > elements.length) {
+ Object[] newArray = new Object[2 * elements.length];
+ for (int i = 0; i < size; i++) {
+ newArray[i] = elements[(head + i) % elements.length];
+ }
+ elements = newArray;
+ head = 0;
+ tail = size;
+ }
+ }
+}
diff --git a/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/LinkedQueue.java b/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/LinkedQueue.java
new file mode 100644
index 000000000..f610f3fd7
--- /dev/null
+++ b/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/LinkedQueue.java
@@ -0,0 +1,60 @@
+package ru.mirea.practice.s0000001;
+
+public class LinkedQueue extends AbstractQueue {
+ private static class Node {
+ Object value;
+ Node next;
+
+ Node(Object value, Node next) {
+ this.value = value;
+ this.next = next;
+ }
+ }
+
+ private Node head;
+ private Node tail;
+
+ @Override
+ public void enqueue(Object element) {
+ if (element == null) {
+ throw new IllegalArgumentException("Null elements are not allowed");
+ }
+ Node newNode = new Node(element, null);
+ if (isEmpty()) {
+ head = newNode;
+ } else {
+ tail.next = newNode;
+ }
+ tail = newNode;
+ size++;
+ }
+
+ @Override
+ public Object element() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+ return head.value;
+ }
+
+ @Override
+ public Object dequeue() {
+ if (isEmpty()) {
+ throw new IllegalStateException("Queue is empty");
+ }
+ final Object value = head.value;
+ head = head.next;
+ if (head == null) {
+ tail = null;
+ }
+ size--;
+ return value;
+ }
+
+ @Override
+ public void clear() {
+ head = null;
+ tail = null;
+ size = 0;
+ }
+}
diff --git a/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/Main.java b/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/Main.java
new file mode 100644
index 000000000..dcd9156d5
--- /dev/null
+++ b/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/Main.java
@@ -0,0 +1,25 @@
+package ru.mirea.practice.s0000001;
+
+abstract class Main {
+ public static void main(String[] args) {
+ Queue arrayQueue = new ArrayQueue();
+ Queue linkedQueue = new LinkedQueue();
+
+ testQueue(arrayQueue);
+ testQueue(linkedQueue);
+ }
+
+ private static void testQueue(Queue queue) {
+ queue.enqueue(1);
+ queue.enqueue(2);
+ queue.enqueue(3);
+
+ System.out.println("First element: " + queue.element());
+ System.out.println("Dequeued: " + queue.dequeue());
+ System.out.println("Size: " + queue.size());
+ System.out.println("Is empty: " + queue.isEmpty());
+
+ queue.clear();
+ System.out.println("Cleared. Is empty: " + queue.isEmpty());
+ }
+}
diff --git a/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/Queue.java b/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/Queue.java
new file mode 100644
index 000000000..130b67706
--- /dev/null
+++ b/students/23K9901/23K9901-p24/src/main/java/ru/mirea/practice/s0000001/Queue.java
@@ -0,0 +1,16 @@
+package ru.mirea.practice.s0000001;
+
+public interface Queue {
+
+ void enqueue(Object element);
+
+ Object element();
+
+ Object dequeue();
+
+ int size();
+
+ boolean isEmpty();
+
+ void clear();
+}
diff --git a/students/23K9901/23K9901-p25/pom.xml b/students/23K9901/23K9901-p25/pom.xml
new file mode 100644
index 000000000..e2a576e80
--- /dev/null
+++ b/students/23K9901/23K9901-p25/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K9901
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K9901-p25
+ Второе задание
+
diff --git a/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/Chair.java b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/Chair.java
new file mode 100644
index 000000000..fda48a5d6
--- /dev/null
+++ b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/Chair.java
@@ -0,0 +1,5 @@
+package ru.mirea.practice.s0000001;
+
+public interface Chair {
+ void sit();
+}
diff --git a/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/ChairFactory.java b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/ChairFactory.java
new file mode 100644
index 000000000..3a5321d1d
--- /dev/null
+++ b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/ChairFactory.java
@@ -0,0 +1,10 @@
+package ru.mirea.practice.s0000001;
+
+public interface ChairFactory {
+
+ VictorianChair createVictorianChair(int age);
+
+ MultifunctionalChair createMultifunctionalChair();
+
+ MagicChair createMagicChair();
+}
diff --git a/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/Client.java b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/Client.java
new file mode 100644
index 000000000..83dfb8a3b
--- /dev/null
+++ b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/Client.java
@@ -0,0 +1,7 @@
+package ru.mirea.practice.s0000001;
+
+public class Client {
+ public void sit(Chair chair) {
+ chair.sit();
+ }
+}
diff --git a/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/ConcreteChairFactory.java b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/ConcreteChairFactory.java
new file mode 100644
index 000000000..25667ad9d
--- /dev/null
+++ b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/ConcreteChairFactory.java
@@ -0,0 +1,18 @@
+package ru.mirea.practice.s0000001;
+
+public class ConcreteChairFactory implements ChairFactory {
+ @Override
+ public VictorianChair createVictorianChair(int age) {
+ return new VictorianChair(age);
+ }
+
+ @Override
+ public MultifunctionalChair createMultifunctionalChair() {
+ return new MultifunctionalChair();
+ }
+
+ @Override
+ public MagicChair createMagicChair() {
+ return new MagicChair();
+ }
+}
diff --git a/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/MagicChair.java b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/MagicChair.java
new file mode 100644
index 000000000..800701f55
--- /dev/null
+++ b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/MagicChair.java
@@ -0,0 +1,12 @@
+package ru.mirea.practice.s0000001;
+
+public class MagicChair implements Chair {
+ @Override
+ public void sit() {
+ System.out.println("Вы сидите на магическом стуле.");
+ }
+
+ public void doMagic() {
+ System.out.println("Магический стул выполняет магию.");
+ }
+}
diff --git a/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/Main.java b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/Main.java
new file mode 100644
index 000000000..0d839ae95
--- /dev/null
+++ b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/Main.java
@@ -0,0 +1,19 @@
+package ru.mirea.practice.s0000001;
+
+abstract class Main {
+ public static void main(String[] args) {
+ ChairFactory factory = new ConcreteChairFactory();
+ Client client = new Client();
+
+ Chair victorianChair = factory.createVictorianChair(100);
+ client.sit(victorianChair);
+
+ MultifunctionalChair multifunctionalChair = factory.createMultifunctionalChair();
+ client.sit(multifunctionalChair);
+ multifunctionalChair.transform();
+
+ MagicChair magicChair = factory.createMagicChair();
+ client.sit(magicChair);
+ magicChair.doMagic();
+ }
+}
diff --git a/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/MultifunctionalChair.java b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/MultifunctionalChair.java
new file mode 100644
index 000000000..86ea248ce
--- /dev/null
+++ b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/MultifunctionalChair.java
@@ -0,0 +1,12 @@
+package ru.mirea.practice.s0000001;
+
+public class MultifunctionalChair implements Chair {
+ @Override
+ public void sit() {
+ System.out.println("Вы сидите на многофункциональном стуле.");
+ }
+
+ public void transform() {
+ System.out.println("Многофункциональный стул трансформируется в кровать.");
+ }
+}
diff --git a/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/VictorianChair.java b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/VictorianChair.java
new file mode 100644
index 000000000..8c9e8ff42
--- /dev/null
+++ b/students/23K9901/23K9901-p25/src/main/java/ru/mirea/practice/s0000001/VictorianChair.java
@@ -0,0 +1,18 @@
+package ru.mirea.practice.s0000001;
+
+public class VictorianChair implements Chair {
+ private final int age;
+
+ public VictorianChair(int age) {
+ this.age = age;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ @Override
+ public void sit() {
+ System.out.println("Вы сидите на викторианском стуле, которому " + age + " лет.");
+ }
+}
diff --git a/students/23K9901/23K9901-p26/pom.xml b/students/23K9901/23K9901-p26/pom.xml
new file mode 100644
index 000000000..9c62dd6ab
--- /dev/null
+++ b/students/23K9901/23K9901-p26/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K9901
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K9901-p26
+ Второе задание
+
diff --git a/students/23K9901/23K9901-p26/src/main/java/ru/mirea/practice/s0000001/RegexTest.java b/students/23K9901/23K9901-p26/src/main/java/ru/mirea/practice/s0000001/RegexTest.java
new file mode 100644
index 000000000..accff7b80
--- /dev/null
+++ b/students/23K9901/23K9901-p26/src/main/java/ru/mirea/practice/s0000001/RegexTest.java
@@ -0,0 +1,15 @@
+package ru.mirea.practice.s0000001;
+
+abstract class RegexTest {
+ public static void main(String[] args) {
+ String regex = "^abcdefghijklmnopqrstuv18340$";
+
+ String correctString = "abcdefghijklmnopqrstuv18340";
+ String incorrectString1 = "abcdefghijklmnoasdfasdpqrstuv18340";
+ String incorrectString2 = "abcdefghijklmnopqrstuv18340extra";
+
+ System.out.println(correctString.matches(regex));
+ System.out.println(incorrectString1.matches(regex));
+ System.out.println(incorrectString2.matches(regex));
+ }
+}
diff --git a/students/23K9901/23K9901-p27/pom.xml b/students/23K9901/23K9901-p27/pom.xml
new file mode 100644
index 000000000..5ba582b6b
--- /dev/null
+++ b/students/23K9901/23K9901-p27/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K9901
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K9901-p27
+ Второе задание
+
diff --git a/students/23K9901/23K9901-p27/src/main/java/ru/mirea/practice/s0000001/CustomListIterator.java b/students/23K9901/23K9901-p27/src/main/java/ru/mirea/practice/s0000001/CustomListIterator.java
new file mode 100644
index 000000000..072eb6695
--- /dev/null
+++ b/students/23K9901/23K9901-p27/src/main/java/ru/mirea/practice/s0000001/CustomListIterator.java
@@ -0,0 +1,43 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.List;
+import java.util.NoSuchElementException;
+
+public class CustomListIterator implements java.util.Iterator {
+ private final List list;
+ private int index;
+
+ public CustomListIterator(List list) {
+ this.list = list;
+ this.index = 0;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return index < list.size();
+ }
+
+ @Override
+ public T next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ return list.get(index++);
+ }
+
+ @Override
+ public void remove() {
+ if (index == 0) {
+ throw new IllegalStateException("next() should be called before remove()");
+ }
+ list.remove(--index);
+ }
+
+ public static void main(String[] args) {
+ List list = java.util.Arrays.asList("One", "Two", "Three", "Four");
+ CustomListIterator iterator = new CustomListIterator<>(list);
+ while (iterator.hasNext()) {
+ System.out.println(iterator.next());
+ }
+ }
+}
diff --git a/students/23K9901/23K9901-p28/pom.xml b/students/23K9901/23K9901-p28/pom.xml
new file mode 100644
index 000000000..d68d1ae27
--- /dev/null
+++ b/students/23K9901/23K9901-p28/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K9901
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K9901-p28
+ Второе задание
+
diff --git a/students/23K9901/23K9901-p28/src/main/java/ru/mirea/practice/s0000001/PriorityQueueDemo.java b/students/23K9901/23K9901-p28/src/main/java/ru/mirea/practice/s0000001/PriorityQueueDemo.java
new file mode 100644
index 000000000..7c2070ae7
--- /dev/null
+++ b/students/23K9901/23K9901-p28/src/main/java/ru/mirea/practice/s0000001/PriorityQueueDemo.java
@@ -0,0 +1,31 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.TreeSet;
+
+abstract class PriorityQueueDemo {
+ public static void main(String[] args) {
+ TreeSet priorityQueue = new TreeSet<>();
+
+ priorityQueue.add(15);
+ priorityQueue.add(10);
+ priorityQueue.add(20);
+ priorityQueue.add(5);
+ priorityQueue.add(25);
+ priorityQueue.add(30);
+ priorityQueue.add(1);
+ priorityQueue.add(12);
+ priorityQueue.add(18);
+ priorityQueue.add(3);
+
+ System.out.println("Initial priority queue:");
+ System.out.println(priorityQueue);
+
+ System.out.println("\nExtracting and displaying a few elements:");
+ System.out.println("First element: " + priorityQueue.pollFirst());
+ System.out.println("Next element: " + priorityQueue.pollFirst());
+ System.out.println("Next element: " + priorityQueue.pollFirst());
+
+ System.out.println("\nPriority queue after extracting elements:");
+ System.out.println(priorityQueue);
+ }
+}
diff --git a/students/23K9901/23K9901-p29/pom.xml b/students/23K9901/23K9901-p29/pom.xml
new file mode 100644
index 000000000..5e525b223
--- /dev/null
+++ b/students/23K9901/23K9901-p29/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K9901
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K9901-p29
+ Второе задание
+
diff --git a/students/23K9901/23K9901-p29/src/main/java/ru/mirea/practice/s0000001/NameSurnameMap.java b/students/23K9901/23K9901-p29/src/main/java/ru/mirea/practice/s0000001/NameSurnameMap.java
new file mode 100644
index 000000000..0e7965d93
--- /dev/null
+++ b/students/23K9901/23K9901-p29/src/main/java/ru/mirea/practice/s0000001/NameSurnameMap.java
@@ -0,0 +1,55 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.HashMap;
+import java.util.Map;
+
+abstract class NameSurnameMap {
+ public static Map createMap() {
+ Map map = new HashMap<>();
+ map.put("Ivanov", "Ivan");
+ map.put("Petrov", "Petr");
+ map.put("Sidorov", "Ivan");
+ map.put("Kuznetsov", "Alex");
+ map.put("Smirnov", "Petr");
+ map.put("Popov", "Alex");
+ map.put("Sokolov", "Vladimir");
+ map.put("Morozov", "Ivan");
+ map.put("Orlov", "Pavel");
+ map.put("Volkov", "Alex");
+ return map;
+ }
+
+ public static int getSameFirstNameCount(Map map) {
+ Map nameCounts = new HashMap<>();
+ for (String name : map.values()) {
+ nameCounts.put(name, nameCounts.getOrDefault(name, 0) + 1);
+ }
+ int count = 0;
+ for (int value : nameCounts.values()) {
+ if (value > 1) {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ public static int getSameLastNameCount(Map map) {
+ Map lastNameCounts = new HashMap<>();
+ for (String lastName : map.keySet()) {
+ lastNameCounts.put(lastName, lastNameCounts.getOrDefault(lastName, 0) + 1);
+ }
+ int count = 0;
+ for (int value : lastNameCounts.values()) {
+ if (value > 1) {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ public static void main(String[] args) {
+ Map map = createMap();
+ System.out.println("Number of duplicate first names: " + getSameFirstNameCount(map));
+ System.out.println("Number of duplicate last names: " + getSameLastNameCount(map));
+ }
+}
diff --git a/students/23K9901/23K9901-p30/pom.xml b/students/23K9901/23K9901-p30/pom.xml
new file mode 100644
index 000000000..8bbf364fb
--- /dev/null
+++ b/students/23K9901/23K9901-p30/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K9901
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K9901-p30
+ Второе задание
+
diff --git a/students/23K9901/23K9901-p30/src/main/java/ru/mirea/practice/s0000001/RC.java b/students/23K9901/23K9901-p30/src/main/java/ru/mirea/practice/s0000001/RC.java
new file mode 100644
index 000000000..17cbfa7b7
--- /dev/null
+++ b/students/23K9901/23K9901-p30/src/main/java/ru/mirea/practice/s0000001/RC.java
@@ -0,0 +1,29 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.Scanner;
+
+abstract class RC {
+ public static void main(String[] args) {
+ try (Scanner scanner = new Scanner(System.in)) {
+ int n = scanner.nextInt();
+
+ 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 rCount = 0;
+ for (int i = 0; i < n; i++) {
+ for (int j = i + 1; j < n; j++) {
+ if (matrix[i][j] == 1) {
+ rCount++;
+ }
+ }
+ }
+
+ System.out.println(rCount);
+ }
+ }
+}
diff --git a/students/23K9901/23K9901-p32/pom.xml b/students/23K9901/23K9901-p32/pom.xml
new file mode 100644
index 000000000..841ac9fcd
--- /dev/null
+++ b/students/23K9901/23K9901-p32/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K9901
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K9901-p32
+ Второе задание
+
diff --git a/students/23K9901/23K9901-p32/src/main/java/ru/mirea/practice/s0000001/HuffmanCoding.java b/students/23K9901/23K9901-p32/src/main/java/ru/mirea/practice/s0000001/HuffmanCoding.java
new file mode 100644
index 000000000..181345880
--- /dev/null
+++ b/students/23K9901/23K9901-p32/src/main/java/ru/mirea/practice/s0000001/HuffmanCoding.java
@@ -0,0 +1,66 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.PriorityQueue;
+import java.util.HashMap;
+import java.util.Map;
+
+abstract class HuffmanCoding {
+ public static Map generateHuffmanCodes(Map frequencyMap) {
+ PriorityQueue priorityQueue = new PriorityQueue<>();
+
+ for (Map.Entry entry : frequencyMap.entrySet()) {
+ priorityQueue.add(new HuffmanNode(entry.getKey(), entry.getValue()));
+ }
+
+ while (priorityQueue.size() > 1) {
+ HuffmanNode left = priorityQueue.poll();
+ HuffmanNode right = priorityQueue.poll();
+ HuffmanNode merged = new HuffmanNode('\0', left.frequency + right.frequency);
+ merged.left = left;
+ merged.right = right;
+ priorityQueue.add(merged);
+ }
+
+ HuffmanNode root = priorityQueue.poll();
+ Map huffmanCodes = new HashMap<>();
+ buildHuffmanCodes(root, "", huffmanCodes);
+ return huffmanCodes;
+ }
+
+ private static void buildHuffmanCodes(HuffmanNode node, String code, Map huffmanCodes) {
+ if (node == null) {
+ return;
+ }
+
+ if (node.left == null && node.right == null) {
+ huffmanCodes.put(node.character, code);
+ return;
+ }
+
+ buildHuffmanCodes(node.left, code + "0", huffmanCodes);
+ buildHuffmanCodes(node.right, code + "1", huffmanCodes);
+ }
+
+ public static void main(String[] args) {
+ String text = "this is an example for huffman encoding";
+
+ Map frequencyMap = new HashMap<>();
+ for (char c : text.toCharArray()) {
+ frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1);
+ }
+
+ Map huffmanCodes = generateHuffmanCodes(frequencyMap);
+
+ System.out.println("Huffman Codes:");
+ for (Map.Entry entry : huffmanCodes.entrySet()) {
+ System.out.println(entry.getKey() + ": " + entry.getValue());
+ }
+
+ System.out.println("\nEncoded Text:");
+ StringBuilder encodedText = new StringBuilder();
+ for (char c : text.toCharArray()) {
+ encodedText.append(huffmanCodes.get(c));
+ }
+ System.out.println(encodedText.toString());
+ }
+}
diff --git a/students/23K9901/23K9901-p32/src/main/java/ru/mirea/practice/s0000001/HuffmanNode.java b/students/23K9901/23K9901-p32/src/main/java/ru/mirea/practice/s0000001/HuffmanNode.java
new file mode 100644
index 000000000..e4b30a658
--- /dev/null
+++ b/students/23K9901/23K9901-p32/src/main/java/ru/mirea/practice/s0000001/HuffmanNode.java
@@ -0,0 +1,20 @@
+package ru.mirea.practice.s0000001;
+
+public class HuffmanNode implements Comparable {
+ char character;
+ int frequency;
+ HuffmanNode left;
+ HuffmanNode right;
+
+ public HuffmanNode(char character, int frequency) {
+ this.character = character;
+ this.frequency = frequency;
+ this.left = null;
+ this.right = null;
+ }
+
+ @Override
+ public int compareTo(HuffmanNode other) {
+ return Integer.compare(this.frequency, other.frequency);
+ }
+}
diff --git a/students/23K9901/A.java b/students/23K9901/A.java
deleted file mode 100644
index e69de29bb..000000000
diff --git a/students/23K9901/pom.xml b/students/23K9901/pom.xml
index ae492b94b..95ee8d280 100644
--- a/students/23K9901/pom.xml
+++ b/students/23K9901/pom.xml
@@ -30,5 +30,16 @@
23K9901-p17
23K9901-p19
23K9901-p20
+ 23K9901-p21
+ 23K9901-p22
+ 23K9901-p23
+ 23K9901-p24
+ 23K9901-p25
+ 23K9901-p26
+ 23K9901-p27
+ 23K9901-p28
+ 23K9901-p29
+ 23K9901-p30
+ 23K9901-p32