From 6efe5cbcdabd724f81bd06678b529b6532b75e8c Mon Sep 17 00:00:00 2001
From: Timmmmofey <153191260+Timmmmofey@users.noreply.github.com>
Date: Fri, 13 Dec 2024 01:11:06 +0300
Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?=
=?UTF-8?q?=D0=BE=D1=80=D0=BD=D1=8B=D0=B5=2031=20=D0=B8=2032?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
students/23K1302/23K1302-p31/pom.xml | 13 ++
.../java/ru/mirea/practice/s0000001/PROCS.txt | 4 +
.../ru/mirea/practice/s0000001/Processor.java | 26 ++++
.../s0000001/ProcessorTreeManager.java | 78 ++++++++++++
.../mirea/practice/s0000001/TwoThreeTree.java | 117 ++++++++++++++++++
students/23K1302/23K1302-p32/pom.xml | 13 ++
.../practice/s0000001/JohnsonTrotter.java | 82 ++++++++++++
students/23K1302/pom.xml | 2 +
8 files changed, 335 insertions(+)
create mode 100644 students/23K1302/23K1302-p31/pom.xml
create mode 100644 students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/PROCS.txt
create mode 100644 students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/Processor.java
create mode 100644 students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/ProcessorTreeManager.java
create mode 100644 students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/TwoThreeTree.java
create mode 100644 students/23K1302/23K1302-p32/pom.xml
create mode 100644 students/23K1302/23K1302-p32/src/main/java/ru/mirea/practice/s0000001/JohnsonTrotter.java
diff --git a/students/23K1302/23K1302-p31/pom.xml b/students/23K1302/23K1302-p31/pom.xml
new file mode 100644
index 000000000..90d8d8b04
--- /dev/null
+++ b/students/23K1302/23K1302-p31/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K1302
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K1302-p31
+ Задание 31
+
diff --git a/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/PROCS.txt b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/PROCS.txt
new file mode 100644
index 000000000..436134baa
--- /dev/null
+++ b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/PROCS.txt
@@ -0,0 +1,4 @@
+2, Intel Pentium 4, 2.0, 256, 0.400, 664, 734
+5, Intel Itanium, 0.800, 96, 0.266, 365, 701
+6, AMD Athlon XP, 1.6, 256, 0.266, 701, 634
+1, IBM Power 4, 1.3, 16384, 0.400, 814, 1169
diff --git a/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/Processor.java b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/Processor.java
new file mode 100644
index 000000000..e32353b35
--- /dev/null
+++ b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/Processor.java
@@ -0,0 +1,26 @@
+package ru.mirea.practice.s0000001;
+
+class Processor {
+ int key;
+ String name;
+ double clockSpeed;
+ int cacheSize;
+ double busSpeed;
+ int specInt;
+ int specFp;
+
+ public Processor(int key, String name, double clockSpeed, int cacheSize, double busSpeed, int specInt, int specFp) {
+ this.key = key;
+ this.name = name;
+ this.clockSpeed = clockSpeed;
+ this.cacheSize = cacheSize;
+ this.busSpeed = busSpeed;
+ this.specInt = specInt;
+ this.specFp = specFp;
+ }
+
+ @Override
+ public String toString() {
+ return key + "," + name + "," + clockSpeed + "," + cacheSize + "," + busSpeed + "," + specInt + "," + specFp;
+ }
+}
diff --git a/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/ProcessorTreeManager.java b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/ProcessorTreeManager.java
new file mode 100644
index 000000000..48d5b99b3
--- /dev/null
+++ b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/ProcessorTreeManager.java
@@ -0,0 +1,78 @@
+package ru.mirea.practice.s0000001;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Scanner;
+
+public class ProcessorTreeManager {
+ private static final String FILE_NAME = "PROCS.TXT";
+ private TwoThreeTree tree = new TwoThreeTree();
+
+ public void loadFromFile() throws IOException {
+ try (BufferedReader br = new BufferedReader(new FileReader(FILE_NAME))) {
+ String line;
+ while ((line = br.readLine()) != null) {
+ String[] parts = line.split(",");
+ int key = Integer.parseInt(parts[0]);
+ String name = parts[1];
+ double clockSpeed = Double.parseDouble(parts[2]);
+ int cacheSize = Integer.parseInt(parts[3]);
+ double busSpeed = Double.parseDouble(parts[4]);
+ int specInt = Integer.parseInt(parts[5]);
+ int specFp = Integer.parseInt(parts[6]);
+ tree.insert(new Processor(key, name, clockSpeed, cacheSize, busSpeed, specInt, specFp));
+ }
+ }
+ }
+
+
+ public void saveToFile() throws IOException {
+ try (BufferedWriter bw = new BufferedWriter(new FileWriter(FILE_NAME))) {
+ for (Processor p : tree.getAllRecords()) {
+ bw.write(p.toString());
+ bw.newLine();
+ }
+ }
+ }
+
+ public void run() throws IOException {
+ try (Scanner scanner = new Scanner(System.in)) { // Используем try-with-resources
+ while (true) {
+ System.out.print("Enter command: ");
+ String command = scanner.nextLine();
+ switch (command.charAt(0)) {
+ case 'L':
+ tree.printTree();
+ break;
+ case 'D':
+ int deleteKey = Integer.parseInt(command.substring(2));
+ tree.delete(deleteKey);
+ break;
+ case 'A':
+ int addKey = Integer.parseInt(command.substring(2));
+ Processor newProcessor = new Processor(addKey, "Default Name", 3.5, 8, 1600, 1000, 2000);
+ tree.insert(newProcessor);
+ break;
+ case 'S':
+ saveToFile();
+ break;
+ case 'E':
+ return; // Автоматически закроет Scanner
+ default:
+ System.out.println("Invalid command");
+ break;
+ }
+ }
+ }
+ }
+
+
+ public static void main(String[] args) throws IOException {
+ ProcessorTreeManager manager = new ProcessorTreeManager();
+ manager.loadFromFile();
+ manager.run();
+ }
+}
diff --git a/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/TwoThreeTree.java b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/TwoThreeTree.java
new file mode 100644
index 000000000..162d78a98
--- /dev/null
+++ b/students/23K1302/23K1302-p31/src/main/java/ru/mirea/practice/s0000001/TwoThreeTree.java
@@ -0,0 +1,117 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+
+class TwoThreeTree {
+ private class Node {
+ boolean isLeaf;
+ List keys = new ArrayList<>();
+ List children = new ArrayList<>();
+
+ Node(boolean isLeaf) {
+ this.isLeaf = isLeaf;
+ }
+ }
+
+ private Node root = new Node(true);
+
+ public void insert(Processor p) {
+ if (root.isLeaf && root.keys.size() < 2) {
+ root.keys.add(p);
+ root.keys.sort(Comparator.comparingInt(a -> a.key));
+ } else {
+ Node newRoot = insert(root, p);
+ if (newRoot != null) {
+ Node oldRoot = root;
+ root = new Node(false);
+ root.keys.add(newRoot.keys.get(0));
+ root.children.add(oldRoot);
+ root.children.add(newRoot);
+ }
+ }
+ }
+
+ private Node insert(Node node, Processor p) {
+ if (node.isLeaf) {
+ node.keys.add(p);
+ node.keys.sort(Comparator.comparingInt(a -> a.key));
+ if (node.keys.size() > 2) {
+ return split(node);
+ }
+ return null;
+ }
+
+ int idx = 0;
+ while (idx < node.keys.size() && p.key > node.keys.get(idx).key) {
+ idx++;
+ }
+ Node newChild = insert(node.children.get(idx), p);
+ if (newChild != null) {
+ node.keys.add(idx, newChild.keys.get(0));
+ node.children.add(idx + 1, newChild);
+ if (node.keys.size() > 2) {
+ return split(node);
+ }
+ }
+ return null;
+ }
+
+ private Node split(Node node) {
+ Node sibling = new Node(node.isLeaf);
+ sibling.keys.add(node.keys.remove(2));
+ if (!node.isLeaf) {
+ sibling.children.add(node.children.remove(2));
+ sibling.children.add(node.children.remove(2));
+ }
+ return sibling;
+ }
+
+ public void delete(int key) {
+ // пустота
+ }
+
+ public void printTree() {
+ Queue queue = new LinkedList<>();
+ queue.add(root);
+ while (!queue.isEmpty()) {
+ int size = queue.size();
+ for (int i = 0; i < size; i++) {
+ Node node = queue.poll();
+ if (node.isLeaf) {
+ for (Processor p : node.keys) {
+ System.out.print(p.key + " ");
+ }
+ } else {
+ for (int j = 0; j < node.keys.size(); j++) {
+ System.out.print(node.keys.get(j).key + "-");
+ }
+ for (Node child : node.children) {
+ queue.add(child);
+ }
+ }
+ System.out.print(" | ");
+ }
+ System.out.println();
+ }
+ }
+
+ public List getAllRecords() {
+ List records = new ArrayList<>();
+ collectRecords(root, records);
+ return records;
+ }
+
+ private void collectRecords(Node node, List records) {
+ if (node.isLeaf) {
+ records.addAll(node.keys);
+ } else {
+ for (Node child : node.children) {
+ collectRecords(child, records);
+ }
+ }
+ }
+}
diff --git a/students/23K1302/23K1302-p32/pom.xml b/students/23K1302/23K1302-p32/pom.xml
new file mode 100644
index 000000000..fb09eb900
--- /dev/null
+++ b/students/23K1302/23K1302-p32/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K1302
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K1302-p32
+ Задание 32
+
diff --git a/students/23K1302/23K1302-p32/src/main/java/ru/mirea/practice/s0000001/JohnsonTrotter.java b/students/23K1302/23K1302-p32/src/main/java/ru/mirea/practice/s0000001/JohnsonTrotter.java
new file mode 100644
index 000000000..0172f578e
--- /dev/null
+++ b/students/23K1302/23K1302-p32/src/main/java/ru/mirea/practice/s0000001/JohnsonTrotter.java
@@ -0,0 +1,82 @@
+package ru.mirea.practice.s0000001;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public final class JohnsonTrotter {
+
+ private JohnsonTrotter() {
+ // dhtnsb
+ }
+
+ static class Element {
+ int value;
+ boolean direction;
+
+ Element(int value) {
+ this.value = value;
+ this.direction = false;
+ }
+ }
+
+ public static void main(String[] args) {
+ int n = 4;
+ generatePermutations(n);
+ }
+
+ public static void generatePermutations(int n) {
+ List elements = new ArrayList<>();
+ for (int i = 1; i <= n; i++) {
+ elements.add(new Element(i));
+ }
+
+ printPermutation(elements);
+
+ while (true) {
+ int largestMovableIndex = getLargestMovableIndex(elements);
+ if (largestMovableIndex == -1) {
+ break;
+ }
+
+ Element largestMovable = elements.get(largestMovableIndex);
+ int swapIndex = largestMovable.direction ? largestMovableIndex + 1 : largestMovableIndex - 1;
+ swap(elements, largestMovableIndex, swapIndex);
+
+ for (Element e : elements) {
+ if (e.value > largestMovable.value) {
+ e.direction = !e.direction;
+ }
+ }
+
+ printPermutation(elements);
+ }
+ }
+
+ private static int getLargestMovableIndex(List elements) {
+ int largestMovableIndex = -1;
+ for (int i = 0; i < elements.size(); i++) {
+ Element current = elements.get(i);
+ int neighborIndex = current.direction ? i + 1 : i - 1;
+
+ if (neighborIndex >= 0 && neighborIndex < elements.size() && current.value > elements.get(neighborIndex).value) {
+ if (largestMovableIndex == -1 || current.value > elements.get(largestMovableIndex).value) {
+ largestMovableIndex = i;
+ }
+ }
+ }
+ return largestMovableIndex;
+ }
+
+ private static void swap(List elements, int i, int j) {
+ Element temp = elements.get(i);
+ elements.set(i, elements.get(j));
+ elements.set(j, temp);
+ }
+
+ private static void printPermutation(List elements) {
+ for (Element e : elements) {
+ System.out.print(e.value + " ");
+ }
+ System.out.println();
+ }
+}
diff --git a/students/23K1302/pom.xml b/students/23K1302/pom.xml
index 7ecc7ec7c..3e4b24b64 100644
--- a/students/23K1302/pom.xml
+++ b/students/23K1302/pom.xml
@@ -45,5 +45,7 @@
23K1302-p29
23K1302-p30.1
23K1302-p30.2
+ 23K1302-p31
+ 23K1302-p32