From 73968f1d2ddfd55dd05d3fe5730c98ca1201d928 Mon Sep 17 00:00:00 2001 From: Vertyshka Date: Mon, 16 Dec 2024 18:13:54 +0300 Subject: [PATCH 1/2] =?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=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=2013-20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- students/23K0818/23K0818-p21/pom.xml | 12 +++ .../s0000001/task1/ArrayToListConverter.java | 29 +++++++ .../practice/s0000001/task2/GenericArray.java | 68 +++++++++++++++ .../s0000001/task4/DirectoryContent.java | 32 ++++++++ students/23K0818/23K0818-p22/pom.xml | 12 +++ .../s0000001/task1/RpnCalculator.java | 38 +++++++++ .../s0000001/task2/CalculatorApp.java | 11 +++ .../s0000001/task2/CalculatorController.java | 25 ++++++ .../s0000001/task2/CalculatorModel.java | 51 ++++++++++++ .../s0000001/task2/CalculatorView.java | 53 ++++++++++++ students/23K0818/23K0818-p23/pom.xml | 12 +++ .../practice/s0000001/task1/ArrayQueue.java | 64 +++++++++++++++ .../s0000001/task1/ArrayQueueAdt.java | 64 +++++++++++++++ .../s0000001/task1/ArrayQueueModule.java | 59 +++++++++++++ .../s0000001/task2/AbstractQueue.java | 33 ++++++++ .../practice/s0000001/task2/LinkedQueue.java | 82 +++++++++++++++++++ .../mirea/practice/s0000001/task2/Nodes.java | 11 +++ .../mirea/practice/s0000001/task2/Queue.java | 15 ++++ students/23K0818/23K0818-p24/pom.xml | 12 +++ .../practice/s0000001/task1/Complex.java | 32 ++++++++ .../task1/ComplexAbstractFactory.java | 7 ++ .../s0000001/task1/ConcreteFactory.java | 14 ++++ .../mirea/practice/s0000001/task1/Main.java | 13 +++ .../s0000001/task2/AbstractChairFactory.java | 15 ++++ .../mirea/practice/s0000001/task2/Chair.java | 5 ++ .../mirea/practice/s0000001/task2/Client.java | 31 +++++++ .../s0000001/task2/MultiFuncChair.java | 12 +++ .../practice/s0000001/task2/VagicChair.java | 12 +++ .../s0000001/task2/VictorinaChair.java | 19 +++++ students/23K0818/23K0818-p25/pom.xml | 12 +++ .../s0000001/task1/StringManipulator.java | 34 ++++++++ .../practice/s0000001/task2/ExactSame.java | 24 ++++++ students/23K0818/23K0818-p26/pom.xml | 12 +++ .../practice/s0000001/task1/Iterator.java | 28 +++++++ .../mirea/practice/s0000001/task1/Test.java | 19 +++++ .../s0000001/task2/StringValidator.java | 31 +++++++ students/23K0818/23K0818-p27/pom.xml | 12 +++ .../practice/s0000001/task1/Hashtable.java | 69 ++++++++++++++++ .../mirea/practice/s0000001/task1/Test.java | 31 +++++++ students/23K0818/23K0818-p28/pom.xml | 12 +++ .../mirea/practice/s0000001/task1/Main.java | 22 +++++ .../practice/s0000001/task2/MapExample.java | 59 +++++++++++++ students/23K0818/23K0818-p29/pom.xml | 12 +++ .../mirea/practice/s0000001/task1/Main.java | 35 ++++++++ .../mirea/practice/s0000001/task2/Main.java | 48 +++++++++++ .../ru/mirea/practice/s0000001/task2/graph | 7 ++ .../practice/s0000001/task2/graphShortest | 6 ++ students/23K0818/23K0818-p30/pom.xml | 12 +++ .../practice/s0000001/task1/Comparison.java | 33 ++++++++ .../practice/s0000001/task1/CountOfNode.java | 21 +++++ .../practice/s0000001/task1/HeightTree.java | 25 ++++++ .../mirea/practice/s0000001/task1/Lookup.java | 34 ++++++++ .../mirea/practice/s0000001/task1/Node.java | 47 +++++++++++ .../practice/s0000001/task1/Reverse.java | 42 ++++++++++ .../mirea/practice/s0000001/task1/Weight.java | 44 ++++++++++ .../practice/s0000001/task2/Haffman.java | 55 +++++++++++++ .../mirea/practice/s0000001/task2/Node.java | 50 +++++++++++ students/23K0818/pom.xml | 10 +++ 58 files changed, 1689 insertions(+) create mode 100644 students/23K0818/23K0818-p21/pom.xml create mode 100644 students/23K0818/23K0818-p21/src/main/java/ru/mirea/practice/s0000001/task1/ArrayToListConverter.java create mode 100644 students/23K0818/23K0818-p21/src/main/java/ru/mirea/practice/s0000001/task2/GenericArray.java create mode 100644 students/23K0818/23K0818-p21/src/main/java/ru/mirea/practice/s0000001/task4/DirectoryContent.java create mode 100644 students/23K0818/23K0818-p22/pom.xml create mode 100644 students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task1/RpnCalculator.java create mode 100644 students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorApp.java create mode 100644 students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorController.java create mode 100644 students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorModel.java create mode 100644 students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorView.java create mode 100644 students/23K0818/23K0818-p23/pom.xml create mode 100644 students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueue.java create mode 100644 students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdt.java create mode 100644 students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModule.java create mode 100644 students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/AbstractQueue.java create mode 100644 students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueue.java create mode 100644 students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/Nodes.java create mode 100644 students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/Queue.java create mode 100644 students/23K0818/23K0818-p24/pom.xml create mode 100644 students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/Complex.java create mode 100644 students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/ComplexAbstractFactory.java create mode 100644 students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/ConcreteFactory.java create mode 100644 students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/Main.java create mode 100644 students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/AbstractChairFactory.java create mode 100644 students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/Chair.java create mode 100644 students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/Client.java create mode 100644 students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/MultiFuncChair.java create mode 100644 students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/VagicChair.java create mode 100644 students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/VictorinaChair.java create mode 100644 students/23K0818/23K0818-p25/pom.xml create mode 100644 students/23K0818/23K0818-p25/src/main/java/ru/mirea/practice/s0000001/task1/StringManipulator.java create mode 100644 students/23K0818/23K0818-p25/src/main/java/ru/mirea/practice/s0000001/task2/ExactSame.java create mode 100644 students/23K0818/23K0818-p26/pom.xml create mode 100644 students/23K0818/23K0818-p26/src/main/java/ru/mirea/practice/s0000001/task1/Iterator.java create mode 100644 students/23K0818/23K0818-p26/src/main/java/ru/mirea/practice/s0000001/task1/Test.java create mode 100644 students/23K0818/23K0818-p26/src/main/java/ru/mirea/practice/s0000001/task2/StringValidator.java create mode 100644 students/23K0818/23K0818-p27/pom.xml create mode 100644 students/23K0818/23K0818-p27/src/main/java/ru/mirea/practice/s0000001/task1/Hashtable.java create mode 100644 students/23K0818/23K0818-p27/src/main/java/ru/mirea/practice/s0000001/task1/Test.java create mode 100644 students/23K0818/23K0818-p28/pom.xml create mode 100644 students/23K0818/23K0818-p28/src/main/java/ru/mirea/practice/s0000001/task1/Main.java create mode 100644 students/23K0818/23K0818-p28/src/main/java/ru/mirea/practice/s0000001/task2/MapExample.java create mode 100644 students/23K0818/23K0818-p29/pom.xml create mode 100644 students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task1/Main.java create mode 100644 students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task2/Main.java create mode 100644 students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task2/graph create mode 100644 students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task2/graphShortest create mode 100644 students/23K0818/23K0818-p30/pom.xml create mode 100644 students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Comparison.java create mode 100644 students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/CountOfNode.java create mode 100644 students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/HeightTree.java create mode 100644 students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Lookup.java create mode 100644 students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Node.java create mode 100644 students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Reverse.java create mode 100644 students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Weight.java create mode 100644 students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task2/Haffman.java create mode 100644 students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task2/Node.java diff --git a/students/23K0818/23K0818-p21/pom.xml b/students/23K0818/23K0818-p21/pom.xml new file mode 100644 index 000000000..8e9805c70 --- /dev/null +++ b/students/23K0818/23K0818-p21/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + 23K0818 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0818-p21 + diff --git a/students/23K0818/23K0818-p21/src/main/java/ru/mirea/practice/s0000001/task1/ArrayToListConverter.java b/students/23K0818/23K0818-p21/src/main/java/ru/mirea/practice/s0000001/task1/ArrayToListConverter.java new file mode 100644 index 000000000..8ea0bafa9 --- /dev/null +++ b/students/23K0818/23K0818-p21/src/main/java/ru/mirea/practice/s0000001/task1/ArrayToListConverter.java @@ -0,0 +1,29 @@ +package ru.mirea.practice.s0000001.task1; + +import java.util.Arrays; +import java.util.List; + +public abstract class ArrayToListConverter { + + + public static List convertStringArrayToList(String[] array) { + return Arrays.asList(array); + } + + + public static List convertIntegerArrayToList(Integer[] array) { + return Arrays.asList(array); + } + + public static void main(String[] args) { + + String[] stringArray = {"apple", "banana", "cherry"}; + List stringList = convertStringArrayToList(stringArray); + System.out.println("Список строк: " + stringList); + + + Integer[] integerArray = {1, 2, 3, 4, 5}; + List integerList = convertIntegerArrayToList(integerArray); + System.out.println("Список чисел: " + integerList); + } +} diff --git a/students/23K0818/23K0818-p21/src/main/java/ru/mirea/practice/s0000001/task2/GenericArray.java b/students/23K0818/23K0818-p21/src/main/java/ru/mirea/practice/s0000001/task2/GenericArray.java new file mode 100644 index 000000000..6c60fe912 --- /dev/null +++ b/students/23K0818/23K0818-p21/src/main/java/ru/mirea/practice/s0000001/task2/GenericArray.java @@ -0,0 +1,68 @@ +package ru.mirea.practice.s0000001.task2; + +import java.util.Arrays; + +public abstract class GenericArray { + private Object[] array; + private int size; + + public GenericArray(int capacity) { + if (capacity <= 0) { + throw new IllegalArgumentException("Capacity must be greater than 0"); + } + array = new Object[capacity]; + size = 0; + } + + public void add(T element) { + if (size == array.length) { + array = Arrays.copyOf(array, array.length * 2); + } + array[size++] = element; + } + + public T get(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException("Index out of bounds"); + } + return (T) array[index]; + } + + public int size() { + return size; + } + + public void set(int index, T element) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException("Index out of bounds"); + } + array[index] = element; + } + + public void remove(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException("Index out of bounds"); + } + System.arraycopy(array, index + 1, array, index, size - index - 1); + size--; + } + + public boolean contains(T element) { + for (int i = 0; i < size; i++) { + if (array[i].equals(element)) { + return true; + } + } + return false; + } + + public void clear() { + array = new Object[array.length]; + size = 0; + } + + @Override + public String toString() { + return Arrays.toString(Arrays.copyOf(array, size)); + } +} diff --git a/students/23K0818/23K0818-p21/src/main/java/ru/mirea/practice/s0000001/task4/DirectoryContent.java b/students/23K0818/23K0818-p21/src/main/java/ru/mirea/practice/s0000001/task4/DirectoryContent.java new file mode 100644 index 000000000..f848f41bd --- /dev/null +++ b/students/23K0818/23K0818-p21/src/main/java/ru/mirea/practice/s0000001/task4/DirectoryContent.java @@ -0,0 +1,32 @@ +package ru.mirea.practice.s0000001.task4; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public abstract class DirectoryContent { + + public static void main(String[] args) { + String directoryPath = "your_directory_path_here"; + List directoryContents = getDirectoryContents(directoryPath); + + for (int i = 0; i < Math.min(5, directoryContents.size()); i++) { + System.out.println(directoryContents.get(i)); + } + } + + public static List getDirectoryContents(String directoryPath) { + List contents = new ArrayList<>(); + File directory = new File(directoryPath); + + if (directory.exists() && directory.isDirectory()) { + File[] files = directory.listFiles(); + if (files != null) { + for (File file : files) { + contents.add(file.getName()); + } + } + } + return contents; + } +} diff --git a/students/23K0818/23K0818-p22/pom.xml b/students/23K0818/23K0818-p22/pom.xml new file mode 100644 index 000000000..d9d668c14 --- /dev/null +++ b/students/23K0818/23K0818-p22/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + 23K0818 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0818-p22 + diff --git a/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task1/RpnCalculator.java b/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task1/RpnCalculator.java new file mode 100644 index 000000000..2982ec0d6 --- /dev/null +++ b/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task1/RpnCalculator.java @@ -0,0 +1,38 @@ +package ru.mirea.practice.s0000001.task1; + +import java.util.Stack; + +public abstract class RpnCalculator { + + public static double evaluaterpn(String[] tokens) { + Stack stack = new Stack<>(); + + for (String token : tokens) { + switch (token) { + case "+": + stack.push(stack.pop() + stack.pop()); + break; + case "-": + double subtrahend = stack.pop(); + stack.push(stack.pop() - subtrahend); + break; + case "*": + stack.push(stack.pop() * stack.pop()); + break; + case "/": + double divisor = stack.pop(); + stack.push(stack.pop() / divisor); + break; + default: + stack.push(Double.parseDouble(token)); + break; + } + } + return stack.pop(); + } + + public static void main(String[] args) { + String[] expression = {"2", "3", "+", "4", "5", "*", "+"}; // (2 + 3) + (4 * 5) + System.out.println("Result: " + evaluaterpn(expression)); + } +} diff --git a/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorApp.java b/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorApp.java new file mode 100644 index 000000000..e98902435 --- /dev/null +++ b/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorApp.java @@ -0,0 +1,11 @@ +package ru.mirea.practice.s0000001.task2; + +public abstract class CalculatorApp { + public static void main(String[] args) { + CalculatorModel model = new CalculatorModel(); + CalculatorView view = new CalculatorView(); + new CalculatorController(model, view); + + view.setVisible(true); + } +} diff --git a/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorController.java b/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorController.java new file mode 100644 index 000000000..334935e41 --- /dev/null +++ b/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorController.java @@ -0,0 +1,25 @@ +package ru.mirea.practice.s0000001.task2; + +import javax.swing.JButton; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class CalculatorController { + public CalculatorController(CalculatorModel model, CalculatorView view) { + view.addButtonListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JButton source = (JButton) e.getSource(); + String buttonText = source.getText(); + + if ("=".equals(buttonText)) { + String expression = view.getDisplayText(); + String result = model.calculate(expression); + view.setDisplayText(result); + } else { + view.setDisplayText(view.getDisplayText() + buttonText + " "); + } + } + }); + } +} diff --git a/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorModel.java b/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorModel.java new file mode 100644 index 000000000..e5b7648ad --- /dev/null +++ b/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorModel.java @@ -0,0 +1,51 @@ +package ru.mirea.practice.s0000001.task2; + +import java.util.Stack; + +public class CalculatorModel { + + public String calculate(String expression) { + Stack stack = new Stack<>(); + + String[] tokens = expression.split(" "); + + try { + for (String token : tokens) { + if (isNumber(token)) { + stack.push(Double.parseDouble(token)); + } else { + double b = stack.pop(); + double a = stack.pop(); + switch (token) { + case "+": + stack.push(a + b); + break; + case "-": + stack.push(a - b); + break; + case "*": + stack.push(a * b); + break; + case "/": + stack.push(a / b); + break; + default: + throw new IllegalArgumentException("Недопустимая операция"); + } + } + } + return String.valueOf(stack.pop()); + } catch (Exception e) { + return "Ошибка"; + } + } + + private boolean isNumber(String token) { + try { + Double.parseDouble(token); + return true; + } catch (NumberFormatException e) { + return false; + } + } +} diff --git a/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorView.java b/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorView.java new file mode 100644 index 000000000..bea0e8ef0 --- /dev/null +++ b/students/23K0818/23K0818-p22/src/main/java/ru/mirea/practice/s0000001/task2/CalculatorView.java @@ -0,0 +1,53 @@ +package ru.mirea.practice.s0000001.task2; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTextField; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.GridLayout; +import java.awt.event.ActionListener; + +public class CalculatorView extends JFrame { + private final JTextField display = new JTextField(); + + public CalculatorView() { + setTitle("Калькулятор"); + setSize(400, 500); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLocationRelativeTo(null); + setLayout(new BorderLayout()); + + display.setEditable(false); + display.setHorizontalAlignment(JTextField.RIGHT); + add(display, BorderLayout.NORTH); + + JPanel buttonPanel = new JPanel(); + buttonPanel.setLayout(new GridLayout(4, 4)); + + String[] buttons = {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"}; + for (String text : buttons) { + JButton button = new JButton(text); + buttonPanel.add(button); + } + + add(buttonPanel, BorderLayout.CENTER); + } + + public String getDisplayText() { + return display.getText(); + } + + public void setDisplayText(String text) { + display.setText(text); + } + + public void addButtonListener(ActionListener listener) { + for (Component component : ((JPanel) getContentPane().getComponent(1)).getComponents()) { + if (component instanceof JButton) { + ((JButton) component).addActionListener(listener); + } + } + } +} diff --git a/students/23K0818/23K0818-p23/pom.xml b/students/23K0818/23K0818-p23/pom.xml new file mode 100644 index 000000000..ad52e66cf --- /dev/null +++ b/students/23K0818/23K0818-p23/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + 23K0818 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0818-p23 + diff --git a/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueue.java b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueue.java new file mode 100644 index 000000000..dbd7727a0 --- /dev/null +++ b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueue.java @@ -0,0 +1,64 @@ +package ru.mirea.practice.s0000001.task1; + +public class ArrayQueue { + private int capacity = 10; + private Object[] queue; + private int front = 0; + private int rear = 0; + private int size = 0; + + public ArrayQueue() { + queue = new Object[capacity]; + } + + public void enqueue(Object element) { + if (size == capacity) { + throw new IllegalStateException("Queue is full"); + } + queue[rear] = element; + rear = (rear + 1) % capacity; + size++; + } + + public Object element() { + if (size == 0) { + throw new IllegalStateException("Queue is empty"); + } + return queue[front]; + } + + public Object dequeue() { + if (size == 0) { + throw new IllegalStateException("Queue is empty"); + } + Object result = queue[front]; + front = (front + 1) % capacity; + size--; + return result; + } + + public boolean isEmpty() { + return size == 0; + } + + public int size() { + return size; + } + + public void clear() { + front = 0; + rear = 0; + size = 0; + } + + public static void main(String[] args) { + ArrayQueue queue = new ArrayQueue(); + queue.enqueue(1); + queue.enqueue(2); + System.out.println(queue.element()); + System.out.println(queue.dequeue()); + System.out.println(queue.size()); + queue.clear(); + System.out.println(queue.isEmpty()); + } +} diff --git a/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdt.java b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdt.java new file mode 100644 index 000000000..72c19e710 --- /dev/null +++ b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueAdt.java @@ -0,0 +1,64 @@ +package ru.mirea.practice.s0000001.task1; + +public class ArrayQueueAdt { + private int capacity = 10; + private Object[] queue; + private int front = 0; + private int rear = 0; + private int size = 0; + + public ArrayQueueAdt() { + queue = new Object[capacity]; + } + + public void enqueue(Object element) { + if (size == capacity) { + throw new IllegalStateException("Queue is full"); + } + queue[rear] = element; + rear = (rear + 1) % capacity; + size++; + } + + public Object element() { + if (size == 0) { + throw new IllegalStateException("Queue is empty"); + } + return queue[front]; + } + + public Object dequeue() { + if (size == 0) { + throw new IllegalStateException("Queue is empty"); + } + Object result = queue[front]; + front = (front + 1) % capacity; + size--; + return result; + } + + public boolean isEmpty() { + return size == 0; + } + + public int size() { + return size; + } + + public void clear() { + front = 0; + rear = 0; + size = 0; + } + + public static void main(String[] args) { + ArrayQueueAdt queue = new ArrayQueueAdt(); + queue.enqueue(1); + queue.enqueue(2); + System.out.println(queue.element()); + System.out.println(queue.dequeue()); + System.out.println(queue.size()); + queue.clear(); + System.out.println(queue.isEmpty()); + } +} diff --git a/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModule.java b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModule.java new file mode 100644 index 000000000..8e7c9dbd4 --- /dev/null +++ b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task1/ArrayQueueModule.java @@ -0,0 +1,59 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class ArrayQueueModule { + private static final int CAPACITY = 10; + private static Object[] queue = new Object[CAPACITY]; + private static int front = 0; + private static int rear = 0; + private static int size = 0; + + public static void enqueue(Object element) { + if (size == CAPACITY) { + throw new IllegalStateException("Queue is full"); + } + queue[rear] = element; + rear = (rear + 1) % CAPACITY; + size++; + } + + public static Object element() { + if (size == 0) { + throw new IllegalStateException("Queue is empty"); + } + return queue[front]; + } + + public static Object dequeue() { + if (size == 0) { + throw new IllegalStateException("Queue is empty"); + } + Object result = queue[front]; + front = (front + 1) % CAPACITY; + size--; + return result; + } + + public static boolean isEmpty() { + return size == 0; + } + + public static int size() { + return size; + } + + public static void clear() { + front = 0; + rear = 0; + size = 0; + } + + public static void main(String[] args) { + enqueue(1); + enqueue(2); + System.out.println(element()); + System.out.println(dequeue()); + System.out.println(size()); + clear(); + System.out.println(isEmpty()); + } +} diff --git a/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/AbstractQueue.java b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/AbstractQueue.java new file mode 100644 index 000000000..6e2144966 --- /dev/null +++ b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/AbstractQueue.java @@ -0,0 +1,33 @@ +package ru.mirea.practice.s0000001.task2; + +public abstract class AbstractQueue implements Queue { + protected int size; + + public AbstractQueue(int size) { + this.size = size; + } + + @Override + public int size() { + return size; + } + + @Override + public void clear() { + size = 0; + } + + @Override + public abstract void enqueue(Object element); + + @Override + public abstract Object dequeue(); + + @Override + public abstract Object element(); + + @Override + public boolean isEmpty() { + return size == 0; + } +} diff --git a/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueue.java b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueue.java new file mode 100644 index 000000000..36e4959d3 --- /dev/null +++ b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/LinkedQueue.java @@ -0,0 +1,82 @@ +package ru.mirea.practice.s0000001.task2; + +public class LinkedQueue implements Queue { + private Nodes head; + private Nodes tail; + + public LinkedQueue() { + head = null; + tail = null; + } + + @Override + public int size() { + int count = 0; + Nodes current = head; + while (current != null) { + count++; + current = current.next; + } + return count; + } + + @Override + public void clear() { + head = tail = null; + } + + @Override + public void enqueue(Object a) { + Nodes newNode = new Nodes(a); + if (tail == null) { + head = tail = newNode; + } else { + tail.next = newNode; + tail = newNode; + } + } + + @Override + public Object dequeue() { + if (isEmpty()) { + return null; + } + Object data = head.cons; + head = head.next; + if (head == null) { + tail = null; + } + return data; + } + + @Override + public Object element() { + if (isEmpty()) { + return null; + } + return head.cons; + } + + @Override + public boolean isEmpty() { + return head == null; + } + + + public static void main(String[] args) { + LinkedQueue queue = new LinkedQueue(); + queue.enqueue("a"); + queue.enqueue(1); + queue.enqueue(true); + System.out.println(queue.dequeue()); + System.out.println(queue.element()); + System.out.println(queue.dequeue()); + queue.enqueue("a"); + queue.enqueue(1); + queue.enqueue(true); + System.out.println(queue.size()); + queue.clear(); + System.out.println(queue.size()); + System.out.println(queue.isEmpty()); + } +} diff --git a/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/Nodes.java b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/Nodes.java new file mode 100644 index 000000000..10aaafdb2 --- /dev/null +++ b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/Nodes.java @@ -0,0 +1,11 @@ +package ru.mirea.practice.s0000001.task2; + +public class Nodes { + Object cons; + Nodes next; + + public Nodes(Object one) { + this.cons = one; + this.next = null; + } +} diff --git a/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/Queue.java b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/Queue.java new file mode 100644 index 000000000..a7453446e --- /dev/null +++ b/students/23K0818/23K0818-p23/src/main/java/ru/mirea/practice/s0000001/task2/Queue.java @@ -0,0 +1,15 @@ +package ru.mirea.practice.s0000001.task2; + +public interface Queue { + void enqueue(Object a); + + Object element(); + + Object dequeue(); + + int size(); + + boolean isEmpty(); + + void clear(); +} diff --git a/students/23K0818/23K0818-p24/pom.xml b/students/23K0818/23K0818-p24/pom.xml new file mode 100644 index 000000000..19ac159ef --- /dev/null +++ b/students/23K0818/23K0818-p24/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + 23K0818 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0818-p24 + diff --git a/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/Complex.java b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/Complex.java new file mode 100644 index 000000000..c54f6e625 --- /dev/null +++ b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/Complex.java @@ -0,0 +1,32 @@ +package ru.mirea.practice.s0000001.task1; + +public class Complex { + private int real; + private int image; + + public Complex(int real, int image) { + this.real = real; + this.image = image; + } + + public int getReal() { + return real; + } + + public void setReal(int real) { + this.real = real; + } + + public int getImage() { + return image; + } + + public void setImage(int image) { + this.image = image; + } + + @Override + public String toString() { + return real + " + " + image + "i"; + } +} diff --git a/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/ComplexAbstractFactory.java b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/ComplexAbstractFactory.java new file mode 100644 index 000000000..5acaf8236 --- /dev/null +++ b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/ComplexAbstractFactory.java @@ -0,0 +1,7 @@ +package ru.mirea.practice.s0000001.task1; + +public interface ComplexAbstractFactory { + Complex createComplex(); + + Complex createComplex(int real, int image); +} diff --git a/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/ConcreteFactory.java b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/ConcreteFactory.java new file mode 100644 index 000000000..abcaeaca3 --- /dev/null +++ b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/ConcreteFactory.java @@ -0,0 +1,14 @@ +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 image) { + return new Complex(real, image); + } +} diff --git a/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/Main.java b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/Main.java new file mode 100644 index 000000000..3863c2654 --- /dev/null +++ b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task1/Main.java @@ -0,0 +1,13 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class Main { + 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, 10); + System.out.println("Custom complex number: " + customComplex); + } +} diff --git a/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/AbstractChairFactory.java b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/AbstractChairFactory.java new file mode 100644 index 000000000..791152afe --- /dev/null +++ b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/AbstractChairFactory.java @@ -0,0 +1,15 @@ +package ru.mirea.practice.s0000001.task2; + +public class AbstractChairFactory { + public Chair createMagicChair() { + return new VagicChair(); + } + + public Chair createFunctionalChair() { + return new MultiFuncChair(); + } + + public Chair createVictorianChair(int age) { + return new VictorinaChair(age); + } +} diff --git a/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/Chair.java b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/Chair.java new file mode 100644 index 000000000..32e4beb17 --- /dev/null +++ b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/Chair.java @@ -0,0 +1,5 @@ +package ru.mirea.practice.s0000001.task2; + +public interface Chair { + void sitinOn(); +} diff --git a/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/Client.java b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/Client.java new file mode 100644 index 000000000..360a74069 --- /dev/null +++ b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/Client.java @@ -0,0 +1,31 @@ +package ru.mirea.practice.s0000001.task2; + +public class Client { + private Chair c; + + public Client(Chair c) { + this.c = c; + } + + public void setChair(Chair c) { + this.c = c; + } + + public void toSit() { + this.c.sitinOn(); + } + + public static void main(String[] args) { + AbstractChairFactory creation = new AbstractChairFactory(); + Chair a = creation.createMagicChair(); + Client one = new Client(a); + Chair b = creation.createVictorianChair(1234); + Chair c = creation.createFunctionalChair(); + one.toSit(); + one.setChair(b); + one.toSit(); + one.setChair(c); + one.toSit(); + + } +} diff --git a/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/MultiFuncChair.java b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/MultiFuncChair.java new file mode 100644 index 000000000..06c767d42 --- /dev/null +++ b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/MultiFuncChair.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s0000001.task2; + +public class MultiFuncChair implements Chair { + public int sum(int a, int b) { + return a + b; + } + + @Override + public void sitinOn() { + System.out.println("u siting on MultiFuncChair"); + } +} diff --git a/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/VagicChair.java b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/VagicChair.java new file mode 100644 index 000000000..7c2929f73 --- /dev/null +++ b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/VagicChair.java @@ -0,0 +1,12 @@ +package ru.mirea.practice.s0000001.task2; + +public class VagicChair implements Chair { + public void doMagic() { + System.exit(1); + } + + @Override + public void sitinOn() { + System.out.println("u siting on MagicChair"); + } +} diff --git a/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/VictorinaChair.java b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/VictorinaChair.java new file mode 100644 index 000000000..58a5f8802 --- /dev/null +++ b/students/23K0818/23K0818-p24/src/main/java/ru/mirea/practice/s0000001/task2/VictorinaChair.java @@ -0,0 +1,19 @@ +package ru.mirea.practice.s0000001.task2; + +public class VictorinaChair implements Chair { + private int age; + + public VictorinaChair(int age) { + this.age = age; + } + + public int getAge() { + return age; + } + + @Override + public void sitinOn() { + System.out.println("u siting on VictorinaChair"); + } +} + diff --git a/students/23K0818/23K0818-p25/pom.xml b/students/23K0818/23K0818-p25/pom.xml new file mode 100644 index 000000000..aaf4554ee --- /dev/null +++ b/students/23K0818/23K0818-p25/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + 23K0818 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0818-p25 + diff --git a/students/23K0818/23K0818-p25/src/main/java/ru/mirea/practice/s0000001/task1/StringManipulator.java b/students/23K0818/23K0818-p25/src/main/java/ru/mirea/practice/s0000001/task1/StringManipulator.java new file mode 100644 index 000000000..0d047588a --- /dev/null +++ b/students/23K0818/23K0818-p25/src/main/java/ru/mirea/practice/s0000001/task1/StringManipulator.java @@ -0,0 +1,34 @@ +package ru.mirea.practice.s0000001.task1; + + +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public abstract class StringManipulator { + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + try { + System.out.print("Введите строку для обработки: "); + String inputString = scanner.nextLine(); + + System.out.print("Введите регулярное выражение для разбивки строки: "); + String regex = scanner.nextLine(); + + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(inputString); + + System.out.println("Результаты разбиения:"); + while (matcher.find()) { + System.out.println(matcher.group()); + } + + } finally { + if (scanner != null) { + scanner.close(); + } + } + } +} diff --git a/students/23K0818/23K0818-p25/src/main/java/ru/mirea/practice/s0000001/task2/ExactSame.java b/students/23K0818/23K0818-p25/src/main/java/ru/mirea/practice/s0000001/task2/ExactSame.java new file mode 100644 index 000000000..5f06b0bd3 --- /dev/null +++ b/students/23K0818/23K0818-p25/src/main/java/ru/mirea/practice/s0000001/task2/ExactSame.java @@ -0,0 +1,24 @@ +package ru.mirea.practice.s0000001.task2; + +import java.util.regex.Pattern; + +public abstract class ExactSame { + public static void main(String[] args) { + String[] texts = { + "abcdefghijklmnopqrstuv18340", + "abcdefghijklmnopqrstqwrfuv18340", + "abcdefg8340", + "abcdefghijklmnopqrstuv18340abcdefghijklmnopqrstuv18340"}; + String regex = "abcdefghijklmnopqrstuv18340{1}"; + String corect = ""; + String wrong = ""; + for (String x : texts) { + if (Pattern.matches(regex, x)) { + corect += x + "\t"; + } else { + wrong += x + "\t"; + } + } + System.out.println(corect + "\n\n" + wrong); + } +} diff --git a/students/23K0818/23K0818-p26/pom.xml b/students/23K0818/23K0818-p26/pom.xml new file mode 100644 index 000000000..2dac6f5dd --- /dev/null +++ b/students/23K0818/23K0818-p26/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + 23K0818 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0818-p26 + diff --git a/students/23K0818/23K0818-p26/src/main/java/ru/mirea/practice/s0000001/task1/Iterator.java b/students/23K0818/23K0818-p26/src/main/java/ru/mirea/practice/s0000001/task1/Iterator.java new file mode 100644 index 000000000..2f0dd1dae --- /dev/null +++ b/students/23K0818/23K0818-p26/src/main/java/ru/mirea/practice/s0000001/task1/Iterator.java @@ -0,0 +1,28 @@ +package ru.mirea.practice.s0000001.task1; + +import java.util.List; + +public class Iterator { + + private int curentInd; + + public Iterator() { + this.curentInd = 0; + } + + public int getCurentInd() { + return curentInd; + } + + public void next(List list) { + if (curentInd + 1 < list.size()) { + System.out.println(list.get(curentInd)); + } else { + System.out.println("Ошибка: выход за пределы списка"); + } + } + + public boolean hasNext(List list) { + return curentInd + 1 < list.size(); + } +} diff --git a/students/23K0818/23K0818-p26/src/main/java/ru/mirea/practice/s0000001/task1/Test.java b/students/23K0818/23K0818-p26/src/main/java/ru/mirea/practice/s0000001/task1/Test.java new file mode 100644 index 000000000..45dce1c62 --- /dev/null +++ b/students/23K0818/23K0818-p26/src/main/java/ru/mirea/practice/s0000001/task1/Test.java @@ -0,0 +1,19 @@ +package ru.mirea.practice.s0000001.task1; + +import java.util.ArrayList; + +abstract class Test { + public static void main(String[] args) { + ArrayList al = new ArrayList(); + + for (int i = 0; i < 10; i++) { + al.add(i); + } + Iterator iterator = new Iterator(); + iterator.next(al); + iterator.next(al); + iterator.next(al); + System.out.println(iterator.hasNext(al)); + + } +} diff --git a/students/23K0818/23K0818-p26/src/main/java/ru/mirea/practice/s0000001/task2/StringValidator.java b/students/23K0818/23K0818-p26/src/main/java/ru/mirea/practice/s0000001/task2/StringValidator.java new file mode 100644 index 000000000..1969e159b --- /dev/null +++ b/students/23K0818/23K0818-p26/src/main/java/ru/mirea/practice/s0000001/task2/StringValidator.java @@ -0,0 +1,31 @@ +package ru.mirea.practice.s0000001.task2; + +import java.util.Scanner; +import java.util.regex.Pattern; + +public abstract class StringValidator { + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + try { + System.out.print("Введите строку для проверки: "); + String inputString = scanner.nextLine(); + + String regex = "^abcdefghijklmnopqrstuv18340$"; + + boolean isValid = Pattern.matches(regex, inputString); + + if (isValid) { + System.out.println("Строка корректна."); + } else { + System.out.println("Строка некорректна."); + } + + } finally { + if (scanner != null) { + scanner.close(); + } + } + } +} diff --git a/students/23K0818/23K0818-p27/pom.xml b/students/23K0818/23K0818-p27/pom.xml new file mode 100644 index 000000000..4b0b49018 --- /dev/null +++ b/students/23K0818/23K0818-p27/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + 23K0818 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0818-p27 + diff --git a/students/23K0818/23K0818-p27/src/main/java/ru/mirea/practice/s0000001/task1/Hashtable.java b/students/23K0818/23K0818-p27/src/main/java/ru/mirea/practice/s0000001/task1/Hashtable.java new file mode 100644 index 000000000..809c271bc --- /dev/null +++ b/students/23K0818/23K0818-p27/src/main/java/ru/mirea/practice/s0000001/task1/Hashtable.java @@ -0,0 +1,69 @@ +package ru.mirea.practice.s0000001.task1; + +import java.util.LinkedList; + +class Hashtable { + private static class KeyValue { + String key; + String value; + + KeyValue(String key, String value) { + this.key = key; + this.value = value; + } + } + + private LinkedList[] table; + private int size; + + @SuppressWarnings("unchecked") + public Hashtable(int size) { + this.size = size; + table = new LinkedList[size]; + for (int i = 0; i < size; i++) { + table[i] = new LinkedList<>(); + } + } + + private int hash(String key) { + return Math.abs(key.hashCode() % size); + } + + public void add(String key, String value) { + int index = hash(key); + for (KeyValue kv : table[index]) { + if (kv.key.equals(key)) { + kv.value = value; + return; + } + } + table[index].add(new KeyValue(key, value)); + } + + public String lookup(String key) { + int index = hash(key); + for (KeyValue kv : table[index]) { + if (kv.key.equals(key)) { + return kv.value; + } + } + return null; + } + + public void delete(String key) { + int index = hash(key); + table[index].removeIf(kv -> kv.key.equals(key)); + } + + public void printTable() { + for (int i = 0; i < size; i++) { + if (!table[i].isEmpty()) { + System.out.print("Bucket " + i + ": "); + for (KeyValue kv : table[i]) { + System.out.print("[" + kv.key + ": " + kv.value + "] "); + } + System.out.println(); + } + } + } +} diff --git a/students/23K0818/23K0818-p27/src/main/java/ru/mirea/practice/s0000001/task1/Test.java b/students/23K0818/23K0818-p27/src/main/java/ru/mirea/practice/s0000001/task1/Test.java new file mode 100644 index 000000000..fd772b6c0 --- /dev/null +++ b/students/23K0818/23K0818-p27/src/main/java/ru/mirea/practice/s0000001/task1/Test.java @@ -0,0 +1,31 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class Test { + public static void main(String[] args) { + Hashtable hashTable = new Hashtable(10); + + hashTable.add("key1", "value1"); + hashTable.add("key2", "value2"); + hashTable.add("key3", "value3"); + hashTable.add("key4", "value4"); + hashTable.add("key5", "value5"); + hashTable.add("key6", "value6"); + hashTable.add("key7", "value7"); + hashTable.add("key8", "value8"); + hashTable.add("key9", "value9"); + hashTable.add("key10", "value10"); + + System.out.println("Содержимое хеш-таблицы:"); + hashTable.printTable(); + + String value = hashTable.lookup("key5"); + System.out.println("Поиск key5: " + (value != null ? value : "not found")); + + hashTable.delete("key5"); + System.out.println("После удаления key5:"); + hashTable.printTable(); + + value = hashTable.lookup("key5"); + System.out.println("Поиск key5 после удаления: " + (value != null ? value : "not found")); + } +} diff --git a/students/23K0818/23K0818-p28/pom.xml b/students/23K0818/23K0818-p28/pom.xml new file mode 100644 index 000000000..c906cf837 --- /dev/null +++ b/students/23K0818/23K0818-p28/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + 23K0818 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0818-p28 + diff --git a/students/23K0818/23K0818-p28/src/main/java/ru/mirea/practice/s0000001/task1/Main.java b/students/23K0818/23K0818-p28/src/main/java/ru/mirea/practice/s0000001/task1/Main.java new file mode 100644 index 000000000..26cbc7cf7 --- /dev/null +++ b/students/23K0818/23K0818-p28/src/main/java/ru/mirea/practice/s0000001/task1/Main.java @@ -0,0 +1,22 @@ +package ru.mirea.practice.s0000001.task1; + +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/23K0818/23K0818-p28/src/main/java/ru/mirea/practice/s0000001/task2/MapExample.java b/students/23K0818/23K0818-p28/src/main/java/ru/mirea/practice/s0000001/task2/MapExample.java new file mode 100644 index 000000000..979ee42b1 --- /dev/null +++ b/students/23K0818/23K0818-p28/src/main/java/ru/mirea/practice/s0000001/task2/MapExample.java @@ -0,0 +1,59 @@ +package ru.mirea.practice.s0000001.task2; + +import java.util.HashMap; +import java.util.Map; +import java.util.HashSet; +import java.util.Set; + +public abstract class MapExample { + + public static Map createMap() { + Map map = new HashMap<>(); + map.put("Иванов", "Александр"); + map.put("Петрова", "Анастасия"); + map.put("Сидоров", "Александр"); + map.put("Козлов", "Александр"); + map.put("Морозов", "Александр"); + map.put("Федоров", "Михаил"); + map.put("Смирнов", "Иван"); + map.put("Новиков", "Михаил"); + map.put("Попова", "Анастасия"); + map.put("Васильев", "Алексей"); + return map; + } + + public static int getSameFirstNameCount(Map map) { + Map firstNameCount = new HashMap<>(); + for (String firstName : map.values()) { + firstNameCount.put(firstName, firstNameCount.getOrDefault(firstName, 0) + 1); + } + + int count = 0; + for (int value : firstNameCount.values()) { + if (value > 1) { + count += value; + } + } + return count; + } + + public static int getSameLastNameCount(Map map) { + Set lastNames = new HashSet<>(); + int count = 0; + for (String lastName : map.keySet()) { + if (lastNames.contains(lastName)) { + count++; + } else { + lastNames.add(lastName); + } + } + return count; + } + + public static void main(String[] args) { + Map map = createMap(); + + System.out.println("Количество людей с одинаковыми именами: " + getSameFirstNameCount(map)); + System.out.println("Количество людей с одинаковыми фамилиями: " + getSameLastNameCount(map)); + } +} diff --git a/students/23K0818/23K0818-p29/pom.xml b/students/23K0818/23K0818-p29/pom.xml new file mode 100644 index 000000000..3f77f8c49 --- /dev/null +++ b/students/23K0818/23K0818-p29/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + 23K0818 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0818-p29 + diff --git a/students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task1/Main.java b/students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task1/Main.java new file mode 100644 index 000000000..6bdbff49a --- /dev/null +++ b/students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task1/Main.java @@ -0,0 +1,35 @@ +package ru.mirea.practice.s0000001.task1; + + +import java.util.Scanner; + +public abstract class Main { + 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[][] adjacencyMatrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + adjacencyMatrix[i][j] = scanner.nextInt(); + } + } + + int roadCount = 0; + for (int i = 0; i < n; i++) { + for (int j = i + 1; j < n; j++) { + roadCount += adjacencyMatrix[i][j]; + } + } + + System.out.println(roadCount); + + } catch (RuntimeException e) { + throw new RuntimeException(e); + } + } +} diff --git a/students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task2/Main.java b/students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task2/Main.java new file mode 100644 index 000000000..a495809ac --- /dev/null +++ b/students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task2/Main.java @@ -0,0 +1,48 @@ +package ru.mirea.practice.s23k0505.task2; + + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.PrintWriter; +import java.util.Scanner; + +public abstract class Main { + public static void main(String[] args) throws FileNotFoundException { + int[][] graph; + int n; + try (Scanner scanner = new Scanner(new File("students/23K0120/23K0120-p29/src/main/java/ru/mirea/practice/s23k0120/task2/graph.txt"))) { + n = scanner.nextInt(); + graph = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + graph[i][j] = scanner.nextInt(); + if (graph[i][j] == 0 && i != j) { + graph[i][j] = Integer.MAX_VALUE / 2; + } + } + } + } + + for (int k = 0; k < n; k++) { + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + graph[i][j] = Math.min(graph[i][j], graph[i][k] + graph[k][j]); + } + } + } + + try (PrintWriter writer = new PrintWriter(new File("students/23K0120/23K0120-p29/src/" + + "main/java/ru/mirea/practice/s23k0120/task2/graphShortest.txt"))) { + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if (graph[i][j] == Integer.MAX_VALUE / 2) { + writer.print(0 + " "); + } else { + writer.print(graph[i][j] + " "); + } + } + writer.println(); + } + } + } +} diff --git a/students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task2/graph b/students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task2/graph new file mode 100644 index 000000000..ef0636769 --- /dev/null +++ b/students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task2/graph @@ -0,0 +1,7 @@ +6 +0 7 9 0 0 14 +7 0 10 15 0 0 +9 10 0 11 0 2 +0 15 11 0 6 0 +0 0 0 6 0 9 +14 0 2 0 9 0 \ No newline at end of file diff --git a/students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task2/graphShortest b/students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task2/graphShortest new file mode 100644 index 000000000..adc608142 --- /dev/null +++ b/students/23K0818/23K0818-p29/src/main/java/ru/mirea/practice/s0000001/task2/graphShortest @@ -0,0 +1,6 @@ +0 7 9 20 20 11 +7 0 10 15 21 12 +9 10 0 11 11 2 +20 15 11 0 6 13 +20 21 11 6 0 9 +11 12 2 13 9 0 diff --git a/students/23K0818/23K0818-p30/pom.xml b/students/23K0818/23K0818-p30/pom.xml new file mode 100644 index 000000000..575b75057 --- /dev/null +++ b/students/23K0818/23K0818-p30/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + 23K0818 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0818-p30 + diff --git a/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Comparison.java b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Comparison.java new file mode 100644 index 000000000..d538c1874 --- /dev/null +++ b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Comparison.java @@ -0,0 +1,33 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class Comparison { + public static boolean compare(Node node1, Node node2) { + if (node1 == null && node2 == null) { + return true; + } else if (node1 != null && node2 != null) { + return node1.data == node2.data && compare(node1.left, node2.left) && compare(node1.right, node2.right); + } else { + return false; + } + } + + public static void main(String[] args) { + Node root1 = new Node(1); + root1.left = new Node(2); + root1.right = new Node(3); + root1.left.left = new Node(4); + root1.left.right = new Node(5); + + Node root2 = new Node(1); + root2.left = new Node(2); + root2.right = new Node(3); + root2.left.left = new Node(4); + root2.left.right = new Node(5); + + if (compare(root1, root2)) { + System.out.println("Деревья равны"); + } else { + System.out.println("Деревья разные"); + } + } +} diff --git a/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/CountOfNode.java b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/CountOfNode.java new file mode 100644 index 000000000..3d20e86db --- /dev/null +++ b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/CountOfNode.java @@ -0,0 +1,21 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class CountOfNode { + public static int countOfNode(Node node) { + if (node == null) { + return 0; + } else { + return countOfNode(node.left) + countOfNode(node.right) + 1; + } + } + + public static void main(String[] args) { + Node root = new Node(1); + root.left = new Node(2); + root.right = new Node(3); + root.left.left = new Node(4); + root.left.right = new Node(5); + + System.out.println("Количество узлов в дереве: " + countOfNode(root)); + } +} diff --git a/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/HeightTree.java b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/HeightTree.java new file mode 100644 index 000000000..7306f7e91 --- /dev/null +++ b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/HeightTree.java @@ -0,0 +1,25 @@ +package ru.mirea.practice.s0000001.task1; + +import static java.lang.Math.max; + +public abstract class HeightTree { + public static int heightTree(Node node) { + if (node == null) { + return -1; + } else { + int leftHeight = heightTree(node.left); + int rightHeight = heightTree(node.right); + return max(leftHeight, rightHeight) + 1; + } + } + + public static void main(String[] args) { + Node root = new Node(1); + root.left = new Node(2); + root.right = new Node(3); + root.left.left = new Node(4); + root.left.right = new Node(5); + + System.out.println("Высота бинарного дерева " + heightTree(root)); + } +} diff --git a/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Lookup.java b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Lookup.java new file mode 100644 index 000000000..cdc10cb01 --- /dev/null +++ b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Lookup.java @@ -0,0 +1,34 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class Lookup { + public static int lookup(Node node, int key) { + if (node == null) { + return 0; + } else { + if (key == node.data) { + return 1; + } else { + if (key < node.data) { + return lookup(node.left, key); + } else { + return lookup(node.right, key); + } + } + } + } + + public static void main(String[] args) { + Node root = new Node(1); + root.left = new Node(2); + root.right = new Node(3); + root.left.left = new Node(4); + root.left.right = new Node(5); + + if (lookup(root, 3) == 1) { + System.out.println("Значение найдено"); + } else { + System.out.println("Значение отсутствует"); + } + + } +} diff --git a/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Node.java b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Node.java new file mode 100644 index 000000000..fccd937db --- /dev/null +++ b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Node.java @@ -0,0 +1,47 @@ +package ru.mirea.practice.s0000001.task1; + +public class Node { + int data; + Node left; + Node right; + + public Node(int data) { + this.data = data; + this.left = null; + this.right = null; + } + + public int getData() { + return data; + } + + public void setData(int data) { + this.data = data; + } + + public Node getLeft() { + return left; + } + + public void setLeft(Node left) { + this.left = left; + } + + public Node getRight() { + return right; + } + + public void setRight(Node right) { + this.right = right; + } + + public void print() { + System.out.print(data + " "); + if (left != null) { + left.print(); + } + if (right != null) { + right.print(); + } + } +} diff --git a/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Reverse.java b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Reverse.java new file mode 100644 index 000000000..b02a5cc0c --- /dev/null +++ b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Reverse.java @@ -0,0 +1,42 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class Reverse { + public static void reverse(Node node) { + if (node == null) { + return; + } else { + Node temp = node.left; + node.left = node.right; + node.right = temp; + + reverse(node.left); + reverse(node.right); + } + } + + public static void printTree(Node node, String prefix, boolean isLeft) { + if (node != null) { + System.out.println(prefix + (isLeft ? "├── " : "└── ") + node.getData()); + printTree(node.getLeft(), prefix + (isLeft ? "│ " : " "), true); + printTree(node.getRight(), prefix + (isLeft ? "│ " : " "), false); + } + } + + public static void printTree(Node node) { + printTree(node, "", false); + } + + public static void main(String[] args) { + Node root = new Node(1); + root.left = new Node(2); + root.right = new Node(3); + root.left.left = new Node(4); + root.left.right = new Node(5); + + System.out.println("Оригинальное дерево:"); + printTree(root); + reverse(root); + System.out.println("Зеркальное дерево:"); + printTree(root); + } +} diff --git a/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Weight.java b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Weight.java new file mode 100644 index 000000000..e30cc95ec --- /dev/null +++ b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task1/Weight.java @@ -0,0 +1,44 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class Weight { + public static int widht(Node node) { + int maxWidht = 0; + int widht = 0; + int h = height(node); + for (int i = 1; i < h; i++) { + widht = getWidht(node, i); + maxWidht = Math.max(widht, maxWidht); + } + return maxWidht; + } + + public static int getWidht(Node node, int level) { + if (node == null) { + return 0; + } else if (level == 1) { + return 1; + } else { + return getWidht(node.left, level - 1) + getWidht(node.right, level - 1); + } + } + + public static int height(Node node) { + if (node == null) { + return 0; + } else { + int leftHeight = height(node.left); + int rightHeight = height(node.right); + return Math.max(leftHeight + 1, rightHeight + 1); + } + } + + public static void main(String[] args) { + Node root = new Node(1); + root.left = new Node(2); + root.right = new Node(3); + root.left.left = new Node(4); + root.left.right = new Node(5); + + System.out.println("Вес дерева: " + widht(root)); + } +} diff --git a/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task2/Haffman.java b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task2/Haffman.java new file mode 100644 index 000000000..205aa3381 --- /dev/null +++ b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task2/Haffman.java @@ -0,0 +1,55 @@ +package ru.mirea.practice.s0000001.task2; + +import java.util.HashMap; +import java.util.Map; +import java.util.PriorityQueue; + +public abstract class Haffman { + public static void haffman(Map charFreq) { + PriorityQueue pq = new PriorityQueue<>(); + + for (Map.Entry entry : charFreq.entrySet()) { + pq.add(new Node(entry.getKey(), entry.getValue())); + } + + while (pq.size() > 1) { + Node left = pq.poll(); + Node right = pq.poll(); + + Node parent = new Node('\0', left.getFrequency() + right.getFrequency()); + parent.setLeft(left); + parent.setRight(right); + pq.add(parent); + } + + Node root = pq.peek(); + Map huffmanCodes = new HashMap<>(); + printCodes(root, "", huffmanCodes); + + System.out.println("Символ\tкод"); + for (Map.Entry entry : huffmanCodes.entrySet()) { + System.out.println(entry.getKey() + "\t\t" + entry.getValue()); + } + } + + private static void printCodes(Node root, String currentCode, Map huffmanCodes) { + if (root == null) { + return; + } else if (root.name != '\0') { + huffmanCodes.put(root.name, currentCode); + } + printCodes(root.left, currentCode + "0", huffmanCodes); + printCodes(root.right, currentCode + "1", huffmanCodes); + } + + public static void main(String[] args) { + Map charFrequencies = new HashMap<>(); + charFrequencies.put('A', 1); + charFrequencies.put('B', 2); + charFrequencies.put('C', 3); + charFrequencies.put('D', 4); + charFrequencies.put('E', 5); + + haffman(charFrequencies); + } +} diff --git a/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task2/Node.java b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task2/Node.java new file mode 100644 index 000000000..a1e669ba7 --- /dev/null +++ b/students/23K0818/23K0818-p30/src/main/java/ru/mirea/practice/s0000001/task2/Node.java @@ -0,0 +1,50 @@ +package ru.mirea.practice.s0000001.task2; + +public class Node implements Comparable { + char name; + float frequency; + Node left; + Node right; + + public Node(char name, float frequency) { + this.name = name; + this.frequency = frequency; + } + + public char getName() { + return name; + } + + public void setName(char name) { + this.name = name; + } + + public float getFrequency() { + return frequency; + } + + public void setFrequency(float frequency) { + this.frequency = frequency; + } + + public Node getLeft() { + return left; + } + + public void setLeft(Node left) { + this.left = left; + } + + public Node getRight() { + return right; + } + + public void setRight(Node right) { + this.right = right; + } + + @Override + public int compareTo(Node other) { + return (int) (this.frequency - other.frequency); + } +} diff --git a/students/23K0818/pom.xml b/students/23K0818/pom.xml index 01b7368a6..59afb2c54 100644 --- a/students/23K0818/pom.xml +++ b/students/23K0818/pom.xml @@ -32,6 +32,16 @@ 23K0818-p18 23K0818-p19 23K0818-p20 + 23K0818-p21 + 23K0818-p22 + 23K0818-p23 + 23K0818-p24 + 23K0818-p25 + 23K0818-p26 + 23K0818-p27 + 23K0818-p28 + 23K0818-p29 + 23K0818-p30 From a0a2e1b04c8c85db2fcb9b42a3b157353f3ab960 Mon Sep 17 00:00:00 2001 From: Vertyshka Date: Thu, 19 Dec 2024 20:40:35 +0300 Subject: [PATCH 2/2] =?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=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=2031-32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- students/23K0818/23K0818-p31/pom.xml | 12 + .../mirea/practice/s0000001/task1/Node.java | 119 +++++ .../mirea/practice/s0000001/task1/Test.java | 15 + .../practice/s0000001/task1/TwoThreeTree.java | 464 ++++++++++++++++++ students/23K0818/23K0818-p32/pom.xml | 12 + .../practice/s0000001/task1/Trotter.java | 73 +++ students/23K0818/pom.xml | 2 + 7 files changed, 697 insertions(+) create mode 100644 students/23K0818/23K0818-p31/pom.xml create mode 100644 students/23K0818/23K0818-p31/src/main/java/ru/mirea/practice/s0000001/task1/Node.java create mode 100644 students/23K0818/23K0818-p31/src/main/java/ru/mirea/practice/s0000001/task1/Test.java create mode 100644 students/23K0818/23K0818-p31/src/main/java/ru/mirea/practice/s0000001/task1/TwoThreeTree.java create mode 100644 students/23K0818/23K0818-p32/pom.xml create mode 100644 students/23K0818/23K0818-p32/src/main/java/ru/mirea/practice/s0000001/task1/Trotter.java diff --git a/students/23K0818/23K0818-p31/pom.xml b/students/23K0818/23K0818-p31/pom.xml new file mode 100644 index 000000000..c5fe617a0 --- /dev/null +++ b/students/23K0818/23K0818-p31/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + 23K0818 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0818-p31 + diff --git a/students/23K0818/23K0818-p31/src/main/java/ru/mirea/practice/s0000001/task1/Node.java b/students/23K0818/23K0818-p31/src/main/java/ru/mirea/practice/s0000001/task1/Node.java new file mode 100644 index 000000000..5ef5b3435 --- /dev/null +++ b/students/23K0818/23K0818-p31/src/main/java/ru/mirea/practice/s0000001/task1/Node.java @@ -0,0 +1,119 @@ +package ru.mirea.practice.s0000001.task1; + +public class Node { + int numberOfKeys; + int[] key = new int[3]; + Node first; + Node second; + Node third; + Node fourth; + Node parents; + + boolean find(int k) { + for (int i = 0; i < numberOfKeys; i++) { + if (key[i] == k) { + return true; + } + } + return false; + } + + void swap(int x, int y) { + int tempInt = x; + x = y; + y = tempInt; + } + + void sort2(int x, int y) { + if (x > y) { + swap(x, y); + } + } + + void sort3(int x, int y, int z) { + if (x > y) { + swap(x, y); + } + + if (x > z) { + swap(x, y); + } + + if (y > z) { + swap(y, z); + } + } + + void sort() { + if (numberOfKeys == 2) { + sort2(key[0], key[1]); + } else if (numberOfKeys == 3) { + sort3(key[0], key[1], key[2]); + } + } + + void addKeyInNode(int k) { + key[numberOfKeys] = k; + numberOfKeys++; + sort(); + } + + void deleteKeyFromNode(int k) { + if (numberOfKeys >= 1 && key[0] == k) { + key[0] = key[1]; + key[1] = key[2]; + numberOfKeys--; + } else if (numberOfKeys == 2 && key[1] == k) { + key[1] = key[2]; + numberOfKeys--; + } + } + + void becomeNode2(int k, Node first, Node second) { + key[0] = k; + this.first = first; + this.second = second; + this.third = null; + this.fourth = null; + this.parents = null; + numberOfKeys = 1; + } + + boolean isLeaf() { + return first == null && second == null && third == null; + } + + public Node(int key) { + numberOfKeys = 1; + this.key[0] = key; + first = null; + second = null; + third = null; + fourth = null; + parents = null; + } + + public Node(int key, Node first, Node second, Node third, Node fourth, Node parents) { + numberOfKeys = 1; + this.key[0] = key; + this.first = first; + this.second = second; + this.third = third; + this.fourth = fourth; + this.parents = parents; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("["); + for (int i = 0; i < numberOfKeys; i++) { + sb.append(key[i]); + if (i < numberOfKeys - 1) { + sb.append(", "); + } + } + sb.append("]"); + return sb.toString(); + } +} diff --git a/students/23K0818/23K0818-p31/src/main/java/ru/mirea/practice/s0000001/task1/Test.java b/students/23K0818/23K0818-p31/src/main/java/ru/mirea/practice/s0000001/task1/Test.java new file mode 100644 index 000000000..fc6c6870f --- /dev/null +++ b/students/23K0818/23K0818-p31/src/main/java/ru/mirea/practice/s0000001/task1/Test.java @@ -0,0 +1,15 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class Test { + public static void main(String[] args) { + + TwoThreeTree tree = new TwoThreeTree(); + tree.root = tree.insert(tree.root, 50); + tree.root = tree.insert(tree.root, 30); + tree.root = tree.insert(tree.root, 70); + tree.root = tree.insert(tree.root, 20); + tree.root = tree.insert(tree.root, 40); + tree.printTree(); + + } +} diff --git a/students/23K0818/23K0818-p31/src/main/java/ru/mirea/practice/s0000001/task1/TwoThreeTree.java b/students/23K0818/23K0818-p31/src/main/java/ru/mirea/practice/s0000001/task1/TwoThreeTree.java new file mode 100644 index 000000000..e1d828e4d --- /dev/null +++ b/students/23K0818/23K0818-p31/src/main/java/ru/mirea/practice/s0000001/task1/TwoThreeTree.java @@ -0,0 +1,464 @@ +package ru.mirea.practice.s0000001.task1; + +import java.util.LinkedList; +import java.util.Queue; + + +public class TwoThreeTree { + Node root; + + public Node insert(Node root, int key) { + if (root == null) { + return new Node(key); + } + if (root.isLeaf()) { + root.addKeyInNode(key); + } else if (key <= root.key[0]) { + root.first = insert(root.first, key); + } else if (root.numberOfKeys == 1 || root.numberOfKeys == 2 && key <= root.key[1]) { + root.second = insert(root.second, key); + } else { + root.third = insert(root.third, key); + } + return split(root); + } + + Node split(Node node) { + if (node.numberOfKeys < 3) { + return node; + } + Node x = new Node(node.key[0], node.first, node.second, null, null, node.parents); + Node y = new Node(node.key[2], node.third, node.fourth, null, null, node.parents); + + // Устанавливаем правильных родителей + if (x.first != null) { + x.first.parents = x; + } + + if (x.second != null) { + x.second.parents = x; + } + + if (y.first != null) { + x.first.parents = y; + } + + if (y.second != null) { + y.second.parents = y; + } + + if (node.parents != null) { + node.parents.addKeyInNode(node.key[1]); + // Убираем ссылку на разделяемый узел из родительского узла + if (node.parents.first == node) { + node.parents.first = null; + } else if (node.parents.second == node) { + node.parents.second = null; + } else if (node.parents.third == node) { + node.parents.third = null; + } + + // Обновляем ссылки на дочерные узлы в родительском узле + if (node.parents.first == null) { + node.parents.fourth = node.parents.third; + node.parents.third = node.parents.second; + node.parents.second = y; + node.parents.first = x; + } else if (node.parents.second == null) { + node.parents.fourth = node.parents.third; + node.parents.third = y; + node.parents.second = x; + } else { + node.parents.fourth = y; + node.parents.third = x; + } + + Node temp = node.parents; + node = null; + return temp; + } else { + x.parents = node; + y.parents = node; + node.becomeNode2(node.key[1], x, y); + return node; + } + } + + // Поиск ключа + Node search(Node node, int key) { + if (node == null) { + return null; + } + + if (node.find(key)) { + return node; + } else if (key < node.key[0]) { + return search(node.first, key); + } else if (node.numberOfKeys == 2 && key < node.key[1] || node.numberOfKeys == 1) { + return search(node.second, key); + } else if (node.numberOfKeys == 2) { + return search(node.third, key); + } + return null; + } + + // Поиск минимального ключа + Node searchMin(Node node) { + if (node == null) { + return node; + } + + if (node.first == null) { + return node; + } else { + return searchMin(node.first); + } + } + + // Удаление ключа + Node remove(Node node, int key) { + Node item = search(node, key); + + if (item == null) { + return node; + } + + Node min = null; + if (item.key[0] == key) { + min = searchMin(item.second); + } else { + min = searchMin(item.third); + } + + if (min != null) { + int z = key == item.key[0] ? item.key[0] : item.key[1]; + item.swap(z, min.key[0]); + item = min; + } + + item.deleteKeyFromNode(key); + return fix(item); + } + + // Исправление дерева после удаления ключа + Node fix(Node node) { + if (node.numberOfKeys == 0 && node.parents == null) { + return null; + } + + if (node.numberOfKeys != 0) { + if (node.parents != null) { + return fix(node.parents); + } else { + return node; + } + } + + Node parent = node.parents; + if (parent.first.numberOfKeys == 2 || parent.second.numberOfKeys == 2 || parent.numberOfKeys == 2) { + node = redistribute(node); + } else if (parent.numberOfKeys == 2 && parent.third.numberOfKeys == 2) { + node = redistribute(node); + } else { + node = merge(node); + } + return fix(node); + } + + // Перераспределение + Node redistribute(Node leaf) { + Node parent = leaf.parents; + Node first = parent.first; + Node second = parent.second; + Node third = parent.third; + + if (parent.numberOfKeys == 2 && first.numberOfKeys < 2 && second.numberOfKeys < 2 + && third.numberOfKeys < 2) { + + if (first == leaf) { + parent.first = parent.second; + parent.second = parent.third; + parent.third = null; + parent.first.addKeyInNode(parent.key[0]); + parent.first.third = parent.first.second; + parent.first.second = parent.first.first; + + + if (leaf.first != null) { + parent.first.first = leaf.first; + } else if (leaf.second != null) { + parent.first.first = leaf.second; + } + + if (parent.first.parents == null) { + parent.first.first.parents = parent.first; + } + + parent.deleteKeyFromNode(parent.key[0]); + first = null; + + } else if (second == leaf) { + first.addKeyInNode(parent.key[0]); + parent.deleteKeyFromNode(parent.key[0]); + if (leaf.first != null) { + first.third = leaf.first; + } else if (leaf.second != null) { + first.third = leaf.second; + } + + if (first.third != null) { + first.third.parents = first; + } + parent.second = parent.third; + parent.third = null; + second = null; + + } else if (third == leaf) { + second.addKeyInNode(parent.key[1]); + parent.third = null; + parent.deleteKeyFromNode(parent.key[1]); + + if (leaf.first != null) { + second.third = leaf.first; + } else if (leaf.second != null) { + second.third = leaf.second; + } + + if (second.third != null) { + second.third.parents = second; + } + third = null; + } + } else if (parent.numberOfKeys == 2 && (first.numberOfKeys == 2 + || second.numberOfKeys == 2 || third.numberOfKeys == 2)) { + + if (third == leaf) { + + if (leaf.first != null) { + leaf.second = leaf.first; + leaf.first = null; + } + + leaf.addKeyInNode(parent.key[1]); + + if (second.numberOfKeys == 2) { + parent.key[1] = second.key[1]; + leaf.first = second.third; + second.third = null; + + if (leaf.first != null) { + leaf.first.parents = leaf; + } + } else if (first.numberOfKeys == 2) { + parent.key[1] = second.key[0]; + leaf.first = second.second; + second.second = second.first; + + if (leaf.first != null) { + leaf.first.parents = leaf; + } + + second.key[0] = parent.key[0]; + parent.key[0] = first.key[1]; + first.deleteKeyFromNode(first.key[1]); + second.first = first.third; + + if (second.first != null) { + second.first.parents = second; + } + first.third = null; + } + + + } else if (second == leaf) { + + if (third.numberOfKeys == 2) { + + if (leaf.first == null) { + leaf.first = leaf.second; + leaf.second = null; + } + + second.addKeyInNode(parent.key[1]); + parent.key[1] = third.key[0]; + third.deleteKeyFromNode(third.key[0]); + second.second = third.first; + + if (second.second != null) { + second.second.parents = second; + } + third.first = third.second; + third.second = third.third; + third.third = null; + } else if (first.numberOfKeys == 2) { + if (leaf.second == null) { + leaf.second = leaf.first; + leaf.first = null; + } + second.addKeyInNode(parent.key[0]); + parent.key[0] = first.key[1]; + first.deleteKeyFromNode(first.key[1]); + second.first = first.third; + if (second.first != null) { + second.first.parents = second; + } + first.third = null; + } + + + } else if (first == leaf) { + + if (leaf.first == null) { + leaf.first = leaf.second; + leaf.second = null; + } + first.addKeyInNode(parent.key[0]); + + if (second.numberOfKeys == 2) { + parent.key[0] = second.key[0]; + second.deleteKeyFromNode(second.key[0]); + first.second = second.first; + + if (first.second != null) { + first.second.parents = first; + } + second.first = second.second; + second.second = second.third; + second.third = null; + } else if (third.numberOfKeys == 2) { + parent.key[0] = second.key[0]; + second.key[0] = parent.key[1]; + parent.key[1] = third.key[0]; + third.deleteKeyFromNode(third.key[0]); + first.second = second.first; + + if (first.second != null) { + first.second.parents = first; + } + second.first = second.second; + second.second = third.first; + + if (second.second != null) { + second.second.parents = second; + } + third.first = third.second; + third.second = third.third; + third.third = null; + } + } + } else if (parent.numberOfKeys == 1) { + leaf.addKeyInNode(parent.key[0]); + + if (first == leaf && second.numberOfKeys == 2) { + parent.key[0] = second.key[0]; + second.deleteKeyFromNode(second.key[0]); + + if (leaf.first == null) { + leaf.first = leaf.second; + } + leaf.second = second.first; + second.first = second.second; + second.second = second.third; + second.third = null; + + if (leaf.second != null) { + leaf.second.parents = leaf; + } + } else if (second == leaf && first.numberOfKeys == 2) { + parent.key[0] = first.key[1]; + first.deleteKeyFromNode(first.key[1]); + + if (leaf.second == null) { + leaf.second = leaf.first; + } + leaf.first = first.third; + first.third = null; + + if (leaf.first != null) { + leaf.first.parents = leaf; + } + } + } + return parent; + } + + // Склеивание + Node merge(Node leaf) { + Node parent = leaf.parents; + + if (parent.first == leaf) { + parent.second.addKeyInNode(parent.key[0]); + parent.second.third = parent.second.second; + parent.second.second = parent.second.first; + + if (leaf.first != null) { + parent.second.first = leaf.first; + } else if (leaf.second != null) { + parent.second.first = leaf.second; + } + + if (parent.second.first != null) { + parent.second.first.parents = parent.second; + } + parent.deleteKeyFromNode(parent.key[0]); + parent.first = null; + } else if (parent.second == leaf) { + parent.first.addKeyInNode(parent.key[0]); + + if (leaf.first != null) { + parent.first.third = leaf.first; + } else if (leaf.second != null) { + parent.first.third = leaf.second; + } + + if (parent.first.third != null) { + parent.first.third.parents = parent.first; + } + parent.deleteKeyFromNode(parent.key[0]); + parent.second = null; + } + + if (parent.parents == null) { + Node temp = null; + if (parent.first != null) { + temp = parent.first; + } else { + temp = parent.second; + } + temp.parents = null; + parent = null; + return temp; + } + + return parent; + } + + public void printTree() { + if (root == null) { + System.out.println("Tree is empty."); + return; + } + + Queue queue = new LinkedList<>(); + queue.add(root); + + while (!queue.isEmpty()) { + int levelSize = queue.size(); // Количество узлов на текущем уровне + for (int i = 0; i < levelSize; i++) { + Node current = queue.poll(); + System.out.print(current + " "); // Печатаем текущий узел + + if (current.first != null) { + queue.add(current.first); + } + if (current.second != null) { + queue.add(current.second); + } + if (current.third != null) { + queue.add(current.third); + } + } + System.out.println(); + } + } +} diff --git a/students/23K0818/23K0818-p32/pom.xml b/students/23K0818/23K0818-p32/pom.xml new file mode 100644 index 000000000..a271eb348 --- /dev/null +++ b/students/23K0818/23K0818-p32/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + 23K0818 + ru.mirea.practice + 2024.1 + ../pom.xml + + 23K0818-p32 + diff --git a/students/23K0818/23K0818-p32/src/main/java/ru/mirea/practice/s0000001/task1/Trotter.java b/students/23K0818/23K0818-p32/src/main/java/ru/mirea/practice/s0000001/task1/Trotter.java new file mode 100644 index 000000000..83430d8f8 --- /dev/null +++ b/students/23K0818/23K0818-p32/src/main/java/ru/mirea/practice/s0000001/task1/Trotter.java @@ -0,0 +1,73 @@ +package ru.mirea.practice.s0000001.task1; + +public abstract class Trotter { + + public static void printPermutation(int[] permutation) { + for (int num : permutation) { + System.out.print(num + " "); + } + System.out.println(); + } + + public static void generatePermutations(int n) { + int[] permutation = new int[n]; + int[] direction = new int[n]; + + for (int i = 0; i < n; i++) { + permutation[i] = i + 1; + direction[i] = 0; + } + + printPermutation(permutation); + + boolean hasNext = true; + while (hasNext) { + int largestMobile = -1; + int largestMobileIndex = -1; + + for (int i = 0; i < n; i++) { + if (direction[i] == 0 && i > 0 && permutation[i] > permutation[i - 1] + || direction[i] == 1 && i < n - 1 && permutation[i] > permutation[i + 1]) { + + if (permutation[i] > largestMobile) { + largestMobile = permutation[i]; + largestMobileIndex = i; + } + } + } + + if (largestMobile == -1) { + hasNext = false; + } else { + int index = largestMobileIndex; + int temp = permutation[index]; + + + if (direction[index] == 0) { + permutation[index] = permutation[index - 1]; + permutation[index - 1] = temp; + direction[index] = 1; + direction[index - 1] = 0; + } else { + permutation[index] = permutation[index + 1]; + permutation[index + 1] = temp; + direction[index] = 0; + direction[index + 1] = 1; + } + + for (int i = 0; i < n; i++) { + if (permutation[i] > largestMobile) { + direction[i] = 1 - direction[i]; + } + } + + printPermutation(permutation); + } + } + } + + public static void main(String[] args) { + int n = 3; + generatePermutations(n); + } +} diff --git a/students/23K0818/pom.xml b/students/23K0818/pom.xml index 59afb2c54..903d0405f 100644 --- a/students/23K0818/pom.xml +++ b/students/23K0818/pom.xml @@ -42,6 +42,8 @@ 23K0818-p28 23K0818-p29 23K0818-p30 + 23K0818-p31 + 23K0818-p32